Rivet analyses referenceATLAS_2014_I1282441The differential production cross section of the $\phi(1020)$ meson in $\sqrt{s}=7$ TeV $pp$ collisions measured with the ATLAS detectorExperiment: ATLAS (LHC) Inspire ID: 1282441 Status: VALIDATED Authors:
Beam energies: (3500.0, 3500.0) GeV Run details:
A measurement is presented of the $\phi \rightarrow K^+K^-$ production cross section at $\sqrt{s}$ = 7 TeV using pp collision data corresponding to an integrated luminosity of 383 $\mu$b$^{-1}$ collected with the ATLAS experiment at the LHC. Selection of $\phi(1020)$ mesons is based on the identification of charged kaons by their energy loss in the pixel detector. The differential cross section is measured as a function of the transverse momentum, $pT,\phi$, and rapidity, $y_\phi$, of the $\phi(1020)$ meson in the fiducial region 500 < $pT,\phi$ < 1200 MeV, |$y_\phi$| < 0.8, kaon $pT,K$ > 230 MeV and kaon momentum $p_K$ < 800 MeV. The integrated $\phi(1020)$ production cross section in this fiducial range is measured to be $\sigma_{\phi \rightarrow K^+K^-}$ = 570 \pm 8 (stat) \pm 66 (syst) \pm 20 (lumi) $\mu$b. Source code: ATLAS_2014_I1282441.cc 1// -*- C++ -*-
2#include "Rivet/Analysis.hh"
3#include "Rivet/Projections/FinalState.hh"
4#include "Rivet/Projections/UnstableParticles.hh"
5#include "Rivet/Projections/IdentifiedFinalState.hh"
6
7namespace Rivet {
8
9
10 class ATLAS_2014_I1282441 : public Analysis {
11 public:
12
13 ATLAS_2014_I1282441()
14 : Analysis("ATLAS_2014_I1282441")
15 { }
16
17
18 void init() {
19
20 // Use a large eta range such that we can discriminate on y
21 /// @todo Convert to use a y-cut directly
22 UnstableParticles ufs(Cuts::abseta < 10 && Cuts::pT > 500*MeV);
23 IdentifiedFinalState phis(ufs);
24 phis.acceptIdPair(PID::PHI);
25 declare(phis, "Phis");
26
27 IdentifiedFinalState kpms(Cuts::abseta < 2.0 && Cuts::pT > 230*MeV);
28 kpms.acceptIdPair(PID::KPLUS);
29 declare(kpms, "Kpms");
30
31 book(_h_phi_pT ,1,1,1);
32 book(_h_phi_rapidity ,2,1,1);
33 }
34
35
36 void analyze(const Event& event) {
37 const Particles& ks_all = apply<IdentifiedFinalState>(event, "Kpms").particles();
38 Particles kp, km;
39 for (const Particle& p : ks_all) {
40 if (!p.hasAncestorWith(Cuts::pid == PID::PHI)) { MSG_DEBUG("-- K not from phi."); continue; }
41 if (p.p3().mod() > 800*MeV) { MSG_DEBUG("-- p K too high."); continue; }
42 (p.charge() > 0 ? kp : km).push_back(p);
43 }
44
45 const Particles& phis_all = apply<FinalState>(event, "Phis").particles();
46 Particles phis;
47 /// @todo Use particles(Cuts&) instead
48 for (const Particle& p : phis_all) {
49 if ( p.absrap() > 0.8 ) { MSG_DEBUG("-- phi Y too high."); continue; }
50 if ( p.pT() > 1.2*GeV ) { MSG_DEBUG("-- phi pT too high."); continue; }
51 phis.push_back(p);
52 }
53
54 // Find Phi -> KK decays through matching of the kinematics
55 if (!kp.empty() && !km.empty() && !phis.empty()) {
56 MSG_DEBUG("Numbers of particles: #phi=" << phis.size() << ", #K+=" << kp.size() << ", #K-=" << km.size());
57 for (size_t ip = 0; ip < phis.size(); ++ip) {
58 const Particle& phi = phis[ip];
59 for (size_t ikm = 0; ikm < km.size(); ++ikm) {
60 for (size_t ikp = 0; ikp < kp.size(); ++ikp) {
61 const FourMomentum mom = kp[ikp].mom() + km[ikm].mom();
62 if ( fuzzyEquals(mom.mass(), phi.mass(), 1e-5) ) {
63 MSG_DEBUG("Accepted combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm);
64 _h_phi_rapidity->fill(phi.absrap());
65 _h_phi_pT->fill(phi.pT()/MeV);
66 } else {
67 MSG_DEBUG("Rejected combinatoric: phi#:" << ip << " K+#:" << ikp << " K-#:" << ikm << " Mass difference is " << mom.mass()-phi.mass());
68 }
69 }
70 }
71 }
72 }
73
74 }
75
76
77 void finalize() {
78 scale(_h_phi_rapidity, crossSection()/millibarn/sumOfWeights());
79 scale(_h_phi_pT, crossSection()/microbarn/sumOfWeights());
80 }
81
82
83 private:
84
85 Histo1DPtr _h_phi_rapidity, _h_phi_pT;
86
87 };
88
89
90 RIVET_DECLARE_PLUGIN(ATLAS_2014_I1282441);
91
92}
|