/** @file MCBM PSD Energy profile ** @author Nikolay Karpushkin ** @date 15.12.2019 ** ROOT macro to visualize psd energy in psd digi */ void standalone_event_build(TString inFileName) { TString srcDir = gSystem->Getenv("VMCWORKDIR"); TFile* inFile = TFile::Open(inFileName.Data(), "READONLY"); TTree* inTree = (TTree*)inFile->Get("cbmsim"); if(inTree == nullptr) { cout<<"tree not found"< *fPsdDigis = new std::vector; inTree->SetBranchAddress("PsdDigi", &fPsdDigis); if(fPsdDigis == nullptr) { cout<<"no psd digis vector in tree"<GetEntries(); ev++) { inTree->GetEntry(ev); Int_t nPsdDigis = fPsdDigis->size(); if (ev % 10 == 0 ) std::cout << "Entry " << ev << " / " << inTree->GetEntries() << " Psd Digis: " << nPsdDigis << std::endl; if(nPsdDigis == 0) continue; CbmPsdDigi digi; Bool_t IsNewEvent = false; for (Int_t iDigi = 0; iDigi < nPsdDigis; iDigi++) { digi = (*fPsdDigis)[iDigi]; //if(! (digi.GetSectionID() == 0 ) ) continue; //if(digi.GetSectionID() > 8) continue; if( digi.GetTime()-event_time > event_time_gate ) { prev_event_time = event_time; event_time = digi.GetTime(); IsNewEvent = true; } else IsNewEvent = false; if(IsNewEvent) { if(IsFirstEvent) { IsFirstEvent = false; continue; } //skip info before first event Bool_t GoodEvent = true; if(GoodEvent) { th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Spill_structure" ))); th1_hist_ptr->Fill(event_time/1e9); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Digi_time_diff" ))); th1_hist_ptr->Fill(event_time - prev_event_time); Double_t psd_energy = 0.; Fired_psd_channels_in_ev = 0; for(UInt_t ch_iter = 0; ch_iter < total_cells; ch_iter++) { ch_energy_overEv[ch_iter] += ch_energy[ch_iter]; psd_energy += ch_energy[ch_iter]; th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( Form("Energy_distrib_good_ev_ch%i", ch_iter) ))); if(ch_energy[ch_iter] > 1.) th1_hist_ptr->Fill(ch_energy[ch_iter]); if(ch_energy[ch_iter] > 1.) Fired_psd_channels_in_ev++; ch_energy[ch_iter] = 0.; } //if(Fired_psd_channels_in_ev < 2) continue; th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Energy_distrib" ))); th1_hist_ptr->Fill(psd_energy); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Fired_psd_chs" ))); th1_hist_ptr->Fill(Fired_psd_channels_in_ev); /* Double_t hodo_energy = 0.5*(ch_energy[17] + ch_energy[19]); ch_energy_overEv[17] += ch_energy[17]; ch_energy_overEv[19] += ch_energy[19]; th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Cosmic_check" ))); if(ch_energy[17] > 1. && ch_energy[19] > 1.) th1_hist_ptr->Fill(0.5*(ch_energy[17] + ch_energy[19])); ch_energy[17] = 0.; ch_energy[19] = 0.; th2_hist_ptr = ((TH2*)(gDirectory->FindObjectAny( "PsdVsHodo" ))); th2_hist_ptr->Fill(psd_energy, hodo_energy); */ Ev_counter++; }//is good event else { for(UInt_t ch_iter = 0; ch_iter < total_channels; ch_iter++) ch_energy[ch_iter] = 0.; } }//is new event Double_t Edep = digi.GetEdep(); UInt_t SectionID = digi.GetSectionID(); //if(ch_energy[SectionID] > 1.) cout<<"PileUp candidate in channel "<FindObjectAny( Form("Energy_distrib_ch%i", SectionID) ))); th1_hist_ptr->Fill(Edep); }//digi loop }//event loop th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Energy_profile" ))); for(UInt_t ch_iter = 0; ch_iter < total_channels; ch_iter++) th1_hist_ptr->Fill(ch_iter, ch_energy_overEv[ch_iter]/Ev_counter); TCanvas *canvas_time_spill = new TCanvas("c_time_spill", "c_time_spill"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Spill_structure" ))); th1_hist_ptr->Draw(); TCanvas *canvas_time_diff_ev = new TCanvas("c_time_diff_ev", "c_time_diff_ev"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Digi_time_diff" ))); th1_hist_ptr->Draw(); TCanvas *canvas_energy_pr = new TCanvas("c_energy_pr", "c_energy_pr"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Energy_profile" ))); th1_hist_ptr->Draw("hist"); TCanvas *canvas_energy_dstr = new TCanvas("c_energy_dstr", "c_energy_dstr"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Energy_distrib" ))); th1_hist_ptr->Draw(); TCanvas *canvas_fired_chs = new TCanvas("c_fired_ch", "c_fired_ch"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Fired_psd_chs" ))); th1_hist_ptr->Draw(); TCanvas *canvas_psd_hodo = new TCanvas("c_psd_hodo", "c_psd_hodo"); th2_hist_ptr = ((TH2*)(gDirectory->FindObjectAny( "PsdVsHodo" ))); th2_hist_ptr->Draw("colz"); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( "Cosmic_check" ))); th1_hist_ptr->Draw(); TCanvas *canvas_energy_dstr_ch = new TCanvas("c_energy_dstr_ch", "c_energy_dstr_ch"); canvas_energy_dstr_ch->DivideSquare(total_channels); for(UInt_t ch_iter = 0; ch_iter < total_channels; ch_iter++) { canvas_energy_dstr_ch->cd(ch_iter+1); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( Form("Energy_distrib_ch%i", ch_iter) ))); th1_hist_ptr->Draw(); } TCanvas *canvas_energy_dstr_gEv_ch = new TCanvas("c_energy_dstr_gEv_ch", "c_energy_dstr_gEv_ch"); canvas_energy_dstr_gEv_ch->DivideSquare(total_channels); for(UInt_t ch_iter = 0; ch_iter < total_channels; ch_iter++) { canvas_energy_dstr_gEv_ch->cd(ch_iter+1); th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( Form("Energy_distrib_good_ev_ch%i", ch_iter) ))); th1_hist_ptr->Draw(); } }