Jpp  16.0.3
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JEvtWeightFactorMupage.hh
Go to the documentation of this file.
1 #ifndef __JAANET__JEVTWEIGHTFACTORMUPAGE__
2 #define __JAANET__JEVTWEIGHTFACTORMUPAGE__
3 
6 
7 #include "JLang/JException.hh"
8 
10 
11 #include "TFormula.h"
12 
13 
14 /**
15  * \author bjung
16  */
17 
18 namespace JAANET {
19 
22 
23 
24  /**
25  * Implementation of reweighting factor for mupage events according to a specifiable ROOT TFormula.
26  *
27  * Note: The ROOT TFormula may assume any number of parameters, but should be restricted to\n
28  * the physical variables listed among `JEvtWeightFactorMupage::variables`.\n
29  * These variables may be specified within the ROOT TFormula as 'x[<index>]',\n
30  * where <index> corresponds to the index of the desired physical variable within `JEvtWeightFactorMupage::variables`.
31  */
33  public TFormula
34  {
35  /**
36  * Indices of reweighting variables for MUPAGE.
37  */
38  enum variables {
39  MUON_MULTIPLICITY, //!< Muon multiplicity
40  MEAN_ZENITH_ANGLE, //!< Average cosine of zenith angle
41  TOTAL_MUON_ENERGY, //!< Muon bundle total energy [GeV]
42  LATERAL_SPREAD, //!< Muon bundle lateral spread [m]
43 
44  NUMBER_OF_VARIABLES //!< Number of reweighting variables; \n
45  //!< N.B.\ This enum value needs to be specified last!
46  };
47 
48 
49  /**
50  * Default constructor.
51  */
53  TFormula()
54  {}
55 
56 
57  /**
58  * Constructor.
59  *
60  * \param name name
61  * \param formula formula
62  */
64  const char* formula) :
65  TFormula(name, formula)
66  {}
67 
68 
69  /**
70  * Get weighting factor for given event.
71  *
72  * \param evt event
73  * \return weighting factor
74  */
75  double operator()(const Evt& evt) const
76  {
77  using namespace std;
78  using namespace JPP;
79 
80  vector<JTrack3E> muons;
81 
83 
84  for (vector<Trk>::const_iterator i = evt.mc_trks.cbegin(); i != evt.mc_trks.cend(); ++i) {
85 
86  if (is_muon(*i)) {
87 
88  vars[MEAN_ZENITH_ANGLE] += i->dir.z / i->dir.len();
89  vars[TOTAL_MUON_ENERGY] += i->E;
90 
91  muons.push_back(getTrack(*i));
92  }
93  }
94 
95  if (muons.size() > 0) {
96 
97  vars[MUON_MULTIPLICITY] = (Double_t) muons.size();
98  vars[MEAN_ZENITH_ANGLE] /= vars[MUON_MULTIPLICITY];
99 
100  if (this->GetNdim() > (int) LATERAL_SPREAD) {
101 
102  JCircle2D circle = JCircle2D(muons.cbegin(), muons.cend()); // smallest enclosing circle
103  vars[LATERAL_SPREAD] = (Double_t) circle.getRadius();
104  }
105 
106  return this->DoEval(&vars[0]);
107 
108  } else {
109 
110  THROW(JNullPointerException, "JEvtWeightFactorMupage::operator(): No muon for event " << evt.id << '.' << endl);
111  }
112  }
113  };
114 }
115 
116 #endif
Exceptions.
JTrack3E getTrack(const Trk &track)
Get track.
JEvtWeightFactorMupage(const char *name, const char *formula)
Constructor.
variables
Indices of reweighting variables for MUPAGE.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
then echo Enter input within $TIMEOUT_S seconds echo n User name
Definition: JCookie.sh:42
Number of reweighting variables; N.B. This enum value needs to be specified last! ...
Exception for null pointer operation.
Definition: JException.hh:216
JEvtWeightFactorMupage()
Default constructor.
double operator()(const Evt &evt) const
Get weighting factor for given event.
Implementation of reweighting factor for mupage events according to a specifiable ROOT TFormula...
int id
offline event identifier
Definition: Evt.hh:21
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:162
std::vector< Trk > mc_trks
MC: list of MC truth tracks.
Definition: Evt.hh:46
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:19