]>
Commit | Line | Data |
---|---|---|
67dd5535 | 1 | #ifndef ALI_GEOM_MANAGER_H |
2 | #define ALI_GEOM_MANAGER_H | |
3 | ||
4 | // | |
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 | |
11 | // | |
12 | ||
13 | #include <TObject.h> | |
36b010bf | 14 | |
15 | class TGeoManager; | |
16 | class TGeoPNEntry; | |
17 | class TGeoHMatrix; | |
67dd5535 | 18 | |
19 | class TObjArray; | |
20 | ||
21 | class AliAlignObj; | |
22 | class AliCDBId; | |
23 | class AliCDBParam; | |
24 | ||
25 | class AliGeomManager: public TObject { | |
26 | ||
27 | public: | |
28 | enum ELayerID{kInvalidLayer=0, | |
29 | kFirstLayer=1, | |
30 | kSPD1=1, kSPD2=2, | |
31 | kSDD1=3, kSDD2=4, | |
32 | kSSD1=5, kSSD2=6, | |
33 | kTPC1=7, kTPC2=8, | |
34 | kTRD1=9, kTRD2=10, kTRD3=11, kTRD4=12, kTRD5=13, kTRD6=14, | |
35 | kTOF=15, | |
36 | kPHOS1=16, kPHOS2=17, | |
37 | kHMPID=18, | |
38 | kMUON=19, | |
39 | kLastLayer=20}; | |
40 | ||
9cb4fe0b | 41 | static TGeoManager* GetGeometry() { return fgGeometry; } |
67dd5535 | 42 | |
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); | |
53 | ||
54 | static const char* SymName(UShort_t voluid); | |
55 | static const char* SymName(ELayerID layerId, Int_t modId); | |
56 | ||
67dd5535 | 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); | |
60 | ||
25fad4e5 | 61 | //to be used making a copy of the returned pointer to TGeoHMatrix!! |
67dd5535 | 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]); | |
66 | ||
36b010bf | 67 | static TGeoHMatrix* GetOrigGlobalMatrix(Int_t index); |
67dd5535 | 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]); | |
71 | ||
72 | static const TGeoHMatrix* GetTracking2LocalMatrix(Int_t index); | |
73 | static Bool_t GetTrackingMatrix(Int_t index, TGeoHMatrix &m); | |
74 | ||
36b010bf | 75 | static void LoadGeometry(const char *geomFileName = NULL); |
9d47e237 | 76 | static void SetGeometry(TGeoManager *geom); |
36b010bf | 77 | |
78 | static Bool_t ApplyAlignObjsToGeom(TObjArray& alObjArray); | |
67dd5535 | 79 | |
36b010bf | 80 | static Bool_t ApplyAlignObjsToGeom(const char* fileName, |
67dd5535 | 81 | const char* clArrayName); |
36b010bf | 82 | static Bool_t ApplyAlignObjsToGeom(AliCDBParam* param, |
67dd5535 | 83 | AliCDBId& Id); |
36b010bf | 84 | static Bool_t ApplyAlignObjsToGeom(const char* uri, const char* path, |
67dd5535 | 85 | Int_t runnum, Int_t version, |
86 | Int_t sversion); | |
36b010bf | 87 | static Bool_t ApplyAlignObjsToGeom(const char* detName, Int_t runnum, Int_t version, |
67dd5535 | 88 | Int_t sversion); |
89 | ||
36b010bf | 90 | static Bool_t ApplyAlignObjsFromCDB(const char* AlDetsList); |
91 | static Bool_t LoadAlignObjsFromCDBSingleDet(const char* detName, TObjArray& alignObjArray); | |
67dd5535 | 92 | |
93 | ~AliGeomManager(); | |
67dd5535 | 94 | |
36b010bf | 95 | private: |
96 | AliGeomManager(); | |
97 | AliGeomManager(const AliGeomManager&); | |
98 | AliGeomManager& operator=(const AliGeomManager&); | |
99 | ||
100 | static TGeoHMatrix* GetMatrix(TGeoPNEntry* pne); | |
101 | static TGeoHMatrix* GetOrigGlobalMatrix(TGeoPNEntry* pne); | |
102 | static Bool_t GetOrigGlobalMatrixFromPath(const char *path, TGeoHMatrix &m); | |
67dd5535 | 103 | |
36b010bf | 104 | static TGeoPNEntry* GetPNEntry(Int_t index); |
105 | static TGeoPNEntry* GetPNEntry(ELayerID layerId, Int_t modId); | |
67dd5535 | 106 | |
107 | static void InitAlignObjFromGeometry(); | |
108 | static void InitSymNamesLUT(); | |
109 | static void InitPNEntriesLUT(); | |
36b010bf | 110 | static void InitOrigMatricesLUT(); |
111 | ||
112 | static TGeoManager* fgGeometry; | |
67dd5535 | 113 | |
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 | |
36b010bf | 118 | static TGeoHMatrix** fgOrigMatrix[kLastLayer - kFirstLayer]; // Original matrices before misalignment |
67dd5535 | 119 | static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects |
120 | ||
67dd5535 | 121 | ClassDef(AliGeomManager, 0); |
122 | }; | |
123 | ||
124 | #endif |