#include "AliITSRawStreamSSD.h"
#include "AliITSNoiseSSD.h"
+#include "AliITSPedestalSSD.h"
+#include "AliITSBadChannelsSSD.h"
#include <Riostream.h>
/* $Id$ */
+const Int_t AliITSPreprocessorSSD::fgkNumberOfSSD = 1698;
+
ClassImp(AliITSPreprocessorSSD)
//______________________________________________________________________________________________
// Note. To be modified: dcsAliasMap is not needed but I can not get rid
// of it unless the base class AliPreprocessor is modified accordingly.
- TObjArray calib_array(1698);
+ TObjArray calib_array(fgkNumberOfSSD);
+ TObjArray badch_array(fgkNumberOfSSD);
+ TObjArray ped_array(fgkNumberOfSSD);
//Float_t noise=0, gain=0;
-
+
TString runType = GetRunType();
if(runType == "ELECTRONICS_CALIBRATION_RUN") {
-
+
}
- else if(runType == "PEDESTAL_RUN") {
+ else if(runType == "PEDESTAL") {
TList* list = GetFileSources(kDAQ, "CALIBRATION");
if (list && list->GetEntries() > 0)
}
TObjArray *cal;
- f->GetObject("TObjArray;1", cal);
- f->Close(); delete f;
-
+ f->GetObject("Noise;1", cal);
if(!cal) {
- Log("File does not contain expected data!");
+ Log("File does not contain expected data for the noise!");
delete list;
+ return 3;
+ }
+
+ //---------------------------------------
+ // in case some module was not calibrated!
+ for(Int_t i=0; i<fgkNumberOfSSD; i++) {
+ AliITSNoiseSSD *calib = new AliITSNoiseSSD();
+ calib->SetMod((UShort_t) i+500);
+ calib->SetNNoiseP(768);
+ calib->SetNNoiseN(768);
+ // take a reasonable averaged value for the noise on P- and N-side strips
+ for(Int_t j=0; j<768; j++) {
+ calib->AddNoiseP(j,2.);
+ calib->AddNoiseN(j,4.);
+ }
+ calib_array.AddAt(calib,i);
}
-
+ //-----------------------------------------
+
Int_t nmod = cal->GetEntries();
+ for(Int_t mod=0; mod<nmod; mod++) {
+ AliITSNoiseSSD *calib = (AliITSNoiseSSD*) cal->At(mod);
+ if((calib->GetMod()<500)||(calib->GetMod()>2198)) continue;
+ calib_array.AddAt(calib,calib->GetMod()-500);
+ }
+
+ //---------------------------------------
+ // in case some module was not calibrated!
+ for(Int_t i=0; i<fgkNumberOfSSD; i++) {
+ AliITSBadChannelsSSD *badch = new AliITSBadChannelsSSD();
+ badch->SetMod((UShort_t) i+500);
+ badch_array.AddAt(badch,i);
+ }
+ //-----------------------------------------
+
+ //-----------------------------------------
+ TObjArray *bad;
+ f->GetObject("BadChannels;1", bad);
+ if(!bad) {
+ Log("File does not contain expected data for bad channels !");
+ delete list;
+ return 4;
+ }
+ nmod = bad->GetEntries();
for(Int_t mod=0; mod<nmod; mod++) {
+ AliITSBadChannelsSSD *badch = (AliITSBadChannelsSSD*) bad->At(mod);
+ if((badch->GetMod()<500)||(badch->GetMod()>2198)) continue;
+ badch_array.AddAt(badch,badch->GetMod()-500);
+ }
- AliITSNoiseSSD *calib = (AliITSNoiseSSD*) cal->At(mod);
- calib_array.AddAt(calib,calib->GetMod());
+ //---------------------------------------
+ // in case some module was not calibrated!
+ for(Int_t i=0; i<fgkNumberOfSSD; i++) {
+ AliITSPedestalSSD *pedel = new AliITSPedestalSSD();
+ pedel->SetMod((UShort_t) i+500);
+ pedel->SetNPedestalP(768);
+ pedel->SetNPedestalN(768);
+ for(Int_t j=0; j<768; j++) {
+ pedel->AddPedestalP(j,0.);
+ pedel->AddPedestalN(j,0.);
+ }
+ ped_array.AddAt(pedel,i);
}
+ //-----------------------------------------
+
+ TObjArray *ped;
+ f->GetObject("Pedestal;1", ped);
+ if(!ped) {
+ Log("File does not contain expected data for the pedestals!");
+ delete list;
+ return 5;
+ }
+ nmod = ped->GetEntries();
+ for(Int_t mod=0; mod<nmod; mod++) {
+ AliITSPedestalSSD *pedel = (AliITSPedestalSSD*) ped->At(mod);
+ if((pedel->GetMod()<500)||(pedel->GetMod()>2198)) continue;
+ ped_array.AddAt(pedel,pedel->GetMod()-500);
+ }
+
+ f->Close(); delete f;
} else {
Log("GetFile error!");
delete list;
- return 3;
+ return 6;
} // if filename
} // end iteration over LDCs
} else {
Log("GetFileSources error!");
if(list) delete list;
- return 4;
+ return 7;
} // if list
//Now we have to store the final CDB file
AliCDBMetaData metaData;
metaData.SetBeamPeriod(0);
metaData.SetResponsible("Enrico Fragiacomo");
- metaData.SetComment("This preprocessor fills the TObjArray of AliITSNoiseSSD");
+ metaData.SetComment("Fills noise, pedestal and bad channels TObjArray");
- if(!Store("Calib", "NoiseSSD", &calib_array, &metaData, 0, 1)) {
- Log("no store");
+ if(!Store("Calib", "NoiseSSD", &calib_array, &metaData, 0, 1)) {
+ Log("no store");
return 1;
- }
-
+ }
+
+ if(!Store("Calib", "BadChannelsSSD", &badch_array, &metaData, 0, 1)) {
+ Log("no store");
+ return 1;
+ }
+
+ if(!StoreReferenceData("Calib","PedestalSSD", &ped_array, &metaData)) {
+ Log("no store");
+ return 1;
+ }
+
} // end if noise_run
else {
Log("Nothing to do");