@@ -204,6 +204,9 @@ int runMassFitter(const std::string& configFileName)
204204 throw std ::runtime_error ("ERROR: only Expo, Poly1, Poly2, Pow and PowEx background functions supported! Exit" );
205205 }
206206 bkgFunc [iSliceVar ] = bkgFuncConfig [iSliceVar ];
207+ if (isMc && bkgFunc [iSliceVar ] != HFInvMassFitter ::NoBkg ) {
208+ throw std ::runtime_error ("ERROR: in MC mode the background function must be NoBkg! Exit" );
209+ }
207210
208211 if (sgnFuncConfig [iSliceVar ] < 0 || sgnFuncConfig [iSliceVar ] >= HFInvMassFitter ::NTypesOfSgnPdf ) {
209212 throw std ::runtime_error ("ERROR: only SingleGaus, DoubleGaus and DoubleGausSigmaRatioPar signal functions supported! Exit" );
@@ -369,17 +372,14 @@ int runMassFitter(const std::string& configFileName)
369372 canvasSize [0 ], canvasSize [1 ]);
370373 divideCanvas (canvasMass [iCanvas ], nPads );
371374
372- canvasResiduals [iCanvas ] =
373- new TCanvas (Form ("canvasResiduals%d" , iCanvas ), Form ("canvasResiduals%d" , iCanvas ), canvasSize [0 ], canvasSize [1 ]);
375+ canvasResiduals [iCanvas ] = new TCanvas (Form ("canvasResiduals%d" , iCanvas ), Form ("canvasResiduals%d" , iCanvas ), canvasSize [0 ], canvasSize [1 ]);
374376 divideCanvas (canvasResiduals [iCanvas ], nPads );
375377
376- canvasRatio [iCanvas ] = new TCanvas (Form ("canvasRatio%d" , iCanvas ), Form ("canvasRatio%d" , iCanvas ),
377- canvasSize [0 ], canvasSize [1 ]);
378+ canvasRatio [iCanvas ] = new TCanvas (Form ("canvasRatio%d" , iCanvas ), Form ("canvasRatio%d" , iCanvas ), canvasSize [0 ], canvasSize [1 ]);
378379 divideCanvas (canvasRatio [iCanvas ], nPads );
379380
380381 if (enableRefl ) {
381- canvasRefl [iCanvas ] = new TCanvas (Form ("canvasRefl%d" , iCanvas ), Form ("canvasRefl%d" , iCanvas ),
382- canvasSize [0 ], canvasSize [1 ]);
382+ canvasRefl [iCanvas ] = new TCanvas (Form ("canvasRefl%d" , iCanvas ), Form ("canvasRefl%d" , iCanvas ), canvasSize [0 ], canvasSize [1 ]);
383383 divideCanvas (canvasRefl [iCanvas ], nPads );
384384 }
385385 }
@@ -402,191 +402,111 @@ int runMassFitter(const std::string& configFileName)
402402
403403 double reflOverSgn = 0 ;
404404
405- if (isMc ) {
406- HFInvMassFitter * massFitter ;
407- massFitter = new HFInvMassFitter (hMassForFit [iSliceVar ], massMin [iSliceVar ], massMax [iSliceVar ], HFInvMassFitter ::NoBkg , sgnFunc [iSliceVar ]);
408- massFitter -> setDrawBgPrefit (drawBgPrefit );
409- massFitter -> setHighlightPeakRegion (highlightPeakRegion );
410- massFitter -> setInitialGaussianMean (massPDG );
411- massFitter -> setParticlePdgMass (massPDG );
412- massFitter -> setBoundGaussianMean (massPDG , 0.8 * massPDG , 1.2 * massPDG );
413- if (useLikelihood ) {
414- massFitter -> setUseLikelihoodFit ();
415- } else {
416- massFitter -> setUseChi2Fit ();
417- }
418- massFitter -> doFit ();
419-
420- if (nSliceVarBins > 1 ) {
421- canvasMass [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
422- } else {
423- canvasMass [iCanvas ]-> cd ();
424- }
425-
426- massFitter -> drawFit (gPad , plotLabels , writeSignalPar );
427-
428- const double rawYield = massFitter -> getRawYield ();
429- const double rawYieldErr = massFitter -> getRawYieldError ();
430- const double rawYieldCounted = massFitter -> getRawYieldCounted ();
431- const double rawYieldCountedErr = massFitter -> getRawYieldCountedError ();
432- const double reducedChiSquareBkg = massFitter -> getChiSquareOverNDFBkg ();
433- const double reducedChiSquareTotal = massFitter -> getChiSquareOverNDFTotal ();
434- const double mean = massFitter -> getMean ();
435- const double meanErr = massFitter -> getMeanUncertainty ();
436- const double sigma = massFitter -> getSigma ();
437- const double sigmaErr = massFitter -> getSigmaUncertainty ();
438-
439- hRawYieldsSignal -> SetBinContent (iSliceVar + 1 , rawYield );
440- hRawYieldsSignal -> SetBinError (iSliceVar + 1 , rawYieldErr );
441- hRawYieldsSignalCounted -> SetBinContent (iSliceVar + 1 , rawYieldCounted );
442- hRawYieldsSignalCounted -> SetBinError (iSliceVar + 1 , rawYieldCountedErr );
443- hRawYieldsChiSquareBkg -> SetBinContent (iSliceVar + 1 , reducedChiSquareBkg );
444- hRawYieldsChiSquareBkg -> SetBinError (iSliceVar + 1 , 0. );
445- hRawYieldsChiSquareTotal -> SetBinContent (iSliceVar + 1 , reducedChiSquareTotal );
446- hRawYieldsChiSquareTotal -> SetBinError (iSliceVar + 1 , 0. );
447- hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
448- hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
449- hRawYieldsSigma -> SetBinContent (iSliceVar + 1 , sigma );
450- hRawYieldsSigma -> SetBinError (iSliceVar + 1 , sigmaErr );
451-
452- if (sgnFunc [iSliceVar ] != HFInvMassFitter ::SingleGaus ) {
453- const double secSigma = massFitter -> getSecSigma ();
454- const double secSigmaErr = massFitter -> getSecSigmaUncertainty ();
455- hRawYieldsSecSigma -> SetBinContent (iSliceVar + 1 , secSigma );
456- hRawYieldsSecSigma -> SetBinError (iSliceVar + 1 , secSigmaErr );
457- }
458- if (sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGaus || sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGausSigmaRatioPar ) {
459- const double fracDoubleGaus = massFitter -> getFracDoubleGaus ();
460- const double fracDoubleGausErr = massFitter -> getFracDoubleGausUncertainty ();
461- hRawYieldsFracDoubleGaus -> SetBinContent (iSliceVar + 1 , fracDoubleGaus );
462- hRawYieldsFracDoubleGaus -> SetBinError (iSliceVar + 1 , fracDoubleGausErr );
463- }
405+ HFInvMassFitter * massFitter = new HFInvMassFitter (hMassForFit [iSliceVar ], massMin [iSliceVar ], massMax [iSliceVar ], bkgFunc [iSliceVar ], sgnFunc [iSliceVar ]);
406+ massFitter -> setDrawBgPrefit (drawBgPrefit );
407+ massFitter -> setHighlightPeakRegion (highlightPeakRegion );
408+ massFitter -> setInitialGaussianMean (massPDG );
409+ massFitter -> setParticlePdgMass (massPDG );
410+ massFitter -> setBoundGaussianMean (massPDG , 0.8 * massPDG , 1.2 * massPDG );
411+ if (useLikelihood ) {
412+ massFitter -> setUseLikelihoodFit ();
464413 } else {
465- HFInvMassFitter * massFitter ;
466- massFitter = new HFInvMassFitter (hMassForFit [iSliceVar ], massMin [iSliceVar ], massMax [iSliceVar ],
467- bkgFunc [iSliceVar ], sgnFunc [iSliceVar ]);
468- massFitter -> setDrawBgPrefit (drawBgPrefit );
469- massFitter -> setHighlightPeakRegion (highlightPeakRegion );
470- massFitter -> setInitialGaussianMean (massPDG );
471- massFitter -> setParticlePdgMass (massPDG );
472- massFitter -> setBoundGaussianMean (massPDG , 0.8 * massPDG , 1.2 * massPDG );
473- if (useLikelihood ) {
474- massFitter -> setUseLikelihoodFit ();
475- } else {
476- massFitter -> setUseChi2Fit ();
477- }
414+ massFitter -> setUseChi2Fit ();
415+ }
478416
479- auto setFixedValue = [& iSliceVar ](bool const & isFix , std ::vector < double > const & fixManual , const TH1 * histToFix , std ::function < void (double )> setFunc , std ::string const & var ) -> void {
480- if (isFix ) {
481- const auto valueToFix = fixManual .empty () ? histToFix -> GetBinContent (iSliceVar + 1 ) : fixManual [iSliceVar ];
482- setFunc (valueToFix );
483- printf ("*****************************\n" );
484- printf ("FIXED %s: %f\n" , var .data (), valueToFix );
485- printf ("*****************************\n" );
417+ auto setFixedValue = [& iSliceVar ](bool const & isFix , std ::vector < double > const & fixManual , const TH1 * histToFix , std ::function < void (double )> setFunc , std ::string const & var ) -> void {
418+ if (isFix ) {
419+ if (fixManual .empty () && histToFix == nullptr) {
420+ throw std ::runtime_error ("Histogram to fix " + var + " is null while isFix==true and fixManual is empty" );
486421 }
487- };
488-
489- setFixedValue (fixMean , fixMeanManual , hMeanToFix , std ::bind (& HFInvMassFitter ::setFixGaussianMean , massFitter , std ::placeholders ::_1 ), "MEAN" );
490- setFixedValue (fixSigma , fixSigmaManual , hSigmaToFix , std ::bind (& HFInvMassFitter ::setFixGaussianSigma , massFitter , std ::placeholders ::_1 ), "SIGMA" );
491- setFixedValue (fixSecondSigma , fixSecondSigmaManual , hSecondSigmaToFix , std ::bind (& HFInvMassFitter ::setFixSecondGaussianSigma , massFitter , std ::placeholders ::_1 ), "SECOND SIGMA" );
492- setFixedValue (fixFracDoubleGaus , fixFracDoubleGausManual , hFracDoubleGausToFix , std ::bind (& HFInvMassFitter ::setFixFrac2Gaus , massFitter , std ::placeholders ::_1 ), "FRAC DOUBLE GAUS" );
493-
494- if (enableRefl ) {
495- reflOverSgn = hMassForSgn [iSliceVar ]-> Integral (hMassForSgn [iSliceVar ]-> FindBin (massMin [iSliceVar ] * 1.0001 ), hMassForSgn [iSliceVar ]-> FindBin (massMax [iSliceVar ] * 0.999 ));
496- reflOverSgn = hMassForRefl [iSliceVar ]-> Integral (hMassForRefl [iSliceVar ]-> FindBin (massMin [iSliceVar ] * 1.0001 ), hMassForRefl [iSliceVar ]-> FindBin (massMax [iSliceVar ] * 0.999 )) / reflOverSgn ;
497- massFitter -> setFixReflOverSgn (reflOverSgn );
498- massFitter -> setTemplateReflections (hMassRefl [iSliceVar ]);
422+ const auto valueToFix = fixManual .empty () ? histToFix -> GetBinContent (iSliceVar + 1 ) : fixManual [iSliceVar ];
423+ setFunc (valueToFix );
424+ printf ("*****************************\n" );
425+ printf ("FIXED %s: %f\n" , var .data (), valueToFix );
426+ printf ("*****************************\n" );
499427 }
428+ };
429+
430+ setFixedValue (fixMean , fixMeanManual , hMeanToFix , std ::bind (& HFInvMassFitter ::setFixGaussianMean , massFitter , std ::placeholders ::_1 ), "MEAN" );
431+ setFixedValue (fixSigma , fixSigmaManual , hSigmaToFix , std ::bind (& HFInvMassFitter ::setFixGaussianSigma , massFitter , std ::placeholders ::_1 ), "SIGMA" );
432+ setFixedValue (fixSecondSigma , fixSecondSigmaManual , hSecondSigmaToFix , std ::bind (& HFInvMassFitter ::setFixSecondGaussianSigma , massFitter , std ::placeholders ::_1 ), "SECOND SIGMA" );
433+ setFixedValue (fixFracDoubleGaus , fixFracDoubleGausManual , hFracDoubleGausToFix , std ::bind (& HFInvMassFitter ::setFixFrac2Gaus , massFitter , std ::placeholders ::_1 ), "FRAC DOUBLE GAUS" );
434+
435+ if (!isMc && enableRefl ) {
436+ reflOverSgn = hMassForSgn [iSliceVar ]-> Integral (hMassForSgn [iSliceVar ]-> FindBin (massMin [iSliceVar ] * 1.0001 ), hMassForSgn [iSliceVar ]-> FindBin (massMax [iSliceVar ] * 0.999 ));
437+ reflOverSgn = hMassForRefl [iSliceVar ]-> Integral (hMassForRefl [iSliceVar ]-> FindBin (massMin [iSliceVar ] * 1.0001 ), hMassForRefl [iSliceVar ]-> FindBin (massMax [iSliceVar ] * 0.999 )) / reflOverSgn ;
438+ massFitter -> setFixReflOverSgn (reflOverSgn );
439+ massFitter -> setTemplateReflections (hMassRefl [iSliceVar ]);
440+ }
500441
501- massFitter -> doFit ();
502-
503- const double rawYield = massFitter -> getRawYield ();
504- const double rawYieldErr = massFitter -> getRawYieldError ();
505- const double rawYieldCounted = massFitter -> getRawYieldCounted ();
506- const double rawYieldCountedErr = massFitter -> getRawYieldCountedError ();
507- const double bkg = massFitter -> getBkgYield ();
508- const double bkgErr = massFitter -> getBkgYieldError ();
509- const double significance = massFitter -> getSignificance ();
510- const double significanceErr = massFitter -> getSignificanceError ();
511- const double reducedChiSquareBkg = massFitter -> getChiSquareOverNDFBkg ();
512- const double reducedChiSquareTotal = massFitter -> getChiSquareOverNDFTotal ();
513- const double mean = massFitter -> getMean ();
514- const double meanErr = massFitter -> getMeanUncertainty ();
515- const double sigma = massFitter -> getSigma ();
516- const double sigmaErr = massFitter -> getSigmaUncertainty ();
517-
518- hRawYieldsSignal -> SetBinContent (iSliceVar + 1 , rawYield );
519- hRawYieldsSignal -> SetBinError (iSliceVar + 1 , rawYieldErr );
520- hRawYieldsSignalCounted -> SetBinContent (iSliceVar + 1 , rawYieldCounted );
521- hRawYieldsSignalCounted -> SetBinError (iSliceVar + 1 , rawYieldCountedErr );
522- hRawYieldsBkg -> SetBinContent (iSliceVar + 1 , bkg );
523- hRawYieldsBkg -> SetBinError (iSliceVar + 1 , bkgErr );
524- hRawYieldsSgnOverBkg -> SetBinContent (iSliceVar + 1 , rawYield / bkg );
525- hRawYieldsSgnOverBkg -> SetBinError (iSliceVar + 1 , rawYield / bkg * std ::sqrt (rawYieldErr / rawYield * rawYieldErr / rawYield + bkgErr / bkg * bkgErr / bkg ));
526- hRawYieldsSignificance -> SetBinContent (iSliceVar + 1 , significance );
527- hRawYieldsSignificance -> SetBinError (iSliceVar + 1 , significanceErr );
528- hRawYieldsChiSquareBkg -> SetBinContent (iSliceVar + 1 , reducedChiSquareBkg );
529- hRawYieldsChiSquareBkg -> SetBinError (iSliceVar + 1 , 1.e-20 );
530- hRawYieldsChiSquareTotal -> SetBinContent (iSliceVar + 1 , reducedChiSquareTotal );
531- hRawYieldsChiSquareTotal -> SetBinError (iSliceVar + 1 , 1.e-20 );
532- hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
533- hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
534- hRawYieldsSigma -> SetBinContent (iSliceVar + 1 , sigma );
535- hRawYieldsSigma -> SetBinError (iSliceVar + 1 , sigmaErr );
536-
537- if (sgnFunc [iSliceVar ] != HFInvMassFitter ::SingleGaus ) {
538- const double secSigma = massFitter -> getSecSigma ();
539- const double secSigmaErr = massFitter -> getSecSigmaUncertainty ();
540- hRawYieldsSecSigma -> SetBinContent (iSliceVar + 1 , secSigma );
541- hRawYieldsSecSigma -> SetBinError (iSliceVar + 1 , secSigmaErr );
542- }
543- if (sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGaus || sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGausSigmaRatioPar ) {
544- const double fracDoubleGaus = massFitter -> getFracDoubleGaus ();
545- const double fracDoubleGausErr = massFitter -> getFracDoubleGausUncertainty ();
546- hRawYieldsFracDoubleGaus -> SetBinContent (iSliceVar + 1 , fracDoubleGaus );
547- hRawYieldsFracDoubleGaus -> SetBinError (iSliceVar + 1 , fracDoubleGausErr );
548- }
549-
550- if (enableRefl ) {
551- hReflectionOverSignal -> SetBinContent (iSliceVar + 1 , reflOverSgn );
552- if (nSliceVarBins > 1 ) {
553- canvasRefl [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
554- } else {
555- canvasRefl [iCanvas ]-> cd ();
556- }
557- massFitter -> drawReflection (gPad );
558- canvasRefl [iCanvas ]-> Modified ();
559- canvasRefl [iCanvas ]-> Update ();
560- }
442+ massFitter -> doFit ();
561443
444+ auto drawOnCanvas = [& ](std ::vector < TCanvas * > & canvas , std ::function < void ()> drawer ) {
562445 if (nSliceVarBins > 1 ) {
563- canvasMass [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
446+ canvas [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
564447 } else {
565- canvasMass [iCanvas ]-> cd ();
566- }
567- massFitter -> drawFit (gPad , plotLabels , writeSignalPar );
568- canvasMass [iCanvas ]-> Modified ();
569- canvasMass [iCanvas ]-> Update ();
570-
571- if (bkgFunc [iSliceVar ] != HFInvMassFitter ::NoBkg ) {
572- if (nSliceVarBins > 1 ) {
573- canvasResiduals [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
574- } else {
575- canvasResiduals [iCanvas ]-> cd ();
576- }
577- massFitter -> drawResidual (gPad );
578- canvasResiduals [iCanvas ]-> Modified ();
579- canvasResiduals [iCanvas ]-> Update ();
580-
581- if (nSliceVarBins > 1 ) {
582- canvasRatio [iCanvas ]-> cd (iSliceVar - nCanvasesMax * iCanvas + 1 );
583- } else {
584- canvasRatio [iCanvas ]-> cd ();
585- }
586- massFitter -> drawRatio (gPad );
587- canvasRatio [iCanvas ]-> Modified ();
588- canvasRatio [iCanvas ]-> Update ();
448+ canvas [iCanvas ]-> cd ();
589449 }
450+ drawer ();
451+ canvas [iCanvas ]-> Modified ();
452+ canvas [iCanvas ]-> Update ();
453+ };
454+
455+ drawOnCanvas (canvasMass , [& ]() { massFitter -> drawFit (gPad , plotLabels , writeSignalPar ); });
456+ drawOnCanvas (canvasRatio , [& ]() { massFitter -> drawRatio (gPad ); });
457+ if (bkgFunc [iSliceVar ] != HFInvMassFitter ::NoBkg ) {
458+ drawOnCanvas (canvasResiduals , [& ]() { massFitter -> drawResidual (gPad ); });
459+ }
460+ if (enableRefl ) {
461+ drawOnCanvas (canvasRefl , [& ]() { massFitter -> drawReflection (gPad ); });
462+ }
463+
464+ const double rawYield = massFitter -> getRawYield ();
465+ const double rawYieldErr = massFitter -> getRawYieldError ();
466+ const double rawYieldCounted = massFitter -> getRawYieldCounted ();
467+ const double rawYieldCountedErr = massFitter -> getRawYieldCountedError ();
468+ const double bkg = massFitter -> getBkgYield ();
469+ const double bkgErr = massFitter -> getBkgYieldError ();
470+ const double significance = massFitter -> getSignificance ();
471+ const double significanceErr = massFitter -> getSignificanceError ();
472+ const double reducedChiSquareBkg = massFitter -> getChiSquareOverNDFBkg ();
473+ const double reducedChiSquareTotal = massFitter -> getChiSquareOverNDFTotal ();
474+ const double mean = massFitter -> getMean ();
475+ const double meanErr = massFitter -> getMeanUncertainty ();
476+ const double sigma = massFitter -> getSigma ();
477+ const double sigmaErr = massFitter -> getSigmaUncertainty ();
478+
479+ hRawYieldsSignal -> SetBinContent (iSliceVar + 1 , rawYield );
480+ hRawYieldsSignal -> SetBinError (iSliceVar + 1 , rawYieldErr );
481+ hRawYieldsSignalCounted -> SetBinContent (iSliceVar + 1 , rawYieldCounted );
482+ hRawYieldsSignalCounted -> SetBinError (iSliceVar + 1 , rawYieldCountedErr );
483+ hRawYieldsBkg -> SetBinContent (iSliceVar + 1 , bkg );
484+ hRawYieldsBkg -> SetBinError (iSliceVar + 1 , bkgErr );
485+ hRawYieldsSgnOverBkg -> SetBinContent (iSliceVar + 1 , rawYield / bkg );
486+ hRawYieldsSgnOverBkg -> SetBinError (iSliceVar + 1 , rawYield / bkg * std ::sqrt (rawYieldErr / rawYield * rawYieldErr / rawYield + bkgErr / bkg * bkgErr / bkg ));
487+ hRawYieldsSignificance -> SetBinContent (iSliceVar + 1 , significance );
488+ hRawYieldsSignificance -> SetBinError (iSliceVar + 1 , significanceErr );
489+ hRawYieldsChiSquareBkg -> SetBinContent (iSliceVar + 1 , reducedChiSquareBkg );
490+ hRawYieldsChiSquareBkg -> SetBinError (iSliceVar + 1 , 1.e-20 );
491+ hRawYieldsChiSquareTotal -> SetBinContent (iSliceVar + 1 , reducedChiSquareTotal );
492+ hRawYieldsChiSquareTotal -> SetBinError (iSliceVar + 1 , 1.e-20 );
493+ hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
494+ hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
495+ hRawYieldsSigma -> SetBinContent (iSliceVar + 1 , sigma );
496+ hRawYieldsSigma -> SetBinError (iSliceVar + 1 , sigmaErr );
497+ hReflectionOverSignal -> SetBinContent (iSliceVar + 1 , reflOverSgn );
498+
499+ if (sgnFunc [iSliceVar ] != HFInvMassFitter ::SingleGaus ) { // TODO foresee DSCB and Voigt cases
500+ const double secSigma = massFitter -> getSecSigma ();
501+ const double secSigmaErr = massFitter -> getSecSigmaUncertainty ();
502+ hRawYieldsSecSigma -> SetBinContent (iSliceVar + 1 , secSigma );
503+ hRawYieldsSecSigma -> SetBinError (iSliceVar + 1 , secSigmaErr );
504+ }
505+ if (sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGaus || sgnFunc [iSliceVar ] == HFInvMassFitter ::DoubleGausSigmaRatioPar ) {
506+ const double fracDoubleGaus = massFitter -> getFracDoubleGaus ();
507+ const double fracDoubleGausErr = massFitter -> getFracDoubleGausUncertainty ();
508+ hRawYieldsFracDoubleGaus -> SetBinContent (iSliceVar + 1 , fracDoubleGaus );
509+ hRawYieldsFracDoubleGaus -> SetBinError (iSliceVar + 1 , fracDoubleGausErr );
590510 }
591511
592512 hFitConfig -> SetBinContent (ConfigMassMin , iSliceVar + 1 , massMin [iSliceVar ]);
@@ -656,14 +576,14 @@ int runMassFitter(const std::string& configFileName)
656576 if (iCanvas == nCanvases - 1 && nCanvases > 1 ) {
657577 canvasResiduals [iCanvas ]-> SaveAs (Form ("%s]" , outputFileNameResidual .Data ()));
658578 }
659- // ratio
660- if ( iCanvas == 0 && nCanvases > 1 ) {
661- canvasRatio [ iCanvas ] -> SaveAs ( Form ( "%s[" , outputFileRatio . Data ()));
662- }
663- canvasRatio [ iCanvas ] -> SaveAs ( outputFileRatio . Data ());
664- if ( iCanvas == nCanvases - 1 && nCanvases > 1 ) {
665- canvasRatio [ iCanvas ] -> SaveAs ( Form ( "%s]" , outputFileRatio . Data ()));
666- }
579+ }
580+ // ratio
581+ if ( iCanvas == 0 && nCanvases > 1 ) {
582+ canvasRatio [ iCanvas ] -> SaveAs ( Form ( "%s[" , outputFileRatio . Data ()));
583+ }
584+ canvasRatio [ iCanvas ] -> SaveAs ( outputFileRatio . Data ());
585+ if ( iCanvas == nCanvases - 1 && nCanvases > 1 ) {
586+ canvasRatio [ iCanvas ] -> SaveAs ( Form ( "%s]" , outputFileRatio . Data ()));
667587 }
668588 }
669589 return 0 ;
0 commit comments