]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TOF/AliTOFAlignment.cxx
4c9d84879cb4ebbfcaab263f3fd8d4bb97d307aa
[u/mrichter/AliRoot.git] / TOF / AliTOFAlignment.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14 ***************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.5  2006/04/16 22:29:05  hristov
19 Coding conventions (Annalisa)
20
21 Revision 1.4  2006/04/05 08:35:38  hristov
22 Coding conventions (S.Arcelli, C.Zampolli)
23
24 Revision 1.3  2006/03/31 13:49:07  arcelli
25 Removing some junk printout
26
27 Revision 1.2  2006/03/31 11:26:30  arcelli
28  changing CDB Ids according to standard convention
29
30 Revision 1.1  2006/03/28 14:54:48  arcelli
31 class for TOF alignment
32
33 author: Silvia Arcelli, arcelli@bo.infn.it
34 */  
35
36 /////////////////////////////////////////////////////////
37 //                                                     //
38 //            Class for alignment procedure            //
39 //                                                     //
40 //                                                     //
41 //                                                     //
42 /////////////////////////////////////////////////////////
43
44 #include <Rtypes.h>
45
46 #include "TRandom.h"
47 #include "TString.h"
48
49 #include "AliLog.h"
50 #include "AliAlignObj.h"
51 #include "AliAlignObjAngles.h"
52 #include "AliCDBManager.h"
53 #include "AliCDBMetaData.h"
54 #include "AliCDBId.h"
55 #include "AliCDBEntry.h"
56 #include "AliTOFAlignment.h"
57
58 ClassImp(AliTOFAlignment)
59
60 //_____________________________________________________________________________
61 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") { 
62   //AliTOFalignment main Ctor
63
64   fNTOFAlignObj=0;
65   fTOFAlignObjArray=0x0;
66 }
67 //_____________________________________________________________________________
68 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){ 
69   //AliTOFAlignment copy Ctor
70
71   fNTOFAlignObj=t.fNTOFAlignObj;
72   fTOFAlignObjArray=t.fTOFAlignObjArray;
73
74 }
75
76 //_____________________________________________________________________________
77 AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){ 
78   //AliTOFAlignment assignment operator
79
80   this->fNTOFAlignObj=t.fNTOFAlignObj;
81   this->fTOFAlignObjArray=t.fTOFAlignObjArray;
82   return *this;
83
84 }
85
86 //_____________________________________________________________________________
87 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
88 {
89   //Introduce Random Offset/Tilts
90   fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
91   Float_t dx, dy, dz;  // shifts
92   Float_t dpsi, dtheta, dphi; // angular displacements
93   TRandom *rnd   = new TRandom(1567);
94
95   TString path;
96   const char *sSM71="/ALIC_1/B077_1/B071_"; //1-13
97   const char *sm71="/BTO1_1";
98   const char *sSM74="/ALIC_1/B077_1/B074_"; //1-2
99   const char *sm74="/BTO2_1";
100   const char *sSM75="/ALIC_1/B077_1/B075_"; //1-3
101   const char *sm75="/BTO3_1";
102
103
104   Int_t nSM71 = 13, nSM74=2, nSM75=3;
105   AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
106   UShort_t iIndex=0; //dummy volume index
107   //  AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
108   //  Int_t iIndex=1; //dummy volume index
109   UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
110   Int_t i;
111   for (i = 1; i<=nSM71 ; i++) {
112
113     dx = (rnd->Gaus(0.,1.))*tr[0]/nSM71;
114     dy = (rnd->Gaus(0.,1.))*tr[1]/nSM71;
115     dz = (rnd->Gaus(0.,1.))*tr[2]/nSM71;
116     dpsi   = rot[0]/nSM71;
117     dtheta = rot[1]/nSM71;
118     dphi   = rot[2]/nSM71;
119     
120     path = sSM71;
121     path += i;
122     path += sm71;
123     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
124     fTOFAlignObjArray->Add(o);
125   }
126
127   for (i = 1; i<=nSM74 ; i++) {
128
129     dx = (rnd->Gaus(0.,1.))*tr[0]/nSM74;
130     dy = (rnd->Gaus(0.,1.))*tr[1]/nSM74;
131     dz = (rnd->Gaus(0.,1.))*tr[2]/nSM74;
132     dpsi   = rot[0]/nSM74;
133     dtheta = rot[1]/nSM74;
134     dphi   = rot[2]/nSM74;
135     
136     path = sSM74;
137     path += i;
138     path += sm74;
139     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
140     fTOFAlignObjArray->Add(o);
141   }
142
143   for (i = 1; i<=nSM75; i++) {
144
145     dx = (rnd->Gaus(0.,1.))*tr[0]/nSM75;
146     dy = (rnd->Gaus(0.,1.))*tr[1]/nSM75;
147     dz = (rnd->Gaus(0.,1.))*tr[2]/nSM75;
148     dpsi   = rot[0]/nSM75;
149     dtheta = rot[1]/nSM75;
150     dphi   = rot[2]/nSM75;
151     
152     path = sSM75;
153     path += i;
154     path += sm75;
155     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
156     fTOFAlignObjArray->Add(o);
157   }
158   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
159   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
160   delete rnd;
161 }
162
163 //_____________________________________________________________________________
164 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
165 {
166   //Introduce Offset/Tilts
167
168   fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
169   Float_t dx, dy, dz;  // shifts
170   Float_t dpsi, dtheta, dphi; // angular displacements
171   TString path;
172   const char *sSM71="/ALIC_1/B077_1/B071_"; //1-13
173   const char *sm71="/BTO1_1";
174   const char *sSM74="/ALIC_1/B077_1/B074_"; //1-2
175   const char *sm74="/BTO2_1";
176   const char *sSM75="/ALIC_1/B077_1/B075_"; //1-3
177   const char *sm75="/BTO3_1";
178
179
180   Int_t nSM71 = 13, nSM74=2, nSM75=3;
181   AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
182   UShort_t iIndex=0; //dummy volume index
183   //  AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
184   //  Int_t iIndex=1; //dummy volume index
185   UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
186   Int_t i;
187   for (i = 1; i<=nSM71 ; i++) {
188
189     dx = tr[0]/nSM71;
190     dy = tr[1]/nSM71;
191     dz = tr[2]/nSM71;
192     dpsi   = rot[0]/nSM71;
193     dtheta = rot[1]/nSM71;
194     dphi   = rot[2]/nSM71;
195     
196     path = sSM71;
197     path += i;
198     path += sm71;
199     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
200     fTOFAlignObjArray->Add(o);
201   }
202
203   for (i = 1; i<=nSM74 ; i++) {
204
205     dx = tr[0]/nSM74;
206     dy = tr[1]/nSM74;
207     dz = tr[2]/nSM74;
208     dpsi   = rot[0]/nSM74;
209     dtheta = rot[1]/nSM74;
210     dphi   = rot[2]/nSM74;
211     
212     path = sSM74;
213     path += i;
214     path += sm74;
215     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
216     fTOFAlignObjArray->Add(o);
217   }
218
219   for (i = 1; i<=nSM75; i++) {
220
221     dx = tr[0]/nSM75;
222     dy = tr[1]/nSM75;
223     dz = tr[2]/nSM75;
224     dpsi   = rot[0]/nSM75;
225     dtheta = rot[1]/nSM75;
226     dphi   = rot[2]/nSM75;
227     
228     path = sSM75;
229     path += i;
230     path += sm75;
231     AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
232     fTOFAlignObjArray->Add(o);
233   }
234   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
235   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
236 }
237 //_____________________________________________________________________________
238 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
239 {
240   //Write Align Par on CDB
241   AliCDBManager *man = AliCDBManager::Instance();
242   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
243   Char_t *sel1 = "AlignPar" ;
244   Char_t  out[100];
245   sprintf(out,"%s/%s",sel,sel1); 
246   AliCDBId idTOFAlign(out,minrun,maxrun);
247   AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
248   mdTOFAlign->SetResponsible("TOF");
249   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
250   man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
251 }
252 //_____________________________________________________________________________
253 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
254 {
255   //Read Align Par from CDB
256   AliCDBManager *man = AliCDBManager::Instance();
257   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
258   Char_t *sel1 = "AlignPar" ;
259   Char_t  out[100];
260   sprintf(out,"%s/%s",sel,sel1); 
261   AliCDBEntry *entry = man->Get(out,nrun);
262   fTOFAlignObjArray=(TObjArray*)entry->GetObject();
263   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
264   AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
265
266 }
267 //_____________________________________________________________________________
268 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
269 {
270   //Write Sim Align Par on CDB
271   AliCDBManager *man = AliCDBManager::Instance();
272   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
273   Char_t *sel1 = "AlignSimPar" ;
274   Char_t  out[100];
275   sprintf(out,"%s/%s",sel,sel1); 
276   AliCDBId idTOFAlign(out,minrun,maxrun);
277   AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
278   mdTOFAlign->SetResponsible("TOF");
279   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
280   man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
281 }
282 //_____________________________________________________________________________
283 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
284   //Read Sim Align Par from CDB
285   AliCDBManager *man = AliCDBManager::Instance();
286   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
287   Char_t *sel1 = "AlignSimPar" ;
288   Char_t  out[100];
289   sprintf(out,"%s/%s",sel,sel1); 
290   AliCDBEntry *entry = man->Get(out,nrun);
291   fTOFAlignObjArray=(TObjArray*)entry->GetObject();
292   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
293   AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
294
295 }
296 //_____________________________________________________________________________
297 void AliTOFAlignment::WriteOnCDBforDC()
298 {
299   //Write Align Par on CDB for DC06
300   AliCDBManager *man = AliCDBManager::Instance();
301   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
302   AliCDBId idTOFAlign("TOF/Align/Data",0,0);
303   AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
304   mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
305   mdTOFAlign->SetResponsible("TOF");
306   AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
307   man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
308 }
309 //_____________________________________________________________________________
310 void AliTOFAlignment::ReadFromCDBforDC()
311 {
312   //Read Sim Align Par from CDB for DC06
313   AliCDBManager *man = AliCDBManager::Instance();
314   if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
315   AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
316   fTOFAlignObjArray=(TObjArray*)entry->GetObject();
317   fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
318   AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
319
320 }