37 #if !defined(__CINT__) || defined(__MAKECINT__)
40 #include "THnSparse.h"
42 #include "TTreeStream.h"
45 #include "AliTPCcalibAlign.h"
56 #include "AliTPCkalmanAlign.h"
57 #include "TPostScript.h"
67 #include "AliCDBMetaData.h"
69 #include "AliCDBManager.h"
70 #include "AliCDBStorage.h"
71 #include "AliCDBEntry.h"
72 #include "TStatToolkit.h"
73 #include "AliAlignObjParams.h"
111 TCut
cutS=
"entries>1000&&abs(snp)<0.2&&abs(theta)<1.";
133 matrixX.SetDx(0.1); matrixY.SetDy(0.1); matrixZ.SetDz(0.1);
134 rot0.SetAngles(0.001*TMath::RadToDeg(),0,0);
135 rot1.SetAngles(0,0.001*TMath::RadToDeg(),0);
136 rot2.SetAngles(0,0,0.001*TMath::RadToDeg());
138 rot90.SetAngles(0,90,0);
139 rot2.MultiplyBy(&rot90,kTRUE);
140 rot90.SetAngles(0,-90,0);
141 rot2.MultiplyBy(&rot90,kFALSE);
162 arrAlign.AddAt(alignTrans0->Clone(),0);
163 arrAlign.AddAt(alignTrans1->Clone(),1);
164 arrAlign.AddAt(alignTrans2->Clone(),2);
165 arrAlign.AddAt(alignRot0->Clone(),3);
166 arrAlign.AddAt(alignRot1->Clone(),4);
167 arrAlign.AddAt(alignRot2->Clone(),5);
178 TGeoHMatrix matGlobal;
179 TGeoHMatrix matDelta;
190 matrixX.SetDx(0.1*paramYGlobal[1]);
191 matrixY.SetDy(0.1*paramYGlobal[2]);
192 rot0.SetAngles(0.001*TMath::RadToDeg()*paramYGlobal[3],0,0);
193 rot1.SetAngles(0,0.001*TMath::RadToDeg()*paramYGlobal[4],0);
194 rot2.SetAngles(0,0,0.001*TMath::RadToDeg()*paramYGlobal[5]);
195 rot90.SetAngles(0,90,0);
196 rot2.MultiplyBy(&rot90,kTRUE);
197 rot90.SetAngles(0,-90,0);
198 rot2.MultiplyBy(&rot90,kFALSE);
199 matGlobal.Multiply(&matrixX);
200 matGlobal.Multiply(&matrixY);
201 matGlobal.Multiply(&rot0);
202 matGlobal.Multiply(&rot1);
203 matGlobal.Multiply(&rot2);
244 {
for (Int_t isec=0; isec<72; isec++){
245 Int_t sector=isec%18;
246 Int_t offset=sector*4+1;
247 if ((isec%36)>=18) offset+=2;
248 Double_t phi= (Double_t(sector)+0.5)*TMath::Pi()/9.;
250 Double_t dly = paramYLocal[offset];
251 Double_t dphi= paramYLocal[offset+1];
252 Double_t dgx = TMath::Cos(phi)*0+TMath::Sin(phi)*dly;
253 Double_t dgy = TMath::Sin(phi)*0-TMath::Cos(phi)*dly;
262 rot0.SetAngles(0.001*TMath::RadToDeg()*dphi,0,0);
263 TGeoHMatrix matrixSector;
264 matrixSector.Multiply(&matrixX);
265 matrixSector.Multiply(&matrixY);
266 matrixSector.Multiply(&rot0);
267 array->AddAt(matrixSector.Clone(),isec);
273 TGraph * graphLY =
new TGraph(72,vecSec.GetMatrixArray(), vecLY.GetMatrixArray());
274 TGraph * graphGX =
new TGraph(72,vecSec.GetMatrixArray(), vecGX.GetMatrixArray());
275 TGraph * graphGY =
new TGraph(72,vecSec.GetMatrixArray(), vecGY.GetMatrixArray());
276 TGraph * graphPhi =
new TGraph(72,vecSec.GetMatrixArray(), vecPhi.GetMatrixArray());
277 graphLY->SetMarkerStyle(25); graphGX->SetMarkerStyle(25); graphGY->SetMarkerStyle(25); graphPhi->SetMarkerStyle(25);
278 graphLY->SetName(
"DeltaLY"); graphLY->SetTitle(
"#Delta_{ly} (mm)");
279 graphGX->SetName(
"DeltaGX"); graphGX->SetTitle(
"#Delta_{gx} (mm)");
280 graphGY->SetName(
"DeltaGY"); graphGY->SetTitle(
"#Delta_{gy} (mm)");
281 graphPhi->SetName(
"DeltaPhi"); graphPhi->SetTitle(
"#Delta_{phi} (mrad)");
283 graphLY->Write(
"grDeltaLY");
284 graphGX->Write(
"grDeltaGX");
285 graphGY->Write(
"grDeltaGY");
286 graphPhi->Write(
"grDeltaPhi");
318 TFile *f0 =
new TFile(
"../mergeField0/mean.root");
319 TFile *fP=
new TFile(
"../mergePlus/mean.root");
320 TFile *fM=
new TFile(
"../mergeMinus/mean.root");
322 itsdy=(TTree*)f0->Get(
"ITSdy");
323 itsdyP=(TTree*)fP->Get(
"ITSdy");
324 itsdyM=(TTree*)fM->Get(
"ITSdy");
325 itsdp=(TTree*)f0->Get(
"ITSdsnp");
326 itsdphiP=(TTree*)fP->Get(
"ITSdsnp");
327 itsdphiM=(TTree*)fM->Get(
"ITSdsnp");
329 itsdz=(TTree*)f0->Get(
"ITSdz");
330 itsdt=(TTree*)f0->Get(
"ITSdtheta");
331 tofdy=(TTree*)f0->Get(
"TOFdy");
332 trddy=(TTree*)f0->Get(
"TRDdy");
334 vdy=(TTree*)f0->Get(
"Vertexdy");
335 vdyP=(TTree*)fP->Get(
"Vertexdy");
336 vdyM=(TTree*)fM->Get(
"Vertexdy");
337 vds=(TTree*)f0->Get(
"Vertexdsnp");
338 vdz=(TTree*)f0->Get(
"Vertexdz");
339 vdt=(TTree*)f0->Get(
"Vertexdtheta");
340 chain =
new TChain(
"mean",
"mean");
341 chainZ =
new TChain(
"mean",
"mean");
342 chain->AddFile(
"../mergeField0/mean.root",10000000,
"ITSdy");
343 chain->AddFile(
"../mergeField0/mean.root",10000000,
"ITSdsnp");
344 chain->AddFile(
"../mergeField0/mean.root",10000000,
"Vertexdy");
345 chain->AddFile(
"../mergeField0/mean.root",10000000,
"Vertexdsnp");
346 chain->AddFile(
"../mergeField0/mean.root",10000000,
"TOFdy");
347 chain->AddFile(
"../mergeField0/mean.root",10000000,
"TRDdy");
349 chainZ->AddFile(
"../mergeField0/mean.root",10000000,
"Vertexdz");
350 chainZ->AddFile(
"../mergeField0/mean.root",10000000,
"Vertexdtheta");
351 chainZ->AddFile(
"../mergeField0/mean.root",10000000,
"ITSdz");
352 chainZ->AddFile(
"../mergeField0/mean.root",10000000,
"ITSdtheta");
372 itsdy->SetMarkerStyle(25);
373 itsdy->SetMarkerSize(0.4);
375 tree->SetAlias(
"side",
"(-1+2*(theta>0))");
376 chain->SetAlias(
"side",
"(-1+2*(theta>0))");
377 chain->SetMarkerStyle(25);
378 chain->SetMarkerSize(0.5);
390 pcstream=
new TTreeSRedirector(
"fitAlignCombined.root");
398 TVectorD paramYGlobal;
399 TVectorD paramYLocal;
402 {
for (Int_t isec=0; isec<18; isec++){
403 tree->SetAlias(Form(
"sec%d",isec), Form(
"(abs(sector-%f)<0.5)",isec+0.5));
404 chain->SetAlias(Form(
"sec%d",isec), Form(
"(abs(sector-%f)<0.5)",isec+0.5));
406 for (Int_t isec=-1;isec<36; isec++){
409 chain->SetAlias(
"err",
"((type==0)*0.1+(type==2)*0.001)");
411 chain->SetAlias(
"dpgx",
"(0+0)");
412 chain->SetAlias(
"dpgy",
"(0+0)");
413 chain->SetAlias(
"dpgr0",
"((AliTPCCorrection::GetCorrSector(sector,245,theta,1,3)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,3))/160)");
414 chain->SetAlias(
"dpgr1",
"((AliTPCCorrection::GetCorrSector(sector,245,theta,1,4)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,4))/160)");
415 chain->SetAlias(
"dpgr2",
"((AliTPCCorrection::GetCorrSector(sector,245,theta,1,5)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,5))/160)");
416 chain->SetAlias(
"deltaPG",
"((AliTPCCorrection::GetCorrSector(sector,245,theta,1,100)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,100))/160)");
417 chain->SetAlias(
"deltaPL",
"((AliTPCCorrection::GetCorrSector(sector,245,theta,1,101)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,101))/160)");
419 chain->SetAlias(
"dygxT",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,0)+0)");
420 chain->SetAlias(
"dygyT",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,1)+0)");
421 chain->SetAlias(
"dyr0T",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,3)+0)");
422 chain->SetAlias(
"dyr1T",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,4)+0)");
423 chain->SetAlias(
"dyr2T",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,5)+0)");
424 chain->SetAlias(
"deltaYGT",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,100)+0)");
425 chain->SetAlias(
"deltaYLT",
"(AliTPCCorrection::GetCorrSector(sector,85,theta,1,101)+0)");
428 chain->SetAlias(
"dygx",
"(dygxT+0)");
429 chain->SetAlias(
"dygy",
"(dygyT+0)");
430 chain->SetAlias(
"dyr0",
"(dyr0T+dpgr0*(refX-85.))");
431 chain->SetAlias(
"dyr1",
"(dyr1T+dpgr1*(refX-85.))");
432 chain->SetAlias(
"dyr2",
"(dyr2T+dpgr2*(refX-85.))");
433 chain->SetAlias(
"deltaYG",
"(deltaYGT+deltaPG*(refX-85.))");
434 chain->SetAlias(
"deltaYL",
"(deltaYLT+deltaPL*(refX-85.))");
436 chain->SetAlias(
"deltaG",
"(type==0)*deltaYG+(type==2)*deltaPG");
437 chain->SetAlias(
"deltaL",
"(type==0)*deltaYL+(type==2)*deltaPL");
439 TString fstringGlobal=
"";
441 fstringGlobal+=
"((type==0)*dygx+0)++";
442 fstringGlobal+=
"((type==0)*dygy+0)++";
443 fstringGlobal+=
"((type==0)*dyr0+(type==2)*dpgr0)++";
444 fstringGlobal+=
"((type==0)*dyr1+(type==2)*dpgr1)++";
445 fstringGlobal+=
"((type==0)*dyr2+(type==2)*dpgr2)++";
449 TString *strFitYGlobal = TStatToolkit::FitPlane(
chain,
"mean:err", fstringGlobal.Data(),
cutS+
"",
chi2,
npoints,paramYGlobal,covar,-1,0, 10000000, kTRUE);
451 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
452 chain->SetAlias(
"fitYGlobal",strFitYGlobal->Data());
453 paramYGlobal.Print();
454 paramYGlobal.Write(
"paramYGlobal");
459 {
for (Int_t isec=0; isec<18; isec++){
461 chain->SetAlias(Form(
"glyASec%d",isec),Form(
"((type==0)*sec%d*(theta>0))",isec));
462 chain->SetAlias(Form(
"gxASec%d",isec),Form(
"((type==0)*dygx*sec%d*(theta>0))",isec));
463 chain->SetAlias(Form(
"gyASec%d",isec),Form(
"((type==0)*dygy*sec%d*(theta>0))",isec));
464 chain->SetAlias(Form(
"gpASec%d",isec),Form(
"(((type==0)*dyr0+(type==2)*dpgr0)*sec%d)*(theta>0)",isec));
466 chain->SetAlias(Form(
"glyCSec%d",isec),Form(
"((type==0)*sec%d*(theta<0))",isec));
467 chain->SetAlias(Form(
"gxCSec%d",isec),Form(
"((type==0)*dygx*sec%d*(theta<0))",isec));
468 chain->SetAlias(Form(
"gyCSec%d",isec),Form(
"((type==0)*dygy*sec%d*(theta<0))",isec));
469 chain->SetAlias(Form(
"gpCSec%d",isec),Form(
"(((type==0)*dyr0+(type==2)*dpgr0)*sec%d)*(theta<0)",isec));
472 TString fstringLocal=
"";
473 {
for (Int_t isec=0; isec<18; isec++){
477 fstringLocal+=Form(
"(glyASec%d)++",isec);
478 fstringLocal+=Form(
"(gpASec%d)++",isec);
479 fstringLocal+=Form(
"(glyCSec%d)++",isec);
482 fstringLocal+=Form(
"(gpCSec%d)++",isec);
485 TString *strFitYLocal = TStatToolkit::FitPlane(
chain,
"(mean-deltaG):err", fstringLocal.Data(),
cutS+
"",
chi2,
npoints,paramYLocal,covar,-1,0, 10000000, kTRUE);
486 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
487 chain->SetAlias(
"fitYLocal",strFitYLocal->Data());
490 paramYLocal.Write(
"paramYLocal");
493 TString fstringScale=
"";
494 fstringScale+=
"((type==1)*refX+(type==2))*dsec++";
495 fstringScale+=
"((type==1)*refX+(type==2))*dsec*cos(phi)++";
496 fstringScale+=
"((type==1)*refX+(type==2))*dsec*sin(phi)++";
497 fstringScale+=
"((type==1)*refX+(type==2))*dsec*side++";
498 fstringScale+=
"((type==1)*refX+(type==2))*dsec*side*cos(phi)++";
499 fstringScale+=
"((type==1)*refX+(type==2))*dsec*side*sin(phi)++";
507 combAlignOCDBNew0->
AddAlign(*combAlignGlobal);
508 combAlignOCDBNew0->
AddAlign(*combAlignLocal);
511 combAlignGlobal->SetName(
"fcombAlignGlobal");
512 combAlignLocal->SetName(
"fcombAlignLocal");
513 combAlignOCDBOld->SetName(
"fcombAlignOCDBOld");
514 combAlignOCDBNew->SetName(
"fcombAlignOCDBNew");
515 combAlignOCDBNew0->SetName(
"fcombAlignOCDBNew0");
517 combAlignGlobal->Write(
"fcombAlignGlobal");
518 combAlignLocal->Write(
"fcombAlignLocal");
519 combAlignOCDBOld->Write(
"fcombAlignOCDBOld");
520 combAlignOCDBNew->Write(
"fcombAlignOCDBNew");
521 combAlignOCDBNew0->Write(
"fcombAlignOCDBNew0");
522 combAlignOCDBNew->
Print();
530 c.SetLeftMargin(0.15);
531 chain->Draw(
"1000*(mean-deltaG)>>his(100,-1.5,1.5)",
cutS+
"type==2&&refX==0",
"");
532 chain->GetHistogram()->SetName(
"TPC_VertexDphiGlobal1D");
533 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{#phi} - (Global Fit)");
534 chain->GetHistogram()->GetXaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
535 chain->GetHistogram()->Fit(
"gaus",
"qnr");
536 chain->GetHistogram()->Write();
538 chain->Draw(
"1000*(mean-deltaG)>>his(100,-1.5,1.5)",
cutS+
"type==2&&abs(refX-85)<2",
"");
539 chain->GetHistogram()->SetName(
"TPC_ITSDphiGlobal1D");
540 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{#phi} - (Global Fit)");
541 chain->GetHistogram()->GetXaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
542 chain->GetHistogram()->Fit(
"gaus",
"qnr");
543 chain->GetHistogram()->Write();
545 chain->Draw(
"10*(mean-deltaG)>>his(100,-1,1)",
cutS+
"type==0&&abs(refX-85)<2",
"");
546 chain->GetHistogram()->SetName(
"TPC_ITSDRPhiGlobal1D");
547 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{r#phi} - (Global Fit)");
548 chain->GetHistogram()->GetXaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
549 chain->GetHistogram()->Fit(
"gaus",
"qnr");
550 chain->GetHistogram()->Write();
552 chain->Draw(
"10*(mean-deltaG)>>his(100,-1,1)",
cutS+
"type==0&&abs(refX-0)<2",
"");
553 chain->GetHistogram()->SetName(
"TPC-VertexDRPhiGlobal1D");
554 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{r#phi} - (Global Fit)");
555 chain->GetHistogram()->GetXaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
556 chain->GetHistogram()->Fit(
"gaus",
"qnr");
557 chain->GetHistogram()->Write();
561 chain->Draw(
"1000*(mean-deltaG):sector:abs(theta)",
cutS+
"theta>0&&type==2&&refX==0",
"colz");
562 chain->GetHistogram()->SetName(
"TPC_VertexDphi3DGlobal3D");
563 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{#phi} - (Global Fit)");
564 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
565 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
566 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
567 chain->GetHistogram()->Draw(
"colz");
568 chain->GetHistogram()->Write();
570 chain->Draw(
"1000*(mean-deltaG):sector:abs(theta)",
cutS+
"theta>0&&type==2&&abs(refX-85)<2",
"colz");
571 chain->GetHistogram()->SetName(
"TPC_ITSDphi3DGlobal3D");
572 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{#phi} - (Global Fit)");
573 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
574 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
575 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
576 chain->GetHistogram()->Draw(
"colz");
577 chain->GetHistogram()->Write();
579 chain->Draw(
"10*(mean-deltaG):sector:abs(theta)",
cutS+
"theta>0&&type==0&&abs(refX-85)<2",
"colz");
580 chain->GetHistogram()->SetName(
"TPC_ITSDRphi3DGlobal3D");
581 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{r#phi} - (Global Fit)");
582 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
583 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
584 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
585 chain->GetHistogram()->Draw(
"colz");
586 chain->GetHistogram()->Write();
588 chain->Draw(
"10*(mean-deltaG):sector:abs(theta)",
cutS+
"theta>0&&type==0&&abs(refX-0)<2",
"colz");
589 chain->GetHistogram()->SetName(
"TPC_VertexDRphi3DGlobal3D");
590 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{r#phi} - (Global Fit)");
591 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
592 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
593 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
594 chain->GetHistogram()->Draw(
"colz");
595 chain->GetHistogram()->Write();
599 chain->Draw(
"1000*(mean-deltaG-deltaL):sector:abs(theta)",
cutS+
"theta>0&&type==2&&refX==0",
"colz");
600 chain->GetHistogram()->SetName(
"TPC_VertexDphi3DLocal3D");
601 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{#phi} - (Local Fit)");
602 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
603 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
604 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
605 chain->GetHistogram()->Draw(
"colz");
606 chain->GetHistogram()->Write();
608 chain->Draw(
"1000*(mean-deltaG-deltaL):sector:abs(theta)",
cutS+
"theta>0&&type==2&&abs(refX-85)<2",
"colz");
609 chain->GetHistogram()->SetName(
"TPC_ITSDphi3DLocal3D");
610 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{#phi} - (Local Fit)");
611 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{#phi} (mrad)");
612 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
613 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
614 chain->GetHistogram()->Draw(
"colz");
615 chain->GetHistogram()->Write();
617 chain->Draw(
"10*(mean-deltaG-deltaL):sector:abs(theta)",
cutS+
"theta>0&&type==0&&abs(refX-85)<2",
"colz");
618 chain->GetHistogram()->SetName(
"TPC_ITSDRphi3DLocal3D");
619 chain->GetHistogram()->SetTitle(
"TPC-ITS #Delta_{r#phi} - (Local Fit)");
620 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
621 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
622 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
623 chain->GetHistogram()->Draw(
"colz");
624 chain->GetHistogram()->Write();
626 chain->Draw(
"10*(mean-deltaG-deltaL):sector:abs(theta)",
cutS+
"theta>0&&type==0&&abs(refX-0)<2",
"colz");
627 chain->GetHistogram()->SetName(
"TPC_VertexDRphiLocal3D");
628 chain->GetHistogram()->SetTitle(
"TPC-Vertex #Delta_{r#phi} - (Local Fit)");
629 chain->GetHistogram()->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
630 chain->GetHistogram()->GetXaxis()->SetTitle(
"sector");
631 chain->GetHistogram()->GetZaxis()->SetTitle(
"tan(#Theta)");
632 chain->GetHistogram()->Draw(
"colz");
633 chain->GetHistogram()->Write();
642 TTreeSRedirector *
pcstream=
new TTreeSRedirector(
"fitAlignCombined.root");
650 TVectorD paramYVGlobal;
651 TVectorD paramYITSGlobal;
652 TVectorD paramPhiVGlobal;
653 TVectorD paramPhiITSGlobal;
655 TVectorD paramYVLocal;
656 TVectorD paramPhiVLocal;
657 TVectorD paramYITSLocal;
658 TVectorD paramPhiITSLocal;
661 {
for (Int_t isec=0; isec<18; isec++){
662 tree->SetAlias(Form(
"sec%d",isec), Form(
"(abs(sector-%f)<0.5)",isec+0.5));
664 for (Int_t isec=-1;isec<36; isec++){
668 TString fstringGlobal=
"";
669 fstringGlobal+=
"side++";
670 fstringGlobal+=
"theta++";
671 fstringGlobal+=
"cos(phi)*(theta>0)++";
672 fstringGlobal+=
"sin(phi)*(theta>0)++";
673 fstringGlobal+=
"cos(phi)*(theta<0)++";
674 fstringGlobal+=
"sin(phi)*(theta<0)++";
675 fstringGlobal+=
"cos(phi)*(theta)++";
676 fstringGlobal+=
"sin(phi)*(theta)++";
680 TString fstringLocal=
"";
681 {
for (Int_t sector=0; sector<18; sector++){
682 fstringLocal+=Form(
"((sec%d)*theta>0)++",sector);
683 fstringLocal+=Form(
"((sec%d)*theta<0)++",sector);
688 TString *strFitYVGlobal = TStatToolkit::FitPlane(
tree,
"V.mean", fstringGlobal.Data(),
cutS+
"",
chi2,
npoints,paramYVGlobal,covar,-1,0, 10000000, kFALSE);
689 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
690 tree->SetAlias(
"fitYVGlobal",strFitYVGlobal->Data());
691 tree->Draw(
"V.mean:fitYVGlobal",
cutS);
693 TString *strFitPhiVGlobal = TStatToolkit::FitPlane(
tree,
"VPhi.mean", fstringGlobal.Data(),
cutS+
"",
chi2,
npoints,paramPhiVGlobal,covar,-1,0, 10000000, kFALSE);
694 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
695 tree->SetAlias(
"fitPhiVGlobal",strFitPhiVGlobal->Data());
696 tree->Draw(
"VPhi.mean:fitPhiVGlobal",
cutS);
698 TString *strFitYITSGlobal = TStatToolkit::FitPlane(
tree,
"mean", fstringGlobal.Data(),
cutS+
"",
chi2,
npoints,paramYITSGlobal,covar,-1,0, 10000000, kFALSE);
699 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
700 tree->SetAlias(
"fitYITSGlobal",strFitYITSGlobal->Data());
701 tree->Draw(
"mean:fitYITSGlobal",
cutS);
702 TString *strFitPhiITSGlobal = TStatToolkit::FitPlane(
tree,
"Phi.mean", fstringGlobal.Data(),
cutS+
"",
chi2,
npoints,paramPhiITSGlobal,covar,-1,0, 10000000, kFALSE);
703 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
704 tree->SetAlias(
"fitPhiITSGlobal",strFitPhiITSGlobal->Data());
705 tree->Draw(
"Phi.mean:fitPhiITSGlobal",
cutS);
709 tree->SetAlias(
"dyVG",
"V.mean-fitYVGlobal");
710 tree->SetAlias(
"dphiVG",
"(VPhi.mean-fitPhiVGlobal)");
711 tree->SetAlias(
"dyITSG",
"mean-fitYITSGlobal");
712 tree->SetAlias(
"dphiITSG",
"(Phi.mean-fitPhiITSGlobal)");
714 TString *strFitYVLocal = TStatToolkit::FitPlane(
tree,
"dyVG", fstringLocal.Data(),
cutS+
"",
chi2,
npoints,paramYVLocal,covar,-1,0, 10000000, kFALSE);
715 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
716 tree->SetAlias(
"fitYVLocal",strFitYVLocal->Data());
717 tree->Draw(
"dyVG-fitYVLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
719 TString *strFitPhiVLocal = TStatToolkit::FitPlane(
tree,
"dphiVG", fstringLocal.Data(),
cutS+
"",
chi2,
npoints,paramPhiVLocal,covar,-1,0, 10000000, kFALSE);
720 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
721 tree->SetAlias(
"fitPhiVLocal",strFitPhiVLocal->Data());
722 tree->Draw(
"dphiVG-fitPhiVLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
726 TString *strFitYITSLocal = TStatToolkit::FitPlane(
tree,
"dyITSG", fstringLocal.Data(),
cutS+
"",
chi2,
npoints,paramYITSLocal,covar,-1,0, 10000000, kFALSE);
727 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
728 tree->SetAlias(
"fitYITSLocal",strFitYITSLocal->Data());
729 tree->Draw(
"dyITSG-fitYITSLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
731 TString *strFitPhiITSLocal = TStatToolkit::FitPlane(
tree,
"dphiITSG", fstringLocal.Data(),
cutS+
"",
chi2,
npoints,paramPhiITSLocal,covar,-1,0, 10000000, kFALSE);
732 printf(
"chi2=%f\n",TMath::Sqrt(chi2/npoints));
733 tree->SetAlias(
"fitPhiITSLocal",strFitPhiITSLocal->Data());
734 tree->Draw(
"dphiITSG-fitPhiITSLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
740 TVectorD vecDPhi(36);
746 tree->SetAlias(
"phiMean",
"(fitPhiVLocal+fitPhiITSLocal+fitPhiVGlobal+fitPhiITSGlobal)*0.5");
747 tree->SetAlias(
"yMeanV",
"((fitYITSLocal+fitYITSGlobal-85*phiMean)+(fitYVLocal+fitYVGlobal))*0.5");
748 tree->SetAlias(
"yMeanITS",
"((fitYITSLocal+fitYITSGlobal)+(fitYVLocal+fitYVGlobal+85*phiMean))*0.5");
751 tree->Draw(
"phiMean:int(sector)>>hhhA(18,0.18)",
cutS+
"abs(theta)<0.15&&theta>0",
"prof");
752 hisA = (TH1D*)
tree->GetHistogram()->Clone();
753 tree->Draw(
"phiMean:int(sector)>>hhhC(18,0.18)",
cutS+
"abs(theta)<0.15&&theta<0",
"prof");
754 hisC = (TH1D*)
tree->GetHistogram()->Clone();
756 for (Int_t isec=0; isec<36; isec++){
758 if (isec<18) vecDPhi[isec]=hisA->GetBinContent(isec%18+1);
759 if (isec>=18) vecDPhi[isec]=hisC->GetBinContent(isec%18+1);
761 tree->Draw(
"yMeanV:int(sector)>>hhhA(18,0.18)",
cutS+
"abs(theta)<0.15&&theta>0",
"prof");
762 hisA = (TH1D*)
tree->GetHistogram()->Clone();
763 tree->Draw(
"yMeanV:int(sector)>>hhhC(18,0.18)",
cutS+
"abs(theta)<0.15&&theta<0",
"prof");
764 hisC = (TH1D*)
tree->GetHistogram()->Clone();
766 for (Int_t isec=0; isec<36; isec++){
767 if (isec<18) vecDLY[isec]=hisA->GetBinContent(isec%18+1);
768 if (isec>=18) vecDLY[isec]=hisC->GetBinContent(isec%18+1);
769 vecDGX[isec]=-vecDLY[isec]*TMath::Sin(TMath::Pi()*(isec+0.5)/9.);
770 vecDGY[isec]= vecDLY[isec]*TMath::Cos(TMath::Pi()*(isec+0.5)/9.);
779 {(*pcstream)<<
"fitLocal"<<
782 "pYVGlobal.="<<¶mYVGlobal<<
783 "pYITSGlobal.="<<¶mYITSGlobal<<
784 "pPhiVGlobal.="<<¶mPhiVGlobal<<
785 "pPhiITSGlobal.="<<¶mPhiITSGlobal<<
787 "pYVLocal.="<<¶mYVLocal<<
788 "pPhiVLocal.="<<¶mPhiVLocal<<
789 "pYITSLocal.="<<¶mYITSLocal<<
790 "pPhiITSLocal.="<<¶mPhiITSLocal<<
793 "vDPhi.="<<&vecDPhi<<
799 paramYVGlobal.Write(
"paramYVGlobal");
800 paramYITSGlobal.Write(
"paramYITSGlobal");
801 paramPhiVGlobal.Write(
"paramPhiVGlobal");
802 paramPhiITSGlobal.Write(
"paramPhiITSGlobal");
804 paramYVLocal.Write(
"paramYVLocal");
805 paramPhiVLocal.Write(
"paramPhiVLocal");
806 paramYITSLocal.Write(
"paramYITSLocal");
807 paramPhiITSLocal.Write(
"paramPhiITSLocal");
808 vecDPhi.Write(
"vecDPhi");
809 vecDLY.Write(
"vecDLY");
810 vecDGX.Write(
"vecDGX");
811 vecDGY.Write(
"vecDGY");
815 tree->Draw(
"dyVG:sector:abs(theta)",
cutS+
"theta>0",
"colz");
816 tree->GetHistogram()->Write(
"fitYVGlobal");
817 tree->Draw(
"dphiVG:sector:abs(theta)",
cutS+
"theta>0",
"colz");
818 tree->GetHistogram()->Write(
"fitPhiVGlobal");
819 tree->Draw(
"dyITSG:sector:abs(theta)",
cutS+
"theta>0",
"colz");
820 tree->GetHistogram()->Write(
"fitYITSGlobal");
821 tree->Draw(
"dphiITSG:sector:abs(theta)",
cutS+
"theta>0",
"colz");
822 tree->GetHistogram()->Write(
"fitPhiITSGlobal");
824 tree->Draw(
"dyVG-fitYVLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
825 tree->GetHistogram()->Write(
"fitYVLocal");
826 tree->Draw(
"dphiVG-fitPhiVLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
827 tree->GetHistogram()->Write(
"fitPhiVLocal");
828 tree->Draw(
"dyITSG-fitYITSLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
829 tree->GetHistogram()->Write(
"fitYITSLocal");
830 tree->Draw(
"dphiITSG-fitPhiITSLocal:sector:abs(theta)",
cutS+
"theta>0",
"colz");
831 tree->GetHistogram()->Write(
"fitPhiITSLocal");
843 TFile fcalib(
"../mergeField0/TPCAlignObjects.root");
844 AliTPCcalibAlign *
align = ( AliTPCcalibAlign *)fcalib.Get(
"alignTPC");
846 TCut cutQ=
"entries>1000&&abs(theta)<0.5&&abs(snp)<0.2&&YP.entries>50&&YM.entries>50";
847 TH1F his1(
"hdeltaY1",
"hdeltaY1",100,-0.5,0.5);
848 TMatrixD vecAlign(72,1);
849 TMatrixD covAlign(72,72);
850 TMatrixD vecAlignY(72,1);
851 TMatrixD covAlignY(72,72);
852 TMatrixD vecAlignTheta(72,1);
853 TMatrixD covAlignTheta(72,72);
854 TMatrixD vecAlignZ(72,1);
855 TMatrixD covAlignZ(72,72);
856 AliTPCkalmanAlign::BookAlign1D(vecAlign,covAlign,0,0.002);
857 AliTPCkalmanAlign::BookAlign1D(vecAlignY,covAlignY,0,0.1);
858 AliTPCkalmanAlign::BookAlign1D(vecAlignTheta,covAlignTheta,0,0.002);
859 AliTPCkalmanAlign::BookAlign1D(vecAlignZ,covAlignZ,0,0.1);
860 TVectorD vecITSY(72);
861 TVectorD vecITSYPM(72);
862 TVectorD vecITSPhi(72);
863 TVectorD vecITSPhiPM(72);
866 TVectorD vecITSTheta(72);
867 TVectorD vecVTheta(72);
868 {
for (Int_t isec0=0; isec0<36; isec0++){
869 Double_t phi0=(isec0%18+0.5)*TMath::Pi()/9.;
870 if (phi0>TMath::Pi()) phi0-=TMath::TwoPi();
871 Int_t iside0=(isec0%36<18)? 0:1;
872 TCut cutSector=Form(
"abs(%f-phi)<0.14",phi0);
873 TCut cutSide = (iside0==0)?
"theta>0":
"theta<0";
875 itsdy->Draw(
"mean",cutQ+cutSector+cutSide);
876 Double_t meanITSY=
itsdy->GetHistogram()->GetMean();
877 vecITSY[isec0]=meanITSY;
878 vecITSY[isec0+36]=meanITSY;
880 itsdy->Draw(
"(YP.mean+YM.mean)*0.5",cutQ+cutSector+cutSide);
881 Double_t meanITSYPM=
itsdy->GetHistogram()->GetMean();
882 vecITSYPM[isec0]=meanITSYPM;
883 vecITSYPM[isec0+36]=meanITSYPM;
885 itsdy->Draw(
"Phi.mean",cutQ+cutSector+cutSide);
886 Double_t meanITSPhi=
itsdy->GetHistogram()->GetMean();
887 vecITSPhi[isec0]=meanITSPhi;
888 vecITSPhi[isec0+36]=meanITSPhi;
890 itsdy->Draw(
"(PhiP.mean+PhiM.mean)*0.5",cutQ+cutSector+cutSide);
891 Double_t meanITSPhiPM=
itsdy->GetHistogram()->GetMean();
892 vecITSPhiPM[isec0]=meanITSPhiPM;
893 vecITSPhiPM[isec0+36]=meanITSPhiPM;
896 itsdy->Draw(
"VPhi.mean",cutQ+cutSector+cutSide);
897 Double_t meanVS=
itsdy->GetHistogram()->GetMean();
899 vecVS[isec0+36]=meanVS;
901 itsdy->Draw(
"V.mean",cutQ+cutSector+cutSide);
902 Double_t meanVY=
itsdy->GetHistogram()->GetMean();
904 vecVY[isec0+36]=meanVY;
906 itsdy->Draw(
"T.mean",cutQ+cutSector+cutSide);
907 Double_t meanITST=
itsdy->GetHistogram()->GetMean();
908 vecITSTheta[isec0]=meanITST;
909 vecITSTheta[isec0+36]=meanITST;
911 itsdy->Draw(
"VT.mean",cutQ+cutSector+cutSide);
912 Double_t meanVT=
itsdy->GetHistogram()->GetMean();
913 vecVTheta[isec0]=meanVT;
914 vecVTheta[isec0+36]=meanVT;
922 TTreeSRedirector *
pcstream=
new TTreeSRedirector(
"combAlign.root");
925 for (Int_t iter=0; iter<5; iter++){
926 for (Int_t isec0=0; isec0<72; isec0++){
927 for (Int_t isec1=0; isec1<72; isec1++){
929 if (iter==0 && isec0%36!=isec1%36)
continue;
930 if (iter==1 && isec0%18!=isec1%18)
continue;
932 TH1 * hisPhi = align->GetHisto(AliTPCcalibAlign::kPhi,isec0,isec1);
933 TH1 * hisTheta = align->GetHisto(AliTPCcalibAlign::kTheta,isec0,isec1);
934 TH1 * hisZ = align->GetHisto(AliTPCcalibAlign::kZ,isec0,isec1);
935 Int_t side0=(isec0%36)<18 ? 1:-1;
936 Int_t side1=(isec1%36)<18 ? 1:-1;
937 Double_t weightTPC= 0.002;
938 if (isec0%18==isec1%18) weightTPC=0.0005;
939 if (isec0%36==isec1%36) weightTPC=0.00005;
940 if (side0!=side1) weightTPC*=2.;
941 Double_t weightTPCT= 0.001;
942 if (isec0%18==isec1%18) weightTPC=0.0005;
943 if (isec0%36==isec1%36) weightTPC=0.00005;
944 if (TMath::Abs(isec0%18-isec1%18)==1) weightTPC = 0.0005;
945 if (TMath::Abs(isec0%36-isec1%36)==1) weightTPC = 0.0001;
948 Double_t meanITS0=vecITSY[isec0];
949 Double_t meanITSPM0=vecITSYPM[isec0];
950 Double_t meanITSPhi0=vecITSPhi[isec0];
951 Double_t meanITSPhiPM0=vecITSPhiPM[isec0];
952 Double_t meanVY0=vecVY[isec0];
953 Double_t meanVPhi0=vecVS[isec0];
954 Double_t meanITSTheta0=vecITSTheta[isec0];
955 Double_t meanVTheta0=vecVTheta[isec0];
957 Double_t meanITS1=vecITSY[isec1];
958 Double_t meanITSPM1=vecITSYPM[isec1];
959 Double_t meanITSPhi1=vecITSPhi[isec1];
960 Double_t meanITSPhiPM1=vecITSPhiPM[isec1];
961 Double_t meanVY1=vecVY[isec1];
962 Double_t meanVPhi1=vecVS[isec1];
963 Double_t meanITSTheta1=vecITSTheta[isec1];
964 Double_t meanVTheta1=vecVTheta[isec1];
966 Double_t meanPhi0 = (meanITSPhi0+meanVPhi0+2*meanITS0/83.)/4.;
967 Double_t meanPhi1 = (meanITSPhi1+meanVPhi1+2*meanITS1/83.)/4.;
970 if (iter>2 &&isec0==isec1){
971 AliTPCkalmanAlign::UpdateAlign1D(-meanITS0/83, 0.001, isec0, vecAlign,covAlign);
972 AliTPCkalmanAlign::UpdateAlign1D(-meanITSPhi0, 0.001, isec0, vecAlign,covAlign);
973 AliTPCkalmanAlign::UpdateAlign1D(-meanVPhi0, 0.001, isec0, vecAlign,covAlign);
975 AliTPCkalmanAlign::UpdateAlign1D(-meanPhi0, 0.001, isec0, vecAlign,covAlign);
976 AliTPCkalmanAlign::UpdateAlign1D(-meanVTheta0, 0.001, isec0, vecAlignTheta,covAlignTheta);
977 AliTPCkalmanAlign::UpdateAlign1D(-meanITSTheta0, 0.001, isec0, vecAlignTheta,covAlignTheta);
980 AliTPCkalmanAlign::UpdateAlign1D(meanPhi1-meanPhi0, 0.001, isec0,isec1, vecAlign,covAlign);
981 AliTPCkalmanAlign::UpdateAlign1D(meanITSPhiPM1-meanITSPhiPM0, 0.001, isec0,isec1, vecAlign,covAlign);
982 AliTPCkalmanAlign::UpdateAlign1D((meanITSPM1-meanITSPM0)/83., 0.001, isec0,isec1, vecAlign,covAlign);
983 AliTPCkalmanAlign::UpdateAlign1D(meanVTheta1-meanVTheta0, 0.001, isec0,isec1, vecAlignTheta,covAlignTheta);
984 AliTPCkalmanAlign::UpdateAlign1D(meanITSTheta1-meanITSTheta0, 0.001, isec0,isec1, vecAlignTheta,covAlignTheta);
988 if (!hisPhi)
continue;
989 if (!hisTheta)
continue;
990 if (his->GetEntries()<100)
continue;
992 if (isec0<36&&isec1<36) xref=fXIROC;
993 if (isec0>=36&&isec1>=36) xref=fXOROC;
994 Double_t meanTPC=his->GetMean();
995 Double_t meanTPCPhi=hisPhi->GetMean();
996 Double_t meanTPCTheta=hisTheta->GetMean();
997 Double_t meanTPCZ=hisZ->GetMean();
1000 Double_t kalman0= vecAlign(isec0,0);
1001 Double_t kalman1= vecAlign(isec1,0);
1002 Double_t kalmanY0= vecAlignY(isec0,0);
1003 Double_t kalmanY1= vecAlignY(isec1,0);
1004 Double_t kalmanTheta0= vecAlignTheta(isec0,0);
1005 Double_t kalmanTheta1= vecAlignTheta(isec1,0);
1006 Double_t kalmanZ0= vecAlignZ(isec0,0);
1007 Double_t kalmanZ1= vecAlignZ(isec1,0);
1010 AliTPCkalmanAlign::UpdateAlign1D((meanTPC)/xref, weightTPC, isec0,isec1, vecAlign,covAlign);
1011 AliTPCkalmanAlign::UpdateAlign1D(meanTPCPhi, weightTPC*10,isec0,isec1, vecAlign,covAlign);
1013 AliTPCkalmanAlign::UpdateAlign1D(meanTPCTheta, weightTPCT, isec0,isec1, vecAlignTheta,covAlignTheta);
1014 if (side0==side1) AliTPCkalmanAlign::UpdateAlign1D(meanTPCZ, weightTPCT*100., isec0,isec1, vecAlignZ,covAlignZ);
1017 if (iter>=0) (*pcstream)<<
"align"<<
1026 "mTPCPhi="<<meanTPCPhi<<
1027 "mTPCZ="<<meanTPCZ<<
1028 "mTPCTheta="<<meanTPCTheta<<
1030 "mITS0="<<meanITS0<<
1031 "mITS1="<<meanITS1<<
1032 "mITSPhi0="<<meanITSPhi0<<
1033 "mITSPhi1="<<meanITSPhi1<<
1035 "mITSPM0="<<meanITSPM0<<
1036 "mITSPM1="<<meanITSPM1<<
1037 "mITSPhiPM0="<<meanITSPhiPM0<<
1038 "mITSPhiPM1="<<meanITSPhiPM1<<
1040 "mITSTheta0="<<meanITSTheta0<<
1041 "mITSTheta1="<<meanITSTheta1<<
1045 "mVPhi0="<<meanVPhi0<<
1046 "mVPhi1="<<meanVPhi1<<
1047 "mVTheta0="<<meanVTheta0<<
1048 "mVTheta1="<<meanVTheta1<<
1050 "mPhi0="<<meanPhi0<<
1051 "mPhi1="<<meanPhi1<<
1057 "kTheta0="<<kalmanTheta0<<
1058 "kTheta1="<<kalmanTheta1<<
1066 pcstream->GetFile()->cd();
1067 vecAlign.Write(
"alignPhiMean");
1068 covAlign.Write(
"alingPhiCovar");
1069 vecAlignTheta.Write(
"alignThetaMean");
1070 covAlignTheta.Write(
"alingThetaCovar");
1071 vecAlignZ.Write(
"alignZMean");
1072 covAlignZ.Write(
"alingZCovar");
1074 TFile
f(
"combAlign.root");
1075 TTree * treeA = (TTree*)f.Get(
"align");
1076 treeA->SetMarkerStyle(25);
1077 treeA->SetMarkerSize(0.5);
1092 AliCDBEntry * entry = AliCDBManager::Instance()->Get(
"TPC/Align/Data");
1093 TClonesArray *
array = (TClonesArray*)entry->GetObject();
1094 Int_t entries = array->GetEntries();
1095 TClonesArray * arrayNew=(TClonesArray*)array->Clone();
1096 TFile
f(
"combAlign.root");
1097 TMatrixD *matPhi=(TMatrixD*)f.Get(
"alignPhiMean");
1100 {
for (Int_t i=0;i<entries; i++){
1103 AliAlignObjParams *alignP = (AliAlignObjParams*)array->UncheckedAt(i);
1104 AliAlignObjParams *alignPNew = (AliAlignObjParams*)arrayNew->UncheckedAt(i);
1106 AliGeomManager::ELayerID ilayer;
1107 alignP->GetVolUID(ilayer, imod);
1108 if (ilayer==AliGeomManager::kInvalidLayer)
continue;
1110 if (ilayer==AliGeomManager::kTPC2) sector+=36;
1111 Double_t transOld[3], rotOld[3];
1112 alignP->GetTranslation(transOld);
1113 alignP->GetAngles(rotOld);
1114 printf(
"%d\t%d\t%d\t",ilayer, imod,sector);
1115 printf(
"%f mrad \t%f mrad\n",1000*rotOld[2]*TMath::DegToRad(), 1000*((*matPhi)(sector,0)));
1116 alignPNew->SetRotation(rotOld[0],rotOld[1], rotOld[2]+(*matPhi)(sector,0)*TMath::RadToDeg());
1117 alignPNew->Print(
"kokot");
1118 alignP->Print(
"kokot");
1124 TString ocdbStorage=
"local://"+gSystem->GetFromPipe(
"pwd")+
"/OCDBUpdate";
1125 TString userName=gSystem->GetFromPipe(
"echo $USER");
1126 TString date=gSystem->GetFromPipe(
"date");
1128 AliCDBMetaData *metaData=
new AliCDBMetaData();
1129 metaData->SetObjectClassName(
"TObjArray");
1130 metaData->SetResponsible(
"Marian Ivanov");
1131 metaData->SetBeamPeriod(1);
1132 metaData->SetAliRootVersion(
"05-26-02");
1133 metaData->SetComment(Form(
"Correction calibration. User: %s\n Data%s",userName.Data(),date.Data()));
1136 id1=
new AliCDBId(
"TPC/Align/Data", 0, AliCDBRunRange::Infinity());
1137 AliCDBStorage* gStorage = AliCDBManager::Instance()->GetStorage(ocdbStorage);
1138 gStorage->Put(arrayNew, (*id1), metaData);
1140 TFile falign(
"falign.root",
"recreate");
1141 arrayNew->Write(
"new");
1142 array->Write(
"old");
1156 AliCDBEntry * entry = AliCDBManager::Instance()->Get(
"TPC/Align/Data");
1157 TClonesArray *
array = (TClonesArray*)entry->GetObject();
1158 Int_t entries = array->GetEntries();
1159 TClonesArray * arrayNew=(TClonesArray*)array->Clone();
1160 TFile
f(
"fitAlignCombined.root");
1161 TVectorD *vecDPhi = (TVectorD*) f.Get(
"vecDPhi");
1162 TVectorD *vecDGX = (TVectorD*) f.Get(
"vecDGX");
1163 TVectorD *vecDGY = (TVectorD*) f.Get(
"vecDGY");
1167 {
for (Int_t i=0;i<entries; i++){
1170 AliAlignObjParams *alignP = (AliAlignObjParams*)array->UncheckedAt(i);
1171 AliAlignObjParams *alignPNew = (AliAlignObjParams*)arrayNew->UncheckedAt(i);
1173 AliGeomManager::ELayerID ilayer;
1174 alignP->GetVolUID(ilayer, imod);
1175 if (ilayer==AliGeomManager::kInvalidLayer)
continue;
1177 if (ilayer==AliGeomManager::kTPC2) sector+=36;
1178 Double_t transOld[3], rotOld[3];
1179 alignP->GetTranslation(transOld);
1180 alignP->GetAngles(rotOld);
1181 printf(
"%d\t%d\t%d\t",ilayer, imod,sector);
1182 printf(
"%f mrad \t%f mrad\n",1000*rotOld[2]*TMath::DegToRad(), 1000*((*vecDPhi)[sector%36]));
1183 alignPNew->SetRotation(rotOld[0],rotOld[1], rotOld[2]-(*vecDPhi)[sector%36]*TMath::RadToDeg());
1184 alignPNew->SetTranslation(transOld[0]-(*vecDGX)[sector%36],transOld[1]-(*vecDGY)[sector%36], transOld[2]);
1185 alignPNew->Print(
"kokot");
1186 alignP->Print(
"kokot");
1192 TString ocdbStorage=
"local://"+gSystem->GetFromPipe(
"pwd")+
"/OCDBUpdate";
1193 TString userName=gSystem->GetFromPipe(
"echo $USER");
1194 TString date=gSystem->GetFromPipe(
"date");
1196 AliCDBMetaData *metaData=
new AliCDBMetaData();
1197 metaData->SetObjectClassName(
"TObjArray");
1198 metaData->SetResponsible(
"Marian Ivanov");
1199 metaData->SetBeamPeriod(1);
1200 metaData->SetAliRootVersion(
"05-26-02");
1201 metaData->SetComment(Form(
"Correction calibration. User: %s\n Data%s",userName.Data(),date.Data()));
1204 id1=
new AliCDBId(
"TPC/Align/Data", 0, AliCDBRunRange::Infinity());
1205 AliCDBStorage* gStorage = AliCDBManager::Instance()->GetStorage(ocdbStorage);
1206 gStorage->Put(arrayNew, (*id1), metaData);
1208 TFile falign(
"falign.root",
"recreate");
1209 arrayNew->Write(
"new");
1210 array->Write(
"old");
void AddAlign(const AliTPCCalibGlobalMisalignment &add)
static AliTPCCalibGlobalMisalignment * CreateMeanAlign(const AliTPCCalibGlobalMisalignment *alignIn)
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
AliTPCCalibGlobalMisalignment * alignRot0
AliTPCCalibGlobalMisalignment * alignTrans2
void RegisterAlignFunction()
AliTPCCalibGlobalMisalignment * alignRot2
UInt_t GetNRows(UInt_t sector) const
TFile f("CalibObjects.root")
TTreeSRedirector * pcstream
AliTPCCalibGlobalMisalignment * combAlignOCDBOld
AliTPCCalibGlobalMisalignment * MakeAlignFunctionSector(TVectorD paramYLocal)
virtual void Print(Option_t *option="") const
void SetAlignSectors(const TObjArray *arraySector)
AliTPCCalibGlobalMisalignment * alignTrans1
void FitAlignCombinedCorr()
AliTPCCalibGlobalMisalignment * combAlignLocal
Geometry class for a single ROC.
AliTPCCalibGlobalMisalignment * alignRot1
AliTPCCalibGlobalMisalignment * MakeAlignFunctionGlobal(TVectorD paramYGlobal)
static void AddVisualCorrection(AliTPCCorrection *corr, Int_t position)
AliTPCCalibGlobalMisalignment * alignTrans0
void SetAlignGlobal(const TGeoMatrix *matrixGlobal)
AliTPCCalibGlobalMisalignment * combAlignGlobal
AliTPCCalibGlobalMisalignment * combAlignOCDBNew
static AliTPCROC * Instance()
Float_t GetPadRowRadii(UInt_t isec, UInt_t irow) const
static AliTPCCalibGlobalMisalignment * CreateOCDBAlign()