13#include "macro/run/bmnloadlibs.C"
31 return par[0] *
Exp(-0.5 *
pow((x[0] - par[1]) / par[2], 2)) ;
37 TString outNameInvMass =
"im.pdf",
38 TString outNameFitRes =
"fr.root",
50 Double_t rL_Resonance = mass - 3 * width;
51 Double_t rR_Resonance = mass + 3 * width;
53 printf(
"m %f w %f l %f r %f\n", mass, width, rL_Resonance, rR_Resonance);
66 unique_ptr<TFile> file{
TFile::Open(fileName,
"READ")};
67 TTree* tree =
dynamic_cast<TTree*
>(file->Get(
"event"));
69 TH1F* invMassSpectrum =
new TH1F(
"invMassSpectrum",
"invMassSpectrum", 75, rL, rR);
71 vector<TString> cutStrVec;
77 ?
"l0.chi2s[][0]>12.5&&l0.chi2s[][1]>10.5&&l0.c2pv<9&&l0.path>2&&l0.tmvas[][0]>-0.03&&l0.tmvas[][1]>-0.03"
83 TF1* bg =
new TF1(
"BG",
"pol4", rL, rR);
86 printf(
"average %f\n", aver);
89 invMassSpectrum->
Fit(bg,
"RS",
"", rL, rR);
97 rL_Resonance, rR_Resonance, 3);
100 printf(
"peak_val %f\n", peak_val);
102 Double_t temp[3] = {peak_val, mass, width};
104 invMassSpectrum->
Fit(sig,
"R",
"", rL_Resonance, rR_Resonance);
120 for (
int i = 0;
i < 8;
i++)
121 printf(
"p[%d] = %f\n",
i, par[
i]);
123 f->SetParameters(par);
126 f->SetParLimits(7, 0.0, 1);
131 invMassSpectrum->
Fit(f, (drawFit) ? fitOpt.
Data() :
TString(fitOpt +
"0").Data(),
"", rL, rR);
135 invMassSpectrum->
FindBin(mean + 3 * sigma));
140 printf(
"Tot %f Bg %f sig %f\n", T, B, S);
141 f->GetParameters(par);
146 T = invMassSpectrum->
Integral(invMassSpectrum->
FindBin(mean - 3 * sigma),
147 invMassSpectrum->
FindBin(mean + 3 * sigma));
151 Signif = (T - B) / T;
152 printf(
"Tot %f Bg %f sig %f after refit\n", T, B, S);
158 TFile out(outNameFitRes,
"RECREATE");
160 unique_ptr<TCanvas> canvLambda = make_unique<TCanvas>(
Form(
"im_thr%1.1f", thr),
"Inv mass", 1600, 900);
161 canvLambda->Divide(1, 1);
166 invMassSpectrum->
Draw(
"PE1X0");
182 TLegend* legend =
new TLegend(legendX, legendY - (4 + cutStrVec.size()) * 0.05, legendX + 0.05, legendY);
188 legend->
AddEntry(
"",
Form(
"S/(S + B) = %.4f", Signif), 0);
189 legend->
AddEntry(
"",
Form(
"Sig integral = %.4f", S), 0);
190 if (cutStrVec.size() > 0)
192 for (
TString& cutS : cutStrVec) {
193 legend->
AddEntry(
"", cutS.Data(), 0);
204 canvLambda->SaveAs(outNameInvMass.Data());
207 TTree* tree_res =
new TTree(
"FitRes",
"FitRes");
208 tree_res->
Branch(
"Mean", &mean);
209 tree_res->
Branch(
"S_to_B", &S_to_B);
210 tree_res->
Branch(
"Signif", &Signif);
211 tree_res->
Branch(
"Signal", &S);
212 tree_res->
Branch(
"Thr", &thr);
213 tree_res->
Branch(
"Tot", &T);
214 tree_res->
Branch(
"Bg", &B);
218 printf(
"Results written to %s\n", outNameFitRes.Data());
223 cout << endl << endl;
224 cout <<
"Macro finished successfully." << endl;
225 cout <<
"Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;
#define R__ADD_INCLUDE_PATH(PATH)
char * Form(const char *fmt,...)
R__EXTERN TStyle * gStyle
double Parameter(unsigned int i) const
virtual void SetTitleOffset(Float_t offset=1)
virtual void SetLabelSize(Float_t size=0.04)
virtual void SetTitleSize(Float_t size=0.04)
virtual void SetLineWidth(Width_t lwidth)
virtual void SetLineColor(Color_t lcolor)
virtual void SetMarkerColor(Color_t mcolor=1)
virtual void SetMarkerStyle(Style_t mstyle=1)
virtual void SetLeftMargin(Float_t leftmargin)
virtual void SetTextFont(Font_t tfont=62)
virtual void SetTextSize(Float_t tsize=1)
void CenterTitle(Bool_t center=kTRUE)
static TDatabasePDG * Instance()
TParticlePDG * GetParticle(const char *name) const
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
virtual Double_t * GetParameters() const
void Draw(Option_t *option="") override
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=nullptr)
virtual void SetParameters(const Double_t *params)
Int_t Write(const char *name=nullptr, Int_t opt=0, Int_t bufsize=0) const override
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
void Close(Option_t *option="") override
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
virtual Int_t GetNbinsX() const
void Draw(Option_t *option="") override
virtual void SetMinimum(Double_t minimum=-1111)
virtual Double_t GetEntries() const
virtual Double_t Integral(Int_t binx1, Int_t binx2, Option_t *option="") const
virtual Double_t GetBinContent(Int_t bin) const
virtual Double_t GetBinWidth(Int_t bin) const
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
void Draw(Option_t *option="") override
TLegendEntry * AddEntry(const char *name, const char *label="", Option_t *option="lpf")
virtual void SetTitle(const char *title="")
const char * GetName() const override
void Start(Bool_t reset=kTRUE)
const char * Data() const
virtual Long64_t GetEntries() const
virtual Long64_t Draw(const char *varexp, const char *selection, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
virtual Int_t Branch(const char *folder, Int_t bufsize=32000, Int_t splitlevel=99)
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)
Double_t Sqrt(Double_t x)