Hi everybody
My program crashes when I call the Init() method
of the BrRdoModuleBB class, and I found out that
the method tries to open a file (BrCalibrBB.dat)
and then reads things without checking if this
file really exists (this is done later, but then
it's too late). You'll have to put this check
before reading anything. Here is the code that's
in brat right now, and afterwards a example on
how it can be fixed (still a bit messy code, but
it works):
//______________________________________________________________________________
void BrRdoModuleBB::Init()
{
//
// Get Calibration Numbers
//
const Char_t *bratsys = gSystem->Getenv("BRATSYS");
const Char_t *pwd = gSystem->Getenv("PWD");
Char_t CalibrFileName[100];
sprintf(CalibrFileName, "%s/BrCalibrBB.dat",pwd);
ifstream ReadNumbers(CalibrFileName); <---- no check
for(int i=1; i<45; i++){
ReadNumbers>>DtLeft[i]>>DtRight[i]>>LPedMean[i]>>LPedRMS[i]
>>RPedMean[i]>>RPedRMS[i]>>LAdcGain0[i]>>RAdcGain0[i]
>>kL[i]>>kR[i]>>DtTdcLSlew[i]>>DtTdcRSlew[i];
}
if(!ReadNumbers){
sprintf(CalibrFileName, "%s/params/bb/BrCalibrBB.dat",bratsys);
ifstream ReadNumbers(CalibrFileName);
for(int i=1; i<45; i++){
ReadNumbers>>DtLeft[i]>>DtRight[i]>>LPedMean[i]>>LPedRMS[i]
>>RPedMean[i]>>RPedRMS[i]>>LAdcGain0[i]>>RAdcGain0[i]
>>kL[i]>>kR[i]>>DtTdcLSlew[i]>>DtTdcRSlew[i];
}
}
}
//----------------------------------------------------------------------------
Suggestion:
//______________________________________________________________________________
void BrRdoModuleBB::Init()
{
//
// Get Calibration Numbers
//
const Char_t *bratsys = gSystem->Getenv("BRATSYS");
const Char_t *pwd = gSystem->Getenv("PWD");
Char_t CalibrFileName[100];
sprintf(CalibrFileName, "%s/BrCalibrBB.dat", pwd);
ifstream ReadNumbers(CalibrFileName);
// 1st: check if file is in current directory
if(ReadNumbers)
for(int i=1; i<45; i++) {
ReadNumbers>>DtLeft[i]>>DtRight[i]>>LPedMean[i]>>LPedRMS[i]
>>RPedMean[i]>>RPedRMS[i]>>LAdcGain0[i]>>RAdcGain0[i]
>>kL[i]>>kR[i]>>DtTdcLSlew[i]>>DtTdcRSlew[i]
>>LGapSt[i]>>LGap[i]>>RGapSt[i]>>RGap[i];
}
// 2nd: if not in current dir., look in $BRATSYS
else {
sprintf(CalibrFileName, "%s/params/bb/BrCalibrBB.dat",bratsys);
ifstream ReadNumbers(CalibrFileName);
if(ReadNumbers)
for(int i=1; i<45; i++) {
ReadNumbers>>DtLeft[i]>>DtRight[i]>>LPedMean[i]>>LPedRMS[i]>>RPedMean[i]>>RPedRMS[i]>>LAdcGain0[i]>>RAdcGain0[i]
>>kL[i]>>kR[i]>>DtTdcLSlew[i]>>DtTdcRSlew[i]
>>LGapSt[i]>>LGap[i]>>RGapSt[i]>>RGap[i];
}
// 3rd: if not there, abort!
else if (!ReadNumbers) {
cerr << "No 'BrCalibrBB.dat' found!" << endl;
exit(1);
}
}
}
Cheers,
Claus Jorgensen & Djamel Ouerdane
This archive was generated by hypermail 2b29 : Mon Nov 13 2000 - 11:23:23 EST