Rivet analyses


title: ALEPH_2016_I1492968

Dimuon invariant mass in OS and SS channel.

Experiment: ALEPH (LEP)

Inspire ID: 1492968

Status: UNVALIDATED

Authors: - Arno Heister

References: none listed

Beams: e+ e-

Beam energies: (45.6, 45.6)GeV

Run details: - Z to bbar events, 1M events when running Z to bbar inclusively.

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

```c++ // -- C++ --

include "Rivet/Analysis.hh"

include "Rivet/Projections/FastJets.hh"

include "Rivet/Projections/FinalState.hh"

include "Rivet/Projections/IdentifiedFinalState.hh"

include "Rivet/Projections/MissingMomentum.hh"

namespace Rivet {

// TODO this calculation needs checked! double impact(const FourMomentum& a, const FourMomentum& b) { const Vector3 a3 = a.vector3(); const Vector3 b3 = b.vector3();

double impact = 0;
if (b3.polarRadius() != 0) {
  impact = (a3).cross((a3 - b3)).polarRadius() / (b3).polarRadius();
}
return impact;

}

/// @brief Add a short analysis description here class ALEPH_2016_I1492968 : public Analysis { public:

/// Constructor
RIVET_DEFAULT_ANALYSIS_CTOR(ALEPH_2016_I1492968);


/// @name Analysis methods
/// @{

/// Book histograms and initialise projections before the run
void init() {

  // Initialise and register projections
  const FinalState fs;
  declare(fs, "FS");

  FastJets jets(fs, JetAlg::GENKTEE, 0.5, JetMuons::NONE, JetInvisibles::ALL);
  //FastJets jets(fs, JetAlg::ANTIKT, 0.5, JetMuons::NONE, JetInvisibles::ALL);
  declare(jets, "Jets");

  IdentifiedFinalState mu_id(fs);
  mu_id.acceptIdPair(PID::MUON);
  declare(mu_id, "MUONS");

  declare(MissingMomentum(fs), "MissingMomenta");
  // Book histograms
  //_h_costheta = bookHisto1D(2, 1, 1);
  book(_h_m_OS, 3, 1, 1);
  book(_h_m_SS, 5, 1, 1);
}


/// Perform the per-event analysis
void analyze(const Event& event) {

  // B-jets
  const Jets jets = apply<JetFinder>(event, "Jets").jetsByPt(Cuts::pT > 5 * GeV); // tODO jet eta?
  const Jets bjets = select(jets, [](const Jet& j) { return j.bTagged(); });
  if (bjets.size() < 2) vetoEvent;

  // Muons
  const Particles all_muons = apply<IdentifiedFinalState>(event, "MUONS")
                                  .particles(Cuts::pT > 2.5 / GeV, cmpMomByE);
  const Particles b_muons = select(all_muons, [](const Particle& m) { return cos(m.theta()) < 0.7; });
  if (b_muons.size() < 2) vetoEvent;

  // Missing energy cut
  const MissingMomentum& met = apply<MissingMomentum>(event, "MissingMomenta");
  double Pmiss = met.missingMomentum().p();
  if (Pmiss / GeV > 18) vetoEvent;

  // Impact paarameter considerations
  double b_muon_0_impactdistance = min(impact(b_muons[0].origin(), bjets[0].momentum()),
                                       impact(b_muons[0].origin(), bjets[1].momentum()));
  double b_muon_1_impactdistance = min(impact(b_muons[1].origin(), bjets[0].momentum()),
                                       impact(b_muons[1].origin(), bjets[1].momentum()));

  // Impact parameter cut
  if ((b_muon_0_impactdistance > 0.1) || (b_muon_1_impactdistance > 0.1)) vetoEvent;

  FourMomentum dimuon = b_muons[0].momentum() + b_muons[1].momentum();

  // Same sign
  if (b_muons[0].charge() * b_muons[1].charge() > 0) {
    _h_m_SS->fill(dimuon.mass() / GeV);
  }
  // Opposite sign
  else {
    _h_m_OS->fill(dimuon.mass() / GeV);
    //
    //FourMomentum muonminus;
    //if (b_muons[0].charge() < 0)  muonminus = b_muons[0].momentum();
    //else muonminus = b_muons[1].momentum();

    //const LorentzTransform cms_boost = LorentzTransform::mkFrameTransformFromBeta(-dimuon.betaVec());
    //FourMomentum boostedmuon = cms_boost.transform(muonminus);

    //double cosmuonboosted = boostedmuon.vector3().dot(cms_boost.betaVec())
    /// (boostedmuon.vector3().mod()*cms_boost.betaVec().mod());

    //_h_costheta->fill( cosmuonboosted);
  }
}


/// Normalise histograms etc., after the run
void finalize() {

  //normalize(_h_costheta);

  // Normalize to data according to Arno.
  normalize(_h_m_OS, 1387);
  normalize(_h_m_SS, 1047);
}

/// @}


/// @name Histograms
/// @{
//Histo1DPtr _h_costheta;
Histo1DPtr _h_m_OS;
Histo1DPtr _h_m_SS;
/// @}

};

RIVET_DECLARE_PLUGIN(ALEPH_2016_I1492968);

} ```