174 {
175 MsgStream log(
msgSvc(), name() );
176 log << MSG::INFO << "DedxCalibMomentum::WriteHists()" << endmsg;
177
178 double chientryNo[
nbins] = { 0 }, chimean[
nbins] = { 0 }, chimeanerr[
nbins] = { 0 },
179 chisigma[
nbins] = { 0 }, chisq[
nbins] = { 0 };
180 double pos_chientryNo[
nbins] = { 0 }, pos_chimean[
nbins] = { 0 },
181 pos_chimeanerr[
nbins] = { 0 }, pos_chisigma[
nbins] = { 0 }, pos_chisq[
nbins] = { 0 };
182 double neg_chientryNo[
nbins] = { 0 }, neg_chimean[
nbins] = { 0 },
183 neg_chimeanerr[
nbins] = { 0 }, neg_chisigma[
nbins] = { 0 }, neg_chisq[
nbins] = { 0 };
184 double fitentryNo[
nbins] = { 0 }, fitmean[
nbins] = { 0 }, fitmeanerr[
nbins] = { 0 },
185 fitsigma[
nbins] = { 0 }, fitchisq[
nbins] = { 0 };
186 double pos_fitentryNo[
nbins] = { 0 }, pos_fitmean[
nbins] = { 0 },
187 pos_fitmeanerr[
nbins] = { 0 }, pos_fitsigma[
nbins] = { 0 },
188 pos_fitchisq[
nbins] = { 0 };
189 double neg_fitentryNo[
nbins] = { 0 }, neg_fitmean[
nbins] = { 0 },
190 neg_fitmeanerr[
nbins] = { 0 }, neg_fitsigma[
nbins] = { 0 },
191 neg_fitchisq[
nbins] = { 0 };
192 double hits_mean[
nbins] = { 0 }, hits_sigma[
nbins] = { 0 };
193 double pBin[
nbins] = { 0 };
194
195 for (
int i = 0; i <
nbins; i++ )
196 {
197 pBin[i] = ( i + 0.5 ) * bin_step + pMin;
198
199 chientryNo[i] = m_chi[i]->Integral();
200 if ( chientryNo[i] > 100 )
201 {
202 chimean[i] = m_chi[i]->GetFunction( "gaus" )->GetParameter( 1 );
203 chimeanerr[i] = m_chi[i]->GetFunction( "gaus" )->GetParError( 1 );
204 chisigma[i] = m_chi[i]->GetFunction( "gaus" )->GetParameter( 2 );
205 chisq[i] = ( m_chi[i]->GetFunction( "gaus" )->GetChisquare() ) /
206 ( m_chi[i]->GetFunction( "gaus" )->GetNDF() );
207 }
208 pos_chientryNo[i] = m_pos_chi[i]->Integral();
209 if ( pos_chientryNo[i] > 100 )
210 {
211 pos_chimean[i] = m_pos_chi[i]->GetFunction( "gaus" )->GetParameter( 1 );
212 pos_chimeanerr[i] = m_pos_chi[i]->GetFunction( "gaus" )->GetParError( 1 );
213 pos_chisigma[i] = m_pos_chi[i]->GetFunction( "gaus" )->GetParameter( 2 );
214 pos_chisq[i] = ( m_pos_chi[i]->GetFunction( "gaus" )->GetChisquare() ) /
215 ( m_pos_chi[i]->GetFunction( "gaus" )->GetNDF() );
216 }
217 neg_chientryNo[i] = m_neg_chi[i]->Integral();
218 if ( neg_chientryNo[i] > 100 )
219 {
220 neg_chimean[i] = m_neg_chi[i]->GetFunction( "gaus" )->GetParameter( 1 );
221 neg_chimeanerr[i] = m_neg_chi[i]->GetFunction( "gaus" )->GetParError( 1 );
222 neg_chisigma[i] = m_neg_chi[i]->GetFunction( "gaus" )->GetParameter( 2 );
223 neg_chisq[i] = ( m_neg_chi[i]->GetFunction( "gaus" )->GetChisquare() ) /
224 ( m_neg_chi[i]->GetFunction( "gaus" )->GetNDF() );
225 }
226
227 fitentryNo[i] = m_dedx[i]->Integral();
228 if ( fitentryNo[i] > 100 )
229 {
230 fitmean[i] = m_dedx[i]->GetFunction( "gaus" )->GetParameter( 1 );
231 fitmeanerr[i] = m_dedx[i]->GetFunction( "gaus" )->GetParError( 1 );
232 fitsigma[i] = m_dedx[i]->GetFunction( "gaus" )->GetParameter( 2 );
233 fitchisq[i] = ( m_dedx[i]->GetFunction( "gaus" )->GetChisquare() ) /
234 ( m_dedx[i]->GetFunction( "gaus" )->GetNDF() );
235 }
236 pos_fitentryNo[i] = m_pos_dedx[i]->Integral();
237 if ( pos_fitentryNo[i] > 100 )
238 {
239 pos_fitmean[i] = m_pos_dedx[i]->GetFunction( "gaus" )->GetParameter( 1 );
240 pos_fitmeanerr[i] = m_pos_dedx[i]->GetFunction( "gaus" )->GetParError( 1 );
241 pos_fitsigma[i] = m_pos_dedx[i]->GetFunction( "gaus" )->GetParameter( 2 );
242 pos_fitchisq[i] = ( m_pos_dedx[i]->GetFunction( "gaus" )->GetChisquare() ) /
243 ( m_pos_dedx[i]->GetFunction( "gaus" )->GetNDF() );
244 }
245 neg_fitentryNo[i] = m_neg_dedx[i]->Integral();
246 if ( neg_fitentryNo[i] > 100 )
247 {
248 neg_fitmean[i] = m_neg_dedx[i]->GetFunction( "gaus" )->GetParameter( 1 );
249 neg_fitmeanerr[i] = m_neg_dedx[i]->GetFunction( "gaus" )->GetParError( 1 );
250 neg_fitsigma[i] = m_neg_dedx[i]->GetFunction( "gaus" )->GetParameter( 2 );
251 neg_fitchisq[i] = ( m_neg_dedx[i]->GetFunction( "gaus" )->GetChisquare() ) /
252 ( m_neg_dedx[i]->GetFunction( "gaus" )->GetNDF() );
253 }
254
255 hits_mean[i] = m_hits[i]->GetMean();
256 hits_sigma[i] = m_hits[i]->GetRMS();
257 }
258
259 double dedx1[
Size] = { 0 };
260 double ptrk1[
Size] = { 0 };
261 cout << "Vec_dedx.size() = " << Vec_dedx.size() << endl;
262 for (
int i = 0; i <
Size && i < Vec_dedx.size(); i++ )
263 {
264 dedx1[i] = Vec_dedx[i];
265 ptrk1[i] = Vec_ptrk[i];
266
267 }
268
269 log << MSG::INFO << "begin generating root file!!! " << endmsg;
270 TFile*
f =
new TFile(
m_rootfile.c_str(),
"RECREATE" );
271 for (
int i = 0; i <
nbins; i++ )
272 {
273 m_chi[i]->Write();
274 m_pos_chi[i]->Write();
275 m_neg_chi[i]->Write();
276 m_dedx[i]->Write();
277 m_pos_dedx[i]->Write();
278 m_neg_dedx[i]->Write();
279 m_hits[i]->Write();
280 }
281
282 TTree* momInfor = new TTree( "momInfor", "momInfor" );
283 momInfor->Branch( "chientryNo", chientryNo, "chientryNo[50]/D" );
284 momInfor->Branch( "chimean", chimean, "chimean[50]/D" );
285 momInfor->Branch( "chimeanerr", chimeanerr, "chimeanerr[50]/D" );
286 momInfor->Branch( "chisigma", chisigma, "chisigma[50]/D" );
287 momInfor->Branch( "chisq", chisq, "chisq[50]/D" );
288 momInfor->Branch( "pos_chientryNo", pos_chientryNo, "pos_chientryNo[50]/D" );
289 momInfor->Branch( "pos_chimean", pos_chimean, "pos_chimean[50]/D" );
290 momInfor->Branch( "pos_chimeanerr", pos_chimeanerr, "pos_chimeanerr[50]/D" );
291 momInfor->Branch( "pos_chisigma", pos_chisigma, "pos_chisigma[50]/D" );
292 momInfor->Branch( "pos_chisq", pos_chisq, "pos_chisq[50]/D" );
293 momInfor->Branch( "neg_chientryNo", neg_chientryNo, "neg_chientryNo[50]/D" );
294 momInfor->Branch( "neg_chimean", neg_chimean, "neg_chimean[50]/D" );
295 momInfor->Branch( "neg_chimeanerr", neg_chimeanerr, "neg_chimeanerr[50]/D" );
296 momInfor->Branch( "neg_chisigma", neg_chisigma, "neg_chisigma[50]/D" );
297 momInfor->Branch( "neg_chisq", neg_chisq, "neg_chisq[50]/D" );
298 momInfor->Branch( "fitentryNo", fitentryNo, "fitentryNo[50]/D" );
299 momInfor->Branch( "fitmean", fitmean, "fitmean[50]/D" );
300 momInfor->Branch( "fitmeanerr", fitmeanerr, "fitmeanerr[50]/D" );
301 momInfor->Branch( "fitsigma", fitsigma, "fitsigma[50]/D" );
302 momInfor->Branch( "fitchisq", fitchisq, "fitchisq[50]/D" );
303 momInfor->Branch( "pos_fitentryNo", pos_fitentryNo, "pos_fitentryNo[50]/D" );
304 momInfor->Branch( "pos_fitmean", pos_fitmean, "pos_fitmean[50]/D" );
305 momInfor->Branch( "pos_fitmeanerr", pos_fitmeanerr, "pos_fitmeanerr[50]/D" );
306 momInfor->Branch( "pos_fitsigma", pos_fitsigma, "pos_fitsigma[50]/D" );
307 momInfor->Branch( "pos_fitchisq", pos_fitchisq, "pos_fitchisq[50]/D" );
308 momInfor->Branch( "neg_fitentryNo", neg_fitentryNo, "neg_fitentryNo[50]/D" );
309 momInfor->Branch( "neg_fitmean", neg_fitmean, "neg_fitmean[50]/D" );
310 momInfor->Branch( "neg_fitmeanerr", neg_fitmeanerr, "neg_fitmeanerr[50]/D" );
311 momInfor->Branch( "neg_fitsigma", neg_fitsigma, "neg_fitsigma[50]/D" );
312 momInfor->Branch( "neg_fitchisq", neg_fitchisq, "neg_fitchisq[50]/D" );
313 momInfor->Branch( "hits_mean", hits_mean, "hits_mean[50]/D" );
314 momInfor->Branch( "hits_sigma", hits_sigma, "hits_sigma[50]/D" );
315 momInfor->Branch( "pBin", pBin, "pBin[50]/D" );
316 momInfor->Branch( "ptrk1", ptrk1, "ptrk1[700000]/D" );
317 momInfor->Branch( "dedx1", dedx1, "dedx1[700000]/D" );
318 momInfor->Fill();
319 momInfor->Write();
320
321 TCanvas c1( "c1", "canvas", 500, 400 );
323 momInfor->Draw( "dedx1:ptrk1", "dedx1>200 && dedx1<1200" );
325 for ( Int_t i = 0; i <
nbins; i++ )
326 {
327 m_chi[i]->Draw();
329 }
330 for ( Int_t i = 0; i <
nbins; i++ )
331 {
332 m_pos_chi[i]->Draw();
334 }
335 for ( Int_t i = 0; i <
nbins; i++ )
336 {
337 m_neg_chi[i]->Draw();
339 }
340 for ( Int_t i = 0; i <
nbins; i++ )
341 {
342 m_dedx[i]->Draw();
344 }
345 for ( Int_t i = 0; i <
nbins; i++ )
346 {
347 m_pos_dedx[i]->Draw();
349 }
350 for ( Int_t i = 0; i <
nbins; i++ )
351 {
352 m_neg_dedx[i]->Draw();
354 }
357
358 for (
int i = 0; i <
nbins; i++ )
359 {
360 delete m_chi[i];
361 delete m_pos_chi[i];
362 delete m_neg_chi[i];
363 delete m_dedx[i];
364 delete m_pos_dedx[i];
365 delete m_neg_dedx[i];
366 delete m_hits[i];
367 }
368}