[Rivet-svn] r4039 - in branches/2012-06-aidarivet: data/anainfo data/plotinfo src/Analyses

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Fri Nov 23 21:23:18 GMT 2012


Author: richardn
Date: Fri Nov 23 21:23:17 2012
New Revision: 4039

Log:
added lastest ATLAS 4-lepton SUSY analysis

Added:
   branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_153.info
      - copied, changed from r4029, branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_001.info
   branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_153.plot
      - copied, changed from r4029, branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_001.plot
   branches/2012-06-aidarivet/src/Analyses/ATLAS_2012_CONF_2012_153.cc
Modified:
   branches/2012-06-aidarivet/data/anainfo/Makefile.am
   branches/2012-06-aidarivet/data/plotinfo/Makefile.am
   branches/2012-06-aidarivet/src/Analyses/Makefile.am

Copied and modified: branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_153.info (from r4029, branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_001.info)
==============================================================================
--- branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_001.info	Fri Nov 16 15:44:40 2012	(r4029, copy source)
+++ branches/2012-06-aidarivet/data/anainfo/ATLAS_2012_CONF_2012_153.info	Fri Nov 23 21:23:17 2012	(r4039)
@@ -1,4 +1,4 @@
-Name: ATLAS_2012_CONF_2012_001
+Name: ATLAS_2012_CONF_2012_153
 Year: 2012
 Summary: 4 or more lepton plus missing transverse energy SUSY search
 Experiment: ATLAS
@@ -7,20 +7,19 @@
 Authors:
  - Peter Richardson <peter.richardson at durham.ac.uk>
 References:
- - ATLAS-CONF-2012-001
- - ATLAS-CONF-2012-035
+ - ATLAS-CONF-2012-153
 RunInfo:
-  BSM signal events at 7000 GeV.
+  BSM signal events at 8000 GeV.
 NumEvents: 25000 for BSM signals
 Beams: [p+, p+]
-Energies: [7000]
+Energies: [8000]
 NeedCrossSection: yes
 Description:
   'Search for SUSY using events with 4 or more leptons in association with
    missing transverse energy in proton-proton
-   collisions at a centre-of-mass energy of 7 TeV. The data sample has a total
-   integrated luminosity of 2.06 fb$^{-1}$. There is no reference data and
+   collisions at a centre-of-mass energy of 8 TeV. The data sample has a total
+   integrated luminosity of 13.0 fb$^{-1}$. There is no reference data and
    in addition to the control plots from the paper the number of events in
    the two signal regions,
-   correctly normalized to an integrated luminosity 2.06 fb$^{-1}$,
+   correctly normalized to an integrated luminosity 13.0 fb$^{-1}$,
    are calculated.'

Modified: branches/2012-06-aidarivet/data/anainfo/Makefile.am
==============================================================================
--- branches/2012-06-aidarivet/data/anainfo/Makefile.am	Fri Nov 23 20:13:04 2012	(r4038)
+++ branches/2012-06-aidarivet/data/anainfo/Makefile.am	Fri Nov 23 21:23:17 2012	(r4039)
@@ -68,6 +68,7 @@
   ATLAS_2012_CONF_2012_104.info \
   ATLAS_2012_CONF_2012_105.info \
   ATLAS_2012_CONF_2012_109.info \
+  ATLAS_2012_CONF_2012_153.info \
   BABAR_2005_S6181155.info \
   BABAR_2007_S6895344.info \
   BABAR_2007_S7266081.info \

Copied and modified: branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_153.plot (from r4029, branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_001.plot)
==============================================================================
--- branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_001.plot	Fri Nov 16 15:44:40 2012	(r4029, copy source)
+++ branches/2012-06-aidarivet/data/plotinfo/ATLAS_2012_CONF_2012_153.plot	Fri Nov 23 21:23:17 2012	(r4039)
@@ -1,116 +1,24 @@
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/count_SR1
+# BEGIN PLOT /ATLAS_2012_CONF_2012_153/count_SR1
 Title=Number of events in the SR1 signal region
 XLabel=
 YLabel=Number of Events
 LogY=0
 # END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/count_SR2
+# BEGIN PLOT /ATLAS_2012_CONF_2012_153/count_SR2
 Title=Number of events in the SR2 signal region
 XLabel=
 YLabel=Number of Events
 LogY=0
 # END PLOT
-
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d01-x01-y01
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/10 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d02-x01-y01
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/10 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d03-x01-y01
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the  $3^{\rm rd}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/5 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d04-x01-y01
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the  $4^{\rm th}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/5 \mathrm{GeV}$
-LogY=1
-# END PLOT
-
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d05-x01-y01
-Title=Number of Jets
-XLabel=Number of Jets
-YLabel=Events
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d06-x01-y01
+# BEGIN PLOT /ATLAS_2012_CONF_2012_153/hist_etmiss
 Title=Missing Transverse Energy
 XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV]
 YLabel=$\mathrm{Events}/20$\,GeV
 LogY=1
 # END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d07-x01-y01
-Title=Mass of SFOF lepton pair closest to the $Z^0$ mass
-XLabel=$M_{\mathrm{SFOS}}$ [GeV]
-YLabel=$\mathrm{Events}/20$\,GeV
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/d08-x01-y01
+# BEGIN PLOT /ATLAS_2012_CONF_2012_153/hist_m_eff
 Title=Effective Mass
 XLabel=$M_{\mathrm{eff}}$ [GeV]
-YLabel=$\mathrm{Events}/50$\,GeV
-LogY=1
-# END PLOT
-
-
-
-
-
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_1
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/10 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_2
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/10 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_3
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the  $3^{\rm rd}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/5 \mathrm{GeV}$
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_4
-Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the  $4^{\rm th}$ leading lepton
-XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV]
-YLabel=$\mathrm{Events}/5 \mathrm{GeV}$
-LogY=1
-# END PLOT
-
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_njet
-Title=Number of Jets
-XLabel=Number of Jets
-YLabel=Events
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_etmiss
-Title=Missing Transverse Energy
-XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV]
-YLabel=$\mathrm{Events}/20$\,GeV
-LogY=1
-# END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_m_SFOS
-Title=Mass of SFOF lepton pair closest to the $Z^0$ mass
-XLabel=$M_{\mathrm{SFOS}}$ [GeV]
 YLabel=$\mathrm{Events}/20$\,GeV
 LogY=1
 # END PLOT
-# BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_m_eff
-Title=Effective Mass
-XLabel=$M_{\mathrm{eff}}$ [GeV]
-YLabel=$\mathrm{Events}/50$\,GeV
-LogY=1
-# END PLOT

Modified: branches/2012-06-aidarivet/data/plotinfo/Makefile.am
==============================================================================
--- branches/2012-06-aidarivet/data/plotinfo/Makefile.am	Fri Nov 23 20:13:04 2012	(r4038)
+++ branches/2012-06-aidarivet/data/plotinfo/Makefile.am	Fri Nov 23 21:23:17 2012	(r4039)
@@ -65,6 +65,7 @@
   ATLAS_2012_CONF_2012_104.plot \
   ATLAS_2012_CONF_2012_105.plot \
   ATLAS_2012_CONF_2012_109.plot \
+  ATLAS_2012_CONF_2012_153.plot \
   BABAR_2005_S6181155.plot \
   BABAR_2007_S6895344.plot \
   BABAR_2007_S7266081.plot \

Added: branches/2012-06-aidarivet/src/Analyses/ATLAS_2012_CONF_2012_153.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2012-06-aidarivet/src/Analyses/ATLAS_2012_CONF_2012_153.cc	Fri Nov 23 21:23:17 2012	(r4039)
@@ -0,0 +1,430 @@
+// -*- 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/VetoedFinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+#include "Rivet/Tools/RivetMT2.hh"
+
+namespace Rivet {
+
+
+  class ATLAS_2012_CONF_2012_153 : public Analysis {
+  public:
+
+    /// @name Constructors etc.
+    //@{
+
+    /// Constructor
+    ATLAS_2012_CONF_2012_153()
+      : Analysis("ATLAS_2012_CONF_2012_153")
+    {    }
+
+    //@}
+
+    //@}
+
+
+
+  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, 10.0*GeV);
+      elecs.acceptIdPair(ELECTRON);
+      addProjection(elecs, "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");
+
+      // for pTmiss
+      addProjection(VisibleFinalState(-4.9,4.9),"vfs");
+
+      VetoedFinalState vfs;
+      vfs.addVetoPairId(MUON);
+
+      /// Jet finder
+      addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4),
+                    "AntiKtJets04");
+
+      // all tracks (to do deltaR with leptons)
+      addProjection(ChargedFinalState(-3.0,3.0),"cfs");
+
+      vector<double> edges_meff;
+      edges_meff.push_back(   0);
+      edges_meff.push_back( 150);
+      edges_meff.push_back( 300);
+      edges_meff.push_back( 500);
+      edges_meff.push_back(1000);
+      edges_meff.push_back(1500);
+
+      vector<double> edges_eT;
+      edges_eT.push_back(0);
+      edges_eT.push_back(50);
+      edges_eT.push_back(150);
+      edges_eT.push_back(300);
+      edges_eT.push_back(500);
+            
+      // Book histograms
+      _hist_electrons = bookHistogram1D("hist_electrons_before", 11, -0.5,10.5); 
+      _hist_muons     = bookHistogram1D("hist_muons_before"    , 11, -0.5,10.5);
+      _hist_leptons   = bookHistogram1D("hist_leptons_before"  , 11, -0.5,10.5);
+      _hist_4leptons  = bookHistogram1D("hist_4leptons", 1, 0.,1.);
+      _hist_veto      = bookHistogram1D("hist_veto", 1, 0., 1.);
+      _hist_etmiss    = bookHistogram1D("hist_etmiss",edges_eT);
+      _hist_meff      = bookHistogram1D("hist_m_eff",edges_meff);
+      _count_SR1      = bookHistogram1D("count_SR1", 1, 0., 1.);
+      _count_SR2      = bookHistogram1D("count_SR2", 1, 0., 1.);
+
+    }
+
+
+    /// Perform the per-event analysis
+    void analyze(const Event& event) {
+      const double weight = event.weight();
+      // get the jet candidates
+      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);
+        }
+      }
+
+      // candidate muons
+      ParticleVector cand_mu = applyProjection<IdentifiedFinalState>(event, "muons").particlesByPt();
+
+      // candidate electrons
+      // Discard if two electrons are within R=0.1
+      ParticleVector temp = applyProjection<IdentifiedFinalState>(event, "elecs").particlesByE();
+      vector<bool> vetoed(temp.size(),false);
+      ParticleVector cand_e;
+      for (unsigned int ix=0; ix<temp.size(); ++ix) {
+	if(vetoed[ix]) continue;
+      	for (unsigned int iy=ix+1; iy<temp.size(); ++iy) {
+	  if( deltaR(temp[ix].momentum(),temp[iy].momentum()) < 0.1 ) {
+	    vetoed[iy] = true;
+          }
+        }  
+	if(!vetoed[ix]) cand_e.push_back(temp[ix]);
+      }
+
+      // Sort by transverse momentum
+      std::sort(cand_e.begin(), cand_e.end(), cmpParticleByPt);
+
+      // resolve jet/lepton ambiguity
+      Jets recon_jets;
+      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 )
+          recon_jets.push_back( jet );
+      }
+
+      // only keep electrons more than R=0.4 from jets
+      ParticleVector cand2_e;
+      foreach (const Particle & e, cand_e) {
+        // at least 0.4 from any jets
+        bool away = true;
+        foreach ( const Jet& jet, recon_jets ) {
+          if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) {
+            away = false;
+            break;
+          }
+        }
+        // if isolated keep it
+        if ( away )
+      	  cand2_e.push_back( e );
+      }
+
+      // only keep muons more than R=0.4 from jets
+      ParticleVector cand2_mu;
+      foreach(const Particle & mu, cand_mu ) {
+        bool away = true;
+        // at least 0.4 from any jets
+        foreach ( const Jet& jet, recon_jets ) {
+          if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) {
+            away = false;
+            break;
+          }
+        }
+        if ( away )
+          cand2_mu.push_back( mu );
+      }
+
+      // electron and muon more than 0.1 apart
+      ParticleVector cand3_e;
+      foreach ( const Particle & e, cand2_e ) {
+	bool away = true;
+	foreach( const Particle & mu, cand2_mu ) {
+	  if( deltaR(e.momentum(),mu.momentum()) < 0.1) {
+	    away = false;
+	    break;
+	  } 
+	}
+	if(away) cand3_e.push_back(e);
+      }
+      ParticleVector cand3_mu;
+      foreach( const Particle & mu, cand2_mu ) {
+	bool away = true;
+	foreach ( const Particle & e, cand2_e ) {
+	  if( deltaR(e.momentum(),mu.momentum()) < 0.1) {
+	    away = false;
+	    break;
+	  } 
+	}
+	if(away) cand3_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();
+      
+      // apply electron isolation
+      ParticleVector chg_tracks =
+        applyProjection<ChargedFinalState>(event, "cfs").particles();
+      ParticleVector cand4_e;
+      foreach ( const Particle & e, cand3_e ) {
+	// charge isolation
+        double pTinCone = -e.momentum().perp();
+        foreach ( const Particle & track, chg_tracks ) {
+	  if(track.momentum().perp()>0.4 && 
+	     deltaR(e.momentum(),track.momentum()) <= 0.3 )
+            pTinCone += track.momentum().pT();
+        }
+	if (pTinCone/e.momentum().perp()>0.16) continue;
+	// all particles isolation
+        pTinCone = -e.momentum().perp();
+	foreach ( const Particle & p, vfs_particles ) {
+	  if(abs(p.pdgId())!=MUON && 
+	     deltaR(e.momentum(),p.momentum()) <= 0.3 )
+            pTinCone += p.momentum().pT();
+	}
+        if (pTinCone/e.momentum().perp()<0.18) {
+          cand4_e.push_back(e);
+	}
+      }
+
+      // apply muon isolation
+      ParticleVector cand4_mu;
+      foreach ( const Particle & mu, cand3_mu ) {
+        double pTinCone = -mu.momentum().perp();
+        foreach ( const Particle & track, chg_tracks ) {
+	  if(track.momentum().perp()>1.0 && 
+	     deltaR(mu.momentum(),track.momentum()) <= 0.3 )
+            pTinCone += track.momentum().pT();
+        }
+        if (pTinCone/mu.momentum().perp()<0.12) {
+          cand4_mu.push_back(mu);
+	}
+      }
+
+      // same SOSF pairs m>12.
+      ParticleVector recon_e;
+      foreach(const Particle & e, cand4_e) {
+	bool veto=false;
+	foreach(const Particle & e2, cand4_e) {
+	  if(e.pdgId()*e2.pdgId()<0&&(e.momentum()+e2.momentum()).mass()<12.) {
+	    veto=true;
+	    break;
+	  }
+	}
+	if(!veto) recon_e.push_back(e);
+      }
+      ParticleVector recon_mu;
+      foreach(const Particle & mu, cand4_mu) {
+	bool veto=false;
+	foreach(const Particle & mu2, cand4_mu) {
+	  if(mu.pdgId()*mu2.pdgId()<0&&(mu.momentum()+mu2.momentum()).mass()<12.) {
+	    veto=true;
+	    break;
+	  }
+	}
+	if(!veto) recon_mu.push_back(mu);
+      }
+
+      // now only use recon_jets, recon_mu, recon_e
+      _hist_electrons->fill(recon_e.size(), weight);
+      _hist_muons->fill(recon_mu.size(), weight);
+      _hist_leptons->fill(recon_mu.size() + recon_e.size(), weight);
+      if( recon_mu.size() + recon_e.size() > 3) {
+      	_hist_4leptons->fill(0.5, weight);
+      }
+
+      // reject events with less than 4 electrons and muons
+      if ( recon_mu.size() + recon_e.size() < 4 ) {
+        MSG_DEBUG("To few charged leptons left after selection");
+        vetoEvent;
+      }
+
+
+      // or two lepton trigger
+      bool passDouble = 
+      	(recon_mu.size()>=2 && ( (recon_mu[1].momentum().perp()>14.) ||
+				 (recon_mu[0].momentum().perp()>18. && recon_mu[1].momentum().perp()>10.) )) ||
+      	(recon_e.size() >=2 && ( (recon_e [1].momentum().perp()>14.) ||
+				 (recon_e [0].momentum().perp()>25. && recon_e [1].momentum().perp()>10.) )) ||
+       	(!recon_e.empty() && !recon_mu.empty() && 
+	 ( (recon_e[0].momentum().perp()>14. && recon_mu[0].momentum().perp()>10.)||
+	   (recon_e[0].momentum().perp()>10. && recon_mu[0].momentum().perp()>18.) ));
+
+      // must pass a trigger
+       if(!passDouble ) {
+         MSG_DEBUG("Hardest lepton fails trigger");
+         _hist_veto->fill(0.5, weight);
+         vetoEvent;
+       }
+
+      // calculate meff
+      double meff = eTmiss;
+      foreach ( const Particle & e , recon_e  )
+        meff += e.momentum().perp();
+      foreach ( const Particle & mu, recon_mu )
+        meff += mu.momentum().perp();
+      foreach ( const Jet & jet, recon_jets ) {
+        double pT = jet.momentum().perp();
+        if(pT>40.) meff += pT;
+      }
+
+      // 2/3 leptons --> find 1 SFOS pair in range and veto event
+      // 4+  leptons --> find 2 SFOS pairs and in range veto event
+      for(unsigned int ix=0;ix<recon_e.size();++ix) {
+        for(unsigned int iy=ix+1;iy<recon_e.size();++iy) {
+          if(recon_e[ix].pdgId()*recon_e[iy].pdgId()>0) continue;
+          FourMomentum ppair = recon_e[ix].momentum()+recon_e[iy].momentum();
+          double mtest = ppair.mass();
+          if(mtest>81.2 && mtest<101.2) vetoEvent;
+
+	  // check triplets with electron
+          for(unsigned int iz=0;iz<recon_e.size();++iz) {
+            if(iz==ix||iz==iy) continue;
+            mtest = (ppair+recon_e[iz].momentum()).mass();
+            if(mtest>81.2 && mtest<101.2) vetoEvent;
+	  }
+
+	  // check triplets with muon
+          for(unsigned int iz=0;iz<recon_mu.size();++iz) {
+            mtest = (ppair+recon_mu[iz].momentum()).mass();
+            if(mtest>81.2 && mtest<101.2) vetoEvent;
+          }
+
+          // check quadruplets with electrons
+          for(unsigned int iz=0;iz<recon_e.size();++iz) {
+            for(unsigned int iw=iz+1;iw<recon_e.size();++iw) {
+              if(iz==ix||iz==iy||iw==ix||iw==iy) continue;
+              if(recon_e[iz].pdgId()*recon_e[iw].pdgId()>0) continue;
+              mtest = (ppair+recon_e[iz].momentum()+recon_e[iw].momentum()).mass();
+              if(mtest>81.2 && mtest<101.2) vetoEvent;
+            }
+          }
+          // check quadruplets with muons
+          for(unsigned int iz=0;iz<recon_mu.size();++iz) {
+            for(unsigned int iw=iz+1;iw<recon_mu.size();++iw) {
+              if(recon_mu[iz].pdgId()*recon_mu[iw].pdgId()>0) continue;
+              mtest = (ppair+recon_mu[iz].momentum()+recon_mu[iw].momentum()).mass();
+              if(mtest>81.2 && mtest<101.2) vetoEvent;
+            }
+          }
+        }
+      }
+
+      // Muon pairs
+      for(unsigned int ix=0;ix<recon_mu.size();++ix) {
+        for(unsigned int iy=ix+1;iy<recon_mu.size();++iy) {
+          if(recon_mu[ix].pdgId()*recon_mu[iy].pdgId()>0) continue;
+          FourMomentum ppair = recon_mu[ix].momentum()+recon_mu[iy].momentum();
+          double mtest = ppair.mass();
+          if(mtest>81.2 && mtest<101.2) vetoEvent;
+            
+	 // check triplets with muon
+          for(unsigned int iz=0;iz<recon_mu.size();++iz) {
+            if(iz==ix||iz==iy) continue;
+            mtest = (ppair+recon_mu[iz].momentum()).mass();
+            if(mtest>81.2 && mtest<101.2) vetoEvent;
+	  }
+
+	 // check triplets with electron
+          for(unsigned int iz=0;iz<recon_e.size();++iz) {
+            mtest = (ppair+recon_e[iz].momentum()).mass();
+            if(mtest>81.2 && mtest<101.2) vetoEvent;
+	  }
+
+	// check muon quadruplets
+          for(unsigned int iz=0;iz<recon_mu.size();++iz) {
+            for(unsigned int iw=iz+1;iy<recon_mu.size();++iy) {
+	      if(iz==ix||iz==iy||iw==ix||iw==iy) continue;
+              if(recon_mu[iz].pdgId()*recon_mu[iw].pdgId()>0) continue;
+              mtest = (ppair+recon_mu[iz].momentum()+recon_mu[iw].momentum()).mass();
+              if(mtest>81.2 && mtest<101.2) vetoEvent;
+	    }
+	  }
+        }
+      }
+      
+      //make the control plots
+      _hist_etmiss ->fill(eTmiss,weight);
+      _hist_meff   ->fill(meff  ,weight);
+      // finally the counts
+      if(eTmiss>50.) _count_SR1->fill(0.5,weight);
+      if(meff  >0. ) _count_SR2->fill(0.5,weight);
+      	
+    }
+
+    //@}
+
+    void finalize() {
+      double norm = crossSection()/femtobarn*13./sumOfWeights();
+      scale(_hist_etmiss,norm*20.);
+      scale(_hist_meff  ,norm*20.);
+      scale(_count_SR1,norm);
+      scale(_count_SR2,norm);
+    }
+
+  private:
+
+    /// @name Histograms
+    //@{
+    AIDA::IHistogram1D* _hist_electrons;
+    AIDA::IHistogram1D* _hist_muons;
+    AIDA::IHistogram1D* _hist_leptons;
+    AIDA::IHistogram1D* _hist_4leptons;
+    AIDA::IHistogram1D* _hist_veto;
+    AIDA::IHistogram1D* _hist_etmiss;
+    AIDA::IHistogram1D* _hist_meff;
+    AIDA::IHistogram1D* _count_SR1;
+    AIDA::IHistogram1D* _count_SR2;
+    //@}
+
+  };
+
+  // The hook for the plugin system
+  DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_153);
+
+}

Modified: branches/2012-06-aidarivet/src/Analyses/Makefile.am
==============================================================================
--- branches/2012-06-aidarivet/src/Analyses/Makefile.am	Fri Nov 23 20:13:04 2012	(r4038)
+++ branches/2012-06-aidarivet/src/Analyses/Makefile.am	Fri Nov 23 21:23:17 2012	(r4039)
@@ -103,7 +103,8 @@
     ATLAS_2012_CONF_2012_103.cc \
     ATLAS_2012_CONF_2012_104.cc \
     ATLAS_2012_CONF_2012_105.cc \
-    ATLAS_2012_CONF_2012_109.cc
+    ATLAS_2012_CONF_2012_109.cc \
+    ATLAS_2012_CONF_2012_153.cc
 endif
 
 


More information about the Rivet-svn mailing list