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. *
15 Revision 1.4 2006/04/05 08:35:38 hristov
16 Coding conventions (S.Arcelli, C.Zampolli)
18 Revision 1.3 2006/03/31 13:49:07 arcelli
19 Removing some junk printout
21 Revision 1.2 2006/03/31 11:26:30 arcelli
22 changing CDB Ids according to standard convention
24 Revision 1.1 2006/03/28 14:54:48 arcelli
25 class for TOF alignment
27 author: Silvia Arcelli, arcelli@bo.infn.it
30 #include <TBenchmark.h>
32 #include "TClonesArray.h"
33 #include "TObjString.h"
36 #include "AliModule.h"
37 #include "AliTOFAlignment.h"
38 #include "AliAlignObj.h"
39 #include "AliAlignObjAngles.h"
40 #include "AliCDBManager.h"
41 #include "AliCDBMetaData.h"
42 #include "AliCDBStorage.h"
44 #include "AliCDBEntry.h"
46 ClassImp(AliTOFAlignment)
48 //_____________________________________________________________________________
49 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") {
50 //AliTOFalignment main Ctor
53 fTOFAlignObjArray=0x0;
55 //_____________________________________________________________________________
56 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){
57 //AliTOFAlignment copy Ctor
59 fNTOFAlignObj=t.fNTOFAlignObj;
60 fTOFAlignObjArray=t.fTOFAlignObjArray;
64 //_____________________________________________________________________________
65 AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){
66 //AliTOFAlignment assignment operator
68 this->fNTOFAlignObj=t.fNTOFAlignObj;
69 this->fTOFAlignObjArray=t.fTOFAlignObjArray;
74 //_____________________________________________________________________________
75 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
77 //Introduce Random Offset/Tilts
78 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
79 Float_t dx, dy, dz; // shifts
80 Float_t dpsi, dtheta, dphi; // angular displacements
81 TRandom *rnd = new TRandom(1567);
84 const char *sSM71="/ALIC_1/B077_1/B071_"; //1-13
85 const char *sm71="/BTO1_1";
86 const char *sSM74="/ALIC_1/B077_1/B074_"; //1-2
87 const char *sm74="/BTO2_1";
88 const char *sSM75="/ALIC_1/B077_1/B075_"; //1-3
89 const char *sm75="/BTO3_1";
92 Int_t nSM71 = 13, nSM74=2, nSM75=3;
93 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
94 UShort_t iIndex=0; //dummy volume index
95 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
96 // Int_t iIndex=1; //dummy volume index
97 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
99 for (i = 1; i<=nSM71 ; i++) {
101 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM71;
102 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM71;
103 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM71;
105 dtheta = rot[1]/nSM71;
111 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
112 fTOFAlignObjArray->Add(o);
115 for (i = 1; i<=nSM74 ; i++) {
117 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM74;
118 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM74;
119 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM74;
121 dtheta = rot[1]/nSM74;
127 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
128 fTOFAlignObjArray->Add(o);
131 for (i = 1; i<=nSM75; i++) {
133 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM75;
134 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM75;
135 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM75;
137 dtheta = rot[1]/nSM75;
143 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
144 fTOFAlignObjArray->Add(o);
146 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
147 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
151 //_____________________________________________________________________________
152 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
154 //Introduce Offset/Tilts
156 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
157 Float_t dx, dy, dz; // shifts
158 Float_t dpsi, dtheta, dphi; // angular displacements
160 const char *sSM71="/ALIC_1/B077_1/B071_"; //1-13
161 const char *sm71="/BTO1_1";
162 const char *sSM74="/ALIC_1/B077_1/B074_"; //1-2
163 const char *sm74="/BTO2_1";
164 const char *sSM75="/ALIC_1/B077_1/B075_"; //1-3
165 const char *sm75="/BTO3_1";
168 Int_t nSM71 = 13, nSM74=2, nSM75=3;
169 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
170 UShort_t iIndex=0; //dummy volume index
171 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
172 // Int_t iIndex=1; //dummy volume index
173 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
175 for (i = 1; i<=nSM71 ; i++) {
181 dtheta = rot[1]/nSM71;
187 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
188 fTOFAlignObjArray->Add(o);
191 for (i = 1; i<=nSM74 ; i++) {
197 dtheta = rot[1]/nSM74;
203 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
204 fTOFAlignObjArray->Add(o);
207 for (i = 1; i<=nSM75; i++) {
213 dtheta = rot[1]/nSM75;
219 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
220 fTOFAlignObjArray->Add(o);
222 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
223 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
225 //_____________________________________________________________________________
226 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
228 //Write Align Par on CDB
229 AliCDBManager *man = AliCDBManager::Instance();
230 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
231 Char_t *sel1 = "AlignPar" ;
233 sprintf(out,"%s/%s",sel,sel1);
234 AliCDBId idTOFAlign(out,minrun,maxrun);
235 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
236 mdTOFAlign->SetResponsible("TOF");
237 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
238 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
240 //_____________________________________________________________________________
241 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
243 //Read Align Par from CDB
244 AliCDBManager *man = AliCDBManager::Instance();
245 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
246 Char_t *sel1 = "AlignPar" ;
248 sprintf(out,"%s/%s",sel,sel1);
249 AliCDBEntry *entry = man->Get(out,nrun);
250 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
251 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
252 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
255 //_____________________________________________________________________________
256 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
258 //Write Sim Align Par on CDB
259 AliCDBManager *man = AliCDBManager::Instance();
260 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
261 Char_t *sel1 = "AlignSimPar" ;
263 sprintf(out,"%s/%s",sel,sel1);
264 AliCDBId idTOFAlign(out,minrun,maxrun);
265 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
266 mdTOFAlign->SetResponsible("TOF");
267 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
268 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
270 //_____________________________________________________________________________
271 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
272 //Read Sim Align Par from CDB
273 AliCDBManager *man = AliCDBManager::Instance();
274 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
275 Char_t *sel1 = "AlignSimPar" ;
277 sprintf(out,"%s/%s",sel,sel1);
278 AliCDBEntry *entry = man->Get(out,nrun);
279 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
280 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
281 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
284 //_____________________________________________________________________________
285 void AliTOFAlignment::WriteOnCDBforDC()
287 //Write Align Par on CDB for DC06
288 AliCDBManager *man = AliCDBManager::Instance();
289 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
290 AliCDBId idTOFAlign("TOF/Align/Data",0,0);
291 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
292 mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
293 mdTOFAlign->SetResponsible("TOF");
294 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
295 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
297 //_____________________________________________________________________________
298 void AliTOFAlignment::ReadFromCDBforDC()
300 //Read Sim Align Par from CDB for DC06
301 AliCDBManager *man = AliCDBManager::Instance();
302 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
303 AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
304 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
305 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
306 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));