/// <summary> /// Loads a mzIdentML file /// </summary> override protected void Load( string mzid ) { m_mzid = new mzidFile1_0(); m_mzid.Load( mzid ); // Proteins SortedList<string,string> SortedAccession = new SortedList<string, string>(); foreach( PSIPIanalysissearchDBSequenceType element in m_mzid.ListProteins ) { if( SortedAccession.ContainsKey(element.id) ) continue; string acc = element.accession; SortedAccession.Add( element.id, acc ); if( m_SortedProteins.ContainsKey(acc) ) continue; FuGECommonOntologycvParamType cv; cv = FuGECommonOntologycvParamType.Find( "MS:1001352", element.cvParam ); string entry = cv == null ? "" : cv.value; cv = FuGECommonOntologycvParamType.Find( "MS:1001088", element.cvParam ); string desc = cv == null ? "" : cv.value; string seq = element.seq;//.ToUpper(); Protein p = new Protein(m_pid++, entry, acc, desc, seq); p.DBRef = element.id; Proteins.Add( p ); m_SortedProteins.Add( acc, p ); } // Peptides SortedList<string,Peptide> SortedPeptides = new SortedList<string, Peptide>(); int id = 1; foreach( PSIPIpolypeptidePeptideType element in m_mzid.ListPeptides ) { string seq = element.peptideSequence;//.ToUpper(); Peptide f = new Peptide(id++, seq); f.Confidence = Peptide.ConfidenceType.PassThreshold; // It will be filtered later if neccessary SortedPeptides.Add( element.id, f ); f.Runs.Add( m_Run ); if( element.Modification != null ) foreach( PSIPIpolypeptideModificationType mod in element.Modification ) { PTM ptm = new PTM(); ptm.Pos = mod.locationSpecified ? mod.location : -1; if( mod.residues != null ) foreach( string residue in mod.residues ) ptm.Residues += residue; foreach( FuGECommonOntologycvParamType param in mod.cvParam ) if( param.cvRef.Equals("UNIMOD") ) ptm.Name = param.name; f.AddPTM( ptm ); } Peptides.Add( f ); } // Relations if( m_mzid.Data.DataCollection.AnalysisData.SpectrumIdentificationList.Length != 1 ) throw new ApplicationException( "Multiple spectrum identification lists not supported" ); foreach( PSIPIanalysissearchSpectrumIdentificationResultType idres in m_mzid.Data.DataCollection.AnalysisData.SpectrumIdentificationList[0].SpectrumIdentificationResult ) foreach( PSIPIanalysissearchSpectrumIdentificationItemType item in idres.SpectrumIdentificationItem ) { if( !item.passThreshold ) continue; Peptide f = SortedPeptides[item.Peptide_ref]; if( item.PeptideEvidence == null ) continue; f.Confidence = Peptide.ConfidenceType.PassThreshold; foreach( PSIPIanalysisprocessPeptideEvidenceType relation in item.PeptideEvidence ) { Protein p = m_SortedProteins[SortedAccession[relation.DBSequence_Ref]]; if( f.Proteins.Contains(p) ) continue; f.Names.Add( relation.DBSequence_Ref, relation.id ); p.Peptides.Add( f ); f.Proteins.Add( p ); } } }
/// <summary> /// Save results to a mzIdentML file /// </summary> public void SaveMzid( string mzid, string org_id, string org_name, string owner_name, string owner_email ) { // Previous file is required for including MS data if( m_mzid == null || m_InputFiles.Count > 1 ) return; #region Organization FuGECommonAuditOrganizationType org = new FuGECommonAuditOrganizationType(); org.id = "UPV/EHU"; org.name = "University of the Basque Country"; foreach( FuGECommonAuditOrganizationType o in m_mzid.ListOrganizations ) if( o.id == org.id ) { m_mzid.ListOrganizations.Remove( o ); break; } m_mzid.ListOrganizations.Add( org ); #endregion #region Software author FuGECommonAuditPersonType person = new FuGECommonAuditPersonType(); person.id = "PAnalyzer_Author"; person.firstName = "Gorka"; person.lastName = "Prieto"; person.email = "*****@*****.**"; FuGECommonAuditPersonTypeAffiliations aff = new FuGECommonAuditPersonTypeAffiliations(); aff.Organization_ref = org.id; person.affiliations = new FuGECommonAuditPersonTypeAffiliations[]{aff}; foreach( FuGECommonAuditPersonType p in m_mzid.ListPeople ) if( p.id == person.id ) { m_mzid.ListPeople.Remove( p ); break; } m_mzid.ListPeople.Add( person ); #endregion #region Analysis software PSIPIanalysissearchAnalysisSoftwareType sw = new PSIPIanalysissearchAnalysisSoftwareType(); sw.id = m_Software.Name; sw.name = m_Software.ToString(); sw.URI = m_Software.Url; sw.version = m_Software.Version; ParamType swname = new ParamType(); FuGECommonOntologycvParamType item = new FuGECommonOntologycvParamType(); item.name = "PAnalyzer"; item.cvRef = "PSI-MS"; item.accession = "MS:1002076"; swname.Item = item; sw.SoftwareName = swname; FuGECommonAuditContactRoleType contact = new FuGECommonAuditContactRoleType(); contact.Contact_ref = person.id; FuGECommonAuditContactRoleTypeRole role = new FuGECommonAuditContactRoleTypeRole(); FuGECommonOntologycvParamType contacttype = new FuGECommonOntologycvParamType(); contacttype.accession = "MS:1001271"; contacttype.cvRef = "PSI-MS"; contacttype.name = "researcher"; role.cvParam = contacttype; contact.role = role; sw.ContactRole = contact; sw.Customizations = m_Software.Customizations; foreach( PSIPIanalysissearchAnalysisSoftwareType s in m_mzid.ListSW ) if( s.id == m_Software.Name ) { m_mzid.ListSW.Remove( sw ); break; } m_mzid.ListSW.Add( sw ); #endregion #region Protein detection protocol m_mzid.Data.AnalysisCollection.ProteinDetection.ProteinDetectionList_ref = "PDL_PAnalyzer"; m_mzid.Data.AnalysisCollection.ProteinDetection.ProteinDetectionProtocol_ref = "PDP_PAnalyzer"; m_mzid.Data.AnalysisProtocolCollection.ProteinDetectionProtocol.AnalysisSoftware_ref = sw.id; m_mzid.Data.AnalysisProtocolCollection.ProteinDetectionProtocol.id = "PDP_PAnalyzer"; #endregion #region Protein detection list List<PSIPIanalysisprocessProteinAmbiguityGroupType> listGroup = new List<PSIPIanalysisprocessProteinAmbiguityGroupType>(); int hit = 1; foreach( Protein p in Proteins ) { if( p.Evidence == Protein.EvidenceType.Filtered ) continue; PSIPIanalysisprocessProteinAmbiguityGroupType grp = new PSIPIanalysisprocessProteinAmbiguityGroupType(); grp.id = "PAG_hit_" + (hit++); int num = (p.Subset.Count == 0 ? 1 : p.Subset.Count); grp.ProteinDetectionHypothesis = new PSIPIanalysisprocessProteinDetectionHypothesisType[num]; if( p.Subset.Count == 0 ) grp.ProteinDetectionHypothesis[0] = BuildHypothesis( p, p.Evidence ); else { int i = 0; foreach( Protein p2 in p.Subset ) grp.ProteinDetectionHypothesis[i++] = BuildHypothesis( p2, p.Evidence ); } listGroup.Add( grp ); } PSIPIanalysisprocessProteinDetectionListType analysis = new PSIPIanalysisprocessProteinDetectionListType(); analysis.id = "PDL_PAnalyzer"; analysis.ProteinAmbiguityGroup = listGroup.ToArray(); m_mzid.Data.DataCollection.AnalysisData.ProteinDetectionList = analysis; #endregion m_mzid.Save( mzid ); Notify( "Saved to " + mzid ); }