197 {
198 MsgStream log(
msgSvc(), name() );
199 log << MSG::INFO << "DedxCalibLayerGain::WriteHists()" << endmsg;
200
201 double entryNo[
layNo] = { 0 }, mean[
layNo] = { 0 }, sigma[
layNo] = { 0 },
202 proper[
layNo] = { 0 }, fitmean[
layNo] = { 0 }, fitmeanerr[
layNo] = { 0 },
204 chisq[
layNo] = { 0 };
205 double fitmean_gaus[
layNo] = { 0 }, fitmeanerr_gaus[
layNo] = { 0 },
206 fitsigma_gaus[
layNo] = { 0 }, layerg_gaus[
layNo] = { 0 };
207 for (
int i = 0; i <
layNo; i++ )
208 {
209 fitmean_gaus[i] = m_laygain_gaus[i]->GetFunction( "gaus" )->GetParameter( 1 );
210 fitmeanerr_gaus[i] = m_laygain_gaus[i]->GetFunction( "gaus" )->GetParError( 1 );
211 fitsigma_gaus[i] = m_laygain_gaus[i]->GetFunction( "gaus" )->GetParameter( 2 );
212
213 entryNo[i] = m_laygain[i]->GetEntries();
214 mean[i] = m_laygain[i]->GetMean();
215 sigma[i] = m_laygain[i]->GetRMS();
216 proper[i] = m_laygain[i]->GetBinCenter( m_laygain[i]->GetMaximumBin() );
217 if ( entryNo[i] < 10 ) continue;
218
220 {
221 fitmean[i] = m_laygain[i]->GetFunction( "mylan" )->GetParameter( 1 );
222 fitmeanerr[i] = m_laygain[i]->GetFunction( "mylan" )->GetParError( 1 );
223 fitsigma[i] = m_laygain[i]->GetFunction( "mylan" )->GetParameter( 2 );
224 chisq[i] = ( m_laygain[i]->GetFunction( "mylan" )->GetChisquare() ) /
225 ( m_laygain[i]->GetFunction( "mylan" )->GetNDF() );
226 }
228 {
229 fitmean[i] = m_laygain[i]->GetFunction( "landaun" )->GetParameter( 1 );
230 fitmeanerr[i] = m_laygain[i]->GetFunction( "landaun" )->GetParError( 1 );
231 fitsigma[i] = m_laygain[i]->GetFunction( "landaun" )->GetParameter( 2 );
232 chisq[i] = ( m_laygain[i]->GetFunction( "landaun" )->GetChisquare() ) /
233 ( m_laygain[i]->GetFunction( "landaun" )->GetNDF() );
234 }
236 {
237 fitmean[i] = m_laygain[i]->GetFunction( "Landau" )->GetParameter( 1 );
238 fitmeanerr[i] = m_laygain[i]->GetFunction( "Landau" )->GetParError( 1 );
239 fitsigma[i] = m_laygain[i]->GetFunction( "Landau" )->GetParameter( 2 );
240 chisq[i] = ( m_laygain[i]->GetFunction( "Landau" )->GetChisquare() ) /
241 ( m_laygain[i]->GetFunction( "Landau" )->GetNDF() );
242 }
244 {
245 fitmean[i] = m_laygain[i]->GetFunction( "Vavilov" )->GetParameter( 1 );
246 fitmeanerr[i] = m_laygain[i]->GetFunction( "Vavilov" )->GetParError( 1 );
247 fitsigma[i] = m_laygain[i]->GetFunction( "Vavilov" )->GetParameter( 2 );
248 chisq[i] = ( m_laygain[i]->GetFunction( "Vavilov" )->GetChisquare() ) /
249 ( m_laygain[i]->GetFunction( "Vavilov" )->GetNDF() );
250 }
252 {
253 fitmean[i] = m_laygain[i]->GetFunction( "AsymGauss" )->GetParameter( 1 );
254 fitmeanerr[i] = m_laygain[i]->GetFunction( "AsymGauss" )->GetParError( 1 );
255 fitsigma[i] = m_laygain[i]->GetFunction( "AsymGauss" )->GetParameter( 2 );
256 chisq[i] = ( m_laygain[i]->GetFunction( "AsymGauss" )->GetChisquare() ) /
257 ( m_laygain[i]->GetFunction( "AsymGauss" )->GetNDF() );
258 }
259
260
261 }
262
263 double sum = 0, sum_gaus = 0,
n = 0;
264 for (
int i = 4; i <
layNo; i++ )
265 {
266 if ( fitmean[i] > 0 && fitmeanerr[i] > 0 && fitmeanerr[i] < 10 && fitsigma[i] > 0 &&
267 fitsigma[i] < 200 && entryNo[i] > 1500 )
268 {
269 sum += fitmean[i];
270 sum_gaus += fitmean_gaus[i];
272 }
273 }
276 cout << "average value of good layer: " << sum << endl;
277
278 for (
int i = 0; i <
layNo; i++ )
279 {
280 layerg[i] = fitmean[i] / sum;
281 layerg_gaus[i] = fitmean_gaus[i] / sum_gaus;
282 layer[i] = i;
283 }
284
285 log << MSG::INFO << "begin generating root file!!! " << endmsg;
286 TFile*
f =
new TFile(
m_rootfile.c_str(),
"recreate" );
287 for (
int i = 0; i <
layNo; i++ )
288 {
289 m_laygain[i]->Write();
290 m_laygain_gaus[i]->Write();
291 }
292
293 TTree* layergcalib = new TTree( "layergcalib", "layergcalib" );
294 layergcalib->Branch( "layerg_gaus", layerg_gaus, "layerg_gaus[43]/D" );
295 layergcalib->Branch( "layerg", layerg, "layerg[43]/D" );
296 layergcalib->Branch( "layer", layer, "layer[43]/D" );
297 layergcalib->Branch( "entryNo", entryNo, "entryNo[43]/D" );
298 layergcalib->Branch( "mean", mean, "mean[43]/D" );
299 layergcalib->Branch( "sigma", sigma, "sigma[43]/D" );
300 layergcalib->Branch( "fitmean", fitmean, "fitmean[43]/D" );
301 layergcalib->Branch( "fitmeanerr", fitmeanerr, "fitmeanerr[43]/D" );
302 layergcalib->Branch( "fitsigma", fitsigma, "fitsigma[43]/D" );
303 layergcalib->Branch( "chisq", chisq, "chisq[43]/D" );
304 layergcalib->Branch( "fitmean_gaus", fitmean_gaus, "fitmean_gaus[43]/D" );
305 layergcalib->Branch( "fitmeanerr_gaus", fitmeanerr_gaus, "fitmeanerr_gaus[43]/D" );
306 layergcalib->Branch( "fitsigma_gaus", fitsigma_gaus, "fitsigma_gaus[43]/D" );
307 layergcalib->Fill();
308 layergcalib->Write();
309
311
312 TCanvas c1( "c1", "canvas", 500, 400 );
314 for (
int i = 0; i <
layNo; i++ )
315 {
316 m_laygain[i]->Draw();
318 }
320
321 for (
int i = 0; i <
layNo; i++ )
322 {
323 delete m_laygain[i];
324 delete m_laygain_gaus[i];
325 }
326}