diff --git a/Projects/AlPhaPha/2024/macro/mwpc/Toff/ToffGenerator.cxx b/Projects/AlPhaPha/2024/macro/mwpc/Toff/ToffGenerator.cxx index 8687ab69a04cedd9f4735b9d4c1c6a4f78651af4..4d01c7cb3ae2c3efe91f126dd353c4580712d7d0 100644 --- a/Projects/AlPhaPha/2024/macro/mwpc/Toff/ToffGenerator.cxx +++ b/Projects/AlPhaPha/2024/macro/mwpc/Toff/ToffGenerator.cxx @@ -9,8 +9,9 @@ using namespace std; vector<int> SortSection(UShort_t STargFocal[2]); +vector<double> ToffCalc(vector<double> ToffP2P); - void ToffGenerator(bool Create = true ){ +void ToffGenerator(bool Create = true ){ //=========================================================================================================== // Setters @@ -22,7 +23,7 @@ vector<int> SortSection(UShort_t STargFocal[2]); Int_t M13 , M14, M23, M24 ;// we will fetch multiplicity during // the getentry - + UShort_t S13[20] , S14[20] , S23[20] , S24[20]; TTimeData *Time = new TTimeData(); @@ -37,104 +38,112 @@ vector<int> SortSection(UShort_t STargFocal[2]); chain->SetBranchStatus("MTOF_FP1_T0VN", true); chain->SetBranchAddress("MTOF_FP1_T0VN", &S23); - chain->SetBranchStatus("MTOF_FP1_T1VN", true); - chain->SetBranchAddress("MTOF_FP1_T1VN", &S24); + chain->SetBranchStatus("MTOF_FP1_T1VN", true); + chain->SetBranchAddress("MTOF_FP1_T1VN", &S24); - chain->SetBranchStatus("Time", true); - chain->SetBranchAddress("Time", &Time); + chain->SetBranchStatus("Time", true); + chain->SetBranchAddress("Time", &Time); - //=========================================================================================================== - // Histograms - //=========================================================================================================== + //=========================================================================================================== + // Histograms + //=========================================================================================================== - TH2F *hToff13; - TH2F *hToff14; - TH2F *hToff23; - TH2F *hToff24; + TH2F *hToff13; + TH2F *hToff14; + TH2F *hToff23; + TH2F *hToff24; + double xmin[4], xmax[4]; + double ymin[4], ymax[4]; + int binx = 20 , biny = 400; + + xmin[0] = 0 ; xmax[0] = 20 ; ymin[0] = -10 ; ymax[0] = 10 ; + xmin[1] = 0 ; xmax[1] = 20 ; ymin[1] = -10 ; ymax[1] = 10 ; + xmin[2] = 0 ; xmax[2] = 20 ; ymin[2] = -10 ; ymax[2] = 10 ; + xmin[3] = 0 ; xmax[3] = 20 ; ymin[3] = -10 ; ymax[3] = 10 ; - if (Create == true){ + if (Create == true){ - hToff13 = new TH2F("Toff13","Toff13", 20, 0, 20, 100, -10, 10); - hToff14 = new TH2F("Toff14","Toff14", 20, 0, 20, 200, -10, 10); - hToff23 = new TH2F("Toff23","Toff23", 20, 0, 20, 200, -10, 10); - hToff24 = new TH2F("Toff24","Toff24", 20, 0, 20, 200, -10, 10); + hToff13 = new TH2F("Toff13","Toff13",binx ,xmin[0] , xmax[0], biny, ymin[0], ymax[0]); + hToff14 = new TH2F("Toff14","Toff14",binx ,xmin[1] , xmax[1], biny, ymin[1], ymax[1]); + hToff23 = new TH2F("Toff23","Toff23",binx ,xmin[2] , xmax[2], biny, ymin[2], ymax[2]); + hToff24 = new TH2F("Toff24","Toff24",binx ,xmin[3] , xmax[3], biny, ymin[3], ymax[3]); - //=========================================================================================================== - // Loop on entries - //=========================================================================================================== - //int Nentries = chain->GetEntries(); - int Nentries = 1000000; - auto start = std::chrono::high_resolution_clock::now(); + //=========================================================================================================== + // Loop on entries + //=========================================================================================================== + int Nentries = chain->GetEntries(); + //int Nentries = 1000000; + auto start = std::chrono::high_resolution_clock::now(); - for (int e = 0; e < Nentries; e++) { + for (int e = 0; e < Nentries; e++) { - chain->GetEntry(e); + chain->GetEntry(e); - if (e % 100000 == 0 && e > 0 ) { - auto now = std::chrono::high_resolution_clock::now(); - std::chrono::duration<double> elapsed = now - start; - double avgTimePerIteration = elapsed.count() / e; - double timeLeft = avgTimePerIteration * (Nentries - e); + if (e % 100000 == 0 && e > 0 ) { + auto now = std::chrono::high_resolution_clock::now(); + std::chrono::duration<double> elapsed = now - start; + double avgTimePerIteration = elapsed.count() / e; + double timeLeft = avgTimePerIteration * (Nentries - e); - std::cout << "********** Estimated time left: " << int(timeLeft) << " seconds **********" << "\r" << flush; - } + std::cout << "********** Estimated time left: " << int(timeLeft) << " seconds **********" << "\r" << flush; + } - // Get Multiplicity - M13 = Time->GetMWPC13Mult(); - M14 = Time->GetMWPC14Mult(); - M23 = Time->GetMWPC23Mult(); - M24 = Time->GetMWPC24Mult(); + // Get Multiplicity + M13 = Time->GetMWPC13Mult(); + M14 = Time->GetMWPC14Mult(); + M23 = Time->GetMWPC23Mult(); + M24 = Time->GetMWPC24Mult(); - if (M13 == 2 && (abs(S13[0]-S13[1]) == 1)){ + if (M13 == 2 && (abs(S13[0]-S13[1]) == 1)){ vector<int> Pos = SortSection(S13); - hToff13->Fill(S13[0],Time->GetTime_MWPC13(Pos[0]) - Time->GetTime_MWPC13(Pos[1])); - } - if (M23 == 2 && (abs(S23[0]-S23[1]) == 1)){ + hToff13->Fill(S13[0],Time->GetTime_MWPC13(Pos[0]) - Time->GetTime_MWPC13(Pos[1])); + } + if (M23 == 2 && (abs(S23[0]-S23[1]) == 1)){ vector<int> Pos = SortSection(S23); - hToff23->Fill(S23[0],Time->GetTime_MWPC23(Pos[0]) - Time->GetTime_MWPC23(Pos[1])); - } + hToff23->Fill(S23[0],Time->GetTime_MWPC23(Pos[0]) - Time->GetTime_MWPC23(Pos[1])); + } - if (M14 == 2 && (abs(S14[0]-S14[1]) == 1)){ + if (M14 == 2 && (abs(S14[0]-S14[1]) == 1)){ vector<int> Pos = SortSection(S14); - hToff14->Fill(S14[0],Time->GetTime_MWPC14(Pos[0]) - Time->GetTime_MWPC14(Pos[1])); - } + hToff14->Fill(S14[0],Time->GetTime_MWPC14(Pos[0]) - Time->GetTime_MWPC14(Pos[1])); + } - if (M24 == 2 && (abs(S24[0]-S24[1]) == 1)){ + if (M24 == 2 && (abs(S24[0]-S24[1]) == 1)){ vector<int> Pos = SortSection(S24); - hToff24->Fill(S24[0],Time->GetTime_MWPC24(Pos[0]) - Time->GetTime_MWPC24(Pos[1])); - } - } // End loop event - - TFile *out = new TFile("output/ToffHisto.root","recreate"); - hToff13->Write(); - hToff14->Write(); - hToff23->Write(); - hToff24->Write(); - }// end if create - - else { - - TFile *in = new TFile("output/ToffHisto.root","open"); - hToff13 = (TH2F*)in->Get("Toff13"); - hToff14 = (TH2F*)in->Get("Toff14"); - hToff23 = (TH2F*)in->Get("Toff23"); - hToff24 = (TH2F*)in->Get("Toff24"); - } - - int MinX = 2; - hToff13->SetMinimum(MinX); - hToff14->SetMinimum(MinX); - hToff23->SetMinimum(MinX); - hToff24->SetMinimum(MinX); - //=========================================================================================================== - // Proj fit - //=========================================================================================================== - TCanvas* c13 = new TCanvas("c13", "Toff13", 1800, 1600); + hToff24->Fill(S24[0],Time->GetTime_MWPC24(Pos[0]) - Time->GetTime_MWPC24(Pos[1])); + } + } // End loop event + + TFile *out = new TFile("output/ToffHisto.root","recreate"); + hToff13->Write(); + hToff14->Write(); + hToff23->Write(); + hToff24->Write(); + }// end if create + + else { + + TFile *in = new TFile("output/ToffHisto.root","open"); + hToff13 = (TH2F*)in->Get("Toff13"); + hToff14 = (TH2F*)in->Get("Toff14"); + hToff23 = (TH2F*)in->Get("Toff23"); + hToff24 = (TH2F*)in->Get("Toff24"); + } + + int MinX = 2; + hToff13->SetMinimum(MinX); + hToff14->SetMinimum(MinX); + hToff23->SetMinimum(MinX); + hToff24->SetMinimum(MinX); + //=========================================================================================================== + // Proj fit + //=========================================================================================================== + TCanvas* c13 = new TCanvas("c13", "Toff13", 1800, 1600); c13->Divide(5, 4); // Adjust rows/columns to fit the number of bins (e.g., 20 bins here) - + TCanvas* c14 = new TCanvas("c14", "Toff14", 1800, 1600); c14->Divide(5, 4); // Adjust rows/columns to fit the number of bins (e.g., 20 bins here) @@ -299,26 +308,151 @@ vector<int> SortSection(UShort_t STargFocal[2]); } // Display the canvas - c24->Update(); + c24->Update(); + + //=========================================================================================================== + // Saving correction + //=========================================================================================================== + + + //First we get the absolute correction to use on each section + vector<double> Toff13, Toff14, Toff23, Toff24; + Toff13 = ToffCalc(P2PToff13); + Toff23 = ToffCalc(P2PToff23); + Toff14 = ToffCalc(P2PToff14); + Toff24 = ToffCalc(P2PToff24); + + //Save it in a txt file + ofstream o13("output/Toff13.txt"); + ofstream o23("output/Toff23.txt"); + ofstream o14("output/Toff14.txt"); + ofstream o24("output/Toff24.txt"); + + for (auto &elem : Toff13) o13 << elem << endl; + for (auto &elem : Toff14) o14 << elem << endl; + for (auto &elem : Toff23) o23 << elem << endl; + for (auto &elem : Toff24) o24 << elem << endl; + + + //=========================================================================================================== + // Testing correction + //=========================================================================================================== + + + TH2F* hCorrToff13 = new TH2F("CorrToff13","CorrToff13",binx ,xmin[0] , xmax[0], biny, ymin[0], ymax[0]); + TH2F* hCorrToff14 = new TH2F("CorrToff14","CorrToff14",binx ,xmin[1] , xmax[1], biny, ymin[1], ymax[1]); + TH2F* hCorrToff23 = new TH2F("CorrToff23","CorrToff23",binx ,xmin[2] , xmax[2], biny, ymin[2], ymax[2]); + TH2F* hCorrToff24 = new TH2F("CorrToff24","CorrToff24",binx ,xmin[3] , xmax[3], biny, ymin[3], ymax[3]); + + + int Nentries = chain->GetEntries(); + //int Nentries = 1000000; + auto start = std::chrono::high_resolution_clock::now(); + + for (int e = 0; e < Nentries; e++) { + chain->GetEntry(e); + if (e % 100000 == 0 && e > 0 ) { + auto now = std::chrono::high_resolution_clock::now(); + std::chrono::duration<double> elapsed = now - start; + double avgTimePerIteration = elapsed.count() / e; + double timeLeft = avgTimePerIteration * (Nentries - e); + + std::cout << "********** Estimated time left: " << int(timeLeft) << " seconds **********" << "\r" << flush; + } + + // Get Multiplicity + M13 = Time->GetMWPC13Mult(); + M14 = Time->GetMWPC14Mult(); + M23 = Time->GetMWPC23Mult(); + M24 = Time->GetMWPC24Mult(); + + + + if (M13 == 2 && (abs(S13[0]-S13[1]) == 1)){ + vector<int> Pos = SortSection(S13); + + if (S13[0] == 0) hCorrToff13->Fill(S13[0],Time->GetTime_MWPC13(Pos[0]) - (Time->GetTime_MWPC13(Pos[1]) + Toff13.at(0) )); + + else{ + hCorrToff13->Fill(S13[0],(Time->GetTime_MWPC13(Pos[0]) + Toff13.at(S13[0]-1)) - (Time->GetTime_MWPC13(Pos[1]) + Toff13.at(S13[1]-1))); + } + + } + + + if (M23 == 2 && (abs(S23[0]-S23[1]) == 1)){ + vector<int> Pos = SortSection(S23); + if (S23[0] == 0) hCorrToff23->Fill(S23[0],Time->GetTime_MWPC23(Pos[0]) - (Time->GetTime_MWPC23(Pos[1]) + Toff23.at(0) )); + + else{ + hCorrToff23->Fill(S23[0],(Time->GetTime_MWPC23(Pos[0]) + Toff23.at(S23[0]-1)) - (Time->GetTime_MWPC23(Pos[1]) + Toff23.at(S23[1]-1))); + } + } + + + if (M14 == 2 && (abs(S14[0]-S14[1]) == 1)){ + vector<int> Pos = SortSection(S14); + if (S14[0] == 0) hCorrToff14->Fill(S14[0],Time->GetTime_MWPC14(Pos[0]) - (Time->GetTime_MWPC14(Pos[1]) + Toff14.at(0) )); + + else{ + hCorrToff14->Fill(S14[0],(Time->GetTime_MWPC14(Pos[0]) + Toff14.at(S14[0]-1)) - (Time->GetTime_MWPC14(Pos[1]) + Toff14.at(S14[1]-1))); + } + } + + + if (M24 == 2 && (abs(S24[0]-S24[1]) == 1)){ + vector<int> Pos = SortSection(S24); + if (S24[0] == 0) hCorrToff24->Fill(S24[0],Time->GetTime_MWPC24(Pos[0]) - (Time->GetTime_MWPC24(Pos[1]) + Toff24.at(0) )); + + else{ + hCorrToff24->Fill(S24[0],(Time->GetTime_MWPC24(Pos[0]) + Toff24.at(S24[0]-1)) - (Time->GetTime_MWPC24(Pos[1]) + Toff24.at(S24[1]-1))); + } + } + + + } // End loop event //=========================================================================================================== // Drawing canvas //=========================================================================================================== TCanvas *c1 = new TCanvas("c1","c1"); + c1->Divide(2); + + c1->cd(1); hToff13->Draw("colz"); + c1->cd(2); + hCorrToff13->Draw("colz"); TCanvas *c2 = new TCanvas("c2","c2"); - hToff23->Draw(); + c2->Divide(2); + + c2->cd(1); + hToff23->Draw("colz"); + c2->cd(2); + hCorrToff23->Draw("colz"); + + TCanvas *c3 = new TCanvas("c3","c3"); - hToff14->Draw(); + c3->Divide(2); + + c3->cd(1); + hToff14->Draw("colz"); + c3->cd(2); + hCorrToff14->Draw("colz"); + TCanvas *c4 = new TCanvas("c4","c4"); - hToff24->Draw(); - } + c4->Divide(2); + + c4->cd(1); + hToff24->Draw("colz"); + c4->cd(2); + hCorrToff24->Draw("colz"); +} vector<int> SortSection(UShort_t STargFocal[2]){ UShort_t FSection ,LSection ; @@ -340,3 +474,14 @@ vector<int> SortSection(UShort_t STargFocal[2]){ STargFocal[1] = LSection; return Pos; } + +vector<double> ToffCalc(vector<double> ToffP2P){ + + vector<double> res; + double Sum = 0; + for (int i=0; i<ToffP2P.size() ; i++){ + Sum += ToffP2P.at(i); + res.push_back(Sum); + } + return res; +}