35 #include "AliSurveyPoint.h"
36 #include "AliSurveyPoint.h"
39 #include "Riostream.h"
43 #include "AliSurveyObj.h"
44 #include "AliSurveyPoint.h"
45 #include "AliAlignObjParams.h"
46 #include "AliCDBStorage.h"
47 #include <TClonesArray.h>
50 #include "AliCDBManager.h"
88 snprintf(path,50,
"%s",gSystem->Getenv(
"ALICE_ROOT"));
91 snprintf(
fFileLoc,80,
"%s/TPC/Survey_%d_TPC.txt",path,reportloc);
93 snprintf(
fFileGlob,80,
"%s/TPC/Survey_%d_TPC.txt",path,reportglob);
140 AliSurveyObj * s1 =
new AliSurveyObj();
143 Int_t numberPoints = 8;
145 TString pointNames[8] = {
"T1Final_R04241",
"T1Final_R05241",
"T1Final_R06241",
146 "T1Final_R07241",
"T1Final_R08241",
"T1Final_R10241",
147 "T1Final_R11241",
"T1Final_R12241"};
149 Float_t surveyedPoints[8][3];
150 AliSurveyPoint *currPoint;
152 for(Int_t i=0;i<numberPoints;i++){
154 currPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNames[i]);
157 surveyedPoints[i][0]=currPoint->GetX();
158 surveyedPoints[i][1]=currPoint->GetY();
159 surveyedPoints[i][2]=currPoint->GetZ();
161 Printf(
"INFO: Point \"%s\" coordinates read.", pointNames[i].Data());
165 Printf(
"ERROR: Essential point missing: \"%s\"", pointNames[i].Data());
173 Float_t idealPoints[8][3];
175 AliSurveyObj * s2 =
new AliSurveyObj();
178 TString pointNamesL[8] ={
"R04",
"R05",
"R06",
"R07",
"R08",
"R10",
"R11",
"R12"};
180 AliSurveyPoint *currPointL;
182 for(Int_t i=0;i<numberPoints;i++){
184 currPointL = (AliSurveyPoint *) s2->GetData()->FindObject(pointNamesL[i]);
186 idealPoints[i][0]=currPointL->GetY();
187 idealPoints[i][1]=currPointL->GetZ();
188 idealPoints[i][2]=currPointL->GetX();
190 Printf(
"INFO: Point \"%s\" coordinates read.", pointNamesL[i].Data());
194 Printf(
"ERROR: Essential point missing: \"%s\"", pointNamesL[i].Data());
201 for(Int_t i = 0;i<numberPoints;i++){
202 for(Int_t j=0;j<3;j++){
203 fY(i*3+j,0)=surveyedPoints[i][j]-idealPoints[i][j];
212 for(Int_t i=0;i<numberPoints;i++){
213 fA(3*i,0)= -idealPoints[i][1];
214 fA(3*i,1)= idealPoints[i][2];
216 fA(3*i+1,0)= idealPoints[i][0];
217 fA(3*i+1,2)= -idealPoints[i][2];
219 fA(3*i+2,1)= -idealPoints[i][0];
220 fA(3*i+2,2)= idealPoints[i][1];
237 TMatrixD tt1(TMatrixD::kInverted,(TMatrixD(
fA,TMatrixD::kTransposeMult,
fA)));
238 fX=TMatrixD(tt1,TMatrixD::kMult,TMatrixD(
fA,TMatrixD::kTransposeMult,
fY));
240 TMatrixD Unit(24,24);
242 TMatrixD xxt1(TMatrixD::kInverted,TMatrixD(
fA,TMatrixD::kTransposeMult,
fA));
243 TMatrixD t(
fA,TMatrixD::kMult,TMatrixD(xxt1,TMatrixD::kMultTranspose,
fA));
244 TMatrixD t2(Unit,TMatrixD::kMinus,t);
245 TMatrixD
chi2(
fY,TMatrixD::kTransposeMult,TMatrixD(t2,TMatrixD::kMult,
fY));
260 Double_t raddeg = TMath::RadToDeg();
261 Double_t phi,theta,psi;
264 theta=
fX(1,0)*raddeg;
283 cout<<
"Missing points"<<endl;
287 if(chi2>0.01)
return;
295 AliCDBManager* cdb = AliCDBManager::Instance();
296 if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage(
"local://$ALICE_ROOT/OCDB");
298 TClonesArray *
array =
new TClonesArray(
"AliAlignObjParams",1);
304 new((*array)[0]) AliAlignObjParams(
fTPCAlignObj->GetSymName(),0,shifts[0],
305 shifts[1],shifts[2],rots[0],rots[1],rots[2],kTRUE);
310 if( TString(gSystem->Getenv(
"TOCDB")) != TString(
"kTRUE") ){
312 const char* filename =
"TPCSurveyMisalignment.root";
315 snprintf(fullname,80,
"%s/TPC/%s",gSystem->Getenv(
"ALICE_ROOT"),filename);
316 TFile *
f =
new TFile(fullname,
"RECREATE");
318 AliError(
"cannot open file for output\n");
321 AliInfo(Form(
"Saving alignment objects to the file %s", filename));
323 f->WriteObject(array,
"TPCAlignObjs",
"kSingleKey");
327 AliCDBStorage* storage;
329 TString Storage = gSystem->Getenv(
"STORAGE");
330 if(!Storage.BeginsWith(
"local://") && !Storage.BeginsWith(
"alien://")) {
332 "STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()));
335 storage = cdb->GetStorage(Storage.Data());
337 AliError(Form(
"Unable to open storage %s\n",Storage.Data()));
341 AliCDBMetaData* md =
new AliCDBMetaData();
342 md->SetResponsible(
"Marek Kowalski");
343 md->SetComment(
"Full misalignment of entire TPC from surveyors");
344 AliCDBId id(
"TPC/Align/Data",0,AliCDBRunRange::Infinity());
345 storage->Put(array,
id,md);
TFile f("CalibObjects.root")
AliTPCAlign & operator=(const AliTPCAlign &align)
ClassImp(AliTPCAlign) AliTPCAlign
void SetDebug(Int_t debug)
AliAlignObjParams * fTPCAlignObj
Double_t ComputeTransform()