~ubuntu-branches/ubuntu/saucy/rivet/saucy-proposed

« back to all changes in this revision

Viewing changes to src/Analyses/CDF_2012_NOTE10874.cc

  • Committer: Package Import Robot
  • Author(s): Lifeng Sun
  • Date: 2013-05-07 09:24:27 UTC
  • mfrom: (1.2.1) (2.1.2 experimental)
  • Revision ID: package-import@ubuntu.com-20130507092427-rpfijl4mn3y87ek7
Tags: 1.8.3-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// -*- C++ -*-
 
2
#include "Rivet/Analysis.hh"
 
3
#include "Rivet/RivetAIDA.hh"
 
4
#include "Rivet/Tools/Logging.hh"
 
5
#include "Rivet/Projections/ChargedFinalState.hh"
 
6
 
 
7
 
 
8
 
 
9
namespace Rivet {
 
10
 
 
11
 
 
12
  class CDF_2012_NOTE10874 : public Analysis {
 
13
  public:
 
14
 
 
15
    CDF_2012_NOTE10874()
 
16
      : Analysis("CDF_2012_NOTE10874")
 
17
    {}
 
18
 
 
19
 
 
20
  public:
 
21
 
 
22
    void init() {
 
23
      const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV);
 
24
      addProjection(cfs, "CFS");
 
25
 
 
26
      int isqrts = -1;
 
27
      if (fuzzyEquals(sqrtS(), 300*GeV)) isqrts = 1;
 
28
      else if (fuzzyEquals(sqrtS(), 900*GeV)) isqrts = 2;
 
29
      else if (fuzzyEquals(sqrtS(), 1960*GeV)) isqrts = 3;
 
30
      assert(isqrts >= 0);
 
31
 
 
32
      _h_nch_transverse = bookProfile1D(1,1,isqrts);
 
33
      _h_ptSumDen = bookProfile1D(2,1,isqrts);
 
34
      _h_avePt = bookProfile1D(3,1,isqrts);
 
35
    }
 
36
 
 
37
    // Little helper function to identify Delta(phi) regions
 
38
    inline int region_index(double dphi) {
 
39
      assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED));
 
40
      if (dphi < PI/3.0) return 0;
 
41
      if (dphi < 2*PI/3.0) return 1;
 
42
      return 2;
 
43
    }
 
44
 
 
45
 
 
46
    void analyze(const Event& event) {
 
47
      const double weight = event.weight();
 
48
 
 
49
      const ChargedFinalState& cfs = applyProjection<ChargedFinalState>(event, "CFS");
 
50
      if (cfs.size() < 1) {
 
51
        vetoEvent;
 
52
      }
 
53
 
 
54
      ParticleVector particles = cfs.particlesByPt();
 
55
      Particle p_lead = particles[0];
 
56
      const double philead = p_lead.momentum().phi();
 
57
      const double pTlead  = p_lead.momentum().pT();
 
58
 
 
59
      int    tNch = 0;
 
60
      double ptSum = 0.0;
 
61
      foreach (const Particle& p, particles) {
 
62
        const double pT = p.momentum().pT();
 
63
        const double dPhi = deltaPhi(philead, p.momentum().phi());
 
64
        const int ir = region_index(dPhi);
 
65
        if (ir==1) {
 
66
          tNch++;
 
67
          ptSum += pT;
 
68
        }
 
69
      }
 
70
 
 
71
      const double dEtadPhi = 4.0*PI/3.0;
 
72
 
 
73
      _h_nch_transverse->fill(pTlead/GeV, tNch/dEtadPhi, weight);
 
74
      _h_ptSumDen->fill(pTlead/GeV, ptSum/dEtadPhi, weight);
 
75
 
 
76
      if (tNch > 0) {
 
77
        _h_avePt->fill(pTlead/GeV, ptSum/tNch, weight);
 
78
      }
 
79
    }
 
80
 
 
81
 
 
82
    void finalize() {
 
83
    }
 
84
 
 
85
 
 
86
  private:
 
87
 
 
88
    AIDA::IProfile1D *_h_nch_transverse, *_h_ptSumDen, *_h_avePt;
 
89
 
 
90
  };
 
91
 
 
92
 
 
93
  // The hook for the plugin system
 
94
  DECLARE_RIVET_PLUGIN(CDF_2012_NOTE10874);
 
95
 
 
96
}