1 #ifndef ALI_GEOM_MANAGER_H
2 #define ALI_GEOM_MANAGER_H
5 // Class for interfacing to the geometry; it also builds and manages two
6 // look-up tables for fast access to volumes :
7 // 1) the look-up table mapping unique volume ids to symbolic volume names
8 // 2) the look-up table mapping unique volume ids to TGeoPNEntries
9 // this allows to access directly the functionality of the physical node
10 // associated to a given alignable volume by means of its index
25 class AliGeomManager: public TObject {
28 enum ELayerID{kInvalidLayer=0,
34 kTRD1=9, kTRD2=10, kTRD3=11, kTRD4=12, kTRD5=13, kTRD6=14,
41 static TGeoManager* GetGeometry() { return fgGeometry; }
43 static Int_t LayerSize(Int_t layerId);
44 static const char* LayerName(Int_t layerId);
45 static UShort_t LayerToVolUID(ELayerID layerId, Int_t modId);
46 static UShort_t LayerToVolUID(Int_t layerId, Int_t modId);
47 static ELayerID VolUIDToLayer(UShort_t voluid, Int_t &modId);
48 static ELayerID VolUIDToLayer(UShort_t voluid);
49 static UShort_t LayerToVolUIDSafe(ELayerID layerId, Int_t modId);
50 static UShort_t LayerToVolUIDSafe(Int_t layerId, Int_t modId);
51 static ELayerID VolUIDToLayerSafe(UShort_t voluid, Int_t &modId);
52 static ELayerID VolUIDToLayerSafe(UShort_t voluid);
54 static const char* SymName(UShort_t voluid);
55 static const char* SymName(ELayerID layerId, Int_t modId);
57 static Bool_t GetFromGeometry(const char *symname, AliAlignObj &alobj);
58 static AliAlignObj* GetAlignObj(UShort_t voluid);
59 static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId);
61 //to be used making a copy of the returned pointer to TGeoHMatrix!!
62 static TGeoHMatrix* GetMatrix(Int_t index);
63 static TGeoHMatrix* GetMatrix(const char *symname);
64 static Bool_t GetTranslation(Int_t index, Double_t t[3]);
65 static Bool_t GetRotation(Int_t index, Double_t r[9]);
67 static TGeoHMatrix* GetOrigGlobalMatrix(Int_t index);
68 static Bool_t GetOrigGlobalMatrix(const char *symname, TGeoHMatrix &m);
69 static Bool_t GetOrigTranslation(Int_t index, Double_t t[3]);
70 static Bool_t GetOrigRotation(Int_t index, Double_t r[9]);
72 static const TGeoHMatrix* GetTracking2LocalMatrix(Int_t index);
73 static Bool_t GetTrackingMatrix(Int_t index, TGeoHMatrix &m);
75 static void LoadGeometry(const char *geomFileName = NULL);
76 static void SetGeometry(TGeoManager *geom);
78 static Bool_t ApplyAlignObjsToGeom(TObjArray& alObjArray);
80 static Bool_t ApplyAlignObjsToGeom(const char* fileName,
81 const char* clArrayName);
82 static Bool_t ApplyAlignObjsToGeom(AliCDBParam* param,
84 static Bool_t ApplyAlignObjsToGeom(const char* uri, const char* path,
85 Int_t runnum, Int_t version,
87 static Bool_t ApplyAlignObjsToGeom(const char* detName, Int_t runnum, Int_t version,
90 static Bool_t ApplyAlignObjsFromCDB(const char* AlDetsList);
91 static Bool_t LoadAlignObjsFromCDBSingleDet(const char* detName, TObjArray& alignObjArray);
97 AliGeomManager(const AliGeomManager&);
98 AliGeomManager& operator=(const AliGeomManager&);
100 static TGeoHMatrix* GetMatrix(TGeoPNEntry* pne);
101 static TGeoHMatrix* GetOrigGlobalMatrix(TGeoPNEntry* pne);
102 static Bool_t GetOrigGlobalMatrixFromPath(const char *path, TGeoHMatrix &m);
104 static TGeoPNEntry* GetPNEntry(Int_t index);
105 static TGeoPNEntry* GetPNEntry(ELayerID layerId, Int_t modId);
107 static void InitAlignObjFromGeometry();
108 static void InitSymNamesLUT();
109 static void InitPNEntriesLUT();
110 static void InitOrigMatricesLUT();
112 static TGeoManager* fgGeometry;
114 static Int_t fgLayerSize[kLastLayer - kFirstLayer]; // Size of layers
115 static const char* fgLayerName[kLastLayer - kFirstLayer]; // Name of layers
116 static TString* fgSymName[kLastLayer - kFirstLayer]; // Symbolic volume names
117 static TGeoPNEntry** fgPNEntry[kLastLayer - kFirstLayer]; // TGeoPNEntries
118 static TGeoHMatrix** fgOrigMatrix[kLastLayer - kFirstLayer]; // Original matrices before misalignment
119 static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects
121 ClassDef(AliGeomManager, 0);