diff --git a/aeon/dj_pipeline/webapps/sciviz/docker-compose-remote.yaml b/aeon/dj_pipeline/webapps/sciviz/docker-compose-remote.yaml index 35742345..c4129f27 100644 --- a/aeon/dj_pipeline/webapps/sciviz/docker-compose-remote.yaml +++ b/aeon/dj_pipeline/webapps/sciviz/docker-compose-remote.yaml @@ -33,7 +33,7 @@ services: sci-viz: cpus: 2.0 mem_limit: 4g - image: jverswijver/sci-viz:2.3.4 + image: jverswijver/sci-viz:2.3.5-beta environment: - CHOKIDAR_USEPOLLING=true - REACT_APP_DJSCIVIZ_BACKEND_PREFIX=/api diff --git a/aeon/dj_pipeline/webapps/sciviz/specsheet.yaml b/aeon/dj_pipeline/webapps/sciviz/specsheet.yaml index 2227d49c..a65e457e 100644 --- a/aeon/dj_pipeline/webapps/sciviz/specsheet.yaml +++ b/aeon/dj_pipeline/webapps/sciviz/specsheet.yaml @@ -50,7 +50,7 @@ SciViz: route: /colony_page_pyrat_subjects x: 0 y: 0 - height: 0.6 + height: 1 width: 1 type: antd-table restriction: > @@ -64,7 +64,7 @@ SciViz: Pyrat User Entry: route: /colony_page_pyrat_user_entry x: 0 - y: 0.6 + y: 1 height: 0.3 width: 1 type: form @@ -81,19 +81,19 @@ SciViz: input: Pyrat Responsible ID destination: responsible_id - Pyrat Sync Task: - route: /colony_page_pyrat_sync_task - x: 0 - y: 0.9 - height: 0.3 - width: 1 - type: form - tables: - - aeon_subject.PyratIngestionTask - map: - - type: attribute - input: Task Scheduled Time - destination: pyrat_task_scheduled_time + Pyrat Sync Task: + route: /colony_page_pyrat_sync_task + x: 0 + y: 1.3 + height: 0.3 + width: 1 + type: form + tables: + - aeon_subject.PyratIngestionTask + map: + - type: attribute + input: Task Scheduled Time + destination: pyrat_task_scheduled_time ExperimentEntry: route: /experiment_entry @@ -154,9 +154,9 @@ SciViz: destination: aeon_subject.Subject New Experiment Note: - route: /exp_subject_form + route: /exp_note_form x: 0 - y: 0.5 + y: 0.8 height: 0.3 width: 1 type: form @@ -179,7 +179,7 @@ SciViz: New Experiment Type: route: /exp_type_form x: 0 - y: 0.8 + y: 1.1 height: 0.3 width: 1 type: form @@ -210,9 +210,9 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition, aeon_analysis): - acquisition = aeon_acquisition - visit_analysis = aeon_analysis + def dj_query(aeon_archived_exp02_acquisition, aeon_archived_exp02_analysis): + acquisition = aeon_archived_exp02_acquisition + visit_analysis = aeon_archived_exp02_analysis query = acquisition.Experiment.Subject.aggr(visit_analysis.VisitEnd.join(visit_analysis.Visit, left=True), first_visit_start='MIN(visit_start)', last_visit_end='MAX(visit_end)', total_visit_count='COUNT(visit_start)', total_visit_duration='SUM(visit_duration)') query = query.proj("first_visit_start", "last_visit_end", "total_visit_count", total_visit_duration="CAST(total_visit_duration AS DOUBLE(10, 3))") return {'query': query, 'fetch_args': {'order_by': 'last_visit_end DESC'}} @@ -237,7 +237,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_analysis): + def dj_query(aeon_archived_exp02_analysis): + aeon_analysis = aeon_archived_exp02_analysis query = aeon_analysis.Visit.aggr(aeon_analysis.VisitSummary, ..., duration="SUM(day_duration)", total_distance_travelled="SUM(total_distance_travelled)", total_pellet_count="SUM(total_pellet_count)", total_wheel_distance_travelled="SUM(total_wheel_distance_travelled)", keep_all_rows=True) query = query.join(aeon_analysis.VisitEnd, left=True) query = query.proj("visit_end", total_pellet_count="CAST(total_pellet_count AS DOUBLE)", duration="CAST(duration AS DOUBLE(10, 3))", total_distance_travelled="CAST(total_distance_travelled AS DOUBLE(10, 3))", total_wheel_distance_travelled="CAST(total_wheel_distance_travelled AS DOUBLE(10, 3))") @@ -255,9 +256,9 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - acquisition = aeon_acquisition - return {'query': aeon_acquisition.Experiment(), 'fetch_args': []} + def dj_query(aeon_archived_exp01_acquisition): + acquisition = aeon_archived_exp01_acquisition + return {'query': acquisition.Experiment(), 'fetch_args': []} component_templates: comp3: route: /avg_time_distribution @@ -266,8 +267,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp01_report): + report = aeon_archived_exp01_report return {'query': report.ExperimentTimeDistribution(), 'fetch_args': ['time_distribution_plotly']} SubjectReport: @@ -282,9 +283,9 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - acquisition = aeon_acquisition - return {'query': aeon_acquisition.Experiment.Subject & {'experiment_name': 'exp0.1-r0'}, 'fetch_args': []} + def dj_query(aeon_archived_exp01_acquisition): + acquisition = aeon_archived_exp01_acquisition + return {'query': acquisition.Experiment.Subject & {'experiment_name': 'exp0.1-r0'}, 'fetch_args': []} component_templates: comp1: route: /subject_meta @@ -293,8 +294,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - return dict(query=aeon_acquisition.Experiment.Subject(), fetch_args=[]) + def dj_query(aeon_archived_exp01_acquisition): + return dict(query=aeon_archived_exp01_acquisition.Experiment.Subject(), fetch_args=[]) comp2: route: /reward_diff_plot type: plot:plotly:stored_json @@ -302,8 +303,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp01_report): + report = aeon_archived_exp01_report return {'query': report.SubjectRewardRateDifference(), 'fetch_args': ['reward_rate_difference_plotly']} comp3: route: /wheel_distance_travelled @@ -312,8 +313,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp01_report): + report = aeon_archived_exp01_report return {'query': report.SubjectWheelTravelledDistance(), 'fetch_args': ['wheel_travelled_distance_plotly']} PerSubjectReport: @@ -337,8 +338,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - return dict(query=aeon_acquisition.Experiment.Subject(), fetch_args=[]) + def dj_query(aeon_archived_exp01_acquisition): + return dict(query=aeon_archived_exp01_acquisition.Experiment.Subject(), fetch_args=[]) comp2: route: /per_subject_reward_diff_plot x: 0 @@ -350,8 +351,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp01_report): + report = aeon_archived_exp01_report return {'query': report.SubjectRewardRateDifference(), 'fetch_args': ['reward_rate_difference_plotly']} comp3: route: /per_subject_wheel_distance_travelled @@ -364,8 +365,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp01_report): + report = aeon_archived_exp01_report return {'query': report.SubjectWheelTravelledDistance(), 'fetch_args': ['wheel_travelled_distance_plotly']} PerVisitReport: @@ -389,7 +390,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_analysis): + def dj_query(aeon_archived_exp02_analysis): + aeon_analysis = aeon_archived_exp02_analysis query = aeon_analysis.Visit.aggr(aeon_analysis.VisitSummary, ..., duration="SUM(day_duration)", total_distance_travelled="SUM(total_distance_travelled)", total_pellet_count="SUM(total_pellet_count)", total_wheel_distance_travelled="SUM(total_wheel_distance_travelled)", keep_all_rows=True) query = query.join(aeon_analysis.VisitEnd, left=True) query = query.proj("visit_end", total_pellet_count="CAST(total_pellet_count AS DOUBLE)", duration="CAST(duration AS DOUBLE(10, 3))", total_distance_travelled="CAST(total_distance_travelled AS DOUBLE(10, 3))", total_wheel_distance_travelled="CAST(total_wheel_distance_travelled AS DOUBLE(10, 3))") @@ -405,8 +407,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): - report = aeon_report + def dj_query(aeon_archived_exp02_report): + report = aeon_archived_exp02_report return {'query': report.VisitDailySummaryPlot(), 'fetch_args': ['summary_plot_png']} Visits247: @@ -421,7 +423,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return {'query': aeon_report.VisitDailySummaryPlot.proj(), 'fetch_args': []} component_templates: comp1: @@ -431,7 +434,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['pellet_count_plotly']) comp2: route: /visit_daily_summary_wheel_distance_travelled @@ -440,7 +444,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['wheel_distance_travelled_plotly']) comp3: route: /visit_daily_summary_total_distance_travelled @@ -449,7 +454,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['total_distance_travelled_plotly']) comp4: route: /visit_daily_summary_weight_patch @@ -458,7 +464,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['weight_patch_plotly']) comp5: route: /visit_daily_summary_foraging_bouts @@ -467,7 +474,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['foraging_bouts_plotly']) comp6: route: /visit_daily_summary_foraging_bouts_pellet_count @@ -476,7 +484,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['foraging_bouts_pellet_count_plotly']) comp7: route: /visit_daily_summary_foraging_bouts_duration @@ -485,7 +494,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['foraging_bouts_duration_plotly']) comp8: route: /visit_daily_summary_region_time_fraction_daily @@ -494,7 +504,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['region_time_fraction_daily_plotly']) comp9: route: /visit_daily_summary_region_time_fraction_hourly @@ -503,9 +514,133 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_report): + def dj_query(aeon_archived_exp02_report): + aeon_report = aeon_archived_exp02_report return dict(query=aeon_report.VisitDailySummaryPlot(), fetch_args=['region_time_fraction_hourly_plotly']) + BlockAnalysis: + route: /block_analysis + grids: + grid3: + type: fixed + columns: 1 + row_height: 700 + components: + BlockAnalysis: + route: /block_analysis_grid + link: /per_block_report + x: 0 + y: 0 + height: 1 + width: 1 + type: antd-table + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_analysis.Block * aeon_analysis.BlockAnalysis, 'fetch_args': {'order_by': 'block_end DESC'}} + + PerBlockReport: + hidden: true + route: /per_block_report + grids: + per_block_report: + type: fixed + route: /per_block_report + columns: 1 + row_height: 1500 + components: + comp1: + route: /per_block_meta + x: 0 + y: 0 + height: 0.2 + width: 0.8 + type: metadata + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + query = aeon_analysis.Block * aeon_analysis.BlockAnalysis + return dict(query=query, fetch_args=[]) + comp2: + route: /subject_positions_plot + x: 0 + y: 0.2 + height: 0.5 + width: 0.8 + type: plot:plotly:stored_json + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_test_analysis.BlockPlots(), 'fetch_args': ['subject_positions_plot']} + comp3: + route: /subject_weights_plot + x: 0 + y: 0.7 + height: 0.5 + width: 0.8 + type: plot:plotly:stored_json + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_test_analysis.BlockPlots(), 'fetch_args': ['subject_weights_plot']} + + comp4: + route: /patch_distance_travelled_plot + x: 0 + y: 1.2 + height: 0.5 + width: 0.8 + type: plot:plotly:stored_json + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_test_analysis.BlockPlots(), 'fetch_args': ['patch_distance_travelled_plot']} + + comp5: + route: /patch_rate_plot + x: 0 + y: 1.7 + height: 0.4 + width: 0.6 + type: plot:plotly:stored_json + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_test_analysis.BlockPlots(), 'fetch_args': ['patch_rate_plot']} + + comp6: + route: /cumulative_pellet_plot + x: 0 + y: 2.1 + height: 0.4 + width: 0.6 + type: plot:plotly:stored_json + restriction: > + def restriction(**kwargs): + return dict(**kwargs) + dj_query: > + def dj_query(aeon_test_analysis): + aeon_analysis = aeon_test_analysis + return {'query': aeon_test_analysis.BlockPlots(), 'fetch_args': ['cumulative_pellet_plot']} + VideoStream: route: /videostream grids: @@ -526,8 +661,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - acquisition = aeon_acquisition + def dj_query(aeon_archived_exp02_acquisition): + acquisition = aeon_archived_exp02_acquisition return {'query': aeon_acquisition.Experiment(), 'fetch_args': ['experiment_name']} camera_dropdown: x: 0 @@ -542,8 +677,8 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - acquisition = aeon_acquisition + def dj_query(aeon_archived_exp02_acquisition): + acquisition = aeon_archived_exp02_acquisition q = dj.U('camera_description') & acquisition.ExperimentCamera return {'query': q, 'fetch_args': ['camera_description']} time_range_selector: @@ -574,7 +709,7 @@ SciViz: def restriction(**kwargs): return dict(**kwargs) dj_query: > - def dj_query(aeon_acquisition): - acquisition = aeon_acquisition + def dj_query(aeon_archived_exp02_acquisition): + acquisition = aeon_archived_exp02_acquisition q = dj.U('camera_description', 'raw_data_dir') & (acquisition.ExperimentCamera * acquisition.Experiment.Directory & 'directory_type = "raw"').proj('camera_description', raw_data_dir="CONCAT('/ceph/aeon/', directory_path)") return {'query': q, 'fetch_args': []}