Introduced a primitive check in the TRIM.SP reading routine in order to prevent a segmentation fault
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user