BmnRoot
Loading...
Searching...
No Matches
fhcal_profile.cpp
Go to the documentation of this file.
1#include <iostream>
2#include <fstream>
3#include <vector>
4#include <TFile.h>
5#include <TNtuple.h>
6#include <TGraph.h>
7#include <TF1.h>
8#include <TTree.h>
9#include <TCanvas.h>
10#include <TH1F.h>
11#include "TCutG.h"
12#include <algorithm>
13#include <fstream>
14#include <iostream>
15#include <map>
16#include <numeric>
17#include <stdio.h>
18//#include "utils.h"
19#include "TString.h"
20#include "TH1D.h"
21#include "TMultiGraph.h"
22#include "TStyle.h"
23#include "TH2.h"
24//#include "BmnHodoDigi.h"
25#include "TClonesArray.h"
26
27#include "../common/utilites.h"
28
29#define kNmodules 55
30
31
32void fhcal_profile(TString converted_root_file, TString result_file_name, int max_entries)
33{
34
35 TObjArray *canvas_array = new TObjArray;
36 canvas_array->SetName ("Canvas");
37
38 TH1F* calo_summ = new TH1F("calo_summ", "calo_summ", 300,0,300);
39 calo_summ->SetTitle(Form("%s; Energy [mip]; Counts", result_file_name.Data()));
40
41 TH2F* h2_calo = new TH2F("calo_2d", "calo_2d", 50,0,1500, 60,0,1200);
42 h2_calo->SetTitle(Form("%s; x [mm]; y [mm]; Average signal [mip]", result_file_name.Data()));
43 TH2F* h2_text_center = new TH2F("text_center", "text_center", 50,0,1500, 60,0,1200);
44
46 Mapper->ParseConfig("FHCAL_map_dry_run_2022.txt");
47 auto ThatVectorX = Mapper->GetUniqueXpositions();
48 auto ThatVectorY = Mapper->GetUniqueYpositions();
49 auto ThatVectorZ = Mapper->GetUniqueZpositions();
50 delete Mapper;
51
52 std::vector<TH1F*> profile_hist_vect;
53 profile_hist_vect.resize(kNmodules);
54 for(int mod_it = 1; mod_it < kNmodules; mod_it++)
55 profile_hist_vect.at(mod_it) = new TH1F(Form("module_%i", mod_it),Form("module_%i", mod_it),10,0.5,10.5);
56
57 TFile *_file0 = TFile::Open(converted_root_file, "READONLY");
58 TTree *tree = (TTree *)_file0->Get("bmndata");
59
60 TClonesArray *DigiArray = nullptr; //leave nullptr!!!
61 tree->SetBranchAddress("FHCalDigi", &DigiArray);
62
63 TClonesArray *ScWallDigiArray = nullptr; //leave nullptr!!!
64 tree->SetBranchAddress("ScWallDigi", &ScWallDigiArray);
65
66 double SumEnergy = 0.;
67 double ScWallCtrEnergy = 0.;
68
69 int counter = 0;
70 int n_events = (max_entries>0 && tree->GetEntries()>max_entries)? max_entries : tree->GetEntries();
71 cout << n_events << endl;
72 for (int ev = 0; ev < n_events; ev++)
73 {
74 tree->GetEntry(ev);
75
76 ScWallCtrEnergy = 0.;
77 for (int i = 0; i < ScWallDigiArray->GetEntriesFast(); i++)
78 {
79 BmnScWallDigi *ThisDigi = (BmnScWallDigi *)ScWallDigiArray->At(i);
80
81 //##################################
82 //SELECTION
83 if(ThisDigi->fFitR2 > 0.5) continue;
84 auto cell_id = ThisDigi->GetCellId();
85 if(cell_id != 14 && cell_id != 15 && cell_id != 24 && cell_id != 25) continue;
86 ScWallCtrEnergy += ThisDigi->GetSignal();
87
88 }
89 if(ScWallCtrEnergy < 60) continue;
90
91 float responses[kNmodules];
92 memset(responses, 0, sizeof(responses[0]) * kNmodules);
93 SumEnergy = 0.;
94 for (int i = 0; i < DigiArray->GetEntriesFast(); i++)
95 {
96 counter++;
97 BmnFHCalDigi *ThisDigi = (BmnFHCalDigi *)DigiArray->At(i);
98
99 //##################################
100 //SELECTION
101 if(ThisDigi->fFitR2 > 0.2) continue;
102 if(ThisDigi->fTimeMax <= 36 || ThisDigi->fTimeMax >= 39) continue;
103 if(ThisDigi->fFitTimeMax <= 34 || ThisDigi->fFitTimeMax >= 39) continue;
104 //##################################
105
106 auto mod_id = ThisDigi->GetModuleId();
107 //if(mod_id != 16 && mod_id != 11 && mod_id != 17 && mod_id != 20 && mod_id != 40) continue;
108 //if(mod_id != 16) continue;
109 auto sec_id = ThisDigi->GetSectionId();
110 profile_hist_vect.at(mod_id)->Fill(sec_id, ThisDigi->GetSignal());
111
112 float realXpos = ThatVectorX.at(ThisDigi->GetX());
113 float realYpos = ThatVectorY.at(ThisDigi->GetY());
114 float realZpos = ThatVectorZ.at(ThisDigi->GetZ());
115
116 h2_calo->Fill(realXpos,realYpos,ThisDigi->GetSignal());
117 SumEnergy += ThisDigi->GetSignal();
118
119 auto ibin = h2_text_center->FindBin(realXpos, realYpos+50);
120 if(h2_text_center->GetBinContent(ibin) < 1)
121 h2_text_center->Fill(realXpos, realYpos+50, ThisDigi->GetModuleId());
122
123
124 }
125 if(SumEnergy > 0.1)
126 calo_summ->Fill(SumEnergy);
127
128 }
129
130
131 for(int mod_it = 1; mod_it < kNmodules; mod_it++)
132 profile_hist_vect.at(mod_it)->Scale(1./n_events);
133
134 TCanvas* canv_summ = new TCanvas;
135 canvas_array->Add(canv_summ);
136 canv_summ->SetLogy();
137 calo_summ->Draw();
138
139 TCanvas* canv_2d = new TCanvas;
140 gPad->SetRightMargin(0.15);
141 canvas_array->Add(canv_2d);
142 h2_calo->SetBit(TH1::kNoStats);
143 h2_calo->Scale(1./n_events);
144 h2_calo->Draw("colz");
145 h2_text_center->SetMarkerSize(1.3);
146 h2_text_center->Draw("text same");
147
148/*
149 TCanvas* canv_all = new TCanvas;
150 canv_all->DivideSquare(kNmodules+1);
151 canvas_array->Add(canv_all);
152
153 std::vector<TCanvas*> canv_vect;
154 canv_vect.resize(kNmodules);
155 for(int mod_it = 1; mod_it < kNmodules; mod_it++){
156 canv_vect.at(mod_it) = new TCanvas;
157 canvas_array->Add(canv_vect.at(mod_it));
158 profile_hist_vect.at(mod_it)->SetTitle( Form("module_%i; # sec; Average signal [mip]", mod_it) );
159 //profile_hist_vect.at(mod_it)->GetYaxis()->SetRangeUser(0,10);
160 profile_hist_vect.at(mod_it)->Draw("hist");
161
162 canv_all->cd(mod_it);
163 profile_hist_vect.at(mod_it)->Draw("hist");
164 }
165*/
166
167 for (Int_t i = 0; i < canvas_array->GetLast (); i++)
168 ((TCanvas*) canvas_array->At(i))->SaveAs ( (result_file_name + ".pdf(").Data() );
169 ((TCanvas*) canvas_array->At (canvas_array->GetLast ()))->SaveAs ( (result_file_name + ".pdf)").Data() );
170 printf("file %s was written\n", (result_file_name + ".pdf").Data() );
171}
void memset(T *dest, T i, size_t num)
uses binary expansion of copied volume for speed up
Definition L1Grid.h:25
int i
Definition P4_F32vec4.h:22
double GetSignal() const
float fFitTimeMax
Quality of waveform fit [] – good near 0.
float fFitR2
Energy deposition from fit of waveform [adc counts].
int fTimeMax
Energy deposition from waveform [adc counts].
Data class for Bmn FHCal digital signal processing.
uint32_t GetSectionId() const
uint32_t GetModuleId() const
void ParseConfig(TString mappingFile)
Class for experimental data at digi level.
uint32_t GetCellId() const
#define kNmodules
void fhcal_profile(TString converted_root_file, TString result_file_name, int max_entries)