]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - T0/AliT0Align.cxx
Updates on pi0 analysis in p-Pb (Hongsheng)
[u/mrichter/AliRoot.git] / T0 / AliT0Align.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
16/*
17$Log: AliT0Align.cxx,v $
18 Revision 2008/01/30
19Removing code violations
20
21 Version 1.1 2006/10
22Preliminary test version (T.Malkiewicz)
23*/
24
25#include "AliT0Align.h"
26#include "TROOT.h"
27#include "Riostream.h"
28#include "TFile.h"
29#include "TMath.h"
30#include "TSystem.h"
31#include "TString.h"
32#include "AliSurveyObj.h"
33#include "AliAlignObjParams.h"
34#include "AliCDBStorage.h"
35#include <TClonesArray.h>
36#include <TFile.h>
37#include "AliLog.h"
38#include "AliCDBManager.h"
39#include "AliSurveyPoint.h"
40
41// Class creating the T0 aligmnent objects
42// from the surveys done by surveyers at Point2.
43// Survey results are fetched from
44// Survey Depot, based on survey results
45// position of T0 alignment objects is computed.
46
47using std::endl;
48using std::cout;
49ClassImp(AliT0Align)
50
51AliT0Align::AliT0Align() :
52 TObject(),
53 fFileGlob(0x0),
54 fT0AAlignObj(0x0),
55 fT0CAlignObj(0x0),
56 fDebug(0),
57 fXPosC(0.),
58 fYPosC(0.),
59 fXPosA(0.),
60 fYPosA(0.),
61 fRepLoc(0),
62 fRepGlob(0),
63 fSide(0x0),
64 fUser(0x0)
65{
66 //
67 // default constructor
68 //
69}
70//________________________________________________________________________
71AliT0Align::AliT0Align(Int_t reportloc, Int_t side, Int_t reportglob) :
72 TObject(),
73 fFileGlob(0x0),
74 fT0AAlignObj(0x0),
75 fT0CAlignObj(0x0),
76 fDebug(0),
77 fXPosC(0.),
78 fYPosC(0.),
79 fXPosA(0.),
80 fYPosA(0.),
81 fRepLoc(0),
82 fRepGlob(0),
83 fSide(0x0),
84 fUser(0x0)
85{
86 //
87 // constructor - defines data files
88 //
89 fRepLoc = reportloc;
90 fRepGlob = reportglob;
91 fSide = side;
92 // Char_t path[50];
93 TString path = Form("%s",gSystem->Getenv("ALICE_ROOT")) ;
94 // fFileGlob = new Char_t[80];
95 // fUser = new Char_t[10];
96 fFileGlob = Form("%s/T0/Survey_%d_V0.txt",path.Data(),reportglob);
97 fUser = Form("%s/T0/Survey_%d_V0.txt",path.Data(),reportglob);
98 // sprintf(path,gSystem->Getenv("ALICE_ROOT"));
99 //
100 // sprintf(fFileLoc,"%s/T0/Survey_%d_T0.txt",path,reportloc);
101 // sprintf(fFileGlob,"%s/T0/Survey_%d_V0.txt",path,reportglob);
102 //
103 // sprintf(fUser,gSystem->Getenv("alien_API_USER"));
104}
105//_________________________________________________________________________
106AliT0Align::AliT0Align(const AliT0Align &align) :
107 TObject(),
108 fFileGlob(0x0),
109 fT0AAlignObj(0x0),
110 fT0CAlignObj(0x0),
111 fDebug(0),
112 fXPosC(0.),
113 fYPosC(0.),
114 fXPosA(0.),
115 fYPosA(0.),
116 fRepLoc(0),
117 fRepGlob(0),
118 fSide(0x0),
119 fUser(0x0)
120{
121 //
122 // copy constructor - dummy
123 //
124 ((AliT0Align &) align).Copy(*this);
125
126}
127//__________________________________________________________________________
128AliT0Align & AliT0Align::operator =(const AliT0Align & align)
129{
130 //
131 // assignment operator - dummy
132 //
133 if (this != &align) ((AliT0Align &) align).Copy(*this);
134
135 return (*this);
136}
137
138//__________________________________________________________________________
139AliT0Align::~AliT0Align()
140{
141 //
142 // destructor
143 //
144 if(fT0AAlignObj) delete fT0AAlignObj;
145 if(fT0CAlignObj) delete fT0CAlignObj;
146 if(fFileGlob) delete[] fFileGlob;
147 if(fUser) delete[] fUser;
148}
149//__________________________________________________________________________
150Bool_t AliT0Align::LoadSurveyData()
151{
152 //
153 // Create a new survey object and fill it.
154
155 AliSurveyObj * s1 = new AliSurveyObj();
156 const int numberPoints = 2;
157 TString pointNames[numberPoints]={"Flange_0","C67_6_Beamcircle"};
158
159 if(fRepLoc == 0)
160 {
161 //
162 // Filling from DCDB (via GRID)
163 //
164 s1->SetGridUser(fUser);
165 if(fSide == 0)
166 {
167 s1->Fill("T0", fRepGlob, fUser);
168 }
169 else if(fSide == 1)
170 {
171 s1->Fill("VZERO", fRepGlob, fUser);
172 }
173 else
174 {
175 cout<<"Enter the side properly: '0'- A side, '1'- C side'" <<endl;
176 return 0;
177 }
178 }
179 else
180 //
181 // Filling from local file
182 //
183 {
184 s1->FillFromLocalFile(fFileGlob);
185 }
186 //
187 Float_t surveyedPoints [numberPoints][2];
188 AliSurveyPoint *currPoint;
189
190 //
191 for(Int_t i=0;i<numberPoints;i++)
192 {
193 currPoint=0;
194 currPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNames[i]);
195 //
196 if(currPoint)
197 {
198 surveyedPoints[i][0]=currPoint->GetX();
199 surveyedPoints[i][1]=currPoint->GetY();
200 // surveyedPoints[i]=currPoint->GetZ();
201 if(fDebug)
202 Printf("INFO: Point %s coordinates read.\n", pointNames[i].Data() ) ;
203 }
204 else
205 {
206 if(fDebug)
207 {
208 Printf("ERROR: Essential point missing: %s\n", pointNames[i].Data() ) ;
209 return 1;
210 }
211 }
212 }
213 if(fSide == 0)
214 {
215 fXPosA = surveyedPoints[0][0];
216 fYPosA = surveyedPoints[0][1];
217 }
218 else if(fSide == 1)
219 {
220 fXPosC = surveyedPoints[1][0];
221 fYPosC = surveyedPoints[1][1];
222 }
223 //
224 delete s1;
225 //
226 return 0;
227}
228//_________________________________________________________________
229
230Double_t AliT0Align::ComputePosition()
231{
232 // Float_t fZPos, shift;
233 // fZPos = surveyedPoints[3] - shift;
234 return 0;
235}
236//_______________________________________________________________________
237void AliT0Align::CreateAlignObj()
238{
239 //
240 // TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
241 // TClonesArray &alobj = *array;
242
243 Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
244 dx=fXPosA;
245 dy=fYPosA;
246 fT0AAlignObj = new AliAlignObjParams("ALIC_1/0STL_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
247
248 dx=fXPosC;
249 dy=fYPosC;
250 // dz=surveyedPoints[2];
251 dz=0.;
252 fT0CAlignObj = new AliAlignObjParams("ALIC_1/0STR_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
253
254}
255
256//______________________________________________________________________
257void AliT0Align::Run()
258{
259 //
260 // runs the full chain
261 //
262 // SetDebug(0);
263 Bool_t flag = LoadSurveyData();
264 if(flag)
265 {
266 cout<<"Missing points"<<endl;
267 return;
268 }
269 // ComputePosition();
270 CreateAlignObj();
271 StoreAlignObj();
272}
273//_________________________________________________________________________
274
275void AliT0Align::StoreAlignObj()
276{
277 //
278 // Storing T0 alignment objects
279 //
280 AliCDBManager* cdb = AliCDBManager::Instance();
281 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
282 //
283 TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
284//
285 Double_t shifts[3];
286 Double_t rots[3];
287 //
288 fT0AAlignObj->GetPars(shifts,rots);
289 new((*array)[0]) AliAlignObjParams(fT0AAlignObj->GetSymName(),0,shifts[0],
290 shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
291 fT0CAlignObj->GetPars(shifts,rots);
292 new((*array)[1]) AliAlignObjParams(fT0CAlignObj->GetSymName(),0,shifts[0],
293 shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
294
295
296//
297// storing either in the OCDB or local file
298//
299 if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
300 // save on file
301 const char* filename = "T0SurveyMisalignment.root";
302 // Char_t fullname[80];
303 // sprintf(fullname,"%s/T0/Align/Data/%s",gSystem->Getenv("ALICE_ROOT"),filename);
304 TString fullname = Form("%s/T0/Align/Data/%s",gSystem->Getenv("ALICE_ROOT"), filename);
305 TFile *f = new TFile(fullname.Data(),"RECREATE");
306 if(!f){
307 AliError("cannot open file for output\n");
308 return;
309 }
310 AliInfo(Form("Saving alignment objects to the file %s", filename));
311 f->cd();
312 f->WriteObject(array,"T0AlignObjs","kSingleKey");
313 f->Close();
314 }else{
315 // save in CDB storage
316 AliCDBStorage* storage;
317 //
318 TString Storage = gSystem->Getenv("STORAGE");
319 if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
320 AliError(Form(
321 "STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()));
322 return;
323 }
324 storage = cdb->GetStorage(Storage.Data());
325 if(!storage){
326 AliError(Form("Unable to open storage %s\n",Storage.Data()));
327 return;
328 }
329 //
330 AliCDBMetaData* md = new AliCDBMetaData();
331 md->SetResponsible("Tomasz Malkiewicz");
332 md->SetComment("Position of T0-A and T0-C from survey");
333 AliCDBId id("T0/Align/Data",0,AliCDBRunRange::Infinity());
334 storage->Put(array,id,md);
335 }
336}
337