52 #if !defined(__CINT__) || defined(__MAKECINT__) 67 #include "TDatabasePDG.h" 76 #include "TGraphErrors.h" 102 TObjArray *arr = fitString.Tokenize(
"++");
103 Int_t entries=arr->GetEntries();
104 for (Int_t i=0; i<entries; i++){
105 TString aaa = arr->At(i)->GetName();
106 if (aaa.Contains(filter)==1){
107 printf(
"%d\t%s\n",i,aaa.Data());
118 TFile
f(
"OCDB-RodShifts.root");
165 Double_t volt0=0.0000000001;
191 rotOFC->SetName(
"rotOFC");rotOFC->SetTitle(
"rotOFC");
192 rodOFC1->SetName(
"rodOFC1");rodOFC1->SetTitle(
"rodOFC1");
193 rodOFC2->SetName(
"rodOFC2");rodOFC2->SetTitle(
"rodOFC2");
194 rotIFC->SetName(
"rotIFC");rotIFC->SetTitle(
"rotIFC");
195 rodIFC1->SetName(
"rodIFC1");rodIFC1->SetTitle(
"rodIFC1");
196 rodIFC2->SetName(
"rodIFC2");rodIFC2->SetTitle(
"rodIFC2");
197 rodAll->SetName(
"rodAll");rodAll->SetTitle(
"rodAll");
202 cs->Add(rotIFC); cs->Add(rotOFC);
203 cs->Add(rodIFC1); cs->Add(rodOFC1);
204 cs->Add(rodIFC2); cs->Add(rodOFC2);
241 matrixX.SetDx(0.1); matrixY.SetDy(0.1); matrixZ.SetDz(0.1);
242 rot0.SetAngles(0.001*TMath::RadToDeg(),0,0);
243 rot1.SetAngles(0,0.001*TMath::RadToDeg(),0);
244 rot2.SetAngles(0,0,0.001*TMath::RadToDeg());
246 rot90.SetAngles(0,90,0);
247 rot2.MultiplyBy(&rot90,kTRUE);
248 rot90.SetAngles(0,-90,0);
249 rot2.MultiplyBy(&rot90,kFALSE);
270 arrAlign.AddAt(alignTrans0->Clone(),0);
271 arrAlign.AddAt(alignTrans1->Clone(),1);
272 arrAlign.AddAt(alignTrans2->Clone(),2);
273 arrAlign.AddAt(alignRot0->Clone(),3);
274 arrAlign.AddAt(alignRot1->Clone(),4);
275 arrAlign.AddAt(alignRot2->Clone(),5);
285 TFile *fy =
new TFile(
"clusterDY.root");
286 TFile *fz =
new TFile(
"clusterDZ.root");
287 treeDY= (TTree*)fy->Get(
"delta");
288 treeDZ= (TTree*)fz->Get(
"delta");
289 TCut
cutAll =
"entries>3000&&abs(kZ)<1&&localX>80&&localX<246&&abs(sector-int(sector)-0.5)<0.41&&abs(localX-134)>2&&rmsG<0.5&&abs(localX-189)>3";
291 treeDY->Draw(
">>outListY",cutAll,
"entryList");
292 TEntryList *elistOutY = (TEntryList*)gDirectory->Get(
"outListY");
293 treeDY->SetEntryList(elistOutY);
294 treeDZ->Draw(
">>outListZ",cutAll,
"entryList");
295 TEntryList *elistOutZ = (TEntryList*)gDirectory->Get(
"outListZ");
296 treeDZ->SetEntryList(elistOutZ);
300 treeDY->SetAlias(
"dsec",
"(sector-int(sector)-0.5)");
301 treeDY->SetAlias(
"dsec0",
"(sector-int(sector))");
302 treeDY->SetAlias(
"signy",
"(-1.+2*(sector-int(sector)>0.5))");
303 treeDY->SetAlias(
"dx",
"(localX-165.5)");
304 treeDY->SetAlias(
"dxm",
"0.001*(localX-165.5)");
305 treeDY->SetAlias(
"rx",
"(localX/166.5)");
306 treeDY->SetAlias(
"dq1",
"(((q1==0)*(-rx)+q1*(1-rx))*signy)");
308 {
for (Int_t isec=0; isec<18; isec++){
309 treeDY->SetAlias(Form(
"sec%d",isec), Form(
"(abs(sector-%3.1lf)<0.5)",isec+0.5));
310 treeDZ->SetAlias(Form(
"sec%d",isec), Form(
"(abs(sector-%3.1lf)<0.5)",isec+0.5));
312 treeDY->SetAlias(
"gy",
"localX*sin(pi*sector/9)");
313 treeDY->SetAlias(
"gx",
"localX*cos(pi*sector/9)");
314 treeDY->SetAlias(
"side",
"(-1.+2.*(kZ>0))");
315 treeDY->SetAlias(
"drphi",
"mean");
316 treeDY->SetMarkerStyle(25);
319 Double_t
DeltaLookup(Double_t sector, Double_t localX, Double_t kZ, Double_t xref, Int_t value, Int_t corr){
326 return distortion-distortionRef;
334 treeDY->SetAlias(
"iroc",
"(localX<134)");
335 treeDY->SetAlias(
"oroc",
"(localX>134)");
336 treeDY->SetAlias(
"q1",
"abs(localX-161)<28");
337 treeDY->SetAlias(
"q2",
"(localX>189)");
339 treeDY->SetAlias(
"dIFC",
"abs(localX-83)");
340 treeDY->SetAlias(
"dOFC",
"abs(localX-250)");
341 treeDY->SetAlias(
"errY",
"(1.+1/(1+(dIFC/2.))+1/(1+dOFC/2.))");
345 treeDY->SetAlias(
"rotClipI",
"DeltaLookup(sector,localX,kZ,165.6,1,3+0)");
347 treeDY->SetAlias(
"rotClipO",
"DeltaLookup(sector,localX,kZ,165.6,1,0+0)");
348 for (Int_t isec=0;isec<18; isec++){
351 treeDY->SetAlias(Form(
"dyI_%d",isec),Form(
"(iroc*sec%d)",isec));
352 treeDY->SetAlias(Form(
"drotI_%d",isec),Form(
"(iroc*sec%d*(localX-%3.1lf)/1000.)",isec,xref));
354 treeDY->SetAlias(Form(
"dyO_%d",isec),Form(
"(sec%d*oroc-sec%d*localX/165.6)",isec,isec));
355 treeDY->SetAlias(Form(
"drotO_%d",isec),Form(
"(sec%d*oroc*(localX-%3.1lf)/1000.)",isec,xref));
358 treeDY->SetAlias(Form(
"dqO0_%d",isec),Form(
"(sec%d*sign(dsec)*(q1-localX/165.6))",isec));
360 treeDY->SetAlias(Form(
"dqOR0_%d",isec),Form(
"(sec%d*sign(dsec)*q1*(localX-165.6)/1000.)",isec));
362 treeDY->SetAlias(Form(
"dqO1_%d",isec),Form(
"(q2*sec%d*sign(dsec))",isec));
363 treeDY->SetAlias(Form(
"dqOR1_%d",isec),Form(
"(q2*sec%d*sign(dsec)*(localX-165.6)/1000.)",isec));
364 treeDY->SetAlias(Form(
"dqO2_%d",isec),Form(
"(q2*sec%d)",isec));
365 treeDY->SetAlias(Form(
"dqOR2_%d",isec),Form(
"(q2*sec%d*(localX-165.6)/1000.)",isec));
369 treeDY->SetAlias(Form(
"rodStripO_%d",isec),Form(
"DeltaLookup(sector-%d,localX,kZ,165.6,1,1+0)",isec));
371 treeDY->SetAlias(Form(
"coppRodO_%d",isec),Form(
"DeltaLookup(sector-%d,localX,kZ,165.6,1,2+0)",isec));
373 treeDY->SetAlias(Form(
"rodStripI_%d",isec),Form(
"DeltaLookup(sector-%d,localX,kZ,165.6,1,4+0)",isec));
375 treeDY->SetAlias(Form(
"coppRodI_%d",isec),Form(
"DeltaLookup(sector-%d,localX,kZ,165.6,1,5+0)",isec));
380 treeDY->SetAlias(
"dAlign",
"DeltaLookup(sector,localX,kZ,165.6,1,1000+0)");
381 treeDY->SetAlias(
"dQuadrant",
"DeltaLookup(sector,localX,kZ,165.6,1,1100+0)");
382 treeDY->SetAlias(
"dField",
"DeltaLookup(sector,localX,kZ,165.6,1,100+0)");
383 treeDY->SetAlias(
"dAll",
"(dAlign+dQuadrant+dField)");
404 for (Int_t side=-1; side<2; side+=2){
405 TVectorD ¶m = (side==1) ? paramA : paramC;
406 TGeoHMatrix matrixGX;
407 TGeoHMatrix matrixGY;
408 matrixGX.SetDx(0.1*param[1]);
409 matrixGY.SetDy(0.1*param[2]);
411 for (Int_t isec=0; isec<18; isec++){
412 TGeoHMatrix matrixOROC;
413 TGeoHMatrix matrixIROC;
414 TGeoRotation rotIROC;
415 TGeoRotation rotOROC;
416 Double_t phi= (Double_t(isec)+0.5)*TMath::Pi()/9.;
418 Double_t drotIROC = -param[offset+isec+18]*0.001;
419 Double_t drotOROC = -param[offset+isec+36]*0.001;
420 Double_t dlyIROC = param[offset+isec];
421 Double_t dlyIROC0 = param[offset+isec]+drotIROC*xref;
422 Double_t dlyOROC = 0;
423 Double_t dlyOROC0 = 0+drotOROC*xref;
425 Double_t dgxIROC = TMath::Cos(phi)*0+TMath::Sin(phi)*dlyIROC0;
426 Double_t dgyIROC = TMath::Sin(phi)*0-TMath::Cos(phi)*dlyIROC0;
427 Double_t dgxOROC = TMath::Cos(phi)*0+TMath::Sin(phi)*dlyOROC0;
428 Double_t dgyOROC = TMath::Sin(phi)*0-TMath::Cos(phi)*dlyOROC0;
429 Double_t errYIROC=TMath::Sqrt(covar(offset+isec, offset+isec)*chi2);
430 Double_t errPhiIROC=TMath::Sqrt(covar(offset+isec+18, offset+isec+18)*chi2);
431 Double_t errPhiOROC=TMath::Sqrt(covar(offset+isec+36, offset+isec+36)*chi2);
432 matrixIROC.SetDx(dgxIROC);
433 matrixIROC.SetDy(dgyIROC);
434 matrixOROC.SetDx(dgxOROC);
435 matrixOROC.SetDy(dgyOROC);
436 rotIROC.SetAngles(drotIROC*TMath::RadToDeg(),0,0);
437 matrixIROC.Multiply(&matrixGX);
438 matrixIROC.Multiply(&matrixGY);
439 matrixIROC.Multiply(&rotIROC);
440 rotOROC.SetAngles(drotOROC*TMath::RadToDeg(),0,0);
441 matrixOROC.Multiply(&matrixGX);
442 matrixOROC.Multiply(&matrixGY);
443 matrixOROC.Multiply(&rotOROC);
445 array->AddAt(matrixIROC.Clone(),isec);
446 array->AddAt(matrixOROC.Clone(),isec+36);
449 array->AddAt(matrixIROC.Clone(),isec+18);
450 array->AddAt(matrixOROC.Clone(),isec+36+18);
452 Double_t rms=TMath::Sqrt(chi2);
453 (*pcWorkspace)<<
"align"<<
460 "errYIROC="<<errYIROC<<
461 "errPhiIROC="<<errPhiIROC<<
462 "errPhiOROC="<<errPhiOROC<<
464 "dlyIROC="<<dlyIROC<<
465 "dlyIROC0="<<dlyIROC0<<
466 "dgxIROC="<<dgxIROC<<
467 "dgyIROC="<<dgyIROC<<
468 "drotIROC="<<drotIROC<<
470 "dlyOROC="<<dlyOROC<<
471 "dlyOROC0="<<dlyOROC0<<
472 "dgxOROC="<<dgxOROC<<
473 "dgyOROC="<<dgyOROC<<
474 "drotOROC="<<drotOROC<<
507 TVectorD quadrantQ0(36);
508 TVectorD quadrantRQ0(36);
509 TVectorD quadrantQ1(36);
510 TVectorD quadrantRQ1(36);
511 TVectorD quadrantQ2(36);
512 TVectorD quadrantRQ2(36);
514 for (Int_t side=-1; side<2; side+=2){
515 Int_t offsetSec= (side==1) ? 0:18;
516 TVectorD ¶m = (side==1) ? paramA : paramC;
517 for (Int_t isec=0; isec<18; isec++){
518 Double_t q0=-param[offset+isec+0*18];
519 Double_t rq0=-param[offset+isec+1*18]*0.001;
520 Double_t q1=-param[offset+isec+2*18];
521 Double_t rq1=-param[offset+isec+3*18]*0.001;
522 Double_t q2=-param[offset+isec+4*18];
523 Double_t rq2=-param[offset+isec+5*18]*0.001;
525 Double_t sq0=TMath::Sqrt(covar(offset+isec+0*18,offset+isec+0*18)*chi2);
526 Double_t srq0=TMath::Sqrt(covar(offset+isec+1*18,offset+isec+1*18)*chi2)*0.001;
527 Double_t sq1=TMath::Sqrt(covar(offset+isec+2*18,offset+isec+2*18)*chi2);
528 Double_t srq1=TMath::Sqrt(covar(offset+isec+3*18,offset+isec+3*18)*chi2)*0.001;
529 Double_t sq2=TMath::Sqrt(covar(offset+isec+4*18,offset+isec+4*18)*chi2);
530 Double_t srq2=TMath::Sqrt(covar(offset+isec+5*18,offset+isec+5*18)*chi2)*0.001;
532 quadrantQ0[offsetSec+isec]=q0;
533 quadrantRQ0[offsetSec+isec]=rq0;
534 quadrantQ1[offsetSec+isec]=q1;
535 quadrantRQ1[offsetSec+isec]=rq1;
536 quadrantQ2[offsetSec+isec]=q2;
537 quadrantRQ2[offsetSec+isec]=rq2;
538 Double_t rms=TMath::Sqrt(chi2);
539 (*pcWorkspace)<<
"quadrant"<<
560 alignLocalQuadrant->
SetQuadranAlign(&quadrantQ0, &quadrantRQ0, &quadrantQ1, &quadrantRQ1, &quadrantQ2, &quadrantRQ2);
569 return alignLocalQuadrant;
587 Double_t rotIROCA=paramA[offset+0];
588 Double_t rotIROCC=paramC[offset+0];
589 Double_t rotOROCA=paramA[offset+1];
590 Double_t rotOROCC=paramC[offset+1];
596 {
for (Int_t isec=0; isec<18; isec++){
601 Double_t rodIROCA=paramA[offset+2+36+isec];
602 Double_t rodIROCC=paramC[offset+2+36+isec];
603 Double_t rodOROCA=paramA[offset+2+isec];
604 Double_t rodOROCC=paramC[offset+2+isec];
606 Double_t srodIROCA=TMath::Sqrt(covar(offset+2+36+isec,offset+2+36+isec)*chi2);
607 Double_t srodOROCA=TMath::Sqrt(covar(offset+2+isec,offset+2+isec)*chi2);
608 Double_t phi= (Double_t(isec)+0.5)*TMath::Pi()/9.;
609 Double_t rms=TMath::Sqrt(chi2);
610 (*pcWorkspace)<<
"field"<<
617 "rotIROCA="<<rotIROCA<<
618 "rotIROCC="<<rotIROCC<<
619 "rotOROCA="<<rotOROCA<<
620 "rotOROCC="<<rotOROCC<<
622 "rodIROCA="<<rodIROCA<<
623 "rodIROCC="<<rodIROCC<<
624 "rodOROCA="<<rodOROCA<<
625 "rodOROCC="<<rodOROCC<<
627 "srodIROCA="<<srodIROCA<<
628 "srodOROCA="<<srodOROCA<<
629 "srodIROCC="<<srodIROCA<<
630 "srodOROCC="<<srodOROCA<<
655 TFormula::SetMaxima(10000);
659 Double_t chi2G=0; Int_t npointsG=0; TVectorD paramG; TMatrixD covarG;
660 TString fstringGlobal=
"";
661 fstringGlobal+=
"DeltaLookup(sector,localX,kZ,165.6,1,10-0)++";
662 fstringGlobal+=
"DeltaLookup(sector,localX,kZ,165.6,1,11-0)++";
663 fstringGlobal+=
"DeltaLookup(sector,localX,kZ,165.6,1,10-0)*side++";
664 fstringGlobal+=
"DeltaLookup(sector,localX,kZ,165.6,1,11-0)*side++";
666 TString *strFitGlobal =
TStatToolkit::FitPlane(
treeDY,
"drphi", fstringGlobal.Data(),
"1", chi2G,npointsG,paramG,covarG,-1,0, 10000000, kTRUE);
667 treeDY->SetAlias(
"fitYGlobal",strFitGlobal->Data());
668 strFitGlobal->Tokenize(
"++")->Print();
669 printf(
"chi2=%f\n",TMath::Sqrt(chi2G/npointsG));
682 fstring+=
"DeltaLookup(sector,localX,kZ,165.6,1,10-0)++";
683 fstring+=
"DeltaLookup(sector,localX,kZ,165.6,1,11-0)++";
685 for (Int_t i=0;i<18;i++){
686 fstring+=Form(
"dyI_%d++",i);
688 for (Int_t i=0;i<18;i++){
689 fstring+=Form(
"drotI_%d++",i);
692 for (Int_t i=0;i<18;i++){
695 for (Int_t i=0;i<18;i++){
696 fstring+=Form(
"drotO_%d++",i);
699 for (Int_t i=0;i<18;i++){
700 fstring+=Form(
"dqO0_%d++",i);
702 for (Int_t i=0;i<18;i++){
703 fstring+=Form(
"dqOR0_%d++",i);
705 for (Int_t i=0;i<18;i++){
706 fstring+=Form(
"dqO1_%d++",i);
708 for (Int_t i=0;i<18;i++){
709 fstring+=Form(
"dqOR1_%d++",i);
711 for (Int_t i=0;i<18;i++){
712 fstring+=Form(
"dqO2_%d++",i);
714 for (Int_t i=0;i<18;i++){
715 fstring+=Form(
"dqOR2_%d++",i);
723 treeDY->SetAlias(
"rotClipI",
"DeltaLookup(sector,localX,kZ,165.6,1,3+0)");
724 fstring+=
"rotClipI++";
726 treeDY->SetAlias(
"rotClipO",
"DeltaLookup(sector,localX,kZ,165.6,1,0+0)");
727 fstring+=
"rotClipO++";
730 for (Int_t i=0;i<18;i++){
731 fstring+=Form(
"rodStripO_%d++",i);
734 for (Int_t i=0;i<18;i++){
735 fstring+=Form(
"coppRodO_%d++",i);
738 for (Int_t i=0;i<18;i++){
739 fstring+=Form(
"rodStripI_%d++",i);
742 if (flagIFCcopper)
for (Int_t i=0;i<18;i++){
743 fstring+=Form(
"coppRodI_%d++",i);
750 Double_t
chi2A=0; Int_t npointsA=0; TVectorD paramA; TMatrixD
covarA;
751 Double_t chi2C=0; Int_t npointsC=0; TVectorD paramC; TMatrixD covarC;
754 printf(
"Fitting A side\n");
755 TCut cutAllA =
"Cut&&kZ>0";
756 TString *strFitGA =
TStatToolkit::FitPlane(
treeDY,
"drphi:errY", fstring.Data(),
"kZ>0",
chi2A,npointsA,paramA,
covarA,-1,0, 10000000, kTRUE);
757 treeDY->SetAlias(
"tfitA",strFitGA->Data());
759 printf(
"chi2=%f\n",TMath::Sqrt(chi2A/npointsA));
760 printf(
"Sigma Y:\t%f (mm)\n",10.*TMath::Sqrt(
covarA(3,3)*chi2A/npointsA));
761 printf(
"IROC Sigma Angle:\t%f (mrad)\n",TMath::Sqrt(
covarA(3+18,3+18)*chi2A/npointsA));
762 printf(
"OROC Sigma Angle:\t%f (mrad)\n",TMath::Sqrt(
covarA(3+36,3+36)*chi2A/npointsA));
764 printf(
"Fitting C side\n");
765 TCut cutAllC =
"Cut&&kZ<0";
766 TString *strFitGC =
TStatToolkit::FitPlane(
treeDY,
"drphi:errY", fstring.Data(),
"kZ<0", chi2C,npointsC,paramC,covarC,-1,0, 10000000, kTRUE);
767 treeDY->SetAlias(
"tfitC",strFitGC->Data());
769 printf(
"chi2=%f\n",TMath::Sqrt(chi2C/npointsC));
770 printf(
"Sigma Y:\t%f (mm)\n",10.*TMath::Sqrt(covarC(3,3)*chi2C/npointsC));
771 printf(
"IROC Sigma Angle:\t%f (mrad)\n",TMath::Sqrt(covarC(3+18,3+18)*chi2C/npointsC));
772 printf(
"OROC Sigma Angle:\t%f (mrad)\n",TMath::Sqrt(covarC(3+36,3+36)*chi2C/npointsC));
780 alignLocal->SetName(
"alignLocal");
781 alignLocal->Write(
"alignLocal");
783 hdist->SetName(
"AlignLocalAside"); hdist->SetTitle(
"Alignment map (A side)");
784 hdist->Write(
"AlignLocalAside");
786 hdist->SetName(
"AlignLocalCside"); hdist->SetTitle(
"Alignment map (C side)");
787 hdist->Write(
"AlignLocalCside");
790 alignQuadrant->SetName(
"alignQuadrant");
791 alignQuadrant->Write(
"alignQuadrant");
793 hdist->SetName(
"AlignQuadrantAside"); hdist->SetTitle(
"Quadrant Alignment map (A side)");
794 hdist->Write(
"AlignQuadrantAside");
796 hdist->SetName(
"AlignQuadrantCside"); hdist->SetTitle(
"Quadrant Alignment map (C side)");
797 hdist->Write(
"AlignQuadrantCside");
800 corrField->SetName(
"corrField");
801 corrField->Write(
"corrField");
804 hdist->SetName(
"AlignEfieldAside"); hdist->SetTitle(
"Efield Alignment map (A side)");
805 hdist->Write(
"AlignEfieldAside");
807 hdist->SetName(
"AlignEfieldCside"); hdist->SetTitle(
"Efield Alignment map (C side)");
808 hdist->Write(
"AlignEfieldCside");
823 TFile
f(
"fitAlignLookup.root",
"update");
839 TCanvas *canvasDist=
new TCanvas(
"FitQA",
"fitQA",1200,800);
840 canvasDist->Divide(2,2);
842 canvasDist->cd(1)->SetLogy(kFALSE); canvasDist->cd(1)->SetRightMargin(0.15);
843 treeDY->Draw(
"10*mean:sector:localX",
"kZ<0&&localX<134",
"colz");
844 his= (TH1*)
treeDY->GetHistogram()->Clone(); his->SetName(
"DeltaRPhi1");
845 his->GetXaxis()->SetTitle(
"Sector");
846 his->GetZaxis()->SetTitle(
"R (cm)");
847 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
851 canvasDist->cd(2)->SetLogy(kFALSE); canvasDist->cd(2)->SetRightMargin(0.15);
852 treeDY->Draw(
"10*mean:sector:localX",
"kZ<0&&localX>160",
"colz");
853 his= (TH1*)
treeDY->GetHistogram()->Clone(); his->SetName(
"DeltaRPhi2");
854 his->GetXaxis()->SetTitle(
"Sector");
855 his->GetZaxis()->SetTitle(
"R (cm)");
856 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
860 canvasDist->cd(3)->SetLogy(kFALSE); canvasDist->cd(3)->SetRightMargin(0.15);
861 treeDY->Draw(
"10*(mean-dAll):sector:localX",
"kZ<0&&localX<134",
"colz");
862 his= (TH1*)
treeDY->GetHistogram()->Clone(); his->SetName(
"DeltaRPhi3"); his->SetTitle(
"Delta #RPhi");
863 his->GetXaxis()->SetTitle(
"Sector");
864 his->GetZaxis()->SetTitle(
"R (cm)");
865 his->GetYaxis()->SetTitle(
"#Delta_{r#phifit}-#Delta_{r#phi} (mm)");
869 canvasDist->cd(4)->SetLogy(kFALSE); canvasDist->cd(4)->SetRightMargin(0.15);
870 treeDY->SetMarkerColor(1);
871 treeDY->Draw(
"10*mean:10*dAll:localX",
"",
"colz");
872 his= (TH1*)
treeDY->GetHistogram()->Clone(); his->SetName(
"DeltaRPhi4");
873 his->GetXaxis()->SetTitle(
"Fit value #Delta_{r#phi} (mm)");
874 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
875 his->GetZaxis()->SetTitle(
"R (cm)");
879 canvasDist->Write(
"FitQA");
885 TFile
f(
"fitAlignLookup.root");
886 TTree * treeAlign=(TTree*)f.Get(
"align");
887 TTree * treeQuadrant=(TTree*)f.Get(
"quadrant");
888 TCanvas *canvasAlign=
new TCanvas(
"align",
"align",1000,800);
890 canvasAlign->Divide(2,2);
891 treeAlign->SetMarkerStyle(25);
892 treeQuadrant->SetMarkerStyle(25);
893 gStyle->SetOptStat(kTRUE);
895 canvasAlign->cd(1); canvasAlign->cd(1)->SetRightMargin(0.15);
896 treeAlign->Draw(
"10*dlyIROC*side:isec:1+side",
"",
"colz");
897 his= (TH1*)treeAlign->GetHistogram()->Clone(); his->SetName(
"dlyIROC");his->SetTitle(
"IROC Alignment #Delta_{r#phi}");
898 his->GetXaxis()->SetTitle(
"sector");
899 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
900 his->GetZaxis()->SetTitle(
"side");
904 canvasAlign->cd(2); canvasAlign->cd(2)->SetRightMargin(0.15);
905 treeAlign->Draw(
"1000*drotIROC*side:isec:1+side",
"",
"colz");
906 his= (TH1*)treeAlign->GetHistogram()->Clone(); his->SetName(
"drotIROC");his->SetTitle(
"IROC Angular Alignment #Delta_{r#phi}");
907 his->GetXaxis()->SetTitle(
"sector");
908 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mrad)");
909 his->GetZaxis()->SetTitle(
"side");
913 canvasAlign->cd(4);canvasAlign->cd(4)->SetRightMargin(0.15);
914 treeAlign->Draw(
"1000*drotOROC*side:isec:1+side",
"",
"colz");
915 his= (TH1*)treeAlign->GetHistogram()->Clone(); his->SetName(
"drotOROC");his->SetTitle(
"OROC Angular Alignment #Delta_{r#phi}");
916 his->GetXaxis()->SetTitle(
"sector");
917 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mrad)");
918 his->GetZaxis()->SetTitle(
"side");
922 canvasAlign->cd(3);canvasAlign->cd(3)->SetRightMargin(0.15);
923 treeQuadrant->Draw(
"10*q2*side:isec:1+side",
"",
"colz");
924 his= (TH1*)treeQuadrant->GetHistogram()->Clone(); his->SetName(
"drphiOROC");his->SetTitle(
"OROC Alignment Outer Quadrant #Delta_{r#phi}");
925 his->GetXaxis()->SetTitle(
"sector");
926 his->GetYaxis()->SetTitle(
"#Delta_{r#phi} (mm)");
927 his->GetZaxis()->SetTitle(
"side");
AliTPCFCVoltError3D * rodIFC2
AliTPCFCVoltError3D * rodOFC1
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
AliTPCCalibGlobalMisalignment * MakeQuadrantCorrection(TVectorD paramA, TVectorD paramC, TMatrixD covar, Double_t chi2)
void SetCopperRodShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
void SetQuadranAlign(const TVectorD *quadrantQ0, const TVectorD *quadrantRQ0, const TVectorD *quadrantQ1, const TVectorD *quadrantRQ1, const TVectorD *quadrantQ2, const TVectorD *quadrantRQ2)
AliTPCFCVoltError3D class.
AliTPCCalibGlobalMisalignment * alignRot0
AliTPCCalibGlobalMisalignment * alignTrans2
virtual void SetOmegaTauT1T2(Float_t omegaTau, Float_t t1, Float_t t2)
AliTPCCalibGlobalMisalignment * alignRot2
static Double_t GetCorrSector(Double_t sector, Double_t r, Double_t kZ, Int_t axisType, Int_t corrType=0)
UInt_t GetNRows(UInt_t sector) const
AliTPCFCVoltError3D * rodAll
void SetOmegaTauT1T2(Float_t omegaTau, Float_t t1, Float_t t2)
TTreeSRedirector * pcWorkspace
TH2F * CreateHistoDRPhiinXY(Float_t z=10., Int_t nx=100, Int_t nphi=100)
AliTPCComposedCorrection * corFit0
void RegisterAlignFunction()
AliTPCFCVoltError3D * rotIFC
void SetRodVoltShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
void SetAlignSectors(const TObjArray *arraySector)
void SetCopperRodShiftC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
AliTPCCalibGlobalMisalignment * alignTrans1
void FitRodShift(Bool_t flagIFCcopper=kTRUE)
AliTPCComposedCorrection class.
void SetCorrections(const TCollection *corrections)
Geometry class for a single ROC.
AliTPCCalibGlobalMisalignment * alignRot1
static void AddVisualCorrection(AliTPCCorrection *corr, Int_t position)
TCollection * GetCorrections() const
AliTPCCalibGlobalMisalignment * alignTrans0
void SetRotatedClipVoltA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
void SetAlignGlobal(const TGeoMatrix *matrixGlobal)
void SetRodVoltShiftA(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
AliTPCCalibGlobalMisalignment * MakeAlignCorrection(TVectorD paramA, TVectorD paramC, TMatrixD covar, Double_t chi2)
AliTPCFCVoltError3D * rodOFC2
void StoreInOCDB(Int_t startRun, Int_t endRun, const char *comment=0)
AliTPCFCVoltError3D * MakeEfieldCorrection(TVectorD paramA, TVectorD paramC, TMatrixD covar, Double_t chi2)
void PrintFit(TString fitString, TString filter)
AliTPCFCVoltError3D * rotOFC
static AliTPCROC * Instance()
Float_t GetPadRowRadii(UInt_t isec, UInt_t irow) const
virtual void Print(Option_t *option="") const
void SetRotatedClipVoltC(Int_t rod, Float_t voltOffset, Bool_t doInit=kTRUE)
AliTPCFCVoltError3D * rodIFC1
Double_t DeltaLookup(Double_t sector, Double_t localX, Double_t kZ, Double_t xref, Int_t value, Int_t corr)