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;