From 45e64c4cc5adb86735d955cefb7e30c3e6182cd5 Mon Sep 17 00:00:00 2001 From: Adrien Matta <matta@lpccaen.in2p3.fr> Date: Tue, 15 Feb 2022 09:10:46 +0100 Subject: [PATCH] * updating MINOS calibration for S034 --- .../Calibration/CalibVDrift/CalibVDrift.txt | 70 ++++++++++--------- .../Calibration/CalibVDrift/MakeHistoSimu.cxx | 6 +- Projects/S034/Calibration/CalibVDrift/cal.cxx | 64 +++++++++++------ 3 files changed, 83 insertions(+), 57 deletions(-) diff --git a/Projects/S034/Calibration/CalibVDrift/CalibVDrift.txt b/Projects/S034/Calibration/CalibVDrift/CalibVDrift.txt index 18382789d..256194f21 100644 --- a/Projects/S034/Calibration/CalibVDrift/CalibVDrift.txt +++ b/Projects/S034/Calibration/CalibVDrift/CalibVDrift.txt @@ -1,34 +1,36 @@ -Minos_R1_VDRIFT 0.0326822 -Minos_R1_OFFSET -1289.4 -Minos_R2_VDRIFT 0.0337449 -Minos_R2_OFFSET -1169.34 -Minos_R3_VDRIFT 0.0289896 -Minos_R3_OFFSET -1121.05 -Minos_R4_VDRIFT 0.0338202 -Minos_R4_OFFSET -1300 -Minos_R5_VDRIFT 0.0322537 -Minos_R5_OFFSET -1100 -Minos_R6_VDRIFT 0.0321976 -Minos_R6_OFFSET -1100 -Minos_R7_VDRIFT 0.0294224 -Minos_R7_OFFSET -1300 -Minos_R8_VDRIFT 0.0315384 -Minos_R8_OFFSET -1100 -Minos_R9_VDRIFT 0.0317323 -Minos_R9_OFFSET -1106.83 -Minos_R10_VDRIFT 0.0329374 -Minos_R10_OFFSET -1133.8 -Minos_R11_VDRIFT 0.0329424 -Minos_R11_OFFSET -1300 -Minos_R12_VDRIFT 0.0325326 -Minos_R12_OFFSET -1221.76 -Minos_R13_VDRIFT 0.0384348 -Minos_R13_OFFSET -1300 -Minos_R14_VDRIFT 0.032577 -Minos_R14_OFFSET -1278.23 -Minos_R15_VDRIFT 0.0332398 -Minos_R15_OFFSET -1300 -Minos_R16_VDRIFT 0.032815 -Minos_R16_OFFSET -1100 -Minos_R17_VDRIFT 0.0334814 -Minos_R17_OFFSET -1100 +Minos_R1_VDRIFT 0.0338483 +Minos_R1_OFFSET -954.441 +Minos_R2_VDRIFT 0.0338867 +Minos_R2_OFFSET -1004.56 +Minos_R3_VDRIFT 0.033925 +Minos_R3_OFFSET -909.119 +Minos_R4_VDRIFT 0.0339633 +Minos_R4_OFFSET -929.469 +Minos_R5_VDRIFT 0.0340017 +Minos_R5_OFFSET -871.854 +Minos_R6_VDRIFT 0.03404 +Minos_R6_OFFSET -917.414 +Minos_R7_VDRIFT 0.0340783 +Minos_R7_OFFSET -788.029 +Minos_R8_VDRIFT 0.0341167 +Minos_R8_OFFSET -825.088 +Minos_R9_VDRIFT 0.034155 +Minos_R9_OFFSET -956.601 +Minos_R10_VDRIFT 0.0341933 +Minos_R10_OFFSET -778.93 +Minos_R11_VDRIFT 0.0342317 +Minos_R11_OFFSET -859.062 +Minos_R12_VDRIFT 0.03427 +Minos_R12_OFFSET -939.136 +Minos_R13_VDRIFT 0.0343083 +Minos_R13_OFFSET -757.001 +Minos_R14_VDRIFT 0.0343467 +Minos_R14_OFFSET -917.314 +Minos_R15_VDRIFT 0.034385 +Minos_R15_OFFSET -768.18 +Minos_R16_VDRIFT 0.0344233 +Minos_R16_OFFSET -860.984 +Minos_R17_VDRIFT 0.0344617 +Minos_R17_OFFSET -808.242 +Minos_R18_VDRIFT 0.0345 +Minos_R18_OFFSET -721.123 diff --git a/Projects/S034/Calibration/CalibVDrift/MakeHistoSimu.cxx b/Projects/S034/Calibration/CalibVDrift/MakeHistoSimu.cxx index 47a4b40d2..49a970d67 100644 --- a/Projects/S034/Calibration/CalibVDrift/MakeHistoSimu.cxx +++ b/Projects/S034/Calibration/CalibVDrift/MakeHistoSimu.cxx @@ -1,12 +1,12 @@ void MakeHistoSimu(){ - auto file = new TFile("ZPad_distrib.root","RECREATE"); + auto file = new TFile("ZPad_distrib_d5mm.root","RECREATE"); auto chain = new TChain("PhysicsTree"); - chain->Add("../../root/analysis/simu_tpad_*.root"); + chain->Add("../../root/analysis/simu_tpad_d5mm*.root"); for(unsigned int i = 1 ; i < 19 ; i++){ cout << "\r " << i << endl; - chain->Draw(Form("Z_Pad>>ZPad_Ring%d(1000,0,400)",i),Form("Ring_Pad==%d&&Dali.Energy@.size()>0",i)); + chain->Draw(Form("Z_Pad>>ZPad_Ring%d(1000,0,600)",i),Form("Ring_Pad==%d&&Dali.Energy@.size()>0",i)); } file->Write(); } diff --git a/Projects/S034/Calibration/CalibVDrift/cal.cxx b/Projects/S034/Calibration/CalibVDrift/cal.cxx index 98cadd3fe..ad331b272 100644 --- a/Projects/S034/Calibration/CalibVDrift/cal.cxx +++ b/Projects/S034/Calibration/CalibVDrift/cal.cxx @@ -2,7 +2,7 @@ TGraphErrors* GetT(int ring); TGraphErrors* GetZ(int ring); -TGraphErrors* Calibrate(const TGraphErrors* g, double offset, double vdrift); +TGraphErrors* Calibrate(const TGraphErrors* g, double offset, double vdrift, double base_line); void Scale(const TGraphErrors* ref,TGraphErrors* mod); double chi2(TGraphErrors* g1,TGraphErrors* g2); double Chi2(const double* parameter); @@ -14,7 +14,8 @@ vector<double> vdrift; vector<double> evdrift; vector<double> offset; vector<double> eoffset; - +unsigned int current_ring; +double percent = 0.02; //////////////////////////////////////////////////////////////////////////////// void cal(){ @@ -26,9 +27,10 @@ void cal(){ for(unsigned int i = 0 ; i < 18; i++){ cout << "Processing Ring " << i << endl; cv->cd(i+1); + current_ring=i+1; t = GetT(i+1); z = GetZ(i+1); - NumericalMinimization("Minuit2","Combined"); //SCAN, MIGRAD, COMBINED + NumericalMinimization("Minuit2","Fumili2"); //SCAN, MIGRAD, COMBINED z->Draw("ap"); z->SetLineColor(kRed); @@ -57,10 +59,14 @@ void cal(){ //////////////////////////////////////////////////////////////////////////////// TGraphErrors* GetT(int ring){ - static TFile* Tfile = new TFile("TPad_distrib.root"); + static TFile* Tfile = new TFile("TPad_distrib_new.root"); TString name = Form("TPad_ring%d",ring); TH1F* h = (TH1F*) Tfile->FindObjectAny(name); - h->Scale(1./h->Integral()); + h->Rebin(8); + int maxBin=h->GetMaximumBin(); + double scale = h->Integral(maxBin-10,maxBin+10)/20.; + h->Scale(1./scale); + cout << h->GetBinCenter(maxBin) << endl; unsigned int size = h->GetNbinsX(); vector<double> x ; vector<double> y ; @@ -82,7 +88,10 @@ TGraphErrors* GetZ(int ring){ static TFile* Tfile = new TFile("ZPad_distrib.root"); TString name = Form("ZPad_Ring%d",ring); TH1F* h = (TH1F*) Tfile->FindObjectAny(name); - h->Scale(1./h->Integral()); + h->Rebin(8); + int maxBin=h->GetMaximumBin(); + double scale = h->Integral(maxBin-10,maxBin+10)/20.; + h->Scale(1./scale); unsigned int size = h->GetNbinsX(); vector<double> x ; vector<double> y ; @@ -102,13 +111,13 @@ TGraphErrors* GetZ(int ring){ } //////////////////////////////////////////////////////////////////////////////// -TGraphErrors* Calibrate(const TGraphErrors* g, double offset, double vdrift){ +TGraphErrors* Calibrate(const TGraphErrors* g, double offset, double vdrift,double base_line){ TGraphErrors* res = new TGraphErrors(*g); unsigned int size = g->GetN(); double x, y; for(unsigned int i = 0 ; i < size ; i++){ g->GetPoint(i, x, y); - res->SetPoint(i,(x*30+offset)*vdrift,y); + res->SetPoint(i,(x*30+offset)*vdrift*(0.98-percent*current_ring/18.),y+base_line); } res->SetLineColor(kGreen-3); res->SetMarkerColor(kGreen-3); @@ -127,7 +136,7 @@ void Scale(const TGraphErrors* ref,TGraphErrors* mod){ double xref = x; double yref = y; double ymod = mod->Eval(xref); - if(yref>0.0002){ + if(yref>0.9){ scale+= ymod/yref; point++; } @@ -143,7 +152,7 @@ void Scale(const TGraphErrors* ref,TGraphErrors* mod){ } //////////////////////////////////////////////////////////////////////////////// double Chi2(const double* parameter){ - c = Calibrate(t,parameter[0],parameter[1]); + c = Calibrate(t,parameter[0],parameter[1],parameter[2]); Scale(z,c); return chi2(z,c); } @@ -180,21 +189,36 @@ void NumericalMinimization(const char * minName ,const char *algoName){ // create funciton wrapper for minimizer // a IMultiGenFunction type - ROOT::Math::Functor f(&Chi2,2); + ROOT::Math::Functor f(&Chi2,3); min->SetFunction(f); min->Clear(); - double* parameter = new double[2]; - parameter[0] = -1200; - parameter[1] = 0.0327339 ; - //parameter[1] = 0.0337261; + double* parameter = new double[3]; + parameter[0] = -1000; + //parameter[1] =0.0291536; //p5mm + // parameter[1] =0.030712; //m5mm +// parameter[1] =0.0304835; // d5mm + +// parameter[1] =0.0306181; // d5mm + +// parameter[1] =0.0314412; // speed of ring 18 + + parameter[1] = 0.0345; // speed for right target length +// parameter[1] =0.0291703; // speed of ring 1 + + parameter[2] =0;// base line +// parameter[1] =0.0300424 ; + //parameter[1] =0.029 ; + + // Set the free variables to be minimized! - min->SetLimitedVariable(0,"Offset",parameter[0],1,-1300,-1100); - //min->SetFixedVariable(0,"Offset",parameter[0]); - min->SetLimitedVariable(1,"VDrift",parameter[1],1e-5,0.02,0.04); + min->SetLimitedVariable(0,"Offset",parameter[0],10,-2000,2000); + //min->SetLimitedVariable(1,"VDrift",parameter[1],1e-2,0.02,0.05); + min->SetFixedVariable(1,"VDrift",parameter[1]); + //min->SetFixedVariable(2,"BaseLine",parameter[2]); + min->SetLimitedVariable(2,"BaseLine",parameter[2],1,0,20); // Set a fixed VDrift - // min->SetFixedVariable(1,"VDrift",parameter[1]); // do the minimization min->Minimize(); @@ -204,7 +228,7 @@ void NumericalMinimization(const char * minName ,const char *algoName){ std::cout << "VDrift = " << xs[1] << " +/- " << min->Errors()[1] << std::endl; std::cout << "Chi2= " << Chi2(xs) << std::endl; - vdrift.push_back(xs[1]); + vdrift.push_back(xs[1]*(0.98+percent*current_ring/18.)); evdrift.push_back(min->Errors()[1]); offset.push_back(xs[0]); eoffset.push_back(min->Errors()[0]); -- GitLab