10 #include <dqm/analysis/modules/DQMHistAnalysisEventT0.h>
15 #include <TFitResult.h>
36 addParam(
"min_nEntries", m_nEntriesMin,
"minimum numeber of entries to process the histogram", m_nEntriesMin);
37 addParam(
"prefixCanvas", m_prefixCanvas,
"prefix to be added to canvas filename when saved as pdf", std::string(
"c"));
38 addParam(
"printCanvas", m_printCanvas,
"if True prints pdf of the analysis canvas",
bool(
false));
42 DQMHistAnalysisEventT0Module::~DQMHistAnalysisEventT0Module() { }
44 void DQMHistAnalysisEventT0Module::initialize()
49 m_cECLTRG =
new TCanvas(
"EventT0/c_ECLTRGjitter",
"ECLTRG jitter", 1200, 400);
50 m_pad1ECLTRG =
new TPad(
"pad1ECLTRG",
"pad1 ECLTRG", 0.03, 0.02, 0.33, 0.98);
51 m_pad2ECLTRG =
new TPad(
"pad2ECLTRG",
"pad2 ECLTRG", 0.35, 0.02, 0.65, 0.98);
52 m_pad3ECLTRG =
new TPad(
"pad3ECLTRG",
"pad3 ECLTRG", 0.67, 0.02, 0.97, 0.98);
55 m_cCDCTRG =
new TCanvas(
"EventT0/c_CDCTRGjitter",
"CDCTRG jitter", 1200, 400);
56 m_pad1CDCTRG =
new TPad(
"pad1CDCTRG",
"pad1 CDCTRG", 0.03, 0.02, 0.33, 0.98);
57 m_pad2CDCTRG =
new TPad(
"pad2CDCTRG",
"pad2 CDCTRG", 0.35, 0.02, 0.65, 0.98);
58 m_pad3CDCTRG =
new TPad(
"pad3CDCTRG",
"pad3 CDCTRG", 0.67, 0.02, 0.97, 0.98);
60 m_monObj = getMonitoringObject(
"eventT0");
61 m_monObj->addCanvas(m_cECLTRG);
62 m_monObj->addCanvas(m_cCDCTRG);
66 void DQMHistAnalysisEventT0Module::beginRun()
72 void DQMHistAnalysisEventT0Module::endRun()
79 TH1* h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_hadron_L1_ECLTRG");
80 TString tag =
"hadronECLTRG";
82 if (processHistogram(h, tag)) {
83 m_pad1ECLTRG->SetFillColor(0);
84 m_pad1ECLTRG->Modified();
85 m_pad1ECLTRG->Update();
86 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
88 m_pad1ECLTRG->SetFillColor(kGray);
92 h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_bhabha_L1_ECLTRG");
95 if (processHistogram(h, tag)) {
96 m_pad2ECLTRG->SetFillColor(0);
97 m_pad2ECLTRG->Modified();
98 m_pad2ECLTRG->Update();
100 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
102 m_pad2ECLTRG->SetFillColor(kGray);
107 h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_mumu_L1_ECLTRG");
110 if (processHistogram(h, tag)) {
111 m_pad3ECLTRG->SetFillColor(0);
112 m_pad3ECLTRG->Modified();
113 m_pad3ECLTRG->Update();
115 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
117 m_pad3ECLTRG->SetFillColor(kGray);
121 m_pad1ECLTRG->Draw();
122 m_pad2ECLTRG->Draw();
123 m_pad3ECLTRG->Draw();
126 m_cECLTRG->Print(Form(
"%s_ECLTRG.pdf", m_prefixCanvas.c_str()));
132 h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_hadron_L1_CDCTRG");
133 tag =
"hadronCDCTRG";
135 if (processHistogram(h, tag)) {
136 m_pad1CDCTRG->SetFillColor(0);
137 m_pad1CDCTRG->Modified();
138 m_pad1CDCTRG->Update();
140 m_pad1CDCTRG->Draw();
142 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
144 m_pad1CDCTRG->SetFillColor(kGray);
146 m_pad1CDCTRG->Draw();
150 h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_bhabha_L1_CDCTRG");
151 tag =
"bhabhaCDCTRG";
153 if (processHistogram(h, tag)) {
154 m_pad2CDCTRG->SetFillColor(0);
155 m_pad2CDCTRG->Modified();
156 m_pad2CDCTRG->Update();
158 m_pad2CDCTRG->Draw();
160 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
162 m_pad2CDCTRG->SetFillColor(kGray);
164 m_pad2CDCTRG->Draw();
169 h = findHist(
"EventT0DQMdir/m_histEventT0_TOP_mumu_L1_CDCTRG");
172 if (processHistogram(h, tag)) {
173 m_pad3CDCTRG->SetFillColor(0);
174 m_pad3CDCTRG->Modified();
175 m_pad3CDCTRG->Update();
177 B2WARNING(Form(
"Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
179 m_pad3CDCTRG->SetFillColor(kGray);
183 m_pad1CDCTRG->Draw();
184 m_pad2CDCTRG->Draw();
185 m_pad3CDCTRG->Draw();
188 m_cCDCTRG->Print(Form(
"%s_CDCTRG.pdf", m_prefixCanvas.c_str()));
193 void DQMHistAnalysisEventT0Module::terminate()
202 double DQMHistAnalysisEventT0Module::fDoubleGaus(
double* x,
double* par)
205 double frac = par[1];
206 double mean = par[2];
207 double sigma = par[3];
208 double mean2 = par[4];
209 double sigma2 = par[5];
211 return N * frac * TMath::Gaus(x[0], mean, sigma) + N * (1 - frac) * TMath::Gaus(x[0], mean2, sigma2);
214 bool DQMHistAnalysisEventT0Module::processHistogram(TH1* h, TString tag)
218 B2DEBUG(20,
"h == nullptr");
219 m_monObj->setVariable(Form(
"fit_%s", tag.Data()), 0);
223 int nToFit = h->GetEntries();
224 if (nToFit < m_nEntriesMin) {
225 B2DEBUG(20,
"not enough entries");
226 m_monObj->setVariable(Form(
"fit_%s", tag.Data()), 0);
232 h->Scale(1. / h->GetEntries());
233 h->GetXaxis()->SetRangeUser(-50, 50);
236 TF1 fitf(
"fit", DQMHistAnalysisEventT0Module::fDoubleGaus, -50, 50, 6);
237 fitf.SetParNames(
"N",
"f_{1}",
"#mu_{1}",
"#sigma_{1}",
"#mu_{2}",
"#sigma_{2}");
238 fitf.SetParameters(0.1, 0.8, 0, 5, 0, 15);
239 fitf.SetParLimits(1, 0, 1);
240 fitf.SetParLimits(3, 0, 100);
241 fitf.SetParLimits(5, 0, 100);
243 if (h->Fit(&fitf,
"SR+") != 0) {
244 B2DEBUG(20,
"failed fit");
245 m_monObj->setVariable(Form(
"fit_%s", tag.Data()), 0);
250 fitf.GetParameters(&par[0]);
252 for (
int i = 0; i < 6; i++)
253 parErr[i] = fitf.GetParError(i) ;
257 TF1 gauss1(
"gauss1",
"gaus", -100, 100);
258 TF1 gauss2(
"gauss2",
"gaus", -100, 100);
260 gauss1.SetLineColor(kBlue);
261 gauss1.SetLineStyle(kDashed);
262 gauss1.SetParameters(par[0]*par[1], par[2], par[3]);
264 gauss2.SetLineColor(kBlue);
265 gauss2.SetLineStyle(kDashed);
266 gauss2.SetParameters(par[0] * (1 - par[1]), par[4], par[5]);
268 m_monObj->setVariable(Form(
"fit_%s", tag.Data()), 1);
269 m_monObj->setVariable(Form(
"N_%s", tag.Data()), h->GetEntries(), TMath::Sqrt(h->GetEntries()));
270 m_monObj->setVariable(Form(
"f_%s", tag.Data()), par[1], parErr[1]);
271 m_monObj->setVariable(Form(
"mean1_%s", tag.Data()), par[2], parErr[2]);
272 m_monObj->setVariable(Form(
"sigma1_%s", tag.Data()), par[3], parErr[3]);
273 m_monObj->setVariable(Form(
"mean2_%s", tag.Data()), par[4], parErr[4]);
274 m_monObj->setVariable(Form(
"sigma2_%s", tag.Data()), par[5], parErr[5]);
277 gStyle->SetOptFit(1111);
280 fitf.DrawClone(
"same");
281 gauss1.DrawClone(
"same");
282 gauss2.DrawClone(
"same");