Introduced a primitive check in the TRIM.SP reading routine in order to prevent a segmentation fault

This commit is contained in:
Bastian M. Wojek
2010-08-14 14:22:57 +00:00
parent 91c66651aa
commit f4d219a367
2 changed files with 39 additions and 26 deletions

View File

@ -358,7 +358,7 @@ void TFitPofBStartupHandler::CheckLists()
} }
if(fDebug) { if(fDebug) {
cout << "Energies and Labels:"; cout << "Energies and Labels:" << endl;
for ( map<double, string>::const_iterator iter(fEnergies.begin()); iter != fEnergies.end(); ++iter ) for ( map<double, string>::const_iterator iter(fEnergies.begin()); iter != fEnergies.end(); ++iter )
cout << iter->first << " " << iter->second << endl; cout << iter->first << " " << iter->second << endl;
} }

View File

@ -67,6 +67,7 @@ TTrimSPData::TTrimSPData(const string &path, map<double, string> &energies) {
double zz(0.0), nzz(0.0); double zz(0.0), nzz(0.0);
vector<double> vzz, vnzz; vector<double> vzz, vnzz;
string word, energyStr; string word, energyStr;
bool goodFile(false);
for ( map<double, string>::const_iterator iter(energies.begin()); iter != energies.end(); ++iter ) { for ( map<double, string>::const_iterator iter(energies.begin()); iter != energies.end(); ++iter ) {
@ -78,36 +79,48 @@ TTrimSPData::TTrimSPData(const string &path, map<double, string> &energies) {
delete rgeFile; delete rgeFile;
rgeFile = 0; rgeFile = 0;
} else { } else {
fEnergy.push_back(iter->first);
while(*rgeFile >> word) while(*rgeFile >> word) {
if(word == "PARTICLES") break; if(word == "PARTICLES") {
goodFile = true;
while(!rgeFile->eof()) { break;
*rgeFile >> zz >> nzz; }
vzz.push_back(zz);
vnzz.push_back(nzz);
} }
fDZ.push_back(vzz[1]-vzz[0]); if (goodFile) {
while(zz < 2100.0){ fEnergy.push_back(iter->first);
zz += *(fDZ.end()-1);
vzz.push_back(zz); while(!rgeFile->eof()) {
vnzz.push_back(0.0); *rgeFile >> zz >> nzz;
vzz.push_back(zz);
vnzz.push_back(nzz);
}
fDZ.push_back(vzz[1]-vzz[0]);
while(zz < 2100.0){
zz += *(fDZ.end()-1);
vzz.push_back(zz);
vnzz.push_back(0.0);
}
fDataZ.push_back(vzz);
fDataNZ.push_back(vnzz);
rgeFile->close();
delete rgeFile;
rgeFile = 0;
vzz.clear();
vnzz.clear();
goodFile = false;
} else {
cerr << "TTrimSPData::TTrimSPData: " << energyStr << " does not seem to be a valid unmodified TRIM.SP output file!" << endl;
continue;
} }
fDataZ.push_back(vzz);
fDataNZ.push_back(vnzz);
rgeFile->close();
delete rgeFile;
rgeFile = 0;
vzz.clear();
vnzz.clear();
} }
} }