Line data Source code
1 : #ifndef ALIITSMISALIGNER_H
2 : #define ALIITSMISALIGNER_H
3 :
4 : // Class building the alignment objects for ITS (SPD, SDD, SSD)
5 : // It derives from AliMisAligner, thus providing the methods
6 : // MakeAlObjsArray (builds and returns the array of alignment objects)
7 : // and GetCDBMetaData (returns the metadata for the OCDB entry)
8 : //
9 :
10 : /* $Id$ */
11 :
12 : #include <TString.h>
13 : #include "AliMisAligner.h"
14 : #include <TRandom3.h>
15 :
16 : class TClonesArray;
17 : class AliAlignObjParams;
18 :
19 : //-------------------------------------------------------------------------
20 : class AliITSMisAligner : public AliMisAligner{
21 : public:
22 : AliITSMisAligner();
23 0 : ~AliITSMisAligner() {};
24 :
25 : TClonesArray* MakeAlObjsArray();
26 : AliCDBMetaData* GetCDBMetaData() const;
27 :
28 0 : void SetSeed(Int_t seed) {fRnd.SetSeed(seed); return;}
29 :
30 : void SetWholeITSPars(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
31 : {
32 0 : fWholeITS[0] = dx; fWholeITS[1] = dy; fWholeITS[2] = dz;
33 0 : fWholeITS[3] = dpsi; fWholeITS[4] = dtheta; fWholeITS[5] = dphi;
34 0 : }
35 :
36 : void SetSPDSectorSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
37 : {
38 0 : fSPDSector[0] = dx; fSPDSector[1] = dy; fSPDSector[2] = dz;
39 0 : fSPDSector[3] = dpsi; fSPDSector[4] = dtheta; fSPDSector[5] = dphi;
40 0 : }
41 :
42 : void SetSPDHSSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
43 : {
44 0 : fSPDHS[0] = dx; fSPDHS[1] = dy; fSPDHS[2] = dz;
45 0 : fSPDHS[3] = dpsi; fSPDHS[4] = dtheta; fSPDHS[5] = dphi;
46 0 : }
47 :
48 : void SetSPDLadderSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
49 : {
50 0 : fSPDLadder[0] = dx; fSPDLadder[1] = dy; fSPDLadder[2] = dz;
51 0 : fSPDLadder[3] = dpsi; fSPDLadder[4] = dtheta; fSPDLadder[5] = dphi;
52 0 : }
53 :
54 : void SetSPDHBSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
55 : {
56 0 : fSPDHB[0] = dx; fSPDHB[1] = dy; fSPDHB[2] = dz;
57 0 : fSPDHB[3] = dpsi; fSPDHB[4] = dtheta; fSPDHB[5] = dphi;
58 0 : }
59 :
60 : void SetSPDBarrelSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
61 : {
62 0 : fSPDBarrel[0] = dx; fSPDBarrel[1] = dy; fSPDBarrel[2] = dz;
63 0 : fSPDBarrel[3] = dpsi; fSPDBarrel[4] = dtheta; fSPDBarrel[5] = dphi;
64 0 : }
65 :
66 : void SetSDDLayerSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
67 : {
68 0 : fSDDLayer[0] = dx; fSDDLayer[1] = dy; fSDDLayer[2] = dz;
69 0 : fSDDLayer[3] = dpsi; fSDDLayer[4] = dtheta; fSDDLayer[5] = dphi;
70 0 : }
71 :
72 : void SetSDDBarrelSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
73 : {
74 0 : fSDDBarrel[0] = dx; fSDDBarrel[1] = dy; fSDDBarrel[2] = dz;
75 0 : fSDDBarrel[3] = dpsi; fSDDBarrel[4] = dtheta; fSDDBarrel[5] = dphi;
76 0 : }
77 :
78 : void SetSDDLadderSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
79 : {
80 0 : fSDDLadder[0] = dx; fSDDLadder[1] = dy; fSDDLadder[2] = dz;
81 0 : fSDDLadder[3] = dpsi; fSDDLadder[4] = dtheta; fSDDLadder[5] = dphi;
82 0 : }
83 :
84 : void SetSDDModuleSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
85 : {
86 0 : fSDDModule[0] = dx; fSDDModule[1] = dy; fSDDModule[2] = dz;
87 0 : fSDDModule[3] = dpsi; fSDDModule[4] = dtheta; fSDDModule[5] = dphi;
88 0 : }
89 :
90 : void SetSSDBarrelPars(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
91 : {
92 0 : fSSDBarrel[0] = dx; fSSDBarrel[1] = dy; fSSDBarrel[2] = dz;
93 0 : fSSDBarrel[3] = dpsi; fSSDBarrel[4] = dtheta; fSSDBarrel[5] = dphi;
94 0 : }
95 :
96 : void SetSSDLadderSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
97 : {
98 0 : fSSDLadder[0] = dx; fSSDLadder[1] = dy; fSSDLadder[2] = dz;
99 0 : fSSDLadder[3] = dpsi; fSSDLadder[4] = dtheta; fSSDLadder[5] = dphi;
100 0 : }
101 :
102 : void SetSSDModuleSigmas(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
103 : {
104 0 : fSSDModule[0] = dx; fSSDModule[1] = dy; fSSDModule[2] = dz;
105 0 : fSSDModule[3] = dpsi; fSSDModule[4] = dtheta; fSSDModule[5] = dphi;
106 0 : }
107 :
108 : void SetSPDLadderShiftT(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
109 : {
110 0 : fSPDLadderShiftT[0] = dx; fSPDLadderShiftT[1] = dy; fSPDLadderShiftT[2] = dz;
111 0 : fSPDLadderShiftT[3] = dpsi; fSPDLadderShiftT[4] = dtheta; fSPDLadderShiftT[5] = dphi;
112 0 : }
113 :
114 : void SetSPDLadderShiftB(Double_t dx, Double_t dy, Double_t dz, Double_t dpsi, Double_t dtheta, Double_t dphi)
115 : {
116 0 : fSPDLadderShiftB[0] = dx; fSPDLadderShiftB[1] = dy; fSPDLadderShiftB[2] = dz;
117 0 : fSPDLadderShiftB[3] = dpsi; fSPDLadderShiftB[4] = dtheta; fSPDLadderShiftB[5] = dphi;
118 0 : }
119 :
120 : void SetSPDLadderShiftT(Double_t pars[6])
121 : {
122 0 : for(Int_t ii=0; ii<6; ii++)
123 0 : fSPDLadderShiftT[ii] = pars[ii];
124 0 : }
125 :
126 : void SetSPDLadderShiftB(Double_t pars[6])
127 : {
128 0 : for(Int_t ii=0; ii<6; ii++)
129 0 : fSPDLadderShiftB[ii] = pars[ii];
130 0 : }
131 :
132 : void SetWholeITSMisAlignment();
133 : void SetSPDMisAlignment();
134 : void SetSDDMisAlignment();
135 : void SetSSDMisAlignment();
136 :
137 0 : Double_t GetUnif(Double_t x1,Double_t x2) {return fRnd.Uniform(x1,x2);}
138 :
139 : Bool_t AddAlignObj(char* name,Double_t dx,Double_t dy,Double_t dz,
140 : Double_t dpsi,Double_t dtheta,Double_t dphi,
141 : const char* distrib);
142 :
143 : Bool_t AddAlignObj(Int_t lay,Double_t dx,Double_t dy,Double_t dz,
144 : Double_t dpsi,Double_t dtheta,Double_t dphi,
145 : Bool_t unif);
146 :
147 : Bool_t AddAlignObj(Int_t lay,Int_t ladd,Double_t dx,Double_t dy,Double_t dz,
148 : Double_t dpsi,Double_t dtheta,Double_t dphi,
149 : Double_t xShift,Double_t yShift,Double_t zShift,
150 : Double_t psiShift,Double_t thetaShift,Double_t phiShift,
151 : Bool_t unif);
152 :
153 : Bool_t AddSectorAlignObj(Int_t sectMin,Int_t sectMax,
154 : Double_t dx,Double_t dy,Double_t dz,
155 : Double_t dpsi,Double_t dtheta,Double_t dphi,
156 : Double_t xShift,Double_t yShift,Double_t zShift,
157 : Double_t psiShift,Double_t thetaShift,Double_t phiShift,
158 : Bool_t unif);
159 :
160 : void ShiftAlignObj(AliAlignObjParams &alObj,Double_t dx,Double_t dy,Double_t dz,Double_t dpsi,Double_t dtheta,Double_t dphi);
161 : void SmearAlignObj(AliAlignObjParams &alObj,Double_t sx,Double_t sy,Double_t sz,Double_t spsi,Double_t stheta,Double_t sphi);
162 :
163 : const char* GetSymbName(Int_t layer) const;
164 : const char* GetSymbName(Int_t layer,Int_t ladd) const;
165 : const char* GetSymbName(Int_t layer,Int_t ladd,Int_t mod) const;
166 : const char* GetHalfStaveLadderSymbName(Int_t layer,Int_t ladd,Int_t halfStave) const;
167 : static const char* GetParentSymName(const char* symname) ;
168 : // const char* GetSistersSymName(const char* symname) const;
169 : static Bool_t GetLayerAndLevel(const char* symname, Int_t &layer, Int_t &level);
170 :
171 0 : static Int_t GetNLayers() {return kNLayers;}
172 0 : static Int_t GetNLadders(Int_t lay) {return fgkNLadders[lay];}
173 0 : static Int_t GetNDetectors(Int_t lay) {return fgkNDetectors[lay];}
174 : static Int_t GetNSisters(const char* symname);
175 : static Int_t GetNDaughters(const char* symname);
176 :
177 : protected:
178 : TRandom3 fRnd; // TRandom3 object
179 : //TRandom fRnd; // TRandom object
180 : Int_t fInd; // index of current AliAlignObjParams in fAlignObjArray
181 : TClonesArray *fAlignObjArray; // array of AliAlignObjParams
182 : TString fStrSPD; // name of SPD
183 : TString fStrSDD; // name of SDD
184 : TString fStrSSD; // name of SSD
185 : TString fStrStave; // name of SPD stave
186 : TString fStrHalfStave; // name of SPD half-stave
187 : TString fStrLadder; // name of SPD ladder
188 : TString fStrSector; // name of SPD sector
189 : TString fStrSensor; // name of sensitive volume
190 :
191 : private:
192 : AliITSMisAligner(const AliITSMisAligner &mAligner);
193 : AliITSMisAligner &operator= (const AliITSMisAligner &mAligner);
194 : enum {kNLayers = 6}; // The number of layers.
195 : static const Int_t fgkNLadders[kNLayers]; // Array of the number of ladders/layer(layer)
196 : static const Int_t fgkNDetectors[kNLayers];// Array of the number of detector/ladder(layer)
197 :
198 : // Parameters setting the misalignment at all SPD/SDD/SSD levels
199 : Double_t fWholeITS[6]; // parameters for the whole TIS
200 : Double_t fSPDSector[6]; // sectors
201 : Double_t fSPDHB[6]; // SPD half barrel
202 : Double_t fSPDBarrel[6]; // SPD barrel
203 : Double_t fSPDHS[6]; // SPD half stave
204 : Double_t fSPDLadder[6]; // SPD ladder
205 : Double_t fSDDLayer[6]; // SPD layer
206 : Double_t fSDDBarrel[6]; // SDD barrel
207 : Double_t fSDDLadder[6]; // SDD ladder
208 : Double_t fSDDModule[6]; // SDD module
209 : Double_t fSSDBarrel[6]; // SSD barrel
210 : Double_t fSSDLayer[6]; // SSD layer
211 : Double_t fSSDLadder[6]; // SSD ladder
212 : Double_t fSSDModule[6]; // SSD module
213 :
214 : // Parameters setting common shifts (used for "full" misalignment)
215 : Double_t fSPDLadderShiftT[6]; // for top half-barrel ladders
216 : Double_t fSPDLadderShiftB[6]; // for bottom half-barrel ladders
217 : Double_t fSDDLadderShift1[6]; // for ladder first SDD layer
218 : Double_t fSDDLadderShift2[6]; // for ladder second SDD layer
219 :
220 : // Choice between uniform (kTRUE) or gaussian (kFALSE) distribution in the smearing
221 : Bool_t fUnifSPDSector; // kTRUE if uniform smearing SPD sector
222 : Bool_t fUnifSPDHS; // kTRUE if uniform smearing SPD HS
223 : Bool_t fUnifSDDLadder; // kTRUE if uniform smearing SDD ladder
224 : Bool_t fUnifSSDLadder; // kTRUE if uniform smearing SSD ladder
225 : Bool_t fUnifSPDLadder; // kTRUE if uniform smearing SPD ladder
226 : Bool_t fUnifSDDModule; // kTRUE if uniform smearing SDD module
227 : Bool_t fUnifSSDModule; // kTRUE if uniform smearing SSD module
228 :
229 118 : ClassDef(AliITSMisAligner,0) //ITS MisAligner
230 : };
231 :
232 :
233 : #endif
|