[Rivet-svn] r2272 - in trunk: . doc include/Rivet/Projections src/Analyses src/Projections

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Fri Feb 26 21:50:23 GMT 2010


Author: buckley
Date: Fri Feb 26 21:50:22 2010
New Revision: 2272

Log:
Make W finder projection work without cuts on the neutrinos, and enhance a few other final state projections along the way.

Modified:
   trunk/ChangeLog
   trunk/doc/Makefile.am
   trunk/include/Rivet/Projections/ChargedFinalState.hh
   trunk/include/Rivet/Projections/IdentifiedFinalState.hh
   trunk/include/Rivet/Projections/MergedFinalState.hh
   trunk/include/Rivet/Projections/WFinder.hh
   trunk/src/Analyses/CDF_1991_S2313472.cc
   trunk/src/Analyses/D0_1998_S3711838.cc
   trunk/src/Analyses/D0_2008_S7837160.cc
   trunk/src/Analyses/MC_WANALYSIS.cc
   trunk/src/Analyses/Makefile.am
   trunk/src/Projections/ChargedFinalState.cc
   trunk/src/Projections/IdentifiedFinalState.cc
   trunk/src/Projections/WFinder.cc

Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/ChangeLog	Fri Feb 26 21:50:22 2010	(r2272)
@@ -1,3 +1,8 @@
+2010-02-26  Andy Buckley  <andy at insectnation.org>
+
+	* Update WFinder to not place cuts and other restrictions on the
+	neutrino.
+
 2010-02-11  Andy Buckley  <andy at insectnation.org>
 
 	* Change analysis loader behaviour to use ONLY RIVET_ANALYSIS_PATH

Modified: trunk/doc/Makefile.am
==============================================================================
--- trunk/doc/Makefile.am	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/doc/Makefile.am	Fri Feb 26 21:50:22 2010	(r2272)
@@ -1,10 +1,10 @@
 ## TODO: make variable names POSIX-compliant in rivet-manual.pdf target!
 
 dist_noinst_SCRIPTS = mk-analysis-html mk-analysis-latex
-EXTRA_DIST = compare-histos.txt heppennames.sty cone.png h-physrev3.bst hepnames.sty JHEP3.cls \
-  make-plots.html bend.png hepnicenames.sty JHEP.bst make-plots.txt rivet-manual.tex preamble.tex \
-  compare-histos.html hepparticles.sty maybemath.sty refs.bib rivet-manual.pdf thinker.png \
-  hepunits.sty underscore.sty microtype.sty readplot.py
+EXTRA_DIST = compare-histos.txt heppennames.sty warning.png cone.png h-physrev3.bst hepnames.sty \
+  JHEP3.cls make-plots.html bend.png hepnicenames.sty JHEP.bst make-plots.txt rivet-manual.tex \
+  preamble.tex compare-histos.html hepparticles.sty maybemath.sty refs.bib rivet-manual.pdf \
+  thinker.png hepunits.sty underscore.sty microtype.sty readplot.py
 
 DOCS = 
 

Modified: trunk/include/Rivet/Projections/ChargedFinalState.hh
==============================================================================
--- trunk/include/Rivet/Projections/ChargedFinalState.hh	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/include/Rivet/Projections/ChargedFinalState.hh	Fri Feb 26 21:50:22 2010	(r2272)
@@ -20,11 +20,17 @@
     /// @name Constructors
     //@{
     ChargedFinalState(const FinalState& fsp);
- 
+
+    /// Single eta-range constructor.
     ChargedFinalState(double mineta = -MAXRAPIDITY,
                       double maxeta =  MAXRAPIDITY,
                       double minpt  =  0.0*GeV);
 
+    /// A constructor which allows to specify multiple eta ranges
+    /// and the min \f$ p_T \f$.
+    ChargedFinalState(const vector<pair<double, double> >& etaRanges,
+                      double minpt = 0.0*GeV);
+
     /// Clone on the heap.
     virtual const Projection* clone() const {
       return new ChargedFinalState(*this);

Modified: trunk/include/Rivet/Projections/IdentifiedFinalState.hh
==============================================================================
--- trunk/include/Rivet/Projections/IdentifiedFinalState.hh	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/include/Rivet/Projections/IdentifiedFinalState.hh	Fri Feb 26 21:50:22 2010	(r2272)
@@ -14,25 +14,23 @@
 
   /// Produce a final state which only contains specified particle IDs.
   class IdentifiedFinalState : public FinalState {
-
   public:
  
     /// @name Constructors
     //@{
-    /// Default constructor.
-    IdentifiedFinalState(double etamin=-MAXRAPIDITY, double etamax=MAXRAPIDITY, double ptMin=0.0*GeV)
-      : FinalState(etamin, etamax, ptMin)
-    {
-      setName("IdentifiedFinalState");
-      addProjection(FinalState(etamin, etamax, ptMin), "FS");
-    }
 
     /// Constructor with specific FinalState.
-    IdentifiedFinalState(const FinalState& fsp)
-    {
-      setName("IdentifiedFinalState");
-      addProjection(fsp, "FS");
-    }
+    IdentifiedFinalState(const FinalState& fsp);
+
+    /// Constructor with a single eta range argument.
+    IdentifiedFinalState(double etamin=-MAXRAPIDITY, 
+                         double etamax=MAXRAPIDITY, 
+                         double ptMin=0.0*GeV);
+    
+    /// Constructor which allows to specify multiple eta ranges
+    /// and the min \f$ p_T \f$.
+    IdentifiedFinalState(const vector<pair<double, double> >& etaRanges,
+                         double ptMin=0.0*GeV);
 
     /// Clone on the heap.
     virtual const Projection* clone() const {

Modified: trunk/include/Rivet/Projections/MergedFinalState.hh
==============================================================================
--- trunk/include/Rivet/Projections/MergedFinalState.hh	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/include/Rivet/Projections/MergedFinalState.hh	Fri Feb 26 21:50:22 2010	(r2272)
@@ -12,7 +12,7 @@
 namespace Rivet {
 
 
-  /// Project only merged final state particles.
+  /// Provide access to final state particles merged from two FinalState projections.
   class MergedFinalState : public FinalState {
 
   public:

Modified: trunk/include/Rivet/Projections/WFinder.hh
==============================================================================
--- trunk/include/Rivet/Projections/WFinder.hh	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/include/Rivet/Projections/WFinder.hh	Fri Feb 26 21:50:22 2010	(r2272)
@@ -7,7 +7,7 @@
 #include "Rivet/Particle.hh"
 #include "Rivet/Event.hh"
 #include "Rivet/Projection.hh"
-#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
 
 namespace Rivet {
 
@@ -23,9 +23,10 @@
     /// Constructor taking a FinalState and type of the charged lepton, mass window,
     /// and maximum dR of photons around the charged lepton to take into account for W
     /// reconstruction.
-    WFinder(const FinalState& fs,
+    WFinder(const ChargedFinalState& fs_l,
             PdgId pid,
             double m2_min, double m2_max,
+            double missingET,
             double dRmax);
 
 
@@ -36,6 +37,7 @@
             double pTmin,
             PdgId pid,
             double m2_min, double m2_max,
+            double missingET,
             double dRmax);
 
 
@@ -46,6 +48,7 @@
             double pTmin,
             PdgId pid,
             double m2_min, const double m2_max,
+            double missingET,
             double dRmax);
 
 
@@ -61,10 +64,12 @@
     /// (e.g. for running a jet finder on it)
     const FinalState& remainingFinalState() const;
 
-    /// Access to the W constituent leptons final state
-    /// (e.g. for more fine-grained cuts on the leptons)
+    /// Access to the W constituent leptons and photons
     const FinalState& constituentsFinalState() const;
 
+    /// Access to the W constituent leptons
+    const FinalState& constituentLeptonsFinalState() const;
+
 
   protected:
  
@@ -81,12 +86,14 @@
     void _init(const std::vector<std::pair<double, double> >& etaRanges,
                double pTmin,  PdgId pid,
                double m2_min, double m2_max,
+               double missingET,
                double dRmax);
 
     /// Common implementation of constructor operation, taking FS.
-    void _init(const FinalState& fs,
+    void _init(const ChargedFinalState& fs_l,
                PdgId pid,
                double m2_min, double m2_max,
+               double missingET,
                double dRmax);
 
 
@@ -95,6 +102,9 @@
     // Mass range
     double _m2_min, _m2_max;
 
+    // Missing ET cut
+    double _etMiss;
+
   };
 
 

Modified: trunk/src/Analyses/CDF_1991_S2313472.cc
==============================================================================
--- trunk/src/Analyses/CDF_1991_S2313472.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Analyses/CDF_1991_S2313472.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -6,7 +6,6 @@
 #include "Rivet/Projections/ChargedFinalState.hh"
 #include "Rivet/Projections/WFinder.hh"
 #include "Rivet/Tools/ParticleIdUtils.hh"
-/// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder...
 
 namespace Rivet {
 
@@ -38,7 +37,7 @@
 
     /// Book histograms and initialise projections before the run
     void init() {
-      WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0.2);
+      WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 20.0*GeV, 0.2);
       addProjection(wfe, "WFe");
 
       // Book histogram
@@ -56,6 +55,7 @@
       }
 
       // Require the electron to have ET > 20 GeV, pT > 6 GeV and |eta| < 1.1
+      /// @todo Use separate pT and ETmiss cuts in WFinder
       FourMomentum p_e;
       int chg_e = 0;
 

Modified: trunk/src/Analyses/D0_1998_S3711838.cc
==============================================================================
--- trunk/src/Analyses/D0_1998_S3711838.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Analyses/D0_1998_S3711838.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -37,7 +37,8 @@
 
     /// Book histograms and initialise projections before the run
     void init() {
-      WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0.2);
+      /// @todo Use separate pT and ETmiss cuts in WFinder
+      WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2);
       addProjection(wfe, "WFe");
 
       // Book histogram
@@ -56,6 +57,7 @@
       }
 
       // Require the electron to have ET > 25 GeV  and |eta| < 1.1
+      /// @todo Use separate pT and ETmiss cuts in WFinder
       FourMomentum p_e;
       int chg_e = 0;
 

Modified: trunk/src/Analyses/D0_2008_S7837160.cc
==============================================================================
--- trunk/src/Analyses/D0_2008_S7837160.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Analyses/D0_2008_S7837160.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -36,7 +36,8 @@
     // Book histograms and set up projections
     void init() {
       // Projections
-      const WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0.2);
+      /// @todo Use separate pT and ETmiss cuts in WFinder
+      const WFinder wfe(-5, 5, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0*GeV, 0.2);
       addProjection(wfe, "WFe");
 
       // Cross-section histograms
@@ -59,6 +60,8 @@
       }
 
       // Require that leptons have Et >= 25 GeV
+      /// @todo Use pT cut in WFinder
+      /// @todo Any ETmiss cut?
       FourMomentum p_e;
       int chg_e = 0;
       foreach (const Particle& l, wf.constituentsFinalState().particles()) {

Modified: trunk/src/Analyses/MC_WANALYSIS.cc
==============================================================================
--- trunk/src/Analyses/MC_WANALYSIS.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Analyses/MC_WANALYSIS.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -30,9 +30,9 @@
       // Projections
       const ChargedFinalState cfs(-2, 2, 200*MeV);
       addProjection(cfs, "CFS");
-      const WFinder wfe(-2, 2, 10.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0.2);
+      const WFinder wfe(-2, 2, 10.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 10*GeV, 0.2);
       addProjection(wfe, "WFe");
-      const WFinder wfmu(-2, 2, 10.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 0.2);
+      const WFinder wfmu(-2, 2, 10.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 10*GeV, 0.2);
       addProjection(wfmu, "WFmu");
       FastJets fastjets(wfe.remainingFinalState(), FastJets::KT, 0.5);
       addProjection(fastjets, "Jets");

Modified: trunk/src/Analyses/Makefile.am
==============================================================================
--- trunk/src/Analyses/Makefile.am	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Analyses/Makefile.am	Fri Feb 26 21:50:22 2010	(r2272)
@@ -35,6 +35,7 @@
     MC_TTBAR.cc \
     SFM_1984_S1178091.cc \
     STAR_2008_S7993412.cc \
+    STAR_2009_UE_HELEN.cc \
     UA1_1990_S2044935.cc \
     UA5_1988_S1867512.cc \
     ZEUS_2001_S4815815.cc
@@ -102,8 +103,7 @@
 RivetRHICAnalyses_la_SOURCES = \
     STAR_2006_S6500200.cc \
     STAR_2006_S6860818.cc \
-    STAR_2006_S6870392.cc \
-    STAR_2009_UE_HELEN.cc
+    STAR_2006_S6870392.cc
 
 
 lib_LTLIBRARIES += RivetSPSAnalyses.la

Modified: trunk/src/Projections/ChargedFinalState.cc
==============================================================================
--- trunk/src/Projections/ChargedFinalState.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Projections/ChargedFinalState.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -20,6 +20,13 @@
   }
 
 
+  ChargedFinalState::ChargedFinalState(const vector<pair<double, double> >& etaRanges,
+                                       double minpt) {
+    setName("ChargedFinalState");
+    addProjection(FinalState(etaRanges, minpt), "FS");
+  }
+  
+
   int ChargedFinalState::compare(const Projection& p) const {
     return mkNamedPCmp(p, "FS");
   }

Modified: trunk/src/Projections/IdentifiedFinalState.cc
==============================================================================
--- trunk/src/Projections/IdentifiedFinalState.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Projections/IdentifiedFinalState.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -8,6 +8,29 @@
 namespace Rivet {
 
 
+  IdentifiedFinalState::IdentifiedFinalState(const FinalState& fsp) {
+    setName("IdentifiedFinalState");
+    addProjection(fsp, "FS");
+  }
+  
+  
+  IdentifiedFinalState::IdentifiedFinalState(double etamin, double etamax, double ptMin)
+    : FinalState(etamin, etamax, ptMin)
+  {
+    setName("IdentifiedFinalState");
+    addProjection(FinalState(etamin, etamax, ptMin), "FS");
+  }
+  
+  
+  IdentifiedFinalState::IdentifiedFinalState(const vector<pair<double, double> >& etaRanges,
+                                             double ptMin)
+    : FinalState(etaRanges, ptMin)
+  {
+    setName("IdentifiedFinalState");
+    addProjection(FinalState(etaRanges, ptMin), "FS");
+  }
+  
+
   int IdentifiedFinalState::compare(const Projection& p) const {
     const PCmp fscmp = mkNamedPCmp(p, "FS");
     if (fscmp != EQUIVALENT) return fscmp;

Modified: trunk/src/Projections/WFinder.cc
==============================================================================
--- trunk/src/Projections/WFinder.cc	Thu Feb 25 16:55:38 2010	(r2271)
+++ trunk/src/Projections/WFinder.cc	Fri Feb 26 21:50:22 2010	(r2272)
@@ -1,6 +1,8 @@
 // -*- C++ -*-
 #include "Rivet/Projections/WFinder.hh"
 #include "Rivet/Projections/InvMassFinalState.hh"
+#include "Rivet/Projections/TotalVisibleMomentum.hh"
+#include "Rivet/Projections/MergedFinalState.hh"
 #include "Rivet/Projections/ClusteredPhotons.hh"
 #include "Rivet/Projections/VetoedFinalState.hh"
 #include "Rivet/Tools/ParticleIdUtils.hh"
@@ -10,11 +12,12 @@
 namespace Rivet {
 
 
-  WFinder::WFinder(const FinalState& fs,
+  WFinder::WFinder(const ChargedFinalState& fs_l,
                    PdgId pid,
                    double m2_min, double m2_max,
+                   double missingET,
                    double dRmax) {
-    _init(fs, pid, m2_min, m2_max, dRmax);
+    _init(fs_l, pid, m2_min, m2_max, missingET, dRmax);
   }
 
 
@@ -22,10 +25,11 @@
                    double pTmin,
                    PdgId pid,
                    double m2_min, double m2_max,
+                   double missingET,
                    double dRmax) {
     vector<pair<double, double> > etaRanges;
     etaRanges += std::make_pair(etaMin, etaMax);
-    _init(etaRanges, pTmin, pid, m2_min, m2_max, dRmax);
+    _init(etaRanges, pTmin, pid, m2_min, m2_max, missingET, dRmax);
   }
 
 
@@ -33,8 +37,9 @@
                    double pTmin,
                    PdgId pid,
                    double m2_min, double m2_max,
+                   double missingET,
                    double dRmax) {
-    _init(etaRanges, pTmin, pid, m2_min, m2_max, dRmax);
+    _init(etaRanges, pTmin, pid, m2_min, m2_max, missingET, dRmax);
   }
 
 
@@ -42,38 +47,59 @@
                       double pTmin,  
                       PdgId pid,
                       double m2_min, double m2_max,
+                      double missingET,
                       double dRmax) {
-    FinalState fs(etaRanges, pTmin);
-    _init(fs, pid, m2_min, m2_max, dRmax);
+    ChargedFinalState fs_l(etaRanges, pTmin);
+    _init(fs_l, pid, m2_min, m2_max, missingET, dRmax);
   }
 
 
-  void WFinder::_init(const FinalState& fs,
+  void WFinder::_init(const ChargedFinalState& fs_l,
                       PdgId pid,
                       double m2_min, double m2_max,
+                      double missingET,
                       double dRmax)
   {
     setName("WFinder");
 
+    // Check that the arguments are legal
+    assert(abs(pid) == ELECTRON || abs(pid) == MUON);
+    PdgId nu_pid = abs(pid) + 1;
+    assert(abs(nu_pid) == NU_E || abs(nu_pid) == NU_MU);
+
+    // Don't make pT or eta cuts on the neutrino
+    IdentifiedFinalState fs_nu;
+    fs_nu.acceptNeutrinos();
+
+    // Make a merged final state projection for charged and neutral leptons
+    MergedFinalState mergedFS(fs_l, fs_nu);
+
     // Mass range
     _m2_min = m2_min;
     _m2_max = m2_max;
 
-    assert(abs(pid) == ELECTRON || abs(pid) == MUON || abs(pid) == TAU);
-    PdgId nu_pid = abs(pid) + 1;
-    assert(abs(nu_pid) == NU_E || abs(nu_pid) == NU_MU || abs(nu_pid) == NU_TAU);
+    // Make and register an invariant mass final state for the W decay leptons
     vector<pair<PdgId, PdgId> > l_nu_ids;
     l_nu_ids += make_pair(abs(pid), -abs(nu_pid));
     l_nu_ids += make_pair(-abs(pid), abs(nu_pid));
-    InvMassFinalState imfs(fs, l_nu_ids, m2_min, m2_max);
+    InvMassFinalState imfs(mergedFS, l_nu_ids, m2_min, m2_max);
     addProjection(imfs, "IMFS");
  
+    // A projection for clustering photons on to the charged lepton
     ClusteredPhotons cphotons(FinalState(), imfs, dRmax);
     addProjection(cphotons, "CPhotons");
 
+    // Projection for all signal constituents
+    MergedFinalState signalFS(imfs, cphotons);
+    addProjection(cphotons, "SignalParticles");
+    
+    // Add TotalVisibleMomentum proj to calc MET
+    TotalVisibleMomentum vismom(signalFS);
+    addProjection(vismom, "MissingET");
+    
+    // FS for non-signal bits of the event
     VetoedFinalState remainingFS;
-    remainingFS.addVetoOnThisFinalState(imfs);
-    remainingFS.addVetoOnThisFinalState(cphotons);
+    remainingFS.addVetoOnThisFinalState(signalFS);
     addProjection(remainingFS, "RFS");
   }
 
@@ -87,6 +113,11 @@
 
 
   const FinalState& WFinder::constituentsFinalState() const {
+    return getProjection<FinalState>("SignalParticles");
+  }
+
+
+  const FinalState& WFinder::constituentLeptonsFinalState() const {
     return getProjection<FinalState>("IMFS");
   }
 
@@ -131,6 +162,15 @@
     }
     msg << " = " << pW;
 
+    // Check missing ET
+    const TotalVisibleMomentum& vismom = applyProjection<TotalVisibleMomentum>(e, "MissingET");
+    /// @todo Restrict missing momentum eta range?
+    if (vismom.scalarET() < _etMiss) {
+      getLog() << Log::DEBUG << "Not enough missing ET: " << vismom.scalarET()/GeV 
+               << " GeV vs. " << _etMiss/GeV << " GeV" << endl;
+      return;
+    }
+
     // Check mass range again
     if (!inRange(pW.mass()/GeV, _m2_min, _m2_max)) return;
     getLog() << Log::DEBUG << msg.str() << endl;


More information about the Rivet-svn mailing list