]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/MakeITSFullMisAlignment.C
Added the class AliFMDESDRevertexer for recalculating the
[u/mrichter/AliRoot.git] / ITS / MakeITSFullMisAlignment.C
CommitLineData
259b0bd4 1#if !defined(__CINT__) || defined(__MAKECINT__)
2#include <TError.h>
3#include <TFile.h>
4#include <TGeoManager.h>
5#include <TMath.h>
6#include <TString.h>
7#include <TSystem.h>
8#include "AliCDBPath.h"
9#include "AliCDBEntry.h"
10#include "AliCDBManager.h"
11#include "AliCDBStorage.h"
12#include "AliGeomManager.h"
13#include "AliITSMisalignMaker.h"
14#endif
c84c04aa 15
16
17TRandom3 rnd;
18rnd.SetSeed(23457856);
19
259b0bd4 20void MakeITSFullMisAlignment() {
21//========================================================================
22//
23// Macro for ITS full (realistic) misalignment
24//
25// Main author: L. Gaudichet
26// Contact: andrea.dainese@lnl.infn.it
27//
28//========================================================================
29
30
6fce62af 31 const char* macroname = "MakeITSFullMisAlignment.C";
259b0bd4 32
6fce62af 33 // Activate CDB storage and load geometry from CDB
34 AliCDBManager* cdb = AliCDBManager::Instance();
35 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT");
36 cdb->SetRun(0);
37
259b0bd4 38 AliCDBStorage* storage = NULL;
39
ff3b96d3 40 if(TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")){
6fce62af 41 TString Storage = gSystem->Getenv("STORAGE");
42 if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
43 Error(macroname,"STORAGE variable set to %s is not valid. Exiting\n",Storage.Data());
44 return;
45 }
46 storage = cdb->GetStorage(Storage.Data());
47 if(!storage){
48 Error(macroname,"Unable to open storage %s\n",Storage.Data());
49 return;
50 }
51 AliCDBPath path("GRP","Geometry","Data");
52 AliCDBEntry *entry = storage->Get(path.GetPath(),cdb->GetRun());
53 if(!entry) Fatal(macroname,"Could not get the specified CDB entry!");
54 entry->SetOwner(0);
55 TGeoManager* geom = (TGeoManager*) entry->GetObject();
56 AliGeomManager::SetGeometry(geom);
57 }else{
259b0bd4 58 AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage
6fce62af 59 }
1895a097 60
259b0bd4 61 // SETTINGS:
62 // - tranformations are defined by the "maximum transformation"
63 // dx,dy,dz,dpsi,dtheta,dphi: then we take a Gaussian with sigma=dx/3
64 // and we cut it at +- 3*sigma = dx
65 // (the option "unif" allows to sample from a uniform distr.)
66 // - units are cm and deg
67 // - transformations are defined in the local frame of the volume
68 // being misaligned
69 //
70 const Float_t kRadToDeg = 180./TMath::Pi();
71
1895a097 72
259b0bd4 73 //=****************************************
c84c04aa 74 // misalignment of the whole ITS according to survey as reported by Werner Riegler (18/07/2008)
75 // + 100um smearing for translations and 0.1mrad smearing for rotations
259b0bd4 76 //=****************************************
c84c04aa 77 Double_t sigmatrW = 0.01;
78 Double_t sigmarotW = 0.006;
79 Double_t its_dx = AliMathBase::TruncatedGaus(-0.12,sigmatrW,3.*sigmatrW);
80 Double_t its_dy = AliMathBase::TruncatedGaus(-0.07,sigmatrW,3.*sigmatrW);
81 Double_t its_dz = AliMathBase::TruncatedGaus(0.29,sigmatrW,3.*sigmatrW);
82 Double_t its_dpsi = AliMathBase::TruncatedGaus(0.,sigmarotW,3.*sigmarotW);
83 Double_t its_dtheta = AliMathBase::TruncatedGaus(0.03,sigmarotW,3.*sigmarotW);
84 Double_t its_dphi = AliMathBase::TruncatedGaus(0.04,sigmarotW,3.*sigmarotW);
85 const char* unifits="fixed";
259b0bd4 86
87 //=****************************************
88 // misalignment at the level of SPD sectors : source - A.Pepato
89 //=****************************************
90 Float_t spdsector_dx = 0.0050; // 50 micron (~tangetial, i.e. rphi)
91 Float_t spdsector_dy = 0.0100; // 100 micron (~radial)
92 Float_t spdsector_dz = 0.0100; // 100 micron
93 Float_t spdsector_dpsi = 0.0100/30.*kRadToDeg;; // so as to have 100 micron difference at the two extremes
94 Float_t spdsector_dtheta = 0.0100/30.*kRadToDeg;; // so as to have 100 micron difference at the two extremes
95 Float_t spdsector_dphi = 0.0050/1.5*kRadToDeg;; // so as to have 50 micron difference at the two extremes
96 Bool_t unifspdsector=kTRUE;
97
98 //=****************************************
99 // misalignment at the level of SPD half-barrels : source - A.Pepato
100 //=****************************************
101 Float_t spdhalfbarrel_dx = 0.0200; // 200 micron
102 Float_t spdhalfbarrel_dy = 0.0200; // 200 micron
103 Float_t spdhalfbarrel_dz = 0.0200; // 200 micron
104 Float_t spdhalfbarrel_dpsi = 0.0100/30.*kRadToDeg; // so as to have 100 micron difference at the two extremes
105 Float_t spdhalfbarrel_dtheta = 0.0100/30.*kRadToDeg; // so as to have 100 micron difference at the two extremes
106 Float_t spdhalfbarrel_dphi = 0.0100/7.*kRadToDeg; // so as to have 100 micron difference at the two extremes
107
108 //=****************************************
109 // misalignment at the level of SPD barrel : source - A.Pepato
110 //=****************************************
c84c04aa 111 Float_t spdbarrel_dx = 0.1000; // 1 mm (very pessimistic)
112 Float_t spdbarrel_dy = 0.1000; // 1 mm (very pessimistic)
113 Float_t spdbarrel_dz = 0.1000; // 1 mm (very pessimistic)
114 Float_t spdbarrel_dpsi = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
115 Float_t spdbarrel_dtheta = 0.0500/30.*kRadToDeg; // so as to have 500 micron difference at the two extremes
116 Float_t spdbarrel_dphi = 0.0500/7.*kRadToDeg; // so as to have 500 micron difference at the two extremes
259b0bd4 117
118
119 //=****************************************
02a75e66 120 // misalignment at the level of SDD and SSD layers: source - B.Giraudo
259b0bd4 121 //=****************************************
02a75e66 122 Float_t sddlayer_dx = 0.0010; // 10 micron
123 Float_t sddlayer_dy = 0.0010; // 10 micron
124 Float_t sddlayer_dz = 0.0010; // 10 micron
125 Float_t sddlayer_dpsi = 0.0010/52.*kRadToDeg; // so as to have 10 micron difference at the two extremes
126 Float_t sddlayer_dtheta = 0.0010/52.*kRadToDeg; // so as to have 10 micron difference at the two extremes
127 Float_t sddlayer_dphi = 0.0010/20.*kRadToDeg; // so as to have 10 micron difference at the two extremes
128
129 Float_t ssdlayer_dx = 0.0010; // 10 micron
130 Float_t ssdlayer_dy = 0.0010; // 10 micron
131 Float_t ssdlayer_dz = 0.0010; // 10 micron
132 Float_t ssdlayer_dpsi = 0.0010/90.*kRadToDeg; // so as to have 10 micron difference at the two extremes
133 Float_t ssdlayer_dtheta = 0.0010/90.*kRadToDeg; // so as to have 10 micron difference at the two extremes
134 Float_t ssdlayer_dphi = 0.0010/40.*kRadToDeg; // so as to have 10 micron difference at the two extremes
135
136 Float_t sddbarrel_dx = 0.0020; // 20 micron
137 Float_t sddbarrel_dy = 0.0020; // 20 micron
138 Float_t sddbarrel_dz = 0.0020; // 20 micron
139 Float_t sddbarrel_dpsi = 0.0020/52.*kRadToDeg; // so as to have 20 micron difference at the two extremes
140 Float_t sddbarrel_dtheta = 0.0020/52.*kRadToDeg; // so as to have 20 micron difference at the two extremes
141 Float_t sddbarrel_dphi = 0.0020/20.*kRadToDeg; // so as to have 20 micron difference at the two extremes
142
143 Float_t ssdbarrel_dx = 0.0020; // 20 micron
144 Float_t ssdbarrel_dy = 0.0020; // 20 micron
145 Float_t ssdbarrel_dz = 0.0020; // 20 micron
146 Float_t ssdbarrel_dpsi = 0.0020/90.*kRadToDeg; // so as to have 20 micron difference at the two extremes
147 Float_t ssdbarrel_dtheta = 0.0020/90.*kRadToDeg; // so as to have 20 micron difference at the two extremes
148 Float_t ssdbarrel_dphi = 0.0020/40.*kRadToDeg; // so as to have 20 micron difference at the two extremes
259b0bd4 149
150 //=****************************************
151 // misalignment at the level of half-staves (SPD) : source - S.Moretto
152 // ladders (SDD,SSD) : source -
153 //=****************************************
3b96c7be 154 Float_t spdhalfstave_dx = 0.0100; // 100 micron // normal to plane
155 Float_t spdhalfstave_dy = 0.0020; // 20 micron
259b0bd4 156 Float_t spdhalfstave_dz = 0.0020; // 20 micron
3b96c7be 157 Float_t spdhalfstave_dpsi = 0.0020/7.*kRadToDeg; // so as to have 20 micron difference at the two extremes
158 Float_t spdhalfstave_dtheta = 0.0050/7.*kRadToDeg; // so as to have 50 micron difference at the two extremes
259b0bd4 159 Float_t spdhalfstave_dphi = 0.0050/0.7*kRadToDeg; // so as to have 50 micron difference at the two extremes
160 Bool_t unifspdhalfstave=kTRUE;
161
162 Float_t sddladder_dx = 0.0005; // 5 micron
163 Float_t sddladder_dy = 0.0005; // 5 micron
164 Float_t sddladder_dz = 0.0005; // 5 micron
165 Float_t sddladder_dpsi = 0.00; // ?
166 Float_t sddladder_dtheta = 0.00; // ?
167 Float_t sddladder_dphi = 0.00; // ?
168
169 Float_t ssdladder_dx = 0.0005; // 5 micron
170 Float_t ssdladder_dy = 0.0005; // 5 micron
171 Float_t ssdladder_dz = 0.0005; // 5 micron
172 Float_t ssdladder_dpsi = 0.00; // ?
173 Float_t ssdladder_dtheta = 0.00; // ?
174 Float_t ssdladder_dphi = 0.00; // ?
175
176
177 //=****************************************
178 // misalignment at the level of ladders (SPD) : source - R.Santoro
179 // modules (SDD) : source - L.Gaudichet
180 // modules (SSD) : source -
181 //=****************************************
182 Float_t spdladder_dx = 0.0010; // 10 micron
02a75e66 183 Float_t spdladder_dy = 0.0030; // 50 micron
259b0bd4 184 Float_t spdladder_dz = 0.0010; // 10 micron
185 Float_t spdladder_dpsi = 0.0001*kRadToDeg; // 0.1 mrad
186 Float_t spdladder_dtheta = 0.0001*kRadToDeg; // 0.1 mrad
187 Float_t spdladder_dphi = 0.0001*kRadToDeg; // 0.1 mrad
188
189 Float_t sddmodule_dx = 0.0045; // 45 micron
190 Float_t sddmodule_dy = 0.0045; // 45 micron
191 Float_t sddmodule_dz = 0.0105; // 105 micron
192 Float_t sddmodule_dpsi = 0.00; // ?
193 Float_t sddmodule_dtheta = 0.00; // ?
194 Float_t sddmodule_dphi = 0.00; // ?
195
196 Float_t ssdmodule_dx = 0.0050; // 50 micron
197 Float_t ssdmodule_dy = 0.0050; // 50 micron
198 Float_t ssdmodule_dz = 0.0050; // 50 micron
199 Float_t ssdmodule_dpsi = 0.00; // ?
200 Float_t ssdmodule_dtheta = 0.00; // ?
201 Float_t ssdmodule_dphi = 0.00; // ?
202 //
203 // END SETTINGS
204
205
206 AliITSMisalignMaker alignMaker;
207
208 //=****************************************
209 // overall ITS misalignment :
210 //=****************************************
211
ff3b96d3 212 alignMaker.AddAlignObj("ITS",its_dx,its_dy,its_dz,its_dpsi,its_dtheta,its_dphi,unifits);
1895a097 213
259b0bd4 214 //=****************************************
215 // misalignment at the level of SPD barrel, half-barrels, and at the level
216 // of SPD sectors
217 //=****************************************
218
219 Double_t vx,vy,vz,vpsi,vtheta,vphi;
220 Double_t vxbarrel,vybarrel,vzbarrel,vpsibarrel,vthetabarrel,vphibarrel;
221
222 // barrel
c84c04aa 223 vxbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dx/3,spdbarrel_dx);
224 vybarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dy/3,spdbarrel_dy);
225 vzbarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dz/3,spdbarrel_dz);
226 vpsibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dpsi/3,spdbarrel_dpsi);
227 vthetabarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dtheta/3,spdbarrel_dtheta);
228 vphibarrel = AliMathBase::TruncatedGaus(0,spdbarrel_dphi/3,spdbarrel_dphi);
259b0bd4 229
230 // top half-barrel
c84c04aa 231 vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
232 vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
233 vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
234 vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
235 vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
236 vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
259b0bd4 237
238 vx += vxbarrel;
239 vy += vybarrel;
240 vz += vzbarrel;
241 vpsi += vpsibarrel;
242 vtheta += vthetabarrel;
243 vphi += vphibarrel;
244
02a75e66 245 alignMaker.AddSectorAlignObj(1,5,spdsector_dx,spdsector_dy,spdsector_dz,
259b0bd4 246 spdsector_dpsi,spdsector_dtheta,spdsector_dphi,
247 vx,vy,vz,vpsi,vtheta,vphi,unifspdsector);
248
249 // bottom half-barrel
c84c04aa 250 vx = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dx/3,spdhalfbarrel_dx);
251 vy = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dy/3,spdhalfbarrel_dy);
252 vz = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dz/3,spdhalfbarrel_dz);
253 vpsi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dpsi/3,spdhalfbarrel_dpsi);
254 vtheta = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dtheta/3,spdhalfbarrel_dtheta);
255 vphi = AliMathBase::TruncatedGaus(0,spdhalfbarrel_dphi/3,spdhalfbarrel_dphi);
259b0bd4 256
257 vx += vxbarrel;
258 vy += vybarrel;
259 vz += vzbarrel;
260 vpsi += vpsibarrel;
261 vtheta += vthetabarrel;
262 vphi += vphibarrel;
263
02a75e66 264 alignMaker.AddSectorAlignObj(6,10,spdsector_dx,spdsector_dy,spdsector_dz,
259b0bd4 265 spdsector_dpsi,spdsector_dtheta,spdsector_dphi,
266 vx,vy,vz,vpsi,vtheta,vphi,unifspdsector);
267
268
02a75e66 269
259b0bd4 270 //=****************************************
02a75e66 271 // misalignment at the level of half-staves (SPD)/ladders&layers (SDD,SSD) :
259b0bd4 272 //=****************************************
259b0bd4 273
02a75e66 274 // SPD
275 alignMaker.AddAlignObj(0,-1,spdhalfstave_dx,spdhalfstave_dy,spdhalfstave_dz,spdhalfstave_dpsi,spdhalfstave_dtheta,spdhalfstave_dphi,0,0,0,0,0,0,unifspdhalfstave); // all SPD1 half-staves
276 alignMaker.AddAlignObj(1,-1,spdhalfstave_dx,spdhalfstave_dy,spdhalfstave_dz,spdhalfstave_dpsi,spdhalfstave_dtheta,spdhalfstave_dphi,0,0,0,0,0,0,unifspdhalfstave); // all SPD2 half-staves
259b0bd4 277
02a75e66 278 // SDD
279 // barrel
280 vxbarrel = alignMaker.GetUnif(-sddbarrel_dx,sddbarrel_dx);
281 vybarrel = alignMaker.GetUnif(-sddbarrel_dy,sddbarrel_dy);
282 vzbarrel = alignMaker.GetUnif(-sddbarrel_dz,sddbarrel_dz);
283 vpsibarrel = alignMaker.GetUnif(-sddbarrel_dpsi,sddbarrel_dpsi);
284 vthetabarrel = alignMaker.GetUnif(-sddbarrel_dtheta,sddbarrel_dtheta);
285 vphibarrel = alignMaker.GetUnif(-sddbarrel_dphi,sddbarrel_dphi);
286
287 // layer SDD1
288 vx = alignMaker.GetUnif(-sddlayer_dx,sddlayer_dx);
289 vy = alignMaker.GetUnif(-sddlayer_dy,sddlayer_dy);
290 vz = alignMaker.GetUnif(-sddlayer_dz,sddlayer_dz);
291 vpsi = alignMaker.GetUnif(-sddlayer_dpsi,sddlayer_dpsi);
292 vtheta = alignMaker.GetUnif(-sddlayer_dtheta,sddlayer_dtheta);
293 vphi = alignMaker.GetUnif(-sddlayer_dphi,sddlayer_dphi);
259b0bd4 294
02a75e66 295 vx += vxbarrel;
296 vy += vybarrel;
297 vz += vzbarrel;
298 vpsi += vpsibarrel;
299 vtheta += vthetabarrel;
300 vphi += vphibarrel;
301
302 alignMaker.AddAlignObj(2,-1,sddladder_dx,sddladder_dy,sddladder_dz,sddladder_dpsi,sddladder_dtheta,sddladder_dphi,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // all SDD1 ladders
303
304 // layer SDD2
305 vx = alignMaker.GetUnif(-sddlayer_dx,sddlayer_dx);
306 vy = alignMaker.GetUnif(-sddlayer_dy,sddlayer_dy);
307 vz = alignMaker.GetUnif(-sddlayer_dz,sddlayer_dz);
308 vpsi = alignMaker.GetUnif(-sddlayer_dpsi,sddlayer_dpsi);
309 vtheta = alignMaker.GetUnif(-sddlayer_dtheta,sddlayer_dtheta);
310 vphi = alignMaker.GetUnif(-sddlayer_dphi,sddlayer_dphi);
311
312 vx += vxbarrel;
313 vy += vybarrel;
314 vz += vzbarrel;
315 vpsi += vpsibarrel;
316 vtheta += vthetabarrel;
317 vphi += vphibarrel;
318
319 alignMaker.AddAlignObj(3,-1,sddladder_dx,sddladder_dy,sddladder_dz,sddladder_dpsi,sddladder_dtheta,sddladder_dphi,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // all SDD2 ladders
320
321 // SSD
322 // barrel
323 vxbarrel = alignMaker.GetUnif(-ssdbarrel_dx,ssdbarrel_dx);
324 vybarrel = alignMaker.GetUnif(-ssdbarrel_dy,ssdbarrel_dy);
325 vzbarrel = alignMaker.GetUnif(-ssdbarrel_dz,ssdbarrel_dz);
326 vpsibarrel = alignMaker.GetUnif(-ssdbarrel_dpsi,ssdbarrel_dpsi);
327 vthetabarrel = alignMaker.GetUnif(-ssdbarrel_dtheta,ssdbarrel_dtheta);
328 vphibarrel = alignMaker.GetUnif(-ssdbarrel_dphi,ssdbarrel_dphi);
329
330 // layer SSD1
331 vx = alignMaker.GetUnif(-ssdlayer_dx,ssdlayer_dx);
332 vy = alignMaker.GetUnif(-ssdlayer_dy,ssdlayer_dy);
333 vz = alignMaker.GetUnif(-ssdlayer_dz,ssdlayer_dz);
334 vpsi = alignMaker.GetUnif(-ssdlayer_dpsi,ssdlayer_dpsi);
335 vtheta = alignMaker.GetUnif(-ssdlayer_dtheta,ssdlayer_dtheta);
336 vphi = alignMaker.GetUnif(-ssdlayer_dphi,ssdlayer_dphi);
337
338 vx += vxbarrel;
339 vy += vybarrel;
340 vz += vzbarrel;
341 vpsi += vpsibarrel;
342 vtheta += vthetabarrel;
343 vphi += vphibarrel;
344
345 alignMaker.AddAlignObj(4,-1,ssdladder_dx,ssdladder_dy,ssdladder_dz,ssdladder_dpsi,ssdladder_dtheta,ssdladder_dphi,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // all SSD1 ladders
259b0bd4 346
02a75e66 347 // layer SSD2
348 vx = alignMaker.GetUnif(-ssdlayer_dx,ssdlayer_dx);
349 vy = alignMaker.GetUnif(-ssdlayer_dy,ssdlayer_dy);
350 vz = alignMaker.GetUnif(-ssdlayer_dz,ssdlayer_dz);
351 vpsi = alignMaker.GetUnif(-ssdlayer_dpsi,ssdlayer_dpsi);
352 vtheta = alignMaker.GetUnif(-ssdlayer_dtheta,ssdlayer_dtheta);
353 vphi = alignMaker.GetUnif(-ssdlayer_dphi,ssdlayer_dphi);
259b0bd4 354
02a75e66 355 vx += vxbarrel;
356 vy += vybarrel;
357 vz += vzbarrel;
358 vpsi += vpsibarrel;
359 vtheta += vthetabarrel;
360 vphi += vphibarrel;
259b0bd4 361
02a75e66 362 alignMaker.AddAlignObj(5,-1,ssdladder_dx,ssdladder_dy,ssdladder_dz,ssdladder_dpsi,ssdladder_dtheta,ssdladder_dphi,vx,vy,vz,vpsi,vtheta,vphi,kFALSE); // all SSD2 ladders
259b0bd4 363
364 //=****************************************
02a75e66 365 // misalignment at the level of ladders (SPD)/modules (SDD,SSD) :
259b0bd4 366 //=****************************************
367
02a75e66 368 alignMaker.AddAlignObj(0,spdladder_dx,spdladder_dy,spdladder_dz,spdladder_dpsi,spdladder_dtheta,spdladder_dphi,kFALSE); // all SPD1 ladders
369 alignMaker.AddAlignObj(1,spdladder_dx,spdladder_dy,spdladder_dz,spdladder_dpsi,spdladder_dtheta,spdladder_dphi,kFALSE); // all SPD2 ladders
259b0bd4 370
02a75e66 371 alignMaker.AddAlignObj(2,sddmodule_dx,sddmodule_dy,sddmodule_dz,sddmodule_dpsi,sddmodule_dtheta,sddmodule_dphi,kFALSE); // all SDD1 modules
372 alignMaker.AddAlignObj(3,sddmodule_dx,sddmodule_dy,sddmodule_dz,sddmodule_dpsi,sddmodule_dtheta,sddmodule_dphi,kFALSE); // all SDD2 modules
259b0bd4 373
02a75e66 374 alignMaker.AddAlignObj(4,ssdmodule_dx,ssdmodule_dy,ssdmodule_dz,ssdmodule_dpsi,ssdmodule_dtheta,ssdmodule_dphi,kFALSE); // all SSD1 modules
375 alignMaker.AddAlignObj(5,ssdmodule_dx,ssdmodule_dy,ssdmodule_dz,ssdmodule_dpsi,ssdmodule_dtheta,ssdmodule_dphi,kFALSE); // all SSD2 modules
259b0bd4 376
377
378
ff3b96d3 379 if(TString(gSystem->Getenv("TOCDB")) != TString("kTRUE")){
1895a097 380 // save on file
dfe9c69d 381 const char* filename = "ITSfullMisalignment.root";
382 TFile f(filename,"RECREATE");
259b0bd4 383 if(!f.IsOpen()){
dfe9c69d 384 Error(macroname,"cannot open file for output\n");
385 return;
386 }
02a75e66 387 Info(macroname,"Saving alignment objects to the file %s",filename);
dfe9c69d 388 f.cd();
259b0bd4 389 f.WriteObject(alignMaker.GetArray(),"ITSAlignObjs","kSingleKey");
1895a097 390 f.Close();
391 }else{
392 // save in CDB storage
1895a097 393 AliCDBMetaData *md= new AliCDBMetaData();
259b0bd4 394 md->SetResponsible("Andrea Dainese");
1895a097 395 md->SetComment("Alignment objects with actual ITS misalignment");
5bd470e1 396 md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
dfe9c69d 397 AliCDBId id("ITS/Align/Data",0,AliCDBRunRange::Infinity());
259b0bd4 398 storage->Put(alignMaker.GetArray(),id,md);
1895a097 399 }
400
1895a097 401
259b0bd4 402 return;
02a75e66 403}
c84c04aa 404