diff --git a/Projects/Vendeta/macro/FillTOFHisto.C b/Projects/Vendeta/macro/FillTOFHisto.C index 558383cc70048659cedcb3ecf36b9062859766d7..144a783605a0c9a1c6c70cd6e00a39d061717654 100644 --- a/Projects/Vendeta/macro/FillTOFHisto.C +++ b/Projects/Vendeta/macro/FillTOFHisto.C @@ -1,104 +1,130 @@ -TChain* chain; +// c++ includes +#include <vector> +#include <iostream> +#include <iomanip> +#include <stdlib.h> + +// ROOT includes +#include "TChain.h" +#include "TFile.h" +#include "TObject.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TGraph.h" + +using namespace std; int NumberOfDetectors= 72; int NumberOfAnodes= 11; int nentries=1e6; -int run=86; -///////////////////////////////////// -void LoadRootFile(){ - chain = new TChain("PhysicsTree"); - chain->Add(Form("/home/faster/nptool/Outputs/Analysis/run%i.root",run)); - //chain->Add("/home/faster/nptool/Outputs/Analysis/test_sampler_qdc_cf_1.root"); - //chain->Add("/home/faster/nptool/Outputs/Analysis/test_sampler_qdc_cf_2.root"); - //chain->Add("/home/faster/nptool/Outputs/Analysis/test_sampler_qdc_cf_3.root"); - //chain->Add("/home/faster/nptool/Outputs/Analysis/test_sampler_qdc_cf_4.root"); -} ///////////////////////////////////// -void FillTOFHisto(){ - - LoadRootFile(); - nentries = chain->GetEntries(); - cout << "Number of entries: " << nentries << endl; - - TFile* ofile = new TFile(Form("histo_tof_file_run%i.root",run),"recreate"); - TH1F* hLG[791]; - TH1F* hHG[791]; - - vector<double>* FC_Q1 = new vector<double>(); - vector<int>* FC_Anode_ID = new vector<int>(); - vector<bool>* FC_FakeFission = new vector<bool>(); - - vector<double>* LG_Tof = new vector<double>(); - vector<int>* LG_ID = new vector<int>(); - vector<double>* LG_Q1 = new vector<double>(); - vector<double>* LG_Q2 = new vector<double>(); - - vector<double>* HG_Tof = new vector<double>(); - vector<int>* HG_ID = new vector<int>(); - vector<double>* HG_Q1 = new vector<double>(); - vector<double>* HG_Q2 = new vector<double>(); - - TFissionChamberPhysics* FC = new TFissionChamberPhysics(); - chain->SetBranchAddress("FissionChamber",&FC); - - chain->SetBranchAddress("FC_Q1",&FC_Q1); - chain->SetBranchAddress("FC_Anode_ID",&FC_Anode_ID); - chain->SetBranchAddress("FC_FakeFission",&FC_FakeFission); - chain->SetBranchAddress("LG_Tof",&LG_Tof); - chain->SetBranchAddress("LG_ID",&LG_ID); - chain->SetBranchAddress("LG_Q1",&LG_Q1); - chain->SetBranchAddress("LG_Q2",&LG_Q2); - chain->SetBranchAddress("HG_Tof",&HG_Tof); - chain->SetBranchAddress("HG_ID",&HG_ID); - chain->SetBranchAddress("HG_Q1",&HG_Q1); - chain->SetBranchAddress("HG_Q2",&HG_Q2); - - for(int i=0; i<NumberOfDetectors; i++){ - for(int j=0; j<NumberOfAnodes; j++){ - int index = j + i*NumberOfAnodes; - TString histo_name = Form("hLG_Det%i_Anode%i",i+1,j+1); - hLG[index] = new TH1F(histo_name,histo_name,2000,-100,300); - - histo_name = Form("hHG_Det%i_Anode%i",i+1,j+1); - hHG[index] = new TH1F(histo_name,histo_name,2500,0,500); - } - } - for(int i=0; i<nentries; i++){ - chain->GetEntry(i); - - if(i%100000==0){ - cout << setprecision(2) << "\033[34m\r Processing tree..." << (double)i/nentries*100 << "\% done" << flush; - } - - if(FC_Anode_ID->size()>0){ - bool Fake = FC_FakeFission->at(0); - int anode = FC_Anode_ID->at(0); - - - int mysize = LG_Tof->size(); - for(int j=0; j<mysize; j++){ - // LG // - int index_LG = (anode-1) + (LG_ID->at(j)-1)*NumberOfAnodes; - double PSD = LG_Q2->at(j)/LG_Q1->at(j); - if(LG_ID->at(j)>0 && anode>0 && Fake==0 && LG_Q1->at(j)>2000){ - hLG[index_LG]->Fill(LG_Tof->at(j)); - } - } - - mysize = HG_Tof->size(); - for(int j=0; j<mysize; j++){ - // HG // - int index_HG = (anode-1) + (HG_ID->at(j)-1)*NumberOfAnodes; - double PSD = HG_Q2->at(j)/HG_Q1->at(j); - if(HG_ID->at(j)>0 && anode>0 && Fake==0 && HG_ID->size()==1){ - hHG[index_HG]->Fill(HG_Tof->at(j)); - } - } - } - } - - ofile->Write(); - ofile->Close(); +int main(int argc, char** argv){ + int run = atof(argv[1]); + + auto chain = new TChain("PhysicsTree"); + chain->Add(Form("/home/cyril/Workflow/nptool/Outputs/Analysis/run%i/run%i.root",run,run)); + + nentries = chain->GetEntries(); + /* nentries = 50000000; */ + cout << "Number of entries: " << nentries << endl; + + TFile* ofile = new TFile(Form("histos_ToF/histo_tof_file_run%i.root",run),"recreate"); + TH2F* hLG_LSci[11]; + TH2F* hHG_LSci[11]; + TH1F* hLG[791]; + TH1F* hHG[791]; + + + TGraph *gFlyPath = new TGraph(); + gFlyPath->SetTitle(" ; Vendeta-Anode Index ; fly length (mm);"); + + vector<double>* FC_Q1 = new vector<double>(); + vector<int>* FC_Anode_ID = new vector<int>(); + vector<bool>* FC_FakeFission = new vector<bool>(); + + vector<double>* LG_Tof = new vector<double>(); + vector<int>* LG_ID = new vector<int>(); + vector<double>* LG_Q1 = new vector<double>(); + vector<double>* LG_Q2 = new vector<double>(); + vector<double>* LG_FlyPath = new vector<double>(); + + vector<double>* HG_Tof = new vector<double>(); + vector<int>* HG_ID = new vector<int>(); + vector<double>* HG_Q1 = new vector<double>(); + vector<double>* HG_Q2 = new vector<double>(); + vector<double>* HG_FlyPath = new vector<double>(); + + chain->SetBranchAddress("FC_Q1",&FC_Q1); + chain->SetBranchAddress("FC_Anode_ID",&FC_Anode_ID); + chain->SetBranchAddress("FC_FakeFission",&FC_FakeFission); + chain->SetBranchAddress("LG_Tof",&LG_Tof); + chain->SetBranchAddress("LG_ID",&LG_ID); + chain->SetBranchAddress("LG_Q1",&LG_Q1); + chain->SetBranchAddress("LG_Q2",&LG_Q2); + chain->SetBranchAddress("LG_FlyPath",&LG_FlyPath); + chain->SetBranchAddress("HG_Tof",&HG_Tof); + chain->SetBranchAddress("HG_ID",&HG_ID); + chain->SetBranchAddress("HG_Q1",&HG_Q1); + chain->SetBranchAddress("HG_Q2",&HG_Q2); + chain->SetBranchAddress("HG_FlyPath",&HG_FlyPath); + + for(int j=0; j<NumberOfAnodes; j++){ + + TString histo_name = Form("hLG_LSci_Anode%i",j+1); + hLG_LSci[j] = new TH2F(histo_name,histo_name,72,1,73,2000,-100,300); + + histo_name = Form("hHG_LSci_Anode%i",j+1); + hHG_LSci[j] = new TH2F(histo_name,histo_name,72,1,73,2000,-100,300); + + for(int i=0; i<NumberOfDetectors; i++){ + int index = j + i*NumberOfAnodes; + histo_name = Form("hLG_Det%i_Anode%i",i+1,j+1); + hLG[index] = new TH1F(histo_name,histo_name,2000,-100,300); + + histo_name = Form("hHG_Det%i_Anode%i",i+1,j+1); + hHG[index] = new TH1F(histo_name,histo_name,2000,-100,300); + } + } + for(int i=0; i<nentries; i++){ + chain->GetEntry(i); + + if(i%100000==0){ + cout << setprecision(2) << "\033[34m\r Processing run "<< run <<" ..." << (double)i/nentries*100 << "\% done" << flush; + } + + if(FC_Anode_ID->size()>0){ + bool Fake = FC_FakeFission->at(0); + int anode = FC_Anode_ID->at(0); + + + int mysize = LG_Tof->size(); + for(int j=0; j<mysize; j++){ + // LG // + int index_LG = (anode-1) + (LG_ID->at(j)-1)*NumberOfAnodes; + double PSD = LG_Q2->at(j)/LG_Q1->at(j); + if(LG_ID->at(j)>0 && anode>0 && Fake==0 && LG_Q1->at(j)>2000){ + hLG[index_LG]->Fill(LG_Tof->at(j)); + hLG_LSci[anode-1]->Fill(LG_ID->at(j),LG_Tof->at(j)); + gFlyPath->SetPoint(index_LG,index_LG,LG_FlyPath->at(j)); + } + } + + mysize = HG_Tof->size(); + for(int j=0; j<mysize; j++){ + // HG // + int index_HG = (anode-1) + (HG_ID->at(j)-1)*NumberOfAnodes; + double PSD = HG_Q2->at(j)/HG_Q1->at(j); + if(HG_ID->at(j)>0 && anode>0 && Fake==0 && HG_ID->size()==1){ + hHG[index_HG]->Fill(HG_Tof->at(j)); + hHG_LSci[anode-1]->Fill(HG_ID->at(j),HG_Tof->at(j)); + } + } + } + } + + ofile->WriteObject(gFlyPath,"gFlyPath"); + ofile->Write(); + ofile->Close(); } diff --git a/Projects/Vendeta/macro/FitTofGammaPeak.C b/Projects/Vendeta/macro/FitTofGammaPeak.C index 62d4967acbb704150e0ec3efccbc886ea0751966..d008591bcfdfa60d4e72323eac059efe1abc1e9c 100644 --- a/Projects/Vendeta/macro/FitTofGammaPeak.C +++ b/Projects/Vendeta/macro/FitTofGammaPeak.C @@ -1,43 +1,61 @@ -TFile* ifile; +// c++ includes +#include <vector> +#include <iostream> +#include <iomanip> +#include <fstream> +#include <stdlib.h> + +// ROOT includes +#include "TChain.h" +#include "TCanvas.h" +#include "TFile.h" +#include "TObject.h" +#include "TSpectrum.h" +#include "TGraph.h" +#include "TF1.h" +#include "TH1F.h" +#include "TH2F.h" + +using namespace std; int NumberOfDetectors=72; int NumberOfAnodes=11; int m_NumberOfGammaPeak=1; -int run=86; double PosGammaPeak = 3.2; +double c = 299.792458; // mm/ns -double sigma_anode[11]; +double sigma_anode[11], sigma_anode_HG[11]; bool Finder(TH1F* h, Double_t *mean, Double_t *sigma); ///////////////////////////////////////////////////// -void OpenRootFile(){ - ifile = new TFile(Form("histo_tof_file_run%i.root",run)); -} - -///////////////////////////////////////////////////// -void FitTofGammaPeak(){ - OpenRootFile(); +int main(int argc, char** argv){ + + int run = atof(argv[1]); + TString Append = argv[2]; + + auto ifile = new TFile(Form("histos_ToF/histo_tof_file_run%d"+Append+".root",run)); + auto gFlyPath = (TGraph*)ifile->Get("gFlyPath"); TCanvas *cLG[11]; TCanvas *cHG[11]; ofstream ofile; - ofile.open(Form("Vendeta_Time_run%i.cal",run)); - - TFile* orootfile = new TFile(Form("histo_tof_fitted_run%i.root",run),"recreate"); + ofile.open(Form("ToF_calibs/Vendeta_Time_run%d.cal",run)); + TFile* orootfile = new TFile(Form("histos_ToF/histo_tof_fitted_run%d"+Append+".root",run),"recreate"); for(int i=0; i<NumberOfAnodes; i++){ - sigma_anode[i]=0; + sigma_anode[i]=0; + sigma_anode_HG[i]=0; } Double_t* mean = new Double_t[1]; Double_t* sigma = new Double_t[1]; - TGraph* gSigma_LG = new TGraph(); - TGraph* gSigma_HG = new TGraph(); + TGraph* gSigma_LG = new TGraph(); + TGraph* gSigma_HG = new TGraph(); - int countLG=0; - int countHG=0; + int countLG=0; + int countHG=0; for(int i=0; i<NumberOfDetectors; i++){ for(int j=0; j<NumberOfAnodes; j++){ // LG // @@ -46,18 +64,22 @@ void FitTofGammaPeak(){ //cLG[j]->cd(i+1); h->Draw(); - + + int index = j + i*11; + double FlyPath = gFlyPath->GetPointY(index); + PosGammaPeak = FlyPath/c ; + mean[0] = 0; sigma[0] = 0; TString LG_token = Form("Vendeta_DET%i_LG_ANODE%i_TIMEOFFSET",i+1,j+1); if(Finder(h, mean, sigma)){ ofile << LG_token << " " << -mean[0]+PosGammaPeak << endl; - gSigma_LG->SetPoint(countLG,countLG+1,sigma[0]); + gSigma_LG->SetPoint(countLG,countLG+1,sigma[0]); - sigma_anode[j] += sigma[0]; + sigma_anode[j] += sigma[0]; - countLG++; - h->Write(); + countLG++; + h->Write(); } else{ ofile << LG_token << " 0" << endl; @@ -75,9 +97,10 @@ void FitTofGammaPeak(){ TString HG_token = Form("Vendeta_DET%i_HG_ANODE%i_TIMEOFFSET",i+1,j+1); if(Finder(h, mean, sigma)){ ofile << HG_token << " " << -mean[0]+PosGammaPeak << endl; - gSigma_HG->SetPoint(countHG,countHG+1,sigma[0]); - countHG++; - h->Write(); + gSigma_HG->SetPoint(countHG,countHG+1,sigma[0]); + sigma_anode_HG[j] += sigma[0]; + countHG++; + h->Write(); } else{ ofile << HG_token << " 0" << endl; @@ -85,30 +108,35 @@ void FitTofGammaPeak(){ } } - TCanvas* c1 = new TCanvas("Sigma","Sigma",1200,600); - c1->Divide(2,1); + TCanvas* c1 = new TCanvas("Sigma","Sigma",1200,600); + c1->Divide(2,1); - gSigma_LG->SetMarkerStyle(8); - gSigma_HG->SetMarkerStyle(8); + gSigma_LG->SetMarkerStyle(8); + gSigma_HG->SetMarkerStyle(8); - c1->cd(1); - gSigma_LG->Draw(); - c1->cd(2); - gSigma_HG->Draw(); + c1->cd(1); + gSigma_LG->Draw(); + c1->cd(2); + gSigma_HG->Draw(); - gSigma_LG->SetName("sigma_LG"); - gSigma_HG->SetName("sigma_HG"); - - gSigma_LG->Write(); - gSigma_HG->Write(); + gSigma_LG->SetName("sigma_LG"); + gSigma_HG->SetName("sigma_HG"); - orootfile->Write(); - orootfile->Close(); + gSigma_LG->Write(); + gSigma_HG->Write(); - for(int i=0; i<NumberOfAnodes; i++){ - cout << "Anode= " << i+1 << " / " << sigma_anode[i]/NumberOfDetectors << endl; - } + orootfile->Write(); + orootfile->Close(); + double totLG = 0, totHG=0; + for(int i=0; i<NumberOfAnodes; i++){ + cout << "Anode= " << i+1 << " | LG: " << sigma_anode[i]/NumberOfDetectors << " HG: " << sigma_anode_HG[i]/NumberOfDetectors << endl; + totLG += sigma_anode[i]; + totHG += sigma_anode_HG[i]; + } + totLG = totLG/NumberOfDetectors/11.; + totHG = totHG/NumberOfDetectors/11.; + cout << "<sigma> LG: "<< totLG << " HG: "<<totHG << endl; } @@ -128,18 +156,30 @@ bool Finder(TH1F* h, Double_t *mean, Double_t *sigma){ if(nfound == m_NumberOfGammaPeak){ cout << "Gamma Peak Found" << endl; for(int i=0; i<nfound; i++){ - linf = xpeaks[i]-2; - lsup = xpeaks[i]+1; + linf = xpeaks[i]-1.1; + lsup = xpeaks[i]+0.8; + /* if(anode==9){ */ + /* lsup =xpeaks[i]+0.8 */ + /* } */ TF1* gauss = new TF1("gaus","gaus",linf,lsup); h->Fit(gauss,"RQ"); mean[i] = gauss->GetParameter(1); sigma[i] = gauss->GetParameter(2); } + for(int i=0; i<nfound; i++){ + linf = xpeaks[i]-1.3*sigma[i]; + lsup = xpeaks[i]+1*sigma[i]; + TF1* gauss = new TF1("gaus","gaus",linf,lsup); + h->Fit(gauss,"RQ"); + mean[i] = gauss->GetParameter(1); + sigma[i] = gauss->GetParameter(2); + } + return true; } - else if(nfound != m_NumberOfGammaPeak){ + else if(nfound != m_NumberOfGammaPeak){ cout << "Warning. Number of peak different of " << m_NumberOfGammaPeak << " !! / nfound = " << nfound << endl; return false; }