10 #include <dqm/analysis/modules/DQMHistAnalysisEpicsExample.h>
32 addParam(
"HistoName", m_histoname,
"Name of Histogram (incl dir)", std::string(
""));
33 addParam(
"Function", m_function,
"Fit function definition", std::string(
"gaus"));
34 addParam(
"Parameters", m_parameters,
"Fit function parameters for EPICS", 3);
35 addParam(
"PVName", m_pvPrefix,
"PV Prefix", std::string(
"DQM:TEST:hist:"));
36 B2DEBUG(20,
"DQMHistAnalysisEpicsExample: Constructor done.");
40 DQMHistAnalysisEpicsExampleModule::~DQMHistAnalysisEpicsExampleModule()
43 if (ca_current_context()) ca_context_destroy();
47 void DQMHistAnalysisEpicsExampleModule::initialize()
49 B2DEBUG(20,
"DQMHistAnalysisEpicsExample: initialized.");
53 a.ReplaceAll(
"/",
"_");
54 m_c1 =
new TCanvas(
"c_" + a);
55 m_f1 =
new TF1(
"f_" + a, TString(m_function), -30, 300);
56 m_f1->SetParameter(0, 1000);
57 m_f1->SetParameter(1, 0);
58 m_f1->SetParameter(2, 10);
59 m_f1->SetLineColor(4);
61 m_f1->SetNumberFitPoints(512);
63 m_line =
new TLine(0, 10, 0, 0);
64 m_line->SetVertical(
true);
65 m_line->SetLineColor(8);
66 m_line->SetLineWidth(3);
68 m_line_lo =
new TLine(0, 10, 0, 0);
69 m_line_lo->SetVertical(
true);
70 m_line_lo->SetLineColor(2);
71 m_line_lo->SetLineWidth(3);
73 m_line_hi =
new TLine(0, 10, 0, 0);
74 m_line_hi->SetVertical(
true);
75 m_line_hi->SetLineColor(2);
76 m_line_hi->SetLineWidth(3);
85 if (m_parameters > 0) {
86 if (m_parameters > 10) m_parameters = 10;
88 if (!ca_current_context()) SEVCHK(ca_context_create(ca_disable_preemptive_callback),
"ca_context_create");
90 for (
auto i = 0; i < m_parameters; i++) {
92 aa = m_f1->GetParName(i);
93 if (aa ==
"") aa = string(
"par") + string(TString::Itoa(i, 10).Data());
96 SEVCHK(ca_create_channel(aa.c_str(), NULL, NULL, 10, &mychid[i]),
"ca_create_channel failure");
102 SEVCHK(ca_pend_io(5.0),
"ca_pend_io failure");
110 void DQMHistAnalysisEpicsExampleModule::beginRun()
113 B2DEBUG(20,
"DQMHistAnalysisEpicsExample: beginRun called.");
117 hh1 = findHist(m_histoname.c_str());
120 B2DEBUG(20,
"Histo " << m_histoname <<
" not in memfile");
122 TDirectory* d = gROOT;
123 TString myl = m_histoname;
126 while (myl.Tokenize(tok, from,
"/")) {
130 if (myl.Tokenize(dummy, f,
"/")) {
131 auto e = d->GetDirectory(tok);
133 B2DEBUG(20,
"Cd Dir " << tok);
141 TObject* obj = d->FindObject(tok);
143 if (obj->IsA()->InheritsFrom(
"TH1")) {
144 B2DEBUG(20,
"Histo " << m_histoname <<
" found in mem");
148 B2DEBUG(20,
"Histo " << m_histoname <<
" NOT found in mem");
159 B2DEBUG(20,
"Histo " << m_histoname <<
" not found");
163 void DQMHistAnalysisEpicsExampleModule::event()
168 hh1 = findHist(m_histoname.c_str());
170 B2DEBUG(20,
"Histo " << m_histoname <<
" not in memfile");
172 TDirectory* d = gROOT;
173 TString myl = m_histoname;
176 while (myl.Tokenize(tok, from,
"/")) {
180 if (myl.Tokenize(dummy, f,
"/")) {
181 auto e = d->GetDirectory(tok);
183 B2DEBUG(20,
"Cd Dir " << tok);
191 TObject* obj = d->FindObject(tok);
193 if (obj->IsA()->InheritsFrom(
"TH1")) {
194 B2DEBUG(20,
"Histo " << m_histoname <<
" found in mem");
199 B2DEBUG(20,
"Histo " << m_histoname <<
" NOT found in mem");
205 double y1 = hh1->GetMaximum();
206 double y2 = hh1->GetMinimum();
207 m_line->SetY1(y1 + (y1 - y2) * 0.05);
208 m_line_lo->SetY1(y1 + (y1 - y2) * 0.05);
209 m_line_hi->SetY1(y1 + (y1 - y2) * 0.05);
213 double x = m_f1->GetParameter(1);
225 B2DEBUG(20,
"Histo " << m_histoname <<
" not found");
229 if (m_parameters > 0) {
230 for (
auto i = 0; i < m_parameters; i++) {
232 data = m_f1->GetParameter(i);
233 if (mychid[i]) SEVCHK(ca_put(DBR_DOUBLE, mychid[i], (
void*)&data),
"ca_set failure");
235 SEVCHK(ca_pend_io(5.0),
"ca_pend_io failure");
240 void DQMHistAnalysisEpicsExampleModule::endRun()
242 B2DEBUG(20,
"DQMHistAnalysisEpicsExample : endRun called");
246 void DQMHistAnalysisEpicsExampleModule::terminate()
249 if (m_parameters > 0) {
250 for (
auto i = 0; i < m_parameters; i++) {
251 if (mychid[i]) SEVCHK(ca_clear_channel(mychid[i]),
"ca_clear_channel failure");
253 SEVCHK(ca_pend_io(5.0),
"ca_pend_io failure");
256 B2DEBUG(20,
"DQMHistAnalysisEpicsExample: terminate called");