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

blackhole at projects.hepforge.org blackhole at projects.hepforge.org
Mon Oct 19 15:04:43 BST 2009


Author: buckley
Date: Mon Oct 19 15:04:43 2009
New Revision: 1933

Log:
Adding MC photon+jet UE study (unfinished) and issing info files

Added:
   trunk/data/anainfo/MC_LHC_PHOTONJETUE.info
   trunk/data/anainfo/MC_LHC_SUSY.info
   trunk/src/Analyses/MC_LHC_PHOTONJETUE.cc
Modified:
   trunk/ChangeLog
   trunk/data/anainfo/Makefile.am
   trunk/src/Analyses/Makefile.am

Modified: trunk/ChangeLog
==============================================================================
--- trunk/ChangeLog	Mon Oct 19 12:31:37 2009	(r1932)
+++ trunk/ChangeLog	Mon Oct 19 15:04:43 2009	(r1933)
@@ -1,3 +1,9 @@
+2009-10-19  Andy Buckley  <andy at insectnation.org>
+
+	* Adding analysis info files for MC SUSY and PHOTONJETUE analyses.
+
+	* Adding MC UE analysis in photon+jet events.
+
 2009-10-19  Hendrik Hoeth <hendrik.hoeth at cern.ch>
 
 	* Adding new NeutralFinalState projection. Note that this final

Added: trunk/data/anainfo/MC_LHC_PHOTONJETUE.info
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/data/anainfo/MC_LHC_PHOTONJETUE.info	Mon Oct 19 15:04:43 2009	(r1933)
@@ -0,0 +1,17 @@
+Name: MC_LHC_PHOTONJETUE
+SpiresID: None
+Summary: "Study the usual underlying event observables in photon+jet events"
+Description: "Modification of the MC leading jets underlying event analysis 
+             to study the UE in hard photon+jet events. This may be of interest,
+             because the leading QCD dipole structure is different from that 
+             in either dijet or Drell-Yan hard processes. Observables are also 
+             extended to include the variation of transverse activity as a 
+             function of jet-photon balance, and using the photon rather 
+             than the jet to define the event alignment."
+RunInfo: "Photon+jet events at any energy. pT cutoff at 10 GeV advised "
+Status: UNVALIDATED
+Experiment: None
+Collider: None
+Year: None
+Authors:
+ - Andy Buckley <andy.buckley at cern.ch>

Added: trunk/data/anainfo/MC_LHC_SUSY.info
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/data/anainfo/MC_LHC_SUSY.info	Mon Oct 19 15:04:43 2009	(r1933)
@@ -0,0 +1,15 @@
+Name: MC_LHC_SUSY
+SpiresID: None
+Summary: "Validate generic SUSY events, including various lepton invariant mass"
+Description: "Analysis of generic SUSY events at the LHC, based on Atlas 
+             Herwig++ validation analysis contents. Plotted are eta, phi and 
+             pT observables for charged tracks, photons, isolated photons, 
+             electrons, muons, and jets, as well as various dilepton mass 'edge'
+             plots for different event selection criteria."
+RunInfo: "SUSY events at any energy. pT cutoff at 10 GeV may be advised "
+Status: UNVALIDATED
+Experiment: None
+Collider: None
+Year: None
+Authors:
+ - Andy Buckley <andy.buckley at cern.ch>

Modified: trunk/data/anainfo/Makefile.am
==============================================================================
--- trunk/data/anainfo/Makefile.am	Mon Oct 19 12:31:37 2009	(r1932)
+++ trunk/data/anainfo/Makefile.am	Mon Oct 19 15:04:43 2009	(r1933)
@@ -51,6 +51,8 @@
   JADE_OPAL_2000_S4300807.info \
   MC_LHC_LEADINGJETS.info \
   MC_LHC_DIJET.info \
+  MC_LHC_PHOTONJETUE.info \
+  MC_LHC_SUSY.info \
   MC_LHC_WANALYSIS.info \
   MC_LHC_ZANALYSIS.info \
   MC_TVT1960_PHOTONJETS.info \

Added: trunk/src/Analyses/MC_LHC_PHOTONJETUE.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/src/Analyses/MC_LHC_PHOTONJETUE.cc	Mon Oct 19 15:04:43 2009	(r1933)
@@ -0,0 +1,209 @@
+// -*- C++ -*-
+#include "Rivet/Analysis.hh"
+#include "Rivet/Tools/Logging.hh"
+#include "Rivet/RivetAIDA.hh"
+#include "Rivet/Projections/ChargedFinalState.hh"
+#include "Rivet/Projections/IdentifiedFinalState.hh"
+#include "Rivet/Projections/FastJets.hh"
+
+namespace Rivet {
+
+
+  /* Underlying event in jet + isolated photon events
+   * @author Andy Buckley
+   */ 
+  class MC_LHC_PHOTONJETUE : public Analysis {
+  public:
+    
+    /// Constructor
+    MC_LHC_PHOTONJETUE()
+      : Analysis("MC_LHC_PHOTONJETUE")
+    { 
+      setBeams(PROTON, PROTON);
+    }
+    
+    
+    /// @name Analysis methods
+    //@{
+    
+    // Book histograms and projections
+    void init() {
+      // Final state for the jet finding
+      const FinalState fsj(-4.0, 4.0, 0.1*GeV);
+      addProjection(fsj, "FSJ");
+      addProjection(FastJets(fsj, FastJets::ANTIKT, 0.7), "Jets");
+      
+      // Charged final state for the distributions
+      const ChargedFinalState cfs(-2.0, 2.0, 0.2*GeV);
+      addProjection(cfs, "Tracks");
+
+      // Photons (for isolation)
+      const FinalState fsp(-2.0, 2.0, 20.0*GeV);
+      IdentifiedFinalState photonfs(fsp);
+      photonfs.acceptId(PHOTON);
+      addProjection(photonfs, "Photons");
+
+      // Histograms
+      _hist_jetgamma_dR   = bookHistogram1D("gammajet-dR", 52, 0.0, 5.2);
+      _hist_jetgamma_dphi = bookHistogram1D("gammajet-dphi", 50, 0.0, PI);
+      const double MAXPT1 = 50.0;
+      _hist_pnchg      = bookProfile1D("trans-nchg",     50, 0.0, MAXPT1);
+      _hist_pmaxnchg   = bookProfile1D("trans-maxnchg",  50, 0.0, MAXPT1);
+      _hist_pminnchg   = bookProfile1D("trans-minnchg",  50, 0.0, MAXPT1);
+      _hist_pcptsum    = bookProfile1D("trans-ptsum",    50, 0.0, MAXPT1);
+      _hist_pmaxcptsum = bookProfile1D("trans-maxptsum", 50, 0.0, MAXPT1);
+      _hist_pmincptsum = bookProfile1D("trans-minptsum", 50, 0.0, MAXPT1);
+      _hist_pcptave    = bookProfile1D("trans-ptavg",    50, 0.0, MAXPT1);
+    }
+
+
+    // Do the analysis
+    void analyze(const Event& evt) {
+
+      // Get jets
+      const Jets jets = applyProjection<FastJets>(evt, "Jets").jetsByPt();
+      getLog() << Log::DEBUG << "Jet multiplicity = " << jets.size() << endl;
+      if (jets.size() < 1) {
+        getLog() << Log::DEBUG << "No jets found" << endl;
+        vetoEvent;
+      }
+
+      // Get leading jet properties
+      const FourMomentum pjet = jets.front().momentum();
+      const double jeteta = pjet.eta();
+      const double jetphi = pjet.phi();
+      const double jetpT  = pjet.pT();
+      getLog() << Log::DEBUG << "Leading jet: pT = " << jetpT/GeV << " GeV"
+               << ", eta = " << jeteta
+               << ", phi = " << jetphi << endl;
+
+      // Require the leading jet to be within |eta| < 2
+      if (fabs(jeteta) > 2) {
+        getLog() << Log::DEBUG << "Failed leading jet eta cut" << endl;
+        vetoEvent;
+      }
+
+      // Get the leading photon
+      const FinalState& photonfs = applyProjection<FinalState>(evt, "Photons");
+      if (photonfs.size() < 1) {
+        getLog() << Log::DEBUG << "No hard photons found" << endl;
+        vetoEvent;
+      }
+      const FourMomentum pgamma = photonfs.particlesByPt().front().momentum();      
+
+      // Check that leading photon is isolated from jets
+      bool isolated = true;
+      foreach (const Jet& j, jets) {
+        if (deltaR(j.momentum(), pgamma) < 0.1) {
+          isolated = false;
+          break;
+        }
+      }
+      if (!isolated) {
+        getLog() << Log::DEBUG << "Leading photon is not isolated from jets" << endl;
+        vetoEvent;
+      }
+
+      // Get leading photon properties
+      const double gammaeta = pgamma.eta();
+      const double gammaphi = pgamma.phi();
+      const double gammapT  = pgamma.pT();
+      getLog() << Log::DEBUG << "Leading photon: pT = " << gammapT/GeV << " GeV"
+               << ", eta = " << gammaeta
+               << ", phi = " << gammaphi << endl;
+
+      // Get the event weight
+      const double weight = evt.weight();
+
+      // Fill jet1-photon separation histos
+      _hist_jetgamma_dR->fill(deltaR(pgamma, pjet), weight);
+      _hist_jetgamma_dphi->fill(deltaPhi(gammaphi, jetphi), weight);
+
+      /// @todo Cut on back-to-backness of jet-photon?
+
+      /// @todo Plot evolution of UE as a function of jet-photon angle
+      /// @todo Plot evolution of UE as a function of photon pT
+
+      // Get the final states to work with for filling the distributions
+      const FinalState& cfs = applyProjection<ChargedFinalState>(evt, "Tracks");
+
+      size_t   numOverall(0),     numToward(0),     numTrans1(0),     numTrans2(0),     numAway(0);
+      double ptSumOverall(0.0), ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0);
+      double ptMaxOverall(0.0), ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0);
+
+      // Calculate all the charged stuff
+      foreach (const Particle& p, cfs.particles()) {
+        const double dPhi = deltaPhi(p.momentum().phi(), jetphi);
+        const double pT = p.momentum().pT();
+        const double phi = p.momentum().azimuthalAngle();
+        const double rotatedphi = phi - jetphi;
+
+        ptSumOverall += pT;
+        ++numOverall;
+        if (pT > ptMaxOverall) ptMaxOverall = pT;
+
+        if (dPhi < PI/3.0) {
+          ptSumToward += pT;
+          ++numToward;
+          if (pT > ptMaxToward) ptMaxToward = pT;
+        }
+        else if (dPhi < 2*PI/3.0) {
+          if (rotatedphi <= PI) {
+            ptSumTrans1 += pT;
+            ++numTrans1;
+            if (pT > ptMaxTrans1) {
+              ptMaxTrans1 = pT;
+            } else {
+              ptSumTrans2 += pT;
+              ++numTrans2;
+              if (pT > ptMaxTrans2) ptMaxTrans2 = pT;
+            }
+          }
+        }
+        else {
+          ptSumAway += pT;
+          ++numAway;
+          if (pT > ptMaxAway) ptMaxAway = pT;
+        }
+      }
+      
+      
+      // Fill the histograms
+      _hist_pnchg->fill(jetpT, (numTrans1+numTrans2)/(4*PI/3), weight);
+      _hist_pmaxnchg->fill(jetpT, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight);
+      _hist_pminnchg->fill(jetpT, (numTrans1<numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight);      
+      _hist_pcptsum->fill(jetpT, (ptSumTrans1+ptSumTrans2)/(4*PI/3), weight);
+      _hist_pmaxcptsum->fill(jetpT, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/(2*PI/3), weight);
+      _hist_pmincptsum->fill(jetpT, (ptSumTrans1<ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/(2*PI/3), weight);
+      if ((numTrans1+numTrans2) > 0) {
+        _hist_pcptave->fill(jetpT, (ptSumTrans1+ptSumTrans2)/(numTrans1+numTrans2), weight);
+      }
+    }
+    
+    
+    void finalize() {  
+      //
+    }
+    
+    
+  private:
+
+    AIDA::IHistogram1D* _hist_jetgamma_dR;
+    AIDA::IHistogram1D* _hist_jetgamma_dphi;
+    
+    AIDA::IProfile1D *_hist_pnchg;
+    AIDA::IProfile1D *_hist_pmaxnchg;
+    AIDA::IProfile1D *_hist_pminnchg;
+    AIDA::IProfile1D *_hist_pcptsum;
+    AIDA::IProfile1D *_hist_pmaxcptsum;
+    AIDA::IProfile1D *_hist_pmincptsum;
+    AIDA::IProfile1D *_hist_pcptave;  
+    
+  };
+  
+  
+  
+  // This global object acts as a hook for the plugin system
+  AnalysisBuilder<MC_LHC_PHOTONJETUE> plugin_MC_LHC_PHOTONJETUE;
+  
+}

Modified: trunk/src/Analyses/Makefile.am
==============================================================================
--- trunk/src/Analyses/Makefile.am	Mon Oct 19 12:31:37 2009	(r1932)
+++ trunk/src/Analyses/Makefile.am	Mon Oct 19 15:04:43 2009	(r1933)
@@ -106,6 +106,7 @@
     MC_TVT1960_ZJETS.cc \
     MC_LHC_LEADINGJETS.cc \
     MC_LHC_DIJET.cc \
+    MC_LHC_PHOTONJETUE.cc \
     MC_LHC_WANALYSIS.cc \
     MC_LHC_ZANALYSIS.cc \
     MC_LHC_SUSY.cc


More information about the Rivet-svn mailing list