15 {
16
17 if (inTotFile.empty()) return false;
18
19 TFile totFile(inTotFile.c_str(),"READ");
20 if (not totFile.IsOpen()) {
21 printf("Error - File %s could not be opened.\n",inTotFile.c_str());
22 totFile.Close();
23 return false;
24 } else {
25 printf("File %s opened.\n",inTotFile.c_str());
26 printf("Running TOT calibration...\n");
27 }
28
29
30 std::vector< std::vector< std::unique_ptr<TH1F> > > histogramsTOT;
31 std::vector< std::vector< std::unique_ptr<TH1F> > > histogramsTOTsig;
32 for(
unsigned int FE = 0; FE <
m_nFE; FE++){
33
34 histogramsTOT.push_back( std::vector< std::unique_ptr<TH1F> >() );
35 histogramsTOTsig.push_back( std::vector< std::unique_ptr<TH1F> >() );
36
37
39 TString
title =
"FE"+std::to_string(FE)+
"_pixType"+std::to_string(
pixel);
41 htot->SetDirectory(0);
43 htotsig->SetDirectory(0);
44
45 histogramsTOT.at(FE).push_back(std::move(htot));
46
47 histogramsTOTsig.at(FE).push_back(std::move(htotsig));
48 }
49 }
50
51
53 TKey* rodKey;
54
55 while ((rodKey=static_cast<TKey*>(rodItr()))) {
56 TDirectoryFile* rodDir = static_cast<TDirectoryFile*>(rodKey->ReadObj());
58 const TString rodName(rodKey->GetName());
59 printf("%s\n",rodName.Data());
60 TKey* modKey;
61 while ((modKey=static_cast<TKey*>(modItr()))) {
62 const TString
modName(modKey->GetName());
63
65 if (not pm.
contains(std::string(modName)))
continue;
66
68 continue;
69 }
70
71 printf(
" -> %s\n",
modName.Data());
72
73
74 std::array<std::array<float, m_ncharge>,
m_nFE> totArrI{};
75 std::array<std::array<float, m_ncharge>,
m_nFE> totErrArrI{};
76 std::array<std::array<float, m_ncharge>,
m_nFE> totSigArrI{};
77 std::array<std::array<float, m_ncharge>,
m_nFE> totSigErrArrI{};
78 std::array<std::array<float, m_ncharge>,
m_nFE> totLongArrI{};
79 std::array<std::array<float, m_ncharge>,
m_nFE> totErrLongArrI{};
80
81
83
84
87 if(!h2dTOTmean or !h2dTOTsig) {
88 return false;
89 }
90 h2dTOTmean->SetDirectory(0);
91 h2dTOTsig->SetDirectory(0);
92
93 for (
unsigned int ieta = 0; ieta <
m_etaBins; ieta++) {
94 for (
unsigned int iphi = 0; iphi <
m_phiBins; iphi++) {
95 float totmean = h2dTOTmean->GetBinContent(ieta + 1, iphi + 1);
96 float totsig = h2dTOTsig ->GetBinContent(ieta + 1, iphi + 1);
97
98 if (totmean<0.1) {
99 continue;
100 }
101
102 int FE =
chipId(iphi, ieta);
104
105 if(FE<0){
106 return false;
107 }
108
109 histogramsTOT.at(FE).at(
pixel)->Fill(totmean);
110 histogramsTOTsig.at(FE).at(
pixel)->Fill(totsig);
111
112 }
113 }
114
115
116 h2dTOTmean.reset();
117 h2dTOTsig.reset();
118
119
120 for(
unsigned int FE = 0; FE <
m_nFE; FE++){
122
124 totArrI.at(FE).at(c) = histogramsTOT.at(FE).at(
pixel)->GetMean();
125 totErrArrI.at(FE).at(c) = histogramsTOT.at(FE).at(
pixel)->GetMeanError();
126 totSigArrI.at(FE).at(c) = std::sqrt(std::pow(histogramsTOTsig.at(FE).at(
pixel)->GetMean() ,2)+std::pow(histogramsTOT.at(FE).at(
pixel)->GetRMS() ,2));
127 totSigErrArrI.at(FE).at(c) = std::sqrt(std::pow(histogramsTOTsig.at(FE).at(
pixel)->GetMeanError(),2)+std::pow(histogramsTOT.at(FE).at(
pixel)->GetRMSError(),2));
128
129 if(totSigErrArrI.at(FE).at(c) > 1.0){
130 totArrI.at(FE).at(c) = 0.0;
131 }
132
133 }
134 else{
135 totLongArrI.at(FE).at(c) = histogramsTOT.at(FE).at(
pixel)->GetMean();
136 totErrLongArrI.at(FE).at(c) = histogramsTOT.at(FE).at(
pixel)->GetMeanError();
137
138 if(totErrLongArrI.at(FE).at(c) > 1.0){
139 totLongArrI.at(FE).at(c) = 0.0;
140 }
141
142 }
143
144
145 histogramsTOT.at(FE).at(
pixel)->Reset(
"ICESM");
146 histogramsTOTsig.at(FE).at(
pixel)->Reset(
"ICESM");
147 }
148 }
149 }
150
151
152 for(
unsigned int FE = 0; FE <
m_nFE; FE++) {
153
154 TString
subdir(((FE < 10) ?
"FE0" :
"FE") +std::to_string(FE));
155
156 std::vector<float> v_Q;
157 std::vector<float> v_Qerr;
158 std::vector<float> v_TOT;
159 std::vector<float> v_TOTerr;
160 std::vector<float> v_TOTsig;
161 std::vector<float> v_TOTsigerr;
162 std::vector<float> v_TOTlong;
163 std::vector<float> v_TOTlongerr;
164
167 std::copy(std::begin(totArrI[FE]) , std::end(totArrI[FE]) , std::back_inserter(v_TOT) );
168 std::copy(std::begin(totErrArrI[FE]) , std::end(totErrArrI[FE]) , std::back_inserter(v_TOTerr) );
169 std::copy(std::begin(totSigArrI[FE]) , std::end(totSigArrI[FE]) , std::back_inserter(v_TOTsig) );
170 std::copy(std::begin(totSigErrArrI[FE]) , std::end(totSigErrArrI[FE]) , std::back_inserter(v_TOTsigerr) );
171 std::copy(std::begin(totLongArrI[FE]) , std::end(totLongArrI[FE]) , std::back_inserter(v_TOTlong) );
172 std::copy(std::begin(totErrLongArrI[FE]) , std::end(totErrLongArrI[FE]) , std::back_inserter(v_TOTlongerr) );
173
174 std::vector<float> pixNormalParams;
175 std::vector<float> pixNormalParamsQuality;
176 std::vector<float> pixSigParams;
177 std::vector<float> pixSigParamsQuality;
178 std::vector<float> pixLongParams;
179 std::vector<float> pixLongParamsQuality;
180
181
183 do{
184 int vecsize = v_Q.size();
185
186 std::unique_ptr<TGraphErrors> graphnormal = std::make_unique<TGraphErrors>(vecsize, &v_Q.at(0), &v_TOT.at(0) , &v_Qerr.at(0), &v_TOTerr.at(0) );
187 std::unique_ptr<TGraphErrors> graphsig = std::make_unique<TGraphErrors>(vecsize, &v_Q.at(0), &v_TOTsig.at(0) , &v_Qerr.at(0), &v_TOTsigerr.at(0) );
188
191
192 graphnormal->Fit(functnormal.get() ,"MRQ");
193 graphsig ->Fit(functnormalsig.get(),"MRQ");
194
195 pixNormalParams =
getParams(functnormal.get() ,3 );
196 pixSigParams =
getParams(functnormalsig.get(),2 );
197
200
202
204 if( !
m_wFile->Get(rodName+
"/"+modName+
"/TOTfits/"+subdir) ){
205 m_wFile->mkdir(rodName+
"/"+modName+
"/TOTfits/"+subdir,rodName);
206 }
207
208 m_wFile->cd(rodName+
"/"+modName+
"/TOTfits/"+subdir);
209
210 graphTitles(graphnormal, TString(modName+
" - "+subdir+
" - normal pixels: Fit: "+std::to_string(n_fit)).
Data(),
"TOT");
211 graphTitles(graphsig , TString(modName+
" - "+subdir+
" - normal pixels: Fit: "+std::to_string(n_fit)).
Data(),
"Charge smearing");
212
213 graphnormal->Write(TString("normal_fit_"+std::to_string(n_fit)), TObject::kWriteDelete);
214 graphsig->Write(TString("smearing_fit_"+std::to_string(n_fit)), TObject::kWriteDelete);
215 n_fit++;
216 }
217
218 functnormal.reset();
219 functnormalsig.reset();
220
221 graphnormal.reset();
222 graphsig.reset();
223
224 }
while(
reFit_normalPix(pixNormalParams, v_Q, v_Qerr, v_TOT, v_TOTerr, v_TOTsig, v_TOTsigerr, FE ) );
225
226
227
228 v_Q.clear();
229 v_Qerr.clear();
230
233
234
235
236 n_fit = 0;
237 do{
238
239
240 int vecsize = v_Q.size();
241
242 std::unique_ptr<TGraphErrors> graflong = std::make_unique<TGraphErrors>(vecsize, &v_Q.at(0), &v_TOTlong.at(0), &v_Qerr.at(0), &v_TOTlongerr.at(0) );
243
245
246 graflong ->Fit(functlong.get() ,"MRQ");
247
248 pixLongParams =
getParams(functlong.get() ,3 );
250
252
254 if( !
m_wFile->Get(rodName+
"/"+modName+
"/TOTfits/"+subdir) ){
255 m_wFile->mkdir(rodName+
"/"+modName+
"/TOTfits/"+subdir,rodName);
256 }
257
258 m_wFile->cd(rodName+
"/"+modName+
"/TOTfits/"+subdir);
259
260 graphTitles(graflong, TString(modName+
" - "+subdir+
" - long+ganged pixels: Fit: "+std::to_string(n_fit)).
Data(),
"TOT");
261
262 graflong->Write(TString("long_ganged_fit_"+std::to_string(n_fit)), TObject::kWriteDelete);
263 n_fit++;
264 }
265
266
267 functlong.reset();
268
269
270 graflong.reset();
271
272
273 }while( false);
274
275
276
277 int modID = pm.
getID(std::string(modName));
278 auto itr = map_info.find( modID );
279
280 if (itr != map_info.end()) {
281 (itr->second).at(FE)->set_NormalParams( pixNormalParams);
282 (itr->second).at(FE)->set_LongParams ( pixLongParams );
283 (itr->second).at(FE)->set_SigParams ( pixSigParams );
284
285 (itr->second).at(FE)->set_times_fitted ( n_fit );
286
287 (itr->second).at(FE)->set_NormalParamsQuality( pixNormalParamsQuality);
288 (itr->second).at(FE)->set_LongParamsQuality ( pixLongParamsQuality );
289 (itr->second).at(FE)->set_SigParamsQuality ( pixSigParamsQuality );
290 }
291 else{
292 printf("Error - Module not found in fitting step... Skipping.\n");
293 return false;
294 }
295
296 }
297 }
298 }
299
300
301 for(
unsigned int FE = 0; FE <
m_nFE; FE++) {
303 histogramsTOT.at(FE).at(
pixel).reset();
304 histogramsTOTsig.at(FE).at(
pixel).reset();
305 }
306 }
307
308 totFile.Close();
309 return true;
310}
static constexpr std::array< float, m_ncharge > m_chargeArr
static constexpr int m_totnbins
std::vector< float > getParams(const TF1 *f, unsigned int params)
std::vector< float > getParams_quality(const TF1 *f)
bool reFit_normalPix(std::vector< float > ¶ms, std::vector< float > &q, std::vector< float > &qerr, std::vector< float > &tot, std::vector< float > &toterr, std::vector< float > &sig, std::vector< float > &sigerr, const unsigned int fe)
static constexpr float m_totLo
static constexpr float m_totsigHi
static constexpr float m_totsigLo
static constexpr int m_totsigNBins
static constexpr std::array< float, m_ncharge > m_chargeErrArr
void graphTitles(const std::unique_ptr< TGraphErrors > &graph, const std::string &name, const std::string &Yname)
static constexpr float m_totHi