├── .DS_Store ├── ConnectTheDots └── target │ ├── classes │ ├── edu │ │ └── msViz │ │ │ └── connectTheDots │ │ │ ├── AssociationScorer.class │ │ │ ├── TestRun.class │ │ │ ├── TraceClusterer.class │ │ │ ├── Utility.class │ │ │ ├── dataTypes │ │ │ ├── IsotopeTrace$ScanData.class │ │ │ ├── IsotopeTrace.class │ │ │ ├── IsotopicEnvelope.class │ │ │ ├── ProbabilityBundle$1.class │ │ │ ├── ProbabilityBundle$Config.class │ │ │ ├── ProbabilityBundle$RV.class │ │ │ ├── ProbabilityBundle.class │ │ │ ├── TraceCluster.class │ │ │ ├── TraceGrid.class │ │ │ └── TracesBundle.class │ │ │ └── probability │ │ │ ├── BayesianProbability$SeparationDistribution.class │ │ │ ├── BayesianProbability.class │ │ │ ├── FrequentistProbability.class │ │ │ ├── HybridProbability.class │ │ │ ├── ProbabilityAggregator$1.class │ │ │ ├── ProbabilityAggregator$PROB_MODEL.class │ │ │ └── ProbabilityAggregator.class │ └── frequentist.json │ ├── connectTheDots-1.0.jar │ ├── maven-archiver │ └── pom.properties │ ├── maven-status │ └── maven-compiler-plugin │ │ ├── compile │ │ └── default-compile │ │ │ ├── createdFiles.lst │ │ │ └── inputFiles.lst │ │ └── testCompile │ │ └── default-testCompile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst │ ├── surefire-reports │ ├── TEST-edu.msViz.connectTheDots.AssociationScorerTest.xml │ ├── TEST-edu.msViz.connectTheDots.ClusteringTest.xml │ ├── TEST-edu.msViz.connectTheDots.DeclusterTest.xml │ ├── TEST-edu.msViz.connectTheDots.IsotopeTraceTest.xml │ ├── TEST-edu.msViz.connectTheDots.IsotopicEnvelopeTest.xml │ ├── TEST-edu.msViz.connectTheDots.ProbabilityAggregatorTest.xml │ ├── TEST-edu.msViz.connectTheDots.RealWorldTest.xml │ ├── TEST-edu.msViz.connectTheDots.TraceGridTest.xml │ ├── edu.msViz.connectTheDots.AssociationScorerTest.txt │ ├── edu.msViz.connectTheDots.ClusteringTest.txt │ ├── edu.msViz.connectTheDots.DeclusterTest.txt │ ├── edu.msViz.connectTheDots.IsotopeTraceTest.txt │ ├── edu.msViz.connectTheDots.IsotopicEnvelopeTest.txt │ ├── edu.msViz.connectTheDots.ProbabilityAggregatorTest.txt │ ├── edu.msViz.connectTheDots.RealWorldTest.txt │ └── edu.msViz.connectTheDots.TraceGridTest.txt │ └── test-classes │ ├── 2_colliding_envs_4_result_envs.csv │ ├── 5_traces_5_envelopes.csv │ ├── edu │ └── msViz │ │ └── connectTheDots │ │ ├── AssociationScorerTest.class │ │ ├── ClusteringTest.class │ │ ├── DeclusterTest.class │ │ ├── IsotopeTraceTest.class │ │ ├── IsotopicEnvelopeTest.class │ │ ├── ProbabilityAggregatorTest.class │ │ ├── RealWorldTest.class │ │ └── TraceGridTest.class │ ├── good_example.csv │ ├── interleaved_slight_overlap.csv │ ├── misaligned_peaks.csv │ ├── non_descending.csv │ ├── single_split.csv │ ├── so_close.csv │ ├── two_nearby_inconsistent.csv │ ├── ultimate_test.csv │ └── unassigned_trace.csv ├── README.md ├── client_mockups ├── Illustrator Files │ ├── MsViz_Grid.ai │ ├── MsViz_Interface_Main.ai │ ├── MsViz_Interface_Main2.ai │ ├── MsViz_Interface_Minimal.ai │ ├── MsViz_Interface_Slices.ai │ ├── MsViz_Interface_Test.ai │ ├── MsViz_Interface_Text.ai │ └── MsViz_Interface_ToggleTest.ai ├── PNGs │ ├── MsViz_Interace_4.png │ ├── MsViz_Interface_1.png │ ├── MsViz_Interface_2.png │ ├── MsViz_Interface_3.png │ └── MsViz_Interface_5.png └── Slices │ ├── Cursor.png │ ├── Interface_FullView.png │ ├── Legend.png │ └── LogoScreen.ai ├── comparison ├── makemanypaths.sh ├── makepath.py ├── makerandom.py ├── makeslice.py ├── manypath.sh ├── mz5_convert.sh ├── mz5_convert_once.sh ├── queries │ ├── 18185_path │ │ ├── 01.csv │ │ ├── 02.csv │ │ ├── 03.csv │ │ ├── 04.csv │ │ ├── 05.csv │ │ ├── 06.csv │ │ ├── 07.csv │ │ ├── 08.csv │ │ ├── 09.csv │ │ ├── 10.csv │ │ ├── 11.csv │ │ ├── 12.csv │ │ ├── 13.csv │ │ ├── 14.csv │ │ ├── 15.csv │ │ ├── 16.csv │ │ ├── 17.csv │ │ ├── 18.csv │ │ ├── 19.csv │ │ └── 20.csv │ ├── 18185_random.csv │ ├── OEMMA_XIC_path │ │ ├── 0.csv │ │ ├── 1.csv │ │ ├── 10.csv │ │ ├── 100.csv │ │ ├── 11.csv │ │ ├── 12.csv │ │ ├── 13.csv │ │ ├── 14.csv │ │ ├── 15.csv │ │ ├── 16.csv │ │ ├── 17.csv │ │ ├── 18.csv │ │ ├── 19.csv │ │ ├── 2.csv │ │ ├── 20.csv │ │ ├── 21.csv │ │ ├── 22.csv │ │ ├── 23.csv │ │ ├── 24.csv │ │ ├── 25.csv │ │ ├── 26.csv │ │ ├── 27.csv │ │ ├── 28.csv │ │ ├── 29.csv │ │ ├── 3.csv │ │ ├── 30.csv │ │ ├── 31.csv │ │ ├── 32.csv │ │ ├── 33.csv │ │ ├── 34.csv │ │ ├── 35.csv │ │ ├── 36.csv │ │ ├── 37.csv │ │ ├── 38.csv │ │ ├── 39.csv │ │ ├── 4.csv │ │ ├── 40.csv │ │ ├── 41.csv │ │ ├── 42.csv │ │ ├── 43.csv │ │ ├── 44.csv │ │ ├── 45.csv │ │ ├── 46.csv │ │ ├── 47.csv │ │ ├── 48.csv │ │ ├── 49.csv │ │ ├── 5.csv │ │ ├── 50.csv │ │ ├── 51.csv │ │ ├── 52.csv │ │ ├── 53.csv │ │ ├── 54.csv │ │ ├── 55.csv │ │ ├── 56.csv │ │ ├── 57.csv │ │ ├── 58.csv │ │ ├── 59.csv │ │ ├── 6.csv │ │ ├── 60.csv │ │ ├── 61.csv │ │ ├── 62.csv │ │ ├── 63.csv │ │ ├── 64.csv │ │ ├── 65.csv │ │ ├── 66.csv │ │ ├── 67.csv │ │ ├── 68.csv │ │ ├── 69.csv │ │ ├── 7.csv │ │ ├── 70.csv │ │ ├── 71.csv │ │ ├── 72.csv │ │ ├── 73.csv │ │ ├── 74.csv │ │ ├── 75.csv │ │ ├── 76.csv │ │ ├── 77.csv │ │ ├── 78.csv │ │ ├── 79.csv │ │ ├── 8.csv │ │ ├── 80.csv │ │ ├── 81.csv │ │ ├── 82.csv │ │ ├── 83.csv │ │ ├── 84.csv │ │ ├── 85.csv │ │ ├── 86.csv │ │ ├── 87.csv │ │ ├── 88.csv │ │ ├── 89.csv │ │ ├── 9.csv │ │ ├── 90.csv │ │ ├── 91.csv │ │ ├── 92.csv │ │ ├── 93.csv │ │ ├── 94.csv │ │ ├── 95.csv │ │ ├── 96.csv │ │ ├── 97.csv │ │ ├── 98.csv │ │ └── 99.csv │ ├── OEMMA_XIC_random.csv │ ├── OEMMA_query_bundle.zip │ ├── OEMMA_random.csv │ ├── OEMMA_rtmajor_path │ │ ├── 0.csv │ │ ├── 1.csv │ │ ├── 10.csv │ │ ├── 100.csv │ │ ├── 11.csv │ │ ├── 12.csv │ │ ├── 13.csv │ │ ├── 14.csv │ │ ├── 15.csv │ │ ├── 16.csv │ │ ├── 17.csv │ │ ├── 18.csv │ │ ├── 19.csv │ │ ├── 2.csv │ │ ├── 20.csv │ │ ├── 21.csv │ │ ├── 22.csv │ │ ├── 23.csv │ │ ├── 24.csv │ │ ├── 25.csv │ │ ├── 26.csv │ │ ├── 27.csv │ │ ├── 28.csv │ │ ├── 29.csv │ │ ├── 3.csv │ │ ├── 30.csv │ │ ├── 31.csv │ │ ├── 32.csv │ │ ├── 33.csv │ │ ├── 34.csv │ │ ├── 35.csv │ │ ├── 36.csv │ │ ├── 37.csv │ │ ├── 38.csv │ │ ├── 39.csv │ │ ├── 4.csv │ │ ├── 40.csv │ │ ├── 41.csv │ │ ├── 42.csv │ │ ├── 43.csv │ │ ├── 44.csv │ │ ├── 45.csv │ │ ├── 46.csv │ │ ├── 47.csv │ │ ├── 48.csv │ │ ├── 49.csv │ │ ├── 5.csv │ │ ├── 50.csv │ │ ├── 51.csv │ │ ├── 52.csv │ │ ├── 53.csv │ │ ├── 54.csv │ │ ├── 55.csv │ │ ├── 56.csv │ │ ├── 57.csv │ │ ├── 58.csv │ │ ├── 59.csv │ │ ├── 6.csv │ │ ├── 60.csv │ │ ├── 61.csv │ │ ├── 62.csv │ │ ├── 63.csv │ │ ├── 64.csv │ │ ├── 65.csv │ │ ├── 66.csv │ │ ├── 67.csv │ │ ├── 68.csv │ │ ├── 69.csv │ │ ├── 7.csv │ │ ├── 70.csv │ │ ├── 71.csv │ │ ├── 72.csv │ │ ├── 73.csv │ │ ├── 74.csv │ │ ├── 75.csv │ │ ├── 76.csv │ │ ├── 77.csv │ │ ├── 78.csv │ │ ├── 79.csv │ │ ├── 8.csv │ │ ├── 80.csv │ │ ├── 81.csv │ │ ├── 82.csv │ │ ├── 83.csv │ │ ├── 84.csv │ │ ├── 85.csv │ │ ├── 86.csv │ │ ├── 87.csv │ │ ├── 88.csv │ │ ├── 89.csv │ │ ├── 9.csv │ │ ├── 90.csv │ │ ├── 91.csv │ │ ├── 92.csv │ │ ├── 93.csv │ │ ├── 94.csv │ │ ├── 95.csv │ │ ├── 96.csv │ │ ├── 97.csv │ │ ├── 98.csv │ │ └── 99.csv │ └── OEMMA_rtmajor_random.csv ├── query.py ├── query_mzTree.py ├── query_util.py ├── queryconf.py ├── results │ ├── .~lock.summ_save1.csv# │ ├── .~lock.summ_save1.ods# │ ├── .~lock.summ_save2.csv# │ ├── OEMMA_rtmajor_adjacent.ods │ ├── OEMMA_rtmajor_random.ods │ ├── OEMMA_xic_adjacent.ods │ ├── OEMMA_xic_random.ods │ ├── conversion_times_size_on_disk.ods │ ├── figures │ │ ├── pdf │ │ │ ├── OEMMA_rtmajor_adjacent.pdf │ │ │ ├── OEMMA_rtmajor_random.pdf │ │ │ ├── OEMMA_xic_adjacent.pdf │ │ │ ├── OEMMA_xic_random.pdf │ │ │ ├── conversion_time.pdf │ │ │ ├── size_on_disk.pdf │ │ │ └── summarization_savings.pdf │ │ ├── pdf_bundle.zip │ │ └── svg │ │ │ ├── OEMMA_rtmajor_adjacent.svg │ │ │ ├── OEMMA_rtmajor_random.svg │ │ │ ├── OEMMA_xic_adjacent.svg │ │ │ ├── OEMMA_xic_random.svg │ │ │ ├── conversion_time.svg │ │ │ ├── size_on_disk.svg │ │ │ └── summarization_savings.svg │ ├── pre_disk_arrangement │ │ ├── 18185 │ │ │ ├── 18185_path.ods │ │ │ ├── 18185_rand.ods │ │ │ └── random_query_times_18185.png │ │ ├── OEMMA │ │ │ ├── OEMMA_mzTree_only_comparisons.ods │ │ │ ├── OEMMA_path.ods │ │ │ ├── OEMMA_random_bf=4.ods │ │ │ └── random_query_times_OEMMA.png │ │ └── sample2 │ │ │ ├── sample2_path.ods │ │ │ └── sample2_rand.ods │ ├── pre_node_point │ │ ├── OEMMA_path_queries.ods │ │ ├── OEMMA_random_queries.ods │ │ ├── OEMMA_wide_random.csv │ │ ├── conversion_results.txt │ │ ├── conversion_results_pt1.txt │ │ ├── conversion_times_size_on_disk.ods │ │ ├── mz5_conversion.txt │ │ └── raw_to_mzDB_results.txt │ ├── results_records.zip │ └── summ_savings.ods ├── summ.csv └── summarization_savings.py ├── documentation ├── benchmarks.xlsx ├── error_logging.txt ├── maven_tips.txt ├── partitioned_load_overview.odt ├── point_groups.txt ├── server_api.md ├── summ_strat_profiling.docx ├── summarization_screenshots │ ├── intensity_cutoff │ │ ├── intensity_cutoff_lvl0.PNG │ │ ├── intensity_cutoff_lvl0_2D.PNG │ │ └── intensity_cutoff_lvl1.PNG │ ├── uniform_sampling │ │ ├── uniform_sampling_lvl0.PNG │ │ ├── uniform_sampling_lvl0_2D.PNG │ │ └── uniform_sampling_lvl1.PNG │ ├── uniform_striding │ │ ├── uniform_striding_lvl0.PNG │ │ ├── uniform_striding_lvl0_2D.PNG │ │ └── uniform_striding_lvl1.PNG │ ├── weighted_sampling │ │ ├── weighted_sampling_lvl0.PNG │ │ ├── weighted_sampling_lvl0_2D.PNG │ │ └── weighted_sampling_lvl1.PNG │ ├── weighted_striding_no_sorting │ │ ├── weighted_striding_lvl0.PNG │ │ ├── weighted_striding_lvl0_2D.PNG │ │ └── weighted_striding_lvl1.PNG │ └── weighted_striding_sorting │ │ ├── weighted_striding_sorting_lvl0.PNG │ │ ├── weighted_striding_sorting_lvl0_2D.PNG │ │ └── weighted_striding_sorting_lvl1.PNG └── useful_tutorials.txt ├── jsms ├── 3rdparty.txt ├── css │ ├── graphview.css │ └── instructions.css ├── favicon.ico ├── images │ ├── buttons │ │ ├── _3d.svg │ │ ├── _3d_toggle.svg │ │ ├── add.svg │ │ ├── bk_add.svg │ │ ├── bk_cancel.svg │ │ ├── bk_delete.svg │ │ ├── bk_edit.svg │ │ ├── bk_ok.svg │ │ ├── bk_selectcurrent.svg │ │ ├── bkexport.svg │ │ ├── bkimport.svg │ │ ├── bkpair.svg │ │ ├── bkpair_toggle.svg │ │ ├── bkreport.svg │ │ ├── bookmark.svg │ │ ├── bookmark_toggle.svg │ │ ├── brush.svg │ │ ├── brush_toggle.svg │ │ ├── color_selection.txt │ │ ├── colorblind.svg │ │ ├── colorblind_toggle.svg │ │ ├── data.svg │ │ ├── detail.svg │ │ ├── detail_toggle.svg │ │ ├── envelope.svg │ │ ├── envelope_toggle.svg │ │ ├── help.svg │ │ ├── help_toggle.svg │ │ ├── hover.svg │ │ ├── hover_toggle.svg │ │ ├── jump.svg │ │ ├── jumpOptions.svg │ │ ├── jumpOptions_toggle.svg │ │ ├── jump_back.svg │ │ ├── noise.svg │ │ ├── noise_enabled.svg │ │ ├── refresh.svg │ │ ├── select.svg │ │ ├── totalion.svg │ │ ├── trace.svg │ │ └── trace_toggle.svg │ └── favicon.svg ├── index.html ├── instruction.html └── js │ ├── bookmarks.js │ ├── components │ ├── bookmarkSidebar.js │ └── toolbarButtons.js │ ├── dataBridge.js │ ├── dataControls.js │ ├── graph.js │ ├── graphRender.js │ ├── legend.js │ ├── libs │ ├── FileSaver.min.js │ ├── OrbitControls.js │ ├── jquery-3.3.1.min.js │ ├── three.min.js │ └── vue.min.js │ ├── segmentColors.js │ ├── segmentEditor.js │ ├── segmentTracker.js │ └── toolbars.js ├── msDataServer ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── edu │ │ └── msViz │ │ ├── UI │ │ ├── ClusterPanel.java │ │ ├── ExportPanel.java │ │ ├── FilePanel.java │ │ ├── ServerPanel.java │ │ └── StartFrame.java │ │ ├── msHttpApi │ │ ├── CommandStack.java │ │ ├── HeadlessServer.java │ │ ├── MsDataServer.java │ │ └── MzTreePointDatabaseConnection.java │ │ └── mzTree │ │ ├── IO │ │ ├── CsvExporter.java │ │ ├── Decoder.java │ │ ├── LabelledMsDataRange.java │ │ ├── MsDataRange.java │ │ └── MzmlParser.java │ │ ├── ImportState.java │ │ ├── MsDataPoint.java │ │ ├── MzTree.java │ │ ├── MzTreeNode.java │ │ ├── MzTreeTest.java │ │ ├── PointCache.java │ │ ├── harnesses │ │ ├── ConversionResults.java │ │ ├── MzTreeAccess.java │ │ ├── MzTreeConversion.java │ │ ├── MzmlPointCounter.java │ │ └── Segmentation.java │ │ ├── storage │ │ ├── HybridStorage.java │ │ ├── IntensityTracker.java │ │ ├── StorageFacade.java │ │ └── StorageFacadeFactory.java │ │ └── summarization │ │ ├── IntensityCutoffStrategy.java │ │ ├── SummarizationStrategy.java │ │ ├── SummarizationStrategyFactory.java │ │ ├── UniformSamplingStrategy.java │ │ ├── UniformStridingStrategy.java │ │ ├── WeightedReservoirSampling.java │ │ ├── WeightedSamplingStrategy.java │ │ └── WeightedStridingStrategy.java └── target │ └── msDataServer-1.0.jar ├── pom.xml ├── tracesegmentation ├── README.md ├── pom.xml └── src │ └── main │ └── java │ └── edu │ └── umt │ └── ms │ └── traceSeg │ ├── .DS_Store │ ├── HttpPointDatabaseConnection.java │ ├── Point.java │ ├── PointDatabaseConnection.java │ ├── TraceSegmentation.java │ └── TraceSegmenter.java ├── xnet.tar.gz └── xnet ├── README.txt ├── output.csv ├── pom.xml ├── src ├── main │ ├── java │ │ └── edu │ │ │ └── msViz │ │ │ └── xnet │ │ │ ├── AssociationScorer.java │ │ │ ├── TestRun.java │ │ │ ├── TraceClusterer.java │ │ │ ├── Utility.java │ │ │ ├── dataTypes │ │ │ ├── IsotopeTrace.java │ │ │ ├── IsotopicEnvelope.java │ │ │ ├── ProbabilityBundle.java │ │ │ ├── TraceCluster.java │ │ │ ├── TraceGrid.java │ │ │ └── TracesBundle.java │ │ │ └── probability │ │ │ ├── BayesianProbability.java │ │ │ ├── FrequentistProbability.java │ │ │ ├── HybridProbability.java │ │ │ └── ProbabilityAggregator.java │ └── resources │ │ ├── frequentist.json │ │ └── good_example.csv └── test │ ├── java │ └── edu │ │ └── msViz │ │ └── xnet │ │ ├── AssociationScorerTest.java │ │ ├── ClusteringTest.java │ │ ├── DeclusterTest.java │ │ ├── IsotopeTraceTest.java │ │ ├── IsotopicEnvelopeTest.java │ │ ├── ProbabilityAggregatorTest.java │ │ ├── RealWorldTest.java │ │ └── TraceGridTest.java │ └── resources │ ├── 2_colliding_envs_4_result_envs.csv │ ├── 5_traces_5_envelopes.csv │ ├── good_example.csv │ ├── interleaved_slight_overlap.csv │ ├── misaligned_peaks.csv │ ├── non_descending.csv │ ├── single_split.csv │ ├── so_close.csv │ ├── two_nearby_inconsistent.csv │ ├── ultimate_test.csv │ └── unassigned_trace.csv └── subordinate_licenses.txt /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/.DS_Store -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/AssociationScorer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/AssociationScorer.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/TestRun.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/TestRun.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/TraceClusterer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/TraceClusterer.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/Utility.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/Utility.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopeTrace$ScanData.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopeTrace$ScanData.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopeTrace.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopeTrace.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopicEnvelope.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/IsotopicEnvelope.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$1.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$Config.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$Config.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$RV.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$RV.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TraceCluster.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TraceCluster.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TraceGrid.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TraceGrid.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TracesBundle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/dataTypes/TracesBundle.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/BayesianProbability$SeparationDistribution.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/BayesianProbability$SeparationDistribution.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/BayesianProbability.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/BayesianProbability.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/FrequentistProbability.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/FrequentistProbability.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/HybridProbability.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/HybridProbability.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator$1.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator$PROB_MODEL.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator$PROB_MODEL.class -------------------------------------------------------------------------------- /ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/classes/edu/msViz/connectTheDots/probability/ProbabilityAggregator.class -------------------------------------------------------------------------------- /ConnectTheDots/target/connectTheDots-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/connectTheDots-1.0.jar -------------------------------------------------------------------------------- /ConnectTheDots/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Wed Sep 05 10:50:27 MDT 2018 3 | version=1.0 4 | groupId=edu.msViz 5 | artifactId=connectTheDots 6 | -------------------------------------------------------------------------------- /ConnectTheDots/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | edu/msViz/connectTheDots/AssociationScorer.class 2 | edu/msViz/connectTheDots/dataTypes/IsotopicEnvelope.class 3 | edu/msViz/connectTheDots/probability/HybridProbability.class 4 | edu/msViz/connectTheDots/dataTypes/ProbabilityBundle.class 5 | edu/msViz/connectTheDots/probability/ProbabilityAggregator$1.class 6 | edu/msViz/connectTheDots/probability/ProbabilityAggregator$PROB_MODEL.class 7 | edu/msViz/connectTheDots/dataTypes/TraceGrid.class 8 | edu/msViz/connectTheDots/Utility.class 9 | edu/msViz/connectTheDots/dataTypes/TracesBundle.class 10 | edu/msViz/connectTheDots/probability/BayesianProbability.class 11 | edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$1.class 12 | edu/msViz/connectTheDots/probability/BayesianProbability$SeparationDistribution.class 13 | edu/msViz/connectTheDots/dataTypes/IsotopeTrace$ScanData.class 14 | edu/msViz/connectTheDots/TestRun.class 15 | edu/msViz/connectTheDots/TraceClusterer.class 16 | edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$RV.class 17 | edu/msViz/connectTheDots/probability/FrequentistProbability.class 18 | edu/msViz/connectTheDots/dataTypes/IsotopeTrace.class 19 | edu/msViz/connectTheDots/dataTypes/TraceCluster.class 20 | edu/msViz/connectTheDots/dataTypes/ProbabilityBundle$Config.class 21 | edu/msViz/connectTheDots/probability/ProbabilityAggregator.class 22 | -------------------------------------------------------------------------------- /ConnectTheDots/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/IsotopeTrace.java 2 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/probability/HybridProbability.java 3 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/TraceCluster.java 4 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/TestRun.java 5 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/IsotopicEnvelope.java 6 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/ProbabilityBundle.java 7 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/Utility.java 8 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/probability/BayesianProbability.java 9 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/probability/ProbabilityAggregator.java 10 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/TraceGrid.java 11 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/TraceClusterer.java 12 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/probability/FrequentistProbability.java 13 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/AssociationScorer.java 14 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/main/java/edu/msViz/connectTheDots/dataTypes/TracesBundle.java 15 | -------------------------------------------------------------------------------- /ConnectTheDots/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | edu/msViz/connectTheDots/DeclusterTest.class 2 | edu/msViz/connectTheDots/AssociationScorerTest.class 3 | edu/msViz/connectTheDots/RealWorldTest.class 4 | edu/msViz/connectTheDots/ProbabilityAggregatorTest.class 5 | edu/msViz/connectTheDots/TraceGridTest.class 6 | edu/msViz/connectTheDots/IsotopeTraceTest.class 7 | edu/msViz/connectTheDots/ClusteringTest.class 8 | edu/msViz/connectTheDots/IsotopicEnvelopeTest.class 9 | -------------------------------------------------------------------------------- /ConnectTheDots/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/DeclusterTest.java 2 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/TraceGridTest.java 3 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/AssociationScorerTest.java 4 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/ProbabilityAggregatorTest.java 5 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/IsotopeTraceTest.java 6 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/ClusteringTest.java 7 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/IsotopicEnvelopeTest.java 8 | /home/smithlab/Desktop/WorkStuff/GitKrakenRepos/msViz/ConnectTheDots/src/test/java/edu/msViz/connectTheDots/RealWorldTest.java 9 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.AssociationScorerTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.AssociationScorerTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.187 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.ClusteringTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.ClusteringTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.DeclusterTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.DeclusterTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.071 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.IsotopeTraceTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.IsotopeTraceTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.IsotopicEnvelopeTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.IsotopicEnvelopeTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.ProbabilityAggregatorTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.ProbabilityAggregatorTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.094 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.RealWorldTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.RealWorldTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.49 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/surefire-reports/edu.msViz.connectTheDots.TraceGridTest.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------- 2 | Test set: edu.msViz.connectTheDots.TraceGridTest 3 | ------------------------------------------------------------------------------- 4 | Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec 5 | -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/AssociationScorerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/AssociationScorerTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/ClusteringTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/ClusteringTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/DeclusterTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/DeclusterTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/IsotopeTraceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/IsotopeTraceTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/IsotopicEnvelopeTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/IsotopicEnvelopeTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/ProbabilityAggregatorTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/ProbabilityAggregatorTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/RealWorldTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/RealWorldTest.class -------------------------------------------------------------------------------- /ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/TraceGridTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/ConnectTheDots/target/test-classes/edu/msViz/connectTheDots/TraceGridTest.class -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Grid.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Grid.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Main.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Main.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Main2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Main2.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Minimal.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Minimal.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Slices.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Slices.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Test.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Test.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_Text.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_Text.ai -------------------------------------------------------------------------------- /client_mockups/Illustrator Files/MsViz_Interface_ToggleTest.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Illustrator Files/MsViz_Interface_ToggleTest.ai -------------------------------------------------------------------------------- /client_mockups/PNGs/MsViz_Interace_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/PNGs/MsViz_Interace_4.png -------------------------------------------------------------------------------- /client_mockups/PNGs/MsViz_Interface_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/PNGs/MsViz_Interface_1.png -------------------------------------------------------------------------------- /client_mockups/PNGs/MsViz_Interface_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/PNGs/MsViz_Interface_2.png -------------------------------------------------------------------------------- /client_mockups/PNGs/MsViz_Interface_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/PNGs/MsViz_Interface_3.png -------------------------------------------------------------------------------- /client_mockups/PNGs/MsViz_Interface_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/PNGs/MsViz_Interface_5.png -------------------------------------------------------------------------------- /client_mockups/Slices/Cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Slices/Cursor.png -------------------------------------------------------------------------------- /client_mockups/Slices/Interface_FullView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Slices/Interface_FullView.png -------------------------------------------------------------------------------- /client_mockups/Slices/Legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Slices/Legend.png -------------------------------------------------------------------------------- /client_mockups/Slices/LogoScreen.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/client_mockups/Slices/LogoScreen.ai -------------------------------------------------------------------------------- /comparison/makemanypaths.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | mkdir "$1" 3 | 4 | for i in {0..100} 5 | do 6 | echo $i 7 | printf "$(python3 ./makepath.py "$2")" > "$1/$i.csv" 8 | done -------------------------------------------------------------------------------- /comparison/makepath.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import random 4 | import query_util as qutil 5 | import sys 6 | from queryconf import mzmin, mzmax, rtmin, rtmax 7 | mzrange = mzmax - mzmin 8 | rtrange = rtmax - rtmin 9 | 10 | bounds = (mzmin,mzmax,rtmin,rtmax) 11 | zoom_factor = 1.1 12 | step_size = 0.1 13 | 14 | if sys.argv[1] == "-w": 15 | query = qutil.crop_query(bounds,qutil.make_wide_query(bounds)) 16 | else: 17 | query = qutil.crop_query(bounds,qutil.make_tall_query(bounds)) 18 | 19 | #north, east, south, west, in, out 20 | actions = ["N", "E", "S", "W", "I", "O"] 21 | zoomactions = ["I", "O"] 22 | 23 | # start going randomly 24 | action = random.choice(actions) 25 | 26 | for x in range(100): 27 | # 15% chance to change action, 50% chance to change if zooming 28 | if (action in zoomactions and random.random() < 0.5) or\ 29 | (action not in zoomactions and random.random() < 0.15): 30 | action = random.choice(actions) 31 | 32 | query = qutil.crop_query(bounds,qutil.actions[action](query)) 33 | 34 | print("{},{},{},{}".format(*query)) 35 | 36 | -------------------------------------------------------------------------------- /comparison/makerandom.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import random 4 | import sys 5 | 6 | from queryconf import mzmin, mzmax, rtmin, rtmax 7 | import query_util as qutil 8 | bounds = (mzmin,mzmax,rtmin,rtmax) 9 | 10 | query_func = qutil.make_wide_query if sys.argv[1] == "-w" else qutil.make_tall_query 11 | 12 | 13 | for x in range(100): 14 | query = query_func(bounds) 15 | print("{},{},{},{}".format(*query)) 16 | -------------------------------------------------------------------------------- /comparison/makeslice.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import random 4 | 5 | from queryconf import mzmin, mzmax, rtmin, rtmax 6 | 7 | mzspan = mzmax - mzmin 8 | rtspan = rtmax - rtmin 9 | 10 | def makerandom(mzlen, rtlen): 11 | mzlow = mzmin 12 | mzhigh = mzmax - mzlen 13 | mzr = mzhigh - mzlow 14 | 15 | rtlow = rtmin 16 | rthigh = rtmax - rtlen 17 | rtr = rthigh - rtlow 18 | 19 | mz = random.random() * mzr + mzlow 20 | rt = random.random() * rtr + rtlow 21 | return mz, mz+mzlen, rt, rt+rtlen 22 | 23 | for x in range(50): 24 | # mzlen = [.25, .5, 1, 2, 4] 25 | mzlen = 2**(random.randrange(5)-2) 26 | rtlen = random.randrange(rtspan/2) + (rtspan/2) 27 | mzm, mzx, rtm, rtx = makerandom(mzlen, rtlen) 28 | print("{},{},{},{}".format(mzm, mzx, rtm, rtx)) 29 | 30 | for x in range(50): 31 | mzlen = random.randrange(mzspan/2) + (mzspan/2) 32 | rtlen = 2**(random.randrange(5)-2) 33 | mzm, mzx, rtm, rtx = makerandom(mzlen, rtlen) 34 | print("{},{},{},{}".format(mzm, mzx, rtm, rtx)) 35 | -------------------------------------------------------------------------------- /comparison/manypath.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "points,mz5,mzML,mzdb,mzTree,mzTree-batched,mzTree-summ" 3 | for i in {1..100} 4 | do 5 | echo $(python3 ./query.py queries/${1}/$i.csv | tail -n1) 6 | notify-send "Done: $i" 7 | done 8 | -------------------------------------------------------------------------------- /comparison/mz5_convert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # files to convert 4 | filenames=("CHPP_Tricine_3022.mzML" 5 | "CHPP_SDS_3009.mzML" 6 | "CHPP_SDS_3002.mzML" 7 | "GRAIN_DEVELOPMENT_Z71_3.mzML" 8 | "STEM_12.mzML" 9 | "18185_REP2_4pmol_UPS2_IDA_1.mzML" 10 | "POLLEN_2.mzML" 11 | "Sheppard_Werner_RNAPORF145_09.mzML" 12 | "Sheppard_Werner_RNAPORF145_06.mzML" 13 | "Sheppard_Werner_RNAPORF145_03.mzML") 14 | 15 | # set time format for this shell to real time only 16 | TIMEFORMAT=%R 17 | 18 | # create temp directory 19 | mkdir mz5_out 20 | echo "begin loop" 21 | for filename in "${filenames[@]}" 22 | do 23 | echo $filename 24 | for i in {1..10} 25 | do 26 | echo $(time msconvert ../../data/mzml/$filename --mz5 --filter "mslevel 1" -o ./mz5_out --outfile $filename > /dev/null) 27 | rm ./mz5_out/${filename:0:-5}.mz5 28 | done 29 | done 30 | 31 | # remove temp directory 32 | rmdir mz5_out -------------------------------------------------------------------------------- /comparison/mz5_convert_once.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # files to convert 4 | filenames=( "CHPP_SDS_3002.mzML" 5 | "GRAIN_DEVELOPMENT_Z71_3.mzML" 6 | "STEM_12.mzML" 7 | "18185_REP2_4pmol_UPS2_IDA_1.mzML" 8 | "POLLEN_2.mzML" 9 | "Sheppard_Werner_RNAPORF145_09.mzML" 10 | "Sheppard_Werner_RNAPORF145_06.mzML" 11 | "Sheppard_Werner_RNAPORF145_03.mzML") 12 | 13 | # create temp directory 14 | for filename in "${filenames[@]}" 15 | do 16 | msconvert ./mzml/$filename --mz5 --filter "mslevel 1" -o ./mz5_out --outfile $filename 17 | echo $filename 18 | done 19 | -------------------------------------------------------------------------------- /comparison/queries/18185_path/16.csv: -------------------------------------------------------------------------------- 1 | 760.0,985.0,2700.0,4500.0 2 | 782.5,1007.5,2700.0,4500.0 3 | 805.0,1030.0,2700.0,4500.0 4 | 827.5,1052.5,2700.0,4500.0 5 | 850.0,1075.0,2700.0,4500.0 6 | 872.5,1097.5,2700.0,4500.0 7 | 895.0,1120.0,2700.0,4500.0 8 | 917.5,1142.5,2700.0,4500.0 9 | 940.0,1165.0,2700.0,4500.0 10 | 962.5,1187.5,2700.0,4500.0 11 | 985.0,1210.0,2700.0,4500.0 12 | 1007.5,1232.5,2700.0,4500.0 13 | 1030.0,1255.0,2700.0,4500.0 14 | 1052.5,1277.5,2700.0,4500.0 15 | 1075.0,1300.0,2700.0,4500.0 16 | 1097.5,1322.5,2700.0,4500.0 17 | 1120.0,1345.0,2700.0,4500.0 18 | 1142.5,1367.5,2700.0,4500.0 19 | 1165.0,1390.0,2700.0,4500.0 20 | 1187.5,1412.5,2700.0,4500.0 21 | 1210.0,1435.0,2700.0,4500.0 22 | 1232.5,1457.5,2700.0,4500.0 23 | 1255.0,1480.0,2700.0,4500.0 24 | 1277.5,1502.5,2700.0,4500.0 25 | 1300.0,1525.0,2700.0,4500.0 26 | 1322.5,1547.5,2700.0,4500.0 27 | 1345.0,1570.0,2700.0,4500.0 28 | 1345.0,1570.0,2520.0,4320.0 29 | 1345.0,1570.0,2340.0,4140.0 30 | 1345.0,1570.0,2160.0,3960.0 31 | 1345.0,1570.0,1980.0,3780.0 32 | 1345.0,1570.0,1800.0,3600.0 33 | 1345.0,1570.0,1620.0,3420.0 34 | 1345.0,1570.0,1800.0,3600.0 35 | 1345.0,1570.0,1980.0,3780.0 36 | 1345.0,1570.0,2160.0,3960.0 37 | 1345.0,1570.0,2340.0,4140.0 38 | 1345.0,1570.0,2520.0,4320.0 39 | 1345.0,1570.0,2700.0,4500.0 40 | 1345.0,1570.0,2880.0,4680.0 41 | 1345.0,1570.0,3060.0,4860.0 42 | 1345.0,1570.0,3240.0,5040.0 43 | 1345.0,1570.0,3420.0,5220.0 44 | 1345.0,1570.0,3600.0,5400.0 45 | 1345.0,1570.0,3780.0,5580.0 46 | 1345.0,1570.0,3960.0,5760.0 47 | 1345.0,1570.0,4140.0,5940.0 48 | 1345.0,1570.0,4320.0,6120.0 49 | 1345.0,1570.0,4500.0,6300.0 50 | 1345.0,1570.0,4680.0,6480.0 51 | 1345.0,1570.0,4860.0,6660.0 52 | 1345.0,1570.0,5040.0,6840.0 53 | 1345.0,1570.0,5220.0,7020.0 54 | 1345.0,1570.0,5400.0,7200.0 55 | 1345.0,1570.0,5580.0,7380.0 56 | 1345.0,1570.0,5760.0,7560.0 57 | 1345.0,1570.0,5940.0,7740.0 58 | 1345.0,1570.0,6120.0,7920.0 59 | 1345.0,1570.0,6300.0,8100.0 60 | 1367.5,1592.5,6300.0,8100.0 61 | 1390.0,1615.0,6300.0,8100.0 62 | 1412.5,1637.5,6300.0,8100.0 63 | 1435.0,1660.0,6300.0,8100.0 64 | 1457.5,1682.5,6300.0,8100.0 65 | 1480.0,1705.0,6300.0,8100.0 66 | 1502.5,1727.5,6300.0,8100.0 67 | 1525.0,1750.0,6300.0,8100.0 68 | 1547.5,1772.5,6300.0,8100.0 69 | 1570.0,1795.0,6300.0,8100.0 70 | 1592.5,1817.5,6300.0,8100.0 71 | 1615.0,1840.0,6300.0,8100.0 72 | 1637.5,1862.5,6300.0,8100.0 73 | 1660.0,1885.0,6300.0,8100.0 74 | 1660.0,1885.0,6480.0,8280.0 75 | 1660.0,1885.0,6660.0,8460.0 76 | 1660.0,1885.0,6840.0,8640.0 77 | 1660.0,1885.0,7020.0,8820.0 78 | 1660.0,1885.0,7200.0,9000.0 79 | 1660.0,1885.0,7380.0,9180.0 80 | 1660.0,1885.0,7560.0,9360.0 81 | 1660.0,1885.0,7740.0,9540.0 82 | 1660.0,1885.0,7920.0,9720.0 83 | 1660.0,1885.0,8100.0,9900.0 84 | 1660.0,1885.0,8280.0,10080.0 85 | 1660.0,1885.0,8460.0,10260.0 86 | 1660.0,1885.0,8640.0,10440.0 87 | 1660.0,1885.0,8820.0,10620.0 88 | 1660.0,1885.0,9000.0,10800.0 89 | 1660.0,1885.0,9180.0,10980.0 90 | 1660.0,1862.5,9180.0,10800.0 91 | 1660.0,1862.5,9342.0,10962.0 92 | 1660.0,1862.5,9504.0,11124.0 93 | 1660.0,1862.5,9666.0,11286.0 94 | 1660.0,1862.5,9828.0,11448.0 95 | 1660.0,1862.5,9990.0,11610.0 96 | 1660.0,1842.25,9990.0,11448.0 97 | 1660.0,1860.475,9990.0,11593.8 98 | 1660.0,1840.4275,9990.0,11433.42 99 | 1660.0,1822.38475,9990.0,11289.078 100 | 1643.761525,1806.1462749999998,9990.0,11289.078 101 | -------------------------------------------------------------------------------- /comparison/queries/OEMMA_query_bundle.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/queries/OEMMA_query_bundle.zip -------------------------------------------------------------------------------- /comparison/query_mzTree.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import io 4 | import sys 5 | import os 6 | import subprocess 7 | import shlex 8 | import shutil 9 | import time 10 | import queryconf as qc 11 | 12 | """ 13 | *************** DECLARATIONS *************** 14 | """ 15 | # returns the time taken to run a command in seconds 16 | def calctime(cmd): 17 | start = time.perf_counter() 18 | subprocess.run(shlex.split(cmd), stdout=subprocess.DEVNULL) 19 | return time.perf_counter() - start 20 | 21 | # command templates 22 | cmd_tree="java -Xmx24g -jar ../msDataServer/target/msDataServer-1.0.jar" 23 | 24 | usage_str="usage: query_mzTree.py queryfile" 25 | 26 | """ 27 | *************** COMMAND LINE ARGUMENTS *************** 28 | """ 29 | 30 | if len(sys.argv) != 2: 31 | print(usage_str) 32 | sys.exit(1) 33 | 34 | # map argv to files list 35 | file_queries=sys.argv[1] 36 | 37 | print(qc.file_mzTree, file_queries) 38 | 39 | 40 | # make sure files exist 41 | if not (os.path.isfile(qc.file_mzTree) and os.path.isfile(file_queries)): 42 | print("Please make sure all files exist.") 43 | sys.exit(1) 44 | 45 | 46 | """ 47 | *************** MZTREE BATCH + SUMMARY *************** 48 | """ 49 | 50 | # run mzTree in batch (open db once, multiple queries) mode and collect times 51 | mzt_args = shlex.split(" ".join([cmd_tree,qc.file_mzTree,file_queries])) 52 | mzt_batch = subprocess.run(mzt_args, stdout=subprocess.PIPE, universal_newlines=True) 53 | mzt_batch_times = mzt_batch.stdout.split("\n") 54 | mzt_summary = subprocess.run(mzt_args + [str(qc.num_points)], stdout=subprocess.PIPE, universal_newlines=True) 55 | mzt_summary_times = mzt_summary.stdout.split("\n") 56 | 57 | """ 58 | *************** MZTREE, MZ5, MZML, MZDB ONE-OFF QUERIES *************** 59 | """ 60 | 61 | # read queries file 62 | f_queries = open(file_queries, "r") 63 | 64 | print("points,mzTree,mzTree-batched,mzTree-summ") 65 | 66 | point_total, mzt_total, mzb_total, mzs_total = 0, 0, 0, 0 67 | 68 | # iterate through queries 69 | i = 0 70 | for line in f_queries: 71 | 72 | # query bounds 73 | mzmin, mzmax, rtmin, rtmax = [float(x) for x in line.split(",")] 74 | 75 | # ----------- mzTree ------------ 76 | mzt_cmd = "{} {} {} {} {} {}".format(cmd_tree, qc.file_mzTree, mzmin, mzmax, rtmin, rtmax) 77 | mzt_res = subprocess.run(shlex.split(mzt_cmd), 78 | stdout=subprocess.PIPE, universal_newlines=True) 79 | mzt_time = mzt_res.stdout.split("\n")[0].split(",")[1] 80 | 81 | # corresponding mzTree_batch and mzt_summarized times (w/ a point_count reference) 82 | point_count, mzt_batch_time = mzt_batch_times[i].split(",") 83 | mzt_summ_time = mzt_summary_times[i].split(",")[1] 84 | 85 | # print results for this query, including corresponding batch/summarized times 86 | print( "{},{},{},{}".format(point_count, mzt_time, mzt_batch_time, mzt_summ_time), flush=True) 87 | 88 | # accumulate # points and query times 89 | point_total += int(point_count) 90 | mzt_total += float(mzt_time) 91 | mzb_total += float(mzt_batch_time) 92 | mzs_total += float(mzt_summ_time) 93 | 94 | i += 1 95 | 96 | # print totals 97 | print("{},{},{},{}".format(point_total, mzt_total, mzb_total, mzs_total)) 98 | -------------------------------------------------------------------------------- /comparison/queryconf.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | num_points = 5000 4 | 5 | file_name = "/home/kyle/Documents/data/qref/OEMMA" 6 | mzmin, mzmax, rtmin, rtmax = 350, 1800, 0, 155 7 | 8 | #file_name = "qref/18185_query_ref" 9 | #mzmin, mzmax, rtmin, rtmax = 400, 1300, 0, 7200 10 | 11 | #file_name = "qref/sample2" 12 | #mzmin, mzmax, rtmin, rtmax = 500, 2500, 5, 55 13 | 14 | file_mzTree = file_name + ".mzTree" 15 | file_mz5 = file_name + ".mz5" 16 | file_mzml = file_name + ".mzML" 17 | file_mzdb = file_name + ".mzDB" 18 | -------------------------------------------------------------------------------- /comparison/results/.~lock.summ_save1.csv#: -------------------------------------------------------------------------------- 1 | ,kyle,kyle-XPS-8900,19.05.2017 10:27,file:///home/kyle/.config/libreoffice/4; -------------------------------------------------------------------------------- /comparison/results/.~lock.summ_save1.ods#: -------------------------------------------------------------------------------- 1 | ,kyle,kyle-XPS-8900,18.05.2017 16:42,file:///home/kyle/.config/libreoffice/4; -------------------------------------------------------------------------------- /comparison/results/.~lock.summ_save2.csv#: -------------------------------------------------------------------------------- 1 | ,kyle,kyle-XPS-8900,19.05.2017 10:33,file:///home/kyle/.config/libreoffice/4; -------------------------------------------------------------------------------- /comparison/results/OEMMA_rtmajor_adjacent.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/OEMMA_rtmajor_adjacent.ods -------------------------------------------------------------------------------- /comparison/results/OEMMA_rtmajor_random.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/OEMMA_rtmajor_random.ods -------------------------------------------------------------------------------- /comparison/results/OEMMA_xic_adjacent.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/OEMMA_xic_adjacent.ods -------------------------------------------------------------------------------- /comparison/results/OEMMA_xic_random.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/OEMMA_xic_random.ods -------------------------------------------------------------------------------- /comparison/results/conversion_times_size_on_disk.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/conversion_times_size_on_disk.ods -------------------------------------------------------------------------------- /comparison/results/figures/pdf/OEMMA_rtmajor_adjacent.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/OEMMA_rtmajor_adjacent.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/OEMMA_rtmajor_random.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/OEMMA_rtmajor_random.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/OEMMA_xic_adjacent.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/OEMMA_xic_adjacent.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/OEMMA_xic_random.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/OEMMA_xic_random.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/conversion_time.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/conversion_time.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/size_on_disk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/size_on_disk.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf/summarization_savings.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf/summarization_savings.pdf -------------------------------------------------------------------------------- /comparison/results/figures/pdf_bundle.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/figures/pdf_bundle.zip -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/18185/18185_path.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/18185/18185_path.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/18185/18185_rand.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/18185/18185_rand.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/18185/random_query_times_18185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/18185/random_query_times_18185.png -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/OEMMA/OEMMA_mzTree_only_comparisons.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/OEMMA/OEMMA_mzTree_only_comparisons.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/OEMMA/OEMMA_path.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/OEMMA/OEMMA_path.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/OEMMA/OEMMA_random_bf=4.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/OEMMA/OEMMA_random_bf=4.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/OEMMA/random_query_times_OEMMA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/OEMMA/random_query_times_OEMMA.png -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/sample2/sample2_path.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/sample2/sample2_path.ods -------------------------------------------------------------------------------- /comparison/results/pre_disk_arrangement/sample2/sample2_rand.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_disk_arrangement/sample2/sample2_rand.ods -------------------------------------------------------------------------------- /comparison/results/pre_node_point/OEMMA_path_queries.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_node_point/OEMMA_path_queries.ods -------------------------------------------------------------------------------- /comparison/results/pre_node_point/OEMMA_random_queries.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_node_point/OEMMA_random_queries.ods -------------------------------------------------------------------------------- /comparison/results/pre_node_point/conversion_results.txt: -------------------------------------------------------------------------------- 1 | CHPP_Tricine_3022.mzML 2 | file size (MiB): 0.023448999046711154 3 | number of points: 0 4 | Average execution time (s): 0.7062999999999999 5 | 6 | CHPP_SDS_3009.mzML 7 | file size (MiB): 0.023448999046711154 8 | number of points: 0 9 | Average execution time (s): 1.1045 10 | 11 | CHPP_SDS_3002.mzML 12 | file size (MiB): 495.51440228789323 13 | number of points: 8472199 14 | Average execution time (s): 42.9195 15 | 16 | GRAIN_DEVELOPMENT_Z71_3.mzML 17 | file size (MiB): 1839.1035176358437 18 | number of points: 31072232 19 | Average execution time (s): 152.9894 20 | 21 | STEM_12.mzML 22 | file size (MiB): 1529.0943584366064 23 | number of points: 27544564 24 | Average execution time (s): 127.8309 25 | 26 | 18185_REP2_4pmol_UPS2_IDA_1.mzML 27 | file size (MiB): 3562.9983679694947 28 | number of points: 62269515 29 | Average execution time (s): 293.9209 30 | 31 | POLLEN_2.mzML 32 | file size (MiB): 2407.2804880838894 33 | number of points: 42584807 34 | Average execution time (s): 197.2808 35 | 36 | Sheppard_Werner_RNAPORF145_09.mzML 37 | file size (MiB): 6412.498268827455 38 | number of points: 115094313 39 | Average execution time (s): 519.0703 40 | 41 | Sheppard_Werner_RNAPORF145_06.mzML 42 | file size (MiB): 6989.734385128694 43 | number of points: 126778190 44 | Average execution time (s): 549.0125 45 | 46 | Sheppard_Werner_RNAPORF145_03.mzML 47 | file size (MiB): 8889.232737845567 48 | number of points: 165229056 49 | Average execution time (s): 708.0173000000001 50 | -------------------------------------------------------------------------------- /comparison/results/pre_node_point/conversion_results_pt1.txt: -------------------------------------------------------------------------------- 1 | CHPP_Tricine_3022.mzML 2 | file size (MiB): 0.023448999046711154 3 | number of points: 0 4 | Average execution time (s): 0.7062999999999999 5 | CHPP_SDS_3009.mzML 6 | file size (MiB): 0.023448999046711154 7 | number of points: 0 8 | Average execution time (s): 1.1045 9 | CHPP_SDS_3002.mzML 10 | file size (MiB): 495.51440228789323 11 | number of points: 8472199 12 | Average execution time (s): 42.9195 13 | GRAIN_DEVELOPMENT_Z71_3.mzML 14 | file size (MiB): 1839.1035176358437 15 | number of points: 31072232 16 | Average execution time (s): 152.9894 17 | STEM_12.mzML 18 | file size (MiB): 1529.0943584366064 19 | number of points: 27544564 20 | Average execution time (s): 127.8309 21 | 18185_REP2_4pmol_UPS2_IDA_1.mzML 22 | file size (MiB): 3562.9983679694947 23 | number of points: 62269515 24 | Average execution time (s): 293.9209 25 | POLLEN_2.mzML 26 | file size (MiB): 2407.2804880838894 27 | number of points: 42584807 28 | Average execution time (s): 197.2808 29 | -------------------------------------------------------------------------------- /comparison/results/pre_node_point/conversion_times_size_on_disk.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/pre_node_point/conversion_times_size_on_disk.ods -------------------------------------------------------------------------------- /comparison/results/pre_node_point/mz5_conversion.txt: -------------------------------------------------------------------------------- 1 | CHPP_SDS_3002.mzML 2 | 6.505 3 | 8.037 4 | 8.750 5 | 7.323 6 | 6.444 7 | 6.544 8 | 6.341 9 | 8.125 10 | 6.811 11 | 6.310 12 | 13 | GRAIN_DEVELOPMENT_Z71_3.mzML 14 | 7.234 15 | 8.699 16 | 8.710 17 | 8.530 18 | 7.114 19 | 9.305 20 | 8.400 21 | 8.222 22 | 7.762 23 | 8.110 24 | 25 | STEM_12.mzML 26 | 13.911 27 | 12.016 28 | 13.768 29 | 12.632 30 | 11.705 31 | 12.073 32 | 11.205 33 | 13.096 34 | 12.781 35 | 12.723 36 | 37 | 18185_REP2_4pmol_UPS2_IDA_1.mzML 38 | 16.822 39 | 17.085 40 | 18.970 41 | 16.838 42 | 16.332 43 | 17.964 44 | 16.933 45 | 17.554 46 | 15.945 47 | 18.845 48 | 49 | POLLEN_2.mzML 50 | 14.013 51 | 15.416 52 | 14.614 53 | 13.209 54 | 17.097 55 | 16.287 56 | 15.610 57 | 16.909 58 | 14.151 59 | 14.951 60 | 61 | Sheppard_Werner_RNAPORF145_09.mzML 62 | 12.782 63 | 14.770 64 | 13.591 65 | 14.845 66 | 13.799 67 | 12.324 68 | 14.278 69 | 12.914 70 | 13.085 71 | 13.410 72 | 73 | Sheppard_Werner_RNAPORF145_06.mzML 74 | 13.056 75 | 15.257 76 | 15.383 77 | 13.944 78 | 13.894 79 | 14.000 80 | 14.199 81 | 14.525 82 | 13.174 83 | 15.435 84 | 85 | Sheppard_Werner_RNAPORF145_03.mzML 86 | 20.596 87 | 15.418 88 | 18.941 89 | 19.368 90 | 22.071 91 | 17.084 92 | 19.847 93 | 18.903 94 | 16.675 95 | 23.006 96 | 97 | -------------------------------------------------------------------------------- /comparison/results/pre_node_point/raw_to_mzDB_results.txt: -------------------------------------------------------------------------------- 1 | D1_Control4_TechRep_1 2 | 189 3 | 24.7268402 4 | 23.130292 5 | 6 | Singer 7 | 244 8 | 41.4633992 9 | 37.4165619 10 | 11 | PaMA150528_J4-3_Q1468 12 | 423 13 | 49.6088206 14 | 47.4865741 15 | 16 | 140924_12 17 | 396 18 | 37.2528108 19 | 40.2312743 20 | 21 | 140924_11 22 | 429 23 | 39.3096229 24 | 36.2397489 25 | 26 | PaMA150528_J8-3_Q1262_150713163831 27 | 557 28 | 80.0134481 29 | 73.5431744 30 | 31 | PaMA150528_J7-2_Q1475 32 | 589 33 | 82.6203717 34 | 78.6959071 35 | 36 | PaMA150528_JA5-4_Q1255 37 | 718 38 | 108.3372535 39 | 110.7418098 40 | -------------------------------------------------------------------------------- /comparison/results/results_records.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/results_records.zip -------------------------------------------------------------------------------- /comparison/results/summ_savings.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/results/summ_savings.ods -------------------------------------------------------------------------------- /comparison/summ.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/comparison/summ.csv -------------------------------------------------------------------------------- /comparison/summarization_savings.py: -------------------------------------------------------------------------------- 1 | 2 | import sys 3 | import random 4 | 5 | # returns iteration 6 | def xeqy(lower, upper, count, jit): 7 | rng = upper - lower 8 | results = [] 9 | for i in range(count): 10 | x = max(0,jitter(lower + random.random() * rng, jit)) 11 | y = max(0,jitter(x,jit)) 12 | results.append((x,y)) 13 | 14 | return results 15 | 16 | def jitter(val, range): 17 | jitter = (2*range * random.random()) - range 18 | return val + jitter 19 | 20 | def summ(lower, upper, count, point_limit, jit): 21 | rng = upper - lower 22 | results = [] 23 | for i in range(count): 24 | x = max(0,jitter(lower + random.random() * rng,jit)) 25 | y = max(0,min(jitter(point_limit,jit),jitter(x,jit))) 26 | results.append((x,y)) 27 | return results 28 | 29 | def main(): 30 | JIT = float(sys.argv[5]) 31 | results = zip(xeqy(float(sys.argv[1]), float(sys.argv[2]), int(sys.argv[3]), JIT), summ(float(sys.argv[1]), float(sys.argv[2]), int(sys.argv[3]), int(sys.argv[4]), JIT)) 32 | 33 | 34 | 35 | 36 | for x,y in results: 37 | print(','.join([str(a) for a in [*x,*y]])) 38 | 39 | if __name__ == '__main__': 40 | main() 41 | -------------------------------------------------------------------------------- /documentation/benchmarks.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/benchmarks.xlsx -------------------------------------------------------------------------------- /documentation/error_logging.txt: -------------------------------------------------------------------------------- 1 | Error Logging System 2 | ======================================================================== 3 | 4 | Tutorials for Java's Logger framework are often too detailed 5 | or too confusing, so here's the architecture rundown: 6 | 7 | * Each class participating in error reporting has a static 8 | Logger instance for that class, so messages have a class name attached. 9 | * There are several levels of logs: Info, Warning, and Fatal. 10 | * Logs can be messages or exceptions; for exceptions a stack trace 11 | is automatically included in the log. 12 | * Logs can go to multiple places. By default, all log() calls go to 13 | standard error (usually a terminal or console). 14 | * StartFrame.java defines a minimal TextAreaLogHandler which adds log 15 | messages to a JTextArea as they come in. StartFrame registers a 16 | TextAreaLogHandler on the "global" logger that receives the log 17 | messages for everything in the application. The end result is that 18 | all log messages appear on the StartFrame's error console. 19 | 20 | USAGE 21 | ======================================================================== 22 | Setup: 23 | ONCE at the top of the class, add 24 | private static final Logger LOGGER = Logger.getLogger(*****.class.getName()); 25 | And change ***** to the name of the class it is in 26 | 27 | Messages: 28 | LOGGER.log(Level.INFO, "I am a log message"); 29 | LOGGER.log(Level.WARNING, "I am a scarier log message"); 30 | 31 | Exceptions: 32 | try { doTheThing(); } 33 | catch (SomeException ex) { 34 | LOGGER.log(Level.WARNING, "Could not do the thing.", ex); 35 | } 36 | 37 | NOTE: this "hides" the exception. The calling method will continue as if 38 | nothing went wrong. Empty catch blocks like this should be used only at 39 | high-level methods if possible. 40 | 41 | That's it! Every LOGGER.log(...) call will go to the terminal output 42 | and also to the StartFrame's error console if it is running. 43 | -------------------------------------------------------------------------------- /documentation/maven_tips.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------ 2 | Tips on building a Maven project on command line 3 | ------------------------------------------------ 4 | 5 | Prerequisites: 6 | Apache Maven - https://maven.apache.org/download.cgi 7 | 8 | pom.xml: 9 | A Maven project root directory is denoted by the existence of pom.xml. 10 | This file instructs Maven how to build the project. Includes version 11 | number, dependencies, Maven project identifiers (known as Maven 12 | Coordinates), Maven plugins and other build configurations. 13 | 14 | Maven commands: 15 | mvn clean 16 | Deletes the ./targets directory if exists 17 | mvn validate 18 | Validates the project in preparation of the build 19 | mvn compile 20 | Compiles the includes source code 21 | mvn package*** 22 | Packages the compiled code into the specified package format (i.e. .jar) 23 | mvn install 24 | Places the package into the local Maven repository (in user's home directory) 25 | mvn deploy 26 | Deploys the package to a remote distribution repository 27 | 28 | Using Maven to build MsDataServer jar file: 29 | 1) On a command line navigate to msViz/msDataServer 30 | 2) Ensure pom.xml exists at msDataServer root 31 | 3) Run command "mvn package" 32 | - jar file will be located in msDataServer/targets -------------------------------------------------------------------------------- /documentation/partitioned_load_overview.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/partitioned_load_overview.odt -------------------------------------------------------------------------------- /documentation/point_groups.txt: -------------------------------------------------------------------------------- 1 | Point Groups: Isotopic Traces and Envelopes 2 | 3 | A "trace" is any region or set of points defined by the user. 4 | After a trace is created, points can be added to or removed from it 5 | and many separate traces will exist simultaneously. When points have 6 | been grouped as a trace, they all become the same color. When the whole 7 | graph is viewed at once every trace is colored differently from its 8 | neighbors so that it is obvious where the traces are. 9 | 10 | When points are selected as part of a trace using the brush, only the 11 | ones visible at the current detail level are counted. So the selection 12 | is not only of a region but of a region in the *visible* data set. So, 13 | points that are only visible at a higher level of detail will not be 14 | part of the trace. This behavior is important and by design. 15 | 16 | The user can use a rectangle, which does include all points that are 17 | in the area, visible or not. 18 | 19 | Further up the hierarchy, an envelope is a set of traces. There can be 20 | any number of envelopes containing traces just like traces contain 21 | points. The user will switch between envelope edit mode and trace edit 22 | mode using buttons on the screen or keyboard shortcuts. As in trace edit 23 | mode, every envelope will have a different color so you can see where 24 | each envelope is. 25 | 26 | The method of point selection for traces and envelopes is a paintbrush 27 | that highlights and paints points near to the mouse cursor on-screen. 28 | 29 | The mzTree knows which points are in what trace and what traces are in 30 | what envelopes. Each point has a trace associated to it and a mapping 31 | table is maintained between traces and envelopes as well. The client 32 | is aware of these relationships and communicates changes to the server 33 | as the user makes selections. So that the server is not 34 | contacted too often, the tracing system can queue updates to the server 35 | and send many updates at once (batching them). The server update can 36 | happen every several seconds or when the user has not clicked for a time. 37 | 38 | An undo system has been implemented on the server. 39 | 40 | 41 | DETAILS AND SPECIFICS 42 | 43 | MODES and KEYBOARD/BUTTONS assignments 44 | Modes: trace, envelope, or neither 45 | For viewing - right click always rotates 46 | 47 | In the trace/envelope modes: 48 | "New" button - activates a new trace/envelope 49 | "Select" button - next click on the screen selects trace/envelope to add to 50 | Click/drag: add, Ctrl + Click/drag: remove 51 | -------------------------------------------------------------------------------- /documentation/summ_strat_profiling.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summ_strat_profiling.docx -------------------------------------------------------------------------------- /documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/intensity_cutoff/intensity_cutoff_lvl1.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_sampling/uniform_sampling_lvl1.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/uniform_striding/uniform_striding_lvl1.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_sampling/weighted_sampling_lvl1.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_no_sorting/weighted_striding_lvl1.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl0.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl0_2D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl0_2D.PNG -------------------------------------------------------------------------------- /documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/documentation/summarization_screenshots/weighted_striding_sorting/weighted_striding_sorting_lvl1.PNG -------------------------------------------------------------------------------- /documentation/useful_tutorials.txt: -------------------------------------------------------------------------------- 1 | Maven: 2 | User Guide - https://maven.apache.org/guides/getting-started/index.html 3 | Lifecyles - http://www.tutorialspoint.com/maven/maven_build_life_cycle.htm 4 | Compilation Configuration - https://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html 5 | 6 | Spark Java Web Server: 7 | ***Documentation*** - http://spark.screenisland.com/overview-summary.html 8 | Getting started and features - http://sparkjava.com/documentation.html 9 | Spark with Maven - https://sparktutorials.github.io/2015/04/02/setting-up-a-spark-project-with-maven.html 10 | 11 | Eclipse with Maven: 12 | Installing Maven Plugin - http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-and-eclipse.html#java-create-jar-pkg-maven-and-eclipse-before-you-begin 13 | Creating a Maven Project - https://sparktutorials.github.io/2015/04/02/setting-up-a-spark-project-with-maven.html#eclipse 14 | -------------------------------------------------------------------------------- /jsms/3rdparty.txt: -------------------------------------------------------------------------------- 1 | FileSaver.js 2 | ============ 3 | The MIT License 4 | 5 | Copyright © 2016 Eli Grey. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | 25 | three.js 26 | ======== 27 | The MIT License 28 | 29 | Copyright © 2010-2018 three.js authors 30 | 31 | Permission is hereby granted, free of charge, to any person obtaining a copy 32 | of this software and associated documentation files (the "Software"), to deal 33 | in the Software without restriction, including without limitation the rights 34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the Software is 36 | furnished to do so, subject to the following conditions: 37 | 38 | The above copyright notice and this permission notice shall be included in 39 | all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 47 | THE SOFTWARE. 48 | 49 | jQuery 50 | ====== 51 | Copyright JS Foundation and other contributors, https://js.foundation/ 52 | 53 | Permission is hereby granted, free of charge, to any person obtaining 54 | a copy of this software and associated documentation files (the 55 | "Software"), to deal in the Software without restriction, including 56 | without limitation the rights to use, copy, modify, merge, publish, 57 | distribute, sublicense, and/or sell copies of the Software, and to 58 | permit persons to whom the Software is furnished to do so, subject to 59 | the following conditions: 60 | 61 | The above copyright notice and this permission notice shall be 62 | included in all copies or substantial portions of the Software. 63 | 64 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 65 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 66 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 67 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 68 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 69 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 70 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 71 | -------------------------------------------------------------------------------- /jsms/css/instructions.css: -------------------------------------------------------------------------------- 1 | html { 2 | min-height: 100%; 3 | } 4 | 5 | body { 6 | background: linear-gradient(#101020, #544C6D); 7 | color: white; 8 | /* font-size: 120%;*/ 9 | /* margin: 0;*/ 10 | /* font: 14px Verdana, sans-serif;*/ 11 | font-family: Arial, Helvetica, sans-serif; 12 | font-size: 12px; 13 | overflow: hidden; 14 | padding: 5px; 15 | } 16 | 17 | .help-header { 18 | font-size: 32px; 19 | } 20 | 21 | table { 22 | width: 35%; 23 | } 24 | 25 | .center { 26 | text-align: center; 27 | } 28 | 29 | #content { 30 | padding: 0 40px; 31 | margin: auto; 32 | } 33 | 34 | .row { 35 | display: flex; 36 | justify-content: center; 37 | } 38 | 39 | .column { 40 | flex: 1; 41 | } 42 | 43 | .section { 44 | margin-top: 1.5em; 45 | clear: both; 46 | } 47 | 48 | .section > img, .section .imgbox { 49 | float: left; 50 | margin: 0 0.75em 0.75em 0; 51 | } 52 | 53 | .section img { 54 | width: 48px; 55 | height: 48px; 56 | } 57 | 58 | .jump-back { 59 | transform: scaleX(-1); 60 | } 61 | -------------------------------------------------------------------------------- /jsms/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/jsms/favicon.ico -------------------------------------------------------------------------------- /jsms/images/buttons/_3d.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 34 | 38 | 42 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /jsms/images/buttons/_3d_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 31 | 35 | 36 | -------------------------------------------------------------------------------- /jsms/images/buttons/add.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bk_add.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bk_cancel.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bk_delete.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bk_edit.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bk_ok.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/bkexport.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | image/svg+xml 16 | 18 | image/svg+xml 19 | 21 | 22 | 23 | 24 | 25 | 27 | background 29 | 36 | 37 | 39 | Layer 1 41 | 43 | 54 | 55 | 59 | 70 | 81 | 92 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /jsms/images/buttons/bkreport.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 15 | 17 | image/svg+xml 18 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 31 | background 33 | 40 | 52 | 53 | 57 | Layer 1 59 | 65 | 69 | 73 | 77 | 81 | 85 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /jsms/images/buttons/bookmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 21 | image/svg+xml 22 | 24 | 25 | 26 | 27 | 28 | 30 | 54 | 55 | 59 | background 61 | 68 | 80 | 81 | 85 | Layer 1 87 | 93 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /jsms/images/buttons/bookmark_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 15 | 17 | image/svg+xml 18 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 31 | background 33 | 40 | 52 | 53 | 57 | Layer 1 59 | 65 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /jsms/images/buttons/brush.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 31 | 35 | 39 | 43 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /jsms/images/buttons/brush_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 36 | 40 | 44 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /jsms/images/buttons/color_selection.txt: -------------------------------------------------------------------------------- 1 | http://www.perbang.dk/rgbgradient/ 2 | From 0000CC to CC00FF over 20 steps, using the HSV Gradient (Inverse): 3 | 4 | 01 - 0000cc 5 | 02 - 0038ce 6 | 03 - 0072d1 7 | 04 - 00aed4 8 | 05 - 00d6c2 9 | 06 - 00d989 10 | 07 - 00dc4e 11 | 08 - 00de12 12 | 09 - 2ae100 13 | 10 - 69e400 14 | 11 - aae600 15 | 12 - e9e700 16 | 13 - eca900 17 | 14 - ee6900 18 | 15 - f12800 19 | 16 - f40019 20 | 17 - f6005d 21 | 18 - f900a2 22 | 19 - fc00e9 23 | 20 - cb00ff 24 | 25 | last selected 2018-07-02: 26 | refresh/alldata/3d/totalion = 3/4/5/6: 0072d1, 00aed4, 00d6c2, 00d989 27 | bookmark/jump/back = 7/8/8: 00dc4e, 00de12, 00de12 28 | bkimport/bkexport/bkpair/bkreport = 9/10/11/12: 2ae100, 69e400, aae600, e9e700 29 | trace/envelope/noise = 13/14/xx: eca900, ee6900, ??? 30 | add/select = 18/19: f900a2, fc00e9 31 | -------------------------------------------------------------------------------- /jsms/images/buttons/colorblind.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/colorblind_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/data.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 33 | -------------------------------------------------------------------------------- /jsms/images/buttons/envelope.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/envelope_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/help.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/help_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/hover_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/jump.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 65 | -------------------------------------------------------------------------------- /jsms/images/buttons/jumpOptions.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/jump_back.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/noise.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | image/svg+xml 4 | 5 | background 6 | 7 | 8 | 9 | Layer 1 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /jsms/images/buttons/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 35 | -------------------------------------------------------------------------------- /jsms/images/buttons/trace.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/buttons/trace_toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/images/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml -------------------------------------------------------------------------------- /jsms/js/components/bookmarkSidebar.js: -------------------------------------------------------------------------------- 1 | Vue.component('BookmarkRow', { 2 | props: ['bookmark', 'isCurrent'], 3 | data: function() { 4 | return { 5 | isEditing: false, 6 | editName: null, 7 | editMz: null, 8 | editRt: null, 9 | }; 10 | }, 11 | computed: { 12 | classObject: function() { 13 | return { 14 | "bookmark-row": true, 15 | "current": this.isCurrent, 16 | }; 17 | } 18 | }, 19 | methods: { 20 | onEdit: function() { 21 | this.editName = this.bookmark.name; 22 | this.editMz = this.bookmark.mz; 23 | this.editRt = this.bookmark.rt; 24 | 25 | this.isEditing = true; 26 | }, 27 | onSetCurrent: function() { 28 | var m = {}; 29 | var midPoint = this.$emit('get-mid-point', m); 30 | this.editMz = m.midPoint.mz; //m.mz for specific range 31 | this.editRt = m.midPoint.rt; //m.rt for specific range 32 | }, 33 | onOkEdit: function() { 34 | this.bookmark.name = this.editName; 35 | this.bookmark.mz = this.editMz; 36 | this.bookmark.rt = this.editRt; 37 | 38 | this.$emit("edit", this.bookmark); 39 | 40 | this.isEditing = false; 41 | }, 42 | onCancelEdit: function() { 43 | this.isEditing = false; 44 | }, 45 | }, 46 | template: ` 47 | 48 | 49 | {{bookmark.name}} 50 | 51 | {{bookmark.mz}} 52 | {{bookmark.rt}} 53 | Edit 54 | Delete 55 | 56 | 57 | 58 | 59 | 60 | Select Current Location 61 | Ok 62 | Cancel 63 | 64 | ` 65 | }); 66 | -------------------------------------------------------------------------------- /jsms/js/components/toolbarButtons.js: -------------------------------------------------------------------------------- 1 | // toolbarButtons.js: Vue components for the toolbar 2 | 3 | Vue.component('ToolbarButton', { 4 | props: ['iconName', 'altText', 'tooltipText'], 5 | data: function() { 6 | var classObject = { 'center-block': true }; 7 | classObject['button-' + this.iconName] = true; 8 | return { classObject: classObject }; 9 | }, 10 | computed: { 11 | imageSrc: function() { 12 | return "images/buttons/" + this.iconName + ".svg"; 13 | } 14 | }, 15 | template: ` 16 |
  • 17 | 18 |
  • ` 19 | }); 20 | 21 | Vue.component('ToolbarToggleButton', { 22 | props: ['iconName', 'isSelected', 'altText', 'tooltipText', 'tooltipTextToggled'], 23 | computed: { 24 | currentIconName: function() { 25 | return this.iconName + (this.isSelected ? "_toggle" : ""); 26 | }, 27 | currentTooltip: function() { 28 | if (this.isSelected) { 29 | return this.tooltipTextToggled || this.tooltipText; 30 | } else { 31 | return this.tooltipText; 32 | } 33 | } 34 | }, 35 | template: ` 36 | 37 | ` 38 | }); 39 | 40 | Vue.component('ToolbarEnableButton', { 41 | props: ['iconName', 'isEnabled', 'altText', 'tooltipText'], 42 | computed: { 43 | currentIconName: function() { 44 | return this.iconName + (this.isEnabled ? "_enabled" : ""); 45 | }, 46 | }, 47 | methods: { 48 | onClick: function() { 49 | if (this.isEnabled) { 50 | this.$emit('click'); 51 | } 52 | }, 53 | }, 54 | template: ` 55 | 56 | ` 57 | }); 58 | 59 | Vue.component('ToolbarAutoToggleButton', { 60 | props: ['iconName', 'altText', 'tooltipText', 'tooltipTextToggled', 'hideTooltip'], 61 | data: function() { 62 | return { 63 | isSelected: false, 64 | }; 65 | }, 66 | computed: { 67 | shouldHideTooltip: function() { 68 | return this.hideTooltip !== undefined && this.hideTooltip; 69 | }, 70 | }, 71 | methods: { 72 | onClick: function() { 73 | this.isSelected = !this.isSelected; 74 | this.$emit('toggle', this.isSelected); 75 | }, 76 | }, 77 | template: ` 78 | 79 | ` 80 | }); 81 | -------------------------------------------------------------------------------- /jsms/js/libs/FileSaver.min.js: -------------------------------------------------------------------------------- 1 | (function(a,b){if("function"==typeof define&&define.amd)define(["exports"],b);else if("undefined"!=typeof exports)b(exports);else{var c={exports:{}};b(c.exports),a.FileSaver=c.exports}})(this,function(a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var b=a.saveAs=b||function(a){if(!("undefined"==typeof a||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var b=a.document,c=function(){return a.URL||a.webkitURL||a},d=b.createElementNS("http://www.w3.org/1999/xhtml","a"),e=function(a){var b=new MouseEvent("click");a.dispatchEvent(b)},f=/constructor/i.test(a.HTMLElement)||a.safari,g=/CriOS\/[\d]+/.test(navigator.userAgent),h=a.setImmediate||a.setTimeout,i=function(a){h(function(){throw a},0)},j=function(a){setTimeout(function revoker(){"string"==typeof a?c().revokeObjectURL(a):a.remove()},40000)},k=function(a,b,c){b=[].concat(b);for(var d,e=b.length;e--;)if(d=a["on"+b[e]],"function"==typeof d)try{d.call(a,c||a)}catch(a){i(a)}},l=function(a){return /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a},m=function(b,i,m){m||(b=l(b));var n,o=this,p=b.type,q=p==="application/octet-stream",r=function(){k(o,["writestart","progress","write","writeend"])};return o.readyState=o.INIT,"download"in d?(n=c().createObjectURL(b),void h(function(){d.href=n,d.download=i,e(d),r(),j(n),o.readyState=o.DONE},0)):void function fs_error(){if((g||q&&f)&&a.FileReader){var d=new FileReader;return d.onloadend=function(){var b=g?d.result:d.result.replace(/^data:[^;]*;/,"data:attachment/file;"),c=a.open(b,"_blank");c||(a.location.href=b),b=void 0,o.readyState=o.DONE,r()},d.readAsDataURL(b),void(o.readyState=o.INIT)}if(n||(n=c().createObjectURL(b)),q)a.location.href=n;else{var e=a.open(n,"_blank");e||(a.location.href=n)}o.readyState=o.DONE,r(),j(n)}()},n=m.prototype,o=function(a,b,c){return new m(a,b||a.name||"download",c)};return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(a,b,c){return b=b||a.name||"download",c||(a=l(a)),navigator.msSaveOrOpenBlob(a,b)}:(n.abort=function(){},n.readyState=n.INIT=0,n.WRITING=1,n.DONE=2,n.error=n.onwritestart=n.onprogress=n.onwrite=n.onabort=n.onerror=n.onwriteend=null,o)}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||void 0)}); 2 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/msHttpApi/HeadlessServer.java: -------------------------------------------------------------------------------- 1 | package edu.msViz.msHttpApi; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.Paths; 5 | 6 | import edu.msViz.mzTree.MzTree; 7 | import edu.msViz.mzTree.summarization.SummarizationStrategyFactory.Strategy; 8 | 9 | public class HeadlessServer { 10 | 11 | /** 12 | * Runs the data server headless in one of several modes. 13 | * 14 | * convert: converts an input file to an mzTree file 15 | * server: starts the MS HTTP server for a file on a port 16 | * 17 | * Example usage: 18 | * java -cp /path/to/msDataServer-1.0.jar edu.msViz.msHttpApi.HeadlessServer convert input_file.mzML output_file.mzTree 19 | * java -cp /path/to/msDataServer-1.0.jar edu.msViz.msHttpApi.HeadlessServer server file.mzTree 8000 20 | * 21 | */ 22 | public static void main(String[] args) { 23 | if (args.length < 1) { 24 | System.out.println("Expected 'convert' or 'server' operation."); 25 | return; 26 | } 27 | 28 | if (args[0].equals("convert")) { 29 | if (args.length < 3) { 30 | System.out.println("Expected a source and a destination path."); 31 | return; 32 | } 33 | Path sourcePath = Paths.get(args[1]); 34 | Path destPath = Paths.get(args[2]); 35 | 36 | try { 37 | convert(sourcePath, destPath); 38 | } catch (Exception e) { 39 | e.printStackTrace(); 40 | } 41 | 42 | } else if (args[0].equals("server")) { 43 | if (args.length < 3) { 44 | System.out.println("Expected a file and a port."); 45 | return; 46 | } 47 | 48 | Path filePath = Paths.get(args[1]); 49 | int port; 50 | try { 51 | port = Integer.parseInt(args[2]); 52 | } catch(NumberFormatException ex) { 53 | System.out.println("Port must be a number."); 54 | return; 55 | } 56 | 57 | try { 58 | startServer(filePath, port); 59 | } catch (Exception e) { 60 | e.printStackTrace(); 61 | } 62 | } 63 | } 64 | 65 | public static void convert(Path sourceFilePath, Path destFilePath) throws Exception { 66 | MzTree mzTree = new MzTree(); 67 | mzTree.setConvertDestinationProvider(suggestedPath -> { 68 | return destFilePath; 69 | }); 70 | mzTree.load(sourceFilePath.toString(), Strategy.WeightedStriding); 71 | } 72 | 73 | public static void startServer(Path filePath, int port) throws Exception { 74 | MzTree mzTree = new MzTree(); 75 | mzTree.load(filePath.toString(), Strategy.WeightedStriding); 76 | 77 | MsDataServer dataServer = new MsDataServer(); 78 | dataServer.setMzTree(mzTree); 79 | dataServer.startServer(port); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/IO/Decoder.java: -------------------------------------------------------------------------------- 1 | package edu.msViz.mzTree.IO; 2 | 3 | import java.io.ByteArrayOutputStream; 4 | import java.nio.ByteBuffer; 5 | import java.nio.ByteOrder; 6 | import java.util.Base64; 7 | import java.util.zip.DataFormatException; 8 | import java.util.zip.Inflater; 9 | 10 | /** 11 | * Decodes base64 encoded strings into double arrays 12 | */ 13 | public class Decoder { 14 | /** 15 | * converts base64 string input to array of doubles 16 | * @param input base64 encoded data 17 | * @param isDouble flag to signal if data is 32 or 64 bit floating point 18 | * @return decoded double array 19 | */ 20 | public static double[] decodeUncompressed(String input, boolean isDouble) { 21 | return decodeUncompressed(Base64.getDecoder().decode(input), isDouble); 22 | } 23 | 24 | /** 25 | * converts array of bytes to corresponding array of doubles 26 | * @param binArray array of bytes 27 | * @param isDouble flag to signal if data is 32 or 64 bit floating point 28 | * @return decoded double array 29 | */ 30 | public static double[] decodeUncompressed(byte[] binArray, boolean isDouble) { 31 | ByteBuffer buf = ByteBuffer.wrap(binArray).order(ByteOrder.LITTLE_ENDIAN); 32 | 33 | int bytesPer = isDouble ? 8 : 4; 34 | double[] dataArray = new double[binArray.length / bytesPer]; 35 | 36 | for (int i = 0; i < dataArray.length; i++) { 37 | dataArray[i] = isDouble ? buf.getDouble() : buf.getFloat(); 38 | } 39 | return dataArray; 40 | } 41 | 42 | /** 43 | * converts zlib-compressed base-64 encoded data to array of doubles 44 | * @param encoding base-64 encoded data 45 | * @param isDouble flag to signal if data is 32 or 64 bit floating point 46 | * @return decoded double array 47 | * @throws java.util.zip.DataFormatException 48 | * @throws java.io.IOException 49 | */ 50 | public static double[] decodeCompressed(String encoding, boolean isDouble) throws DataFormatException 51 | { 52 | // Decode the Base64 string into a byte array. 53 | byte[] binArray = Base64.getDecoder().decode(encoding); 54 | 55 | // decompress zlib 56 | Inflater decompressor = new Inflater(); 57 | decompressor.setInput(binArray); 58 | 59 | // Create an expandable byte array to hold the decompressed data 60 | ByteArrayOutputStream bos = new ByteArrayOutputStream(binArray.length); 61 | 62 | // Decompress the data 63 | byte[] buf = new byte[1024]; 64 | while (!decompressor.finished()) { 65 | int count = decompressor.inflate(buf); 66 | bos.write(buf, 0, count); 67 | } 68 | return decodeUncompressed(bos.toByteArray(), isDouble); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/IO/LabelledMsDataRange.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.IO; 7 | 8 | /** 9 | * MsDataRange with a label 10 | * @author kyle 11 | */ 12 | public class LabelledMsDataRange extends MsDataRange{ 13 | 14 | /** 15 | * As promised, a label 16 | */ 17 | public String label; 18 | 19 | /** 20 | * Default constructor, accepting all fields 21 | * @param label range's label 22 | * @param mzMin range's minimum mz value 23 | * @param mzMax range's maximum mz value 24 | * @param rtMin range's minimum rt value 25 | * @param rtMax range's maximum rt value 26 | */ 27 | public LabelledMsDataRange(String label, double mzMin, double mzMax, float rtMin, float rtMax) 28 | { 29 | super(mzMin, mzMax, rtMin, rtMax); 30 | this.label = label; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/IO/MsDataRange.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.IO; 7 | 8 | /** 9 | * 2D data range in the m/z*RT plane 10 | * @author kyle 11 | */ 12 | public class MsDataRange 13 | { 14 | // minimum/maximum bounds on m/z and rt axes 15 | public double mzMin; 16 | public double mzMax; 17 | public float rtMin; 18 | public float rtMax; 19 | 20 | /** 21 | * Default constructor, accepting all fields 22 | * @param mzMin range's minimum mz value 23 | * @param mzMax range's maximum mz value 24 | * @param rtMin range's minimum rt value 25 | * @param rtMax range's maximum rt value 26 | */ 27 | public MsDataRange(double mzMin, double mzMax, float rtMin, float rtMax) 28 | { 29 | this.mzMin = mzMin; 30 | this.mzMax = mzMax; 31 | this.rtMin = rtMin; 32 | this.rtMax = rtMax; 33 | } 34 | 35 | /** 36 | * copy constructor 37 | * @param otherRange 38 | */ 39 | public MsDataRange(MsDataRange otherRange) 40 | { 41 | this(otherRange.mzMin,otherRange.mzMax,otherRange.rtMin,otherRange.rtMax); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/MzTreeTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | 7 | package edu.msViz.mzTree; 8 | 9 | import edu.msViz.mzTree.IO.MzmlParser; 10 | import edu.msViz.mzTree.summarization.SummarizationStrategyFactory.Strategy; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | 15 | /** 16 | * 17 | * @author rob 18 | */ 19 | public class MzTreeTest { 20 | /** 21 | * @param args the command line arguments 22 | */ 23 | public static MzTree mzTree; 24 | 25 | public static void main(String[] args) throws Exception { 26 | ////////////////////// BUILD /////////////////////////////////////////////// 27 | // get .mzML data 28 | String filepath = "../data/mzml/sample3.mzML"; 29 | //String filepath = "../data/mzml/18185_REP2_4pmol_UPS2_IDA_1.mzML"; 30 | List msData = new MzmlParser(filepath).readAllData(); 31 | 32 | Strategy selectedStrategy = Strategy.IntensityCutoff; 33 | 34 | mzTree = new MzTree(); 35 | mzTree.load(filepath, selectedStrategy); 36 | 37 | List results = mzTree.query(mzTree.head.mzMin, mzTree.head.mzMin, mzTree.head.rtMin, mzTree.head.rtMin+100, 15000); 38 | 39 | System.out.println("Retrieved results w/ length " + results.size()); 40 | 41 | queryAndTest(msData, 0,10000,0,10000); 42 | queryAndTest(msData, 100,500,0,5); 43 | queryAndTest(msData, 500,1000,0,3); 44 | queryAndTest(msData, 5,1000,1,5); 45 | queryAndTest(msData, 20,507,6,10); 46 | queryAndTest(msData, 21,356,0,12); 47 | queryAndTest(msData, 456,10000,0,20); 48 | queryAndTest(msData, 500,1100,5,6); 49 | queryAndTest(msData, 20,459,0,900); 50 | queryAndTest(msData, 0,500,2,900); 51 | } 52 | 53 | 54 | public static void queryAndTest(List msData, double mzMin, double mzMax, float rtMin, float rtMax){ 55 | //QUERY 56 | List response = mzTree.query(mzMin, mzMax, rtMin, rtMax, 0); 57 | //CHECK 58 | List bruteForceAnswer = new ArrayList<>(); 59 | for (MsDataPoint dataPoint: msData){ 60 | if(dataPoint.rt >= rtMin && dataPoint.rt <= rtMax && dataPoint.mz <= mzMax && dataPoint.mz >= mzMin){ 61 | bruteForceAnswer.add(dataPoint); 62 | } 63 | } 64 | if(response.size() == bruteForceAnswer.size()){ 65 | System.out.println("PASSED! " + mzMin + "," + mzMax + "," + rtMin+ "," + rtMax); 66 | } else{ 67 | System.out.println("FAILED! " + mzMin + "," + mzMax + "," + rtMin+ "," + rtMax); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/harnesses/ConversionResults.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.harnesses; 7 | 8 | /** 9 | * 10 | * @author kyle 11 | */ 12 | public class ConversionResults 13 | { 14 | public long executionMS; 15 | public long fileSizeBytes; 16 | public long numPoints; 17 | 18 | public ConversionResults(long execMS, long fSize, long nPts) 19 | { 20 | this.executionMS = execMS; 21 | this.fileSizeBytes = fSize; 22 | this.numPoints = nPts; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/harnesses/MzmlPointCounter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.harnesses; 7 | 8 | import edu.msViz.mzTree.IO.MzmlParser; 9 | 10 | /** 11 | * 12 | * @author kyle 13 | */ 14 | public class MzmlPointCounter 15 | { 16 | public static void main(String args[]) 17 | { 18 | 19 | // parameters 20 | String relPath = "../../data/mzml/"; 21 | 22 | String[] filenames = {"D1_Control4_TechRep_1.mzML", 23 | "Singer_BGWC_8plex_04_9May13_Methow_13-02-13.mzML", 24 | "PaMA150528_J4-3_Q1468.mzML", 25 | "140924_12.mzML", 26 | "140924_11.mzML", 27 | "PaMA150528_J8-3_Q1262_150713163831.mzML", 28 | "PaMA150528_J7-2_Q1475.mzML"}; 29 | 30 | 31 | for(String file : filenames){ 32 | 33 | try { 34 | MzmlParser parser = new MzmlParser(relPath + file); 35 | int numPoints = parser.countPoints(); 36 | System.out.println(file + ": " + numPoints); 37 | } catch (Exception ex) { 38 | System.err.println("Failed on: " + file + " || " + ex.getMessage()); 39 | } 40 | 41 | 42 | } 43 | 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/harnesses/Segmentation.java: -------------------------------------------------------------------------------- 1 | package edu.msViz.mzTree.harnesses; 2 | 3 | import edu.msViz.msHttpApi.MsDataServer; 4 | import edu.msViz.msHttpApi.MzTreePointDatabaseConnection; 5 | import edu.msViz.mzTree.MzTree; 6 | import edu.msViz.mzTree.summarization.SummarizationStrategyFactory; 7 | import edu.umt.ms.traceSeg.TraceSegmenter; 8 | 9 | import java.util.logging.Level; 10 | import java.util.logging.Logger; 11 | 12 | public class Segmentation { 13 | private static final Logger LOGGER = Logger.getLogger(Segmentation.class.getName()); 14 | 15 | public static void main(String[] args) throws Exception { 16 | if (args.length != 1) { 17 | System.err.println("Required exactly one argument."); 18 | System.exit(1); 19 | } 20 | 21 | // load mzTree from file 22 | MzTree mzTree = new MzTree(); 23 | mzTree.load(args[0], SummarizationStrategyFactory.Strategy.WeightedStriding); 24 | 25 | // run server 26 | MsDataServer server = new MsDataServer(); 27 | server.setMzTree(mzTree); 28 | server.startServer(4567); 29 | 30 | // run trace segmenter 31 | MzTreePointDatabaseConnection connection = new MzTreePointDatabaseConnection(mzTree); 32 | LOGGER.log(Level.INFO, "Beginning trace segmentation"); 33 | long start = System.currentTimeMillis(); 34 | TraceSegmenter segmenter = new TraceSegmenter(connection); 35 | segmenter.run(); 36 | LOGGER.log(Level.INFO, "Trace segmentation finished in " + (System.currentTimeMillis() - start) + "ms"); 37 | mzTree.pointCache.clear(); 38 | 39 | // run envelope segmentation 40 | LOGGER.log(Level.INFO, "Beginning envelope segmentation"); 41 | start = System.currentTimeMillis(); 42 | mzTree.executeClusteringCommand("Bayesian", false, null); 43 | LOGGER.log(Level.INFO, "Envelope segmentation finished in " + (System.currentTimeMillis() - start) + "ms"); 44 | 45 | mzTree.close(); 46 | server.stopServer(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/storage/StorageFacadeFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.storage; 7 | 8 | /** 9 | * Factory pattern implementation for determining storage implementation at runtime 10 | * @author Kyle 11 | */ 12 | public class StorageFacadeFactory 13 | { 14 | // Facade options 15 | public static enum Facades { Hybrid }; 16 | 17 | /** 18 | * Constructs the StorageFacade implementation corresponding to the facade choice 19 | * @param choice Facade choice 20 | * @return Corresponding StorageFacade implementation 21 | */ 22 | public static StorageFacade create(Facades choice){ 23 | switch(choice){ 24 | default: 25 | case Hybrid: 26 | return new HybridStorage(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/IntensityCutoffStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.Collections; 10 | import java.util.Comparator; 11 | import java.util.List; 12 | 13 | /** 14 | * Summarization strategy that selects the numPoints most intense points 15 | * @author Kyle 16 | */ 17 | public class IntensityCutoffStrategy extends SummarizationStrategy 18 | { 19 | @Override 20 | public List summarize(List dataset, int numPoints){ 21 | 22 | // sort dataset by intensity 23 | Collections.sort(dataset, Comparator.comparing((MsDataPoint dataPoint) -> dataPoint.intensity)); 24 | 25 | // return final numPoints of sorted array (numPoints most intense points) 26 | return dataset.subList(dataset.size() - numPoints,dataset.size()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/SummarizationStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.List; 10 | import java.util.Random; 11 | 12 | /** 13 | * Summarization strategy base class 14 | * Heirs must implement abstract method "summarize" 15 | * @author Kyle 16 | */ 17 | public abstract class SummarizationStrategy 18 | { 19 | /** 20 | * Summarize the given dataset by selecting numPoints of the set 21 | * @param dataset dataset to summarize 22 | * @param numPoints number of points to select 23 | * @return summarized dataset 24 | */ 25 | public abstract List summarize(List dataset, int numPoints); 26 | 27 | /** 28 | * Fisher-Yates shuffle algorithm 29 | * @param dataset 30 | */ 31 | protected void shuffle(List dataset) 32 | { 33 | // random number generator 34 | Random rnd = new Random(System.currentTimeMillis()); 35 | 36 | // shuffle the data, starting at last point swap with random point 37 | for (int i = dataset.size() - 1; i > 0; i--) 38 | { 39 | // index of point to swap with (always precedes focused point) 40 | int index = rnd.nextInt(i + 1); 41 | 42 | // swap 43 | MsDataPoint temp = dataset.get(index); 44 | dataset.set(index, dataset.get(i)); 45 | dataset.set(i, temp); 46 | } 47 | } 48 | 49 | protected double sumMz(List dataset){ 50 | double accumulator = 0; 51 | for(MsDataPoint p : dataset) 52 | accumulator += p.mz; 53 | return accumulator; 54 | } 55 | 56 | protected float sumRt(List dataset){ 57 | float accumulator = 0; 58 | for(MsDataPoint p : dataset) 59 | accumulator += p.rt; 60 | return accumulator; 61 | } 62 | 63 | protected double sumIntensity(List dataset){ 64 | double accumulator = 0; 65 | for(MsDataPoint p : dataset) 66 | accumulator += p.intensity; 67 | return accumulator; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/SummarizationStrategyFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | /** 9 | * Factory pattern for creating the selected SummarizationStrategy 10 | * @author Kyle 11 | */ 12 | public class SummarizationStrategyFactory 13 | { 14 | public static enum Strategy { IntensityCutoff, UniformStriding, WeightedStriding, UniformSampling, WeightedSampling, WeightedReservoirSampling }; 15 | 16 | public static SummarizationStrategy create(Strategy strategy){ 17 | switch(strategy){ 18 | default: 19 | case IntensityCutoff: 20 | return new IntensityCutoffStrategy(); 21 | case UniformStriding: 22 | return new UniformStridingStrategy(); 23 | case WeightedStriding: 24 | return new WeightedStridingStrategy(); 25 | case UniformSampling: 26 | return new UniformSamplingStrategy(); 27 | case WeightedSampling: 28 | return new WeightedSamplingStrategy(); 29 | case WeightedReservoirSampling: 30 | return new WeightedReservoirSampling(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/UniformSamplingStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.List; 10 | 11 | /** 12 | * Summarization strategy that selects using uniform random sampling 13 | * @author Kyle 14 | */ 15 | public class UniformSamplingStrategy extends SummarizationStrategy 16 | { 17 | @Override 18 | public List summarize(List dataset, int numPoints) 19 | { 20 | // shuffle the dataset (enter stochasticity) 21 | this.shuffle(dataset); 22 | 23 | // return first numPoints 24 | return dataset.subList(0, numPoints); 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/UniformStridingStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * Summarization strategy that selects data points by striding through the dataset 14 | * @author Kyle 15 | */ 16 | public class UniformStridingStrategy extends SummarizationStrategy 17 | { 18 | @Override 19 | public List summarize(List dataset, int numPoints) 20 | { 21 | // calculate length of the stride that will achieve the desired 22 | // number of points 23 | int strideLength = dataset.size()/numPoints; 24 | 25 | // the selected datapoints 26 | List selection = new ArrayList<>(numPoints); 27 | 28 | // stride through dataset and collect sample 29 | for(int i = 0; i < numPoints; i++) 30 | selection.set(i, dataset.get(i * strideLength)); 31 | 32 | return selection; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/WeightedReservoirSampling.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.ArrayList; 10 | import java.util.Iterator; 11 | import java.util.List; 12 | import java.util.PriorityQueue; 13 | import java.util.Random; 14 | 15 | /** 16 | * 17 | * @author André 18 | * see Algorithm A-Res at: https://en.wikipedia.org/wiki/Reservoir_sampling#Weighted_Random_Sampling_using_Reservoir 19 | * 20 | */ 21 | public class WeightedReservoirSampling extends SummarizationStrategy 22 | { 23 | @Override 24 | public List summarize(List dataset, int numPoints) 25 | { 26 | Random rand = new Random(); 27 | // PriorityQueue for holding numPoints points and removing lowest priority point when replaced 28 | PriorityQueue q = new PriorityQueue<>(); 29 | List pointsToReturn = new ArrayList<>(numPoints); 30 | 31 | // Looks at every point in data set and randomly replaces a point 32 | // with a new point when appropriate based on weights 33 | for (int i = 0; i < dataset.size(); i++) { 34 | WeightedPoint p = new WeightedPoint(); 35 | p.point = dataset.get(i); 36 | p.priority = Math.pow(rand.nextDouble(),(1.0/p.point.intensity)); // priority calculated based on random double and weight 37 | if (q.size() < numPoints) { //add every point until we have numPoints 38 | q.add(p); 39 | } 40 | else if (q.peek().priority < p.priority) { //if new point has higher priority than lowest priority point in queue, replace 41 | q.poll(); 42 | q.add(p); 43 | } 44 | } 45 | 46 | // iterates over PriorityQueue and adds each MsDataPoint to an array 47 | Iterator it = q.iterator(); 48 | for (int i = 0; it.hasNext(); i++) { 49 | pointsToReturn.set(i,it.next().point); 50 | } 51 | 52 | 53 | return pointsToReturn; 54 | } 55 | 56 | } 57 | // WeightedPoint class because points need to have a stored priority to compare 58 | class WeightedPoint implements Comparable{ 59 | MsDataPoint point; 60 | double priority; 61 | 62 | @Override 63 | public int compareTo(WeightedPoint other) { 64 | return (Double.compare(this.priority, other.priority)); 65 | } 66 | } 67 | 68 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/WeightedSamplingStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | import java.util.Random; 12 | 13 | /** 14 | * Summarization strategy that selects points using weighted random sampling 15 | * @author Kyle 16 | */ 17 | public class WeightedSamplingStrategy extends SummarizationStrategy 18 | { 19 | @Override 20 | public List summarize(List dataset, int numPoints) 21 | { 22 | // sum of intensity values 23 | float intensitySum = (float)this.sumIntensity(dataset); 24 | 25 | // f 26 | float f = numPoints / intensitySum; 27 | 28 | // arraylist to store selected datapoints 29 | List selection = new ArrayList<>(numPoints); 30 | Random random = new Random(System.currentTimeMillis()); 31 | 32 | // test each point for inclusion 33 | for(int i = 0; selection.size() < numPoints; i = (i+1) % dataset.size()) 34 | { 35 | float p = f * (float)dataset.get(i).intensity; 36 | if(random.nextFloat() <= p/2) 37 | selection.add(dataset.get(i)); 38 | } 39 | 40 | return selection; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /msDataServer/src/main/java/edu/msViz/mzTree/summarization/WeightedStridingStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.mzTree.summarization; 7 | 8 | import edu.msViz.mzTree.MsDataPoint; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * Summarization strategy that accumulates the intensities of an intensity sorted 14 | * MS dataset, collecting points that send the accumulation over a threshold 15 | * @author Kyle 16 | */ 17 | public class WeightedStridingStrategy extends SummarizationStrategy 18 | { 19 | // length that stride jumps between array elements 20 | final int STRIDE_LENGTH = 43; 21 | 22 | @Override 23 | public List summarize(List dataset, int numPoints) 24 | { 25 | if (dataset.size() <= numPoints) { 26 | return new ArrayList<>(dataset); 27 | } 28 | 29 | List skippedPoints = new ArrayList<>(); 30 | ArrayList selection = new ArrayList<>(numPoints); 31 | 32 | // running total of accumulated intensity since the last selected point 33 | double intensityAccumulation = 0; 34 | 35 | // Threshold used during accumulation to decide when a point is included. 36 | // Total intensity divided by desired number of points gets a nice looking sample 37 | double accumulationThreshold = this.sumIntensity(dataset) / numPoints; 38 | 39 | int i = 0; 40 | while (selection.size() < numPoints) { 41 | MsDataPoint point = dataset.get(i); 42 | intensityAccumulation += point.intensity; 43 | 44 | // when accumulation passes the threshold, select the point and reduce the accumulator 45 | if (intensityAccumulation >= (accumulationThreshold - 1.0e-5)) { 46 | selection.add(point); 47 | intensityAccumulation -= accumulationThreshold; 48 | } else { 49 | skippedPoints.add(point); 50 | } 51 | 52 | i += STRIDE_LENGTH; 53 | 54 | if (i >= dataset.size()) { 55 | // stride through data again, starting with a new index 56 | i = (i+1) % STRIDE_LENGTH; 57 | } 58 | 59 | if (i == 0) { 60 | // every point in dataset has been examined, so now only consider the previously skipped points 61 | // this prevents already added points from being added again 62 | dataset = skippedPoints; 63 | skippedPoints = new ArrayList<>(); 64 | } 65 | } 66 | 67 | return selection; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /msDataServer/target/msDataServer-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/msDataServer/target/msDataServer-1.0.jar -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.msViz 8 | msViz 9 | 1.0-SNAPSHOT 10 | 11 | pom 12 | 13 | 14 | xnet 15 | msDataServer 16 | tracesegmentation 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /tracesegmentation/README.md: -------------------------------------------------------------------------------- 1 | # Mass Spec - Trace Segmentation 2 | 3 | The trace segmentation algorithm is derived from Rob Smith's 4 | original Ruby code and lives in the `edu.umt.ms.traceSeg` namespace. 5 | The "meat" of the code is in the `TraceSegmenter` Java class. 6 | 7 | Trace segmentation depends on a `PointDatabaseConnection`; a reference 8 | `HttpPointDatabaseConnection` has been provided with support for the 9 | `MsHttpServer` API. Additionally, a `TraceParametersProvider` is used 10 | to obtain the tuning parameters. This plugin may be removed in the 11 | future if good enough defaults are determined. If desired, the two 12 | interfaces can be reimplemented by consumers of this library to work 13 | efficiently with their own data structures and other needs. 14 | 15 | Trace segmentation works against a running MS HTTP server with the 16 | reference implementation, and msViz has support for running 17 | direct-access trace segmentation (as opposed to slow HTTP) in several 18 | harnesses and as an option in the GUI (_Cluster_ tab, _Trace_ button). 19 | 20 | ## Metrics 21 | In addition to trace segmentation itself, metrics have been implemented 22 | in `edu.umt.ms.traceSeg.metrics`; Purity, NMI, SSE, and NTCD are 23 | implemented at this time. These all run against CSV exports of 24 | trace-segmented mass spec data. 25 | 26 | ## Usage 27 | The project is packaged as a maven artifact. For code usage, see 28 | `src/main/java/edu/umt/ms/traceSeg/TraceSegmentation.java` for an 29 | example. This example uses an `HttpPointDatabaseConnection` 30 | (connecting to a running MS HTTP server) and uses 31 | `ConsoleTraceParametersProvider` to interactively request parameters 32 | from the user at runtime. 33 | 34 | ## Algorithm 35 | TraceSegmenter.java implements a probability-based single-pass assignment 36 | of points to traces. The point with the highest intensity is assigned 37 | first, followed by the next-highest point, until a point with a lower 38 | intensity than the limit is reached. For each point, all "nearby" existing 39 | traces, that is, traces close enough that the point could be included 40 | in them, are checked. The trace with the highest probability score is 41 | selected, as long as it is within the probability threshold. If no trace 42 | scores the point within the probability threshold, a new trace is created. 43 | The point is assigned to the trace and the trace's statistics are updated 44 | for use when inspecting future points. 45 | 46 | The probability score is a function of distance in m/z, distance in RT, 47 | and intensity. For m/z and RT, closer points are higher-scoring. For 48 | intensity, less-intense points are more likely to be associated with any 49 | trace and more-intense points are less likely to be associated with any 50 | trace. Additionally, no point can be added to an existing trace unless 51 | its intensity is strictly lower than the intensities of all other points 52 | currently in the trace. 53 | -------------------------------------------------------------------------------- /tracesegmentation/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.umt.ms.traceseg 8 | trace-segmentation 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | com.google.code.gson 14 | gson 15 | 2.8.5 16 | 17 | 18 | 19 | org.apache.httpcomponents 20 | httpclient 21 | 4.5.5 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | org.apache.maven.plugins 31 | maven-compiler-plugin 32 | 3.3 33 | 34 | 35 | 1.8 36 | 1.8 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /tracesegmentation/src/main/java/edu/umt/ms/traceSeg/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/tracesegmentation/src/main/java/edu/umt/ms/traceSeg/.DS_Store -------------------------------------------------------------------------------- /tracesegmentation/src/main/java/edu/umt/ms/traceSeg/Point.java: -------------------------------------------------------------------------------- 1 | package edu.umt.ms.traceSeg; 2 | 3 | import com.google.gson.JsonArray; 4 | import java.util.*; 5 | /** 6 | * Simple point data format relevant to segmentation 7 | */ 8 | public class Point{ 9 | public int id; 10 | public int order; 11 | public double mz; 12 | public float rt; 13 | public double intensity; 14 | public int group; 15 | public double confidence; 16 | 17 | public Point(int id, double mz, float rt, double intensity) { 18 | this.confidence = Double.POSITIVE_INFINITY; 19 | this.id = id; 20 | this.mz = mz; 21 | this.rt = rt; 22 | this.intensity = intensity; 23 | } 24 | 25 | public Point(JsonArray pointData) { 26 | id = pointData.get(0).getAsInt(); 27 | mz = pointData.get(2).getAsDouble(); 28 | rt = pointData.get(3).getAsFloat(); 29 | intensity = pointData.get(4).getAsDouble(); 30 | } 31 | 32 | public double getIntensity(){ 33 | return intensity; 34 | } 35 | 36 | public double getMz(){ 37 | return mz; 38 | } 39 | 40 | 41 | public double getRt(){ 42 | return rt; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /tracesegmentation/src/main/java/edu/umt/ms/traceSeg/PointDatabaseConnection.java: -------------------------------------------------------------------------------- 1 | package edu.umt.ms.traceSeg; 2 | import java.util.*; 3 | /** 4 | * Defines an API to interface with a segmentation database. 5 | * The database must provide access to: 6 | * * a datawide intensity range 7 | * * the highest point that has not yet been segmented 8 | * * the next available ID for a trace 9 | * * a system for assigning a point to a trace 10 | */ 11 | public interface PointDatabaseConnection { 12 | List getAllPoints(double minMz, double maxMz, float minRt, float maxRt, double minIntensity) throws Exception; 13 | double getMinimumIntensity() throws Exception; 14 | double getMaximumIntensity() throws Exception; 15 | void deleteTraces() throws Exception; 16 | Point getHighestUnassignedPoint() throws Exception; 17 | int getNextTraceId() throws Exception; 18 | void writePoint(int traceId, Point point) throws Exception; 19 | double getMzResolution(double nearMz) throws Exception; 20 | } 21 | -------------------------------------------------------------------------------- /tracesegmentation/src/main/java/edu/umt/ms/traceSeg/TraceSegmentation.java: -------------------------------------------------------------------------------- 1 | package edu.umt.ms.traceSeg; 2 | 3 | import java.net.URI; 4 | import java.net.URISyntaxException; 5 | 6 | class TraceSegmentation { 7 | 8 | /** 9 | * Runs trace segmentation against an already-running MsDataServer accessible at http://localhost:4567 10 | */ 11 | public static void main(String[] args) { 12 | TraceSegmenter segmenter; 13 | 14 | try { 15 | segmenter = new TraceSegmenter(new HttpPointDatabaseConnection(new URI("http://localhost:4567/"))); 16 | } catch (URISyntaxException e) { 17 | e.printStackTrace(); 18 | return; 19 | } 20 | 21 | try { 22 | segmenter.run(); 23 | } catch (Exception e) { 24 | e.printStackTrace(); 25 | return; 26 | } 27 | 28 | System.out.println("Finished."); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /xnet.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/optimusmoose/jsms/f3454b79f93f2d92e8072537e05d3b23a9092a2c/xnet.tar.gz -------------------------------------------------------------------------------- /xnet/README.txt: -------------------------------------------------------------------------------- 1 | ## System requirements: 2 | - Build-time: Java 8 JDK, Apache Maven 3 | - Runtime: Java 8 JRE or higher 4 | 5 | ## Build procedure 6 | - Run `mvn package` from within the project root directory 7 | 8 | ## Testing 9 | - Place ground truth CSVs in root, Run TestRun with name of test file to cluster traces. Xnet will return a List of IsotopicEnvelope datatypes that can be used. 10 | -------------------------------------------------------------------------------- /xnet/src/main/java/edu/msViz/xnet/TestRun.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet; 7 | 8 | import edu.msViz.xnet.dataTypes.IsotopeTrace; 9 | import edu.msViz.xnet.dataTypes.IsotopicEnvelope; 10 | import edu.msViz.xnet.dataTypes.TracesBundle; 11 | import edu.msViz.xnet.probability.ProbabilityAggregator; 12 | import java.util.List; 13 | 14 | import java.io.FileWriter; 15 | import java.io.IOException; 16 | 17 | 18 | /** 19 | * 20 | * @author kyle,mathew 21 | */ 22 | public class TestRun { 23 | 24 | private TracesBundle tracesBundle; 25 | 26 | public static void main(String[] args) throws IOException 27 | { 28 | TestRun test = new TestRun(); 29 | test.tracesBundle = Utility.loadValuesFromCSV(args[0]); 30 | List traces = test.tracesBundle.synthesize(); 31 | FileWriter writer = new FileWriter("output.csv"); 32 | 33 | try { 34 | writer.write("mz,rt,intensity,traceID,envelopeID\n"); 35 | List Envelopes = new TraceClusterer().clusterTraces(traces, ProbabilityAggregator.PROB_MODEL.BAYESIAN, null); 36 | for(int i = 0; i < Envelopes.size(); i++) { 37 | for (int j = 0; j < Envelopes.get(i).traces.length; j++){ 38 | for (int k = 0; k < Envelopes.get(i).traces[j].mzValues.size(); k++) { 39 | String mz = Double.toString(Envelopes.get(i).traces[j].mzValues.get(k)); 40 | String rt = Float.toString(Envelopes.get(i).traces[j].rtValues.get(k)); 41 | String intensity = Double.toString(Envelopes.get(i).traces[j].intensityValues.get(k)); 42 | String traceID = Integer.toString(Envelopes.get(i).traces[j].traceID); 43 | String envelopeID = Integer.toString(Envelopes.get(i).envelopeID); 44 | 45 | writer.write(mz + "," + rt + "," + intensity + "," + traceID + "," + envelopeID+"\n"); 46 | } 47 | } 48 | } 49 | writer.close(); 50 | } catch (Exception ex) { 51 | System.err.println("Error || " + ex.getMessage()); 52 | ex.printStackTrace(); 53 | } 54 | 55 | } 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /xnet/src/main/java/edu/msViz/xnet/dataTypes/IsotopicEnvelope.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet.dataTypes; 7 | 8 | import java.util.Arrays; 9 | import java.util.Comparator; 10 | import java.util.Set; 11 | 12 | /** 13 | * Isotopic envelope containing a group of isotope traces and summary values 14 | * @author kyle 15 | */ 16 | public class IsotopicEnvelope { 17 | 18 | /** 19 | * unique envelope identifier 20 | */ 21 | public final int envelopeID; 22 | 23 | /** 24 | * traces assigned to the envelope during trace clustering 25 | */ 26 | public final IsotopeTrace[] traces; 27 | 28 | /** 29 | * IDs of the traces assigned to this envelope 30 | */ 31 | public final Integer[] traceIDs; 32 | 33 | /** 34 | * charge state of the envelope 35 | */ 36 | public final int chargeState; 37 | 38 | /** 39 | * sum of each trace's intensity sum 40 | */ 41 | public double intensitySum = 0; 42 | 43 | /** 44 | * relative intensities of each trace 45 | */ 46 | public double[] relativeIntensities; 47 | 48 | /** 49 | * left most trace's mz 50 | */ 51 | public double monoisotopicMZ; 52 | 53 | /** 54 | * left most trace's rt 55 | */ 56 | public double monoisotopicRT; 57 | 58 | /** 59 | * Constructor accepting a set of isotopic traces to include in the envelope 60 | * @param connSet set of traces belonging to the envelope 61 | * @param myEnvelopeID my assigned envelopeID 62 | */ 63 | public IsotopicEnvelope(Set connSet, int myEnvelopeID) 64 | { 65 | // collected traces, sort by mz 66 | this.traces = connSet.toArray(new IsotopeTrace[0]); 67 | Arrays.sort(this.traces, Comparator.comparing(t -> t.centroidMZ)); 68 | 69 | // collect envelope ID 70 | this.envelopeID = myEnvelopeID; 71 | 72 | this.relativeIntensities = new double[connSet.size()]; 73 | this.traceIDs = new Integer[connSet.size()]; 74 | this.monoisotopicMZ = Double.MAX_VALUE; 75 | this.monoisotopicRT = Double.MAX_VALUE; 76 | // iterate traces, collecting mz separations, intensity sum, monisotopic (min) mz, intensities 77 | double separationSum = 0; 78 | IsotopeTrace prevTrace = null; 79 | int i = 0; 80 | for(IsotopeTrace trace : this.traces) 81 | { 82 | this.traceIDs[i] = new Integer(trace.traceID); 83 | 84 | this.relativeIntensities[i++] = trace.intensitySum; 85 | 86 | this.monoisotopicMZ = this.monoisotopicMZ > trace.centroidMZ ? trace.centroidMZ : this.monoisotopicMZ; 87 | 88 | double rt = (trace.minRT + trace.maxRT)/2; 89 | this.monoisotopicRT = this.monoisotopicRT > rt ? rt : this.monoisotopicRT; 90 | 91 | this.intensitySum += trace.intensitySum; 92 | if(prevTrace != null) 93 | separationSum += (trace.centroidMZ - prevTrace.centroidMZ); 94 | prevTrace = trace; 95 | } 96 | 97 | // convert absolute intensities to relative intensities 98 | for(i = 0; i < this.relativeIntensities.length; i++) 99 | this.relativeIntensities[i] = this.relativeIntensities[i] / this.intensitySum; 100 | 101 | double averageSeparation = separationSum / (connSet.size() - 1); 102 | this.chargeState = (int)Math.round(1.0 / averageSeparation); 103 | } 104 | 105 | } 106 | -------------------------------------------------------------------------------- /xnet/src/main/java/edu/msViz/xnet/dataTypes/TracesBundle.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet.dataTypes; 7 | 8 | import java.util.ArrayList; 9 | import java.util.Arrays; 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | /** 15 | * Bundle of trace data points, organized by trace. 16 | * Arranges trace point data into groups corresponding to traceID. 17 | * Can be used to turn raw data into IsotopeTrace objects 18 | * @author kyle 19 | */ 20 | public class TracesBundle { 21 | public final Map> tracesMZ = new HashMap<>(); 22 | public final Map> tracesRT = new HashMap<>(); 23 | public final Map> tracesIntensity = new HashMap<>(); 24 | public final Map traceMap = new HashMap<>(); 25 | 26 | /** 27 | * Adds new trace data from the given point to the bundle 28 | * @param traceID point's traceID 29 | * @param mz point's mz value 30 | * @param rt point's rt value 31 | * @param intensity point's intensity value 32 | * @param envelopeID trace's env ID (0 for no envelope) 33 | */ 34 | public void addPoint(int traceID, double mz, float rt, double intensity, int envelopeID) 35 | { 36 | if(traceID == 0) 37 | throw new IllegalArgumentException("Points without a trace (traceID == 0) are not to be bundled"); 38 | 39 | if(this.traceMap.containsKey(traceID)) 40 | { 41 | this.tracesMZ.get(traceID).add(mz); 42 | this.tracesRT.get(traceID).add(rt); 43 | this.tracesIntensity.get(traceID).add(intensity); 44 | } 45 | else 46 | { 47 | this.traceMap.put(traceID,envelopeID); 48 | this.tracesMZ.put(traceID, new ArrayList<>(Arrays.asList(mz))); 49 | this.tracesRT.put(traceID, new ArrayList<>(Arrays.asList(rt))); 50 | this.tracesIntensity.put(traceID, new ArrayList<>(Arrays.asList(intensity))); 51 | } 52 | } 53 | 54 | /** 55 | * Converts the trace bundle into a list of IsotopeTrace objects 56 | * @return list of isotope trace objects synthesized from bundled trace data 57 | */ 58 | public List synthesize() 59 | { 60 | List traces = new ArrayList<>(); 61 | this.traceMap.keySet().stream().forEach((traceID) -> 62 | { 63 | IsotopeTrace trace = new IsotopeTrace(traceID, this.tracesMZ.get(traceID), this.tracesRT.get(traceID), this.tracesIntensity.get(traceID)); 64 | trace.envelopeID = traceMap.get(traceID); 65 | traces.add(trace); 66 | }); 67 | return traces; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /xnet/src/main/java/edu/msViz/xnet/probability/HybridProbability.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet.probability; 7 | 8 | import edu.msViz.xnet.dataTypes.ProbabilityBundle; 9 | 10 | /** 11 | * Hybrid probability that encapsulates both the bayesian and frequentist 12 | * probabilities and conjoins their resulting probability bundles 13 | * @author kyle 14 | */ 15 | public class HybridProbability extends ProbabilityAggregator 16 | { 17 | /** 18 | * Bayesian probability aggregator 19 | */ 20 | private final BayesianProbability bayesProbs = new BayesianProbability(); 21 | 22 | /** 23 | * Frequentsit probability aggregator 24 | */ 25 | private final FrequentistProbability freqProbs; 26 | 27 | /** 28 | * Default constructor, instructs frequentist probability component to use default probability file 29 | */ 30 | public HybridProbability() 31 | { 32 | this.freqProbs = new FrequentistProbability(); 33 | } 34 | 35 | /** 36 | * Constructor accepting a filepath to the user specified probability file. 37 | * Instructs the frequentist probability component to use the user specified file 38 | * @param filepath 39 | */ 40 | public HybridProbability(String filepath) 41 | { 42 | this.freqProbs = new FrequentistProbability(filepath); 43 | } 44 | 45 | @Override 46 | protected ProbabilityBundle initBundle() 47 | { 48 | // individual probabilities 49 | ProbabilityBundle fBundle = this.freqProbs.initBundle(); 50 | ProbabilityBundle bBundle = this.bayesProbs.initBundle(); 51 | 52 | // combine the bundles 53 | bBundle.absorb(fBundle); 54 | 55 | return bBundle; 56 | } 57 | 58 | @Override 59 | protected void populateAssociationCounts(ProbabilityBundle bundle) { 60 | this.freqProbs.populateAssociationCounts(bundle); 61 | this.bayesProbs.populateAssociationCounts(bundle); 62 | } 63 | 64 | @Override 65 | protected void populateSeparationCounts(ProbabilityBundle bundle) { 66 | this.freqProbs.populateSeparationCounts(bundle); 67 | this.bayesProbs.populateSeparationCounts(bundle); 68 | } 69 | 70 | @Override 71 | protected void populateCorrelationCounts(ProbabilityBundle bundle) { 72 | this.freqProbs.populateCorrelationCounts(bundle); 73 | this.bayesProbs.populateCorrelationCounts(bundle); 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /xnet/src/main/java/edu/msViz/xnet/probability/ProbabilityAggregator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet.probability; 7 | 8 | import edu.msViz.xnet.dataTypes.ProbabilityBundle; 9 | import java.security.InvalidParameterException; 10 | 11 | /** 12 | * Abstract class providing basic probability aggregation functions 13 | * and defining an interface for concrete implementations 14 | * @author kyle 15 | */ 16 | public abstract class ProbabilityAggregator 17 | { 18 | /** 19 | * Probability models 20 | */ 21 | public static enum PROB_MODEL {BAYESIAN, FREQUENTIST, HYBRID}; 22 | 23 | /** 24 | * factory method for returning the selected probability aggregator 25 | * @param aggregatorChoice model selection 26 | * @param filePath (optional) probability file to use in frequentist/hybrid model 27 | * @return selected probability aggregator 28 | */ 29 | public static ProbabilityAggregator probAggFactory(PROB_MODEL aggregatorChoice, String filePath) 30 | { 31 | switch(aggregatorChoice) 32 | { 33 | case BAYESIAN: 34 | return new BayesianProbability(); 35 | case FREQUENTIST: 36 | return filePath == null ? new FrequentistProbability() : new FrequentistProbability(filePath); 37 | case HYBRID: 38 | return filePath == null ? new HybridProbability() : new HybridProbability(filePath); 39 | 40 | default: 41 | throw new InvalidParameterException("Invalid scorer selection."); 42 | } 43 | } 44 | 45 | /** 46 | * Constructs a ProbabilityBundle containing probability distributions 47 | * for separation, correlation and association RVs 48 | * @return ProbabilityBundle object 49 | */ 50 | public ProbabilityBundle getProbabilities() 51 | { 52 | // init probability bundle 53 | ProbabilityBundle probs = this.initBundle(); 54 | 55 | // populate association counts in bundle 56 | this.populateAssociationCounts(probs); 57 | 58 | // populate separation counts in bundle 59 | this.populateSeparationCounts(probs); 60 | 61 | // populate correlation counts in bundle 62 | this.populateCorrelationCounts(probs); 63 | 64 | return probs; 65 | } 66 | 67 | /** 68 | * Instantiates a probability bundle and populates it 69 | * @return Populated probability bundle 70 | */ 71 | protected abstract ProbabilityBundle initBundle(); 72 | 73 | /** 74 | * Populates the association counts within the prob bundle 75 | * @param bundle bundle to populate 76 | */ 77 | protected abstract void populateAssociationCounts(ProbabilityBundle bundle); 78 | 79 | /** 80 | * Populates the separation counts array in the probability bundle 81 | * according to the separation distributions 82 | * @param bundle bundle to populate 83 | */ 84 | protected abstract void populateSeparationCounts(ProbabilityBundle bundle); 85 | 86 | /** 87 | * Populates the correlation count arrays within the probability bundle 88 | * @param bundle bundle to populate 89 | */ 90 | protected abstract void populateCorrelationCounts(ProbabilityBundle bundle); 91 | } 92 | -------------------------------------------------------------------------------- /xnet/src/test/java/edu/msViz/xnet/IsotopicEnvelopeTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet; 7 | 8 | import edu.msViz.xnet.dataTypes.IsotopeTrace; 9 | import edu.msViz.xnet.dataTypes.IsotopicEnvelope; 10 | import java.util.Arrays; 11 | import java.util.HashSet; 12 | import java.util.Set; 13 | import org.junit.Test; 14 | import org.junit.Assert; 15 | 16 | /** 17 | * Test the creation and (potential) facilities of the IsotopicEnvelope class 18 | * @author kyle 19 | */ 20 | public class IsotopicEnvelopeTest { 21 | 22 | private static final double DELTA = 1e-15; 23 | 24 | Set traces; 25 | 26 | public IsotopicEnvelopeTest() 27 | { 28 | traces = new HashSet<>(Arrays.asList(new IsotopeTrace[]{ 29 | new IsotopeTrace(1, 1.02, 0f, 0f, 1.0), 30 | new IsotopeTrace(2, 1.512, 0f, 0f, 3.0), 31 | new IsotopeTrace(3, 1.98, 0f, 0f, 4.0), 32 | new IsotopeTrace(4, 2.49, 0f, 0f, 3.0), 33 | new IsotopeTrace(5, 3.04, 0f, 0f, 1.0), 34 | })); 35 | } 36 | 37 | @Test 38 | public void envelopeCreationTest() 39 | { 40 | IsotopicEnvelope env = new IsotopicEnvelope(this.traces, 0); 41 | 42 | // charge state should be 2 43 | Assert.assertEquals(2, env.chargeState); 44 | 45 | // intensity sum should be 12 46 | Assert.assertEquals(12.0, env.intensitySum, DELTA); 47 | 48 | // expected relative intensities 49 | Assert.assertArrayEquals(new double[]{1.0/12.0, 3.0/12.0, 4.0/12.0, 3.0/12.0, 1.0/12.0}, env.relativeIntensities, DELTA); 50 | 51 | Assert.assertEquals(1.02, env.monoisotopicMZ, DELTA); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /xnet/src/test/java/edu/msViz/xnet/TraceGridTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this license header, choose License Headers in Project Properties. 3 | * To change this template file, choose Tools | Templates 4 | * and open the template in the editor. 5 | */ 6 | package edu.msViz.xnet; 7 | 8 | import edu.msViz.xnet.dataTypes.IsotopeTrace; 9 | import edu.msViz.xnet.dataTypes.TraceGrid; 10 | import java.util.Arrays; 11 | import java.util.HashSet; 12 | import java.util.Set; 13 | import org.junit.Test; 14 | import org.junit.Assert; 15 | 16 | 17 | /** 18 | * TraceGrid tests 19 | * @author kyle 20 | */ 21 | public class TraceGridTest 22 | { 23 | 24 | //traceID, mz, minRT, maxRT, intensitysum 25 | private final IsotopeTrace[] traces = 26 | { 27 | new IsotopeTrace(1, 0.0, 2f, 3f, 0.0), 28 | new IsotopeTrace(2, 6.0, 0f, 1f, 0.0), 29 | new IsotopeTrace(3, .5, 2.2f, 2.8f, 0.0), 30 | new IsotopeTrace(4, 1.1, 2.3f, 2.7f, 0.0), 31 | new IsotopeTrace(5, 1.7, 2.4f, 2.7f, 0.0), 32 | new IsotopeTrace(6, 5.5, 0.2f, 0.7f, 0.0), 33 | new IsotopeTrace(7, 5.0, 0.3f, 0.6f, 0.0), 34 | new IsotopeTrace(8, 4.3, 0.3f, 0.6f, 0.0), 35 | new IsotopeTrace(9, 1.7, 0f, 0.9f, 0.0), 36 | new IsotopeTrace(10, 2.7, 1.2f, 1.8f, 0.0), 37 | }; 38 | 39 | private final TraceGrid grid = new TraceGrid(Arrays.asList(traces)); 40 | 41 | public TraceGridTest() {} 42 | 43 | @Test 44 | public void testGetIndexes() throws Exception 45 | { 46 | 47 | // coords(1) = {0,4,5} 48 | Assert.assertArrayEquals(new int[]{0,4,5}, grid.getTraceIndexes(traces[0])); 49 | 50 | // coords(2) = {5,0,1} 51 | Assert.assertArrayEquals(new int[]{5,0,1}, grid.getTraceIndexes(traces[1])); 52 | 53 | // coords(3) = {0,4,5} 54 | Assert.assertArrayEquals(new int[]{0,4,5}, grid.getTraceIndexes(traces[2])); 55 | 56 | // coords(4) = {1,4,5} 57 | Assert.assertArrayEquals(new int[]{1,4,5}, grid.getTraceIndexes(traces[3])); 58 | } 59 | 60 | @Test 61 | public void testGetNeighbors() throws Exception 62 | { 63 | // neighbs(1) = {3,4,5} 64 | Set neighbs = new HashSet<>(Arrays.asList(traces[2],traces[3],traces[4])); 65 | Assert.assertEquals(neighbs, this.grid.getNeighbors(traces[0])); 66 | 67 | // neighbs(6) = {2,7} 68 | neighbs = new HashSet<>(Arrays.asList(traces[1],traces[6])); 69 | Assert.assertEquals(neighbs, this.grid.getNeighbors(traces[5])); 70 | 71 | // neighbs(8) = {7} 72 | neighbs = new HashSet<>(Arrays.asList(traces[6])); 73 | Assert.assertEquals(neighbs, this.grid.getNeighbors(traces[7])); 74 | 75 | // neighbs(9) = {} 76 | neighbs = new HashSet<>(); 77 | Assert.assertEquals(neighbs, this.grid.getNeighbors(traces[8])); 78 | } 79 | 80 | 81 | } 82 | -------------------------------------------------------------------------------- /xnet/subordinate_licenses.txt: -------------------------------------------------------------------------------- 1 | XNet uses jgraph which has the following license: 2 | 3 | Copyright (c) 2001-2014, JGraph Ltd 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | * Neither the name of the JGraph nor the 14 | names of its contributors may be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL JGRAPH BE LIABLE FOR ANY 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | 28 | XNet uses Koloboke which has the following license: 29 | 30 | Copyright 2016 Koloboke 31 | Licensed under the Apache License, Version 2.0 (the "License"); 32 | you may not use this file except in compliance with the License. 33 | You may obtain a copy of the License at 34 | 35 | http://www.apache.org/licenses/LICENSE-2.0 36 | 37 | Unless required by applicable law or agreed to in writing, software 38 | distributed under the License is distributed on an "AS IS" BASIS, 39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 40 | See the License for the specific language governing permissions and 41 | limitations under the License. 42 | 43 | XNet uses jayes which has the following license: 44 | Eclipse Public License - v1.0, a copy of which can be found at 45 | 46 | https://www.eclipse.org/legal/epl-v10.html 47 | --------------------------------------------------------------------------------