]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSSurveyToAlignSSD.cxx
Adding possibility to use custom Gain map for dEdx calculation (Marian)
[u/mrichter/AliRoot.git] / ITS / AliITSSurveyToAlignSSD.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 /*
17 $Log$
18 Revision 1.1  2007/10/01 14:12:45  pchrist
19 Class creating the aligmnent object fro the surveyor measurements.
20
21 */ 
22
23 //
24 //  Creates the SSD align object
25 //
26 //
27 #include "Riostream.h"
28 #include "TFile.h"
29 #include "TSystem.h"
30 #include "TClonesArray.h"
31 #include "TGeoManager.h"
32 #include "TGeoMatrix.h"
33 #include "TGeoPhysicalNode.h"
34
35 #include "AliITSSurveyToAlignSSD.h"
36 #include "AliSurveyObj.h"
37 #include "AliSurveyPoint.h"
38 #include "AliAlignObjParams.h"
39
40 #include "AliLog.h"
41
42 #include "AliCDBManager.h"
43 #include "AliCDBEntry.h"
44 #include "AliCDBStorage.h"
45
46 ClassImp(AliITSSurveyToAlignSSD)
47
48 //________________________________________________________________________
49 AliITSSurveyToAlignSSD::AliITSSurveyToAlignSSD() :
50   TObject(),
51   fRun(0),
52   fFileLoc(0x0),
53   fFileGlob(0x0),
54   fSurveyPoints(0),
55   fSSDAlignObj(new TClonesArray("AliAlignObjParams",100)),
56   fSSDAlignObjParam(0),
57   fDebug(0) {
58   //
59   //  default constructor
60   //
61 }   
62
63 //________________________________________________________________________
64 AliITSSurveyToAlignSSD::AliITSSurveyToAlignSSD(Int_t run, Int_t reportloc, Int_t reportglob) :
65   TObject(),
66   fRun(0),
67   fFileLoc(0x0),
68   fFileGlob(0x0),
69   fSurveyPoints(0),
70   fSSDAlignObj(new TClonesArray("AliAlignObjParams",100)),
71   fSSDAlignObjParam(0),
72   fDebug(0) {
73   //
74   // constructor - defines data files
75   //
76   fFileLoc = new Char_t[80];
77   fFileGlob = new Char_t[80];
78   Char_t path[50];
79   sprintf(path,gSystem->Getenv("ALICE_ROOT")); 
80   //
81   sprintf(fFileLoc,"%s/ITS/Survey_SSD_%d.txt",path,reportloc);  
82   sprintf(fFileGlob,"%s/ITS/Survey_SSD_%d.txt",path,reportglob);
83   //
84
85 }
86 //_________________________________________________________________________
87 AliITSSurveyToAlignSSD::AliITSSurveyToAlignSSD(const AliITSSurveyToAlignSSD &align) :
88   TObject(),
89   fFileLoc(0x0),
90   fFileGlob(0x0),
91   fSurveyPoints(0),
92   fSSDAlignObj(new TClonesArray("AliAlignObjParams",100)),
93   fSSDAlignObjParam(0),
94   fDebug(0) {
95   //
96   //  copy constructor - dummy
97   
98   fDebug = align.fDebug;
99 }
100
101 //__________________________________________________________________________
102 AliITSSurveyToAlignSSD & AliITSSurveyToAlignSSD::operator =(const AliITSSurveyToAlignSSD & align) {
103   //
104   // assignment operator - dummy
105   //
106   fDebug = align.fDebug;
107   return (*this);
108 }
109
110 //__________________________________________________________________________
111 AliITSSurveyToAlignSSD::~AliITSSurveyToAlignSSD() {
112   //
113   // destructor
114   //
115   if(fSurveyPoints) delete fSurveyPoints;
116   if(fSSDAlignObj) delete fSSDAlignObj;
117   if(fSSDAlignObjParam) delete fSSDAlignObjParam;
118 }
119
120 //______________________________________________________________________
121 void AliITSSurveyToAlignSSD::Run() { 
122   //
123   // runs the full chain
124   //
125   SetDebug(0);
126   Bool_t flag = LoadSurveyData();
127   if(!flag) {
128     cout<<"Missing points"<<endl;
129     return;
130   }
131   CreateAlignObj();
132   StoreAlignObj();
133   //
134 }
135
136 //__________________________________________________________________________
137 Bool_t AliITSSurveyToAlignSSD::LoadSurveyData() {
138   //
139   // for a time being it loads from the local file the surveyed point
140   // and has the ideal points hardwired. I am waiting until Ricardo
141   // completes his job
142   // 
143   
144   //Load survey data from the local file
145   AliSurveyObj * s1 = new AliSurveyObj();
146   if(s1->FillFromLocalFile(fFileGlob))
147     fSurveyPoints = s1->GetData();
148   else 
149     return kFALSE;
150   
151   cout<<"Number of SSD survey points: "<<fSurveyPoints->GetEntries()<<endl;  
152   
153   return kTRUE;
154 }
155
156 //_______________________________________________________________________
157 void AliITSSurveyToAlignSSD::CreateAlignObj(){
158   //
159   // This method creates AliAlignObj and fills it with Euler angles
160   // and shifts. The units are degrees and cm.
161   // 
162   TClonesArray &alobj = *fSSDAlignObj;
163
164   //load ideal geometry from the OCDB
165   AliCDBManager *cdb = AliCDBManager::Instance();
166   cdb->SetDefaultStorage("local://$ALICE_ROOT");
167   cdb->SetRun(fRun);
168   AliCDBEntry* entry = cdb->Get("GRP/Geometry/Data");
169   AliGeomManager::SetGeometry(gGeoManager);
170
171   AliSurveyPoint* pt = 0;
172   TGeoHMatrix* hm = 0;
173   TGeoPNEntry* pne = 0;
174   Double_t* tr;
175   Int_t uid;
176   const char* symname;
177   Double_t sx, sy, sz;
178   Int_t ilayer, imodule;
179
180   for(Int_t imod = 0; imod < fSurveyPoints->GetEntries(); imod++) {
181     pt = (AliSurveyPoint*) fSurveyPoints->At(imod);
182     if(!pt) continue;
183     sx = pt->GetX()*100.;
184     sy = pt->GetY()*100.;
185     sz = pt->GetZ()*100.;
186
187     ilayer = (imod < 748) ? AliGeomManager::kSSD1 : AliGeomManager::kSSD2;
188     imodule = (imod < 748) ? imod : imod - 748;
189
190     uid = AliGeomManager::LayerToVolUID(ilayer,imodule);
191     symname = AliGeomManager::SymName(uid);
192     pne = gGeoManager->GetAlignableEntryByUID(uid);
193     hm = pne->GetGlobalOrig();
194     tr = hm->GetTranslation();
195
196     //Printf("symname %s", symname);
197     //Printf("x,y,z from survey: %f %f %f", sx, sy, sz);
198     //Printf("x,y,z from ideal : %f %f %f", tr[0], tr[1], tr[2]);
199     
200    new(alobj[imod]) AliAlignObjParams(symname, uid, sx-tr[0], sy-tr[1], sz-tr[2], 0., 0., 0., kTRUE);
201   }//module loop
202
203   delete entry;
204 }
205
206 //_________________________________________________________________________
207 void AliITSSurveyToAlignSSD::StoreAlignObj(){
208   // Stores the TClonesArray of AliAlignObj in
209   // $ALICE_ROOT/ITS/Align/Data/SSDfromSurvey.root
210   // In a later version these objects will be merged 
211   // with the SDD ones and will be put in the OCDB
212   const char* filename = "$ALICE_ROOT/ITS/Align/Data/SSDfromSurvey.root";
213   TFile *f = TFile::Open(filename,"RECREATE");
214   if(!f){
215     Error(filename,"cannot open file for output\n");
216     return;
217   }
218   cout<<"Saving alignment objects to the file "<<filename<<endl;
219   f->cd();
220   f->WriteObject(fSSDAlignObj,"SSDAlignObjs","kSingleKey");
221   f->Close();
222
223 }