// You have to use just the correct name of geometry. If name is empty string the
// default name of geometry will be used.
//
-// AliEMCALGeoUtils* geom = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
+// AliEMCALGeoUtils* geom = new AliEMCALGeoUtils("EMCAL_COMPLETEV1","EMCAL");
// TGeoManager::Import("geometry.root");
//
// MC: If you work with MC data you have to get geometry the next way:
fCentersOfCellsPhiDir(0x0),fEtaCentersOfCells(0x0),
fNCells(0),fNPhi(0),fCentersOfCellsXDir(0x0),fArm1EtaMin(0),
fArm1EtaMax(0),fArm1PhiMin(0),fArm1PhiMax(0),fEtaMaxOfTRD1(0),
- fShishKebabTrd1Modules(0),fParSM(0x0),fPhiModuleSize(0.),
+ fShishKebabTrd1Modules(0),fPhiModuleSize(0.),
fEtaModuleSize(0.),fPhiTileSize(0.),fEtaTileSize(0.),fNZ(0),
fIPDistance(0.),fLongModuleSize(0.),fShellThickness(0.),
fZLength(0.),fSampling(0.)
fEnvelop[0] = 0.;
fEnvelop[1] = 0.;
fEnvelop[2] = 0.;
+ fParSM[0] = 0.;
+ fParSM[1] = 0.;
+ fParSM[2] = 0.;
for(Int_t i=0;i<12;i++)fkSModuleMatrix[i]=0 ;
for (Int_t i = 0; i < 48; i++)
fCentersOfCellsPhiDir(geo.fCentersOfCellsPhiDir),fEtaCentersOfCells(geo.fEtaCentersOfCells),
fNCells(geo.fNCells),fNPhi(geo.fNPhi),fCentersOfCellsXDir(geo.fCentersOfCellsXDir),fArm1EtaMin(geo.fArm1EtaMin),
fArm1EtaMax(geo.fArm1EtaMax),fArm1PhiMin(geo.fArm1PhiMin),fArm1PhiMax(geo.fArm1PhiMax),fEtaMaxOfTRD1(geo.fEtaMaxOfTRD1),
- fShishKebabTrd1Modules(geo.fShishKebabTrd1Modules),fParSM(geo.fParSM),fPhiModuleSize(geo.fPhiModuleSize),
+ fShishKebabTrd1Modules(geo.fShishKebabTrd1Modules),fPhiModuleSize(geo.fPhiModuleSize),
fEtaModuleSize(geo.fEtaModuleSize),fPhiTileSize(geo.fPhiTileSize),fEtaTileSize(geo.fEtaTileSize),fNZ(geo.fNZ),
fIPDistance(geo.fIPDistance),fLongModuleSize(geo.fLongModuleSize),fShellThickness(geo.fShellThickness),
fZLength(geo.fZLength),fSampling(geo.fSampling)
fEnvelop[0] = geo.fEnvelop[0];
fEnvelop[1] = geo.fEnvelop[1];
fEnvelop[2] = geo.fEnvelop[2];
+ fParSM[0] = geo.fParSM[0];
+ fParSM[1] = geo.fParSM[1];
+ fParSM[2] = geo.fParSM[2];
for(Int_t i=0;i<12;i++)fkSModuleMatrix[i]=0 ;
for (Int_t i = 0; i < 48; i++)
fCentersOfCellsPhiDir(0x0),fEtaCentersOfCells(0x0),
fNCells(0),fNPhi(0),fCentersOfCellsXDir(0x0),fArm1EtaMin(0),
fArm1EtaMax(0),fArm1PhiMin(0),fArm1PhiMax(0),fEtaMaxOfTRD1(0),
- fShishKebabTrd1Modules(0),fParSM(0x0),fPhiModuleSize(0.),
+ fShishKebabTrd1Modules(0),fPhiModuleSize(0.),
fEtaModuleSize(0.),fPhiTileSize(0.),fEtaTileSize(0.),fNZ(0),
fIPDistance(0.),fLongModuleSize(0.),fShellThickness(0.),
fZLength(0.),fSampling(0.)
fEnvelop[0] = fEMCGeometry->GetEnvelop(0);
fEnvelop[1] = fEMCGeometry->GetEnvelop(1);
fEnvelop[2] = fEMCGeometry->GetEnvelop(2);
+ fParSM[0] = fEMCGeometry->GetSuperModulesPar(0);
+ fParSM[1] = fEMCGeometry->GetSuperModulesPar(1);
+ fParSM[2] = fEMCGeometry->GetSuperModulesPar(2);
fArm1EtaMin = fEMCGeometry->GetArm1EtaMin();
fArm1EtaMax = fEMCGeometry->GetArm1EtaMax();
fArm1PhiMin = fEMCGeometry->GetArm1PhiMin();
fArm1PhiMax = fEMCGeometry->GetArm1PhiMax();
fShellThickness = fEMCGeometry->GetShellThickness();
- fZLength = fEMCGeometry->GetZLength();
- fSampling = fEMCGeometry->GetSampling();
- fParSM = fEMCGeometry->GetSuperModulesPars();
+ fZLength = fEMCGeometry->GetZLength();
+ fSampling = fEMCGeometry->GetSampling();
fEtaModuleSize = fEMCGeometry->GetEtaModuleSize();
fPhiModuleSize = fEMCGeometry->GetPhiModuleSize();
fEtaTileSize = fEMCGeometry->GetEtaTileSize();
fPhiTileSize = fEMCGeometry->GetPhiTileSize();
- fNZ = fEMCGeometry->GetNZ();
- fIPDistance = fEMCGeometry->GetIPDistance();
+ fNZ = fEMCGeometry->GetNZ();
+ fIPDistance = fEMCGeometry->GetIPDistance();
fLongModuleSize = fEMCGeometry->GetLongModuleSize();
CreateListOfTrd1Modules();
if (AliDebugLevel()>=2) {
fEMCGeometry->Print();
- PrintGeometry();
+ PrintGeometryGeoUtils();
}
for (Int_t ix = 0; ix < 48; ix++)
//____________________________________________________________________________
AliEMCALGeoUtils & AliEMCALGeoUtils::operator = (const AliEMCALGeoUtils & /*rvalue*/) {
-
+ //assing operator
Fatal("assignment operator", "not implemented") ;
return *this ;
}
}
//___________________________________________________________________
-void AliEMCALGeoUtils::PrintGeometry()
+void AliEMCALGeoUtils::PrintGeometryGeoUtils()
{
//Print information from geometry
fEMCGeometry->PrintGeometry();
{
//Trigger mapping method, get FastOr Index from TRU
- if (iTRU > 31 || iTRU < 0 || iADC > 95 || iADC < 0)
+ if (iTRU > 31 || iTRU < 0 || iADC > 95 || iADC < 0)
{
AliError("TRU out of range!");
return kFALSE;
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetPositionInEMCALFromAbsFastORIndex(const Int_t id, Int_t& iEta, Int_t& iPhi) const
{
+ //Trigger mapping method, get position in EMCAL from FastOR index
+
Int_t iSM=-1;
if (GetPositionInSMFromAbsFastORIndex(id, iSM, iEta, iPhi))
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInSM(const Int_t iSM, const Int_t iEta, const Int_t iPhi, Int_t& id) const
{
- //
+ //Trigger mapping method, from position in SM Index get FastOR index
+
if (iSM < 0 || iSM > 11 || iEta < 0 || iEta > 23 || iPhi < 0 || iPhi > 11)
{
AliError("Out of range!");
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetAbsFastORIndexFromPositionInEMCAL(const Int_t iEta, const Int_t iPhi, Int_t& id) const
{
- //
+ //Trigger mapping method, from position in EMCAL Index get FastOR index
+
if (iEta < 0 || iEta > 47 || iPhi < 0 || iPhi > 63 )
{
AliError("Out of range!");
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetFastORIndexFromCellIndex(const Int_t id, Int_t& idx) const
{
+ //Trigger mapping method, from cell index get FastOR index
+
Int_t iSupMod, nModule, nIphi, nIeta, iphim, ietam;
Bool_t isOK = GetCellIndex( id, iSupMod, nModule, nIphi, nIeta );
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetCellIndexFromFastORIndex(const Int_t id, Int_t idx[4]) const
{
- Int_t iSM=-1, iEta=-1, iPhi=-1;
+ //Trigger mapping method, from FASTOR index get cell index
+
+ Int_t iSM=-1, iEta=-1, iPhi=-1;
if (GetPositionInSMFromAbsFastORIndex(id, iSM, iEta, iPhi))
{
Int_t ix = 2 * iEta;
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetTRUIndexFromSTUIndex(const Int_t id, Int_t& idx) const
{
+ //Trigger mapping method, from STU index get TRU index
+
if (id > 31 || id < 0)
{
AliError(Form("TRU index out of range: %d",id));
//________________________________________________________________________________________________
Int_t AliEMCALGeoUtils::GetTRUIndexFromSTUIndex(const Int_t id) const
{
+ //Trigger mapping method, from STU index get TRU index
+
if (id > 31 || id < 0)
{
AliError(Form("TRU index out of range: %d",id));
//________________________________________________________________________________________________
Bool_t AliEMCALGeoUtils::GetFastORIndexFromL0Index(const Int_t iTRU, const Int_t id, Int_t idx[], const Int_t size) const
{
+ //Trigger mapping method, from L0 index get FastOR index
if (size <= 0 ||size > 4)
{
AliError("Size not supported!");
switch (size)
{
case 1: // Cosmic trigger
- if (!GetAbsFastORIndexFromTRU(iTRU, id, idx[0])) return kFALSE;
+ if (!GetAbsFastORIndexFromTRU(iTRU, id, idx[1])) return kFALSE;
break;
case 4: // 4 x 4
for (Int_t k = 0; k < 4; k++)
// misalignment shifts to global position in case of need.
// Federico.Ronchetti@cern.ch
+
// To use in a print later
- //Int_t iphi = drow;
- //Int_t ieta = dcol;
+ Float_t droworg = drow;
+ Float_t dcolorg = dcol;
if(gGeoManager){
//Recover some stuff
drow = 23. - drow;
}
- Int_t i = 0; // one always needs "i"
Int_t istrip = 0;
Float_t z0 = 0;
Float_t zb = 0;
//Float_t L = 26.04; // active tower length for hadron (lead+scint+paper)
// we use the geant numbers 13.87*2=27.74
Float_t teta1 = 0.;
-
- i = sm;
-
+
+ //Do some basic checks
if (dcol >= 47.5 || dcol<-0.5) {
- exit(0);
+ AliError(Form("Bad tower coordinate dcol=%f, where dcol >= 47.5 || dcol<-0.5; org: %f", dcol, dcolorg));
+ return;
}
-
if (drow >= 23.5 || drow<-0.5) {
- exit(0);
+ AliError(Form("Bad tower coordinate drow=%f, where drow >= 23.5 || drow<-0.5; org: %f", drow, droworg));
+ return;
}
- if (sm > 13 || sm <0) {
- exit(0);
- }
-
+ if (sm > 11 || sm <0) {
+ AliError(Form("Bad SM number sm=%d, where sm > 11 || sm<0", sm));
+ return;
+ }
+
istrip = int ((dcol+0.5)/2);
// tapering angle
// moving the origin from terry's RF
// to the GEANT one
- double xx = y - geoBox[i]->GetDX();
- double yy = -x + geoBox[i]->GetDY();
- double zz = z - geoBox[i]->GetDZ();
+ double xx = y - geoBox[sm]->GetDX();
+ double yy = -x + geoBox[sm]->GetDY();
+ double zz = z - geoBox[sm]->GetDZ();
const double localIn[3] = {xx, yy, zz};
double dglobal[3];
- //geoSMMatrix[i]->Print();
- //printf("TFF Local (row = %d, col = %d, x = %3.2f, y = %3.2f, z = %3.2f)\n", iphi, ieta, localIn[0], localIn[1], localIn[2]);
- geoSMMatrix[i]->LocalToMaster(localIn, dglobal);
+ //geoSMMatrix[sm]->Print();
+ //printf("TFF Local (row = %d, col = %d, x = %3.2f, y = %3.2f, z = %3.2f)\n", iroworg, icolorg, localIn[0], localIn[1], localIn[2]);
+ geoSMMatrix[sm]->LocalToMaster(localIn, dglobal);
//printf("TFF Global (row = %2.0f, col = %2.0f, x = %3.2f, y = %3.2f, z = %3.2f)\n", drow, dcol, dglobal[0], dglobal[1], dglobal[2]);
//apply global shifts