Updated macros for PHOS alignment calculation
[u/mrichter/AliRoot.git] / PHOS / macros / AlignmentDB / MakeFinalAlignment.C
1 /*
2 **********No misalignment*******
3 i=0 
4 matrix global_1 - tr=1  rot=1  refl=0  scl=0
5   0.766044    0.000000    0.642788    Tx = 310.215729
6   0.642788    0.000000   -0.766044    Ty = -369.700684
7   0.000000    1.000000    0.000000    Tz =   0.000000
8 i=1 
9 matrix global_1 - tr=1  rot=1  refl=0  scl=0
10   0.939693    0.000000    0.342020    Tx = 165.062332
11   0.342020    0.000000   -0.939693    Ty = -453.505035
12   0.000000    1.000000    0.000000    Tz =   0.000000
13 i=2 
14 matrix global_1 - tr=1  rot=1  refl=0  scl=0
15   1.000000    0.000000    0.000000    Tx =   0.000000
16   0.000000    0.000000   -1.000000    Ty = -482.609985
17   0.000000    1.000000    0.000000    Tz =   0.000000
18 i=3 
19 matrix global_1 - tr=1  rot=1  refl=0  scl=0
20   0.939693    0.000000   -0.342020    Tx = -165.062332
21  -0.342020    0.000000   -0.939693    Ty = -453.505035
22   0.000000    1.000000    0.000000    Tz =   0.000000
23
24 *************
25 =========Should be========
26
27 mod 4 (i=0)
28 matrix  - tr=1  rot=1  refl=0  scl=0
29   0.767337   -0.004312    0.641229    Tx = 313.381746
30   0.641189   -0.007942   -0.767342    Ty = -372.024764
31   0.008402    0.999959   -0.003330    Tz =  -2.354855
32
33 mod 3 (i=1)
34 matrix  - tr=1  rot=1  refl=0  scl=0
35   0.940798    0.002136    0.338961    Tx = 165.078518
36   0.338959    0.001227   -0.940800    Ty = -454.148853
37  -0.002426    0.999997    0.000431    Tz =  -2.801675
38
39 mod 3 (i=2)
40 matrix  - tr=1  rot=1  refl=0  scl=0
41   0.999976   -0.000756   -0.006876    Tx =  -0.083626
42  -0.006877   -0.001172   -0.999976    Ty = -482.172358
43   0.000748    0.999999   -0.001178    Tz =  -1.906440
44
45 mod 3 (i=3)
46 matrix  - tr=1  rot=1  refl=0  scl=0
47   0.934365   -0.002092   -0.356311    Tx = -167.233337
48  -0.356313   -0.000801   -0.934366    Ty = -460.901723
49   0.001670    0.999997   -0.001494    Tz =  -1.821245
50   
51 ------------Correct angles, but zero offsets------
52   0.767338   -0.004312    0.641229    Tx = 309.463421
53   0.641188   -0.007942   -0.767343    Ty = -370.327157
54   0.008401    0.999959   -0.003329    Tz =  -1.606798
55 i=1 
56 matrix global_1 - tr=1  rot=1  refl=0  scl=0
57   0.940798    0.002136    0.338961    Tx = 163.586079
58   0.338959    0.001227   -0.940800    Ty = -454.039582
59  -0.002425    0.999997    0.000430    Tz =   0.207687
60 i=2 
61 matrix global_1 - tr=1  rot=1  refl=0  scl=0
62   0.999976   -0.000756   -0.006876    Tx =  -3.318427
63  -0.006877   -0.001172   -0.999976    Ty = -482.598242
64   0.000748    0.999999   -0.001177    Tz =  -0.568114
65 i=3 
66 matrix global_1 - tr=1  rot=1  refl=0  scl=0
67   0.934365   -0.002092   -0.356311    Tx = -171.959374
68  -0.356314   -0.000801   -0.934366    Ty = -450.934413
69   0.001669    0.999997   -0.001494    Tz =  -0.720939
70
71   
72   
73   
74 */
75
76 void MakeFinalAlignment(){
77   // Create ideal (no misalignment) object for PHOS
78
79   
80   const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("Run2", "Run2");
81   if (!phosGeom) {
82     Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");
83     return;
84   }
85
86   //Activate CDB storage and load geometry from CDB
87   //[Part of code, taken from ITS version of MakexxxFullMisalignment
88   AliCDBManager * cdb = AliCDBManager::Instance();
89   cdb->SetDefaultStorage("local://./OCDB");
90   cdb->SetRun(0);
91
92   AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();
93   TClonesArray alobj("AliAlignObjParams", 16);
94    
95   const Double_t dpsi = 0., dtheta = 0., dphi = 0.;
96   Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT
97   const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
98   UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex);
99   Int_t i = 0;
100
101   // Alignment for 5 PHOS modules
102  Double_t ideal1[9] = {0.766044,    0.000000,   0.642788,  
103                        0.642788,    0.000000,  -0.766044,    
104                        0.000000,    1.000000,   0.000000} ;    
105  Double_t final1[9] = {0.767337,   -0.004312,   0.641229,   
106                        0.641189,   -0.007942,  -0.767342, 
107                        0.008402,    0.999959,  -0.003330} ;
108   TGeoRotation rot1;
109   rot1.SetMatrix(ideal1);
110   TGeoRotation inv =rot1.Inverse() ;
111   TGeoRotation rotF1;
112   rotF1.SetMatrix(final1);
113   rotF1.MultiplyBy(&inv) ;
114   Double_t dX= 313.381746-309.463421; 
115   Double_t dY=-372.024764+370.327157; 
116   Double_t dZ=-2.354855 +1.606798 ;
117
118  AliAlignObjParams * mod1 = new(alobj[i++]) AliAlignObjParams("PHOS/Module1",volid, dX, dY, dZ, 0., 0., 0., kTRUE);
119   mod1->SetRotation(rotF1);
120
121  
122   Double_t ideal2[9] = {0.939693,    0.000000,    0.342020,
123                         0.342020,    0.000000,   -0.939693,
124                         0.000000,    1.000000,   0.000000} ;    
125   Double_t final2[9] = {0.940798,    0.002136,    0.338961,
126                         0.338959,    0.001227,   -0.940800, 
127                        -0.002426,    0.999997,    0.000431} ;
128   TGeoRotation rot2;
129   rot2.SetMatrix(ideal2);
130   TGeoRotation inv2 =rot2.Inverse() ;
131   TGeoRotation rotF2;
132   rotF2.SetMatrix(final2);
133   rotF2.MultiplyBy(&inv2) ;
134   dX= 165.078518-163.586079; 
135   dY=-454.148853+454.039582; 
136   dZ=-2.801675-0.207687 ;
137
138   AliAlignObjParams * mod2 = new(alobj[i++]) AliAlignObjParams("PHOS/Module2",volid, dX, dY, dZ, 0., 0., 0., kTRUE);
139   mod2->SetRotation(rotF2);
140   
141   Double_t ideal3[9] = {1.000000,    0.000000,    0.000000,
142                         0.000000,    0.000000,   -1.000000,
143                         0.000000,    1.000000,    0.000000} ;    
144   Double_t final3[9] = {0.999976,   -0.000756,   -0.006876,
145                        -0.006877,   -0.001172,   -0.999976,
146                         0.000748,    0.999999,   -0.001178} ;
147   TGeoRotation rot3;
148   rot3.SetMatrix(ideal3);
149   TGeoRotation inv3 =rot3.Inverse() ;
150   TGeoRotation rotF3;
151   rotF3.SetMatrix(final3);
152   rotF3.MultiplyBy(&inv3) ;
153   dX= -0.083626+3.318427; 
154   dY=-482.172358+482.598242; 
155   dZ=-1.906440+0.568114 ;
156
157   AliAlignObjParams * mod3 = new(alobj[i++]) AliAlignObjParams("PHOS/Module3",volid, dX, dY, dZ, 0., 0., 0., kTRUE);
158   mod3->SetRotation(rotF3);
159   
160  Double_t ideal4[9] = {0.939693,    0.000000,  -0.342020,
161                       -0.342020,    0.000000,   -0.939693,
162                         0.000000,    1.000000,    0.000000} ;    
163   Double_t final4[9] = {0.934365,   -0.002092,   -0.356311,
164                        -0.356313,   -0.000801,   -0.934366,
165                         0.001670,    0.999997,   -0.001494} ;
166   TGeoRotation rot4;
167   rot4.SetMatrix(ideal4);
168   TGeoRotation inv4 =rot4.Inverse() ;
169   TGeoRotation rotF4;
170   rotF4.SetMatrix(final4);
171   rotF4.MultiplyBy(&inv4) ;
172   dX=-167.233337+171.959374; 
173   dY=-460.901723+450.934413; 
174   dZ=-1.821245+0.720939 ;
175   
176   AliAlignObjParams * mod4 = new(alobj[i++]) AliAlignObjParams("PHOS/Module4",volid, dX, dY, dZ, 0., 0., 0., kTRUE);
177   mod4->SetRotation(rotF4);
178
179   new(alobj[i++]) AliAlignObjParams("PHOS/Module5",
180           volid, 0., 0., 0., 0., 0., 0., kTRUE);
181
182   const Double_t dx = 0., dy = 0., dz = 0. ;
183   // Alignment of CPV modules
184   new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",
185         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
186   new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
187         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
188   new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
189         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
190   new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
191         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
192   new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
193         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
194  
195   Double_t displacement=0 ;
196   // Alignment for PHOS cradle
197   new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
198           volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
199   new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
200           volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
201
202   // Alignment for cradle wheels
203   new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",
204           volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
205   new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",
206           volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
207   new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",
208           volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
209   new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
210           volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
211
212   AliCDBMetaData md;
213   md.SetResponsible("Dmitri Peressounko");
214   md.SetComment("Ideal alignment objects for PHOS");
215   md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));
216   AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
217   cdb->Put(&alobj, id, &md);
218
219   alobj.Delete();
220 }
221
222