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 author: Silvia Arcelli, arcelli@bo.infn.it
18 #include <TBenchmark.h>
20 #include "TClonesArray.h"
21 #include "TObjString.h"
24 #include "AliModule.h"
25 #include "AliTOFAlignment.h"
26 #include "AliAlignObj.h"
27 #include "AliAlignObjAngles.h"
28 #include "AliCDBManager.h"
29 #include "AliCDBMetaData.h"
30 #include "AliCDBStorage.h"
32 #include "AliCDBEntry.h"
34 ClassImp(AliTOFAlignment)
36 //_____________________________________________________________________________
37 AliTOFAlignment::AliTOFAlignment():TTask("AliTOFAlignment","") {
38 //AliTOFalignment main Ctor
41 fTOFAlignObjArray=0x0;
43 //_____________________________________________________________________________
44 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):TTask("AliTOFAlignment",""){
45 //AliTOFAlignment copy Ctor
47 fNTOFAlignObj=t.fNTOFAlignObj;
48 fTOFAlignObjArray=t.fTOFAlignObjArray;
52 //_____________________________________________________________________________
53 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot){
55 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
56 Float_t dx, dy, dz; // shifts
57 Float_t dpsi, dtheta, dphi; // angular displacements
58 TRandom *rnd = new TRandom(1567);
61 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
62 const char *sm71="/BTO1_1";
63 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
64 const char *sm74="/BTO2_1";
65 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
66 const char *sm75="/BTO3_1";
69 Int_t nSM71 = 13, nSM74=2, nSM75=3;
70 AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
71 Int_t iIndex=1; //dummy volume index
72 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
74 for (i = 1; i<=nSM71 ; i++) {
76 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM71;
77 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM71;
78 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM71;
80 dtheta = rot[1]/nSM71;
86 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
87 fTOFAlignObjArray->Add(o);
90 for (i = 1; i<=nSM74 ; i++) {
92 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM74;
93 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM74;
94 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM74;
96 dtheta = rot[1]/nSM74;
102 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
103 fTOFAlignObjArray->Add(o);
106 for (i = 1; i<=nSM75; i++) {
108 dx = (rnd->Gaus(0.,1.))*tr[0]/nSM75;
109 dy = (rnd->Gaus(0.,1.))*tr[1]/nSM75;
110 dz = (rnd->Gaus(0.,1.))*tr[2]/nSM75;
112 dtheta = rot[1]/nSM75;
118 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
119 fTOFAlignObjArray->Add(o);
121 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
122 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
126 //_____________________________________________________________________________
127 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot){
129 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
130 Float_t dx, dy, dz; // shifts
131 Float_t dpsi, dtheta, dphi; // angular displacements
133 const char *SM71="/ALIC_1/B077_1/B071_"; //1-13
134 const char *sm71="/BTO1_1";
135 const char *SM74="/ALIC_1/B077_1/B074_"; //1-2
136 const char *sm74="/BTO2_1";
137 const char *SM75="/ALIC_1/B077_1/B075_"; //1-3
138 const char *sm75="/BTO3_1";
141 Int_t nSM71 = 13, nSM74=2, nSM75=3;
142 AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
143 Int_t iIndex=1; //dummy volume index
144 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
146 for (i = 1; i<=nSM71 ; i++) {
152 dtheta = rot[1]/nSM71;
158 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
159 fTOFAlignObjArray->Add(o);
162 for (i = 1; i<=nSM74 ; i++) {
168 dtheta = rot[1]/nSM74;
174 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
175 fTOFAlignObjArray->Add(o);
178 for (i = 1; i<=nSM75; i++) {
184 dtheta = rot[1]/nSM75;
190 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
191 fTOFAlignObjArray->Add(o);
193 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
194 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
196 //_____________________________________________________________________________
197 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
198 AliCDBManager *man = AliCDBManager::Instance();
199 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
200 Char_t *sel1 = "AlignPar" ;
202 sprintf(out,"%s/%s",sel,sel1);
203 AliCDBId idTOFAlign(out,minrun,maxrun);
204 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
205 mdTOFAlign->SetResponsible("TOF");
206 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
207 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
209 //_____________________________________________________________________________
210 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun){
211 AliCDBManager *man = AliCDBManager::Instance();
212 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
213 Char_t *sel1 = "AlignPar" ;
215 sprintf(out,"%s/%s",sel,sel1);
216 AliCDBEntry *entry = man->Get(out,nrun);
217 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
218 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
219 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
222 //_____________________________________________________________________________
223 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun){
224 AliCDBManager *man = AliCDBManager::Instance();
225 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
226 Char_t *sel1 = "AlignSimPar" ;
228 sprintf(out,"%s/%s",sel,sel1);
229 AliCDBId idTOFAlign(out,minrun,maxrun);
230 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
231 mdTOFAlign->SetResponsible("TOF");
232 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
233 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
235 //_____________________________________________________________________________
236 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
237 AliCDBManager *man = AliCDBManager::Instance();
238 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
239 Char_t *sel1 = "AlignSimPar" ;
241 sprintf(out,"%s/%s",sel,sel1);
242 AliCDBEntry *entry = man->Get(out,nrun);
243 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
244 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
245 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));