//_____________________________________________________________________________
- AliCaloRawStream::AliCaloRawStream(AliRawReader* rawReader, TString calo) :
+AliCaloRawStream::AliCaloRawStream(AliRawReader* rawReader, TString calo, AliAltroMapping **mapping) :
AliAltroRawStream(rawReader),
fModule(-1),
fPrevModule(-1),
fPrevRow(-1),
fColumn(-1),
fPrevColumn(-1),
- fGain(0)
+ fCaloFlag(0),
+ fFilter(0),
+ fNRCU(0),
+ fExternalMapping(kFALSE)
{
// create an object to read PHOS/EMCAL raw digits
fNRCU = 4;
if(calo == "EMCAL") fNRCU = 2;
- TString path = gSystem->Getenv("ALICE_ROOT/");
- path += calo+"/mapping/RCU";
- TString path2;
- for(Int_t i = 0; i < fNRCU; i++) {
- path2 = path;
- path2 += i;
- path2 += ".data";
- fMapping[i] = new AliCaloAltroMapping(path2.Data());
+ if (mapping == NULL) {
+ TString path = gSystem->Getenv("ALICE_ROOT");
+ path += "/"+calo+"/mapping/RCU";
+ TString path2;
+ for(Int_t i = 0; i < fNRCU; i++) {
+ path2 = path;
+ path2 += i;
+ path2 += ".data";
+ fMapping[i] = new AliCaloAltroMapping(path2.Data());
+ }
+ }
+ else {
+ fExternalMapping = kTRUE;
+ for(Int_t i = 0; i < fNRCU; i++)
+ fMapping[i] = mapping[i];
}
SetNoAltroMapping(kFALSE);
fPrevRow(-1),
fColumn(-1),
fPrevColumn(-1),
- fGain(0),
- fNRCU(0)
+ fCaloFlag(0),
+ fFilter(0),
+ fNRCU(0),
+ fExternalMapping(kFALSE)
{
Fatal("AliCaloRawStream", "copy constructor not implemented");
}
{
// destructor
- for(Int_t i = 0; i < fNRCU; i++) delete fMapping[i];
+ if (!fExternalMapping)
+ for(Int_t i = 0; i < fNRCU; i++)
+ delete fMapping[i];
}
//_____________________________________________________________________________
// reset phos/emcal raw stream params
AliAltroRawStream::Reset();
fModule = fPrevModule = fRow = fPrevRow = fColumn = fPrevColumn = -1;
- fGain = 0;
+ fFilter = fCaloFlag = 0;
}
//_____________________________________________________________________________
fPrevRow = fRow;
fPrevColumn = fColumn;
if (AliAltroRawStream::Next()) {
- if (IsNewHWAddress())
+ if (IsNewHWAddress()) {
ApplyAltroMapping();
+ if ( fFilter > 0 ) { // some data should be filtered out
+ if ( (fFilter & (1<<fCaloFlag)) != 0) {
+ // this particular data should be filtered out
+ Next(); // go to the next address instead
+ }
+ }
+ }
return kTRUE;
}
else
Short_t hwAddress = GetHWAddress();
fRow = fMapping[rcuIndex]->GetPadRow(hwAddress);
fColumn = fMapping[rcuIndex]->GetPad(hwAddress);
- fGain = fMapping[rcuIndex]->GetSector(hwAddress);
+ fCaloFlag = fMapping[rcuIndex]->GetSector(hwAddress);
}