12 auto checkH1 = [](TList *out) {
16 std::cout <<
"checkH1 >>> Test failure: output list not found\n";
21 auto hdmd =
dynamic_cast<TH1F *
>(out->FindObject(
"hdmd"));
23 std::cout <<
"checkH1 >>> Test failure: 'hdmd' histo not found\n";
26 if ((Int_t)(hdmd->GetEntries()) != 7525) {
27 std::cout <<
"checkH1 >>> Test failure: 'hdmd' histo: wrong number"
29 << (Int_t)(hdmd->GetEntries()) <<
": expected 7525) \n";
32 if (TMath::Abs((hdmd->GetMean() - 0.15512023) / 0.15512023) > 0.001) {
33 std::cout <<
"checkH1 >>> Test failure: 'hdmd' histo: wrong mean (" << hdmd->GetMean()
34 <<
": expected 0.15512023) \n";
38 auto h2 =
dynamic_cast<TH2F *
>(out->FindObject(
"h2"));
40 std::cout <<
"checkH1 >>> Test failure: 'h2' histo not found\n";
43 if ((Int_t)(h2->GetEntries()) != 7525) {
44 std::cout <<
"checkH1 >>> Test failure: 'h2' histo: wrong number"
46 << (Int_t)(h2->GetEntries()) <<
": expected 7525) \n";
49 if (TMath::Abs((h2->GetMean() - 0.15245688) / 0.15245688) > 0.001) {
50 std::cout <<
"checkH1 >>> Test failure: 'h2' histo: wrong mean (" << h2->GetMean() <<
": expected 0.15245688) \n";
59 auto doFit = [](TList *out,
const char *lfn = 0) -> Int_t {
61 RedirectHandle_t redH;
63 gSystem->RedirectOutput(lfn,
"a", &redH);
65 auto hdmd =
dynamic_cast<TH1F *
>(out->FindObject(
"hdmd"));
66 auto h2 =
dynamic_cast<TH2F *
>(out->FindObject(
"h2"));
69 if (hdmd == 0 || h2 == 0) {
70 std::cout <<
"doFit: hdmd = " << hdmd <<
" , h2 = " << h2 <<
"\n";
73 gSystem->RedirectOutput(0, 0, &redH);
78 TCanvas *c1 =
new TCanvas(
"c1",
"h1analysis analysis", 10, 10, 800, 600);
79 c1->SetBottomMargin(0.15);
80 hdmd->GetXaxis()->SetTitle(
"m_{K#pi#pi} - m_{K#pi}[GeV/c^{2}]");
81 hdmd->GetXaxis()->SetTitleOffset(1.4);
84 if (gROOT->GetListOfFunctions()->FindObject(
"f5"))
85 delete gROOT->GetFunction(
"f5");
87 auto fdm5 = [](Double_t *xx, Double_t *par) -> Double_t {
88 const Double_t dxbin = (0.17 - 0.13) / 40;
92 Double_t xp3 = (x - par[3]) * (x - par[3]);
93 Double_t res = dxbin * (par[0] * TMath::Power(x - 0.13957, par[1]) +
94 par[2] / 2.5066 / par[4] * TMath::Exp(-xp3 / 2 / par[4] / par[4]));
98 auto f5 =
new TF1(
"f5", fdm5, 0.139, 0.17, 5);
99 f5->SetParameters(1000000, .25, 2000, .1454, .001);
100 hdmd->Fit(
"f5",
"lr");
103 Double_t ref_f5[4] = {959915.0, 0.351114, 1185.03, 0.145569};
104 for (
int i : {0, 1, 2, 3}) {
105 if ((TMath::Abs((f5->GetParameters())[i] - ref_f5[i]) / ref_f5[i]) > 0.001) {
106 std::cout <<
"\n >>> Test failure: fit to 'f5': parameter '" << f5->GetParName(i) <<
"' has wrong value ("
107 << (f5->GetParameters())[i] <<
": expected" << ref_f5[i] <<
") \n";
109 gSystem->RedirectOutput(0, 0, &redH);
115 gStyle->SetOptFit(0);
116 gStyle->SetOptStat(1100);
117 auto c2 =
new TCanvas(
"c2",
"tauD0", 100, 100, 800, 600);
119 c2->SetBottomMargin(0.15);
125 if (gROOT->GetListOfFunctions()->FindObject(
"f2"))
126 delete gROOT->GetFunction(
"f2");
128 auto fdm2 = [](Double_t *xx, Double_t *par) -> Double_t {
129 const auto dxbin = (0.17 - 0.13) / 40;
130 const auto sigma = 0.0012;
134 auto xp3 = (x - 0.1454) * (x - 0.1454);
135 auto res = dxbin * (par[0] * TMath::Power(x - 0.13957, 0.25) +
136 par[1] / 2.5066 / sigma * TMath::Exp(-xp3 / 2 / sigma / sigma));
140 auto f2 =
new TF1(
"f2", fdm2, 0.139, 0.17, 2);
141 f2->SetParameters(10000, 10);
144 std::cout <<
"doFit: restricting fit to two bins only in this example...\n";
146 h2->FitSlicesX(f2, 10, 20, 10,
"g5 l");
149 Double_t ref_f2[2] = {52432.2, 105.481};
150 for (
int i : {0, 1}) {
151 if ((TMath::Abs((f2->GetParameters())[i] - ref_f2[i]) / ref_f2[i]) > 0.001) {
152 std::cout <<
"\n >>> Test failure: fit to 'f2': parameter '" << f2->GetParName(i) <<
"' has wrong value ("
153 << (f2->GetParameters())[i] <<
": expected" << ref_f2[i] <<
") \n";
155 gSystem->RedirectOutput(0, 0, &redH);
160 auto h2_1 = (TH1D *)gDirectory->Get(
"h2_1");
161 h2_1->GetXaxis()->SetTitle(
"#tau[ps]");
162 h2_1->SetMarkerStyle(21);
165 auto line =
new TLine(0, 0, 0, c2->GetUymax());
170 auto psdmd = (TPaveStats *)hdmd->GetListOfFunctions()->FindObject(
"stats");
171 psdmd->SetOptStat(1110);
175 gSystem->RedirectOutput(0, 0, &redH);
181 auto doH1 = [](TTreeReader &reader) {
184 auto hdmd =
new TH1F(
"hdmd",
"Dm_d", 40, 0.13, 0.17);
185 auto h2 =
new TH2F(
"h2",
"ptD0 vs Dm_d", 30, 0.135, 0.165, 30, -3, 6);
187 TTreeReaderValue<Float_t> fPtds_d(reader,
"ptds_d");
188 TTreeReaderValue<Float_t> fEtads_d(reader,
"etads_d");
189 TTreeReaderValue<Float_t> fDm_d(reader,
"dm_d");
190 TTreeReaderValue<Int_t> fIk(reader,
"ik");
191 TTreeReaderValue<Int_t> fIpi(reader,
"ipi");
192 TTreeReaderValue<Int_t> fIpis(reader,
"ipis");
193 TTreeReaderValue<Float_t> fPtd0_d(reader,
"ptd0_d");
194 TTreeReaderValue<Float_t> fMd0_d(reader,
"md0_d");
195 TTreeReaderValue<Float_t> fRpd0_t(reader,
"rpd0_t");
196 TTreeReaderArray<Int_t> fNhitrp(reader,
"nhitrp");
197 TTreeReaderArray<Float_t> fRstart(reader,
"rstart");
198 TTreeReaderArray<Float_t> fRend(reader,
"rend");
199 TTreeReaderArray<Float_t> fNlhk(reader,
"nlhk");
200 TTreeReaderArray<Float_t> fNlhpi(reader,
"nlhpi");
201 TTreeReaderValue<Int_t> fNjets(reader,
"njets");
203 while (reader.Next()) {
206 if (TMath::Abs(*fMd0_d - 1.8646) >= 0.04)
210 if (TMath::Abs(*fEtads_d) >= 1.5)
215 if (fNhitrp.At(*fIk) * fNhitrp.At(*fIpi) <= 1)
218 if (fRend.At(*fIk) - fRstart.At(*fIk) <= 22)
220 if (fRend.At(*fIpi) - fRstart.At(*fIpi) <= 22)
222 if (fNlhk.At(*fIk) <= 0.1)
224 if (fNlhpi.At(*fIpi) <= 0.1)
227 if (fNlhpi.At(*fIpis) <= 0.1)
234 h2->Fill(*fDm_d, *fRpd0_t / 0.029979 * 1.8646 / *fPtd0_d);
247 auto doH1fillList = [](TTreeReader &reader) {
250 auto elist =
new TEntryList(
"elist",
"H1 selection from Cut");
252 TTreeReaderValue<Float_t> fPtds_d(reader,
"ptds_d");
253 TTreeReaderValue<Float_t> fEtads_d(reader,
"etads_d");
254 TTreeReaderValue<Int_t> fIk(reader,
"ik");
255 TTreeReaderValue<Int_t> fIpi(reader,
"ipi");
256 TTreeReaderValue<Int_t> fIpis(reader,
"ipis");
257 TTreeReaderValue<Float_t> fMd0_d(reader,
"md0_d");
258 TTreeReaderArray<Int_t> fNhitrp(reader,
"nhitrp");
259 TTreeReaderArray<Float_t> fRstart(reader,
"rstart");
260 TTreeReaderArray<Float_t> fRend(reader,
"rend");
261 TTreeReaderArray<Float_t> fNlhk(reader,
"nlhk");
262 TTreeReaderArray<Float_t> fNlhpi(reader,
"nlhpi");
263 TTreeReaderValue<Int_t> fNjets(reader,
"njets");
265 while (reader.Next()) {
268 if (TMath::Abs(*fMd0_d - 1.8646) >= 0.04)
272 if (TMath::Abs(*fEtads_d) >= 1.5)
277 if (fNhitrp.At(*fIk) * fNhitrp.At(*fIpi) <= 1)
280 if (fRend.At(*fIk) - fRstart.At(*fIk) <= 22)
282 if (fRend.At(*fIpi) - fRstart.At(*fIpi) <= 22)
284 if (fNlhk.At(*fIk) <= 0.1)
286 if (fNlhpi.At(*fIpi) <= 0.1)
289 if (fNlhpi.At(*fIpis) <= 0.1)
295 elist->Enter(reader.GetCurrentEntry(), reader.GetTree());
302 auto doH1useList = [](TTreeReader &reader) {
305 auto hdmd =
new TH1F(
"hdmd",
"Dm_d", 40, 0.13, 0.17);
306 auto h2 =
new TH2F(
"h2",
"ptD0 vs Dm_d", 30, 0.135, 0.165, 30, -3, 6);
308 TTreeReaderValue<Float_t> fDm_d(reader,
"dm_d");
309 TTreeReaderValue<Float_t> fPtd0_d(reader,
"ptd0_d");
310 TTreeReaderValue<Float_t> fRpd0_t(reader,
"rpd0_t");
312 while (reader.Next()) {
315 h2->Fill(*fDm_d, *fRpd0_t / 0.029979 * 1.8646 / *fPtd0_d);