Jpp master_rocky-44-g75b7c4f75
the software that should make you happy
Loading...
Searching...
No Matches
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"
15#include "JAAnet/JEvtWeight.hh"
17#include "JAAnet/JFlux.hh"
18
19
20/**
21 * \author bjung
22 */
23
24namespace JAANET {}
25namespace JPP { using namespace JAANET; }
26
27namespace 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 */
45
46
47 /**
48 * Constructor.
49 *
50 * \param header header
51 */
52 JEvtWeightCorsika(const JHead& header) :
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.
Monte Carlo run header.
Definition JHead.hh:1236
Exception for accessing an index in a collection that is outside of its range.
Exception for null pointer operation.
Exception for accessing a value in a collection that is outside of its range.
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.
JEvtWeightCorsika()
Default Constructor.
double getWeight(const Evt &evt) const override final
Get weight of given event.
JEvtWeightCorsika(const JHead &header, const JFlux &flux)
Constructor.
const char *const getName() const override final
Get name.
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.
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