Rivet analyses referenceALEPH_2016_I1492968Dimuon invariant mass in OS and SS channel.Experiment: ALEPH (LEP) Inspire ID: 1492968 Status: UNVALIDATED Authors:
Beams: e+ e- Beam energies: (45.6, 45.6) GeV Run details:
Measurement of the dimuon invariant mass (OS and SS) and related quantities in Z to bbar events with ALEPH archived data. Source code: ALEPH_2016_I1492968.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/FastJets.hh"
5#include "Rivet/Projections/IdentifiedFinalState.hh"
6#include "Rivet/Projections/MissingMomentum.hh"
7
8namespace Rivet {
9
10 // TODO this calculation needs checked!
11 double impact(const FourMomentum& a, const FourMomentum& b) {
12 const Vector3 a3 = a.vector3();
13 const Vector3 b3 = b.vector3();
14
15 double impact = 0;
16 if (b3.polarRadius() !=0) {
17 impact = (a3).cross((a3-b3)).polarRadius() / (b3).polarRadius();
18 }
19 return impact;
20 }
21
22 /// @brief Add a short analysis description here
23 class ALEPH_2016_I1492968 : public Analysis {
24 public:
25
26 /// Constructor
27 RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_2016_I1492968);
28
29
30 /// @name Analysis methods
31 /// @{
32
33 /// Book histograms and initialise projections before the run
34 void init() {
35
36 // Initialise and register projections
37 const FinalState fs;
38 declare(fs, "FS");
39
40 FastJets jets(fs, JetAlg::GENKTEE, 0.5, JetMuons::NONE, JetInvisibles::ALL);
41 //FastJets jets(fs, JetAlg::ANTIKT, 0.5, JetMuons::NONE, JetInvisibles::ALL);
42 declare(jets, "Jets");
43
44 IdentifiedFinalState mu_id(fs);
45 mu_id.acceptIdPair(PID::MUON);
46 declare(mu_id, "MUONS");
47
48 declare(MissingMomentum(fs), "MissingMomenta");
49 // Book histograms
50 //_h_costheta = bookHisto1D(2, 1, 1);
51 book(_h_m_OS, 3, 1, 1);
52 book(_h_m_SS, 5, 1, 1);
53
54 }
55
56
57 /// Perform the per-event analysis
58 void analyze(const Event& event) {
59
60 // B-jets
61 const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::pT > 5*GeV); // tODO jet eta?
62 const Jets bjets = select(jets, [](const Jet& j) { return j.bTagged(); });
63 if (bjets.size()<2) vetoEvent;
64
65 // Muons
66 const Particles all_muons = apply<IdentifiedFinalState>(event, "MUONS").particles(Cuts::pT>2.5/GeV, cmpMomByE);
67 const Particles b_muons = select(all_muons, [](const Particle& m) {return cos(m.theta()) < 0.7; });
68 if (b_muons.size()<2) vetoEvent;
69
70 // Missing energy cut
71 const MissingMomentum& met = apply<MissingMomentum>(event, "MissingMomenta");
72 double Pmiss = met.missingMomentum().p();
73 if (Pmiss/GeV>18) vetoEvent;
74
75 // Impact paarameter considerations
76 double b_muon_0_impactdistance = min(impact(b_muons[0].origin(), bjets[0].momentum()),impact(b_muons[0].origin(), bjets[1].momentum()));
77 double b_muon_1_impactdistance = min(impact(b_muons[1].origin(), bjets[0].momentum()),impact(b_muons[1].origin(), bjets[1].momentum()));
78
79 // Impact parameter cut
80 if ((b_muon_0_impactdistance > 0.1) || (b_muon_1_impactdistance > 0.1)) vetoEvent;
81
82 FourMomentum dimuon = b_muons[0].momentum() + b_muons[1].momentum();
83
84 // Same sign
85 if (b_muons[0].charge()*b_muons[1].charge()>0) {
86 _h_m_SS->fill( dimuon.mass()/GeV);
87 }
88 // Opposite sign
89 else {
90 _h_m_OS->fill( dimuon.mass()/GeV);
91 //
92 //FourMomentum muonminus;
93 //if (b_muons[0].charge() < 0) muonminus = b_muons[0].momentum();
94 //else muonminus = b_muons[1].momentum();
95
96 //const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(-dimuon.betaVec());
97 //FourMomentum boostedmuon = cms_boost.transform(muonminus);
98
99 //double cosmuonboosted = boostedmuon.vector3().dot(cms_boost.betaVec())
100 /// (boostedmuon.vector3().mod()*cms_boost.betaVec().mod());
101
102 //_h_costheta->fill( cosmuonboosted);
103 }
104 }
105
106
107 /// Normalise histograms etc., after the run
108 void finalize() {
109
110 //normalize(_h_costheta);
111
112 // Normalize to data according to Arno.
113 normalize(_h_m_OS, 1387);
114 normalize(_h_m_SS, 1047);
115
116 }
117
118 /// @}
119
120
121 /// @name Histograms
122 /// @{
123 //Histo1DPtr _h_costheta;
124 Histo1DPtr _h_m_OS;
125 Histo1DPtr _h_m_SS;
126 /// @}
127
128
129 };
130
131
132 RIVET_DECLARE_PLUGIN(ALEPH_2016_I1492968);
133
134
135}
|