X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAlignObj.h;h=26ae489d0bb0cf3bbea288e99abb7a2da7f8c28e;hb=9a213abcdbcb997217d9762267780289be101c9d;hp=c0d186ba8022798bc7ecc547d19ae314a583e7a8;hpb=e7570944805d3cd1e70196317f4ec77cab999ab0;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAlignObj.h b/STEER/AliAlignObj.h index c0d186ba802..26ae489d0bb 100644 --- a/STEER/AliAlignObj.h +++ b/STEER/AliAlignObj.h @@ -2,10 +2,14 @@ #define ALIALIGNOBJ_H //************************************************************************ -// AliAlignObj: alignment base class for the storage of alignment * -// information for a single volume, that is a translation, a rotation * -// and a the identity of the volume itself in form of a TGeo path and * -// as a unique integer identifier * +// AliAlignObj: alignment base class for the storage of the alignment * +// constants for a single volume: * +// - a displacement (a shift and a rotation) either as * +// - the 6 doubles which identify it or as * +// - the matrix which identifies it * +// - the identity of the volume itself in form of a symbolic volume * +// name for alignable volumes, in form of a TGeo path otherwise, * +// and as a unique integer identifier * //************************************************************************ #include "TObject.h" #include "TString.h" @@ -18,10 +22,6 @@ class AliAlignObj : public TObject { public: - AliAlignObj(); - AliAlignObj(const AliAlignObj& theAlignObj); - AliAlignObj& operator= (const AliAlignObj& theAlignObj); - virtual ~AliAlignObj(); enum ELayerID{kInvalidLayer=0, kFirstLayer=1, kSPD1=1, kSPD2=2, @@ -31,30 +31,52 @@ class AliAlignObj : public TObject { kTRD1=9, kTRD2=10, kTRD3=11, kTRD4=12, kTRD5=13, kTRD6=14, kTOF=15, kPHOS1=16, kPHOS2=17, - kRICH=18, + kHMPID=18, kMUON=19, kLastLayer=20}; + AliAlignObj(); + AliAlignObj(const char* symname, UShort_t voluid); + AliAlignObj(const char* symname, ELayerID detId, Int_t modId); + AliAlignObj(const AliAlignObj& theAlignObj); + AliAlignObj& operator= (const AliAlignObj& theAlignObj); + AliAlignObj& operator*=(const AliAlignObj& theAlignObj); + virtual ~AliAlignObj(); //Setters virtual void SetTranslation(Double_t x, Double_t y, Double_t z) = 0; virtual void SetTranslation(const TGeoMatrix& m) = 0; + virtual Bool_t SetLocalTranslation(Double_t x, Double_t y, Double_t z); + virtual Bool_t SetLocalTranslation(const TGeoMatrix& m); virtual void SetRotation(Double_t psi, Double_t theta, Double_t phi) = 0; virtual Bool_t SetRotation(const TGeoMatrix& m) = 0; + virtual Bool_t SetLocalRotation(Double_t psi, Double_t theta, Double_t phi); + virtual Bool_t SetLocalRotation(const TGeoMatrix& m); virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi, - Double_t theta, Double_t phi) = 0; - virtual void SetMatrix(const TGeoMatrix& m) = 0; - void SetVolPath(const TString& volpath) {fVolPath=volpath;} + Double_t theta, Double_t phi); + virtual Bool_t SetLocalPars(Double_t x, Double_t y, Double_t z, + Double_t psi, Double_t theta, Double_t phi); + virtual Bool_t SetMatrix(const TGeoMatrix& m); + virtual Bool_t SetLocalMatrix(const TGeoMatrix& m); + void SetSymName(const TString& symname) {fVolPath=symname;} void SetVolUID(UShort_t voluid) {fVolUID=voluid;} void SetVolUID(ELayerID layerId, Int_t modId); //Getters - const char *GetVolPath() const {return fVolPath.Data();} + const char *GetSymName() const {return fVolPath.Data();} UShort_t GetVolUID() const {return fVolUID;} void GetVolUID(ELayerID &layerId, Int_t &modId) const; virtual void GetTranslation(Double_t* tr) const=0; + virtual Bool_t GetLocalTranslation(Double_t* tr) const; virtual Bool_t GetAngles(Double_t* angles) const=0; - virtual void GetPars(Double_t transl[], Double_t rot[]) const=0; + virtual Bool_t GetLocalAngles(Double_t* angles) const; + virtual Bool_t GetPars(Double_t transl[], Double_t angles[]) const; + virtual Bool_t GetLocalPars(Double_t transl[], Double_t angles[]) const; virtual void GetMatrix(TGeoHMatrix& m) const=0; + virtual Bool_t GetLocalMatrix(TGeoHMatrix& m) const; + + Bool_t IsSortable() const {return kTRUE;} + Int_t GetLevel() const; + virtual Int_t Compare(const TObject* obj) const; virtual AliAlignObj& Inverse() const=0; @@ -63,38 +85,43 @@ class AliAlignObj : public TObject { void Print(Option_t *) const; - static Int_t LayerSize(Int_t layer) { return fgLayerSize[layer]; } - static const char* LayerName(Int_t layer) { return fgLayerName[layer]; } + 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 const char* GetVolPath(UShort_t voluid) { - Int_t modId; - ELayerID layerId = VolUIDToLayer(voluid,modId); - return GetVolPath(layerId,modId); - } - static const char* GetVolPath(ELayerID layerId, Int_t modId); + static const char* SymName(UShort_t voluid); + static const char* SymName(ELayerID layerId, Int_t modId); Bool_t ApplyToGeometry(); - static Bool_t GetFromGeometry(const char *path, AliAlignObj &alobj); + static Bool_t GetFromGeometry(const char *symname, AliAlignObj &alobj); + + static AliAlignObj* GetAlignObj(UShort_t voluid); + static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId); + + static Bool_t GetOrigGlobalMatrix(const char *symname, TGeoHMatrix &m); protected: void AnglesToMatrix(const Double_t *angles, Double_t *rot) const; Bool_t MatrixToAngles(const Double_t *rot, Double_t *angles) const; - void InitVolPaths(); + static void InitSymNames(); + static void InitAlignObjFromGeometry(); //Volume identifiers - TString fVolPath; // Volume path inside TGeo geometry + TString fVolPath; // Symbolic volume name; in case could coincide with + // the volume path inside TGeo geometry (for non-alignable volumes) UShort_t fVolUID; // Unique volume ID - static Int_t fgLayerSize[kLastLayer - kFirstLayer]; - static const char* fgLayerName[kLastLayer - kFirstLayer]; + static Int_t fgLayerSize[kLastLayer - kFirstLayer]; // Size of layers + static const char* fgLayerName[kLastLayer - kFirstLayer]; // Name of layers - static TString* fgVolPath[kLastLayer - kFirstLayer]; + static TString* fgVolPath[kLastLayer - kFirstLayer]; // Symbolic volume names + static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects ClassDef(AliAlignObj, 2) };