@@ -105,9 +105,10 @@ int runMassFitter(const TString& configFileName)
105105 std ::vector < double > sliceVarMax ;
106106 std ::vector < double > massMin ;
107107 std ::vector < double > massMax ;
108+ std ::vector < double > fixMeanManual ;
108109 std ::vector < double > fixSigmaManual ;
109110 std ::vector < double > fixSecondSigmaManual ;
110- std ::vector < double > fixMeanManual ;
111+ std ::vector < double > fixFracDoubleGausManual ;
111112 std ::vector < int > nRebin ;
112113 std ::vector < int > bkgFuncConfig ;
113114 std ::vector < int > sgnFuncConfig ;
@@ -130,12 +131,15 @@ int runMassFitter(const TString& configFileName)
130131 const Value & fdSecPeakHistoNameValue = config ["FDSecPeakHistoName" ];
131132 parseStringArray (fdSecPeakHistoNameValue , fdSecPeakHistoName );
132133
133- const bool fixSigma = config ["FixSigma" ].GetBool ();
134- const std ::string sigmaFile = config ["SigmaFile" ].GetString ();
135-
136134 const bool fixMean = config ["FixMean" ].GetBool ();
137135 const std ::string meanFile = config ["MeanFile" ].GetString ();
138136
137+ const Value & fixMeanManualValue = config ["FixMeanManual" ];
138+ readArray (fixMeanManualValue , fixMeanManual );
139+
140+ const bool fixSigma = config ["FixSigma" ].GetBool ();
141+ const std ::string sigmaFile = config ["SigmaFile" ].GetString ();
142+
139143 const Value & fixSigmaManualValue = config ["FixSigmaManual" ];
140144 readArray (fixSigmaManualValue , fixSigmaManual );
141145
@@ -145,8 +149,11 @@ int runMassFitter(const TString& configFileName)
145149 const Value & fixSecondSigmaManualValue = config ["FixSecondSigmaManual" ];
146150 readArray (fixSecondSigmaManualValue , fixSecondSigmaManual );
147151
148- const Value & fixMeanManualValue = config ["FixMeanManual" ];
149- readArray (fixMeanManualValue , fixMeanManual );
152+ const bool fixFracDoubleGaus = config ["FixFracDoubleGaus" ].GetBool ();
153+ const std ::string fracDoubleGausFile = config ["FracDoubleGausFile" ].GetString ();
154+
155+ const Value & fixFracDoubleGausManualValue = config ["FixFracDoubleGausManual" ];
156+ readArray (fixFracDoubleGausManualValue , fixFracDoubleGausManual );
150157
151158 sliceVarName = config ["SliceVarName" ].GetString ();
152159 sliceVarUnit = config ["SliceVarUnit" ].GetString ();
@@ -262,18 +269,21 @@ int runMassFitter(const TString& configFileName)
262269 inputFile -> Close ();
263270
264271 // define output histos
265- auto* hRawYieldsSignal = new TH1D ("hRawYieldsSignal" , ";" + sliceVarName + "(" + sliceVarUnit + ");raw yield" ,
266- nSliceVarBins , sliceVarLimits .data ());
267- auto* hRawYieldsSignalCounted = new TH1D ("hRawYieldsSignalCounted" , ";" + sliceVarName + "(" + sliceVarUnit + ");raw yield via bin count" ,
268- nSliceVarBins , sliceVarLimits .data ());
269- auto* hRawYieldsSigma = new TH1D (
272+ auto hRawYieldsSignal = new TH1D ("hRawYieldsSignal" , ";" + sliceVarName + "(" + sliceVarUnit + ");raw yield" ,
273+ nSliceVarBins , sliceVarLimits .data ());
274+ auto hRawYieldsSignalCounted = new TH1D ("hRawYieldsSignalCounted" , ";" + sliceVarName + "(" + sliceVarUnit + ");raw yield via bin count" ,
275+ nSliceVarBins , sliceVarLimits .data ());
276+ auto hRawYieldsMean = new TH1D (
277+ "hRawYieldsMean" , ";" + sliceVarName + "(" + sliceVarUnit + ");mean (GeV/#it{c}^{2})" ,
278+ nSliceVarBins , sliceVarLimits .data ());
279+ auto hRawYieldsSigma = new TH1D (
270280 "hRawYieldsSigma" , ";" + sliceVarName + "(" + sliceVarUnit + ");width (GeV/#it{c}^{2})" ,
271281 nSliceVarBins , sliceVarLimits .data ());
272282 auto hRawYieldsSecSigma = new TH1D (
273283 "hRawYieldsSecSigma" , ";" + sliceVarName + "(" + sliceVarUnit + ");width (GeV/#it{c}^{2})" ,
274284 nSliceVarBins , sliceVarLimits .data ());
275- auto hRawYieldsMean = new TH1D (
276- "hRawYieldsMean " , ";" + sliceVarName + "(" + sliceVarUnit + ");mean (GeV/#it{c}^{2}) " ,
285+ auto hRawYieldsFracDoubleGaus = new TH1D (
286+ "hRawYieldsFracDoubleGaus " , ";" + sliceVarName + "(" + sliceVarUnit + ");fraction of double gaussian " ,
277287 nSliceVarBins , sliceVarLimits .data ());
278288 auto* hRawYieldsSignificance = new TH1D (
279289 "hRawYieldsSignificance" ,
@@ -307,9 +317,10 @@ int runMassFitter(const TString& configFileName)
307317
308318 setHistoStyle (hRawYieldsSignal );
309319 setHistoStyle (hRawYieldsSignalCounted );
320+ setHistoStyle (hRawYieldsMean );
310321 setHistoStyle (hRawYieldsSigma );
311322 setHistoStyle (hRawYieldsSecSigma );
312- setHistoStyle (hRawYieldsMean );
323+ setHistoStyle (hRawYieldsFracDoubleGaus );
313324 setHistoStyle (hRawYieldsSignificance );
314325 setHistoStyle (hRawYieldsSgnOverBkg );
315326 setHistoStyle (hRawYieldsBkg );
@@ -339,7 +350,8 @@ int runMassFitter(const TString& configFileName)
339350
340351 TH1 * hSigmaToFix = getHistToFix (fixSigma , fixSigmaManual , sigmaFile , "Sigma" );
341352 TH1 * hMeanToFix = getHistToFix (fixMean , fixMeanManual , meanFile , "Mean" );
342- TH1 * hSecondSigmaToFix = getHistToFix (fixSecondSigma , fixSecondSigmaManual , secondSigmaFile , "Sigma" );
353+ TH1 * hSecondSigmaToFix = getHistToFix (fixSecondSigma , fixSecondSigmaManual , secondSigmaFile , "SecSigma" );
354+ TH1 * hFracDoubleGausToFix = getHistToFix (fixFracDoubleGaus , fixFracDoubleGausManual , fracDoubleGausFile , "FracDoubleGaus" );
343355
344356 // fit histograms
345357
@@ -420,26 +432,29 @@ int runMassFitter(const TString& configFileName)
420432 const Double_t rawYieldErr = massFitter -> getRawYieldError ();
421433 const Double_t rawYieldCounted = massFitter -> getRawYieldCounted ();
422434 const Double_t rawYieldCountedErr = massFitter -> getRawYieldCountedError ();
423-
435+ const Double_t mean = massFitter -> getMean ();
436+ const Double_t meanErr = massFitter -> getMeanUncertainty ();
424437 const Double_t sigma = massFitter -> getSigma ();
425438 const Double_t sigmaErr = massFitter -> getSigmaUncertainty ();
426439 const Double_t secSigma = massFitter -> getSecSigma ();
427440 const Double_t secSigmaErr = massFitter -> getSecSigmaUncertainty ();
428- const Double_t mean = massFitter -> getMean ();
429- const Double_t meanErr = massFitter -> getMeanUncertainty ();
441+ const Double_t fracDoubleGaus = massFitter -> getFracDoubleGaus ();
442+ const Double_t fracDoubleGausErr = massFitter -> getFracDoubleGausUncertainty ();
430443 const Double_t reducedChiSquareBkg = massFitter -> getChiSquareOverNDFBkg ();
431444 const Double_t reducedChiSquareTotal = massFitter -> getChiSquareOverNDFTotal ();
432445
433446 hRawYieldsSignal -> SetBinContent (iSliceVar + 1 , rawYield );
434447 hRawYieldsSignal -> SetBinError (iSliceVar + 1 , rawYieldErr );
435448 hRawYieldsSignalCounted -> SetBinContent (iSliceVar + 1 , rawYieldCounted );
436449 hRawYieldsSignalCounted -> SetBinError (iSliceVar + 1 , rawYieldCountedErr );
450+ hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
451+ hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
437452 hRawYieldsSigma -> SetBinContent (iSliceVar + 1 , sigma );
438453 hRawYieldsSigma -> SetBinError (iSliceVar + 1 , sigmaErr );
439454 hRawYieldsSecSigma -> SetBinContent (iSliceVar + 1 , secSigma );
440455 hRawYieldsSecSigma -> SetBinError (iSliceVar + 1 , secSigmaErr );
441- hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
442- hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
456+ hRawYieldsFracDoubleGaus -> SetBinContent (iSliceVar + 1 , fracDoubleGaus );
457+ hRawYieldsFracDoubleGaus -> SetBinError (iSliceVar + 1 , fracDoubleGausErr );
443458 hRawYieldsChiSquareBkg -> SetBinContent (iSliceVar + 1 , reducedChiSquareBkg );
444459 hRawYieldsChiSquareBkg -> SetBinError (iSliceVar + 1 , 0. );
445460 hRawYieldsChiSquareTotal -> SetBinContent (iSliceVar + 1 , reducedChiSquareTotal );
@@ -476,6 +491,7 @@ int runMassFitter(const TString& configFileName)
476491 setFixedValue (fixMean , fixMeanManual , hMeanToFix , std ::bind (& HFInvMassFitter ::setFixGaussianMean , massFitter , std ::placeholders ::_1 ), "MEAN" );
477492 setFixedValue (fixSigma , fixSigmaManual , hSigmaToFix , std ::bind (& HFInvMassFitter ::setFixGaussianSigma , massFitter , std ::placeholders ::_1 ), "SIGMA" );
478493 setFixedValue (fixSecondSigma , fixSecondSigmaManual , hSecondSigmaToFix , std ::bind (& HFInvMassFitter ::setFixSecondGaussianSigma , massFitter , std ::placeholders ::_1 ), "SECOND SIGMA" );
494+ setFixedValue (fixFracDoubleGaus , fixFracDoubleGausManual , nullptr , std ::bind (& HFInvMassFitter ::setFixFrac2Gaus , massFitter , std ::placeholders ::_1 ), "FRAC DOUBLE GAUS" );
479495
480496 if (enableRefl ) {
481497 reflOverSgn = hMassForSgn [iSliceVar ]-> Integral (hMassForSgn [iSliceVar ]-> FindBin (massMin [iSliceVar ] * 1.0001 ), hMassForSgn [iSliceVar ]-> FindBin (massMax [iSliceVar ] * 0.999 ));
@@ -490,12 +506,14 @@ int runMassFitter(const TString& configFileName)
490506 const double rawYieldErr = massFitter -> getRawYieldError ();
491507 const double rawYieldCounted = massFitter -> getRawYieldCounted ();
492508 const double rawYieldCountedErr = massFitter -> getRawYieldCountedError ();
509+ const double mean = massFitter -> getMean ();
510+ const double meanErr = massFitter -> getMeanUncertainty ();
493511 const double sigma = massFitter -> getSigma ();
494512 const double sigmaErr = massFitter -> getSigmaUncertainty ();
495513 const double secSigma = massFitter -> getSecSigma ();
496514 const double secSigmaErr = massFitter -> getSecSigmaUncertainty ();
497- const double mean = massFitter -> getMean ();
498- const double meanErr = massFitter -> getMeanUncertainty ();
515+ const double fracDoubleGaus = massFitter -> getFracDoubleGaus ();
516+ const double fracDoubleGausErr = massFitter -> getFracDoubleGausUncertainty ();
499517 const double reducedChiSquareBkg = massFitter -> getChiSquareOverNDFBkg ();
500518 const double reducedChiSquareTotal = massFitter -> getChiSquareOverNDFTotal ();
501519 const double significance = massFitter -> getSignificance ();
@@ -507,12 +525,14 @@ int runMassFitter(const TString& configFileName)
507525 hRawYieldsSignal -> SetBinError (iSliceVar + 1 , rawYieldErr );
508526 hRawYieldsSignalCounted -> SetBinContent (iSliceVar + 1 , rawYieldCounted );
509527 hRawYieldsSignalCounted -> SetBinError (iSliceVar + 1 , rawYieldCountedErr );
528+ hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
529+ hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
510530 hRawYieldsSigma -> SetBinContent (iSliceVar + 1 , sigma );
511531 hRawYieldsSigma -> SetBinError (iSliceVar + 1 , sigmaErr );
512532 hRawYieldsSecSigma -> SetBinContent (iSliceVar + 1 , secSigma );
513533 hRawYieldsSecSigma -> SetBinError (iSliceVar + 1 , secSigmaErr );
514- hRawYieldsMean -> SetBinContent (iSliceVar + 1 , mean );
515- hRawYieldsMean -> SetBinError (iSliceVar + 1 , meanErr );
534+ hRawYieldsFracDoubleGaus -> SetBinContent (iSliceVar + 1 , fracDoubleGaus );
535+ hRawYieldsFracDoubleGaus -> SetBinError (iSliceVar + 1 , fracDoubleGausErr );
516536 hRawYieldsSignificance -> SetBinContent (iSliceVar + 1 , significance );
517537 hRawYieldsSignificance -> SetBinError (iSliceVar + 1 , significanceErr );
518538 hRawYieldsSgnOverBkg -> SetBinContent (iSliceVar + 1 , rawYield / bkg );
@@ -597,9 +617,10 @@ int runMassFitter(const TString& configFileName)
597617 }
598618 hRawYieldsSignal -> Write ();
599619 hRawYieldsSignalCounted -> Write ();
620+ hRawYieldsMean -> Write ();
600621 hRawYieldsSigma -> Write ();
601622 hRawYieldsSecSigma -> Write ();
602- hRawYieldsMean -> Write ();
623+ hRawYieldsFracDoubleGaus -> Write ();
603624 hRawYieldsSignificance -> Write ();
604625 hRawYieldsSgnOverBkg -> Write ();
605626 hRawYieldsBkg -> Write ();
0 commit comments