Coding conventions
[u/mrichter/AliRoot.git] / T0 / AliT0Align.cxx
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 // Class creating the T0 aligmnent objects from the surveys.
17
18 //
19 //  Creates the T0 align object
20 //
21
22 #include "AliT0Align.h"
23 //
24 #include "TROOT.h"
25 #include "Riostream.h"
26 #include "TFile.h"
27 #include "TMath.h"
28 #include "TSystem.h"
29 #include "AliSurveyObj.h"
30 #include "AliSurveyPoint.h"
31 #include "AliAlignObjParams.h"
32 #include "AliCDBStorage.h"
33 #include <TClonesArray.h>
34 #include <TFile.h>
35 #include "AliLog.h"
36 #include "AliCDBManager.h"
37
38 ClassImp(AliT0Align)
39
40 AliT0Align::AliT0Align() :
41   TObject(),
42   fT0AAlignObj(0x0),
43   fT0CAlignObj(0x0),
44   fFileGlob(0x0),
45   fXPos(0.),
46   fYPos(0.),
47   fDebug(0),
48   fRepLoc(0)
49 {
50   //
51   //  default constructor
52   //
53 }   
54 //________________________________________________________________________
55 AliT0Align::AliT0Align(Int_t reportloc, Int_t reportglob) :
56   TObject(),
57   fT0AAlignObj(0x0),
58   fT0CAlignObj(0x0),
59   fFileGlob(0x0),
60   fXPos(0.),
61   fYPos(0.),
62   fDebug(0),
63   fRepLoc(0)
64 {
65   //
66   // constructor - defines data files
67   //
68   fRepLoc = reportloc;
69   Char_t path[50];
70   fFileGlob = new Char_t[80];
71   sprintf(path,gSystem->Getenv("ALICE_ROOT")); 
72   //
73   // sprintf(fFileLoc,"%s/T0/Survey_%d_T0.txt",path,reportloc);
74   sprintf(fFileGlob,"%s/T0/Survey_%d_V0.txt",path,reportglob);
75   //
76
77 }
78 //_________________________________________________________________________
79 AliT0Align::AliT0Align(const AliT0Align &align) :
80   TObject(),
81   fT0AAlignObj(0x0),
82   fT0CAlignObj(0x0),
83   fFileGlob(0x0),
84   fXPos(0.),
85   fYPos(0.),
86   fDebug(0),
87   fRepLoc(0)
88 {
89   //
90   //  copy constructor - dummy
91   //
92   fDebug = align.fDebug;
93 }
94 //__________________________________________________________________________
95 AliT0Align & AliT0Align::operator =(const AliT0Align & align)
96 {
97   //
98   // assignment operator - dummy
99   //
100   fDebug=align.fDebug;
101   return (*this);
102 }
103
104 //__________________________________________________________________________
105 AliT0Align::~AliT0Align(){
106   //
107   // destructor
108   //
109   if(fT0AAlignObj) delete fT0AAlignObj;
110   if(fT0CAlignObj) delete fT0CAlignObj;
111
112 }
113 //__________________________________________________________________________
114 Bool_t AliT0Align::LoadSurveyData()
115 {
116   //
117   // Create a new survey object and fill it.
118  
119  AliSurveyObj * s1 = new AliSurveyObj();
120  
121  if(fRepLoc == 0) 
122  //
123  // Filling from DCDB (via GRID)
124  //
125  {
126    s1->SetGridUser("tomatkie");
127    s1->Fill("V0", 835615, "tomatkie");
128  }
129
130  else
131  //
132  // Filling from local file
133  //
134  {
135    s1->FillFromLocalFile(fFileGlob);
136  }
137  //
138  Int_t numberPoints = 3;
139  //
140  TString pointNames[3] = {"C67_6_Beamcircle", "T0A", "VERTEX"}; 
141  //
142  Float_t surveyedPoints [3][2];
143  AliSurveyPoint *currPoint;
144
145  //
146  for(Int_t i=0;i<numberPoints;i++)
147  {
148    currPoint=0;
149    currPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNames[i]);
150    //
151    if(currPoint)
152    {
153      surveyedPoints[i][0]=currPoint->GetX();
154      surveyedPoints[i][1]=currPoint->GetY();
155    //  surveyedPoints[i]=currPoint->GetZ();
156      if(fDebug)
157      Printf(Form("INFO: Point \"%s\" coordinates read.", pointNames[i].Data()));
158    }
159    else 
160    {
161      if(fDebug)
162      {
163        Printf(Form("ERROR: Essential point missing: \"%s\"", pointNames[i].Data()));
164        return 1;
165      }
166    }  
167  }
168  fXPos = surveyedPoints[0][0]; 
169  fYPos = surveyedPoints[0][1];
170  //
171  delete s1;
172  //
173  return 0;
174 }
175 //_________________________________________________________________
176
177 Double_t AliT0Align::ComputePosition()
178 {
179  //  Float_t fZPos, shift;
180  //  fZPos = surveyedPoints[3] - shift;
181         
182 }
183 //_______________________________________________________________________
184 void AliT0Align::CreateAlignObj(){
185   //
186   TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
187   // TClonesArray &alobj = *array;
188   
189
190   Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.;
191   fT0AAlignObj = new AliAlignObjParams("ALIC_1/0STL_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
192   
193   dx=fXPos;
194   dy=fYPos;
195   // dz=surveyedPoints[2];
196   dz=0.;
197   fT0CAlignObj = new AliAlignObjParams("ALIC_1/0STR_1",0,dx,dy,dz,dpsi,dtheta,dphi,kTRUE);
198 }
199
200 //______________________________________________________________________
201 void AliT0Align::Run(){
202   //
203   // runs the full chain
204   //
205   SetDebug(0);
206   Bool_t flag = LoadSurveyData();
207     if(flag) 
208   {
209     cout<<"Missing points"<<endl;
210     return;
211   }
212   // ComputePosition();
213   CreateAlignObj();
214   StoreAlignObj();
215 }
216 //_________________________________________________________________________
217
218 void AliT0Align::StoreAlignObj()
219 {
220  AliCDBManager* cdb = AliCDBManager::Instance();
221  if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT");
222  //
223  TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
224 //
225  Double_t shifts[3];
226  Double_t rots[3];
227  //
228  fT0AAlignObj->GetPars(shifts,rots);
229  new((*array)[0]) AliAlignObjParams(fT0AAlignObj->GetSymName(),0,shifts[0],
230                    shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
231  fT0CAlignObj->GetPars(shifts,rots);
232  new((*array)[1]) AliAlignObjParams(fT0CAlignObj->GetSymName(),0,shifts[0],
233                    shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
234
235
236 //
237 // storing either in the OCDB or local file
238 //
239   if( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ){
240     // save on file
241     const char* filename = "T0SurveyMisalignment.root";
242     Char_t fullname[80];
243     sprintf(fullname,"%s/T0/Align/Data/%s",gSystem->Getenv("ALICE_ROOT"),filename);
244     TFile *f = new TFile(fullname,"RECREATE");
245     if(!f){
246       AliError("cannot open file for output\n");
247       return;
248     }
249     AliInfo(Form("Saving alignment objects to the file %s", filename));
250     f->cd();
251     f->WriteObject(array,"T0AlignObjs","kSingleKey");
252     f->Close();
253   }else{
254     // save in CDB storage
255     AliCDBStorage* storage;
256     //
257    TString Storage = gSystem->Getenv("STORAGE");
258     if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://")) {
259       AliError(Form(
260       "STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()));
261       return;
262     }
263     storage = cdb->GetStorage(Storage.Data());
264     if(!storage){
265       AliError(Form("Unable to open storage %s\n",Storage.Data()));
266       return;
267     }
268     //
269     AliCDBMetaData* md = new AliCDBMetaData();
270     md->SetResponsible("Tomasz Malkiewicz");
271     md->SetComment("Full misalignment of T0-C from surveyors");
272     AliCDBId id("T0/Align/Data",0,AliCDBRunRange::Infinity());
273     storage->Put(array,id,md);
274   }
275 }
276