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.1 2006/03/28 14:54:48 arcelli
16 class for TOF alignment
18 author: Silvia Arcelli, arcelli@bo.infn.it
21 #include <TBenchmark.h>
23 #include "TClonesArray.h"
24 #include "TObjString.h"
27 #include "AliModule.h"
28 #include "AliTOFAlignment.h"
29 #include "AliAlignObj.h"
30 #include "AliAlignObjAngles.h"
31 #include "AliCDBManager.h"
32 #include "AliCDBMetaData.h"
33 #include "AliCDBStorage.h"
35 #include "AliCDBEntry.h"
37 ClassImp(AliTOFAlignment)
39 //_____________________________________________________________________________
40 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") {
41 //AliTOFalignment main Ctor
44 fTOFAlignObjArray=0x0;
46 //_____________________________________________________________________________
47 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){
48 //AliTOFAlignment copy Ctor
50 fNTOFAlignObj=t.fNTOFAlignObj;
51 fTOFAlignObjArray=t.fTOFAlignObjArray;
55 //_____________________________________________________________________________
56 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot){
58 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
59 Float_t dx, dy, dz; // shifts
60 Float_t dpsi, dtheta, dphi; // angular displacements
61 TRandom *rnd = new TRandom(1567);
64 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
65 const char *sm71="/BTO1_1";
66 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
67 const char *sm74="/BTO2_1";
68 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
69 const char *sm75="/BTO3_1";
72 Int_t nSM71 = 13, nSM74=2, nSM75=3;
73 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
74 UShort_t iIndex=0; //dummy volume index
75 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
76 // Int_t iIndex=1; //dummy volume index
77 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
79 for (i = 1; i<=nSM71 ; i++) {
81 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM71;
82 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM71;
83 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM71;
85 dtheta = rot[1]/nSM71;
91 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
92 fTOFAlignObjArray->Add(o);
95 for (i = 1; i<=nSM74 ; i++) {
97 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM74;
98 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM74;
99 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM74;
101 dtheta = rot[1]/nSM74;
107 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
108 fTOFAlignObjArray->Add(o);
111 for (i = 1; i<=nSM75; i++) {
113 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM75;
114 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM75;
115 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM75;
117 dtheta = rot[1]/nSM75;
123 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
124 fTOFAlignObjArray->Add(o);
126 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
127 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
131 //_____________________________________________________________________________
132 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot){
134 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
135 Float_t dx, dy, dz; // shifts
136 Float_t dpsi, dtheta, dphi; // angular displacements
138 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
139 const char *sm71="/BTO1_1";
140 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
141 const char *sm74="/BTO2_1";
142 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
143 const char *sm75="/BTO3_1";
146 Int_t nSM71 = 13, nSM74=2, nSM75=3;
147 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
148 UShort_t iIndex=0; //dummy volume index
149 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
150 // Int_t iIndex=1; //dummy volume index
151 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
153 for (i = 1; i<=nSM71 ; i++) {
159 dtheta = rot[1]/nSM71;
165 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
166 fTOFAlignObjArray->Add(o);
169 for (i = 1; i<=nSM74 ; i++) {
175 dtheta = rot[1]/nSM74;
181 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
182 fTOFAlignObjArray->Add(o);
185 for (i = 1; i<=nSM75; i++) {
191 dtheta = rot[1]/nSM75;
197 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
198 fTOFAlignObjArray->Add(o);
200 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
201 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
202 AliInfo("Sono nel cesso");
204 //_____________________________________________________________________________
205 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
206 AliCDBManager *man = AliCDBManager::Instance();
207 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
208 Char_t *sel1 = "AlignPar" ;
210 sprintf(out,"%s/%s",sel,sel1);
211 AliCDBId idTOFAlign(out,minrun,maxrun);
212 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
213 mdTOFAlign->SetResponsible("TOF");
214 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
215 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
217 //_____________________________________________________________________________
218 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun){
219 AliCDBManager *man = AliCDBManager::Instance();
220 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
221 Char_t *sel1 = "AlignPar" ;
223 sprintf(out,"%s/%s",sel,sel1);
224 AliCDBEntry *entry = man->Get(out,nrun);
225 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
226 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
227 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
230 //_____________________________________________________________________________
231 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
232 AliCDBManager *man = AliCDBManager::Instance();
233 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
234 Char_t *sel1 = "AlignSimPar" ;
236 sprintf(out,"%s/%s",sel,sel1);
237 AliCDBId idTOFAlign(out,minrun,maxrun);
238 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
239 mdTOFAlign->SetResponsible("TOF");
240 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
241 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
243 //_____________________________________________________________________________
244 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
245 AliCDBManager *man = AliCDBManager::Instance();
246 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
247 Char_t *sel1 = "AlignSimPar" ;
249 sprintf(out,"%s/%s",sel,sel1);
250 AliCDBEntry *entry = man->Get(out,nrun);
251 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
252 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
253 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
256 //_____________________________________________________________________________
257 void AliTOFAlignment::WriteOnCDBforDC(){
258 AliCDBManager *man = AliCDBManager::Instance();
259 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
260 AliCDBId idTOFAlign("TOF/Align/Data",0,0);
261 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
262 mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
263 mdTOFAlign->SetResponsible("TOF");
264 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
265 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
267 //_____________________________________________________________________________
268 void AliTOFAlignment::ReadFromCDBforDC(){
269 AliCDBManager *man = AliCDBManager::Instance();
270 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
271 AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
272 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
273 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
274 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));