]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliGeomManager.h
Combining standard and sampling TGeo overlap checking in one AliGeomManager method...
[u/mrichter/AliRoot.git] / STEER / AliGeomManager.h
CommitLineData
67dd5535 1#ifndef ALI_GEOM_MANAGER_H
2#define ALI_GEOM_MANAGER_H
3
4//
0bf7aade 5// Class for interfacing to the geometry; it also builds and manages the
6// look-up tables for fast access to geometry and alignment information
7// for sensitive alignable volumes:
8// 1) the look-up table mapping unique volume ids to TGeoPNEntries
9// this allows to access directly by means of the unique index
10// the associated symbolic name and original global matrix
11// in addition to the functionality of the physical node
12// associated to a given alignable volume
13// 2) the look-up table of the alignment objects associated to the
14// indexed alignable volumes
67dd5535 15//
16
17#include <TObject.h>
36b010bf 18
19class TGeoManager;
20class TGeoPNEntry;
21class TGeoHMatrix;
171c4ef9 22class TGeoNode;
67dd5535 23class TObjArray;
24
25class AliAlignObj;
26class AliCDBId;
27class AliCDBParam;
28
29class AliGeomManager: public TObject {
30
31public:
32 enum ELayerID{kInvalidLayer=0,
33 kFirstLayer=1,
34 kSPD1=1, kSPD2=2,
35 kSDD1=3, kSDD2=4,
36 kSSD1=5, kSSD2=6,
37 kTPC1=7, kTPC2=8,
38 kTRD1=9, kTRD2=10, kTRD3=11, kTRD4=12, kTRD5=13, kTRD6=14,
39 kTOF=15,
40 kPHOS1=16, kPHOS2=17,
41 kHMPID=18,
42 kMUON=19,
3dfc15c0 43 kEMCAL=20,
44 kLastLayer=21};
67dd5535 45
9cb4fe0b 46 static TGeoManager* GetGeometry() { return fgGeometry; }
67dd5535 47
48 static Int_t LayerSize(Int_t layerId);
49 static const char* LayerName(Int_t layerId);
50 static UShort_t LayerToVolUID(ELayerID layerId, Int_t modId);
51 static UShort_t LayerToVolUID(Int_t layerId, Int_t modId);
52 static ELayerID VolUIDToLayer(UShort_t voluid, Int_t &modId);
53 static ELayerID VolUIDToLayer(UShort_t voluid);
54 static UShort_t LayerToVolUIDSafe(ELayerID layerId, Int_t modId);
55 static UShort_t LayerToVolUIDSafe(Int_t layerId, Int_t modId);
56 static ELayerID VolUIDToLayerSafe(UShort_t voluid, Int_t &modId);
57 static ELayerID VolUIDToLayerSafe(UShort_t voluid);
58
59 static const char* SymName(UShort_t voluid);
60 static const char* SymName(ELayerID layerId, Int_t modId);
61
67dd5535 62 static Bool_t GetFromGeometry(const char *symname, AliAlignObj &alobj);
63 static AliAlignObj* GetAlignObj(UShort_t voluid);
64 static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId);
65
25fad4e5 66 //to be used making a copy of the returned pointer to TGeoHMatrix!!
67dd5535 67 static TGeoHMatrix* GetMatrix(Int_t index);
68 static TGeoHMatrix* GetMatrix(const char *symname);
69 static Bool_t GetTranslation(Int_t index, Double_t t[3]);
70 static Bool_t GetRotation(Int_t index, Double_t r[9]);
71
5d534fe3 72 static Bool_t GetDeltaForBranch(AliAlignObj& aao, TGeoHMatrix &inclusiveD);
73 static Bool_t GetDeltaForBranch(Int_t index, TGeoHMatrix &inclusiveD);
36b010bf 74 static TGeoHMatrix* GetOrigGlobalMatrix(Int_t index);
67dd5535 75 static Bool_t GetOrigGlobalMatrix(const char *symname, TGeoHMatrix &m);
76 static Bool_t GetOrigTranslation(Int_t index, Double_t t[3]);
77 static Bool_t GetOrigRotation(Int_t index, Double_t r[9]);
78
79 static const TGeoHMatrix* GetTracking2LocalMatrix(Int_t index);
80 static Bool_t GetTrackingMatrix(Int_t index, TGeoHMatrix &m);
81
36b010bf 82 static void LoadGeometry(const char *geomFileName = NULL);
9d47e237 83 static void SetGeometry(TGeoManager *geom);
5590c6c3 84 static void CheckOverlapsOverPNs(Double_t threshold);
36b010bf 85
5590c6c3 86 static Bool_t ApplyAlignObjsToGeom(TObjArray& alObjArray, Bool_t ovlpcheck=kFALSE);
67dd5535 87
36b010bf 88 static Bool_t ApplyAlignObjsToGeom(const char* fileName,
67dd5535 89 const char* clArrayName);
36b010bf 90 static Bool_t ApplyAlignObjsToGeom(AliCDBParam* param,
67dd5535 91 AliCDBId& Id);
36b010bf 92 static Bool_t ApplyAlignObjsToGeom(const char* uri, const char* path,
67dd5535 93 Int_t runnum, Int_t version,
94 Int_t sversion);
36b010bf 95 static Bool_t ApplyAlignObjsToGeom(const char* detName, Int_t runnum, Int_t version,
67dd5535 96 Int_t sversion);
36b010bf 97 static Bool_t ApplyAlignObjsFromCDB(const char* AlDetsList);
98 static Bool_t LoadAlignObjsFromCDBSingleDet(const char* detName, TObjArray& alignObjArray);
ff5970a3 99 static Bool_t CheckSymNamesLUT(const char* detsToBeChecked);
171c4ef9 100 static Int_t CheckOverlapsExtrusions(TGeoNode* start, Double_t threshold=0.01);
67dd5535 101
102 ~AliGeomManager();
67dd5535 103
36b010bf 104 private:
105 AliGeomManager();
106 AliGeomManager(const AliGeomManager&);
107 AliGeomManager& operator=(const AliGeomManager&);
108
109 static TGeoHMatrix* GetMatrix(TGeoPNEntry* pne);
110 static TGeoHMatrix* GetOrigGlobalMatrix(TGeoPNEntry* pne);
111 static Bool_t GetOrigGlobalMatrixFromPath(const char *path, TGeoHMatrix &m);
67dd5535 112
36b010bf 113 static TGeoPNEntry* GetPNEntry(Int_t index);
114 static TGeoPNEntry* GetPNEntry(ELayerID layerId, Int_t modId);
67dd5535 115
116 static void InitAlignObjFromGeometry();
67dd5535 117 static void InitPNEntriesLUT();
36b010bf 118
119 static TGeoManager* fgGeometry;
67dd5535 120
121 static Int_t fgLayerSize[kLastLayer - kFirstLayer]; // Size of layers
122 static const char* fgLayerName[kLastLayer - kFirstLayer]; // Name of layers
67dd5535 123 static TGeoPNEntry** fgPNEntry[kLastLayer - kFirstLayer]; // TGeoPNEntries
124 static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects
125
67dd5535 126 ClassDef(AliGeomManager, 0);
127};
128
129#endif