diff --git a/CHardklor2.cpp b/CHardklor2.cpp index fd22407..bd83057 100644 --- a/CHardklor2.cpp +++ b/CHardklor2.cpp @@ -336,6 +336,13 @@ void CHardklor2::Centroid(Spectrum& s, Spectrum& out){ out.clear(); + //Get boundaries of the spectrum. centroids must be within boundaries. + double minMZ, maxMZ; + if(s.size()>0){ + minMZ = s[0].mz; + maxMZ = s[s.size()-1].mz; + } + bLastPos=false; for(i=0;i2000) { - //do nothing if invalid mz + //Centroided peaks must fall within spectrum mass range + if(centroid.mzmaxMZ) { + //do nothing if invalid mz, but perhaps find a better way to handle this one day. } else { out.add(centroid); } diff --git a/CHardklorParser.cpp b/CHardklorParser.cpp index 71621a7..7268ea1 100644 --- a/CHardklorParser.cpp +++ b/CHardklorParser.cpp @@ -242,6 +242,10 @@ void CHardklorParser::parse(char* cmd) { strcpy(global.MercuryFile,tok); } else if(strcmp(param,"max_features")==0){ + + } else if(strcmp(param,"molecule_max_mz")==0){ + global.maxMolMZ=atof(tok); + } else if(strcmp(param,"ms_level")==0){ if(atoi(tok)==3){ global.mzXMLFilter=MS3; diff --git a/CHardklorSetting.cpp b/CHardklorSetting.cpp index e6f9d50..d5e725d 100644 --- a/CHardklorSetting.cpp +++ b/CHardklorSetting.cpp @@ -73,6 +73,8 @@ CHardklorSetting::CHardklorSetting(){ //rawAvgWidth=1; //rawAvgCutoff=1000; + maxMolMZ=5000; + strcpy(rawFilter,""); } @@ -134,6 +136,9 @@ CHardklorSetting::CHardklorSetting(const CHardklorSetting& c){ //rawAvg=c.rawAvg; //rawAvgWidth=c.rawAvgWidth; //rawAvgCutoff=c.rawAvgCutoff; + + maxMolMZ=c.maxMolMZ; + strcpy(rawFilter,c.rawFilter); } @@ -199,6 +204,7 @@ CHardklorSetting& CHardklorSetting::operator=(const CHardklorSetting& c){ //rawAvg=c.rawAvg; //rawAvgWidth=c.rawAvgWidth; //rawAvgCutoff=c.rawAvgCutoff; + maxMolMZ = c.maxMolMZ; strcpy(rawFilter,c.rawFilter); } diff --git a/CHardklorSetting.h b/CHardklorSetting.h index 6dbcc5b..3cf6d72 100644 --- a/CHardklorSetting.h +++ b/CHardklorSetting.h @@ -71,6 +71,7 @@ class CHardklorSetting { int smooth; //Savitsky-Golay smoothing window size //int sna; //Signal-to-noise algorithm; 0=THRASH, 1=Persistent peaks (PP) + double maxMolMZ; //Largest m/z to detect in the data double corr; //correlation threshold double ppm; //ppm tolerance of m/z values to match across scans double res400; //resolution at m/z 400 diff --git a/CModelLibrary.cpp b/CModelLibrary.cpp index 16fcd5b..d98dccb 100644 --- a/CModelLibrary.cpp +++ b/CModelLibrary.cpp @@ -55,11 +55,11 @@ bool CModelLibrary::buildLibrary(int lowCharge, int highCharge, vector=merCount) { + cout << "Spectrum feature beyond molecule_max_mz. Hard boundary encountered. Please increase molecule_max_mz." << endl; + exit(-47); + } return &libModel[charge][var][intMZ]; +} + +void CModelLibrary::setSize(double mz){ + merCount=(int)(mz/5)+1; } \ No newline at end of file diff --git a/CModelLibrary.h b/CModelLibrary.h index 045f83c..aab9cba 100644 --- a/CModelLibrary.h +++ b/CModelLibrary.h @@ -34,6 +34,7 @@ class CModelLibrary { bool buildLibrary(int lowCharge, int highCharge, std::vector& pepVariants); void eraseLibrary(); mercuryModel* getModel(int charge, int var, double mz); + void setSize(double mz); protected: diff --git a/HardklorApp.cpp b/HardklorApp.cpp index 7e724d6..241f5c3 100644 --- a/HardklorApp.cpp +++ b/HardklorApp.cpp @@ -36,8 +36,8 @@ int main(int argc, char* argv[]) { CMercury8 *mercury; CModelLibrary *models; - cout << "Hardklor v2.3.1, April 23 2018" << endl; - cout << "Mike Hoopmann, Mike MacCoss\nCopyright 2007-2018\nUniversity of Washington" << endl; + cout << "Hardklor v2.3.2, November 11 2019" << endl; + cout << "Mike Hoopmann, Mike MacCoss\nCopyright 2007-2019\nUniversity of Washington" << endl; if(argc < 2 || (argc>2 && strcmp(argv[1],"-cmd")!=0) ){ cout << "Usage:\t\thardklor \n"; cout << "\t\thardklor -cmd [options] \n" << endl; @@ -78,6 +78,7 @@ int main(int argc, char* argv[]) { for(j=0;jsize();j++) pepVariants.push_back(hp.queue(i).variant->at(j)); models->eraseLibrary(); + models->setSize(hp.queue(i).maxMolMZ); models->buildLibrary(hp.queue(i).minCharge,hp.queue(i).maxCharge,pepVariants); h2.GoHardklor(hp.queue(i)); } else {