BmnRoot
Loading...
Searching...
No Matches
light_yield.cpp
Go to the documentation of this file.
1#include <fstream>
2#include <iostream>
3
4#include <TDirectory.h>
5#include <TStyle.h>
6#include <TCanvas.h>
7#include <TH1.h>
8
9#define kTotalModules 54
10
11
13{
15 Mapper->ParseCalibration("FHCAL_calibration_2022.txt");
16
17 TString led_files_path = "/home/nikolay/BMN/FHCal/LED/";
18
19
20 double final_calib [kTotalModules+1][11];
21 memset(final_calib, 0, sizeof(final_calib[0][0]) * (kTotalModules+1) * 11);
22 for(uint32_t mod_iter = 1; mod_iter <=54; mod_iter++){
23
24 TString led_calib_par_file = led_files_path + Form("mod%02d.txt", mod_iter);
25 ifstream led_params_file(led_calib_par_file.Data(), std::ifstream::in);
26 cout<<led_calib_par_file<<endl;
27 vector<double> ledVec;
28 if(led_params_file.is_open())
29 {
30 //Got to the last character before EOF
31 led_params_file.seekg(-1, std::ios_base::end);
32 if(led_params_file.peek() == '\n')
33 {
34 //Start searching for \n occurrences
35 led_params_file.seekg(-1, std::ios_base::cur);
36 int i = led_params_file.tellg();
37 for(i;i > 0; i--)
38 {
39 if(led_params_file.peek() == '{')
40 {
41 //Found
42 led_params_file.get();
43 break;
44 }
45 //Move one character back
46 led_params_file.seekg(i, std::ios_base::beg);
47 }
48 }
49
50 ledVec.clear();
51 ledVec.resize(10);
52 std::string lastline;
53 getline(led_params_file, lastline );
54 stringstream ss( lastline );
55 string result;
56
57 int counter = 0;
58 while( ss.good() )
59 {
60 getline(ss, result, ',' );
61 cout<<result<<endl;
62
63 ledVec.at(counter) = stod(result);
64 counter++;
65 }
66
67 for(auto it : ledVec) cout<<it<<" ";
68 cout<<endl;
69 }
70
71 for(uint32_t sec_iter = 1; sec_iter <=10; sec_iter++){
72 uint32_t address = BmnFHCalAddress::GetAddress(0, mod_iter, sec_iter, 0, 0, 0);
73 auto calib_pair = Mapper->GetCalibPairFromAddress(address);
74
75 double mip_calib = calib_pair.first;
76
77 cout<<mod_iter<<" "<<sec_iter<<" "<<mip_calib<<endl;
78 if(mip_calib < 1e-6) mip_calib = 0.;
79 else mip_calib = 1./mip_calib;
80
81 final_calib [mod_iter][sec_iter] = mip_calib*ledVec.at(sec_iter-1);
82
83
84
85 }
86
87
88
89 }
90
91 TH1 *th1_hist_ptr = nullptr;
92 TCanvas *tcanv_ptr = nullptr;
93
94 TObjArray *result_array = new TObjArray;
95 result_array->SetName("calo_npe_calib");
96 result_array->SetOwner();
97
98 TObjArray *canvas_array = new TObjArray;
99 canvas_array->SetName ("Canvas");
100
101 for(Int_t module_iter = 1; module_iter <= kTotalModules; module_iter++)
102 {
103 TString module_name = Form("bmn_fhcal_module_%02d", module_iter);
104 th1_hist_ptr = new TH1F(Form("Module_%s", module_name.Data()),
105 Form("Module_%s", module_name.Data()),
106 12, -0.5, 11.5);
107 th1_hist_ptr->SetTitle(Form("%s; #section; Light yield [ph.e./mip]", module_name.Data()));
108 th1_hist_ptr->SetMarkerStyle(23);
109 result_array->Add(th1_hist_ptr);
110 }
111
112
113 for(Int_t module_iter = 1; module_iter <= kTotalModules; module_iter++)
114 {
115 TString module_name = Form("bmn_fhcal_module_%02d", module_iter);
116 th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( Form("Module_%s", module_name.Data()) )));
117 for(int sec_iter = 1; sec_iter <= 10; sec_iter++)
118 th1_hist_ptr->Fill(sec_iter, final_calib [module_iter][sec_iter]);
119 }
120
121 TCanvas *canvas_ly = new TCanvas[kTotalModules+1];
122 gStyle->SetOptStat(0);
123 for(Int_t module_iter = 1; module_iter <= kTotalModules; module_iter++)
124 {
125 tcanv_ptr = &canvas_ly[module_iter];
126 tcanv_ptr->SetName(Form("c_light_yield_mod_%i", module_iter));
127 tcanv_ptr->SetTitle(Form("c_light_yield_mod_%i", module_iter));
128 canvas_array->Add(tcanv_ptr);
129 tcanv_ptr->cd();
130
131 TString module_name = Form("bmn_fhcal_module_%02d", module_iter);
132 th1_hist_ptr = ((TH1*)(gDirectory->FindObjectAny( Form("Module_%s", module_name.Data()) )));
133 th1_hist_ptr->GetYaxis()->SetRangeUser(0, 1.1*th1_hist_ptr->GetMaximum());
134 th1_hist_ptr->Draw("hist P");
135 }
136
137 TString result_file_name = "resss";
138 for (Int_t i = 0; i < canvas_array->GetLast (); i++)
139 ((TCanvas*) canvas_array->At(i))->SaveAs ((result_file_name + ".pdf(").Data ());
140 ((TCanvas*) canvas_array->At (canvas_array->GetLast ()))->SaveAs ((result_file_name + ".pdf)").Data ());
141 printf("file %s was written\n", (result_file_name + ".pdf").Data());
142
143 TFile *result_file = new TFile((result_file_name + ".root").Data(), "RECREATE");
144 TString start_path = result_array->GetName();
145 result_file->mkdir(start_path.Data());
146 result_file->cd(start_path.Data());
147 TIter nx_iter((TCollection*)(result_array));
148 TObject* obj_ptr;
149 while ( (obj_ptr=(TObjArray*)nx_iter()) )
150 {
151 if(obj_ptr == nullptr) continue;
152 printf("Writing %s object\n", obj_ptr->GetName());
153 obj_ptr->Write();
154 }
155 printf("file %s was written\n", (result_file_name + ".root").Data());
156 result_file->Close();
157 delete result_file;
158
159
160
161}
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
static uint32_t GetAddress(uint32_t ModuleType, uint32_t ModuleId, uint32_t SectionId, uint32_t ScintillatorId=0)
Return address from system ID, Module type, Module ID, Section ID, Scintillator ID (optional).
void ParseCalibration(TString calibrationFile)
std::optional< std::pair< float, float > > GetCalibPairFromAddress(uint32_t address)
void light_yield()
#define kTotalModules