14#include "TDirectory.h"
23 for (
const auto ¶m :
m_chain) {
26 std::set_intersection(
pdgid().begin(),
pdgid().end(),
27 param->pdgid().begin(), param->pdgid().end(),
28 std::inserter(tmp, tmp.begin()));
36 for (
const auto ¶m :
chain()) {
39 std::set_union(
pdgid().begin(),
pdgid().end(), param->pdgid().begin(),
40 param->pdgid().end(), std::inserter(tmp, tmp.begin()));
48 for (
const auto ¶m :
m_chain) {
64 for (
const auto ¶m :
m_chain) {
65 if (param->eta_min() >
eta_min())
67 if (param->eta_max() <
eta_max())
85 for (
const auto ¶m :
m_chain) {
101 for (
const auto ¶m :
m_chain) {
102 if (param->eta_min() <
eta_min())
104 if (param->eta_max() >
eta_max())
131 for (
const auto ¶m :
m_chain)
132 if (!param->is_match_Ekin_bin(Ekin_bin))
138 for (
const auto ¶m :
m_chain)
139 if (!param->is_match_calosample(calosample))
148 Int_t retry_warning = 1;
151 for (
int i = 0; i <= retry; i++) {
152 if (i >= retry_warning)
154 "TFCSParametrizationChain::simulate(): Retry simulate call "
155 << i <<
"/" << retry);
156 for (
const auto ¶m :
m_chain) {
161 retry_warning = retry >> 1;
162 if (retry_warning < 1)
176 "TFCSParametrizationChain::simulate(): Simulate call failed after "
177 << retry <<
" retries");
191 for (
const auto ¶m :
m_chain) {
192 param->Print(opt +
count +
' ');
197void TFCSParametrizationChain::Streamer(TBuffer &R_b) {
201 TDirectory *dir =
nullptr;
203 if (R_b.IsReading()) {
204 Version_t R_v = R_b.ReadVersion(&R_s, &R_c);
206 R_b.SetBufferOffset(R_s);
207 R_b.ReadClassBuffer(TFCSParametrizationChain::Class(),
this);
209 TFCSParametrization::Streamer(R_b);
211 TObject *
parent = R_b.GetParent();
212 if (R_b.GetParent()) {
213 if (
parent->InheritsFrom(TDirectory::Class())) {
220 TClass *R_tcl1 = TFCSParametrizationBase::Class();
221 if (R_tcl1 ==
nullptr) {
222 Error(
"m_chain streamer",
223 "Missing the TClass object for class TFCSParametrizationBase *!");
229 for (R_i = 0; R_i < R_n; R_i++) {
230 std::unique_ptr<TFCSParametrizationBase> R_t;
232 if (R_t !=
nullptr) {
233 if (R_t->InheritsFrom(TFCSParametrizationPlaceholder::Class())) {
234 std::unique_ptr<TFCSParametrizationBase> new_R_t =
nullptr;
242 R_t = std::move(new_R_t);
244 Error(
"TFCSParametrizationChain::Streamer",
245 "Found placeholder object in the parametrization chain, "
246 "but could not read the real object from the file!");
252 R_stl.emplace_back(R_t.release());
256 R_b.CheckByteCount(R_s, R_c, TFCSParametrizationChain::IsA());
259 R_c = R_b.WriteVersion(TFCSParametrizationChain::IsA(), kTRUE);
260 TFCSParametrization::Streamer(R_b);
263 TObject *
parent = R_b.GetParent();
264 if (R_b.GetParent()) {
265 if (
parent->InheritsFrom(TDirectory::Class())) {
272 int R_n =
int(R_stl.size());
275 TFCSParametrizationChain::Chain_t::iterator R_k;
276 for (R_k = R_stl.begin(); R_k != R_stl.end(); ++R_k) {
278 if (dir && R_t !=
nullptr) {
279 dir->WriteTObject(R_t);
280 TFCSParametrizationPlaceholder
tmp( R_t->GetName(), TString(
"Placeholder for: ") + R_t->GetTitle());
281 R_b.WriteObject( &tmp,
false );
283 R_b.WriteObject( R_t );
287 R_b.SetByteCount(R_c, kTRUE);
303 chain.setLevel(MSG::DEBUG);
308 chain.simulate(*simulstate, truth, extrapol);
314 chain.push_back(param);
317 chain.push_back(param);
322 chain.simulate(*simulstate, truth, extrapol);
324 "==== Simulate only begin/end all with chain retry====");
325 chain.set_RetryChainFromStart();
326 chain.simulate(*simulstate, truth, extrapol);
327 chain.reset_RetryChainFromStart();
#define ATH_MSG_WARNING(x)
#define ATH_MSG_NOCLASS(logger_name, x)
FCSReturnCode
Base class for all FastCaloSim parametrizations Functionality in derivde classes is provided through ...
virtual void setLevel(MSG::Level lvl)
Update outputlevel.
void Print(Option_t *option="") const
Print object information.
TFCSParametrizationBase(const char *name=nullptr, const char *title=nullptr)
FCSReturnCode simulate_and_retry(TFCSParametrizationBase *parametrization, TFCSSimulationState &simulstate, const TFCSTruthState *truth, const TFCSExtrapolationState *extrapol) const
void recalc_pdgid_intersect()
static void unit_test(TFCSSimulationState *simulstate=nullptr, const TFCSTruthState *truth=nullptr, const TFCSExtrapolationState *extrapol=nullptr)
void Print(Option_t *option="") const override
TFCSParametrizationChain(const char *name=nullptr, const char *title=nullptr)
std::vector< TFCSParametrizationBase * > Chain_t
void recalc_Ekin_intersect()
void recalc_Ekin_eta_intersect()
virtual bool is_match_calosample(int calosample) const override
const Chain_t & chain() const
virtual FCSReturnCode simulate(TFCSSimulationState &simulstate, const TFCSTruthState *truth, const TFCSExtrapolationState *extrapol) const override
Method in all derived classes to do some simulation.
virtual void recalc()
Default is to call recalc_pdgid_intersect() and recalc_Ekin_eta_intersect().
virtual bool is_match_Ekin_bin(int Ekin_bin) const override
void recalc_eta_intersect()
void recalc_pdgid_union()
bool SplitChainObjects() const
void recalc_Ekin_eta_union()
virtual void set_eta(const TFCSParametrizationBase &ref)
double Ekin_nominal() const override
double eta_nominal() const override
virtual void set_eta_max(double max)
TFCSParametrization(const char *name=nullptr, const char *title=nullptr)
virtual void set_Ekin_max(double max)
virtual void set_Ekin_min(double min)
virtual void set_Ekin(const TFCSParametrizationBase &ref)
double Ekin_min() const override
double eta_max() const override
double Ekin_max() const override
const std::set< int > & pdgid() const override
virtual void set_eta_nominal(double min)
double eta_min() const override
virtual void set_pdgid(int id)
virtual void set_eta_min(double min)
virtual void set_Ekin_nominal(double min)
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
static Root::TMsgLogger logger("iLumiCalc")
Error
The different types of error that can be flagged in the L1TopoRDO.