File rt-seconds.patch of Package xtandem

diff --git a/src/saxmzmlhandler.cpp b/src/saxmzmlhandler.cpp
index 9348b62..88dd906 100644
--- a/src/saxmzmlhandler.cpp
+++ b/src/saxmzmlhandler.cpp
@@ -93,6 +93,7 @@ void SAXMzmlHandler::startElement(const XML_Char *el, const XML_Char **attr)
 		const char* name = getAttrValue("name", attr);
 		cout.flush();
 		const char* accession = getAttrValue("accession", attr);
+		const char* unitAccession = getAttrValue("unitAccession", attr);
 		const char* value = getAttrValue("value", attr);
 		if (m_bInRefGroup)
 		{
@@ -100,12 +101,13 @@ void SAXMzmlHandler::startElement(const XML_Char *el, const XML_Char **attr)
 			m_cvParam.refGroupName = string(m_ccurrentRefGroupName);
 			m_cvParam.name = string(name);
 			m_cvParam.accession = string(accession);
+			m_cvParam.unitAccession = string(unitAccession);
 			m_cvParam.value = string(value);
 			m_refGroupCvParams.push_back(m_cvParam);
 		}
 		else
 		{
-			processCVParam(name,accession,value);
+			processCVParam(name,accession,unitAccession,value);
 		}
 	}
 	else if (isElement("referenceableParamGroupRef", el))
@@ -115,7 +117,7 @@ void SAXMzmlHandler::startElement(const XML_Char *el, const XML_Char **attr)
 		{
 			if(!strcmp(groupName,m_refGroupCvParams[i].refGroupName.c_str()))
 			{
-				processCVParam(m_refGroupCvParams[i].name.c_str(), m_refGroupCvParams[i].accession.c_str(), m_refGroupCvParams[i].value.c_str());
+				processCVParam(m_refGroupCvParams[i].name.c_str(), m_refGroupCvParams[i].accession.c_str(), m_refGroupCvParams[i].unitAccession.c_str(), m_refGroupCvParams[i].value.c_str());
 			}
 		}
 	}
@@ -165,7 +167,7 @@ void SAXMzmlHandler::characters(const XML_Char *s, int len)
 	}
 }
 
-void SAXMzmlHandler::processCVParam(const char* name, const char* accession, const char* value)
+void SAXMzmlHandler::processCVParam(const char* name, const char* accession, const char* unitAccession, const char* value)
 {
 	if ((!strcmp(name, "ms level") || !strcmp(accession,"MS:1000511")) && !strcmp(value,"2")){
 		m_bInMsLevel2 = true;
@@ -178,9 +180,16 @@ void SAXMzmlHandler::processCVParam(const char* name, const char* accession, con
 //		m_strDesc = value;
 	}
 	else if(!strcmp(name, "scan start time") || !strcmp(accession,"MS:1000016"))	{
-		if(atof(value) > 0.0)	{
+		float fvalue = atof(value);
+		if (!strcmp(unitAccession, "UO:0000010"))	// seconds
+			fvalue *= 1.0;
+		else if (!strcmp(unitAccession, "UO:0000031"))	// minutes
+			fvalue *= 60.0;
+		else
+			fvalue *= 60.0;				// backward compat
+		if(fvalue > 0.0)	{
 			char pLine[256];
-			sprintf(pLine,"PT%.3lfS",60.0*atof(value));
+			sprintf(pLine,"PT%.3lfS",fvalue);
 			m_strRt = pLine;
 		}
 		else	{
diff --git a/src/saxmzmlhandler.h b/src/saxmzmlhandler.h
index c11eae9..3a4a387 100644
--- a/src/saxmzmlhandler.h
+++ b/src/saxmzmlhandler.h
@@ -63,7 +63,7 @@ private:
 	/**
 	* Process cv params
 	*/
-	void processCVParam(const char* name, const char* accession, const char* value);
+	void processCVParam(const char* name, const char* accession, const char* unitAccession, const char* value);
 
 private:
 	// Flags indicating parser is inside a particular tag.
@@ -81,6 +81,7 @@ private:
 		string name;
 		string accession;
 		string value;
+		string unitAccession;
 	};
 	vector <cvParam> m_refGroupCvParams;
 
openSUSE Build Service is sponsored by