1 #ifndef ALIITSALIGNMILLE2MODULE_H
\r
2 #define ALIITSALIGNMILLE2MODULE_H
\r
3 /* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. *
\r
4 * See cxx source for full Copyright notice */
\r
7 /// \class AliITSAlignMille2Module
\r
8 /// \brief Class for alignment of ITS
\r
10 // Authors: Marcello Lunardon
\r
12 // RS Converted static arrays fSensVolVolumeID and fSensVolIndex
\r
13 // to TArrays in user transparent way.
\r
16 //#include <TString.h>
\r
17 //#include <TObject.h>
\r
18 #include <TNamed.h>
\r
19 #include <TArrayI.h>
\r
20 #include <TArrayS.h>
\r
21 class AliITSAlignMille2;
\r
23 class AliAlignObjParams;
\r
26 class AliITSAlignMille2Module : public TNamed
\r
29 AliITSAlignMille2Module();
\r
30 AliITSAlignMille2Module(UShort_t volid);
\r
31 AliITSAlignMille2Module(Int_t index, UShort_t volid, char* symname, TGeoHMatrix *m, Int_t nsv=0, UShort_t *volidsv=NULL);
\r
32 AliITSAlignMille2Module(const AliITSAlignMille2Module& rhs); // copy constructor
\r
33 AliITSAlignMille2Module& operator=(const AliITSAlignMille2Module& rhs);
\r
35 virtual ~AliITSAlignMille2Module();
\r
37 // geometry methods
\r
38 Int_t GetIndex() const {return fIndex;}
\r
39 UShort_t GetVolumeID() const {return fVolumeID;}
\r
40 Int_t GetNSensitiveVolumes() const {return fNSensVol;}
\r
41 Int_t GetSensVolIndex(Int_t at) const {return fSensVolIndex[at];}
\r
42 Short_t GetSensVolVolumeID(Int_t at) const {return fSensVolVolumeID[at];}
\r
43 TGeoHMatrix *GetMatrix() const {return fMatrix;}
\r
44 void GetLocalMatrix(TGeoHMatrix& mat) const;
\r
45 UShort_t *GetSensitiveVolumeVolumeID() const {return (UShort_t*)fSensVolVolumeID.GetArray();}
\r
46 Float_t GetSigmaFactor(Int_t i) const {return fSigmaFactor[i];}
\r
47 Float_t GetSigmaXFactor() const {return fSigmaFactor[0];}
\r
48 Float_t GetSigmaYFactor() const {return fSigmaFactor[1];}
\r
49 Float_t GetSigmaZFactor() const {return fSigmaFactor[2];}
\r
50 Int_t GetNProcessedPoints() const {return fNProcPoints;}
\r
51 Bool_t IsFreeDOF(Int_t dof) const {return TestBit(1<<dof);}
\r
52 UInt_t GetFreePattern() const {return TestBits(0x3f);}
\r
53 Bool_t AreSensorsProvided() const {return TestBit(1<<10);}
\r
54 Bool_t IsIn(UShort_t volid) const;
\r
55 Bool_t IsAlignable() const;
\r
56 Bool_t BelongsTo(AliITSAlignMille2Module* parent) const;
\r
57 AliITSAlignMille2Module* GetParent() const {return fParent;}
\r
58 void Print(Option_t* opt="") const;
\r
60 void SetSigmaFactor(Int_t i,Float_t v) {fSigmaFactor[i]=v;}
\r
61 void SetSigmaXFactor(Float_t v) {fSigmaFactor[0]=v;}
\r
62 void SetSigmaYFactor(Float_t v) {fSigmaFactor[1]=v;}
\r
63 void SetSigmaZFactor(Float_t v) {fSigmaFactor[2]=v;}
\r
64 void IncNProcessedPoints(Int_t step=1) {fNProcPoints += step;}
\r
65 void SetNProcessedPoints(Int_t v) {fNProcPoints = v;}
\r
66 void SetParent(AliITSAlignMille2Module* par) {fParent = par;}
\r
67 void SetFreeDOF(Int_t dof,Bool_t free=kTRUE) {SetBit(1<<dof,free);}
\r
68 void SetSensorsProvided(Bool_t v=kTRUE) {SetBit(1<<10,v);}
\r
69 Int_t Set(Int_t index,UShort_t volid,char* symname,TGeoHMatrix *m,Int_t nsv=0,UShort_t *volidsv=0);
\r
71 void AddSensitiveVolume(UShort_t volid);
\r
72 void DelSensitiveVolume(Int_t at);
\r
74 TGeoHMatrix *GetSensitiveVolumeMatrix(UShort_t voluid);
\r
75 TGeoHMatrix *GetSensitiveVolumeOrigGlobalMatrix(UShort_t voluid);
\r
76 TGeoHMatrix *GetSensitiveVolumeModifiedMatrix(UShort_t voluid, Double_t *delta,Bool_t local=kTRUE);
\r
77 AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, AliAlignObjParams *a);
\r
78 AliAlignObjParams *GetSensitiveVolumeMisalignment(UShort_t voluid, Double_t *deltalocal);
\r
80 // forse non serve...
\r
81 AliAlignObjParams *GetSensitiveVolumeGlobalMisalignment(UShort_t voluid, Double_t *deltalocal);
\r
82 // mo' proviamo questo
\r
83 AliAlignObjParams *GetSensitiveVolumeTotalMisalignment(UShort_t voluid, Double_t *deltalocal);
\r
85 static Int_t GetIndexFromVolumeID(UShort_t volid);
\r
86 static UShort_t GetVolumeIDFromSymname(const Char_t *symname);
\r
87 static UShort_t GetVolumeIDFromIndex(Int_t index);
\r
91 Int_t SensVolMatrix(UShort_t volid, TGeoHMatrix *m);
\r
92 Int_t SensVolOrigGlobalMatrix(UShort_t volid, TGeoHMatrix *m);
\r
96 Int_t fNSensVol; // number of sensor it refers to
\r
97 Int_t fIndex; // aliroot index
\r
98 UShort_t fVolumeID; // aliroot volune ID
\r
99 Int_t fNProcPoints; // number of processed points
\r
100 Float_t fSigmaFactor[3]; // multiplicative factor for referred sensor X,Y,Z error
\r
102 TArrayI fSensVolIndex; // aliroot indices for sensors
\r
103 TArrayS fSensVolVolumeID; // aliroot indices for sensors volumes
\r
104 TGeoHMatrix *fMatrix; // ideal TGeoHMatrix of the supermodule
\r
105 TGeoHMatrix *fSensVolMatrix; // sensor's ideal matrices
\r
106 TGeoHMatrix *fSensVolModifMatrix; // sensor's modified matrices
\r
108 AliITSAlignMille2Module* fParent; // optional parent pointer
\r
110 static AliAlignObjParams fgTempAlignObj; // temp.alignment object used as a buffer
\r
112 ClassDef(AliITSAlignMille2Module, 0)
\r