diff --git a/Projects/Vendeta/macro/FitTofGammaPeak.C b/Projects/Vendeta/macro/FitTofGammaPeak.C new file mode 100644 index 0000000000000000000000000000000000000000..1bf1d93caabc098e8bbdc8e3554dace9747ef11b --- /dev/null +++ b/Projects/Vendeta/macro/FitTofGammaPeak.C @@ -0,0 +1,115 @@ +TFile* ifile; + +int NumberOfDetectors=2; +int NumberOfAnodes=11; +int m_NumberOfGammaPeak=1; + + +bool Finder(TH1F* h, Double_t *mean, Double_t *sigma); + +///////////////////////////////////////////////////// +void OpenRootFile(){ + ifile = new TFile("histo_tof_file.root"); +} + +///////////////////////////////////////////////////// +void FitTofGammaPeak(){ + OpenRootFile(); + + TCanvas *cLG[11]; + TCanvas *cHG[11]; + + ofstream ofile; + ofile.open("Vendeta_Time.cal"); + + for(int i=0; i<11; i++){ + TString canvas_name = Form("LG_Anode%i",i+1); + cLG[i] = new TCanvas(canvas_name,canvas_name,1800,1800); + cLG[i]->Divide(10,8); + + canvas_name = Form("HG_Anode%i",i+1); + cHG[i] = new TCanvas(canvas_name,canvas_name,1800,1800); + cHG[i]->Divide(10,8); + + } + + Double_t* mean = new Double_t[1]; + Double_t* sigma = new Double_t[1]; + + for(int i=0; i<NumberOfDetectors; i++){ + for(int j=0; j<NumberOfAnodes; j++){ + // LG // + TString histo_name = Form("hLG_Det%i_Anode%i",i+1,j+1); + TH1F* h = (TH1F*) ifile->FindObjectAny(histo_name); + + cLG[j]->cd(i+1); + h->Draw(); + + 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] << endl; + } + else{ + ofile << LG_token << " 0" << endl; + } + + // HG // + histo_name = Form("hHG_Det%i_Anode%i",i+1,j+1); + h = (TH1F*) ifile->FindObjectAny(histo_name); + + cHG[j]->cd(i+1); + h->Draw(); + + mean[0] = 0; + sigma[0] = 0; + 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] << endl; + } + else{ + ofile << HG_token << " 0" << endl; + } + + + } + + } +} + + +///////////////////////////////////////////////////// +bool Finder(TH1F* h, Double_t *mean, Double_t *sigma){ + Double_t resolsig = 2; + Double_t resolsigTSpec = 1; + Double_t seuil = 0.2; + + TSpectrum* s = new TSpectrum(m_NumberOfGammaPeak,resolsigTSpec); + + Int_t nfound = s->Search(h,resolsig,"new",seuil); + Double_t *xpeaks = s->GetPositionX(); + + Double_t linf=0; + Double_t lsup=0; + if(nfound == m_NumberOfGammaPeak){ + cout << "Gamma Peak Found" << endl; + for(int i=0; i<nfound; i++){ + linf = xpeaks[i]-2; + lsup = xpeaks[i]+0.4; + + TF1* gauss = new TF1("gaus","gaus",linf,lsup); + h->Fit(gauss,"RQ"); + mean[i] = gauss->GetParameter(1); + sigma[i] = gauss->GetParameter(2); + } + return true; + } + + if(nfound != m_NumberOfGammaPeak){ + cout << "Warning. Number of peak different of " << m_NumberOfGammaPeak << " !! / nfound = " << nfound << endl; + return false; + } + + +}