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.2 2006/03/31 11:26:30 arcelli
16 changing CDB Ids according to standard convention
18 Revision 1.1 2006/03/28 14:54:48 arcelli
19 class for TOF alignment
21 author: Silvia Arcelli, arcelli@bo.infn.it
24 #include <TBenchmark.h>
26 #include "TClonesArray.h"
27 #include "TObjString.h"
30 #include "AliModule.h"
31 #include "AliTOFAlignment.h"
32 #include "AliAlignObj.h"
33 #include "AliAlignObjAngles.h"
34 #include "AliCDBManager.h"
35 #include "AliCDBMetaData.h"
36 #include "AliCDBStorage.h"
38 #include "AliCDBEntry.h"
40 ClassImp(AliTOFAlignment)
42 //_____________________________________________________________________________
43 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") {
44 //AliTOFalignment main Ctor
47 fTOFAlignObjArray=0x0;
49 //_____________________________________________________________________________
50 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){
51 //AliTOFAlignment copy Ctor
53 fNTOFAlignObj=t.fNTOFAlignObj;
54 fTOFAlignObjArray=t.fTOFAlignObjArray;
58 //_____________________________________________________________________________
59 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot){
61 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
62 Float_t dx, dy, dz; // shifts
63 Float_t dpsi, dtheta, dphi; // angular displacements
64 TRandom *rnd = new TRandom(1567);
67 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
68 const char *sm71="/BTO1_1";
69 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
70 const char *sm74="/BTO2_1";
71 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
72 const char *sm75="/BTO3_1";
75 Int_t nSM71 = 13, nSM74=2, nSM75=3;
76 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
77 UShort_t iIndex=0; //dummy volume index
78 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
79 // Int_t iIndex=1; //dummy volume index
80 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
82 for (i = 1; i<=nSM71 ; i++) {
84 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM71;
85 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM71;
86 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM71;
88 dtheta = rot[1]/nSM71;
94 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
95 fTOFAlignObjArray->Add(o);
98 for (i = 1; i<=nSM74 ; i++) {
100 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM74;
101 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM74;
102 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM74;
104 dtheta = rot[1]/nSM74;
110 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
111 fTOFAlignObjArray->Add(o);
114 for (i = 1; i<=nSM75; i++) {
116 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM75;
117 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM75;
118 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM75;
120 dtheta = rot[1]/nSM75;
126 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
127 fTOFAlignObjArray->Add(o);
129 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
130 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
134 //_____________________________________________________________________________
135 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot){
137 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
138 Float_t dx, dy, dz; // shifts
139 Float_t dpsi, dtheta, dphi; // angular displacements
141 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
142 const char *sm71="/BTO1_1";
143 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
144 const char *sm74="/BTO2_1";
145 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
146 const char *sm75="/BTO3_1";
149 Int_t nSM71 = 13, nSM74=2, nSM75=3;
150 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
151 UShort_t iIndex=0; //dummy volume index
152 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
153 // Int_t iIndex=1; //dummy volume index
154 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
156 for (i = 1; i<=nSM71 ; i++) {
162 dtheta = rot[1]/nSM71;
168 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
169 fTOFAlignObjArray->Add(o);
172 for (i = 1; i<=nSM74 ; i++) {
178 dtheta = rot[1]/nSM74;
184 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
185 fTOFAlignObjArray->Add(o);
188 for (i = 1; i<=nSM75; i++) {
194 dtheta = rot[1]/nSM75;
200 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
201 fTOFAlignObjArray->Add(o);
203 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
204 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
206 //_____________________________________________________________________________
207 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
208 AliCDBManager *man = AliCDBManager::Instance();
209 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
210 Char_t *sel1 = "AlignPar" ;
212 sprintf(out,"%s/%s",sel,sel1);
213 AliCDBId idTOFAlign(out,minrun,maxrun);
214 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
215 mdTOFAlign->SetResponsible("TOF");
216 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
217 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
219 //_____________________________________________________________________________
220 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun){
221 AliCDBManager *man = AliCDBManager::Instance();
222 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
223 Char_t *sel1 = "AlignPar" ;
225 sprintf(out,"%s/%s",sel,sel1);
226 AliCDBEntry *entry = man->Get(out,nrun);
227 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
228 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
229 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
232 //_____________________________________________________________________________
233 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
234 AliCDBManager *man = AliCDBManager::Instance();
235 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
236 Char_t *sel1 = "AlignSimPar" ;
238 sprintf(out,"%s/%s",sel,sel1);
239 AliCDBId idTOFAlign(out,minrun,maxrun);
240 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
241 mdTOFAlign->SetResponsible("TOF");
242 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
243 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
245 //_____________________________________________________________________________
246 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
247 AliCDBManager *man = AliCDBManager::Instance();
248 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
249 Char_t *sel1 = "AlignSimPar" ;
251 sprintf(out,"%s/%s",sel,sel1);
252 AliCDBEntry *entry = man->Get(out,nrun);
253 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
254 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
255 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
258 //_____________________________________________________________________________
259 void AliTOFAlignment::WriteOnCDBforDC(){
260 AliCDBManager *man = AliCDBManager::Instance();
261 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
262 AliCDBId idTOFAlign("TOF/Align/Data",0,0);
263 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
264 mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
265 mdTOFAlign->SetResponsible("TOF");
266 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
267 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
269 //_____________________________________________________________________________
270 void AliTOFAlignment::ReadFromCDBforDC(){
271 AliCDBManager *man = AliCDBManager::Instance();
272 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
273 AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
274 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
275 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
276 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));