/* * Copyright (c) 2003-2012 Fred Hutchinson Cancer Research Center * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fhcrc.cpl.viewer.mrm; import org.fhcrc.cpl.toolbox.ApplicationContext; import org.fhcrc.cpl.toolbox.TextProvider; import java.util.ArrayList; import java.util.HashMap; import java.util.Vector; /** * Created by IntelliJ IDEA. * User: tholzman * Date: Dec 12, 2007 * Time: 12:26:28 PM * To change this template use File | Settings | File Templates. */ public class TransitionDefinitionHeader { public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } protected String version; public String getTransitionDefFile() { return transitionDefFile; } public void setTransitionDefFile(String transitionDefFile) { this.transitionDefFile = transitionDefFile; } protected String transitionDefFile; public String getMzXMLFile() { return mzXMLFile; } public void setMzXMLFile(String mzXMLFile) { this.mzXMLFile = mzXMLFile; } protected String mzXMLFile; public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } protected String comment; public ArrayList<TransitionDefinition> getTransitionDefs() { return transitionDefs; } public void setTransitionDefs(ArrayList<TransitionDefinition> transitionDefs) { this.transitionDefs = transitionDefs; } protected ArrayList<TransitionDefinition> transitionDefs; public TransitionDefinitionParser getParser() { return parser; } public void setParser(TransitionDefinitionParser parser) { this.parser = parser; } protected TransitionDefinitionParser parser; public void doParse() throws Exception { if(this.getParser() == null) { ApplicationContext.errorMessage(TextProvider.getText("NO_TRANSITION_DEFINITION_PARSER_SET"), new Exception("Must set a transition definition parser before trying to read a transition definition file.")); } else { this.getParser().setTransitionDefFile(this.getTransitionDefFile()); this.getParser().parse(); this.setVersion(parser.getVersion()); this.setMzXMLFile(parser.getMzXMLFile()); this.setComment(parser.getComment()); this.setTransitionDefs(parser.getTransitionDefs()); } } public TransitionDefinitionHeader(String transitionDefFile, TransitionDefinitionParser parser) { this.transitionDefFile = transitionDefFile; this.parser = parser; } public TransitionDefinitionHeader(String transitionDefFile, TransitionDefinitionParser parser, boolean shouldParse) { this.transitionDefFile = transitionDefFile; this.parser = parser; if(shouldParse) try {doParse();} catch (Exception e){}; } public TransitionDefinitionHeader() { } public HashMap<MRMDaughter, TransitionDefinition> getDToTD() { return dToTD; } public void setDToTD(HashMap<MRMDaughter, TransitionDefinition> dToTD) { this.dToTD = dToTD; } protected HashMap<MRMDaughter,TransitionDefinition> dToTD; public void linkUpToTransitionList(MRMTransition mrta[],float ptol, float dtol) { setDToTD(new HashMap<MRMDaughter,TransitionDefinition>()); for(MRMTransition curTrans: mrta) { for(MRMDaughter mrmd: curTrans.getDaughters().values()){ for(TransitionDefinition curDef: getTransitionDefs()){ if(curDef.getPeptideMZ()-ptol <= curTrans.getPrecursorMz() && curDef.getPeptideMZ()+ptol >= curTrans.getPrecursorMz() && curDef.getProductMZ()-dtol <= mrmd.getMeanMz() && curDef.getProductMZ()+dtol >= mrmd.getMeanMz() ) { curDef.setAssociatedProduct(mrmd); getDToTD().put(mrmd,curDef); } } } } } public class AQUApair { public TransitionDefinition getLightMember() { return lightMember; } public void setLightMember(TransitionDefinition lightMember) { this.lightMember = lightMember; } public TransitionDefinition getHeavyMember() { return heavyMember; } public void setHeavyMember(TransitionDefinition heavyMember) { this.heavyMember = heavyMember; } TransitionDefinition lightMember; TransitionDefinition heavyMember; public AQUApair(TransitionDefinition lowMember, TransitionDefinition highMember) { this.lightMember = lowMember; this.heavyMember = highMember; } } public HashMap<Integer,AQUApair> getAQUApairs() { return AQUApairs; } public void setAQUApairs(HashMap<Integer,AQUApair> AQUApairs) { this.AQUApairs = AQUApairs; } protected HashMap<Integer,AQUApair> AQUApairs = null; public void determinePairs() { if(this.getTransitionDefs() == null || this.getTransitionDefs().isEmpty()) return; HashMap<Integer,Vector<TransitionDefinition>> pairs = new HashMap<Integer,Vector<TransitionDefinition>>(); //scan potential aquapairs for(TransitionDefinition td: getTransitionDefs()) { if(td.getAQUAcode() <= 0) continue; Integer aqc = new Integer(td.getAQUAcode()); Vector<TransitionDefinition> tds = pairs.get(aqc); if(tds == null) { tds = new Vector<TransitionDefinition>(); pairs.put(aqc,tds); } tds.add(td); } //Check for sanity, load into AQUApairs vector if sane setAQUApairs(new HashMap<Integer,AQUApair>()); for(Integer code: pairs.keySet()) { Vector<TransitionDefinition> tdefs = pairs.get(code); if(tdefs.size() != 2) { ApplicationContext.errorMessage(TextProvider.getText("BAD_AQUA_PAIR"," There must be exactly two members for each code, code:"+code+" has "+tdefs.size()+" members"),null); continue; } TransitionDefinition td1 = tdefs.get(0); TransitionDefinition td2 = tdefs.get(1); if(!td1.getPeptide().equalsIgnoreCase(td2.getPeptide())){ ApplicationContext.errorMessage(TextProvider.getText("BAD_AQUA_PAIR"," Both members of an AQUA pair must relate to the same peptide, code:"+code+" has "+td1.getPeptide()+" and "+td2.getPeptide()),null); continue; } TransitionDefinition high=null, low=null; if(td1.isHigh()) high = td1; if(td1.isLow()) low = td1; if(td2.isHigh()) high = td2; if(td2.isLow()) low = td2; if(high == null || low == null || high == low ){ ApplicationContext.errorMessage(TextProvider.getText("BAD_AQUA_PAIR"," There must be one heavy and one light member of each pair, code:"+code+" does not obey this rule"),null); continue; } getAQUApairs().put(code,new AQUApair(low,high)); } } public MRMDaughter getMatchingDaughter(MRMDaughter mrmd) { MRMDaughter retVal = null; if(getAQUApairs() == null) return retVal; if(mrmd == null) return retVal; TransitionDefinition curTD = getDToTD().get(mrmd); if(curTD == null)return retVal; if(getAQUApairs() == null || getAQUApairs().size() == 0) return retVal; AQUApair curAQUA = getAQUApairs().get(curTD.getAQUAcode()); if(curAQUA == null) return retVal; if(curTD.isHigh()){ retVal = curAQUA.getLightMember().getAssociatedProduct(); } else { if(curTD.isLow()) { retVal = curAQUA.getHeavyMember().getAssociatedProduct(); } } return retVal; } }