Jpp 19.3.0-rc.2
the software that should make you happy
Loading...
Searching...
No Matches
JEvtWeightGenhen.hh
Go to the documentation of this file.
1#ifndef __JAANET__JEVTWEIGHTGENHEN__
2#define __JAANET__JEVTWEIGHTGENHEN__
3
5
8
9#include "JLang/JException.hh"
10#include "JLang/JClonable.hh"
11
12#include "JAAnet/JHead.hh"
14#include "JAAnet/JEvtWeight.hh"
15#include "JAAnet/JFlux.hh"
16#include "JAAnet/JFluxHelper.hh"
17
18
19/**
20 * \author bjung
21 */
22
23namespace JAANET {}
24namespace JPP { using namespace JAANET; }
25
26namespace JAANET {
27
28 using JLANG::JClonable;
29
30
31 /**
32 * Implementation of event weighting for Genhen data.
33 */
34 struct JEvtWeightGenhen final :
35 public JFluxHelper,
36 public JClonable<JEvtWeight, JEvtWeightGenhen>
37 {
38 /**
39 * Default Constructor.
40 */
44
45
46 /**
47 * Constructor.
48 *
49 * \param header header
50 */
51 JEvtWeightGenhen(const JHead& header) :
53 {
54 configure(header);
55 }
56
57
58 /**
59 * Constructor.
60 *
61 * \param header header
62 * \param flux flux
63 */
64 JEvtWeightGenhen(const JHead& header,
65 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 "Genhen";
81 }
82
83
84 /**
85 * Weight normalisation 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 const double Nevents = header.genvol.numberOfEvents;
96
97 setNormalisation(1.0 / Nevents / (60*60*24*365));
98
99 } else {
100
101 THROW(JValueOutOfRange, "JEvtWeightGenhen::configure(): Provided header is inconsistent with Genhen.");
102 }
103 }
104
105
106 /**
107 * Check whether header is consistent with this event weighter.
108 *
109 * \param header header
110 * \return true if consistent; else false
111 */
112 bool check(const JHead& header) const override final
113 {
114 return is_genhen(header);
115 }
116
117
118 /**
119 * Get weight of given event.
120 *
121 * \param evt event
122 * \return weight [Hz]
123 */
124 double getWeight(const Evt& evt) const override final
125 {
126 using namespace JPP;
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);
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);
140
141 } else {
142
143 if (!static_cast<const JFluxHelper&>(*this)) {
144 THROW(JNullPointerException, "JEvtWeightGenhen::getWeight(): Unspecified flux function.");
145 } else {
146 THROW(JIndexOutOfRange, "JEvtWeightGenhen::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_genhen(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
void configure(const pointer_type &p)
Configure event-weight factor.
JEvtWeightFactor & getFactor() const
Get reference to event-weight factor.
Implementation of event weighting for Genhen data.
void configure(const JHead &header) override final
Weight normalisation configuration.
const char *const getName() const override final
Get name.
double getWeight(const Evt &evt) const override final
Get weight of given event.
JEvtWeightGenhen()
Default Constructor.
JEvtWeightGenhen(const JHead &header)
Constructor.
JEvtWeightGenhen(const JHead &header, const JFlux &flux)
Constructor.
bool check(const JHead &header) const override final
Check whether header is consistent with this event weighter.
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 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