#include <TString.h>
#include <TSystem.h>
+#include "AliLog.h"
#include "AliCaloRawStreamV3.h"
#include "AliRawReader.h"
#include "AliCaloAltroMapping.h"
fColumn(-1),
fCaloFlag(0),
fFilter(0),
+ fNModules(0),
fNRCU(0),
fNSides(0),
fCalo(calo),
// create an object to read PHOS/EMCAL raw digits
SelectRawData(calo);
- // PHOS and EMCAL have differen number of RCU per module
- //For PHOS
- fNRCU = 4;
- fNSides = 1;
- //For EMCAL
- TString sides[]={"A","C"};
+ // PHOS and EMCAL have different number of RCU per module
+ //For PHOS (different mappings for different modules)
+ if(fCalo == "PHOS") {
+ fNModules = 5;
+ fNRCU = 4;
+ fNSides = 1;
+ }
+ //For EMCAL (the same mapping for all modules)
if(fCalo == "EMCAL") {
- fNRCU = 2;
- fNSides = 2;
+ fNModules = 1;
+ fNRCU = 2;
+ fNSides = 2;
}
+ TString sides[]={"A","C"};
if (mapping == NULL) {
+ // Read mapping files from $ALICE_ROOT/CALO/mapping/*.data
TString path = gSystem->Getenv("ALICE_ROOT");
- path += "/"+fCalo+"/mapping/RCU";
- TString path2;
- for(Int_t j = 0; j < fNSides; j++){
- for(Int_t i = 0; i < fNRCU; i++) {
- path2 = path;
- path2 += i;
- if(fCalo == "EMCAL") path2 += sides[j];
- path2 += ".data";
- fMapping[j*fNRCU+ i] = new AliCaloAltroMapping(path2.Data());
+ path += "/"+fCalo+"/mapping/";
+ TString path1, path2;
+ for(Int_t m = 0; m < fNModules; m++) {
+ path1 = path;
+ if (fCalo == "EMCAL") {
+ path1 += "RCU";
+ }
+ else if(fCalo == "PHOS" ) {
+ path1 += "Mod";
+ path1 += m;
+ path1 += "RCU";
+ }
+ for(Int_t j = 0; j < fNSides; j++){
+ for(Int_t i = 0; i < fNRCU; i++) {
+ path2 = path1;
+ path2 += i;
+ if(fCalo == "EMCAL") path2 += sides[j];
+ path2 += ".data";
+ AliDebug(2,Form("Mapping file: %s",path2.Data()));
+ fMapping[m*fNSides*fNRCU + j*fNRCU + i] = new AliCaloAltroMapping(path2.Data());
+ }
}
}
}
else {
+ // Mapping is supplied by reconstruction
fExternalMapping = kTRUE;
- for(Int_t i = 0; i < fNRCU*fNSides; i++)
+ for(Int_t i = 0; i < fNModules*fNRCU*fNSides; i++)
fMapping[i] = mapping[i];
}
}
fColumn(-1),
fCaloFlag(0),
fFilter(0),
+ fNModules(0),
fNRCU(0),
fNSides(0),
fCalo(""),
fExternalMapping(kFALSE)
{
+ // Dummy copy constructor
Fatal("AliCaloRawStreamV3", "copy constructor not implemented");
}
AliCaloRawStreamV3& AliCaloRawStreamV3::operator = (const AliCaloRawStreamV3&
/* stream */)
{
+ // Dummy assignment operator
Fatal("operator =", "assignment operator not implemented");
return *this;
}
// destructor
if (!fExternalMapping)
- for(Int_t i = 0; i < fNRCU*fNSides; i++)
+ for(Int_t i = 0; i < fNModules*fNRCU*fNSides; i++)
delete fMapping[i];
}
//_____________________________________________________________________________
void AliCaloRawStreamV3::Reset()
{
- // reset phos/emcal raw stream params
+ // reset PHOS/EMCAL raw stream params
AliAltroRawStreamV3::Reset();
fModule = fRow = fColumn = -1;
fFilter = fCaloFlag = 0;
Int_t rcuIndex = ddlNumber % fNRCU;
+ if( fNModules > 1) rcuIndex += fModule*fNRCU*fNSides;
if( fNRCU == 2 ){ // EMCAL may need to increase RCU index for the maps
if (fModule%2 == 1) { rcuIndex += 2; } // other='C' side maps
}
Int_t fColumn; // index of current column
Int_t fCaloFlag; // low (0) or (1) high gain; see enum EAliCaloFlag above
Int_t fFilter; // default 0 = let everything through
+ Int_t fNModules; // number of (super)modules
Int_t fNRCU; // number of RCU per (super)module
Int_t fNSides; // Division of EMCal in "A" "C" sides
TString fCalo; // Calorimeter name
- Bool_t fExternalMapping; // use external mapping or create a default one
- AliAltroMapping *fMapping[4]; // pointers to ALTRO mapping
+ Bool_t fExternalMapping; // use external mapping or create a default one
+ AliAltroMapping *fMapping[20]; // pointers to ALTRO mapping
- ClassDef(AliCaloRawStreamV3, 1) // class for reading PHOS/EMCAL raw digits
+ ClassDef(AliCaloRawStreamV3, 2) // class for reading PHOS/EMCAL raw digits
};