[Rivet-svn] r3174 - in trunk: data/anainfo src/Analyses

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Wed Jul 6 12:04:48 BST 2011


Author: dgrell
Date: Wed Jul  6 12:04:48 2011
New Revision: 3174

Log:
Angela Chen's SUSY analyses

Added:
   trunk/data/anainfo/ATLAS_2011_CONF_2011_090.info
   trunk/data/anainfo/ATLAS_2011_S9019561.info
   trunk/src/Analyses/ATLAS_2011_CONF_2011_090.cc
   trunk/src/Analyses/ATLAS_2011_S9019561.cc
Modified:
   trunk/data/anainfo/Makefile.am
   trunk/src/Analyses/Makefile.am

Added: trunk/data/anainfo/ATLAS_2011_CONF_2011_090.info
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/data/anainfo/ATLAS_2011_CONF_2011_090.info	Wed Jul  6 12:04:48 2011	(r3174)
@@ -0,0 +1,22 @@
+Name: ATLAS_2011_CONF_2011_090
+Year: 2011
+Summary: Single Lepton Search for Supersymmetry
+Experiment: ATLAS
+Collider: LHC
+SpiresID: 
+Status: UNVALIDATED
+Authors:
+ - Angela Chen <aqchen at fas.harvard.edu>
+References:
+ - arXiv:
+RunInfo:
+  BSM signal events at 7000 GeV.
+NumEvents: 25000 for BSM signals
+Beams: [p+, p+]
+Energies: [7000]
+Description:
+  'Single lepton search for supersymmmetric particles by ATLAS at 7 TeV. 
+  Event counts in electron and muon signal regions are implemented as one-bin histograms.
+  Histograms for missing transverse energy and effective mass are implemented for the two 
+  signal regions.'
+

Added: trunk/data/anainfo/ATLAS_2011_S9019561.info
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/data/anainfo/ATLAS_2011_S9019561.info	Wed Jul  6 12:04:48 2011	(r3174)
@@ -0,0 +1,35 @@
+Name: ATLAS_2011_S9019561
+Year: 2011
+Summary: Two Lepton Supersymmetry Search
+Experiment: ATLAS
+Collider: LHC
+SpiresID: 9019561
+Status: UNVALIDATED
+Authors:
+ - Angela Chen <aqchen at fas.harvard.edu>
+References:
+ - arXiv:1103.6214
+RunInfo:
+  BSM signal events at 7000 GeV.
+NumEvents: 25000 for BSM signals
+Beams: [p+, p+]
+Energies: [7000]
+Description:
+  '2-lepton search for supersymmetric particles by ATLAS at 7 TeV. 
+  Event counts in signal regions (3 same sign and 3 opposite sign) are implemented as one
+  bin histograms. Histograms for missing transverse energy are implemented.'
+BibKey: Aad:2011xm
+BibTeX: '@Article{Aad:2011xm,
+     author    = "Aad, Georges and others",
+ collaboration = "ATLAS",
+     title     = "{Search for supersymmetric particles in events with lepton
+                  pairs and large missing transverse momentum in sqrt{s} = 7
+                  TeV proton-proton collisions with the ATLAS experiment}",
+     year      = "2011",
+     eprint    = "1103.6214",
+     archivePrefix = "arXiv",
+     primaryClass  =  "hep-ex",
+     SLACcitation  = "%%CITATION = 1103.6214;%%"
+}
+
+'

Modified: trunk/data/anainfo/Makefile.am
==============================================================================
--- trunk/data/anainfo/Makefile.am	Mon Jul  4 16:10:23 2011	(r3173)
+++ trunk/data/anainfo/Makefile.am	Wed Jul  6 12:04:48 2011	(r3174)
@@ -18,6 +18,8 @@
   ATLAS_2010_CONF_2010_049.info \
   ATLAS_2010_S8994773.info \
   ATLAS_2011_S9002537.info \
+  ATLAS_2011_S9019561.info \
+  ATLAS_2011_CONF_2011_090.info \
   BELLE_2006_S6265367.info \
   CDF_1988_S1865951.info \
   CDF_1990_S2089246.info \

Added: trunk/src/Analyses/ATLAS_2011_CONF_2011_090.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/src/Analyses/ATLAS_2011_CONF_2011_090.cc	Wed Jul  6 12:04:48 2011	(r3174)
@@ -0,0 +1,380 @@
+// -*- C++ -*- 
+#include "Rivet/Analysis.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+#include "Rivet/RivetAIDA.hh"
+#include "Rivet/Tools/Logging.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Projections/VisibleFinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  class ATLAS_2011_CONF_2011_090 : public Analysis {
+  public:
+
+    /// @name Constructors etc.
+    //@{
+
+    /// Constructor
+
+    ATLAS_2011_CONF_2011_090()
+      : Analysis("ATLAS_2011_CONF_2011_090")
+
+    {
+      /// Set whether your finalize method needs the generator cross section
+      setNeedsCrossSection(false);
+    }
+
+    //@}
+
+
+  public:
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialize projections before the run
+    void init() {
+
+      // projection to find the electrons
+      std::vector<std::pair<double, double> > eta_e;
+      eta_e.push_back(make_pair(-2.47,2.47));
+      IdentifiedFinalState elecs(eta_e, 20.0*GeV);
+      elecs.acceptIdPair(ELECTRON);
+      addProjection(elecs, "elecs");
+
+
+      // veto region electrons (from 2010 arXiv:1102.2357v2)
+      std::vector<std::pair<double, double> > eta_v_e;
+      eta_v_e.push_back(make_pair(-1.52,-1.37));
+      eta_v_e.push_back(make_pair( 1.37, 1.52));
+      IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV);
+      veto_elecs.acceptIdPair(ELECTRON);
+      addProjection(veto_elecs, "veto_elecs");
+
+
+      // projection to find the muons
+      std::vector<std::pair<double, double> > eta_m;
+      eta_m.push_back(make_pair(-2.4,2.4));
+      IdentifiedFinalState muons(eta_m, 10.0*GeV);
+      muons.acceptIdPair(MUON);
+      addProjection(muons, "muons");
+
+
+      // Jet finder
+      VetoedFinalState vfs;
+      vfs.addVetoPairDetail(MUON,10*GeV,7000*GeV);
+      vfs.addVetoPairDetail(ELECTRON,20*GeV,7000*GeV);
+      addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4),
+                   "AntiKtJets04");
+
+
+      // all tracks (to do deltaR with leptons)
+      addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs");
+
+
+      // for pTmiss
+      addProjection(VisibleFinalState(-4.9,4.9),"vfs");
+
+
+      /// Book histograms
+      _count_mu_channel = bookHistogram1D("count_muon_channel", 1, 0., 1.);
+      _count_e_channel = bookHistogram1D("count_electron_channel", 1, 0., 1.); 
+      _hist_eTmiss_e = bookHistogram1D("Et_miss_e", 50, 0., 500.);
+      _hist_eTmiss_mu = bookHistogram1D("Et_miss_mu", 50, 0., 500.);
+      _hist_m_eff_e = bookHistogram1D("m_eff_e", 30, 0., 1500.);
+      _hist_m_eff_mu = bookHistogram1D("m_eff_mu", 30, 0., 1500.);
+      _hist_m_eff_e_final = bookHistogram1D("m_eff_e_final", 30, 0., 1500.);
+      _hist_m_eff_mu_final = bookHistogram1D("m_eff_mu_final", 30, 0., 1500.);
+
+
+
+    }
+
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();      
+      
+
+      ParticleVector veto_e 
+	= applyProjection<IdentifiedFinalState>(event, "veto_elecs").particles();
+      if ( ! veto_e.empty() ) {
+       	MSG_DEBUG("electrons in veto region");
+       	vetoEvent;
+      }
+
+      Jets cand_jets;
+      foreach ( const Jet& jet, 
+       	  applyProjection<FastJets>(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) {
+        if ( fabs( jet.momentum().eta() ) < 2.8 ) {
+          cand_jets.push_back(jet);
+        }
+      } 
+
+      ParticleVector candtemp_e = 
+	applyProjection<IdentifiedFinalState>(event, "elecs").particlesByPt();      
+      ParticleVector candtemp_mu = 
+	applyProjection<IdentifiedFinalState>(event,"muons").particlesByPt();
+      ParticleVector chg_tracks = 
+	applyProjection<ChargedFinalState>(event, "cfs").particles();
+      ParticleVector cand_mu;
+      ParticleVector cand_e;
+
+
+      // pTcone around muon track 
+      foreach ( const Particle & mu, candtemp_mu ) {
+	double pTinCone = -mu.momentum().pT();
+	foreach ( const Particle & track, chg_tracks ) {
+	  if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
+	    pTinCone += track.momentum().pT();
+	}
+	if ( pTinCone < 1.8*GeV ) 
+	  cand_mu.push_back(mu);
+      }
+
+
+      // pTcone around electron
+      foreach ( const Particle e, candtemp_e ) {
+	double pTinCone = -e.momentum().pT();
+	foreach ( const Particle & track, chg_tracks ) {
+	  if ( deltaR(e.momentum(),track.momentum()) < 0.2 )  
+	    pTinCone += track.momentum().pT();
+	}
+	if ( pTinCone < 0.10 * e.momentum().pT() )
+	  cand_e.push_back(e);
+      }
+
+
+
+      // discard jets that overlap with electrons
+      Jets cand_jets_2;
+      foreach ( const Jet& jet, cand_jets ) {
+	  bool away_from_e = true;
+	  foreach ( const Particle & e, cand_e ) {
+	    if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) {
+	      away_from_e = false;
+	      break;
+	    }
+	  }
+	  if ( away_from_e ) 
+	    cand_jets_2.push_back( jet );
+      }
+      
+      // only consider leptons far from jet
+      ParticleVector recon_e, recon_mu;  
+      foreach ( const Particle & e, cand_e ) {
+        bool e_near_jet = false;
+	foreach ( const Jet& jet, cand_jets_2 ) {  
+          if ( deltaR(e.momentum(),jet.momentum()) < 0.4 && 
+	       deltaR(e.momentum(),jet.momentum()) > 0.2 ) 
+	    e_near_jet = true;
+	}
+        if ( e_near_jet == false )
+          recon_e.push_back( e );  
+       }
+
+      foreach ( const Particle & mu, cand_mu ) {
+         bool mu_near_jet = false;
+         foreach ( const Jet& jet, cand_jets_2 ) {	
+           if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) 
+	     mu_near_jet = true;	   
+	 }
+	 if ( mu_near_jet == false ) 
+	  recon_mu.push_back( mu );
+       } 
+
+      // pTmiss
+      ParticleVector vfs_particles 
+	= applyProjection<VisibleFinalState>(event, "vfs").particles();
+      FourMomentum pTmiss;
+      foreach ( const Particle & p, vfs_particles ) {
+	pTmiss -= p.momentum();
+      }
+      double eTmiss = pTmiss.pT();
+
+
+      // final jet filter
+      Jets recon_jets;
+      foreach ( const Jet& jet, cand_jets_2 ) {
+	  recon_jets.push_back( jet );
+      }
+
+
+
+	
+      // ==================== observables ====================
+
+
+      // Njets
+
+      int Njets = 0;
+      double pTmiss_phi = pTmiss.phi();
+      foreach ( const Jet& jet, recon_jets ) {
+	if ( fabs(jet.momentum().eta()) < 2.8 ) 
+	  Njets+=1;
+      }     
+      if ( Njets < 3 ) {
+	MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left");
+	vetoEvent;
+      }
+
+      if ( recon_jets[0].momentum().pT() <= 60.0 * GeV ) {
+	MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets");
+	vetoEvent;
+      }
+      for ( int i = 1; i < 3; ++i ) {
+	if ( recon_jets[i].momentum().pT() <= 25*GeV ) {
+	  vetoEvent;
+	}
+      }      
+
+      for ( int i = 0; i < 3; ++i ) {
+	double dPhi = deltaPhi( pTmiss_phi, recon_jets[i].momentum().phi() );
+	if ( dPhi <= 0.2 ) {
+	  MSG_DEBUG("dPhi too small");
+	  vetoEvent;
+	  break;
+	}
+      }
+
+
+      ParticleVector lepton;
+      if ( recon_mu.empty() && recon_e.empty() ) {
+	MSG_DEBUG("No leptons");
+	vetoEvent;
+      }
+      else {
+	foreach ( const Particle & mu, recon_mu ) 
+	    lepton.push_back(mu);
+        foreach ( const Particle & e, recon_e ) 
+	    lepton.push_back(e);
+      }
+
+      std::sort(lepton.begin(), lepton.end(), cmpParticleByPt);
+
+      double e_id = 11;
+      double mu_id = 13;
+
+      // one hard leading lepton cut
+      if ( fabs(lepton[0].pdgId()) == e_id && 
+           lepton[0].momentum().pT() <= 25*GeV ) {
+	vetoEvent;
+      }
+      else if ( fabs(lepton[0].pdgId()) == mu_id && 
+                lepton[0].momentum().pT() <= 20*GeV ) {
+	vetoEvent;
+      }
+      
+      // exactly one hard leading lepton cut
+      if ( fabs(lepton[1].pdgId()) == e_id && 
+           lepton[1].momentum().pT() > 20*GeV ) {
+	  vetoEvent;
+      }
+      else if ( fabs(lepton[1].pdgId()) == mu_id && 
+                lepton[1].momentum().pT() > 10*GeV ) {
+	  vetoEvent;
+      }
+     
+     
+
+    // ==================== FILL ====================
+
+
+      FourMomentum pT_l = lepton[0].momentum();
+     
+
+      double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi);
+      double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) );
+
+
+      // effective mass
+      double m_eff = eTmiss + pT_l.pT() 
+	+ recon_jets[0].momentum().pT() 
+	+ recon_jets[1].momentum().pT()
+	+ recon_jets[2].momentum().pT();
+
+     
+      // Electron channel signal region
+      
+      if ( fabs( lepton[0].pdgId() ) == e_id ) {
+
+        _hist_eTmiss_e->fill(eTmiss, weight);
+        _hist_m_eff_e->fill(m_eff, weight);
+
+        if ( mT > 100*GeV && eTmiss > 125*GeV ) { 
+	  _hist_m_eff_e_final->fill(m_eff, weight);
+	  if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) {
+            _count_e_channel->fill(0.5,weight);	
+	  }
+        }
+      }
+
+      // Muon channel signal region
+
+      else if ( fabs( lepton[0].pdgId() ) == mu_id ) {      
+
+        _hist_eTmiss_mu->fill(eTmiss, weight);
+        _hist_m_eff_mu->fill(m_eff, weight);
+
+        if ( mT > 100*GeV && eTmiss > 125*GeV ) {
+          _hist_m_eff_mu_final->fill(m_eff, weight);
+ 	  if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) {
+            _count_mu_channel->fill(0.5,weight);
+          }
+        }
+     
+      }   
+
+
+    }
+
+    //@}
+
+    
+    void finalize() {
+
+
+	scale( _hist_eTmiss_e, 10. * 165. * crossSection()/sumOfWeights() );
+	scale( _hist_eTmiss_mu, 10. * 165. * crossSection()/sumOfWeights() );
+	scale( _hist_m_eff_e, 50. * 165. * crossSection()/sumOfWeights() );
+	scale( _hist_m_eff_mu, 50. * 165. * crossSection()/sumOfWeights() );
+	scale( _hist_m_eff_e_final, 50. * 165. * crossSection()/sumOfWeights() );
+	scale( _hist_m_eff_mu_final, 50. * 165. * crossSection()/sumOfWeights() );
+
+
+    }
+
+  private:
+
+    /// @name Histograms
+    //@{
+    AIDA::IHistogram1D* _count_e_channel;
+    AIDA::IHistogram1D* _count_mu_channel;
+
+    AIDA::IHistogram1D* _hist_eTmiss_e;
+    AIDA::IHistogram1D* _hist_eTmiss_mu;
+
+    AIDA::IHistogram1D* _hist_m_eff_e;
+    AIDA::IHistogram1D* _hist_m_eff_mu;
+    AIDA::IHistogram1D* _hist_m_eff_e_final;
+    AIDA::IHistogram1D* _hist_m_eff_mu_final;
+
+
+    //@}
+
+    
+  };
+
+
+
+  // This global object acts as a hook for the plugin system
+  AnalysisBuilder<ATLAS_2011_CONF_2011_090> plugin_ATLAS_2011_CONF_2011_090;
+
+
+}

Added: trunk/src/Analyses/ATLAS_2011_S9019561.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/src/Analyses/ATLAS_2011_S9019561.cc	Wed Jul  6 12:04:48 2011	(r3174)
@@ -0,0 +1,339 @@
+// -*- C++ -*- 
+#include "Rivet/Analysis.hh"
+#include "Rivet/Tools/BinnedHistogram.hh"
+#include "Rivet/RivetAIDA.hh"
+#include "Rivet/Tools/Logging.hh"
+#include "Rivet/Projections/FinalState.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Projections/VisibleFinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  class ATLAS_2011_S9019561 : public Analysis {
+  public:
+
+    /// @name Constructors etc.
+    //@{
+
+    /// Constructor
+
+    ATLAS_2011_S9019561()
+      : Analysis("ATLAS_2011_S9019561")
+
+    {
+      /// Set whether your finalize method needs the generator cross section
+      setNeedsCrossSection(false);
+    }
+
+    //@}
+
+
+  public:
+
+    /// @name Analysis methods
+    //@{
+
+    /// Book histograms and initialise projections before the run
+    void init() {
+
+      // projection to find the electrons
+      std::vector<std::pair<double, double> > eta_e;
+      eta_e.push_back(make_pair(-2.47,2.47));
+      IdentifiedFinalState elecs(eta_e, 20.0*GeV);
+      elecs.acceptIdPair(ELECTRON);
+      addProjection(elecs, "elecs");
+
+
+      // veto region electrons
+      std::vector<std::pair<double, double> > eta_v_e;
+      eta_v_e.push_back(make_pair(-1.52,-1.37));
+      eta_v_e.push_back(make_pair( 1.37, 1.52));
+      IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV);
+      veto_elecs.acceptIdPair(ELECTRON);
+      addProjection(veto_elecs, "veto_elecs");
+
+
+      // projection to find the muons
+      std::vector<std::pair<double, double> > eta_m;
+      eta_m.push_back(make_pair(-2.4,2.4));
+      IdentifiedFinalState muons(eta_m, 20.0*GeV);
+      muons.acceptIdPair(MUON);
+      addProjection(muons, "muons");
+
+
+      // jet finder
+      VetoedFinalState vfs;
+      vfs.addVetoPairDetail(MUON,20*GeV,7000*GeV);
+      vfs.addVetoPairDetail(ELECTRON,20*GeV,7000*GeV);
+      addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4),
+                   "AntiKtJets04");
+
+
+      // all tracks (to do deltaR with leptons)
+      addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs");
+
+
+      // for pTmiss
+      addProjection(VisibleFinalState(-4.9,4.9),"vfs");
+
+
+      /// book histograms
+      _count_OS_e_mu = bookHistogram1D("count_OS_e+-mu-+", 1, 0., 1.);
+      _count_OS_e_e = bookHistogram1D("count_OS_e+e-", 1, 0., 1.);
+      _count_OS_mu_mu = bookHistogram1D("count_OS_mu+mu-", 1, 0., 1.);
+      _count_SS_e_mu = bookHistogram1D("count_SS_e+-mu+-", 1, 0., 1.);
+      _count_SS_e_e = bookHistogram1D("count_SS_e+-e+-", 1, 0., 1.);
+      _count_SS_mu_mu = bookHistogram1D("count_SS_mu+-mu+-", 1, 0., 1.);
+
+      _hist_eTmiss_OS  = bookHistogram1D("Et_miss_OS", 20, 0., 400.);
+      _hist_eTmiss_SS  = bookHistogram1D("Et_miss_SS", 20, 0., 400.);	
+
+
+    }
+
+
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+
+      const double weight = event.weight();      
+
+      ParticleVector veto_e 
+	= applyProjection<IdentifiedFinalState>(event, "veto_elecs").particles();
+      if ( ! veto_e.empty() ) {
+       	MSG_DEBUG("electrons in veto region");
+       	vetoEvent;
+      }
+
+      Jets cand_jets;
+      foreach (const Jet& jet, 
+       	applyProjection<FastJets>(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) {
+        if ( fabs( jet.momentum().eta() ) < 2.5 ) {
+          cand_jets.push_back(jet);
+        }
+      } 
+
+      ParticleVector cand_e = 
+	applyProjection<IdentifiedFinalState>(event, "elecs").particlesByPt();      
+      ParticleVector candtemp_mu = 
+	applyProjection<IdentifiedFinalState>(event,"muons").particlesByPt();
+      ParticleVector chg_tracks = 
+	applyProjection<ChargedFinalState>(event, "cfs").particles();
+      ParticleVector cand_mu;
+
+
+      // pTcone around muon track 
+      foreach ( const Particle & mu, candtemp_mu ) {
+	double pTinCone = -mu.momentum().pT();
+	foreach ( const Particle & track, chg_tracks ) {
+	  if ( deltaR(mu.momentum(),track.momentum()) < 0.2 )
+	    pTinCone += track.momentum().pT();
+	}
+	if ( pTinCone < 1.8*GeV ) 
+	  cand_mu.push_back(mu);
+      }
+
+
+      // Discard jets that overlap with electrons
+      Jets cand_jets_2;
+      foreach ( const Jet& jet, cand_jets ) {
+	if ( fabs( jet.momentum().eta() ) < 1.5 )
+	  cand_jets_2.push_back( jet );
+	else {
+	  bool away_from_e = true;
+	  foreach ( const Particle & e, cand_e ) {
+	    if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) {
+	      away_from_e = false;
+	      break;
+	    }
+	  }
+	  if ( away_from_e ) 
+	    cand_jets_2.push_back( jet );
+	}
+      }
+
+      
+      // Leptons far from jet
+      ParticleVector recon_e, recon_mu;  
+      foreach ( const Particle & e, cand_e ) {
+        bool e_near_jet = false;
+	foreach ( const Jet& jet, cand_jets_2 ) {  
+          if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) 
+	    e_near_jet = true;
+	}
+        if ( e_near_jet == false )
+          recon_e.push_back( e );  
+      }
+
+      foreach ( const Particle & mu, cand_mu ) {
+         bool mu_near_jet = false;
+         foreach ( const Jet& jet, cand_jets_2 ) {	
+           if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) 
+	     mu_near_jet = true;	   
+	 }
+	 if ( mu_near_jet == false) 
+	  recon_mu.push_back( mu );
+       } 
+
+
+      // pTmiss
+      ParticleVector vfs_particles 
+	= applyProjection<VisibleFinalState>(event, "vfs").particles();
+      FourMomentum pTmiss;
+      foreach ( const Particle & p, vfs_particles ) {
+	pTmiss -= p.momentum();
+      }
+      double eTmiss = pTmiss.pT();
+
+
+      // Final jet filter
+      Jets recon_jets;
+      foreach ( const Jet& jet, cand_jets_2 ) {
+	  recon_jets.push_back( jet );
+      }
+
+
+      // Electron isolation criterion
+      foreach ( Particle e, recon_e ) {
+	double EtinCone = -e.momentum().Et();
+	foreach ( const Particle & track, chg_tracks) {
+	  if ( deltaR(e.momentum(),track.momentum()) <= 0.2 )  
+	    EtinCone += track.momentum().Et();
+	}
+	if ( EtinCone/e.momentum().pT() >= 0.15 )
+	  vetoEvent;
+      }
+
+
+      // Exactly two leptons for each event
+      int num_leptons = recon_mu.size() + recon_e.size();
+      if ( num_leptons != 2) 
+	vetoEvent;
+            
+    
+
+      // Lepton pair mass
+      double mass_leptons = 0;
+      foreach ( Particle e, recon_e ) {
+        mass_leptons += e.momentum().E();
+      }
+      foreach ( Particle mu, recon_mu) { 
+        mass_leptons += mu.momentum().E();
+      }
+    
+      if ( mass_leptons <= 5.0 * GeV) {
+	MSG_DEBUG("Not enough m_ll: " << mass_leptons << " < 5");	
+        vetoEvent;      	  	
+      }      
+      
+   
+
+    // ==================== FILL ====================
+
+	
+      // electron, electron
+      if (recon_e.size() == 2 ) {
+
+	// SS ee	
+	if ( recon_e[0].pdgId() * recon_e[1].pdgId() > 0 ) {
+	  _hist_eTmiss_SS->fill(eTmiss, weight);
+	  if ( eTmiss > 100 ) {
+	    MSG_DEBUG("Hits SS e+/-e+/-");
+  	    _count_SS_e_e->fill(0.5, weight);
+	  }
+	}	
+
+	// OS ee
+	else if ( recon_e[0].pdgId() * recon_e[1].pdgId() < 0) { 
+	  _hist_eTmiss_OS->fill(eTmiss, weight);
+	  if ( eTmiss > 150 ) {
+	    MSG_DEBUG("Hits OS e+e-");
+	    _count_OS_e_e->fill(0.5, weight);
+	  }
+	}
+      }
+
+
+      // muon, electron	
+      else if ( recon_e.size() == 1 ) {
+
+	// SS mu_e
+	if ( recon_e[0].pdgId() * recon_mu[0].pdgId() > 0 ) {
+	  _hist_eTmiss_SS->fill(eTmiss, weight);
+	  if ( eTmiss > 100 ) {
+	    MSG_DEBUG("Hits SS e+/-mu+/-");
+	    _count_SS_e_mu->fill(0.5, weight);
+	  }
+	}
+
+	// OS mu_e
+	else if ( recon_e[0].pdgId() * recon_mu[0].pdgId() < 0) { 
+	  _hist_eTmiss_OS->fill(eTmiss, weight);
+	  if ( eTmiss > 150 ) {
+	    MSG_DEBUG("Hits OS e+mu-");
+	    _count_OS_e_mu->fill(0.5, weight);
+	  }
+	}
+      }
+
+
+      // muon, muon
+      else if ( recon_mu.size() == 2 ) {
+
+	// SS mu_mu
+	if ( recon_mu[0].pdgId() * recon_mu[1].pdgId() > 0 ) {
+	  _hist_eTmiss_SS->fill(eTmiss, weight);
+	  if ( eTmiss > 100 ) {
+	    MSG_DEBUG("Hits SS mu+/-mu+/-");
+	    _count_SS_mu_mu->fill(0.5, weight);
+	  }	
+	}
+
+	// OS mu_mu
+	else if ( recon_mu[0].pdgId() * recon_mu[1].pdgId() < 0) { 
+	  _hist_eTmiss_OS->fill(eTmiss, weight);
+	  if ( eTmiss > 150 ) {
+	    MSG_DEBUG("Hits OS mu+mu-");
+	    _count_OS_mu_mu->fill(0.5, weight);
+	  }
+	}
+      }
+
+
+    }
+
+    //@}
+
+    
+    void finalize() { }
+
+
+  private:
+
+    /// @name Histograms
+    //@{
+    AIDA::IHistogram1D* _count_OS_e_mu;
+    AIDA::IHistogram1D* _count_OS_e_e;
+    AIDA::IHistogram1D* _count_OS_mu_mu;
+    AIDA::IHistogram1D* _count_SS_e_mu;
+    AIDA::IHistogram1D* _count_SS_e_e;
+    AIDA::IHistogram1D* _count_SS_mu_mu;
+    AIDA::IHistogram1D* _hist_eTmiss_OS;
+    AIDA::IHistogram1D* _hist_eTmiss_SS;
+
+    //@}
+
+
+  };
+
+
+
+  // This global object acts as a hook for the plugin system
+  AnalysisBuilder<ATLAS_2011_S9019561> plugin_ATLAS_2011_S9019561;
+
+
+}

Modified: trunk/src/Analyses/Makefile.am
==============================================================================
--- trunk/src/Analyses/Makefile.am	Mon Jul  4 16:10:23 2011	(r3173)
+++ trunk/src/Analyses/Makefile.am	Wed Jul  6 12:04:48 2011	(r3174)
@@ -56,7 +56,9 @@
     ATLAS_2011_S9002537.cc
 if ENABLE_UNVALIDATED
 RivetATLASAnalyses_la_SOURCES += \
-    ATLAS_2010_CONF_2010_049.cc
+    ATLAS_2010_CONF_2010_049.cc \
+    ATLAS_2011_S9019561.cc \
+    ATLAS_2011_CONF_2011_090.cc
 endif
 
 


More information about the Rivet-svn mailing list