Rivet Analyses Reference

ATLAS_2011_S9002537

Muon charge asymmetry in W events at 7 TeV in ATLAS
Experiment: ATLAS (LHC)
Inspire ID: 892704
Status: VALIDATED
Authors:
  • Frank Krauss
  • Hendrik Hoeth
References:Beams: p+ p+
Beam energies: (3500.0, 3500.0) GeV
Run details:
  • $W \to \mu\nu$ events at 7 TeV

Measurement of the muon charge asymmetry from W bosons produced in proton-proton collisions at a centre-of-mass energy of 7 TeV with ATLAS. The asymmetry is measured in the $W \to \mu$ decay mode as a function of the muon pseudorapidity using a data sample corresponding to a total integrated luminosity of 31 pb$^{-1}$.

Source code: ATLAS_2011_S9002537.cc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// -*- C++ -*-
#include "Rivet/Analysis.hh"
#include "Rivet/Projections/IdentifiedFinalState.hh"
#include "Rivet/Projections/ChargedFinalState.hh"
#include "Rivet/Projections/MissingMomentum.hh"
#include "Rivet/Projections/FinalState.hh"

namespace Rivet {


  /// Muon charge asymmetry in W events at 7 TeV in ATLAS
  class ATLAS_2011_S9002537 : public Analysis {
  public:

    RIVET_DEFAULT_ANALYSIS_CTOR(ATLAS_2011_S9002537);


    void init() {
      IdentifiedFinalState Muons(Cuts::abseta < 2.4 && Cuts::pT > 20*GeV);
      Muons.acceptIdPair(PID::MUON);
      declare(Muons, "muons");

      ChargedFinalState CFS(Cuts::abseta < 2.8);
      declare(CFS, "tracks");

      MissingMomentum missmom(FinalState(Cuts::abseta < 5));
      declare(missmom, "MissingMomentum");

      /// @todo Will need to register TMP histograms for future histogramming
      book(_tmp_h_plus, "TMP/plus", refData(1,1,1));
      book(_tmp_h_minus, "TMP/minus", refData(1,1,1));
      book(_h_asym, 1, 1, 1);
    }


    void analyze(const Event& event) {

      const IdentifiedFinalState& muons = apply<IdentifiedFinalState>(event, "muons");
      if (muons.size() < 1) vetoEvent;
      const ChargedFinalState& tracks = apply<ChargedFinalState>(event, "tracks");

      Particles selected_muons;
      for (Particle muon : muons.particles()) {
        FourMomentum testmom = muon.momentum();
        double ptmu(testmom.pT()), ptsum(-ptmu), ratio(0.);
        for (Particle track : tracks.particles()) {
          const FourMomentum& trackmom = track.momentum();
          if (deltaR(testmom, trackmom) < 0.4) {
            ptsum += trackmom.pT();
            ratio  = ptsum/ptmu;
            if (ratio > 0.2) break;
          }
        }
        if (ratio < 0.2) selected_muons.push_back(muon);
      }
      if (selected_muons.size() < 1) vetoEvent;

      const FourMomentum muonmom = selected_muons[0].momentum();
      const MissingMomentum& missmom = apply<MissingMomentum>(event, "MissingMomentum");
      FourMomentum missvec = -missmom.visibleMomentum();
      if (fabs(missvec.Et()) < 25*GeV) vetoEvent;

      double MTW = sqrt( 2 * missvec.pT() * muonmom.pT() * (1 - cos( deltaPhi(missvec.phi(), muonmom.phi()) )) );
      if (MTW < 40*GeV) vetoEvent;

      Histo1DPtr & htmp = (selected_muons[0].pid() > 0) ? _tmp_h_minus : _tmp_h_plus;
      htmp->fill(muonmom.eta());
    }


    /// Normalise histograms etc., after the run
    void finalize() {
      assert(_tmp_h_plus->numBins() == _tmp_h_minus->numBins());
      for (size_t i = 0; i < _tmp_h_plus->numBins(); ++i) {
        const double num   = _tmp_h_plus->bin(i).sumW() - _tmp_h_minus->bin(i).sumW();
        const double denom = _tmp_h_plus->bin(i).sumW() + _tmp_h_minus->bin(i).sumW();
        const double relerr = _tmp_h_plus->bin(i).relErr()  + _tmp_h_minus->bin(i).relErr();
        const double asym = (num != 0 && denom != 0) ? num / denom : 0;
        const double asym_err = (num != 0 && denom != 0) ? asym*relerr : 0;
        _h_asym->addPoint(_tmp_h_plus->bin(i).xMid(), asym, _tmp_h_plus->bin(i).xWidth()/2.0, asym_err);
      }
    }


  private:

    Scatter2DPtr _h_asym;
    /// @todo Will need to register TMP histograms for future histogramming
    Histo1DPtr  _tmp_h_plus, _tmp_h_minus;

  };


  RIVET_DECLARE_ALIASED_PLUGIN(ATLAS_2011_S9002537, ATLAS_2011_I892704);

}