ROOT logo
#ifndef ALI_GEOM_MANAGER_H
#define ALI_GEOM_MANAGER_H

//
// Class for interfacing to the geometry; it also builds and manages the
// look-up tables for fast access to geometry and alignment information
// for sensitive alignable volumes:
// 1) the look-up table mapping unique volume ids to TGeoPNEntries
//    this allows to access directly by means of the unique index
//    the associated symbolic name and original global matrix
//    in addition to the functionality of the physical node
//    associated to a given alignable volume
// 2) the look-up table of the alignment objects associated to the
//    indexed alignable volumes
//

#include <TObject.h>

class TGeoManager;
class TGeoPNEntry;
class TGeoHMatrix;
class TObjArray;

class AliAlignObj;
class AliCDBId;
class AliCDBParam;

class AliGeomManager: public TObject {

public:
  enum ELayerID{kInvalidLayer=0,
		kFirstLayer=1,
		kSPD1=1, kSPD2=2,
		kSDD1=3, kSDD2=4,
		kSSD1=5, kSSD2=6,
		kTPC1=7, kTPC2=8,
		kTRD1=9, kTRD2=10, kTRD3=11, kTRD4=12, kTRD5=13, kTRD6=14,
		kTOF=15,
		kPHOS1=16, kPHOS2=17,
		kHMPID=18,
		kMUON=19,
		kEMCAL=20,
		kLastLayer=21};

  static TGeoManager* GetGeometry() { return fgGeometry; }
  static void         Destroy();

  static Int_t       LayerSize(Int_t layerId);
  static const char* LayerName(Int_t layerId);
  static UShort_t LayerToVolUID(ELayerID layerId, Int_t modId);
  static UShort_t LayerToVolUID(Int_t    layerId, Int_t modId);
  static ELayerID VolUIDToLayer(UShort_t voluid, Int_t &modId);
  static ELayerID VolUIDToLayer(UShort_t voluid);
  static UShort_t LayerToVolUIDSafe(ELayerID layerId, Int_t modId);
  static UShort_t LayerToVolUIDSafe(Int_t    layerId, Int_t modId);
  static ELayerID VolUIDToLayerSafe(UShort_t voluid, Int_t &modId);
  static ELayerID VolUIDToLayerSafe(UShort_t voluid);

  static const char* SymName(UShort_t voluid);
  static const char* SymName(ELayerID layerId, Int_t modId);

  static Bool_t   GetFromGeometry(const char *symname, AliAlignObj &alobj);
  static AliAlignObj* GetAlignObj(UShort_t voluid);
  static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId);

  //to be used making a copy of the returned pointer to TGeoHMatrix!!
  static TGeoHMatrix* GetMatrix(Int_t index);
  static TGeoHMatrix* GetMatrix(const char *symname);
  static Bool_t GetTranslation(Int_t index, Double_t t[3]);
  static Bool_t GetRotation(Int_t index, Double_t r[9]);

  static Bool_t GetDeltaForBranch(AliAlignObj& aao, TGeoHMatrix &inclusiveD);
  static Bool_t GetDeltaForBranch(Int_t index, TGeoHMatrix &inclusiveD);
  static TGeoHMatrix* GetOrigGlobalMatrix(Int_t index);
  static Bool_t GetOrigGlobalMatrix(const char *symname, TGeoHMatrix &m);
  static Bool_t GetOrigTranslation(Int_t index, Double_t t[3]);
  static Bool_t GetOrigRotation(Int_t index, Double_t r[9]);

  static const TGeoHMatrix* GetTracking2LocalMatrix(Int_t index);
  static Bool_t GetTrackingMatrix(Int_t index, TGeoHMatrix &m);

  static void        LoadGeometry(const char *geomFileName = NULL);
  static void        SetGeometry(TGeoManager * const geom);
  static void        CheckOverlapsOverPNs(Double_t threshold);  

  static Bool_t         ApplyAlignObjsToGeom(TObjArray& alObjArray, Bool_t ovlpcheck=kFALSE);

  static Bool_t         ApplyAlignObjsToGeom(const char* fileName,
				      const char* clArrayName);
  static Bool_t         ApplyAlignObjsToGeom(const char* uri, const char* path,
				      Int_t runnum, Int_t version,
				      Int_t sversion);
  static Bool_t         ApplyAlignObjsToGeom(const char* detName, Int_t runnum, Int_t version,
				      Int_t sversion);
  static Bool_t         ApplyAlignObjsFromCDB(const char* AlDetsList);
  static Bool_t         LoadAlignObjsFromCDBSingleDet(const char* detName, TObjArray& alignObjArray);
  static Bool_t         CheckSymNamesLUT(const char* detsToBeChecked);
  static Int_t          GetNalignable(const char* module);

  ~AliGeomManager();

 private:
  AliGeomManager();
  AliGeomManager(const AliGeomManager&);
  AliGeomManager& operator=(const AliGeomManager&);

  static TGeoHMatrix* GetMatrix(TGeoPNEntry * const pne);
  static TGeoHMatrix* GetOrigGlobalMatrix(TGeoPNEntry * const pne);
  static Bool_t       GetOrigGlobalMatrixFromPath(const char *path, TGeoHMatrix &m);

  static TGeoPNEntry* GetPNEntry(Int_t index);
  static TGeoPNEntry* GetPNEntry(ELayerID layerId, Int_t modId);

  static void        ResetPNEntriesLUT();
  static void        InitAlignObjFromGeometry();
  static void        InitPNEntriesLUT();
  static void        InitNalignable();

  static TGeoManager* fgGeometry;

  static Int_t       fgLayerSize[kLastLayer - kFirstLayer]; // Size of layers
  static const char* fgLayerName[kLastLayer - kFirstLayer]; // Name of layers
  static TGeoPNEntry** fgPNEntry[kLastLayer - kFirstLayer]; // TGeoPNEntries
  static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects
  static const Int_t   fgkNDetectors = 18;              // number of detectors    + AD
  static const char *  fgkDetectorName[fgkNDetectors] ; // name of detectors
  static Int_t       fgNalignable[fgkNDetectors];

  ClassDef(AliGeomManager, 0); // Manager of geometry information for alignment
};

#endif
 AliGeomManager.h:1
 AliGeomManager.h:2
 AliGeomManager.h:3
 AliGeomManager.h:4
 AliGeomManager.h:5
 AliGeomManager.h:6
 AliGeomManager.h:7
 AliGeomManager.h:8
 AliGeomManager.h:9
 AliGeomManager.h:10
 AliGeomManager.h:11
 AliGeomManager.h:12
 AliGeomManager.h:13
 AliGeomManager.h:14
 AliGeomManager.h:15
 AliGeomManager.h:16
 AliGeomManager.h:17
 AliGeomManager.h:18
 AliGeomManager.h:19
 AliGeomManager.h:20
 AliGeomManager.h:21
 AliGeomManager.h:22
 AliGeomManager.h:23
 AliGeomManager.h:24
 AliGeomManager.h:25
 AliGeomManager.h:26
 AliGeomManager.h:27
 AliGeomManager.h:28
 AliGeomManager.h:29
 AliGeomManager.h:30
 AliGeomManager.h:31
 AliGeomManager.h:32
 AliGeomManager.h:33
 AliGeomManager.h:34
 AliGeomManager.h:35
 AliGeomManager.h:36
 AliGeomManager.h:37
 AliGeomManager.h:38
 AliGeomManager.h:39
 AliGeomManager.h:40
 AliGeomManager.h:41
 AliGeomManager.h:42
 AliGeomManager.h:43
 AliGeomManager.h:44
 AliGeomManager.h:45
 AliGeomManager.h:46
 AliGeomManager.h:47
 AliGeomManager.h:48
 AliGeomManager.h:49
 AliGeomManager.h:50
 AliGeomManager.h:51
 AliGeomManager.h:52
 AliGeomManager.h:53
 AliGeomManager.h:54
 AliGeomManager.h:55
 AliGeomManager.h:56
 AliGeomManager.h:57
 AliGeomManager.h:58
 AliGeomManager.h:59
 AliGeomManager.h:60
 AliGeomManager.h:61
 AliGeomManager.h:62
 AliGeomManager.h:63
 AliGeomManager.h:64
 AliGeomManager.h:65
 AliGeomManager.h:66
 AliGeomManager.h:67
 AliGeomManager.h:68
 AliGeomManager.h:69
 AliGeomManager.h:70
 AliGeomManager.h:71
 AliGeomManager.h:72
 AliGeomManager.h:73
 AliGeomManager.h:74
 AliGeomManager.h:75
 AliGeomManager.h:76
 AliGeomManager.h:77
 AliGeomManager.h:78
 AliGeomManager.h:79
 AliGeomManager.h:80
 AliGeomManager.h:81
 AliGeomManager.h:82
 AliGeomManager.h:83
 AliGeomManager.h:84
 AliGeomManager.h:85
 AliGeomManager.h:86
 AliGeomManager.h:87
 AliGeomManager.h:88
 AliGeomManager.h:89
 AliGeomManager.h:90
 AliGeomManager.h:91
 AliGeomManager.h:92
 AliGeomManager.h:93
 AliGeomManager.h:94
 AliGeomManager.h:95
 AliGeomManager.h:96
 AliGeomManager.h:97
 AliGeomManager.h:98
 AliGeomManager.h:99
 AliGeomManager.h:100
 AliGeomManager.h:101
 AliGeomManager.h:102
 AliGeomManager.h:103
 AliGeomManager.h:104
 AliGeomManager.h:105
 AliGeomManager.h:106
 AliGeomManager.h:107
 AliGeomManager.h:108
 AliGeomManager.h:109
 AliGeomManager.h:110
 AliGeomManager.h:111
 AliGeomManager.h:112
 AliGeomManager.h:113
 AliGeomManager.h:114
 AliGeomManager.h:115
 AliGeomManager.h:116
 AliGeomManager.h:117
 AliGeomManager.h:118
 AliGeomManager.h:119
 AliGeomManager.h:120
 AliGeomManager.h:121
 AliGeomManager.h:122
 AliGeomManager.h:123
 AliGeomManager.h:124
 AliGeomManager.h:125
 AliGeomManager.h:126
 AliGeomManager.h:127
 AliGeomManager.h:128
 AliGeomManager.h:129
 AliGeomManager.h:130
 AliGeomManager.h:131
 AliGeomManager.h:132