Update master to aliroot
[u/mrichter/AliRoot.git] / PHOS / macros / AlignmentDB / AliPHOSSetAlignment.C
1 /* $Id$*/
2
3 // Script to create alignment parameters and store them into CDB
4 // Three sets of alignment parameters can be created:
5 // 1) Ideal geometry
6 // 2) Geometry with disalignments and disorientations
7 // 3) Geometry small disalignments and disorientations
8
9 #if !defined(__CINT__)
10 #include "TControlBar.h"
11 #include "TString.h"
12 #include "TRandom.h"
13 #include "TClonesArray.h"
14
15 #include "AliAlignObjParams.h"
16 #include "AliCDBMetaData.h"
17 #include "AliCDBId.h"
18 #include "AliCDBEntry.h"
19 #include "AliCDBManager.h"
20 #include "AliCDBStorage.h"
21 #endif
22
23
24 void AliPHOSSetAlignment()
25 {
26   TControlBar *menu = new TControlBar("vertical","PHOS alignment control");
27   menu->AddButton("Help to run PHOS alignment control","Help()",
28                   "Explains how to use PHOS alignment control menus");
29
30   menu->AddButton("Ideal geometry","IdealAlignment()",
31                   "Set ideal PHOS geometry with zero displacement");
32   menu->AddButton("Misaligned geometry","FullMisalignment()",
33                   "Set PHOS geometry with large displacement");
34   menu->AddButton("Residual misaligned geometry","ResidualAlignment()",
35                   "Set PHOS geometry with small residual displacement");
36
37   menu->Show();
38 }
39
40 //------------------------------------------------------------------------
41 void Help()
42 {
43   char *string =
44     "\n\n\nSet PHOS alignment parameters and write them into ALICE CDB.
45 Press button \"Ideal geometry\" to create PHOS geometry with ideal geometry.
46 Press button \"Misaligned geometry\" to create PHOS geometry with fully displaced and disorientated geometry.
47 Press button \"Residual misaligned geometry\" to create PHOS geometry with infinitesimal displacement and disorientation\n\n\n";
48   printf(string);
49 }
50
51 //------------------------------------------------------------------------
52 void IdealAlignment()
53 {
54   // Create alignment objects for PHOS with ideally aligned geometry,
55   // i.e. with zero displacements and zero disorientations
56
57   // *************************    1st step    ***************
58   // Create TClonesArray of alignment objects for PHOS
59
60   TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
61   TClonesArray &alobj = *array;
62    
63   AliAlignObjParams a;
64
65   Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
66   // null shifts and rotations
67
68   UShort_t iIndex=0;
69   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
70   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
71
72   TString basePath = "PHOS/Module"; 
73   const Int_t nModules=5;
74
75   for (Int_t iModule = 1; iModule<=nModules; iModule++) {
76     TString newPath = basePath;
77     newPath += iModule;
78     new(alobj[iModule-1]) AliAlignObjParams(newPath.Data(),
79                                             dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
80   }
81
82   // *************************    2nd step    ***************
83   // Make CDB storage and put TClonesArray in
84   // 
85   AliCDBManager *CDB = AliCDBManager::Instance();
86   CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
87   
88   AliCDBMetaData *md= new AliCDBMetaData();
89   md->SetResponsible("Yuri Kharlov");
90   md->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
91   AliCDBId id("PHOS/Align/Data",0,999999);
92   CDB->Put(array,id, md);
93 }
94
95 //------------------------------------------------------------------------
96 void ResidualAlignment()
97 {
98   // Create alignment objects for PHOS with residual alignment,
99   // i.e. with infinitesimal displacement and disorientation
100
101   // *************************    1st step    ***************
102   // Create TClonesArray of alignment objects for PHOS
103
104   TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
105   TClonesArray &alobj = *array;
106    
107   AliAlignObjParams a;
108
109   Double_t dpsi=0., dtheta=0., dphi=0.;
110   Double_t displacement = 0.2;
111
112   UShort_t iIndex=0;
113   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
114   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
115
116   // Alignment for 5 PHOS modules
117   new(alobj[0]) AliAlignObjParams("PHOS/Module1",
118                                   dvoluid, -0.20, -0.1, +0.0, dpsi, dtheta, 0.2, kTRUE);
119   new(alobj[1]) AliAlignObjParams("PHOS/Module2",
120                                   dvoluid, -0.10, +0.0, -0.2, dpsi, dtheta, 0.2, kTRUE);
121   new(alobj[2]) AliAlignObjParams("PHOS/Module3",
122                                   dvoluid,  0.05, -0.1,  0.2, dpsi, dtheta, 0.0, kTRUE);
123   new(alobj[3]) AliAlignObjParams("PHOS/Module4",
124                                   dvoluid, +0.10, -0.0, -0.1, dpsi, dtheta, 0.1, kTRUE);
125   new(alobj[4]) AliAlignObjParams("PHOS/Module5",
126                                   dvoluid, +0.20, -0.1,  0.1, dpsi, dtheta, 0.2, kTRUE);
127
128   // Alignment for PHOS cradle
129   new(alobj[5]) AliAlignObjParams("PHOS/Cradle0",
130                                   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
131   new(alobj[6]) AliAlignObjParams("PHOS/Cradle1",
132                                   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
133
134   // Alignment for cradle wheels
135   new(alobj[7])  AliAlignObjParams("PHOS/Wheel0",
136                                    dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
137   new(alobj[8])  AliAlignObjParams("PHOS/Wheel1",
138                                    dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
139   new(alobj[9])  AliAlignObjParams("PHOS/Wheel2",
140                                    dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
141   new(alobj[10]) AliAlignObjParams("PHOS/Wheel3",
142                                    dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
143
144   // *************************    2nd step    ***************
145   // Make CDB storage and put TClonesArray in
146   // 
147   AliCDBManager *CDB = AliCDBManager::Instance();
148   CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
149   
150   AliCDBMetaData *md= new AliCDBMetaData();
151   md->SetResponsible("Yuri Kharlov");
152   md->SetComment("Alignment objects for slightly misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very little (resisual misalignment");
153   AliCDBId id("PHOS/Align/Data",1000000,1999999);
154   CDB->Put(array,id, md);
155 }
156
157 //------------------------------------------------------------------------
158 void FullMisalignment()
159 {
160   // Create alignment objects for PHOS with fully misaligned geometry
161
162   // *************************    1st step    ***************
163   // Create TClonesArray of alignment objects for PHOS
164
165   TClonesArray *array = new TClonesArray("AliAlignObjParams",11);
166   TClonesArray &alobj = *array;
167    
168   AliAlignObjParams a;
169
170   Double_t dpsi=0., dtheta=0., dphi=0.;
171   Double_t displacement = 10;
172
173   UShort_t iIndex=0;
174   AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
175   UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
176
177   // Alignment for 5 PHOS modules
178   new(alobj[0]) AliAlignObjParams("PHOS/Module1",
179                                   dvoluid, -20., -10.,   0., dpsi, dtheta, 5, kTRUE);
180   new(alobj[1]) AliAlignObjParams("PHOS/Module2",
181                                   dvoluid, -10.,   0., -10., dpsi, dtheta, 2, kTRUE);
182   new(alobj[2]) AliAlignObjParams("PHOS/Module3",
183                                   dvoluid,   5., -10.,  10., dpsi, dtheta, 0, kTRUE);
184   new(alobj[3]) AliAlignObjParams("PHOS/Module4",
185                                   dvoluid, +10.,  -0., -10., dpsi, dtheta, 2, kTRUE);
186   new(alobj[4]) AliAlignObjParams("PHOS/Module5",
187                                   dvoluid, +20., -10.,   0., dpsi, dtheta, 5, kTRUE);
188
189   // Alignment for PHOS cradle
190   new(alobj[5]) AliAlignObjParams("PHOS/Cradle0",
191                                   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
192   new(alobj[6]) AliAlignObjParams("PHOS/Cradle1",
193                                   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
194
195   // Alignment for cradle wheels
196   new(alobj[7]) AliAlignObjParams("PHOS/Wheel0",
197                                   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
198   new(alobj[8]) AliAlignObjParams("PHOS/Wheel1",
199                                   dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
200   new(alobj[9]) AliAlignObjParams("PHOS/Wheel2",
201                                   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
202   new(alobj[10]) AliAlignObjParams("PHOS/Wheel3",
203                                   dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
204
205   // *************************    2nd step    ***************
206   // Make CDB storage and put TClonesArray in
207   // 
208   AliCDBManager *CDB = AliCDBManager::Instance();
209   CDB->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
210   
211   AliCDBMetaData *md= new AliCDBMetaData();
212   md->SetResponsible("Yuri Kharlov");
213   md->SetComment("Alignment objects for fully misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very much");
214   AliCDBId id("PHOS/Align/Data",2000000,2999999);
215   CDB->Put(array,id, md);
216 }