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