From 02750723f7ecf3f8e7cb9afa99530714b2e85d87 Mon Sep 17 00:00:00 2001
From: Morfouace <pierre.morfouace@gmail.com>
Date: Mon, 2 Oct 2023 15:06:26 +0200
Subject: [PATCH] Updating e850 macro

---
 Projects/e850/macro/Mass/FillHistoMass.C      | 139 ++++++++++++++++++
 Projects/e850/macro/Mass/FitMass.C            | 123 ++++++++++++++++
 Projects/e850/macro/Mass/PlotYieldEvolution.C |  24 +++
 Projects/e850/macro/Mass/cut/Draw_cut.C       |  35 +++++
 4 files changed, 321 insertions(+)
 create mode 100644 Projects/e850/macro/Mass/FillHistoMass.C
 create mode 100644 Projects/e850/macro/Mass/FitMass.C
 create mode 100644 Projects/e850/macro/Mass/PlotYieldEvolution.C
 create mode 100644 Projects/e850/macro/Mass/cut/Draw_cut.C

diff --git a/Projects/e850/macro/Mass/FillHistoMass.C b/Projects/e850/macro/Mass/FillHistoMass.C
new file mode 100644
index 000000000..f2d303d66
--- /dev/null
+++ b/Projects/e850/macro/Mass/FillHistoMass.C
@@ -0,0 +1,139 @@
+TChain* chain;
+TCutG* cut10Be[8];
+
+/////////////////////////////////////////////////////////////////
+void LoadCut(string part){
+  string path = "cut/"+ part + "/cut10Be.root";
+  TFile* fcut = new TFile(path.c_str());
+  for(int i=0; i<8; i++){
+   cut10Be[i] = (TCutG*)fcut->Get(Form("cut10Be_det%i",i+1));
+  }
+}
+
+/////////////////////////////////////////////////////////////////
+void FillHistoMass(string part="part2"){
+
+  LoadCut(part);
+
+  chain = new TChain("PhysicsTree");
+  if(part=="part1"){
+    chain->Add("../../root/analysis/run_28.root");
+    chain->Add("../../root/analysis/run_29.root");
+    chain->Add("../../root/analysis/run_30.root");
+    chain->Add("../../root/analysis/run_31.root");
+    chain->Add("../../root/analysis/run_32.root");
+    chain->Add("../../root/analysis/run_36.root");
+    chain->Add("../../root/analysis/run_37.root");
+    chain->Add("../../root/analysis/run_39.root");
+    chain->Add("../../root/analysis/run_40.root");
+    chain->Add("../../root/analysis/run_41.root");
+    chain->Add("../../root/analysis/run_42.root");
+    chain->Add("../../root/analysis/run_43.root");
+    chain->Add("../../root/analysis/run_44.root");
+    chain->Add("../../root/analysis/run_45.root");
+    chain->Add("../../root/analysis/run_46.root");
+    chain->Add("../../root/analysis/run_48.root");
+    chain->Add("../../root/analysis/run_49.root");
+    chain->Add("../../root/analysis/run_50.root");
+    chain->Add("../../root/analysis/run_51.root");
+    chain->Add("../../root/analysis/run_52.root");
+    chain->Add("../../root/analysis/run_53.root");
+  }
+  else if(part=="part2"){
+    chain->Add("../../root/analysis/run_55.root");
+    chain->Add("../../root/analysis/run_56.root");
+    chain->Add("../../root/analysis/run_57.root");
+    chain->Add("../../root/analysis/run_58.root");
+    chain->Add("../../root/analysis/run_59.root");
+    chain->Add("../../root/analysis/run_60.root");
+    chain->Add("../../root/analysis/run_61.root");
+    chain->Add("../../root/analysis/run_62.root");
+    chain->Add("../../root/analysis/run_63.root");
+    chain->Add("../../root/analysis/run_64.root");
+    chain->Add("../../root/analysis/run_65.root");
+    chain->Add("../../root/analysis/run_66.root");
+    chain->Add("../../root/analysis/run_67.root");
+    chain->Add("../../root/analysis/run_68.root");
+    chain->Add("../../root/analysis/run_69.root");
+  }
+  double DeltaEcorr;
+  double Elab;
+  double Mass;
+  double Ex240Pu;
+  double fTS_TMW;
+  int Telescope;
+
+  chain->SetBranchStatus("DeltaEcorr","true");
+  chain->SetBranchAddress("DeltaEcorr",&DeltaEcorr);
+  chain->SetBranchStatus("Elab","true");
+  chain->SetBranchAddress("Elab",&Elab);
+  chain->SetBranchStatus("Mass","true");
+  chain->SetBranchAddress("Mass",&Mass);
+  chain->SetBranchStatus("Ex240Pu","true");
+  chain->SetBranchAddress("Ex240Pu",&Ex240Pu);
+  chain->SetBranchStatus("fTS_TMW","true");
+  chain->SetBranchAddress("fTS_TMW",&fTS_TMW);
+  chain->SetBranchStatus("Telescope","true");
+  chain->SetBranchAddress("Telescope",&Telescope);
+
+
+
+  TH1F *hmass[11];
+  TH2F *hPID[8];
+  for(int i=0; i<11; i++){
+    TString histo_name = Form("hmass_%iMeV",i+6);
+    hmass[i] = new TH1F(histo_name, histo_name,1000,80,160); 
+  }
+  for(int i=0; i<8; i++){
+    TString histo_name = Form("PID_det%i",i+1);
+    hPID[i] = new TH2F(histo_name,histo_name,1000,0,200,1000,0,60);
+  }
+  //TH2F* hPID = new TH2F("PID","PID",1000,0,200,1000,0,60);
+  TH1F* hEx = new TH1F("Ex","Ex",500,0,20);
+  TH1F* hMassAll = new TH1F("hmass_all","hmass_all",1000,80,160);
+
+
+  int nentries = chain->GetEntries();
+  cout << "**** Number of entries to be treated: " << nentries << " ****" << endl; 
+  for(int i=0; i<nentries; i++){
+    chain->GetEntry(i);
+    if(i%1000000==0){
+      cout << "\033[34m\r Processing tree..." << (double)i/nentries*100 << "\% done" << flush;
+    }
+
+    if(fTS_TMW>0){
+
+      if(Telescope>0) hPID[Telescope-1]->Fill(Elab,DeltaEcorr);
+
+      if(cut10Be[Telescope-1]->IsInside(Elab,DeltaEcorr)){
+        hEx->Fill(Ex240Pu);
+        hMassAll->Fill(Mass);
+        if(Ex240Pu>5.5 && Ex240Pu<6.5) hmass[0]->Fill(Mass);
+        else if(Ex240Pu>6.5 && Ex240Pu<7.5) hmass[1]->Fill(Mass);
+        else if(Ex240Pu>7.5 && Ex240Pu<8.5) hmass[2]->Fill(Mass);
+        else if(Ex240Pu>8.5 && Ex240Pu<9.5) hmass[3]->Fill(Mass);
+        else if(Ex240Pu>9.5 && Ex240Pu<10.5) hmass[4]->Fill(Mass);
+        else if(Ex240Pu>10.5 && Ex240Pu<11.5) hmass[5]->Fill(Mass);
+        else if(Ex240Pu>11.5 && Ex240Pu<12.5) hmass[6]->Fill(Mass);
+        else if(Ex240Pu>12.5 && Ex240Pu<13.5) hmass[7]->Fill(Mass);
+        else if(Ex240Pu>13.5 && Ex240Pu<14.5) hmass[8]->Fill(Mass);
+        else if(Ex240Pu>14.5 && Ex240Pu<15.5) hmass[9]->Fill(Mass);
+        else if(Ex240Pu>15.5 && Ex240Pu<16.5) hmass[10]->Fill(Mass);
+      }
+    }
+  }
+
+  TString filename = Form("histo_mass_%s.root",part.c_str());
+  TFile *ofile = new TFile(filename,"recreate");
+  for(int i=0; i<11; i++){
+    hmass[i]->Write();
+  }
+  hEx->Write();
+  hMassAll->Write();
+  for(int i=0; i<8; i++)
+    hPID[i]->Write();
+  ofile->Close();
+
+
+
+}
diff --git a/Projects/e850/macro/Mass/FitMass.C b/Projects/e850/macro/Mass/FitMass.C
new file mode 100644
index 000000000..f4f4b2978
--- /dev/null
+++ b/Projects/e850/macro/Mass/FitMass.C
@@ -0,0 +1,123 @@
+void Fit(TH1F* hmass, string Energy);
+TFile* ofile;
+
+//////////////////////////////////////////////////////
+void FitMass(){
+
+  TFile* ifile = new TFile("histo_mass_all.root","read");
+
+  ofile = new TFile("histo_mass_fitted.root","recreate");
+
+  for(int i=0; i<10; i++){
+    int Ex = i+6;
+    string Energy = to_string(Ex) + "MeV";
+    TString histo_name = Form("hmass_%iMeV",i+6);
+    TH1F* h1 = (TH1F*)ifile->FindObjectAny(histo_name);
+    Fit(h1,Energy);
+  }
+
+  ofile->Close();
+}
+
+//////////////////////////////////////////////////////
+void Fit(TH1F* hmass,string Energy){
+  hmass->Rebin(2);
+  hmass->Draw();
+
+  TGraph* gyield = new TGraph();
+  int Amin = 82;
+  int Amax = 153;
+
+  int A = Amin;
+
+  int NumberOfA = Amax - Amin;
+  Double_t para[3*NumberOfA];
+
+  TF1* g[NumberOfA];
+  double Integral[NumberOfA];
+  double Integral_err[NumberOfA];
+  double total_integral = 0;
+  double Yield[NumberOfA];
+
+  for(int i=0; i<NumberOfA; i++){
+    g[i] = new TF1(Form("g%i",i),"gaus",A-0.4,A+0.4);   
+    g[i]->SetParLimits(0,0.1,20000);
+    g[i]->SetParLimits(1,A-0.1,A+0.1);
+    g[i]->SetParLimits(2,0.1,0.45);
+  
+    hmass->Fit(g[i],"qR");
+
+    g[i]->Draw("lsame");
+    g[i]->GetParameters(&para[3*i]);
+
+    A++;
+
+  }
+
+
+  TString total_func = "gaus(0)";
+  for(int i=1; i<NumberOfA; i++){
+    TString gaus_func = Form("gaus(%i)",3*i);
+    total_func += "+" + gaus_func;
+  }
+
+  TF1* total = new TF1("total",total_func,Amin-0.5, Amin+NumberOfA-0.5);
+
+  A = Amin;
+  for(int i=0; i<NumberOfA; i++){
+    total->SetParLimits(3*i+1,A-0.05,A+0.05);
+    total->SetParLimits(3*i+2,0.25,0.35);
+    A++;
+  }
+  total->SetParameters(para);
+  total->SetLineColor(4);
+
+  hmass->Fit(total,"Rq");
+
+  A = Amin;
+  for(int i=0; i<NumberOfA; i++){
+      
+    double Amplitude = total->GetParameter(3*i);
+    double mean = total->GetParameter(3*i+1);
+    double sigma = total->GetParameter(3*i+2);
+    double Amplitude_err = total->GetParError(3*i);
+    double sigma_err = total->GetParError(3*i+2);
+    
+    /*cout << "A=  " << A << endl;
+    cout << "Amplitude= " << Amplitude << endl;
+    cout << "Mean= " << mean << endl;
+    cout << "Sigma= " << sigma << endl;*/
+
+    Integral[i] = Amplitude*sigma*sqrt(2*TMath::Pi());
+    Integral_err[i] = sqrt(2*TMath::Pi()*(pow(sigma*Amplitude_err,2) + pow(Amplitude*sigma_err,2)));
+    //Integral_err[i] = sqrt(Integral[i]);
+    
+
+    total_integral += Integral[i];
+    A++;
+  }
+
+  hmass->Write();
+  total->Write();
+
+  string output_filename = "Mass_Yield_" + Energy + ".dat";
+  ofstream ofile;
+  ofile.open(output_filename.c_str());
+
+  // Yield calculation //
+  A = Amin;
+  for(int i=0; i<NumberOfA; i++){
+    Yield[i] = Integral[i]/total_integral*200;
+    gyield->SetPoint(i,A,Yield[i]);
+    double yield_err = Integral_err[i]/total_integral*200;
+    ofile << A << " " << Yield[i] << " " << yield_err << endl;
+    if(A==99) cout << "A=99 -> Y= " << Yield[i] << endl;
+    if(A==147) cout << "A=147 -> Y= " << Yield[i] << endl;
+    A++;
+  }
+  ofile.close();
+
+  gyield->SetMarkerStyle(8);
+  gyield->SetMarkerSize(1);
+
+}
diff --git a/Projects/e850/macro/Mass/PlotYieldEvolution.C b/Projects/e850/macro/Mass/PlotYieldEvolution.C
new file mode 100644
index 000000000..eac2ab885
--- /dev/null
+++ b/Projects/e850/macro/Mass/PlotYieldEvolution.C
@@ -0,0 +1,24 @@
+void PlotYieldEvolution(int A_asked=147){
+  int Energy[10] = {6,7,8,9,10,11,12,13,14,15};
+  TGraphErrors* gevol = new TGraphErrors();
+
+  for(int i = 0; i<10; i++){
+    ifstream ifile;
+    string input_filename = "Mass_Yield_" + to_string(Energy[i]) + "MeV.dat";
+    ifile.open(input_filename.c_str());
+
+    int A;
+    double yield;
+    double yield_err;
+    while(ifile>>A>>yield>>yield_err){
+      if(A==A_asked){
+        gevol->SetPoint(i,Energy[i]-5.5,yield);
+        gevol->SetPointError(i,0,yield_err);
+      }
+    }
+  }
+
+  gevol->SetMarkerStyle(8);
+  gevol->SetMarkerSize(1);
+  gevol->Draw("ap");
+}
diff --git a/Projects/e850/macro/Mass/cut/Draw_cut.C b/Projects/e850/macro/Mass/cut/Draw_cut.C
new file mode 100644
index 000000000..cf336bf20
--- /dev/null
+++ b/Projects/e850/macro/Mass/cut/Draw_cut.C
@@ -0,0 +1,35 @@
+
+//////////////////////////////////////////
+void Draw_cut()
+{
+
+  TChain* chain = new TChain("PhysicsTree");
+  chain->Add("../../../root/analysis/run_55.root");
+  //TFile* histofile = new TFile("histo/histo_EQ1_lg.root");
+  TFile* cutfile = new TFile("cut10Be.root","update");
+
+  TCanvas* c1 = new TCanvas("c1","c1",1200,1200);
+
+
+  for(int det_number=1; det_number<9; det_number++){
+    TString to_draw = Form("DeltaEcorr:Elab>>h%i(1000,0,200,1000,0,60)",det_number);
+    TString condition = Form("fTS_TMW>0 && Telescope==%i",det_number);
+
+    chain->Draw(to_draw,condition,"colz",5e7);
+
+    TH2F *h = (TH2F*)gDirectory->FindObjectAny(Form("h%i",det_number));
+    h->Draw("colz");
+
+    TCutG* cutg;
+    cutg = (TCutG*)gPad->WaitPrimitive("CUTG","CutG");
+    cutg->SetName(Form("cut10Be_det%i",det_number));
+
+    cutfile->cd();
+    cutg->Write();
+  }
+  //histofile->Close();
+  cutfile->Close();
+
+}
+
+/////////////////////////////////////////
-- 
GitLab