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.11 2006/09/19 14:31:26 cvetan
19 Bugfixes and clean-up of alignment object classes. Introduction of so called symbolic names used to identify the alignable volumes (Raffaele and Cvetan)
21 Revision 1.10 2006/08/22 13:26:05 arcelli
22 removal of effective c++ warnings (C.Zampolli)
24 Revision 1.9 2006/08/10 14:46:54 decaro
25 TOF raw data format: updated version
27 Revision 1.8 2006/05/04 19:41:42 hristov
28 Possibility for partial TOF geometry (S.Arcelli)
30 Revision 1.7 2006/04/27 13:13:29 hristov
31 Moving the destructor to the implementation file
33 Revision 1.6 2006/04/20 22:30:49 hristov
34 Coding conventions (Annalisa)
36 Revision 1.5 2006/04/16 22:29:05 hristov
37 Coding conventions (Annalisa)
39 Revision 1.4 2006/04/05 08:35:38 hristov
40 Coding conventions (S.Arcelli, C.Zampolli)
42 Revision 1.3 2006/03/31 13:49:07 arcelli
43 Removing some junk printout
45 Revision 1.2 2006/03/31 11:26:30 arcelli
46 changing CDB Ids according to standard convention
48 Revision 1.1 2006/03/28 14:54:48 arcelli
49 class for TOF alignment
51 author: Silvia Arcelli, arcelli@bo.infn.it
54 /////////////////////////////////////////////////////////
56 // Class for alignment procedure //
60 /////////////////////////////////////////////////////////
67 #include "AliAlignObj.h"
68 #include "AliAlignObjAngles.h"
69 #include "AliCDBManager.h"
70 #include "AliCDBMetaData.h"
72 #include "AliCDBEntry.h"
73 #include "AliTOFAlignment.h"
75 ClassImp(AliTOFAlignment)
77 //_____________________________________________________________________________
78 AliTOFAlignment::AliTOFAlignment():
79 TTask("AliTOFAlignment",""),
81 fTOFAlignObjArray(0x0)
83 //AliTOFalignment main Ctor
86 //_____________________________________________________________________________
87 AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):
88 TTask("AliTOFAlignment",""),
90 fTOFAlignObjArray(0x0)
92 //AliTOFAlignment copy Ctor
94 fNTOFAlignObj=t.fNTOFAlignObj;
95 fTOFAlignObjArray=t.fTOFAlignObjArray;
99 //_____________________________________________________________________________
100 AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){
101 //AliTOFAlignment assignment operator
103 this->fNTOFAlignObj=t.fNTOFAlignObj;
104 this->fTOFAlignObjArray=t.fTOFAlignObjArray;
109 //_____________________________________________________________________________
110 AliTOFAlignment::~AliTOFAlignment() {delete fTOFAlignObjArray;}
112 //_____________________________________________________________________________
113 void AliTOFAlignment::Smear( Float_t *tr, Float_t *rot)
115 //Introduce Random Offset/Tilts
116 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
117 Float_t dx, dy, dz; // shifts
118 Float_t dpsi, dtheta, dphi; // angular displacements
119 TRandom *rnd = new TRandom(1567);
122 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
123 UShort_t iIndex=0; //dummy volume index
124 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
125 // Int_t iIndex=1; //dummy volume index
126 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
128 for (i = 0; i<nSMTOF ; i++) {
130 sprintf(path,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
132 dx = (rnd->Gaus(0.,1.))*tr[0];
133 dy = (rnd->Gaus(0.,1.))*tr[1];
134 dz = (rnd->Gaus(0.,1.))*tr[2];
138 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
139 fTOFAlignObjArray->Add(o);
142 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
143 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
147 //_____________________________________________________________________________
148 void AliTOFAlignment::Align( Float_t *tr, Float_t *rot)
150 //Introduce Offset/Tilts
152 fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
153 Float_t dx, dy, dz; // shifts
154 Float_t dpsi, dtheta, dphi; // angular displacements
158 AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
159 UShort_t iIndex=0; //dummy volume index
160 // AliAlignObj::ELayerID iLayer = AliAlignObj::kTOF;
161 // Int_t iIndex=1; //dummy volume index
162 UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity
164 for (i = 0; i<nSMTOF ; i++) {
167 sprintf(path,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
175 AliAlignObjAngles *o =new AliAlignObjAngles(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
176 fTOFAlignObjArray->Add(o);
178 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
179 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
181 //_____________________________________________________________________________
182 void AliTOFAlignment::WriteParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
184 //Write Align Par on CDB
185 AliCDBManager *man = AliCDBManager::Instance();
186 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
187 Char_t *sel1 = "AlignPar" ;
189 sprintf(out,"%s/%s",sel,sel1);
190 AliCDBId idTOFAlign(out,minrun,maxrun);
191 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
192 mdTOFAlign->SetResponsible("TOF");
193 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
194 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
196 //_____________________________________________________________________________
197 void AliTOFAlignment::ReadParFromCDB(Char_t *sel, Int_t nrun)
199 //Read Align Par from CDB
200 AliCDBManager *man = AliCDBManager::Instance();
201 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
202 Char_t *sel1 = "AlignPar" ;
204 sprintf(out,"%s/%s",sel,sel1);
205 AliCDBEntry *entry = man->Get(out,nrun);
207 AliError(Form("Failed to get entry: %s",out));
210 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
211 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
212 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
215 //_____________________________________________________________________________
216 void AliTOFAlignment::WriteSimParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
218 //Write Sim Align Par on CDB
219 AliCDBManager *man = AliCDBManager::Instance();
220 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
221 Char_t *sel1 = "AlignSimPar" ;
223 sprintf(out,"%s/%s",sel,sel1);
224 AliCDBId idTOFAlign(out,minrun,maxrun);
225 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
226 mdTOFAlign->SetResponsible("TOF");
227 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
228 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
230 //_____________________________________________________________________________
231 void AliTOFAlignment::ReadSimParFromCDB(Char_t *sel, Int_t nrun){
232 //Read Sim Align Par from CDB
233 AliCDBManager *man = AliCDBManager::Instance();
234 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
235 Char_t *sel1 = "AlignSimPar" ;
237 sprintf(out,"%s/%s",sel,sel1);
238 AliCDBEntry *entry = man->Get(out,nrun);
239 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
240 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
241 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));
244 //_____________________________________________________________________________
245 void AliTOFAlignment::WriteOnCDBforDC()
247 //Write Align Par on CDB for DC06
248 AliCDBManager *man = AliCDBManager::Instance();
249 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
250 AliCDBId idTOFAlign("TOF/Align/Data",0,0);
251 AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
252 mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
253 mdTOFAlign->SetResponsible("TOF");
254 AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
255 man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
257 //_____________________________________________________________________________
258 void AliTOFAlignment::ReadFromCDBforDC()
260 //Read Sim Align Par from CDB for DC06
261 AliCDBManager *man = AliCDBManager::Instance();
262 if(!man->IsDefaultStorageSet())man->SetDefaultStorage("local://$ALICE_ROOT");
263 AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
264 fTOFAlignObjArray=(TObjArray*)entry->GetObject();
265 fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
266 AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));