Task for analysis T0 data
[u/mrichter/AliRoot.git] / T0 / AliT0Align.cxx
CommitLineData
a4c640e1 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
9dcc11e4 16/*
17$Log: AliT0Align.cxx,v $
18 Revision 2008/01/30
19Removing code violations
a4c640e1 20
9dcc11e4 21 Version 1.1 2006/10
22Preliminary test version (T.Malkiewicz)
23*/
a4c640e1 24
25#include "AliT0Align.h"
a4c640e1 26#include "TROOT.h"
27#include "Riostream.h"
28#include "TFile.h"
29#include "TMath.h"
30#include "TSystem.h"
f7350425 31#include "TString.h"
a4c640e1 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"
9dcc11e4 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
cdf48647 47using std::endl;
48using std::cout;
a4c640e1 49ClassImp(AliT0Align)
50
51AliT0Align::AliT0Align() :
52 TObject(),
9dcc11e4 53 fFileGlob(0x0),
a4c640e1 54 fT0AAlignObj(0x0),
55 fT0CAlignObj(0x0),
9dcc11e4 56 fDebug(0),
81c2ef80 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{
a4c640e1 66 //
67 // default constructor
68 //
69}
70//________________________________________________________________________
81c2ef80 71AliT0Align::AliT0Align(Int_t reportloc, Int_t side, Int_t reportglob) :
a4c640e1 72 TObject(),
9dcc11e4 73 fFileGlob(0x0),
a4c640e1 74 fT0AAlignObj(0x0),
75 fT0CAlignObj(0x0),
9dcc11e4 76 fDebug(0),
81c2ef80 77 fXPosC(0.),
78 fYPosC(0.),
79 fXPosA(0.),
80 fYPosA(0.),
81 fRepLoc(0),
82 fRepGlob(0),
83 fSide(0x0),
84 fUser(0x0)
a4c640e1 85{
86 //
87 // constructor - defines data files
88 //
89 fRepLoc = reportloc;
81c2ef80 90 fRepGlob = reportglob;
91 fSide = side;
769a17f9 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"));
a4c640e1 99 //
100 // sprintf(fFileLoc,"%s/T0/Survey_%d_T0.txt",path,reportloc);
769a17f9 101 // sprintf(fFileGlob,"%s/T0/Survey_%d_V0.txt",path,reportglob);
a4c640e1 102 //
769a17f9 103 // sprintf(fUser,gSystem->Getenv("alien_API_USER"));
a4c640e1 104}
105//_________________________________________________________________________
106AliT0Align::AliT0Align(const AliT0Align &align) :
107 TObject(),
9dcc11e4 108 fFileGlob(0x0),
a4c640e1 109 fT0AAlignObj(0x0),
110 fT0CAlignObj(0x0),
9dcc11e4 111 fDebug(0),
81c2ef80 112 fXPosC(0.),
113 fYPosC(0.),
114 fXPosA(0.),
115 fYPosA(0.),
116 fRepLoc(0),
117 fRepGlob(0),
118 fSide(0x0),
119 fUser(0x0)
a4c640e1 120{
121 //
122 // copy constructor - dummy
123 //
57b90263 124 ((AliT0Align &) align).Copy(*this);
125
a4c640e1 126}
127//__________________________________________________________________________
128AliT0Align & AliT0Align::operator =(const AliT0Align & align)
129{
130 //
131 // assignment operator - dummy
132 //
57b90263 133 if (this != &align) ((AliT0Align &) align).Copy(*this);
134
135 return (*this);
a4c640e1 136}
137
138//__________________________________________________________________________
d6ac4d13 139AliT0Align::~AliT0Align()
140{
a4c640e1 141 //
142 // destructor
143 //
144 if(fT0AAlignObj) delete fT0AAlignObj;
145 if(fT0CAlignObj) delete fT0CAlignObj;
203ca5a7 146 if(fFileGlob) delete[] fFileGlob;
d6ac4d13 147 if(fUser) delete[] fUser;
a4c640e1 148}
149//__________________________________________________________________________
150Bool_t AliT0Align::LoadSurveyData()
151{
152 //
153 // Create a new survey object and fill it.
154
155 AliSurveyObj * s1 = new AliSurveyObj();
81c2ef80 156 const int numberPoints = 2;
1e8a79ac 157 TString pointNames[numberPoints]={"Flange_0","C67_6_Beamcircle"};
a4c640e1 158
159 if(fRepLoc == 0)
81c2ef80 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 }
a4c640e1 178 }
a4c640e1 179 else
180 //
181 // Filling from local file
182 //
183 {
184 s1->FillFromLocalFile(fFileGlob);
185 }
186 //
81c2ef80 187 Float_t surveyedPoints [numberPoints][2];
a4c640e1 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)
093a8821 202 Printf("INFO: Point %s coordinates read.\n", pointNames[i].Data() ) ;
a4c640e1 203 }
204 else
205 {
206 if(fDebug)
207 {
093a8821 208 Printf("ERROR: Essential point missing: %s\n", pointNames[i].Data() ) ;
a4c640e1 209 return 1;
210 }
211 }
212 }
81c2ef80 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 }
a4c640e1 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;
a80ab6cd 234 return 0;
a4c640e1 235}
236//_______________________________________________________________________
81c2ef80 237void AliT0Align::CreateAlignObj()
238{
a4c640e1 239 //
a9ab7568 240 // TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
a4c640e1 241 // TClonesArray &alobj = *array;
242
a4c640e1 243 Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
81c2ef80 244 dx=fXPosA;
245 dy=fYPosA;
a4c640e1 246 fT0AAlignObj = new AliAlignObjParams("ALIC_1/0STL_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
247
81c2ef80 248 dx=fXPosC;
249 dy=fYPosC;
a4c640e1 250 // dz=surveyedPoints[2];
251 dz=0.;
252 fT0CAlignObj = new AliAlignObjParams("ALIC_1/0STR_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
81c2ef80 253
a4c640e1 254}
255
256//______________________________________________________________________
81c2ef80 257void AliT0Align::Run()
258{
a4c640e1 259 //
260 // runs the full chain
261 //
cd2b94bd 262 // SetDebug(0);
a4c640e1 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{
9dcc11e4 277 //
278 // Storing T0 alignment objects
279 //
a4c640e1 280 AliCDBManager* cdb = AliCDBManager::Instance();
162637e4 281 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
a4c640e1 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";
f7350425 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");
a4c640e1 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");
81c2ef80 332 md->SetComment("Position of T0-A and T0-C from survey");
a4c640e1 333 AliCDBId id("T0/Align/Data",0,AliCDBRunRange::Infinity());
334 storage->Put(array,id,md);
335 }
336}
337