本文整理汇总了C++中Spectrum::add方法的典型用法代码示例。如果您正苦于以下问题:C++ Spectrum::add方法的具体用法?C++ Spectrum::add怎么用?C++ Spectrum::add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Spectrum
的用法示例。
在下文中一共展示了Spectrum::add方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NewScanAverage
bool CNoiseReduction::NewScanAverage(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
Spectrum ts;
vector<int> vPos;
int i;
int j;
int k;
int m;
int widthCount=0;
int numScans=1;
double dif;
double prec;
double dt;
double c;
bool bLeft=true;
int posLeft;
int posRight;
int index;
char cFilter1[256];
//char cFilter2[256];
//double slope;
//double intercept;
sp.clear();
Spectrum* specs;
specs = new Spectrum[width*2+1];
//if file is not null, create new buffer
if(file!=NULL){
strcpy(lastFile,file);
bs.clear();
if(scanNum>0) r->readFile(file,ts,scanNum);
else r->readFile(file,ts);
if(ts.getScanNumber()==0) {
delete [] specs;
return false;
}
bs.push_back(ts);
specs[0]=bs[0];
c=CParam(specs[0],3);
posA=0;
} else {
posA++;
if(posA>=(int)bs.size()) { //end of buffer, no more data
delete [] specs;
return false;
}
specs[0]=bs[posA];
c=CParam(specs[0],3);
}
specs[0].getRawFilter(cFilter1,256);
posLeft=posA;
posRight=posA;
while(widthCount<(width*2)){
index=-1;
//Alternate looking left and right
if(bLeft){
bLeft=false;
widthCount++;
while(true){
posLeft--;
if(posLeft<0) { //buffer is too short on left, add spectra
i=bs[0].getScanNumber();
while(true){
i--;
if(i==0) break;
r->readFile(lastFile,ts,i);
if(ts.getScanNumber()==0) continue;
else break;
}
if(i==0) break;
bs.push_front(ts);
posA++;
posRight++;
posLeft=0;
//ts.getRawFilter(cFilter2,256);
if(ts.getMsLevel()==cs.msLevel) {
index=posLeft;
break;
}
} else {
//bs[posLeft].getRawFilter(cFilter2,256);
if(bs[posLeft].getMsLevel()==cs.msLevel) {
index=posLeft;
break;
}
}
}
} else {
bLeft=true;
//.........这里部分代码省略.........
示例2: ScanAverage
bool CNoiseReduction::ScanAverage(Spectrum& sp, char* file, int width, float cutoff){
Spectrum ts;
Spectrum ps=sp;
MSReader r;
int i;
int j;
int k;
int widthCount=0;
int numScans=1;
double dif;
double prec;
double dt;
double c=CParam(ps,3);
bool bLeft=true;
int posLeft=ps.getScanNumber()-1;
int posRight=ps.getScanNumber()+1;
char cFilter1[256];
char cFilter2[256];
ps.getRawFilter(cFilter1,256);
while(widthCount<(width*2)){
//Alternate looking left and right
if(bLeft){
bLeft=false;
widthCount++;
while(posLeft>0){
r.readFile(file,ts,posLeft);
if(ts.getScanNumber()==0) break;
ts.getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) break;
posLeft--;
}
} else {
bLeft=true;
widthCount++;
while(true){
r.readFile(file,ts,posRight);
if(ts.getScanNumber()==0) break;
ts.getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) break;
posRight++;
}
}
if(ts.getScanNumber()==0) continue;
numScans++;
//Match peaks between pivot scan and temp scan
k=0;
for(i=0;i<ps.size();i++){
dif=100000.0;
prec = c * ps.at(i).mz * ps.at(i).mz / 2;
for(j=k;j<ts.size();j++){
dt=fabs(ps.at(i).mz-ts.at(j).mz);
if(dt<=dif) {
if(dt<prec) {
ps.at(i).intensity+=ts.at(j).intensity;
ts.at(j).mz=-1.0;
k=j+1;
break;
}
dif=dt;
} else {
k=j-1;
break;
}
}
}
//Add unmatched peaks from temp scan
for(i=0;i<ts.size();i++){
if(ts.at(i).mz>-1.0) ps.add(ts.at(i));
}
//Sort pivot scan peaks for fast traversal against next temp scan
ps.sortMZ();
}
//Average points and apply cutoff
sp.clear();
for(i=0;i<ps.size();i++) {
ps.at(i).intensity/=numScans;
if(ps.at(i).intensity>=cutoff) sp.add(ps.at(i));
}
sp.setScanNumber(ps.getScanNumber());
sp.setScanNumber(ps.getScanNumber(true),true);
sp.setRTime(ps.getRTime());
return true;
}
示例3: DeNoise
//.........这里部分代码省略.........
//Assume High resolution data at all times
if(!cs.centroid) {
FirstDerivativePeaks(tmpSpec,1);
tmpSpec.setRawFilter(cFilter2);
}
s.push_back(tmpSpec);
//cout << tmpSpec.getScanNumber() << " " << cFilter1 << " xx " << cFilter2 << endl;
if(strcmp(cFilter1,cFilter2)==0){
j++;
if(j==(int)(cs.boxcar/2)) break;
}
i++;
}
}
//return false if we reached the end
if(pos>=(int)s.size()) return false;
//Because Deque may have mixed spectra, create list of Deque indexes to compare
//Shrink Deque on the left if some spectra are not needed
//Expand Deque to the right if needed and possible
//cout << "Checking scan " << s[pos].getScanNumber() << endl;
v.clear();
s[pos].getRawFilter(cFilter1,256);
//look left
for(i=pos-1;i>=0;i--){
s[i].getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) {
v.push_back(i);
if(v.size()==(int)(cs.boxcar/2)) break;
}
}
//erase unneeded left items
while(i>0){
s.pop_front();
i--;
for(j=0;j<(int)v.size();j++) v[j]--;
pos--;
}
//look right
j=0;
for(i=pos+1;i<(int)s.size();i++){
s[i].getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) {
v.push_back(i);
j++;
if(j==(int)(cs.boxcar/2)) break;
}
}
//extend right side if needed
while(j<(int)(cs.boxcar/2)){
r->readFile(NULL,tmpSpec);
if(tmpSpec.getScanNumber()==0) break;
tmpSpec.getRawFilter(cFilter2,256);
//Assume High resolution data at all times
if(!cs.centroid) {
FirstDerivativePeaks(tmpSpec,1);
tmpSpec.setRawFilter(cFilter2);
}
s.push_back(tmpSpec);
if(strcmp(cFilter1,cFilter2)==0) {
v.push_back(s.size()-1);
j++;
}
}
//if there is nothing to compare to, exit now
if(v.size()==0) return false;
//compare peaks
//cout << "Checking " << s[pos].size() << " peaks." << endl;
for(i=0;i<s[pos].size();i++){
matchCount=1;
for(j=0;j<(int)v.size();j++){
if(s[v[j]].size()<1) continue;
index = NearestPeak(s[v[j]],s[pos].at(i).mz);
ppm=fabs( (s[v[j]].at(index).mz-s[pos].at(i).mz)/s[pos].at(i).mz * 1000000);
if(ppm<cs.ppm) matchCount++;
}
if(matchCount>=cs.boxcarFilter || matchCount==v.size()) sp.add(s[pos].at(i));
}
sp.setScanNumber(s[pos].getScanNumber());
sp.setScanNumber(s[pos].getScanNumber(true),true);
sp.setRTime(s[pos].getRTime());
pos++;
//cout << sp.getScanNumber() << endl;
//cout << "Done! " << sp.size() << " " << pos << endl;
return true;
}
示例4: FirstDerivativePeaks
//First derivative method taken from CSpecAnalyze, returns base peak intensity of the set
void CNoiseReduction::FirstDerivativePeaks(Spectrum& sp, int winSize){
int i,j;
float maxIntensity;
int bestPeak;
bool bLastPos;
Spectrum gp;
int nextBest;
double FWHM;
Peak_T centroid;
bLastPos=false;
for(i=0;i<sp.size()-winSize;i++){
if(sp.at(i).intensity<sp.at(i+winSize).intensity) {
bLastPos=true;
continue;
} else {
if(bLastPos){
bLastPos=false;
//find max and add peak
maxIntensity=0;
for(j=i;j<i+winSize;j++){
if (sp.at(j).intensity>maxIntensity){
maxIntensity=sp.at(j).intensity;
bestPeak = j;
}
}
//Best estimate of Gaussian centroid
//Get 2nd highest point of peak
if(bestPeak==sp.size()-1){
nextBest=bestPeak-1;
} else if(sp.at(bestPeak-1).intensity > sp.at(bestPeak+1).intensity){
nextBest=bestPeak-1;
} else {
nextBest=bestPeak+1;
}
//Get FWHM
FWHM = calcFWHM(sp.at(bestPeak).mz);
//Calc centroid MZ (in three lines for easy reading)
centroid.mz = pow(FWHM,2)*log(sp.at(bestPeak).intensity/sp.at(nextBest).intensity);
centroid.mz /= GC*(sp.at(bestPeak).mz-sp.at(nextBest).mz);
centroid.mz += (sp.at(bestPeak).mz+sp.at(nextBest).mz)/2;
//Calc centroid intensity
centroid.intensity=(float)(sp.at(bestPeak).intensity/exp(-pow((sp.at(bestPeak).mz-centroid.mz)/FWHM,2)*GC));
//some peaks are funny shaped and have bad gaussian fit.
//if error is more than 10%, keep existing intensity
if( fabs((sp.at(bestPeak).intensity - centroid.intensity) / centroid.intensity * 100) > 10 ||
//not a good check for infinity
centroid.intensity>999999999999.9 ||
centroid.intensity < 0 ) {
centroid.intensity=sp.at(bestPeak).intensity;
}
//Hack until I put in mass ranges
if(centroid.mz<0 || centroid.mz>2000) {
//do nothing if invalid mz
} else {
gp.add(centroid);
}
i+=winSize-1;
}
}
}
int scanNumber=sp.getScanNumber();
int scanNumber2=sp.getScanNumber(false);
float rTime=sp.getRTime();
sp = gp;
sp.setRTime(rTime);
sp.setScanNumber(scanNumber);
sp.setScanNumber(scanNumber2,true);
}
示例5: NewScanAveragePlusDeNoise
bool CNoiseReduction::NewScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
Spectrum ts;
vector<int> vPos;
int i;
int j;
int k;
int m;
int widthCount=0;
int numScans=1;
int match;
double dif;
double prec;
double dt;
double c;
bool bLeft=true;
int posLeft;
int posRight;
int index;
char cFilter1[256];
char cFilter2[256];
sp.clear();
Spectrum* specs;
specs = new Spectrum[width*2+1];
//if file is not null, create new buffer
if(file!=NULL){
strcpy(lastFile,file);
bs.clear();
if(scanNum>0) r->readFile(file,ts,scanNum);
else r->readFile(file,ts);
if(ts.getScanNumber()==0) {
delete [] specs;
return false;
}
bs.push_back(ts);
specs[0]=bs[0];
c=CParam(specs[0],3);
posA=0;
} else {
posA++;
if(posA>=(int)bs.size()) { //end of buffer, no more data
delete [] specs;
return false;
}
specs[0]=bs[posA];
c=CParam(specs[0],3);
}
//set our pivot spectrum
specs[0].getRawFilter(cFilter1,256);
posLeft=posA;
posRight=posA;
while(widthCount<(width*2)){
index=-1;
//Alternate looking left and right
if(bLeft){
bLeft=false;
widthCount++;
while(true){
posLeft--;
if(posLeft<0) { //buffer is too short on left, add spectra
i=bs[0].getScanNumber();
while(true){
i--;
if(i==0) break;
r->readFile(lastFile,ts,i);
if(ts.getScanNumber()==0) continue;
else break;
}
if(i==0) break;
bs.push_front(ts);
posA++;
posRight++;
posLeft=0;
ts.getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) {
index=posLeft;
break;
}
} else {
bs[posLeft].getRawFilter(cFilter2,256);
if(strcmp(cFilter1,cFilter2)==0) {
index=posLeft;
break;
}
}
}
} else {
bLeft=true;
//.........这里部分代码省略.........
示例6: ScanAveragePlusDeNoise
bool CNoiseReduction::ScanAveragePlusDeNoise(Spectrum& sp, char* file, int width, float cutoff, int scanNum){
Spectrum ts;
Spectrum ps;
//MSReader r;
vector<int> v;
vector<int> vPos;
int i;
int j;
int k;
int widthCount=0;
int numScans=1;
int match;
double dif;
double prec;
double dt;
double c;
bool bLeft=true;
int posLeft=ps.getScanNumber()-1;
int posRight=ps.getScanNumber()+1;
int index;
char cFilter1[256];
//char cFilter2[256];
sp.clear();
//if file is not null, create new buffer
if(file!=NULL){
strcpy(lastFile,file);
bs.clear();
if(scanNum>0) r->readFile(file,ts,scanNum);
else r->readFile(file,ts);
if(ts.getScanNumber()==0) return false;
bs.push_back(ts);
ps=bs[0];
c=CParam(ps,3);
posA=0;
} else {
posA++;
//cout << "ER: " << posA << " " << bs.size() << endl;
if(posA>=(int)bs.size()) return false; //end of buffer, no more data
ps=bs[posA];
c=CParam(ps,3);
}
//set our pivot spectrum
//ps=bs[posA];
ps.getRawFilter(cFilter1,256);
//cout << "Averaging: " << ps.getScanNumber() << endl;
posLeft=posA;
posRight=posA;
while(widthCount<(width*2)){
index=-1;
//Alternate looking left and right
if(bLeft){
bLeft=false;
widthCount++;
while(true){
posLeft--;
//cout << posLeft << endl;
if(posLeft<0) { //buffer is too short on left, add spectra
i=bs[0].getScanNumber();
while(true){
i--;
//cout << "I: " << i << endl;
if(i==0) break;
r->readFile(lastFile,ts,i);
if(ts.getScanNumber()==0) continue;
else break;
}
if(i==0) break;
bs.push_front(ts);
for(i=0;i<(int)v.size();i++)v[i]++;
posA++;
posRight++;
posLeft=0;
//ts.getRawFilter(cFilter2,256);
if(ts.getMsLevel()==cs.msLevel) {
index=posLeft;
break;
}
} else {
//bs[posLeft].getRawFilter(cFilter2,256);
if(bs[posLeft].getMsLevel()==cs.msLevel) {
index=posLeft;
break;
}
}
}
} else {
bLeft=true;
widthCount++;
//.........这里部分代码省略.........