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.)
+ fZLength(0.),fSampling(0.),fUseExternalMatrices(kFALSE)
{
// default ctor
// must be kept public for root persistency purposes, but should never be called by the outside world
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)
+ fZLength(geo.fZLength),fSampling(geo.fSampling),fUseExternalMatrices(geo.fUseExternalMatrices)
{
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.)
+ fZLength(0.),fSampling(0.), fUseExternalMatrices(kFALSE)
{
// ctor only for normal usage
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++)
}
//___________________________________________________________________
-void AliEMCALGeoUtils::PrintGeometry()
+void AliEMCALGeoUtils::PrintGeometryGeoUtils()
{
//Print information from geometry
fEMCGeometry->PrintGeometry();
// AliFatal(Form("AliEMCALGeometry::GeoManager cannot find path %s!",volpath.Data()));
//
// TGeoHMatrix* m = gGeoManager->GetCurrentMatrix();
-
+
+ //Use matrices set externally
+ if(!gGeoManager || (gGeoManager && fUseExternalMatrices)){
+ if(fkSModuleMatrix[smod]){
+ return fkSModuleMatrix[smod] ;
+ }
+ else{
+ AliInfo("Stop:");
+ printf("\t Can not find EMCAL misalignment matrixes\n") ;
+ printf("\t Either import TGeoManager from geometry.root or \n");
+ printf("\t read stored matrixes from AliESD Header: \n") ;
+ printf("\t AliEMCALGeoUtils::SetMisalMatrixes(header->GetEMCALMisalMatrix()) \n") ;
+ abort() ;
+ }
+ }//external matrices
+
if(gGeoManager){
const Int_t buffersize = 255;
char path[buffersize] ;
return gGeoManager->GetCurrentMatrix();
}
- if(fkSModuleMatrix[smod]){
- return fkSModuleMatrix[smod] ;
- }
- else{
- AliInfo("Stop:");
- printf("\t Can not find EMCAL misalignment matrixes\n") ;
- printf("\t Either import TGeoManager from geometry.root or \n");
- printf("\t read stored matrixes from AliESD Header: \n") ;
- printf("\t AliEMCALGeoUtils::SetMisalMatrixes(header->GetEMCALMisalMatrix()) \n") ;
- abort() ;
- }
return 0 ;
}
// 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
-
+
+ const Int_t nSMod = fEMCGeometry->GetNumberOfSuperModules();
+
gGeoManager->cd("ALIC_1/XEN1_1");
TGeoNode *geoXEn1 = gGeoManager->GetCurrentNode();
- TGeoNodeMatrix *geoSM[4];
- TGeoVolume *geoSMVol[4];
- TGeoShape *geoSMShape[4];
- TGeoBBox *geoBox[4];
- TGeoMatrix *geoSMMatrix[4];
+ TGeoNodeMatrix *geoSM[nSMod];
+ TGeoVolume *geoSMVol[nSMod];
+ TGeoShape *geoSMShape[nSMod];
+ TGeoBBox *geoBox[nSMod];
+ TGeoMatrix *geoSMMatrix[nSMod];
- for(int iSM = 0; iSM < 4; iSM++) {
+ for(int iSM = 0; iSM < nSMod; iSM++) {
geoSM[iSM] = dynamic_cast<TGeoNodeMatrix *>(geoXEn1->GetDaughter(iSM));
geoSMVol[iSM] = geoSM[iSM]->GetVolume();
geoSMShape[iSM] = geoSMVol[iSM]->GetShape();
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 >= nSMod || sm < 0) {
+ AliError(Form("Bad SM number sm=%d, where sm >= %d || sm < 0", nSMod, 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