36 testInvariant ()
const
69 for (std::size_t form = 0, end = m_formulas.size(); form != end; ++ form)
83 : m_hist (0), m_type (-1), m_valnum (1), m_cut (
false), m_hist2 (0)
91 AlgHist (TH1 *val_hist_swallow,
92 const std::string& val_value0,
93 const std::string& val_value1,
94 const std::string& val_value2,
95 const std::string& val_value3)
96 : m_hist (0), m_type (-1), m_valnum (1), m_cut (
false), m_hist2 (0)
98 std::unique_ptr<TH1> hist (val_hist_swallow);
103 m_formulas.push_back (val_value0);
104 if (!val_value1.empty())
105 m_formulas.push_back (val_value1);
106 if (!val_value2.empty())
107 m_formulas.push_back (val_value2);
108 if (!val_value3.empty())
109 m_formulas.push_back (val_value3);
111 m_hist = hist.release();
112 m_hist->SetDirectory (0);
113 if (
dynamic_cast<TProfile*
>(m_hist) != 0)
117 }
else if (
dynamic_cast<TH2*
>(m_hist) != 0)
121 }
else if (
dynamic_cast<TH3*
>(m_hist) != 0)
130 m_values.resize (m_valnum + 1, 1);
131 if (m_valnum == m_formulas.size())
133 else if (m_valnum+1 == m_formulas.size())
136 throw std::runtime_error (
"AlgHist: invalid number of formulas");
145 if (m_hist !=
nullptr) {
157 return EL::StatusCode::SUCCESS;
170 for (std::size_t form = 0, end = m_formulas.size(); form != end; ++ form)
171 m_index.push_back (m_formSvc->addForm (m_formulas[form]));
172 m_hist2 =
dynamic_cast<TH1*
>(m_hist->Clone ());
174 wk()->addOutput (m_hist2);
180 return EL::StatusCode::SUCCESS;
190 RCU_ASSERT (m_formulas.size() == m_index.size());
191 RCU_ASSERT (m_formulas.size() <= m_values.size());
193 if (m_cut && m_index.back()->ndim() == 0 &&
194 (m_values.back() = m_index.back()->value (0)) == 0)
195 return EL::StatusCode::SUCCESS;
198 std::size_t
size = std::size_t (-1);
199 for (std::size_t form = 0; form != m_valnum; ++ form)
201 switch (m_index[form]->ndim())
205 return EL::StatusCode::FAILURE;
207 if (m_index[form]->ndata() > 0)
208 m_values[form] = m_index[form]->value (0);
214 if (
size > m_index[form]->ndata())
215 size = m_index[form]->ndata();
218 ATH_MSG_ERROR (
"unknown formula dimension: " << m_formulas[form]);
219 return StatusCode::FAILURE;
223 if (ndim == 0 &&
size > 1)
225 for (std::size_t iter = 0; iter !=
size; ++ iter)
229 if (m_cut && m_index.back()->ndim() == 1 &&
230 (m_values.back() = m_index.back()->value (iter)) == 0)
233 for (std::size_t form = 0; form != m_valnum; ++ form)
235 if (m_index[form]->ndim() == 1)
236 m_values[form] = m_index[form]->value (iter);
243 m_hist2->Fill (m_values[0], m_values[1]);
246 static_cast<TProfile*
>(m_hist2)->Fill (m_values[0], m_values[1], m_values[2]);
249 static_cast<TH2*
>(m_hist2)->Fill (m_values[0], m_values[1], m_values[2]);
252 static_cast<TH3*
>(m_hist2)->Fill (m_values[0], m_values[1], m_values[2], m_values[3]);
256 return StatusCode::FAILURE;
259 return EL::StatusCode::SUCCESS;