fSuperModuleData.Add(new AliEMCALSuperModuleCalibAbs(i));
}
fSuperModuleData.Compress(); // compress the TObjArray
+ fSuperModuleData.SetOwner(kTRUE);
}
//____________________________________________________________________________
Int_t iSM = 0; // SuperModule index
Int_t iCol = 0;
Int_t iRow = 0;
- Int_t id = 0;
// list of values to be read
// first: overall values for the whole SuperModule
- Int_t CalibMethod;
- Int_t CalibPass;
- Int_t CalibTime;
- Float_t AbsoluteGain;
- // second: additional info for LED Reference and SM temperature
- Float_t LEDRefAmp;
- Float_t LEDRefAmpRMS;
- Float_t LEDRefHighLowRatio;
- Int_t LEDRefHighLow;
- Float_t Temperature;
- Float_t TemperatureRMS;
+ Int_t iCalibMethod = 0;
+ Int_t iCalibPass = 0;
+ Float_t absoluteCalib = 0;
// third: info for each tower
- Float_t RelativeGain; // (ADC>GeV relative gain/conversion), value around 1
- Float_t HighLowRatio; // value around 16 or so
- Int_t HighLow; //
- Float_t LEDAmp; // low gain eq. amplitude
- Float_t LEDAmpRMS; //
+ Float_t relativeCalib = 0; // (ADC>GeV relative gain/conversion), value around 1
// end - all values
Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
for (Int_t i = 0; i < fNSuperModule; i++) {
AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
if (!inputFile) {
- printf("AliEMCALCalibAbs::ReadCalibAbsInfo - Error while reading input file; likely EOF..");
+ printf("AliEMCALCalibAbs::ReadCalibAbsInfo - Error while reading input file; likely EOF..\n");
return;
}
inputFile >> iSM;
t->SetSuperModuleNum(iSM);
// first: overall values for the whole SuperModule
- inputFile >> CalibMethod >> CalibPass >> CalibTime >> AbsoluteGain;
- t->SetCalibMethod(CalibMethod);
- t->SetCalibPass(CalibPass);
- t->SetCalibTime(CalibTime);
- t->SetAbsoluteGain(AbsoluteGain);
-
- // second: additional info for LED Reference and SM temperature
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
- inputFile >> id >> LEDRefAmp >> LEDRefAmpRMS >> LEDRefHighLowRatio >> LEDRefHighLow;
- t->SetLEDRefAmp(id, LEDRefAmp);
- t->SetLEDRefAmpRMS(id, LEDRefAmpRMS);
- t->SetLEDRefHighLowRatio(id, LEDRefHighLowRatio);
- t->SetLEDRefHighLow(id, LEDRefHighLow);
- }
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
- inputFile >> id >> Temperature >> TemperatureRMS;
- t->SetTemperature(id, Temperature);
- t->SetTemperatureRMS(id, TemperatureRMS);
- }
+ inputFile >> iCalibMethod >> iCalibPass >> absoluteCalib;
+ t->SetCalibMethod(iCalibMethod);
+ t->SetCalibPass(iCalibPass);
+ t->SetAbsoluteCalib(absoluteCalib);
// third: info for each tower
for (Int_t j=0; j<nAPDPerSM; j++) {
- inputFile >> iCol >> iRow
- >> RelativeGain >> HighLowRatio >> HighLow >> LEDAmp >> LEDAmpRMS;
+ inputFile >> iCol >> iRow >> relativeCalib;
+
+ // check that input values are not out bounds
+ if (iCol<0 || iCol>(AliEMCALGeoParams::fgkEMCALCols-1) ||
+ iRow<0 || iRow>(AliEMCALGeoParams::fgkEMCALRows-1) ) {
+ printf("AliEMCALCalibAbs::ReadCalibAbsInfo - Error while reading input file; j %d iCol %d iRow %d\n", j, iCol, iRow);
+ return;
+ }
// assume that this info is already swapped and done for this basis?
if (swapSides) {
iRow = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
}
- AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
-
- v->SetRelativeGain(RelativeGain);
- v->SetHighLowRatio(HighLowRatio);
- v->SetHighLow(HighLow);
- v->SetLEDAmp(LEDAmp);
- v->SetLEDAmpRMS(LEDAmpRMS);
+ t->SetRelativeCalib(iCol, iRow, relativeCalib);
}
} // i, SuperModule
Int_t iRow = 0;
Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
-
+ Float_t relativeCalib = 0;
for (Int_t i = 0; i < fNSuperModule; i++) {
AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
outputFile << t->GetSuperModuleNum() << endl;
outputFile << t->GetCalibMethod() << " "
<< t->GetCalibPass() << " "
- << t->GetCalibTime() << " "
- << t->GetAbsoluteGain() << endl;
-
- // second: additional info for LED Reference and SM temperature
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
- outputFile << j << " " << t->GetLEDRefAmp(j) << " " << t->GetLEDRefAmpRMS(j)
- << " " << t->GetLEDRefHighLowRatio(j) << " " << t->GetLEDRefHighLow(j)
- << endl;
- }
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
- outputFile << j << " " << t->GetTemperature(j) << " " << t->GetTemperatureRMS(j) << endl;
- }
+ << t->GetAbsoluteCalib() << endl;
// third: info for each tower
for (Int_t j=0; j<nAPDPerSM; j++) {
iCol = j / AliEMCALGeoParams::fgkEMCALRows;
iRow = j % AliEMCALGeoParams::fgkEMCALRows;
- AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
+ relativeCalib = t->GetRelativeCalib(iCol, iRow);
if (swapSides) {
// C side, oriented differently than A side: swap is requested
}
outputFile << iCol << " " << iRow
- << " " << v->GetRelativeGain()
- << " " << v->GetHighLowRatio()
- << " " << v->GetHighLow()
- << " " << v->GetLEDAmp()
- << " " << v->GetLEDAmpRMS() << endl;
+ << " " << relativeCalib << endl;
}
} // i, SuperModule
void AliEMCALCalibAbs::ReadTreeCalibAbsInfo(TTree *tree,
Bool_t swapSides)
{
- // how many SuperModule's worth of entries / APDs do we have?
+ // how many SuperModule's worth of info do we have?
Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
- fNSuperModule = tree->GetEntries() / nAPDPerSM;
+ fNSuperModule = tree->GetEntries();
Int_t iSM = 0; // SuperModule index
// list of values to be read
// first: overall values for the whole SuperModule
- Int_t CalibMethod;
- Int_t CalibPass= {0};
- Int_t CalibTime= {0};
- Float_t AbsoluteGain= {0};
- // second: additional info for LED Reference and SM temperature
- Float_t LEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Float_t LEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Float_t LEDRefHighLowRatio[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Int_t LEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Float_t Temperature[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
- Float_t TemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
+ Int_t iCalibMethod = 0;
+ Int_t iCalibPass = 0;
+ Float_t absoluteCalib = 0;
// third: info for each tower
- Float_t RelativeGain[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t HighLowRatio[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Int_t HighLow[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t LEDAmp[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t LEDAmpRMS[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
+ Float_t relativeCalib[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows];
// end - all values
// just to make the initializations of the arrays are done correctly, let's use memset
- memset(LEDRefAmp, 0, sizeof(LEDRefAmp));
- memset(LEDRefAmpRMS, 0, sizeof(LEDRefAmpRMS));
- memset(LEDRefHighLowRatio, 0, sizeof(LEDRefHighLowRatio));
- memset(LEDRefHighLow, 0, sizeof(LEDRefHighLow));
- memset(Temperature, 0, sizeof(Temperature));
- memset(TemperatureRMS, 0, sizeof(TemperatureRMS));
- memset(RelativeGain, 0, sizeof(RelativeGain));
- memset(HighLowRatio, 0, sizeof(HighLowRatio));
- memset(HighLow, 0, sizeof(HighLow));
- memset(LEDAmp, 0, sizeof(LEDAmp));
- memset(LEDAmpRMS, 0, sizeof(LEDAmpRMS));
+ memset(relativeCalib, 0, sizeof(relativeCalib));
// declare the branches
tree->SetBranchAddress("iSM", &iSM);
- tree->SetBranchAddress("CalibMethod", &CalibMethod);
- tree->SetBranchAddress("CalibPass", &CalibPass);
- tree->SetBranchAddress("CalibTime", &CalibTime);
- tree->SetBranchAddress("AbsoluteGain", &AbsoluteGain);
+ tree->SetBranchAddress("CalibMethod", &iCalibMethod);
+ tree->SetBranchAddress("CalibPass", &iCalibPass);
+ tree->SetBranchAddress("AbsoluteCalib", &absoluteCalib);
//
- tree->SetBranchAddress("LEDRefAmp", LEDRefAmp);
- tree->SetBranchAddress("LEDRefAmpRMS", LEDRefAmpRMS);
- tree->SetBranchAddress("LEDRefHighLowRatio", LEDRefHighLowRatio);
- tree->SetBranchAddress("LEDRefHighLow", LEDRefHighLow);
- tree->SetBranchAddress("Temperature", Temperature);
- tree->SetBranchAddress("TemperatureRMS", TemperatureRMS);
- //
- tree->SetBranchAddress("RelativeGain", RelativeGain);
- tree->SetBranchAddress("HighLowRatio", HighLowRatio);
- tree->SetBranchAddress("HighLow", HighLow);
- tree->SetBranchAddress("LEDAmp", LEDAmp);
- tree->SetBranchAddress("LEDAmpRMS", LEDAmpRMS);
+ tree->SetBranchAddress("RelativeCalib", relativeCalib);
// indices for looping over the towers
Int_t iCol = 0;
t->SetSuperModuleNum(iSM);
// first, overall values
- t->SetCalibMethod(CalibMethod);
- t->SetCalibPass(CalibPass);
- t->SetCalibTime(CalibTime);
- t->SetAbsoluteGain(AbsoluteGain);
-
- // second: additional info for LED references and SM temperatures
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
- t->SetLEDRefAmp(j, LEDRefAmp[j]);
- t->SetLEDRefAmpRMS(j, LEDRefAmpRMS[j]);
- t->SetLEDRefHighLowRatio(j, LEDRefHighLowRatio[j]);
- t->SetLEDRefHighLow(j, LEDRefHighLow[j]);
- }
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
- t->SetTemperature(j, Temperature[j]);
- t->SetTemperatureRMS(j, TemperatureRMS[j]);
- }
+ t->SetCalibMethod(iCalibMethod);
+ t->SetCalibPass(iCalibPass);
+ t->SetAbsoluteCalib(absoluteCalib);
// third: info for each tower
for (Int_t j=0; j<nAPDPerSM; j++) {
iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
}
- AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
-
- v->SetRelativeGain(RelativeGain[iCol][iRow]);
- v->SetHighLowRatio(HighLowRatio[iCol][iRow]);
- v->SetHighLow(HighLow[iCol][iRow]);
- v->SetLEDAmp(LEDAmp[iCol][iRow]);
- v->SetLEDAmpRMS(LEDAmpRMS[iCol][iRow]);
+ t->SetRelativeCalib(iColMod, iRowMod, relativeCalib[iCol][iRow]);
}
} // loop over entries
Int_t iSM = 0; // SuperModule index
// list of values to be written
// first: overall values for the whole SuperModule
- Int_t CalibMethod = 0;
- Int_t CalibPass = 0;
- Int_t CalibTime = 0;
- Float_t AbsoluteGain = 0;
- // second: additional info for LED Reference and SM temperature
- Float_t LEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs] = {0};
- Float_t LEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Float_t LEDRefHighLowRatio[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Int_t LEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]= {0};
- Float_t Temperature[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
- Float_t TemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]= {0};
+ Int_t iCalibMethod = 0;
+ Int_t iCalibPass = 0;
+ Float_t absoluteCalib = 0;
// third: info for each tower
- Float_t RelativeGain[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t HighLowRatio[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Int_t HighLow[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t LEDAmp[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
- Float_t LEDAmpRMS[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]= {0};
+ Float_t relativeCalib[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows];
// end - all values
// just to make the initializations of the arrays are done correctly, let's use memset
- memset(LEDRefAmp, 0, sizeof(LEDRefAmp));
- memset(LEDRefAmpRMS, 0, sizeof(LEDRefAmpRMS));
- memset(LEDRefHighLowRatio, 0, sizeof(LEDRefHighLowRatio));
- memset(LEDRefHighLow, 0, sizeof(LEDRefHighLow));
- memset(Temperature, 0, sizeof(Temperature));
- memset(TemperatureRMS, 0, sizeof(TemperatureRMS));
- memset(RelativeGain, 0, sizeof(RelativeGain));
- memset(HighLowRatio, 0, sizeof(HighLowRatio));
- memset(HighLow, 0, sizeof(HighLow));
- memset(LEDAmp, 0, sizeof(LEDAmp));
- memset(LEDAmpRMS, 0, sizeof(LEDAmpRMS));
+ memset(relativeCalib, 0, sizeof(relativeCalib));
Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
// for looping over towers
// declare the branches
// first
tree->Branch("iSM", &iSM, "iSM/I");
- tree->Branch("CalibMethod", &CalibMethod, "CalibMethod/I");
- tree->Branch("CalibPass", &CalibPass, "CalibPass/I");
- tree->Branch("CalibTime", &CalibTime, "CalibTime/I");
- tree->Branch("AbsoluteGain", &AbsoluteGain, "AbsoluteGain/F");
- // second
- tree->Branch( "LEDRefAmp", &LEDRefAmp, Form("LEDRefAmp[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
- tree->Branch( "LEDRefAmpRMS", &LEDRefAmpRMS, Form("LEDRefAmpRMS[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
- tree->Branch( "LEDRefHighLowRatio", &LEDRefHighLowRatio, Form("LEDRefHighLowRatio[%d]/F", AliEMCALGeoParams::fgkEMCALLEDRefs) );
- tree->Branch( "LEDRefHighLow", &LEDRefHighLow, Form("LEDRefHighLow[%d]/I", AliEMCALGeoParams::fgkEMCALLEDRefs) );
- tree->Branch( "Temperature", &Temperature, Form("Temperature[%d]/F", AliEMCALGeoParams::fgkEMCALTempSensors) );
- tree->Branch( "TemperatureRMS", &TemperatureRMS, Form("TemperatureRMS[%d]/F", AliEMCALGeoParams::fgkEMCALTempSensors) );
+ tree->Branch("CalibMethod", &iCalibMethod, "CalibMethod/I");
+ tree->Branch("CalibPass", &iCalibPass, "CalibPass/I");
+ tree->Branch("AbsoluteCalib", &absoluteCalib, "AbsoluteCalib/F");
// third: info for each tower; see if a 2D array works OK or if we'll have to use 1D arrays instead
- tree->Branch( "RelativeGain", &RelativeGain, Form("RelativeGain[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
- tree->Branch( "HighLowRatio", &HighLowRatio, Form("HighLowRatio[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
- tree->Branch( "HighLow", &HighLow, Form("HighLow[%d][%d]/I", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
- tree->Branch( "LEDAmp", &LEDAmp, Form("LEDAmp[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
- tree->Branch( "LEDAmpRMS", &LEDAmpRMS, Form("LEDAmpRMS[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
+ tree->Branch( "RelativeCalib", &relativeCalib, Form("RelativeCalib[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
for (iSM = 0; iSM < fNSuperModule; iSM++) {
AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[iSM];
iSM = t->GetSuperModuleNum();
// first, overall values
- CalibMethod = t->GetCalibMethod();
- CalibPass = t->GetCalibPass();
- CalibTime = t->GetCalibTime();
- AbsoluteGain = t->GetAbsoluteGain();
-
- // second: additional info for LED references and SM temperatures
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALLEDRefs; j++) {
- LEDRefAmp[j] = t->GetLEDRefAmp(j);
- LEDRefAmpRMS[j] = t->GetLEDRefAmpRMS(j);
- LEDRefHighLowRatio[j] = t->GetLEDRefHighLowRatio(j);
- LEDRefHighLow[j] = t->GetLEDRefHighLow(j);
- }
- for (Int_t j=0; j<AliEMCALGeoParams::fgkEMCALTempSensors; j++) {
- Temperature[j] = t->GetTemperature(j);
- TemperatureRMS[j] = t->GetTemperatureRMS(j);
- }
+ iCalibMethod = t->GetCalibMethod();
+ iCalibPass = t->GetCalibPass();
+ absoluteCalib = t->GetAbsoluteCalib();
// third: info for each tower
for (Int_t j=0; j<nAPDPerSM; j++) {
iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
}
- AliEMCALCalibAbsVal * v = t->GetAPDVal(iCol, iRow);
-
- RelativeGain[iCol][iRow] = v->GetRelativeGain();
- HighLowRatio[iCol][iRow] = v->GetHighLowRatio();
- HighLow[iCol][iRow] = v->GetHighLow();
- LEDAmp[iCol][iRow] = v->GetLEDAmp();
- LEDAmpRMS[iCol][iRow] = v->GetLEDAmpRMS();
+ relativeCalib[iColMod][iRowMod] = t->GetRelativeCalib(iCol, iRow);
}
tree->Fill();
//____________________________________________________________________________
AliEMCALSuperModuleCalibAbs * AliEMCALCalibAbs::GetSuperModuleCalibAbsNum(Int_t supModIndex)const
-{
+{ // getter via index
for (int i=0; i<fNSuperModule; i++) {
AliEMCALSuperModuleCalibAbs * t = (AliEMCALSuperModuleCalibAbs*) fSuperModuleData[i];
if (t->GetSuperModuleNum() == supModIndex) {