rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

MC_DILEPTON

Charged dilepton kinematic distributions sensitive to boson polarisation
Experiment: ()
Status: VALIDATED
Authors:
  • Andy Buckley
No references listed
Beams: * *
Beam energies: ANY
Run details:
  • Any event type that produces prompt charged lepton pairs.

Finds two charged leptons ($e$ or $\mu$) and plots their basic kinematics in the lab frame and in their centre-of-mass frame. Observables of the lepton momentum components parallel and perpendicular to the CoM boost direction are particularly sensitive to the polarisation state of a decaying vector boson.

Source code: MC_DILEPTON.cc
  1// -*- C++ -*-
  2#include "Rivet/Analysis.hh"
  3#include "Rivet/Projections/PromptFinalState.hh"
  4
  5namespace Rivet {
  6
  7
  8  /// @brief Study of prompt dilepton kinematics sensitive to boson polarizations
  9  class MC_DILEPTON : public Analysis {
 10  public:
 11
 12    /// Constructor
 13    RIVET_DEFAULT_ANALYSIS_CTOR(MC_DILEPTON);
 14
 15
 16    /// @name Analysis methods
 17    //@{
 18
 19    /// Book histograms and initialise projections before the run
 20    void init() {
 21
 22      // Initialise and register projections
 23      declare(PromptFinalState((Cuts::abspid == PID::ELECTRON || Cuts::abspid == PID::MUON)
 24                               && Cuts::abseta < 5 && Cuts::pT > 10*GeV), "Leptons");
 25
 26      // Book histograms
 27      book(_h_pt_l1, "lep1_pt", logspace(40, 10, 400));
 28      book(_h_costheta_l1, "lep1_costheta", linspace(25, -1, 1));
 29      book(_h_ppara_l1, "lep1_ppara", linspace(40, -50, 350));
 30      book(_h_pperp_l1, "lep1_pperp", linspace(25, 0, 100));
 31      //
 32      book(_h_pt_l2, "lep2_pt", logspace(40, 10, 400));
 33      book(_h_costheta_l2, "lep2_costheta", linspace(25, -1, 1));
 34      book(_h_ppara_l2, "lep2_ppara", linspace(40, -50, 350));
 35      book(_h_pperp_l2, "lep2_pperp", linspace(25, 0, 100));
 36      //
 37      book(_h_costheta_com_l1, "com_costheta_l1", linspace(25, -1, 1));
 38      book(_h_costheta_com_l2, "com_costheta_l2", linspace(25, -1, 1));
 39      book(_h_ppara_com_l1, "com_ppara_l1", linspace(25, -50, 50));
 40      book(_h_ppara_com_l2, "com_ppara_l2", linspace(25, -50, 50));
 41      //
 42      book(_h_costheta_com, "com_costheta", linspace(25, -1, 1));
 43      book(_h_ppara_com, "com_ppara", linspace(25, -50, 50));
 44      book(_h_pperp_com, "com_pperp", linspace(25, 0, 100));
 45
 46    }
 47
 48
 49    /// Perform the per-event analysis
 50    void analyze(const Event& event) {
 51      const Particles& leptons = apply<FinalState>(event, "Leptons").particlesByPt();
 52      if (leptons.size() != 2) vetoEvent;
 53      const Particle& l1 = leptons[0];
 54      const Particle& l2 = leptons[1];
 55      _h_pt_l1->fill(l1.pT()/GeV);
 56      _h_pt_l2->fill(l2.pT()/GeV);
 57
 58      const FourMomentum pcom = l1.mom() + l2.mom();
 59      const Vector3 betacom = pcom.betaVec();
 60      const Vector3 unitboostvec = betacom.unit();
 61      const LorentzTransform comboost = LorentzTransform::mkFrameTransformFromBeta(betacom);
 62
 63      const double l1_costheta = cos(l1.p3().angle(unitboostvec));
 64      const double l1_ppara = l2.p3().dot(unitboostvec);
 65      const double l1_pperp = l2.p3().cross(unitboostvec).mod();
 66      _h_costheta_l1->fill(l1_costheta);
 67      _h_ppara_l1->fill(l1_ppara);
 68      _h_pperp_l1->fill(l1_pperp);
 69
 70      const double l2_costheta = cos(l2.p3().angle(unitboostvec));
 71      const double l2_ppara = l2.p3().dot(unitboostvec);
 72      const double l2_pperp = l2.p3().cross(unitboostvec).mod();
 73      _h_costheta_l2->fill(l2_costheta);
 74      _h_ppara_l2->fill(l2_ppara);
 75      _h_pperp_l2->fill(l2_pperp);
 76
 77      const FourMomentum p1com = comboost.transform(l1.mom());
 78      const FourMomentum p2com = comboost.transform(l2.mom());
 79      const double com_costheta1 = cos(p1com.p3().angle(unitboostvec));
 80      const double com_costheta2 = cos(p2com.p3().angle(unitboostvec));
 81      MSG_DEBUG("CoM cos(th)s: " << com_costheta1 << ", " << com_costheta2);
 82      // assert(com_costheta1 == com_costheta2 && "CoM cos(th)s differ");
 83      const double com_ppara1 = p1com.p3().dot(unitboostvec);
 84      const double com_ppara2 = p2com.p3().dot(unitboostvec);
 85      MSG_DEBUG("CoM p_paras: " << com_ppara1 << ", " << com_ppara2);
 86      // assert(com_ppara1 == com_ppara2 && "CoM p_paras differ");
 87      const double com_pperp1 = p1com.p3().cross(unitboostvec).mod();
 88      const double com_pperp2 = p2com.p3().cross(unitboostvec).mod();
 89      MSG_DEBUG("CoM p_pperps: " << com_pperp1 << ", " << com_pperp2);
 90      // assert(com_pperp1 == com_pperp2 && "CoM p_perps differ");
 91      _h_costheta_com_l1->fill(com_costheta1);
 92      _h_costheta_com_l2->fill(com_costheta2);
 93      _h_costheta_com->fill(com_costheta1, 0.5);
 94      _h_costheta_com->fill(com_costheta2, 0.5);
 95      _h_ppara_com_l1->fill(com_ppara1);
 96      _h_ppara_com_l2->fill(com_ppara2);
 97      _h_ppara_com->fill(com_ppara1, 0.5);
 98      _h_ppara_com->fill(com_ppara2, 0.5);
 99      _h_pperp_com->fill(com_pperp1);
100    }
101
102
103    /// Normalise histograms etc., after the run
104    void finalize() {
105      normalize(_h_pt_l1); normalize(_h_pt_l2); normalize(_h_ppara_com); 
106      normalize(_h_pperp_com); normalize(_h_costheta_com); normalize(_h_ppara_com_l1); 
107      normalize(_h_ppara_com_l2); normalize(_h_costheta_com_l1); normalize(_h_costheta_com_l2);
108      normalize(_h_ppara_l1); normalize(_h_pperp_l1); normalize(_h_costheta_l1);
109      normalize(_h_ppara_l2); normalize(_h_pperp_l2); normalize(_h_costheta_l2);
110    }
111
112    //@}
113
114
115    /// @name Histograms
116    //@{
117    Histo1DPtr _h_pt_l1, _h_pt_l2;
118    Histo1DPtr _h_ppara_com, _h_pperp_com, _h_costheta_com;
119    Histo1DPtr _h_ppara_com_l1, _h_ppara_com_l2, _h_costheta_com_l1, _h_costheta_com_l2;
120    Histo1DPtr _h_ppara_l1, _h_pperp_l1, _h_costheta_l1;
121    Histo1DPtr _h_ppara_l2, _h_pperp_l2, _h_costheta_l2;
122    //@}
123
124
125  };
126
127
128  // The hook for the plugin system
129  RIVET_DECLARE_PLUGIN(MC_DILEPTON);
130
131
132}