1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 ***************************************************************************/
18 Revision 1.5 2006/04/16 22:29:05 hristov
19 Coding conventions (Annalisa)
21 Revision 1.4 2006/04/05 08:35:38 hristov
22 Coding conventions (S.Arcelli, C.Zampolli)
24 Revision 1.3 2006/03/31 13:49:07 arcelli
25 Removing some junk printout
27 Revision 1.2 2006/03/31 11:26:30 arcelli
28 changing CDB Ids according to standard convention
30 Revision 1.1 2006/03/28 14:54:48 arcelli
31 class for TOF alignment
33 author: Silvia Arcelli, arcelli@bo.infn.it
36 /////////////////////////////////////////////////////////
38 // Class for alignment procedure //
42 /////////////////////////////////////////////////////////
50 #include "AliAlignObj.h"
51 #include "AliAlignObjAngles.h"
52 #include "AliCDBManager.h"
53 #include "AliCDBMetaData.h"
55 #include "AliCDBEntry.h"
56 #include "AliTOFAlignment.h"
58 ClassImp(AliTOFAlignment)
60 //_____________________________________________________________________________
61 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") {
62 //AliTOFalignment main Ctor
65 fTOFAlignObjArray=0x0;
67 //_____________________________________________________________________________
68 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){
69 //AliTOFAlignment copy Ctor
71 fNTOFAlignObj=t.fNTOFAlignObj;
72 fTOFAlignObjArray=t.fTOFAlignObjArray;
76 //_____________________________________________________________________________
77 AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){
78 //AliTOFAlignment assignment operator
80 this->fNTOFAlignObj=t.fNTOFAlignObj;
81 this->fTOFAlignObjArray=t.fTOFAlignObjArray;
86 //_____________________________________________________________________________
87 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
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);
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";
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
111 for (i = 1; i<=nSM71 ; i++) {
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;
117 dtheta = rot[1]/nSM71;
123 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
124 fTOFAlignObjArray->Add(o);
127 for (i = 1; i<=nSM74 ; i++) {
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;
133 dtheta = rot[1]/nSM74;
139 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
140 fTOFAlignObjArray->Add(o);
143 for (i = 1; i<=nSM75; i++) {
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;
149 dtheta = rot[1]/nSM75;
155 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
156 fTOFAlignObjArray->Add(o);
158 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
159 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
163 //_____________________________________________________________________________
164 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
166 //Introduce Offset/Tilts
168 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
169 Float_t dx, dy, dz; // shifts
170 Float_t dpsi, dtheta, dphi; // angular displacements
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";
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
187 for (i = 1; i<=nSM71 ; i++) {
193 dtheta = rot[1]/nSM71;
199 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
200 fTOFAlignObjArray->Add(o);
203 for (i = 1; i<=nSM74 ; i++) {
209 dtheta = rot[1]/nSM74;
215 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
216 fTOFAlignObjArray->Add(o);
219 for (i = 1; i<=nSM75; i++) {
225 dtheta = rot[1]/nSM75;
231 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
232 fTOFAlignObjArray->Add(o);
234 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
235 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
237 //_____________________________________________________________________________
238 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
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" ;
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);
252 //_____________________________________________________________________________
253 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
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" ;
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));
267 //_____________________________________________________________________________
268 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
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" ;
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);
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" ;
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));
296 //_____________________________________________________________________________
297 void AliTOFAlignment::WriteOnCDBforDC()
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);
309 //_____________________________________________________________________________
310 void AliTOFAlignment::ReadFromCDBforDC()
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));