Version 3 (modified by 4 years ago) (diff) | ,
---|
The GRITS plugin "org.grits.toolbox.importer.ms.annotation.glycan.simiansearch" executes a tool title GELATO, which annotates MS spectra with candidate glycans from a specified database. The GELATO plugin is "org.grits.toolbox.ms.annotation". This plugin creates an archive that is readable by the GRITS GUI component (plugins "org.grits.toolbox.entry.ms.annotation" and "org.grits.toolbox.entry.ms.annotation.glycan"). While GELATO's algorithms perform the matching of peaks in MS spectra to glycans, the archive that is created is an instance of the GRITS MS object model (plugin "org.grits.toolbox.ms.om"). In order to extend GRITS to other forms of MS data, it will be helpful to understand the requirements for creation of an archive file that can be opened in GRITS. This document is meant to serve that purpose.
Minimal steps to create a GRITS MS Glycan Annotation archive.
Step one: populating the data structures with MS data. The default data structure for GELATO is a HashMap<Integer, Scan> where the Integer is the scan number and the Scan object is an instance of org.grits.toolbox.ms.om.data.Scan. GRITS supports a variety of MS types: Direct Infusion (DI), Total Ion Mapping (TIM), LC-MS/MS, and MS Profile. For DI, TIM, and LC-MS/MS, it is assumed that you will have at least 1 MS1 scan and 1 MS/MS scan. For MS Profile, you will only need an MS1 scan.
Assuming a Direct Infusion experiment, the minimum data for GELATO is:
1) MS1 scan (example code)
Scan ms1scan = new Scan(); // create new Scan object ms1scan.setScanNo(1); // set the scan number to 1 ms1scan.setMsLevel(1); // set the MS level to 1 List<Peak> peakList = new ArrayList<>(); // create a new peak list for the MS1 scan Peak precursorPeak = new Peak(); // create a new peak that will be a precursor peak (generates an MS/MS event) precursorPeak.setMz(528.2); // set the m/z value of the peak (could be anything) precursorPeak.setIntensity(10000.0); // set the intensity to something > 0 precursorPeak.setIsPrecursor(true); // identify the peak as a precursor peak precursorPeak.setId(1); // the peak MUST have a unique ID precursorPeak.setPrecursorMz(528.18); // when the ion in the MS1 is trapped for fragmentation, this is the m/z of the ions trapped...could slightly differ from the peak in the full MS1 scan peakList.add(precursorPeak); // add the precursor peak to the peak list ms1scan.setPeaklist(peakList); // set the peak list of the full MS1 scan to the newly created peak list
2) MS2 scan (example code)
Scan ms2scan = new Scan(); // create new Scan object ms2scan.setScanNo(2); // set the scan number to 2 ms2scan.setMsLevel(2); // set the MS level to 2 ms2scan.setPrecursor(precursorPeak); // set the precursor variable to the precursorPeak created above. This ties the MS2 scan to the precursor peak in the parent MS1 scan List<Peak> peakList = new ArrayList<>(); // if you want to id fragment peaks, create a new peak list for the MS2 scan Peak fragPeak = new Peak(); // create a fragment peak fragPeak.setMz(940.2); fragPeak.setIntensity(5000.0); fragPeak.setIsPrecursor(false); fragPeak.setId(1); peakList.add(fragPeak); ms2scan.setPeaklist(peakList); ms2scan.setParentScan(1); // set the parent scan of this MS/MS scan to the full MS scan
3) Populate the MS1 object with subscans
List<Integer> subScans = new ArrayList<>(); // create a list of integers to contain all scan numbers that were subscans of the full MS1 scan subScans.add(2); // scan number 2 is the only subscan in this example, so add the number 2 ms1scan.setSubScans(subScans); // add the subscan list to the full MS1 scan
4) Add the scans to the Hashmap datastructure
HashMap<Integer, Scan> testData = new HashMap<>(); // create the data structure to be used by Gelato testData.put(1, ms1scan); // put the ms1 scan in the Hashmap, key is scan number 1 testData.put(2, ms2scan); // put the ms2 scan in the Hashmap, key is scan number 2