DAS  3.0
Das Analysis System
ZmmY.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <list>
5 
6 #if !defined(__CLING__) || defined(__ROOTCLING__)
12 #endif
13 
14 namespace DAS::Unfolding::ZmmY {
15 
16 #if !defined(__CLING__) || defined(__ROOTCLING__)
17 
18 // Base class for ZmmY observable fillers
19 struct ZmmYFiller : public Filler {
20  // Common event info
22  std::vector<GenMuon> * genMuons;
23  std::vector<RecMuon> * recMuons;
24  std::vector<GenPhoton> * genPhotons;
25  std::vector<RecPhoton> * recPhotons;
28 
30  : genMuons(isMC ? flow.GetBranchReadOnly<std::vector<GenMuon>>("genMuons") : nullptr)
31  , genPhotons(isMC ? flow.GetBranchReadOnly<std::vector<GenPhoton>>("genPhotons") : nullptr)
32  , recMuons(flow.GetBranchReadOnly<std::vector<RecMuon>>("recMuons"))
33  , recPhotons(flow.GetBranchReadOnly<std::vector<RecPhoton>>("recPhotons"))
34  , gEv(isMC ? flow.GetBranchReadOnly<GenEvent>("genEvent") : nullptr)
35  , rEv(flow.GetBranchReadOnly<RecEvent>("recEvent"))
36  {}
37 
38  // Unified GetBinNumber method for both Rec and Gen events (1D and 2D)
39  template<typename MUON, typename PHOTON>
40  int GetBinNumber(const TUnfoldBinning * binning, const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
41 
42  template<typename MUON, typename PHOTON>
43  int GetBinNumber2D(const TUnfoldBinning * binning, const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
44 
45  // Pure virtual getter for the observable
46  virtual const Observable* getObs() const = 0;
47 
48  // Virtual for dimension of the observable
49  virtual int getObsDimension() const { return 1; }
50 
51  // fillRec and fillMC use GetBinNumber and getObs
52  std::list<int> fillRec(DistVariation& v) override;
53  void match() override {}
54  void fillMC(DistVariation& v) override;
55 
56 protected:
57  // Virtual method for observable value calculation (1D and 2D)
58  virtual double computeObservableValue(const void* event, const Uncertainties::Variation& v, bool isGen) const {
59  return 0.0;
60  }
61  virtual std::vector<double> computeObservableValue2D(const void* event, const Uncertainties::Variation& v, bool isGen) const {
62  return {};
63  }
64 };
65 
66 // Binning
67 static const std::vector<double> recDrBins{0.05, 0.075, 0.1, 0.125, 0.15, 0.225, 0.3, 0.4, 0.5, 0.65, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0},
68  genDrBins{0.05, 0.1, 0.15, 0.3, 0.5, 0.8, 1.2, 1.6, 2.0, 3.0};
69 static const int nRecDrBins = recDrBins.size()-1,
70  nGenDrBins = genDrBins.size()-1;
71 
72 static const std::vector<double> recPtBins{5, 7.5, 10, 12.5, 15, 17.5, 20, 22.5, 25, 27.5, 30, 35, 40, 45, 50, 62, 75, 87, 100},
73  genPtBins{5, 10, 15, 20, 25, 30, 40, 50, 75, 100};
74 static const int nRecPtBins = recPtBins.size()-1,
75  nGenPtBins = genPtBins.size()-1;
76 
77 static const std::vector<double> recMassMMBins{30, 31.5, 33, 34.5, 36, 37.5, 39, 40.5, 42, 43.5, 45, 46.5, 48, 49.5, 51, 52.5, 54, 55.5, 57, 58.5, 60, 61.5, 63, 64.5, 66, 67.5, 69, 70.5, 72, 73.5, 75, 76.5, 78, 79.5, 81, 82.5, 84, 85.5, 87},
78  genMassMMBins{30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87};
79 static const int nRecMassMMBins = recMassMMBins.size()-1,
81 
82 static const std::vector<double> recMassMMGBins{30, 31.5, 33, 34.5, 36, 37.5, 39, 40.5, 42, 43.5, 45, 46.5, 48, 49.5, 51, 52.5, 54, 55.5, 57, 58.5, 60, 61.5, 63, 64.5, 66, 67.5, 69, 70.5, 72, 73.5, 75, 76.5, 78, 79.5, 81, 82.5, 84, 85.5, 87, 88.5, 90, 91.5, 93, 94.5, 96, 97.5, 99, 100.5, 102, 103.5, 105, 106.5, 108, 109.5, 111},
83  genMassMMGBins{30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111};
84 static const int nRecMassMMGBins = recMassMMGBins.size()-1,
86 
87 static const std::vector<double> recM2RatioBins{0.000, 0.250, 0.300, 0.350, 0.400, 0.450, 0.500, 0.550, 0.600, 0.650, 1.000},
88  genM2RatioBins{0.000, 0.300, 0.400, 0.500, 0.600, 1.000},
89  recMMuGamma2Bins{0.000, 0.025, 0.050, 0.075, 0.100, 0.125, 0.150, 0.175, 0.200, 0.225, 0.250, 0.275, 0.300, 0.325, 0.350, 0.375, 0.400, 0.425, 0.450, 0.475, 0.500},
90  genMMuGamma2Bins{0.000, 0.050, 0.100, 0.150, 0.200, 0.250, 0.300, 0.350, 0.400, 0.450, 0.500};
91 static const int nRecM2RatioBins = recM2RatioBins.size()-1,
95 
96 // Dr observable, filler and template helper for calculation
97 struct Dr final : public Observable {
98  Dr ();
99  std::unique_ptr<Filler> getFiller (Darwin::Tools::Flow&) const override;
100 };
101 struct DrFiller final : public ZmmYFiller {
102  const Dr& obs;
103  DrFiller (const Dr&, Darwin::Tools::Flow&);
104  double computeObservableValue(const void* event, const Uncertainties::Variation& v, bool isGen) const override;
105  const Observable* getObs() const override { return &obs; }
106 private:
107  template<typename MUON, typename PHOTON>
108  double computeDr(const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
109 };
110 
111 // Pt observable, filler and template helper for calculation
112 struct Pt final : public Observable {
113  Pt ();
114  std::unique_ptr<Filler> getFiller (Darwin::Tools::Flow&) const override;
115 };
116 struct PtFiller final : public ZmmYFiller {
117  const Pt& obs;
118  PtFiller (const Pt&, Darwin::Tools::Flow&);
119  double computeObservableValue(const void* event, const Uncertainties::Variation& v, bool isGen) const override;
120  const Observable* getObs() const override { return &obs; }
121 private:
122  template<typename MUON, typename PHOTON>
123  double computePt(const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
124 };
125 
126 // Mmm observable, filler and template helper for calculation
127 struct Mmm final : public Observable {
128  Mmm ();
129  std::unique_ptr<Filler> getFiller (Darwin::Tools::Flow&) const override;
130 };
131 struct MmmFiller final : public ZmmYFiller {
132  const Mmm& obs;
133  MmmFiller (const Mmm&, Darwin::Tools::Flow&);
134  double computeObservableValue(const void* event, const Uncertainties::Variation& v, bool isGen) const override;
135  const Observable* getObs() const override { return &obs; }
136 private:
137  template<typename MUON, typename PHOTON>
138  double computeMmm(const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
139 };
140 
141 // MmmY observable, filler and template helper for calculation
142 struct MmmY final : public Observable {
143  MmmY ();
144  std::unique_ptr<Filler> getFiller (Darwin::Tools::Flow&) const override;
145 };
146 struct MmmYFiller final : public ZmmYFiller {
147  const MmmY& obs;
149  double computeObservableValue(const void* event, const Uncertainties::Variation& v, bool isGen) const override;
150  const Observable* getObs() const override { return &obs; }
151 private:
152  template<typename MUON, typename PHOTON>
153  double computeMmmY(const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
154 };
155 
156 // Dalitz observable, filler and template helper for calculation
157 struct Dalitz final : public Observable {
158  Dalitz ();
159  std::unique_ptr<Filler> getFiller (Darwin::Tools::Flow&) const override;
160 };
161 struct DalitzFiller final : public ZmmYFiller {
162  const Dalitz& obs;
164  std::vector<double> computeObservableValue2D(const void* event, const Uncertainties::Variation& v, bool isGen) const override;
165  const Observable* getObs() const override { return &obs; }
166  int getObsDimension() const override { return 2; }
167 private:
168  template<typename MUON, typename PHOTON>
169  std::vector<double> computeDalitz(const EventInfo<MUON, PHOTON>& event, const Uncertainties::Variation& v) const;
170 };
171 
172 #endif
173 
174 } // end of DAS::Unfolding::ZmmY namespace
ZmmYCommon.h
DAS::Unfolding::ZmmY::ZmmYFiller::rInfo
EventInfo< RecMuon, RecPhoton > rInfo
Definition: ZmmY.h:21
DAS::Unfolding::ZmmY::PtFiller
Definition: ZmmY.h:116
DAS::Unfolding::ZmmY::DalitzFiller::getObs
const Observable * getObs() const override
Definition: ZmmY.h:165
DAS::Unfolding::ZmmY::recMMuGamma2Bins
static const std::vector< double > recMMuGamma2Bins
Definition: ZmmY.h:89
Darwin::Tools::Flow
User-friendly handling of input and output n-tuples.
Definition: Flow.h:80
DAS::Unfolding::ZmmY::ZmmYFiller::rEv
RecEvent * rEv
Definition: ZmmY.h:27
DAS::Unfolding::ZmmY::ZmmYFiller::fillMC
void fillMC(DistVariation &v) override
Fill RM, gen, miss, fake histograms for a given variation.
Definition: ZmmY.cc:53
DAS::Unfolding::ZmmY::recDrBins
static const std::vector< double > recDrBins
Definition: ZmmY.h:67
DAS::Unfolding::ZmmY::DalitzFiller
Definition: ZmmY.h:161
DAS::Unfolding::ZmmY::ZmmYFiller::recMuons
std::vector< RecMuon > * recMuons
Definition: ZmmY.h:23
DAS::Unfolding::ZmmY::Dalitz
Definition: ZmmY.h:157
DAS::Unfolding::ZmmY::Pt::Pt
Pt()
Definition: ZmmY.cc:114
DAS::Unfolding::ZmmY::ZmmYFiller::getObsDimension
virtual int getObsDimension() const
Definition: ZmmY.h:49
DAS::Unfolding::ZmmY::MmmY
Definition: ZmmY.h:142
DAS::Unfolding::ZmmY::DalitzFiller::getObsDimension
int getObsDimension() const override
Definition: ZmmY.h:166
DAS::Unfolding::ZmmY::ZmmYFiller::GetBinNumber2D
int GetBinNumber2D(const TUnfoldBinning *binning, const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:22
DAS::Unfolding::ZmmY::nRecMassMMBins
static const int nRecMassMMBins
Definition: ZmmY.h:79
DAS::RecEvent
Definition: Event.h:52
DAS::Unfolding::ZmmY::DrFiller::obs
const Dr & obs
Definition: ZmmY.h:102
Event.h
DAS::Unfolding::ZmmY::Dr
Definition: ZmmY.h:97
DAS::Unfolding::ZmmY::Dr::Dr
Dr()
Definition: ZmmY.cc:82
DAS::Unfolding::ZmmY::EventInfo
Definition: ZmmYCommon.h:28
DAS::Unfolding::ZmmY::MmmYFiller::MmmYFiller
MmmYFiller(const MmmY &, Darwin::Tools::Flow &)
Definition: ZmmY.cc:169
DAS::Unfolding::ZmmY::DrFiller::DrFiller
DrFiller(const Dr &, Darwin::Tools::Flow &)
Definition: ZmmY.cc:79
DAS::Unfolding::ZmmY::MmmFiller::MmmFiller
MmmFiller(const Mmm &, Darwin::Tools::Flow &)
Definition: ZmmY.cc:140
DAS::RecMuon
class RecMuon
Definition: Lepton.h:25
DAS::Unfolding::ZmmY::MmmYFiller::computeMmmY
double computeMmmY(const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:184
DAS::Unfolding::ZmmY::MmmYFiller::getObs
const Observable * getObs() const override
Definition: ZmmY.h:150
DAS::Unfolding::ZmmY::ZmmYFiller::GetBinNumber
int GetBinNumber(const TUnfoldBinning *binning, const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:16
DAS::Unfolding::ZmmY::MmmFiller::computeMmm
double computeMmm(const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:155
DAS::Unfolding::ZmmY::Dr::getFiller
std::unique_ptr< Filler > getFiller(Darwin::Tools::Flow &) const override
Constructs a filler for the observable. By default, a dummy filler is returned.
Definition: ZmmY.cc:88
DAS::Unfolding::ZmmY::ZmmYFiller::gEv
GenEvent * gEv
Definition: ZmmY.h:26
DAS::Unfolding::ZmmY::DrFiller::getObs
const Observable * getObs() const override
Definition: ZmmY.h:105
DAS::Unfolding::ZmmY::DalitzFiller::computeDalitz
std::vector< double > computeDalitz(const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:215
DAS::GenPhoton
class GenPhoton
Definition: Photon.h:13
DAS::Unfolding::ZmmY::ZmmYFiller::genPhotons
std::vector< GenPhoton > * genPhotons
Definition: ZmmY.h:24
DAS::Unfolding::ZmmY::MmmFiller::computeObservableValue
double computeObservableValue(const void *event, const Uncertainties::Variation &v, bool isGen) const override
Definition: ZmmY.cc:160
DAS::Unfolding::ZmmY::genMassMMGBins
static const std::vector< double > genMassMMGBins
Definition: ZmmY.h:83
DAS::Unfolding::DistVariation
Definition: DistVariation.h:25
DAS::GenMuon
class GenMuon
Definition: Lepton.h:9
DAS::Unfolding::Filler
Definition: Observable.h:31
DAS::Unfolding::ZmmY::DalitzFiller::DalitzFiller
DalitzFiller(const Dalitz &, Darwin::Tools::Flow &)
Definition: ZmmY.cc:198
DAS::Unfolding::ZmmY::nGenPtBins
static const int nGenPtBins
Definition: ZmmY.h:75
DAS::Unfolding::ZmmY::genPtBins
static const std::vector< double > genPtBins
Definition: ZmmY.h:73
DAS::Unfolding::ZmmY::PtFiller::obs
const Pt & obs
Definition: ZmmY.h:117
DAS::Unfolding::ZmmY::ZmmYFiller::getObs
virtual const Observable * getObs() const =0
DAS::Unfolding::ZmmY::genMMuGamma2Bins
static const std::vector< double > genMMuGamma2Bins
Definition: ZmmY.h:90
DAS::Unfolding::ZmmY::MmmFiller
Definition: ZmmY.h:131
DAS::Unfolding::ZmmY::Mmm
Definition: ZmmY.h:127
DAS::Unfolding::ZmmY::MmmY::getFiller
std::unique_ptr< Filler > getFiller(Darwin::Tools::Flow &) const override
Constructs a filler for the observable. By default, a dummy filler is returned.
Definition: ZmmY.cc:178
DAS::Unfolding::ZmmY::Dalitz::Dalitz
Dalitz()
Definition: ZmmY.cc:201
DAS::Unfolding::ZmmY::nGenMMuGamma2Bins
static const int nGenMMuGamma2Bins
Definition: ZmmY.h:94
DAS::Unfolding::ZmmY::Mmm::getFiller
std::unique_ptr< Filler > getFiller(Darwin::Tools::Flow &) const override
Constructs a filler for the observable. By default, a dummy filler is returned.
Definition: ZmmY.cc:149
DAS::Unfolding::ZmmY::PtFiller::computeObservableValue
double computeObservableValue(const void *event, const Uncertainties::Variation &v, bool isGen) const override
Definition: ZmmY.cc:131
DAS::Unfolding::ZmmY::nGenDrBins
static const int nGenDrBins
Definition: ZmmY.h:70
DAS::Unfolding::ZmmY::genM2RatioBins
static const std::vector< double > genM2RatioBins
Definition: ZmmY.h:88
DAS::Unfolding::ZmmY::MmmFiller::obs
const Mmm & obs
Definition: ZmmY.h:132
DAS::Unfolding::ZmmY::recPtBins
static const std::vector< double > recPtBins
Definition: ZmmY.h:72
DAS::Unfolding::ZmmY
Definition: BF.h:14
Observable.h
DAS::Unfolding::ZmmY::Pt
Definition: ZmmY.h:112
DAS::Unfolding::ZmmY::ZmmYFiller::fillRec
std::list< int > fillRec(DistVariation &v) override
Definition: ZmmY.cc:38
DAS::Unfolding::ZmmY::ZmmYFiller::match
void match() override
Implementation of matching algorithm.
Definition: ZmmY.h:53
DAS::Unfolding::ZmmY::nGenMassMMGBins
static const int nGenMassMMGBins
Definition: ZmmY.h:85
DAS::Unfolding::ZmmY::ZmmYFiller::genMuons
std::vector< GenMuon > * genMuons
Definition: ZmmY.h:22
DAS::Unfolding::ZmmY::recMassMMGBins
static const std::vector< double > recMassMMGBins
Definition: ZmmY.h:82
DAS::Unfolding::ZmmY::recMassMMBins
static const std::vector< double > recMassMMBins
Definition: ZmmY.h:77
DAS::Unfolding::ZmmY::MmmYFiller::obs
const MmmY & obs
Definition: ZmmY.h:147
DAS::Unfolding::ZmmY::ZmmYFiller::computeObservableValue2D
virtual std::vector< double > computeObservableValue2D(const void *event, const Uncertainties::Variation &v, bool isGen) const
Definition: ZmmY.h:61
Photon.h
DAS::Unfolding::ZmmY::DrFiller::computeDr
double computeDr(const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:94
DAS::Unfolding::ZmmY::nGenM2RatioBins
static const int nGenM2RatioBins
Definition: ZmmY.h:92
DAS::Unfolding::ZmmY::MmmYFiller
Definition: ZmmY.h:146
Ntupliser_cfg.isMC
dictionary isMC
Definition: Ntupliser_cfg.py:62
DAS::Unfolding::ZmmY::recM2RatioBins
static const std::vector< double > recM2RatioBins
Definition: ZmmY.h:87
DAS::Unfolding::ZmmY::Pt::getFiller
std::unique_ptr< Filler > getFiller(Darwin::Tools::Flow &) const override
Constructs a filler for the observable. By default, a dummy filler is returned.
Definition: ZmmY.cc:120
DAS::Unfolding::ZmmY::Dalitz::getFiller
std::unique_ptr< Filler > getFiller(Darwin::Tools::Flow &) const override
Constructs a filler for the observable. By default, a dummy filler is returned.
Definition: ZmmY.cc:209
DAS::Unfolding::ZmmY::MmmY::MmmY
MmmY()
Definition: ZmmY.cc:172
DAS::Unfolding::ZmmY::genDrBins
static const std::vector< double > genDrBins
Definition: ZmmY.h:68
DAS::Unfolding::ZmmY::nRecM2RatioBins
static const int nRecM2RatioBins
Definition: ZmmY.h:91
DAS::Unfolding::ZmmY::Mmm::Mmm
Mmm()
Definition: ZmmY.cc:143
DAS::Unfolding::ZmmY::DalitzFiller::computeObservableValue2D
std::vector< double > computeObservableValue2D(const void *event, const Uncertainties::Variation &v, bool isGen) const override
Definition: ZmmY.cc:226
DAS::Unfolding::ZmmY::ZmmYFiller
Definition: ZmmY.h:19
DAS::Unfolding::ZmmY::nRecDrBins
static const int nRecDrBins
Definition: ZmmY.h:69
Lepton.h
DAS::Unfolding::ZmmY::nRecMassMMGBins
static const int nRecMassMMGBins
Definition: ZmmY.h:84
DAS::Unfolding::ZmmY::DalitzFiller::obs
const Dalitz & obs
Definition: ZmmY.h:162
DAS::Unfolding::Observable
Definition: Observable.h:117
DAS::Unfolding::ZmmY::PtFiller::getObs
const Observable * getObs() const override
Definition: ZmmY.h:120
DAS::Unfolding::ZmmY::ZmmYFiller::ZmmYFiller
ZmmYFiller(Darwin::Tools::Flow &flow, bool isMC)
Definition: ZmmY.h:29
DAS::Unfolding::ZmmY::PtFiller::PtFiller
PtFiller(const Pt &, Darwin::Tools::Flow &)
Definition: ZmmY.cc:111
DAS::Unfolding::ZmmY::ZmmYFiller::recPhotons
std::vector< RecPhoton > * recPhotons
Definition: ZmmY.h:25
DAS::Uncertainties::Variation
Definition: Variation.h:22
DAS::Unfolding::ZmmY::nRecMMuGamma2Bins
static const int nRecMMuGamma2Bins
Definition: ZmmY.h:93
DAS::Unfolding::ZmmY::nGenMassMMBins
static const int nGenMassMMBins
Definition: ZmmY.h:80
DAS::Unfolding::ZmmY::MmmFiller::getObs
const Observable * getObs() const override
Definition: ZmmY.h:135
DAS::RecPhoton
class RecPhoton
Definition: Photon.h:27
DAS::Unfolding::ZmmY::ZmmYFiller::computeObservableValue
virtual double computeObservableValue(const void *event, const Uncertainties::Variation &v, bool isGen) const
Definition: ZmmY.h:58
DAS::Unfolding::ZmmY::DrFiller
Definition: ZmmY.h:101
DAS::Unfolding::ZmmY::MmmYFiller::computeObservableValue
double computeObservableValue(const void *event, const Uncertainties::Variation &v, bool isGen) const override
Definition: ZmmY.cc:189
DAS::Unfolding::ZmmY::nRecPtBins
static const int nRecPtBins
Definition: ZmmY.h:74
DAS::Unfolding::ZmmY::genMassMMBins
static const std::vector< double > genMassMMBins
Definition: ZmmY.h:78
DAS::Unfolding::ZmmY::DrFiller::computeObservableValue
double computeObservableValue(const void *event, const Uncertainties::Variation &v, bool isGen) const override
Definition: ZmmY.cc:102
DAS::GenEvent
Definition: Event.h:38
DAS::Unfolding::ZmmY::PtFiller::computePt
double computePt(const EventInfo< MUON, PHOTON > &event, const Uncertainties::Variation &v) const
Definition: ZmmY.cc:126