X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAlignObj.h;h=26ae489d0bb0cf3bbea288e99abb7a2da7f8c28e;hb=b648d8dfbca48c89e889b7ec8530b4997e99a4c2;hp=c8c54a6b57f41e13f71fc5477958c65a84b76a02;hpb=c041444f8fe020ca40720f8cedada58419cff7dc;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAlignObj.h b/STEER/AliAlignObj.h index c8c54a6b57f..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" @@ -27,12 +31,12 @@ 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* volpath, UShort_t voluid); - AliAlignObj(const char* volpath, ELayerID detId, Int_t modId); + 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); @@ -41,25 +45,34 @@ class AliAlignObj : public TObject { //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; + 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 void SetMatrix(const TGeoMatrix& m) = 0; - void SetVolPath(const TString& volpath) {fVolPath=volpath;} + 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; @@ -80,41 +93,35 @@ class AliAlignObj : public TObject { 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 void InitAlignObjFromGeometry(); - static AliAlignObj* GetAlignObj(UShort_t voluid) { - Int_t modId; - ELayerID layerId = VolUIDToLayer(voluid,modId); - return GetAlignObj(layerId,modId); - } + 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; - static 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 TString* fgVolPath[kLastLayer - kFirstLayer]; + static Int_t fgLayerSize[kLastLayer - kFirstLayer]; // Size of layers + static const char* fgLayerName[kLastLayer - kFirstLayer]; // Name of layers - static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; + static TString* fgVolPath[kLastLayer - kFirstLayer]; // Symbolic volume names + static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer]; // Alignment objects ClassDef(AliAlignObj, 2) };