Jpp  debug
the software that should make you happy
JEvtWeightCorsika.hh
Go to the documentation of this file.
1 #ifndef __JAANET__JEVTWEIGHTCORSIKA__
2 #define __JAANET__JEVTWEIGHTCORSIKA__
3 
6 
9 
10 #include "JLang/JException.hh"
11 #include "JLang/JClonable.hh"
12 
13 #include "JAAnet/JHead.hh"
14 #include "JAAnet/JHeadToolkit.hh"
15 #include "JAAnet/JEvtWeight.hh"
17 #include "JAAnet/JFlux.hh"
18 
19 
20 /**
21  * \author bjung
22  */
23 
24 namespace JAANET {}
25 namespace JPP { using namespace JAANET; }
26 
27 namespace JAANET {
28 
29  using JLANG::JClonable;
30 
31 
32  /**
33  * Implementation of event weighting for Corsika data.
34  */
35  struct JEvtWeightCorsika final :
36  public JFluxHelper,
37  public JClonable<JEvtWeight, JEvtWeightCorsika>
38  {
39  /**
40  * Default Constructor.
41  */
43  JFluxHelper()
44  {}
45 
46 
47  /**
48  * Constructor.
49  *
50  * \param header header
51  */
52  JEvtWeightCorsika(const JHead& header) :
53  JFluxHelper()
54  {
55  configure(header);
56  }
57 
58 
59  /**
60  * Constructor.
61  *
62  * \param header header
63  * \param flux flux
64  */
65  JEvtWeightCorsika(const JHead& header,
66  const JFlux& flux)
67  {
68  configure(header);
70  }
71 
72 
73  /**
74  * Get name.
75  *
76  * \return name
77  */
78  const char* const getName() const override final
79  {
80  return "Corsika";
81  }
82 
83 
84  /**
85  * Weight configuration.
86  *
87  * \param header header
88  */
89  void configure(const JHead& header) override final
90  {
91  using namespace JPP;
92 
93  if (check(header)) {
94 
95  setNormalisation(1.0 / header.genvol.numberOfEvents);
96 
97  } else {
98 
99  THROW(JValueOutOfRange, "JEvtWeightCorsika::configure(): Provided header is inconsistent with Corsika.");
100  }
101  }
102 
103 
104  /**
105  * Check whether header is consistent with this event weighter.
106  *
107  * \param header header
108  * \return true if consistent; else false
109  */
110  bool check(const JHead& header) const override final
111  {
112  return is_corsika(header);
113  }
114 
115 
116  /**
117  * Get weight of given event.
118  *
119  * \param evt event
120  * \return weight [Hz]
121  */
122  double getWeight(const Evt& evt) const override final
123  {
124  using namespace JPP;
125 
126  const double Nretries = evt.w2list[W2LIST_GSEAGEN_N_RETRIES];
127 
128  if (static_cast<const JFluxHelper&>(*this) &&
129  evt.w.size() > WEIGHTLIST_DIFFERENTIAL_EVENT_RATE) {
130 
131  return evt.w[WEIGHTLIST_DIFFERENTIAL_EVENT_RATE] * getFactor(evt) * getNormalisation(evt) / (1 + Nretries);
132 
133  } else if (evt.w.size() > WEIGHTLIST_RESCALED_EVENT_RATE) {
134 
135  return evt.w[WEIGHTLIST_RESCALED_EVENT_RATE];
136 
137  } else if (evt.w.size() > WEIGHTLIST_EVENT_RATE) {
138 
139  return evt.w[WEIGHTLIST_EVENT_RATE] * getNormalisation(evt) / (1 + Nretries);
140 
141  } else {
142 
143  if (!static_cast<const JFluxHelper&>(*this)) {
144  THROW(JNullPointerException, "JEvtWeightCorsika::getWeight(): Unspecified flux function.");
145  } else {
146  THROW(JIndexOutOfRange, "JEvtWeightCorsika::getWeight(): Empty " << (evt.w.size() < 3 ? "w2-" : "w3-") << "weight.");
147  }
148  }
149  }
150  };
151 }
152 
153 #endif
Exceptions.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
Monte Carlo run header.
Definition: JHead.hh:1236
Exception for accessing an index in a collection that is outside of its range.
Definition: JException.hh:108
Exception for null pointer operation.
Definition: JException.hh:234
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:180
Extensions to Evt data format.
bool is_corsika(const JHead &header)
Check for generator.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:21
Implementation of event weighting for Corsika data.
JEvtWeightCorsika(const JHead &header)
Constructor.
const char *const getName() const override final
Get name.
JEvtWeightCorsika()
Default Constructor.
double getWeight(const Evt &evt) const override final
Get weight of given event.
JEvtWeightCorsika(const JHead &header, const JFlux &flux)
Constructor.
bool check(const JHead &header) const override final
Check whether header is consistent with this event weighter.
void configure(const JHead &header) override final
Weight configuration.
void configure(const pointer_type &p)
Configure event-weight factor.
JEvtWeightFactor & getFactor() const
Get reference to event-weight factor.
Helper class for flux function.
Definition: JFluxHelper.hh:25
Low-level interface for retrieving the flux corresponding to a given event.
Definition: JFlux.hh:23
Neutrino flux.
Definition: JHead.hh:906
Template class for object cloning.
Definition: JClonable.hh:59
static const int W2LIST_GSEAGEN_N_RETRIES
Number of extra chances given to each CORSIKA shower to hit the can.
static const int WEIGHTLIST_DIFFERENTIAL_EVENT_RATE
Event rate per unit of flux (c.f. taglist document) [GeV m2 sr].
Definition: weightlist.hh:14
static const int WEIGHTLIST_RESCALED_EVENT_RATE
Rescaled event rate [s-1].
Definition: weightlist.hh:17
static const int WEIGHTLIST_EVENT_RATE
Event rate [s-1].
Definition: weightlist.hh:15