rivet is hosted by Hepforge, IPPP Durham

List of all members.

Public Member Functions

 ATLAS_2012_I1204447 ()
 Constructor.
void init ()
 Book histograms and initialise projections before the run.
void analyze (const Event &event)
 Perform the per-event analysis.
void finalize ()
 Normalise histograms etc., after the run.
AnalysissetCrossSection (double xs)
 Set the cross section from the generator.
AnalysisHandlerhandler () const
 Access the controlling AnalysisHandler object.
const vector< AnalysisObjectPtr > & analysisObjects () const
 List of registered analysis data objects.
void markAsOwned () const
vector< string > getSignalRegions ()
 Helper functions.
vector< int > getCutsPerSignalRegion (const string &signal_region, int onZ=0)
 Function giving all cut vales per kinematic variable (taking onZ for MET into account)
void fillEventCountsPerSR (const string &basic_signal_region, int onZ, double HTlep, double eTmiss, double HTjets, double meff, double weight)
FourMomentum get_tau_neutrino_mom (const Particle &p)
void get_prong_number (const GenParticle *p, unsigned int &nprong, bool &lep_decaying_tau)
double apply_reco_eff (int flavor, const Particle &p)
 Function giving fiducial lepton efficiency.
double getUpperLimit (const string &signal_region, bool observed)
 Function giving observed upper limit (visible cross-section)
int isonZ (const Particles &particles)
Metadata

Metadata is used for querying from the command line and also for building web pages and the analysis pages in the Rivet manual.

const AnalysisInfoinfo () const
 Get the actual AnalysisInfo object in which all this metadata is stored.
virtual std::string name () const
 Get the name of the analysis.
virtual std::string inspireId () const
 Get the Inspire ID code for this analysis.
virtual std::string spiresId () const
 Get the SPIRES ID code for this analysis (~deprecated).
virtual std::vector< std::string > authors () const
 Names & emails of paper/analysis authors.
virtual std::string summary () const
 Get a short description of the analysis.
virtual std::string description () const
 Get a full description of the analysis.
virtual std::string runInfo () const
 Information about the events needed as input for this analysis.
virtual std::string experiment () const
 Experiment which performed and published this analysis.
virtual std::string collider () const
 Collider on which the experiment ran.
virtual std::string year () const
 When the original experimental analysis was published.
virtual std::vector< std::string > references () const
 Journal, and preprint references.
virtual std::string bibKey () const
 BibTeX citation key for this article.
virtual std::string bibTeX () const
 BibTeX citation entry for this article.
virtual std::string status () const
 Whether this analysis is trusted (in any way!)
virtual std::vector< std::string > todos () const
 Any work to be done on this analysis.
virtual const std::vector
< PdgIdPair > & 
requiredBeams () const
 Return the allowed pairs of incoming beams required by this analysis.
virtual AnalysissetRequiredBeams (const std::vector< PdgIdPair > &requiredBeams)
 Declare the allowed pairs of incoming beams required by this analysis.
virtual const std::vector
< std::pair< double, double > > & 
requiredEnergies () const
 Sets of valid beam energy pairs, in GeV.
virtual AnalysissetRequiredEnergies (const std::vector< std::pair< double, double > > &requiredEnergies)
 Declare the list of valid beam energy pairs, in GeV.
bool needsCrossSection () const
AnalysissetNeedsCrossSection (bool needed=true)
Internal metadata modifying methods
AnalysisInfoinfo ()
 Get the actual AnalysisInfo object in which all this metadata is stored (non-const).
Run conditions
const ParticlePairbeams () const
 Incoming beams for this run.
const PdgIdPair beamIds () const
 Incoming beam IDs for this run.
double sqrtS () const
 Centre of mass energy for this run.
Analysis / beam compatibility testing
bool isCompatible (const ParticlePair &beams) const
 Check if analysis is compatible with the provided beam particle IDs and energies.
bool isCompatible (PdgId beam1, PdgId beam2, double e1, double e2) const
 Check if analysis is compatible with the provided beam particle IDs and energies.
bool isCompatible (const PdgIdPair &beams, const std::pair< double, double > &energies) const
 Check if analysis is compatible with the provided beam particle IDs and energies.
Analysis object manipulation
Todo:
Should really be protected: only public to keep BinnedHistogram happy for now...
void scale (CounterPtr cnt, double factor)
 Multiplicatively scale the given counter, cnt, by factor factor.
void scale (const std::vector< CounterPtr > &cnts, double factor)
template<std::size_t array_size>
void scale (const CounterPtr(&cnts)[array_size], double factor)
void scale (Histo1DPtr histo, double factor)
 Multiplicatively scale the given histogram, histo, by factor factor.
void scale (const std::vector< Histo1DPtr > &histos, double factor)
template<std::size_t array_size>
void scale (const Histo1DPtr(&histos)[array_size], double factor)
void scale (Histo2DPtr histo, double factor)
 Multiplicatively scale the given histogram, histo, by factor factor.
void scale (const std::vector< Histo2DPtr > &histos, double factor)
template<std::size_t array_size>
void scale (const Histo2DPtr(&histos)[array_size], double factor)
void normalize (Histo1DPtr histo, double norm=1.0, bool includeoverflows=true)
 Normalize the given histogram, histo, to area = norm.
void normalize (const std::vector< Histo1DPtr > &histos, double norm=1.0, bool includeoverflows=true)
template<std::size_t array_size>
void normalize (const Histo1DPtr(&histos)[array_size], double norm=1.0, bool includeoverflows=true)
void normalize (Histo2DPtr histo, double norm=1.0, bool includeoverflows=true)
 Normalize the given histogram, histo, to area = norm.
void normalize (const std::vector< Histo2DPtr > &histos, double norm=1.0, bool includeoverflows=true)
template<std::size_t array_size>
void normalize (const Histo2DPtr(&histos)[array_size], double norm=1.0, bool includeoverflows=true)
void divide (CounterPtr c1, CounterPtr c2, Scatter1DPtr s) const
void divide (const YODA::Counter &c1, const YODA::Counter &c2, Scatter1DPtr s) const
void divide (Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const
void divide (const YODA::Histo1D &h1, const YODA::Histo1D &h2, Scatter2DPtr s) const
void divide (Profile1DPtr p1, Profile1DPtr p2, Scatter2DPtr s) const
void divide (const YODA::Profile1D &p1, const YODA::Profile1D &p2, Scatter2DPtr s) const
void divide (Histo2DPtr h1, Histo2DPtr h2, Scatter3DPtr s) const
void divide (const YODA::Histo2D &h1, const YODA::Histo2D &h2, Scatter3DPtr s) const
void divide (Profile2DPtr p1, Profile2DPtr p2, Scatter3DPtr s) const
void divide (const YODA::Profile2D &p1, const YODA::Profile2D &p2, Scatter3DPtr s) const
void efficiency (Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const
void efficiency (const YODA::Histo1D &h1, const YODA::Histo1D &h2, Scatter2DPtr s) const
void asymm (Histo1DPtr h1, Histo1DPtr h2, Scatter2DPtr s) const
void asymm (const YODA::Histo1D &h1, const YODA::Histo1D &h2, Scatter2DPtr s) const
void integrate (Histo1DPtr h, Scatter2DPtr s) const
void integrate (const Histo1D &h, Scatter2DPtr s) const
Projection "getting" functions
std::set< ConstProjectionPtrgetProjections () const
 Get the contained projections, including recursion.
template<typename PROJ >
const PROJ & getProjection (const std::string &name) const
const ProjectiongetProjection (const std::string &name) const
template<typename PROJ >
const PROJ & get (const std::string &name) const
Projection applying functions
template<typename PROJ >
const PROJ & applyProjection (const Event &evt, const Projection &proj) const
 Apply the supplied projection on event evt.
template<typename PROJ >
const PROJ & applyProjection (const Event &evt, const PROJ &proj) const
 Apply the supplied projection on event evt.
template<typename PROJ >
const PROJ & applyProjection (const Event &evt, const std::string &name) const
template<typename PROJ >
const PROJ & apply (const Event &evt, const Projection &proj) const
template<typename PROJ >
const PROJ & apply (const Event &evt, const PROJ &proj) const
template<typename PROJ >
const PROJ & apply (const Event &evt, const std::string &name) const

Protected Member Functions

LoggetLog () const
 Get a Log object based on the name() property of the calling analysis object.
double crossSection () const
 Get the process cross-section in pb. Throws if this hasn't been set.
double crossSectionPerEvent () const
size_t numEvents () const
double sumOfWeights () const
ProjectionHandlergetProjHandler () const
 Get a reference to the ProjectionHandler for this thread.
const Projection_applyProjection (const Event &evt, const std::string &name) const
const Projection_applyProjection (const Event &evt, const Projection &proj) const
Histogram paths
const std::string histoDir () const
 Get the canonical histogram "directory" path for this analysis.
const std::string histoPath (const std::string &hname) const
 Get the canonical histogram path for the named histogram in this analysis.
const std::string histoPath (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
 Get the canonical histogram path for the numbered histogram in this analysis.
const std::string makeAxisCode (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
 Get the internal histogram name for given d, x and y (cf. HepData)
Histogram reference data
const YODA::Scatter2D & refData (const string &hname) const
const YODA::Scatter2D & refData (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
template<typename T >
const T & refData (const string &hname) const
template<typename T >
const T & refData (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
Counter booking
CounterPtr bookCounter (const std::string &name, const std::string &title="")
 Book a counter.
CounterPtr bookCounter (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId, const std::string &title="")
1D histogram booking
Histo1DPtr bookHisto1D (const std::string &name, size_t nbins, double lower, double upper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D histogram with nbins uniformly distributed across the range lower - upper .
Histo1DPtr bookHisto1D (const std::string &name, const std::vector< double > &binedges, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D histogram with non-uniform bins defined by the vector of bin edges binedges .
Histo1DPtr bookHisto1D (const std::string &name, const Scatter2D &refscatter, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D histogram with binning from a reference scatter.
Histo1DPtr bookHisto1D (const std::string &name, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D histogram, using the binnings in the reference data histogram.
Histo1DPtr bookHisto1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
2D histogram booking
Histo2DPtr bookHisto2D (const std::string &name, size_t nxbins, double xlower, double xupper, size_t nybins, double ylower, double yupper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="", const std::string &ztitle="")
Histo2DPtr bookHisto2D (const std::string &name, const std::vector< double > &xbinedges, const std::vector< double > &ybinedges, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="", const std::string &ztitle="")
1D profile histogram booking
Profile1DPtr bookProfile1D (const std::string &name, size_t nbins, double lower, double upper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D profile histogram with nbins uniformly distributed across the range lower - upper .
Profile1DPtr bookProfile1D (const std::string &name, const std::vector< double > &binedges, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D profile histogram with non-uniform bins defined by the vector of bin edges binedges .
Profile1DPtr bookProfile1D (const std::string &name, const Scatter2D &refscatter, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D profile histogram with binning from a reference scatter.
Profile1DPtr bookProfile1D (const std::string &name, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 1D profile histogram, using the binnings in the reference data histogram.
Profile1DPtr bookProfile1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
2D profile histogram booking
Profile2DPtr bookProfile2D (const std::string &name, size_t nxbins, double xlower, double xupper, size_t nybins, double ylower, double yupper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="", const std::string &ztitle="")
Profile2DPtr bookProfile2D (const std::string &name, const std::vector< double > &xbinedges, const std::vector< double > &ybinedges, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="", const std::string &ztitle="")
2D scatter booking

Book a 2D profile histogram with binning from a reference scatter.

Scatter2DPtr bookScatter2D (const std::string &name, bool copy_pts=false, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 2-dimensional data point set with the given name.
Scatter2DPtr bookScatter2D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId, bool copy_pts=false, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 2-dimensional data point set, using the binnings in the reference data histogram.
Scatter2DPtr bookScatter2D (const std::string &name, size_t npts, double lower, double upper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
 Book a 2-dimensional data point set with equally spaced x-points in a range.
Scatter2DPtr bookScatter2D (const std::string &hname, const std::vector< double > &binedges, const std::string &title, const std::string &xtitle, const std::string &ytitle)
 Book a 2-dimensional data point set based on provided contiguous "bin edges".
Data object registration, retrieval, and removal
void addAnalysisObject (AnalysisObjectPtr ao)
 Register a data object in the histogram system.
template<typename AO >
const std::shared_ptr< AO > getAnalysisObject (const std::string &name) const
template<typename AO >
std::shared_ptr< AO > getAnalysisObject (const std::string &name)
void removeAnalysisObject (const std::string &path)
 Unregister a data object from the histogram system (by name)
void removeAnalysisObject (AnalysisObjectPtr ao)
 Unregister a data object from the histogram system (by pointer)
const Histo1DPtr getHisto1D (const std::string &name) const
 Get a named Histo1D object from the histogram system.
Histo1DPtr getHisto1D (const std::string &name)
 Get a named Histo1D object from the histogram system (non-const)
const Histo1DPtr getHisto1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
 Get a Histo1D object from the histogram system by axis ID codes (non-const)
Histo1DPtr getHisto1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId)
 Get a Histo1D object from the histogram system by axis ID codes (non-const)
const Profile1DPtr getProfile1D (const std::string &name) const
 Get a named Profile1D object from the histogram system.
Profile1DPtr getProfile1D (const std::string &name)
 Get a named Profile1D object from the histogram system (non-const)
const Profile1DPtr getProfile1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
 Get a Profile1D object from the histogram system by axis ID codes (non-const)
Profile1DPtr getProfile1D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId)
 Get a Profile1D object from the histogram system by axis ID codes (non-const)
const Scatter2DPtr getScatter2D (const std::string &name) const
 Get a named Scatter2D object from the histogram system.
Scatter2DPtr getScatter2D (const std::string &name)
 Get a named Scatter2D object from the histogram system (non-const)
const Scatter2DPtr getScatter2D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId) const
 Get a Scatter2D object from the histogram system by axis ID codes (non-const)
Scatter2DPtr getScatter2D (unsigned int datasetId, unsigned int xAxisId, unsigned int yAxisId)
 Get a Scatter2D object from the histogram system by axis ID codes (non-const)
Projection registration functions
template<typename PROJ >
const PROJ & declareProjection (const PROJ &proj, const std::string &name)
 Register a contained projection.
template<typename PROJ >
const PROJ & declare (const PROJ &proj, const std::string &name)
 Register a contained projection (user-facing version)
template<typename PROJ >
const PROJ & addProjection (const PROJ &proj, const std::string &name)
 Register a contained projection (user-facing version)
const Projection_declareProjection (const Projection &proj, const std::string &name)
 Untemplated function to do the work...

Protected Attributes

bool _allowProjReg
 Flag to forbid projection registration in analyses until the init phase.

Private Attributes

bool _use_fiducial_lepton_efficiency
 Fiducial efficiencies to model the effects of the ATLAS detector.
vector< string > _signal_regions
 List of signal regions and event counts per signal region.
map< string, double > _eventCountsPerSR
Histo1DPtr _h_HTlep_all
 Histograms.
Histo1DPtr _h_HTjets_all
Histo1DPtr _h_MET_all
Histo1DPtr _h_Meff_all
Histo1DPtr _h_pt_1_3l
Histo1DPtr _h_pt_2_3l
Histo1DPtr _h_pt_3_3l
Histo1DPtr _h_pt_1_2ltau
Histo1DPtr _h_pt_2_2ltau
Histo1DPtr _h_pt_3_2ltau
Histo1DPtr _h_e_n
Histo1DPtr _h_mu_n
Histo1DPtr _h_tau_n
Histo1DPtr _h_excluded

Detailed Description

Definition at line 14 of file ATLAS_2012_I1204447.cc.


Constructor & Destructor Documentation

ATLAS_2012_I1204447 ( ) [inline]

Constructor.

Definition at line 18 of file ATLAS_2012_I1204447.cc.

      : Analysis("ATLAS_2012_I1204447") {  }

Member Function Documentation

const Projection & _applyProjection ( const Event evt,
const std::string &  name 
) const [protected, inherited]

Non-templated version of string-based applyProjection, to work around header dependency issue.

Definition at line 22 of file ProjectionApplier.cc.

                                                                                  {
    return evt.applyProjection(getProjection(name));
  }
const Projection & _applyProjection ( const Event evt,
const Projection proj 
) const [protected, inherited]

Non-templated version of proj-based applyProjection, to work around header dependency issue.

Definition at line 28 of file ProjectionApplier.cc.

                                                                                      {
    return evt.applyProjection(proj);
  }
const Projection & _declareProjection ( const Projection proj,
const std::string &  name 
) [protected, inherited]

Untemplated function to do the work...

Definition at line 34 of file ProjectionApplier.cc.

                                                                             {
    if (!_allowProjReg) {
      cerr << "Trying to register projection '"
           << proj.name() << "' before init phase in '" << this->name() << "'." << endl;
      exit(2);
    }
    const Projection& reg = getProjHandler().registerProjection(*this, proj, name);
    return reg;
  }
void addAnalysisObject ( AnalysisObjectPtr  ao) [protected, inherited]

Register a data object in the histogram system.

Todo:
2D versions of integrate... defined how, exactly?!?

Definition at line 795 of file Analysis.cc.

                                                       {
    _analysisobjects.push_back(ao);
  }
const PROJ& addProjection ( const PROJ &  proj,
const std::string &  name 
) [inline, protected, inherited]

Register a contained projection (user-facing version)

Deprecated:
Use declareProjection() or declare()
Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 157 of file ProjectionApplier.hh.

{ return declareProjection(proj, name); }
const vector<AnalysisObjectPtr>& analysisObjects ( ) const [inline, inherited]

List of registered analysis data objects.

Definition at line 811 of file Analysis.hh.

                                                             {
      return _analysisobjects;
    }
void analyze ( const Event event) [inline, virtual]

Perform the per-event analysis.

Todo:
This could benefit from a tau finder projection
Todo:
Huh? Unstable taus with no decay vtx? Can use Particle.isStable()? But why in this situation?

Implements Analysis.

Definition at line 88 of file ATLAS_2012_I1204447.cc.

                                     {

      // Muons
      Particles muon_candidates;
      const Particles charged_tracks    = apply<ChargedFinalState>(event, "CFS").particles();
      const Particles visible_particles = apply<VisibleFinalState>(event, "VFS").particles();
      foreach (const Particle& mu, apply<IdentifiedFinalState>(event, "muons").particlesByPt()) {
        // Calculate pTCone30 variable (pT of all tracks within dR<0.3 - pT of muon itself)
        double pTinCone = -mu.pT();
        foreach (const Particle& track, charged_tracks) {
          if (deltaR(mu.momentum(), track.momentum()) < 0.3)
            pTinCone += track.pT();
        }

        // Calculate eTCone30 variable (pT of all visible particles within dR<0.3)
        double eTinCone = 0.;
        foreach (const Particle& visible_particle, visible_particles) {
          if (visible_particle.abspid() != PID::MUON && inRange(deltaR(mu.momentum(), visible_particle.momentum()), 0.1, 0.3))
            eTinCone += visible_particle.pT();
        }

        // Apply reconstruction efficiency and simulate reco
        int muon_id = 13;
        if ( mu.hasAncestor(15) || mu.hasAncestor(-15)) muon_id = 14;
        const double eff = (_use_fiducial_lepton_efficiency) ? apply_reco_eff(muon_id, mu) : 1.0;
        const bool keep_muon = rand()/static_cast<double>(RAND_MAX) <= eff;

        // Keep muon if pTCone30/pT < 0.15 and eTCone30/pT < 0.2 and reconstructed
        if (keep_muon && pTinCone/mu.pT() <= 0.15 && eTinCone/mu.pT() < 0.2)
          muon_candidates.push_back(mu);
      }


      // Electrons
      Particles electron_candidates;
      foreach (const Particle& e, apply<IdentifiedFinalState>(event, "elecs").particlesByPt()) {
        // Neglect electrons in crack regions
        if (inRange(e.abseta(), 1.37, 1.52)) continue;

        // Calculate pTCone30 variable (pT of all tracks within dR<0.3 - pT of electron itself)
        double pTinCone = -e.pT();
        foreach (const Particle& track, charged_tracks) {
          if (deltaR(e.momentum(), track.momentum()) < 0.3) pTinCone += track.pT();
        }

        // Calculate eTCone30 variable (pT of all visible particles (except muons) within dR<0.3)
        double eTinCone = 0.;
        foreach (const Particle& visible_particle, visible_particles) {
          if (visible_particle.abspid() != PID::MUON && inRange(deltaR(e.momentum(), visible_particle.momentum()), 0.1, 0.3))
            eTinCone += visible_particle.pT();
        }

        // Apply reconstruction efficiency and simulate reco
        int elec_id = 11;
        if (e.hasAncestor(15) || e.hasAncestor(-15)) elec_id = 12;
        const double eff = (_use_fiducial_lepton_efficiency) ? apply_reco_eff(elec_id, e) : 1.0;
        const bool keep_elec = rand()/static_cast<double>(RAND_MAX) <= eff;

        // Keep electron if pTCone30/pT < 0.13 and eTCone30/pT < 0.2 and reconstructed
        if (keep_elec && pTinCone/e.pT() <= 0.13 && eTinCone/e.pT() < 0.2)
          electron_candidates.push_back(e);
      }


      // Taus
      /// @todo This could benefit from a tau finder projection
      Particles tau_candidates;
      foreach (const Particle& tau, apply<UnstableFinalState>(event, "UFS").particlesByPt()) {
        // Only pick taus out of all unstable particles
        if (tau.abspid() != PID::TAU) continue;

        // Check that tau has decayed into daughter particles
        /// @todo Huh? Unstable taus with no decay vtx? Can use Particle.isStable()? But why in this situation?
        if (tau.genParticle()->end_vertex() == 0) continue;

        // Calculate visible tau pT from pT of tau neutrino in tau decay for pT and |eta| cuts
        FourMomentum daughter_tau_neutrino_momentum = get_tau_neutrino_mom(tau);
        Particle tau_vis = tau;
        tau_vis.setMomentum(tau.momentum()-daughter_tau_neutrino_momentum);
        // keep only taus in certain eta region and above 15 GeV of visible tau pT
        if ( tau_vis.pT() <= 15.0*GeV || tau_vis.abseta() > 2.5) continue;

        // Get prong number (number of tracks) in tau decay and check if tau decays leptonically
        unsigned int nprong = 0;
        bool lep_decaying_tau = false;
        get_prong_number(tau.genParticle(), nprong, lep_decaying_tau);

        // Apply reconstruction efficiency
        int tau_id = 15;
        if (nprong == 1) tau_id = 15;
        else if (nprong == 3) tau_id = 16;

        // Get fiducial lepton efficiency simulate reco efficiency
        const double eff = (_use_fiducial_lepton_efficiency) ? apply_reco_eff(tau_id, tau_vis) : 1.0;
        const bool keep_tau = rand()/static_cast<double>(RAND_MAX) <= eff;

        // Keep tau if nprong = 1, it decays hadronically, and it's reconstructed by the detector
        if ( !lep_decaying_tau && nprong == 1 && keep_tau) tau_candidates.push_back(tau_vis);
      }


      // Jets (all anti-kt R=0.4 jets with pT > 25 GeV and eta < 4.9)
      Jets jet_candidates;
      foreach (const Jet& jet, apply<FastJets>(event, "AntiKtJets04").jetsByPt(25*GeV)) {
        if (jet.abseta() < 4.9) jet_candidates.push_back(jet);
      }


      // ETmiss
      Particles vfs_particles = apply<VisibleFinalState>(event, "VFS").particles();
      FourMomentum pTmiss;
      foreach (const Particle& p, vfs_particles) pTmiss -= p.momentum();
      double eTmiss = pTmiss.pT()/GeV;


      //------------------
      // Overlap removal

      // electron - electron
      Particles electron_candidates_2;
      for (size_t ie = 0; ie < electron_candidates.size(); ++ie) {
        const Particle & e = electron_candidates[ie];
        bool away = true;
        // If electron pair within dR < 0.1: remove electron with lower pT
        for (size_t ie2=0; ie2 < electron_candidates_2.size(); ++ie2) {
          if ( deltaR( e.momentum(), electron_candidates_2[ie2].momentum()) < 0.1 ) {
            away = false;
            break;
          }
        }
        // If isolated keep it
        if ( away )
          electron_candidates_2.push_back( e );
      }
      // jet - electron
      Jets recon_jets;
      foreach (const Jet& jet, jet_candidates) {
        bool away = true;
        // if jet within dR < 0.2 of electron: remove jet
        foreach (const Particle& e, electron_candidates_2) {
          if (deltaR(e.momentum(), jet.momentum()) < 0.2) {
            away = false;
            break;
          }
        }
        // jet - tau
        if (away)  {
          // If jet within dR < 0.2 of tau: remove jet
          foreach (const Particle& tau, tau_candidates) {
            if (deltaR(tau.momentum(), jet.momentum()) < 0.2) {
              away = false;
              break;
            }
          }
        }
        // If isolated keep it
        if ( away )
          recon_jets.push_back( jet );
      }


      // electron - jet
      Particles recon_leptons, recon_e;
      for (size_t ie = 0; ie < electron_candidates_2.size(); ++ie) {
        const Particle& e = electron_candidates_2[ie];
        // If electron within 0.2 < dR < 0.4 from any jets: remove electron
        bool away = true;
        foreach (const Jet& jet, recon_jets) {
          if (deltaR(e.momentum(), jet.momentum()) < 0.4) {
            away = false;
            break;
          }
        }
        // electron - muon
        // if electron within dR < 0.1 of a muon: remove electron
        if (away) {
          foreach (const Particle& mu, muon_candidates) {
            if (deltaR(mu.momentum(), e.momentum()) < 0.1) {
              away = false;
              break;
            }
          }
        }
        // If isolated keep it
        if (away)  {
          recon_e += e;
          recon_leptons += e;
        }
      }


      // tau - electron
      Particles recon_tau;
      foreach ( const Particle& tau, tau_candidates ) {
        bool away = true;
        // If tau within dR < 0.2 of an electron: remove tau
        foreach ( const Particle& e, recon_e ) {
          if (deltaR( tau.momentum(), e.momentum()) < 0.2) {
            away = false;
            break;
          }
        }
        // tau - muon
        // If tau within dR < 0.2 of a muon: remove tau
        if (away)  {
          foreach (const Particle& mu, muon_candidates) {
            if (deltaR(tau.momentum(), mu.momentum()) < 0.2) {
              away = false;
              break;
            }
          }
        }
        // If isolated keep it
        if (away) recon_tau.push_back( tau );
      }

      // Muon - jet isolation
      Particles recon_mu, trigger_mu;
      // If muon within dR < 0.4 of a jet, remove muon
      foreach (const Particle& mu, muon_candidates) {
        bool away = true;
        foreach (const Jet& jet, recon_jets) {
          if ( deltaR( mu.momentum(), jet.momentum()) < 0.4 ) {
            away = false;
            break;
          }
        }
        if (away) {
          recon_mu.push_back( mu );
          recon_leptons.push_back( mu );
          if (mu.abseta() < 2.4) trigger_mu.push_back( mu );
        }
      }

      // End overlap removal
      //------------------


      // Jet cleaning
      if (rand()/static_cast<double>(RAND_MAX) <= 0.42) {
        foreach (const Jet& jet, recon_jets) {
          const double eta = jet.rapidity();
          const double phi = jet.azimuthalAngle(MINUSPI_PLUSPI);
          if (jet.pT() > 25*GeV && inRange(eta, -0.1, 1.5) && inRange(phi, -0.9, -0.5)) vetoEvent;
        }
      }


      // Post-isolation event cuts
      // Require at least 3 charged tracks in event
      if (charged_tracks.size() < 3) vetoEvent;

      // And at least one e/mu passing trigger
      if (!( !recon_e   .empty() && recon_e[0]   .pT() > 25*GeV)  &&
          !( !trigger_mu.empty() && trigger_mu[0].pT() > 25*GeV) ) {
        MSG_DEBUG("Hardest lepton fails trigger");
        vetoEvent;
      }

      // And only accept events with at least 2 electrons and muons and at least 3 leptons in total
      if (recon_mu.size() + recon_e.size() + recon_tau.size() < 3 || recon_leptons.size() < 2) vetoEvent;

      // Now it's worth getting the event weight
      const double weight = event.weight();

      // Sort leptons by decreasing pT
      sortByPt(recon_leptons);
      sortByPt(recon_tau);

      // Calculate HTlep, fill lepton pT histograms & store chosen combination of 3 leptons
      double HTlep = 0.;
      Particles chosen_leptons;
      if ( recon_leptons.size() > 2 ) {
        _h_pt_1_3l->fill(recon_leptons[0].perp()/GeV, weight);
        _h_pt_2_3l->fill(recon_leptons[1].perp()/GeV, weight);
        _h_pt_3_3l->fill(recon_leptons[2].perp()/GeV, weight);
        HTlep = (recon_leptons[0].pT() + recon_leptons[1].pT() + recon_leptons[2].pT())/GeV;
        chosen_leptons.push_back( recon_leptons[0] );
        chosen_leptons.push_back( recon_leptons[1] );
        chosen_leptons.push_back( recon_leptons[2] );
      }
      else {
        _h_pt_1_2ltau->fill(recon_leptons[0].perp()/GeV, weight);
        _h_pt_2_2ltau->fill(recon_leptons[1].perp()/GeV, weight);
        _h_pt_3_2ltau->fill(recon_tau[0].perp()/GeV,     weight);
        HTlep = (recon_leptons[0].pT() + recon_leptons[1].pT() + recon_tau[0].pT())/GeV ;
        chosen_leptons.push_back( recon_leptons[0] );
        chosen_leptons.push_back( recon_leptons[1] );
        chosen_leptons.push_back( recon_tau[0] );
      }

      // Number of prompt e/mu and had taus
      _h_e_n  ->fill(recon_e.size()  , weight);
      _h_mu_n ->fill(recon_mu.size() , weight);
      _h_tau_n->fill(recon_tau.size(), weight);

      // Calculate HTjets
      double HTjets = 0.;
      foreach ( const Jet & jet, recon_jets )
        HTjets += jet.perp()/GeV;

      // Calculate meff
      double meff = eTmiss + HTjets;
      Particles all_leptons;
      foreach ( const Particle & e , recon_e  )  {
        meff += e.perp()/GeV;
        all_leptons.push_back( e );
      }
      foreach ( const Particle & mu, recon_mu )  {
        meff += mu.perp()/GeV;
        all_leptons.push_back( mu );
      }
      foreach ( const Particle & tau, recon_tau )  {
        meff += tau.perp()/GeV;
        all_leptons.push_back( tau );
      }

      // Fill histogram of kinematic variables
      _h_HTlep_all ->fill(HTlep , weight);
      _h_HTjets_all->fill(HTjets, weight);
      _h_MET_all   ->fill(eTmiss, weight);
      _h_Meff_all  ->fill(meff  , weight);

      // Determine signal region (3l/2ltau, onZ/offZ)
      string basic_signal_region;
      if ( recon_mu.size() + recon_e.size() > 2 )
        basic_signal_region += "3l_";
      else if ( (recon_mu.size() + recon_e.size() == 2) && (recon_tau.size() > 0))
        basic_signal_region += "2ltau_";
      // Is there an OSSF pair or a three lepton combination with an invariant mass close to the Z mass
      int onZ = isonZ(chosen_leptons);
      if      (onZ == 1)   basic_signal_region += "onZ";
      else if (onZ == 0)   basic_signal_region += "offZ";
      // Check in which signal regions this event falls and adjust event counters
      fillEventCountsPerSR(basic_signal_region, onZ, HTlep, eTmiss, HTjets, meff, weight);
    }
const PROJ& apply ( const Event evt,
const Projection proj 
) const [inline, inherited]

Apply the supplied projection on event evt (user-facing alias).

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 80 of file ProjectionApplier.hh.

{ return applyProjection<PROJ>(evt, proj); }
const PROJ& apply ( const Event evt,
const PROJ &  proj 
) const [inline, inherited]

Apply the supplied projection on event evt (user-facing alias).

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 92 of file ProjectionApplier.hh.

{ return applyProjection<PROJ>(evt, proj); }
const PROJ& apply ( const Event evt,
const std::string &  name 
) const [inline, inherited]

Apply the supplied projection on event evt (user-facing alias).

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 104 of file ProjectionApplier.hh.

{ return applyProjection<PROJ>(evt, name); }
double apply_reco_eff ( int  flavor,
const Particle p 
) [inline]

Function giving fiducial lepton efficiency.

Definition at line 661 of file ATLAS_2012_I1204447.cc.

                                                         {
      float pt = p.pT()/GeV;
      float eta = p.eta();

      double eff = 0.;
      //double err = 0.;

      if (flavor == 11) { // weight prompt electron -- now including data/MC ID SF in eff.
        //float rho = 0.820;
        float p0 = 7.34;  float p1 = 0.8977;
        //float ep0= 0.5 ;  float ep1= 0.0087;
        eff = p1 - p0/pt;

        //double err0 = ep0/pt; // d(eff)/dp0
        //double err1 = ep1;    // d(eff)/dp1
        //err = sqrt(err0*err0 + err1*err1 - 2*rho*err0*err1);

        double avgrate = 0.6867;
        float wz_ele_eta[] = {0.588717,0.603674,0.666135,0.747493,0.762202,0.675051,0.751606,0.745569,0.665333,0.610432,0.592693,};
        //float ewz_ele_eta[] ={0.00292902,0.002476,0.00241209,0.00182319,0.00194339,0.00299785,0.00197339,0.00182004,0.00241793,0.00245997,0.00290394,};
        int ibin = 3;

        if (eta >= -2.5 && eta < -2.0) ibin = 0;
        if (eta >= -2.0 && eta < -1.5) ibin = 1;
        if (eta >= -1.5 && eta < -1.0) ibin = 2;
        if (eta >= -1.0 && eta < -0.5) ibin = 3;
        if (eta >= -0.5 && eta < -0.1) ibin = 4;
        if (eta >= -0.1 && eta <  0.1) ibin = 5;
        if (eta >=  0.1 && eta <  0.5) ibin = 6;
        if (eta >=  0.5 && eta <  1.0) ibin = 7;
        if (eta >=  1.0 && eta <  1.5) ibin = 8;
        if (eta >=  1.5 && eta <  2.0) ibin = 9;
        if (eta >=  2.0 && eta <  2.5) ibin = 10;

        double eff_eta = wz_ele_eta[ibin];
        //double err_eta = ewz_ele_eta[ibin];

        eff = (eff*eff_eta)/avgrate;
      }

      if (flavor == 12)  { // weight electron from tau
        //float rho = 0.884;
        float p0 = 6.799;  float p1 = 0.842;
        //float ep0= 0.664;  float ep1= 0.016;
        eff = p1 - p0/pt;

        //double err0 = ep0/pt; // d(eff)/dp0
        //double err1 = ep1;    // d(eff)/dp1
        //err = sqrt(err0*err0 + err1*err1 - 2*rho*err0*err1);

        double avgrate = 0.5319;
        float wz_elet_eta[] = {0.468945,0.465953,0.489545,0.58709,0.59669,0.515829,0.59284,0.575828,0.498181,0.463536,0.481738,};
        //float ewz_elet_eta[] ={0.00933795,0.00780868,0.00792679,0.00642083,0.00692652,0.0101568,0.00698452,0.00643524,0.0080002,0.00776238,0.0094699,};
        int ibin = 3;

        if (eta >= -2.5 && eta < -2.0) ibin = 0;
        if (eta >= -2.0 && eta < -1.5) ibin = 1;
        if (eta >= -1.5 && eta < -1.0) ibin = 2;
        if (eta >= -1.0 && eta < -0.5) ibin = 3;
        if (eta >= -0.5 && eta < -0.1) ibin = 4;
        if (eta >= -0.1 && eta <  0.1) ibin = 5;
        if (eta >=  0.1 && eta <  0.5) ibin = 6;
        if (eta >=  0.5 && eta <  1.0) ibin = 7;
        if (eta >=  1.0 && eta <  1.5) ibin = 8;
        if (eta >=  1.5 && eta <  2.0) ibin = 9;
        if (eta >=  2.0 && eta <  2.5) ibin = 10;

        double eff_eta = wz_elet_eta[ibin];
        //double err_eta = ewz_elet_eta[ibin];

        eff = (eff*eff_eta)/avgrate;

      }

      if (flavor == 13)  {// weight prompt muon

        //if eta>0.1
        float p0 = -18.21;  float p1 = 14.83;  float p2 = 0.9312;
        //float ep0= 5.06;    float ep1= 1.9;    float ep2=0.00069;

        if ( fabs(eta) < 0.1)  {
          p0  = 7.459; p1 = 2.615; p2  = 0.5138;
          //ep0 = 10.4; ep1 = 4.934; ep2 = 0.0034;
        }

        double arg = ( pt-p0 )/( 2.*p1 ) ;
        eff = 0.5 * p2 * (1.+erf(arg));
        //err = 0.1*eff;
      }

      if (flavor == 14)  {// weight muon from tau

        if (fabs(eta) < 0.1) {
          float p0 = -1.756;  float p1 = 12.38;  float p2 = 0.4441;
          //float ep0= 10.39;   float ep1= 7.9;  float ep2=0.022;
          double arg = ( pt-p0 )/( 2.*p1 ) ;
          eff = 0.5 * p2 * (1.+erf(arg));
          //err = 0.1*eff;
        }
        else {
          float p0 = 2.102;  float p1 = 0.8293;
          //float ep0= 0.271;  float ep1= 0.0083;
          eff = p1 - p0/pt;
          //double err0 = ep0/pt; // d(eff)/dp0
          //double err1 = ep1;    // d(eff)/dp1
          //err = sqrt(err0*err0 + err1*err1 - 2*rho*err0*err1);
        }
      }

      if (flavor == 15)  {// weight hadronic tau 1p

        float wz_tau1p[] = {0.0249278,0.146978,0.225049,0.229212,0.21519,0.206152,0.201559,0.197917,0.209249,0.228336,0.193548,};
        //float ewz_tau1p[] ={0.00178577,0.00425252,0.00535052,0.00592126,0.00484684,0.00612941,0.00792099,0.0083006,0.0138307,0.015568,0.0501751,};
        int ibin = 0;
        if (pt > 15)  ibin = 1;
        if (pt > 20)  ibin = 2;
        if (pt > 25)  ibin = 3;
        if (pt > 30)  ibin = 4;
        if (pt > 40)  ibin = 5;
        if (pt > 50)  ibin = 6;
        if (pt > 60)  ibin = 7;
        if (pt > 80)  ibin = 8;
        if (pt > 100) ibin = 9;
        if (pt > 200) ibin = 10;

        eff = wz_tau1p[ibin];
        //err = ewz_tau1p[ibin];


        double avgrate = 0.1718;
        float wz_tau1p_eta[] = {0.162132,0.176393,0.139619,0.178813,0.185144,0.210027,0.203937,0.178688,0.137034,0.164216,0.163713,};
        //float ewz_tau1p_eta[] ={0.00706705,0.00617989,0.00506798,0.00525172,0.00581865,0.00865675,0.00599245,0.00529877,0.00506368,0.00617025,0.00726219,};

        ibin = 3;
        if (eta >= -2.5 && eta < -2.0) ibin = 0;
        if (eta >= -2.0 && eta < -1.5) ibin = 1;
        if (eta >= -1.5 && eta < -1.0) ibin = 2;
        if (eta >= -1.0 && eta < -0.5) ibin = 3;
        if (eta >= -0.5 && eta < -0.1) ibin = 4;
        if (eta >= -0.1 && eta <  0.1) ibin = 5;
        if (eta >=  0.1 && eta <  0.5) ibin = 6;
        if (eta >=  0.5 && eta <  1.0) ibin = 7;
        if (eta >=  1.0 && eta <  1.5) ibin = 8;
        if (eta >=  1.5 && eta <  2.0) ibin = 9;
        if (eta >=  2.0 && eta <  2.5) ibin = 10;

        double eff_eta = wz_tau1p_eta[ibin];
        //double err_eta = ewz_tau1p_eta[ibin];

        eff = (eff*eff_eta)/avgrate;
      }

      if (flavor == 16)  { //weight hadronic tau 3p

        float wz_tau3p[] = {0.000587199,0.00247181,0.0013031,0.00280112,};
        //float ewz_tau3p[] ={0.000415091,0.000617187,0.000582385,0.00197792,};

        int ibin = 0;
        if (pt > 15) ibin = 1;
        if (pt > 20) ibin = 2;
        if (pt > 40) ibin = 3;
        if (pt > 80) ibin = 4;

        eff = wz_tau3p[ibin];
        //err = ewz_tau3p[ibin];
      }

      return eff;
    }
const PROJ& applyProjection ( const Event evt,
const Projection proj 
) const [inline, inherited]

Apply the supplied projection on event evt.

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 74 of file ProjectionApplier.hh.

                                                                                {
      return pcast<PROJ>(_applyProjection(evt, proj));
    }
const PROJ& applyProjection ( const Event evt,
const PROJ &  proj 
) const [inline, inherited]

Apply the supplied projection on event evt.

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 86 of file ProjectionApplier.hh.

                                                                          {
      return pcast<PROJ>(_applyProjection(evt, proj));
    }
const PROJ& applyProjection ( const Event evt,
const std::string &  name 
) const [inline, inherited]

Apply the named projection on event evt.

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 98 of file ProjectionApplier.hh.

                                                                               {
      return pcast<PROJ>(_applyProjection(evt, name));
    }
void asymm ( Histo1DPtr  h1,
Histo1DPtr  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram asymmetry calculation.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 674 of file Analysis.cc.

                                                                         {
    const string path = s->path();
    *s = YODA::asymm(*h1, *h2);
    s->setPath(path);
  }
void asymm ( const YODA::Histo1D &  h1,
const YODA::Histo1D &  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram asymmetry calculation.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
virtual std::vector<std::string> authors ( ) const [inline, virtual, inherited]

Names & emails of paper/analysis authors.

Names and email of authors in 'NAME <EMAIL>' format. The first name in the list should be the primary contact person.

Definition at line 133 of file Analysis.hh.

                                                 {
      return info().authors();
    }
const PdgIdPair beamIds ( ) const [inherited]

Incoming beam IDs for this run.

Definition at line 33 of file Analysis.cc.

                                          {
    return handler().beamIds();
  }
const ParticlePair & beams ( ) const [inherited]

Incoming beams for this run.

Definition at line 29 of file Analysis.cc.

                                            {
    return handler().beams();
  }
virtual std::string bibKey ( ) const [inline, virtual, inherited]

BibTeX citation key for this article.

Definition at line 186 of file Analysis.hh.

                                     {
      return info().bibKey();
    }
virtual std::string bibTeX ( ) const [inline, virtual, inherited]

BibTeX citation entry for this article.

Definition at line 191 of file Analysis.hh.

                                     {
      return info().bibTeX();
    }
CounterPtr bookCounter ( const std::string &  name,
const std::string &  title = "" 
) [protected, inherited]

Book a counter.

Definition at line 196 of file Analysis.cc.

                                                        {
                                   // const string& xtitle,
                                   // const string& ytitle) {
    const string path = histoPath(cname);
    CounterPtr ctr = make_shared<Counter>(path, title);
    addAnalysisObject(ctr);
    MSG_TRACE("Made counter " << cname << " for " << name());
    // hist->setAnnotation("XLabel", xtitle);
    // hist->setAnnotation("YLabel", ytitle);
    return ctr;
  }
CounterPtr bookCounter ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId,
const std::string &  title = "" 
) [protected, inherited]

Book a counter, using a path generated from the dataset and axis ID codes

The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.

Definition at line 210 of file Analysis.cc.

                                                        {
                                   // const string& xtitle,
                                   // const string& ytitle) {
    const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
    return bookCounter(axisCode, title);
  }
Histo1DPtr bookHisto1D ( const std::string &  name,
size_t  nbins,
double  lower,
double  upper,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D histogram with nbins uniformly distributed across the range lower - upper .

Definition at line 219 of file Analysis.cc.

                                                         {
    const string path = histoPath(hname);
    Histo1DPtr hist = make_shared<Histo1D>(nbins, lower, upper, path, title);
    addAnalysisObject(hist);
    MSG_TRACE("Made histogram " << hname <<  " for " << name());
    hist->setAnnotation("XLabel", xtitle);
    hist->setAnnotation("YLabel", ytitle);
    return hist;
  }
Histo1DPtr bookHisto1D ( const std::string &  name,
const std::vector< double > &  binedges,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D histogram with non-uniform bins defined by the vector of bin edges binedges .

Definition at line 234 of file Analysis.cc.

                                                         {
    const string path = histoPath(hname);
    Histo1DPtr hist = make_shared<Histo1D>(binedges, path, title);
    addAnalysisObject(hist);
    MSG_TRACE("Made histogram " << hname <<  " for " << name());
    hist->setAnnotation("XLabel", xtitle);
    hist->setAnnotation("YLabel", ytitle);
    return hist;
  }
Histo1DPtr bookHisto1D ( const std::string &  name,
const Scatter2D &  refscatter,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D histogram with binning from a reference scatter.

Definition at line 249 of file Analysis.cc.

                                                         {
    const string path = histoPath(hname);
    Histo1DPtr hist = make_shared<Histo1D>(refscatter, path);
    addAnalysisObject(hist);
    MSG_TRACE("Made histogram " << hname <<  " for " << name());
    hist->setTitle(title);
    hist->setAnnotation("XLabel", xtitle);
    hist->setAnnotation("YLabel", ytitle);
    return hist;
  }
Histo1DPtr bookHisto1D ( const std::string &  name,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D histogram, using the binnings in the reference data histogram.

Definition at line 265 of file Analysis.cc.

                                                         {
    const Scatter2D& refdata = refData(hname);
    return bookHisto1D(hname, refdata, title, xtitle, ytitle);
  }
Histo1DPtr bookHisto1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D histogram, using the binnings in the reference data histogram.

The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.

Definition at line 274 of file Analysis.cc.

                                                         {
    const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
    return bookHisto1D(axisCode, title, xtitle, ytitle);
  }
Histo2DPtr bookHisto2D ( const std::string &  name,
size_t  nxbins,
double  xlower,
double  xupper,
size_t  nybins,
double  ylower,
double  yupper,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "",
const std::string &  ztitle = "" 
) [protected, inherited]

Book a 2D histogram with nxbins and nybins uniformly distributed across the ranges xlower - xupper and ylower - yupper respectively along the x- and y-axis.

Todo:
Add booking methods which take a path, titles and *a reference Scatter from which to book*

Definition at line 289 of file Analysis.cc.

  {
    const string path = histoPath(hname);
    Histo2DPtr hist = make_shared<Histo2D>(nxbins, xlower, xupper, nybins, ylower, yupper, path, title);
    addAnalysisObject(hist);
    MSG_TRACE("Made 2D histogram " << hname <<  " for " << name());
    hist->setAnnotation("XLabel", xtitle);
    hist->setAnnotation("YLabel", ytitle);
    hist->setAnnotation("ZLabel", ztitle);
    return hist;
  }
Histo2DPtr bookHisto2D ( const std::string &  name,
const std::vector< double > &  xbinedges,
const std::vector< double > &  ybinedges,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "",
const std::string &  ztitle = "" 
) [protected, inherited]

Book a 2D histogram with non-uniform bins defined by the vectorx of bin edges xbinedges and ybinedges.

Definition at line 308 of file Analysis.cc.

  {
    const string path = histoPath(hname);
    Histo2DPtr hist = make_shared<Histo2D>(xbinedges, ybinedges, path, title);
    addAnalysisObject(hist);
    MSG_TRACE("Made 2D histogram " << hname <<  " for " << name());
    hist->setAnnotation("XLabel", xtitle);
    hist->setAnnotation("YLabel", ytitle);
    hist->setAnnotation("ZLabel", ztitle);
    return hist;
  }
Profile1DPtr bookProfile1D ( const std::string &  name,
size_t  nbins,
double  lower,
double  upper,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D profile histogram with nbins uniformly distributed across the range lower - upper .

Definition at line 368 of file Analysis.cc.

                                                             {
    const string path = histoPath(hname);
    Profile1DPtr prof = make_shared<Profile1D>(nbins, lower, upper, path, title);
    addAnalysisObject(prof);
    MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
    prof->setAnnotation("XLabel", xtitle);
    prof->setAnnotation("YLabel", ytitle);
    return prof;
  }
Profile1DPtr bookProfile1D ( const std::string &  name,
const std::vector< double > &  binedges,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D profile histogram with non-uniform bins defined by the vector of bin edges binedges .

Definition at line 383 of file Analysis.cc.

                                                             {
    const string path = histoPath(hname);
    Profile1DPtr prof = make_shared<Profile1D>(binedges, path, title);
    addAnalysisObject(prof);
    MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
    prof->setAnnotation("XLabel", xtitle);
    prof->setAnnotation("YLabel", ytitle);
    return prof;
  }
Profile1DPtr bookProfile1D ( const std::string &  name,
const Scatter2D &  refscatter,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D profile histogram with binning from a reference scatter.

Definition at line 398 of file Analysis.cc.

                                                             {
    const string path = histoPath(hname);
    Profile1DPtr prof = make_shared<Profile1D>(refscatter, path);
    addAnalysisObject(prof);
    MSG_TRACE("Made profile histogram " << hname <<  " for " << name());
    prof->setTitle(title);
    prof->setAnnotation("XLabel", xtitle);
    prof->setAnnotation("YLabel", ytitle);
    return prof;
  }
Profile1DPtr bookProfile1D ( const std::string &  name,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D profile histogram, using the binnings in the reference data histogram.

Definition at line 414 of file Analysis.cc.

                                                             {
    const Scatter2D& refdata = refData(hname);
    return bookProfile1D(hname, refdata, title, xtitle, ytitle);
  }
Profile1DPtr bookProfile1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 1D profile histogram, using the binnings in the reference data histogram.

The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.

Definition at line 423 of file Analysis.cc.

                                                             {
    const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
    return bookProfile1D(axisCode, title, xtitle, ytitle);
  }
Profile2DPtr bookProfile2D ( const std::string &  name,
size_t  nxbins,
double  xlower,
double  xupper,
size_t  nybins,
double  ylower,
double  yupper,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "",
const std::string &  ztitle = "" 
) [protected, inherited]

Book a 2D profile histogram with nxbins and nybins uniformly distributed across the ranges xlower - xupper and ylower - yupper respectively along the x- and y-axis.

Definition at line 436 of file Analysis.cc.

  {
    const string path = histoPath(hname);
    Profile2DPtr prof = make_shared<Profile2D>(nxbins, xlower, xupper, nybins, ylower, yupper, path, title);
    addAnalysisObject(prof);
    MSG_TRACE("Made 2D profile histogram " << hname <<  " for " << name());
    prof->setAnnotation("XLabel", xtitle);
    prof->setAnnotation("YLabel", ytitle);
    prof->setAnnotation("ZLabel", ztitle);
    return prof;
  }
Profile2DPtr bookProfile2D ( const std::string &  name,
const std::vector< double > &  xbinedges,
const std::vector< double > &  ybinedges,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "",
const std::string &  ztitle = "" 
) [protected, inherited]

Book a 2D profile histogram with non-uniform bins defined by the vectorx of bin edges xbinedges and ybinedges.

Definition at line 455 of file Analysis.cc.

  {
    const string path = histoPath(hname);
    Profile2DPtr prof = make_shared<Profile2D>(xbinedges, ybinedges, path, title);
    addAnalysisObject(prof);
    MSG_TRACE("Made 2D profile histogram " << hname <<  " for " << name());
    prof->setAnnotation("XLabel", xtitle);
    prof->setAnnotation("YLabel", ytitle);
    prof->setAnnotation("ZLabel", ztitle);
    return prof;
  }
Scatter2DPtr bookScatter2D ( const std::string &  name,
bool  copy_pts = false,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 2-dimensional data point set with the given name.

Note:
Unlike histogram booking, scatter booking by default makes no attempt to use reference data to pre-fill the data object. If you want this, which is sometimes useful e.g. when the x-position is not really meaningful and can't be extracted from the data, then set the copy_pts parameter to true. This creates points to match the reference data's x values and errors, but with the y values and errors zeroed... assuming that there is a reference histo with the same name: if there isn't, an exception will be thrown.

Definition at line 525 of file Analysis.cc.

                                                             {
    Scatter2DPtr s;
    const string path = histoPath(hname);
    if (copy_pts) {
      const Scatter2D& refdata = refData(hname);
      s = make_shared<Scatter2D>(refdata, path);
      foreach (Point2D& p, s->points()) p.setY(0, 0);
    } else {
      s = make_shared<Scatter2D>(path);
    }
    addAnalysisObject(s);
    MSG_TRACE("Made scatter " << hname <<  " for " << name());
    s->setTitle(title);
    s->setAnnotation("XLabel", xtitle);
    s->setAnnotation("YLabel", ytitle);
    return s;
  }
Scatter2DPtr bookScatter2D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId,
bool  copy_pts = false,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 2-dimensional data point set, using the binnings in the reference data histogram.

The paper, dataset and x/y-axis IDs will be used to build the histo name in the HepData standard way.

Note:
Unlike histogram booking, scatter booking by default makes no attempt to use reference data to pre-fill the data object. If you want this, which is sometimes useful e.g. when the x-position is not really meaningful and can't be extracted from the data, then set the copy_pts parameter to true. This creates points to match the reference data's x values and errors, but with the y values and errors zeroed.

Definition at line 515 of file Analysis.cc.

                                                             {
    const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId);
    return bookScatter2D(axisCode, copy_pts, title, xtitle, ytitle);
  }
Scatter2DPtr bookScatter2D ( const std::string &  name,
size_t  npts,
double  lower,
double  upper,
const std::string &  title = "",
const std::string &  xtitle = "",
const std::string &  ytitle = "" 
) [protected, inherited]

Book a 2-dimensional data point set with equally spaced x-points in a range.

The y values and errors will be set to 0.

Definition at line 548 of file Analysis.cc.

                                                             {
    const string path = histoPath(hname);
    Scatter2DPtr s = make_shared<Scatter2D>(path);
    const double binwidth = (upper-lower)/npts;
    for (size_t pt = 0; pt < npts; ++pt) {
      const double bincentre = lower + (pt + 0.5) * binwidth;
      s->addPoint(bincentre, 0, binwidth/2.0, 0);
    }
    addAnalysisObject(s);
    MSG_TRACE("Made scatter " << hname <<  " for " << name());
    s->setTitle(title);
    s->setAnnotation("XLabel", xtitle);
    s->setAnnotation("YLabel", ytitle);
    return s;
  }
Scatter2DPtr bookScatter2D ( const std::string &  hname,
const std::vector< double > &  binedges,
const std::string &  title,
const std::string &  xtitle,
const std::string &  ytitle 
) [protected, inherited]

Book a 2-dimensional data point set based on provided contiguous "bin edges".

The y values and errors will be set to 0.

Definition at line 569 of file Analysis.cc.

                                                             {
    const string path = histoPath(hname);
    Scatter2DPtr s = make_shared<Scatter2D>(path);
    for (size_t pt = 0; pt < binedges.size()-1; ++pt) {
      const double bincentre = (binedges[pt] + binedges[pt+1]) / 2.0;
      const double binwidth = binedges[pt+1] - binedges[pt];
      s->addPoint(bincentre, 0, binwidth/2.0, 0);
    }
    addAnalysisObject(s);
    MSG_TRACE("Made scatter " << hname <<  " for " << name());
    s->setTitle(title);
    s->setAnnotation("XLabel", xtitle);
    s->setAnnotation("YLabel", ytitle);
    return s;
  }
virtual std::string collider ( ) const [inline, virtual, inherited]

Collider on which the experiment ran.

Definition at line 171 of file Analysis.hh.

                                       {
      return info().collider();
    }
double crossSection ( ) const [protected, inherited]

Get the process cross-section in pb. Throws if this hasn't been set.

Definition at line 151 of file Analysis.cc.

                                      {
    if (!_gotCrossSection || std::isnan(_crossSection)) {
      string errMsg = "You did not set the cross section for the analysis " + name();
      throw Error(errMsg);
    }
    return _crossSection;
  }
double crossSectionPerEvent ( ) const [protected, inherited]

Get the process cross-section per generated event in pb. Throws if this hasn't been set.

Definition at line 159 of file Analysis.cc.

                                              {
    const double sumW = sumOfWeights();
    assert(sumW != 0.0);
    return _crossSection / sumW;
  }
const PROJ& declare ( const PROJ &  proj,
const std::string &  name 
) [inline, protected, inherited]

Register a contained projection (user-facing version)

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 151 of file ProjectionApplier.hh.

{ return declareProjection(proj, name); }
const PROJ& declareProjection ( const PROJ &  proj,
const std::string &  name 
) [inline, protected, inherited]

Register a contained projection.

The type of the argument is used to instantiate a new projection internally: this new object is applied to events rather than the argument object. Hence you are advised to only use locally-scoped Projection objects in your Projection and Analysis constructors, and to avoid polymorphism (e.g. handling ConcreteProjection via a pointer or reference to type Projection) since this will screw up the internal type management.

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 142 of file ProjectionApplier.hh.

                                                                           {
      const Projection& reg = _declareProjection(proj, name);
      const PROJ& rtn = dynamic_cast<const PROJ&>(reg);
      return rtn;
    }
virtual std::string description ( ) const [inline, virtual, inherited]

Get a full description of the analysis.

Full textual description of this analysis, what it is useful for, what experimental techniques are applied, etc. Should be treated as a chunk of restructuredText (http://docutils.sourceforge.net/rst.html), with equations to be rendered as LaTeX with amsmath operators.

Definition at line 152 of file Analysis.hh.

                                          {
      return info().description();
    }
void divide ( CounterPtr  c1,
CounterPtr  c2,
Scatter1DPtr  s 
) const [inherited]

Helper for counter division.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 593 of file Analysis.cc.

                                                                          {
    const string path = s->path();
    *s = *c1 / *c2;
    s->setPath(path);
  }
void divide ( const YODA::Counter &  c1,
const YODA::Counter &  c2,
Scatter1DPtr  s 
) const [inherited]

Helper for histogram division with raw YODA objects.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
void divide ( Histo1DPtr  h1,
Histo1DPtr  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram division.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 606 of file Analysis.cc.

                                                                          {
    const string path = s->path();
    *s = *h1 / *h2;
    s->setPath(path);
  }
void divide ( const YODA::Histo1D &  h1,
const YODA::Histo1D &  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram division with raw YODA objects.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
void divide ( Profile1DPtr  p1,
Profile1DPtr  p2,
Scatter2DPtr  s 
) const [inherited]

Helper for profile histogram division.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 619 of file Analysis.cc.

                                                                              {
    const string path = s->path();
    *s = *p1 / *p2;
    s->setPath(path);
  }
void divide ( const YODA::Profile1D &  p1,
const YODA::Profile1D &  p2,
Scatter2DPtr  s 
) const [inherited]

Helper for profile histogram division with raw YODA objects.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
void divide ( Histo2DPtr  h1,
Histo2DPtr  h2,
Scatter3DPtr  s 
) const [inherited]

Helper for 2D histogram division.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 632 of file Analysis.cc.

                                                                          {
    const string path = s->path();
    *s = *h1 / *h2;
    s->setPath(path);
  }
void divide ( const YODA::Histo2D &  h1,
const YODA::Histo2D &  h2,
Scatter3DPtr  s 
) const [inherited]

Helper for 2D histogram division with raw YODA objects.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
void divide ( Profile2DPtr  p1,
Profile2DPtr  p2,
Scatter3DPtr  s 
) const [inherited]

Helper for 2D profile histogram division.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 645 of file Analysis.cc.

                                                                              {
    const string path = s->path();
    *s = *p1 / *p2;
    s->setPath(path);
  }
void divide ( const YODA::Profile2D &  p1,
const YODA::Profile2D &  p2,
Scatter3DPtr  s 
) const [inherited]

Helper for 2D profile histogram division with raw YODA objects

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
void efficiency ( Histo1DPtr  h1,
Histo1DPtr  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram efficiency calculation.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
Todo:
Counter and Histo2D efficiencies and asymms

Definition at line 661 of file Analysis.cc.

                                                                              {
    const string path = s->path();
    *s = YODA::efficiency(*h1, *h2);
    s->setPath(path);
  }
void efficiency ( const YODA::Histo1D &  h1,
const YODA::Histo1D &  h2,
Scatter2DPtr  s 
) const [inherited]

Helper for histogram efficiency calculation.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.
virtual std::string experiment ( ) const [inline, virtual, inherited]

Experiment which performed and published this analysis.

Definition at line 166 of file Analysis.hh.

                                         {
      return info().experiment();
    }
void fillEventCountsPerSR ( const string &  basic_signal_region,
int  onZ,
double  HTlep,
double  eTmiss,
double  HTjets,
double  meff,
double  weight 
) [inline]

function fills map EventCountsPerSR by looping over all signal regions and looking if the event falls into this signal region

Definition at line 581 of file ATLAS_2012_I1204447.cc.

                                              {

      // Get cut values for HTlep, loop over them and add event if cut is passed
      vector<int> cut_values = getCutsPerSignalRegion("HTlep", onZ);
      for (size_t i = 0; i < cut_values.size(); i++)  {
        if (HTlep > cut_values[i])
          _eventCountsPerSR[("HTlep_" + basic_signal_region + "_cut_" + toString(cut_values[i]))] += weight;
      }

      // Get cut values for METStrong, loop over them and add event if cut is passed
      cut_values = getCutsPerSignalRegion("METStrong", onZ);
      for (size_t i = 0; i < cut_values.size(); i++)  {
        if (eTmiss > cut_values[i] && HTjets > 100.)
          _eventCountsPerSR[("METStrong_" + basic_signal_region + "_cut_" + toString(cut_values[i]))] += weight;
      }

      // Get cut values for METWeak, loop over them and add event if cut is passed
      cut_values = getCutsPerSignalRegion("METWeak", onZ);
      for (size_t i = 0; i < cut_values.size(); i++)  {
        if (eTmiss > cut_values[i] && HTjets <= 100.)
          _eventCountsPerSR[("METWeak_" + basic_signal_region + "_cut_" + toString(cut_values[i]))] += weight;
      }

      // Get cut values for Meff, loop over them and add event if cut is passed
      cut_values = getCutsPerSignalRegion("Meff", onZ);
      for (size_t i = 0; i < cut_values.size(); i++)  {
        if (meff > cut_values[i])
          _eventCountsPerSR[("Meff_" + basic_signal_region + "_cut_" + toString(cut_values[i]))] += weight;
      }

      // Get cut values for MeffStrong, loop over them and add event if cut is passed
      cut_values = getCutsPerSignalRegion("MeffStrong", onZ);
      for (size_t i = 0; i < cut_values.size(); i++)  {
        if (meff > cut_values[i] && eTmiss > 75.)
          _eventCountsPerSR[("MeffStrong_" + basic_signal_region + "_cut_" + toString(cut_values[i]))] += weight;
      }
    }
void finalize ( ) [inline, virtual]

Normalise histograms etc., after the run.

Reimplemented from Analysis.

Definition at line 427 of file ATLAS_2012_I1204447.cc.

                    {

      // Normalize to an integrated luminosity of 1 fb-1
      double norm = crossSection()/femtobarn/sumOfWeights();
      string best_signal_region = "";
      double ratio_best_SR = 0.;

      // Loop over all signal regions and find signal region with best sensitivity (ratio signal events/visible cross-section)
      for (size_t i = 0; i < _signal_regions.size(); i++)  {
        double signal_events = _eventCountsPerSR[_signal_regions[i]] * norm;
        // Use expected upper limits to find best signal region
        double UL95  = getUpperLimit(_signal_regions[i], false);
        double ratio = signal_events / UL95;
        if (ratio > ratio_best_SR)  {
          best_signal_region = _signal_regions[i];
          ratio_best_SR = ratio;
        }
      }

      double signal_events_best_SR = _eventCountsPerSR[best_signal_region] * norm;
      double exp_UL_best_SR = getUpperLimit(best_signal_region, false);
      double obs_UL_best_SR = getUpperLimit(best_signal_region, true);

      // Print out result
      cout << "----------------------------------------------------------------------------------------" << endl;
      cout << "Best signal region: " << best_signal_region << endl;
      cout << "Normalized number of signal events in this best signal region (per fb-1): " << signal_events_best_SR << endl;
      cout << "Efficiency*Acceptance: " <<  _eventCountsPerSR[best_signal_region]/sumOfWeights() << endl;
      cout << "Cross-section [fb]: " << crossSection()/femtobarn << endl;
      cout << "Expected visible cross-section (per fb-1): " << exp_UL_best_SR << endl;
      cout << "Ratio (signal events / expected visible cross-section): " << ratio_best_SR << endl;
      cout << "Observed visible cross-section (per fb-1): " << obs_UL_best_SR << endl;
      cout << "Ratio (signal events / observed visible cross-section): " <<  signal_events_best_SR/obs_UL_best_SR << endl;
      cout << "----------------------------------------------------------------------------------------" << endl;

      cout << "Using the EXPECTED limits (visible cross-section) of the analysis: " << endl;
      if (signal_events_best_SR > exp_UL_best_SR)  {
        cout << "Since the number of signal events > the visible cross-section, this model/grid point is EXCLUDED with 95% CL." << endl;
        _h_excluded->fill(1);
      }
      else  {
        cout << "Since the number of signal events < the visible cross-section, this model/grid point is NOT EXCLUDED." << endl;
        _h_excluded->fill(0);
      }
      cout << "----------------------------------------------------------------------------------------" << endl;

      cout << "Using the OBSERVED limits (visible cross-section) of the analysis: " << endl;
      if (signal_events_best_SR > obs_UL_best_SR)  {
        cout << "Since the number of signal events > the visible cross-section, this model/grid point is EXCLUDED with 95% CL." << endl;
        _h_excluded->fill(1);
      }
      else  {
        cout << "Since the number of signal events < the visible cross-section, this model/grid point is NOT EXCLUDED." << endl;
        _h_excluded->fill(0);
      }
      cout << "----------------------------------------------------------------------------------------" << endl;


      // Normalize to cross section
      if (norm != 0)  {
        scale(_h_HTlep_all,  norm);
        scale(_h_HTjets_all, norm);
        scale(_h_MET_all,    norm);
        scale(_h_Meff_all,   norm);

        scale(_h_pt_1_3l,    norm);
        scale(_h_pt_2_3l,    norm);
        scale(_h_pt_3_3l,    norm);
        scale(_h_pt_1_2ltau, norm);
        scale(_h_pt_2_2ltau, norm);
        scale(_h_pt_3_2ltau, norm);

        scale(_h_e_n,        norm);
        scale(_h_mu_n,       norm);
        scale(_h_tau_n,      norm);

        scale(_h_excluded,   signal_events_best_SR);
      }
    }
const PROJ& get ( const std::string &  name) const [inline, inherited]

Get the named projection, specifying return type via a template argument (user-facing alias).

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 57 of file ProjectionApplier.hh.

{ return getProjection<PROJ>(name); }
void get_prong_number ( const GenParticle *  p,
unsigned int &  nprong,
bool &  lep_decaying_tau 
) [inline]

Function calculating the prong number of taus

Todo:
Move to TauFinder and make less HepMC-ish

Definition at line 638 of file ATLAS_2012_I1204447.cc.

                                                                                              {
      assert(p != NULL);
      //const int tau_barcode = p->barcode();
      const GenVertex* dv = p->end_vertex();
      assert(dv != NULL);
      for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) {
        // If they have status 1 and are charged they will produce a track and the prong number is +1
        if ((*pp)->status() == 1 )  {
          const int id = (*pp)->pdg_id();
          if (Rivet::PID::charge(id) != 0 ) ++nprong;
          // Check if tau decays leptonically
          // @todo Can a tau decay include a tau in its decay daughters?!
          if ((abs(id) == PID::ELECTRON || abs(id) == PID::MUON || abs(id) == PID::TAU) && abs(p->pdg_id()) == PID::TAU) lep_decaying_tau = true;
        }
        // If the status of the daughter particle is 2 it is unstable and the further decays are checked
        else if ((*pp)->status() == 2 )  {
          get_prong_number(*pp, nprong, lep_decaying_tau);
        }
      }
    }
FourMomentum get_tau_neutrino_mom ( const Particle p) [inline]

Function returning 4-vector of daughter-particle if it is a tau neutrino

Todo:
Move to TauFinder and make less HepMC-ish

Definition at line 625 of file ATLAS_2012_I1204447.cc.

                                                          {
      assert(p.abspid() == PID::TAU);
      const GenVertex* dv = p.genParticle()->end_vertex();
      assert(dv != NULL);
      for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) {
        if (abs((*pp)->pdg_id()) == PID::NU_TAU) return FourMomentum((*pp)->momentum());
      }
      return FourMomentum();
    }
const std::shared_ptr<AO> getAnalysisObject ( const std::string &  name) const [inline, protected, inherited]

Get a data object from the histogram system

Todo:
Use this default function template arg in C++11

Definition at line 828 of file Analysis.hh.

                                                                           {
      foreach (const AnalysisObjectPtr& ao, analysisObjects()) {
        if (ao->path() == histoPath(name)) return dynamic_pointer_cast<AO>(ao);
      }
      throw Exception("Data object " + histoPath(name) + " not found");
    }
std::shared_ptr<AO> getAnalysisObject ( const std::string &  name) [inline, protected, inherited]

Get a data object from the histogram system (non-const)

Todo:
Use this default function template arg in C++11

Definition at line 839 of file Analysis.hh.

                                                               {
      foreach (const AnalysisObjectPtr& ao, analysisObjects()) {
        if (ao->path() == histoPath(name)) return dynamic_pointer_cast<AO>(ao);
      }
      throw Exception("Data object " + histoPath(name) + " not found");
    }
vector<int> getCutsPerSignalRegion ( const string &  signal_region,
int  onZ = 0 
) [inline]

Function giving all cut vales per kinematic variable (taking onZ for MET into account)

Definition at line 549 of file ATLAS_2012_I1204447.cc.

                                                                                {
      vector<int> cutValues;

      // Cut values for HTlep
      if (signal_region.compare("HTlep") == 0)  {
        cutValues.push_back(0);
        cutValues.push_back(100);
        cutValues.push_back(150);
        cutValues.push_back(200);
        cutValues.push_back(300);
      }
      // Cut values for METStrong (HTjets > 100 GeV) and METWeak (HTjets < 100 GeV)
      else if (signal_region.compare("METStrong") == 0 || signal_region.compare("METWeak") == 0)  {
        if      (onZ == 0) cutValues.push_back(0);
        else if (onZ == 1) cutValues.push_back(20);
        cutValues.push_back(50);
        cutValues.push_back(75);
      }
      // Cut values for Meff and MeffStrong (MET > 75 GeV)
      if (signal_region.compare("Meff") == 0 || signal_region.compare("MeffStrong") == 0)  {
        cutValues.push_back(0);
        cutValues.push_back(150);
        cutValues.push_back(300);
        cutValues.push_back(500);
      }

      return cutValues;
    }
const Histo1DPtr getHisto1D ( const std::string &  name) const [inline, protected, inherited]

Get a named Histo1D object from the histogram system.

Definition at line 854 of file Analysis.hh.

                                                             {
      return getAnalysisObject<Histo1D>(name);
    }
Histo1DPtr getHisto1D ( const std::string &  name) [inline, protected, inherited]

Get a named Histo1D object from the histogram system (non-const)

Definition at line 859 of file Analysis.hh.

                                                 {
      return getAnalysisObject<Histo1D>(name);
    }
const Histo1DPtr getHisto1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [inline, protected, inherited]

Get a Histo1D object from the histogram system by axis ID codes (non-const)

Definition at line 864 of file Analysis.hh.

                                                                                                          {
      return getAnalysisObject<Histo1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
Histo1DPtr getHisto1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) [inline, protected, inherited]

Get a Histo1D object from the histogram system by axis ID codes (non-const)

Definition at line 869 of file Analysis.hh.

                                                                                              {
      return getAnalysisObject<Histo1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
Log & getLog ( ) const [protected, inherited]

Get a Log object based on the name() property of the calling analysis object.

Reimplemented from ProjectionApplier.

Definition at line 78 of file Analysis.cc.

                              {
    string logname = "Rivet.Analysis." + name();
    return Log::getLog(logname);
  }
const Profile1DPtr getProfile1D ( const std::string &  name) const [inline, protected, inherited]

Get a named Profile1D object from the histogram system.

Definition at line 896 of file Analysis.hh.

                                                                 {
      return getAnalysisObject<Profile1D>(name);
    }
Profile1DPtr getProfile1D ( const std::string &  name) [inline, protected, inherited]

Get a named Profile1D object from the histogram system (non-const)

Definition at line 901 of file Analysis.hh.

                                                     {
      return getAnalysisObject<Profile1D>(name);
    }
const Profile1DPtr getProfile1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [inline, protected, inherited]

Get a Profile1D object from the histogram system by axis ID codes (non-const)

Definition at line 906 of file Analysis.hh.

                                                                                                              {
      return getAnalysisObject<Profile1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
Profile1DPtr getProfile1D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) [inline, protected, inherited]

Get a Profile1D object from the histogram system by axis ID codes (non-const)

Definition at line 911 of file Analysis.hh.

                                                                                                  {
      return getAnalysisObject<Profile1D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
const PROJ& getProjection ( const std::string &  name) const [inline, inherited]

Get the named projection, specifying return type via a template argument.

Todo:
Add SFINAE to require that PROJ inherit from Projection

Definition at line 50 of file ProjectionApplier.hh.

                                                           {
      const Projection& p = getProjHandler().getProjection(*this, name);
      return pcast<PROJ>(p);
    }
const Projection& getProjection ( const std::string &  name) const [inline, inherited]

Get the named projection (non-templated, so returns as a reference to a Projection base class).

Definition at line 61 of file ProjectionApplier.hh.

                                                                 {
      return getProjHandler().getProjection(*this, name);
    }
std::set<ConstProjectionPtr> getProjections ( ) const [inline, inherited]

Get the contained projections, including recursion.

Definition at line 43 of file ProjectionApplier.hh.

ProjectionHandler& getProjHandler ( ) const [inline, protected, inherited]

Get a reference to the ProjectionHandler for this thread.

Definition at line 122 of file ProjectionApplier.hh.

                                              {
      return _projhandler;
    }
const Scatter2DPtr getScatter2D ( const std::string &  name) const [inline, protected, inherited]

Get a named Scatter2D object from the histogram system.

Definition at line 938 of file Analysis.hh.

                                                                 {
      return getAnalysisObject<Scatter2D>(name);
    }
Scatter2DPtr getScatter2D ( const std::string &  name) [inline, protected, inherited]

Get a named Scatter2D object from the histogram system (non-const)

Definition at line 943 of file Analysis.hh.

                                                     {
      return getAnalysisObject<Scatter2D>(name);
    }
const Scatter2DPtr getScatter2D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [inline, protected, inherited]

Get a Scatter2D object from the histogram system by axis ID codes (non-const)

Definition at line 948 of file Analysis.hh.

                                                                                                              {
      return getAnalysisObject<Scatter2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
Scatter2DPtr getScatter2D ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) [inline, protected, inherited]

Get a Scatter2D object from the histogram system by axis ID codes (non-const)

Definition at line 953 of file Analysis.hh.

                                                                                                  {
      return getAnalysisObject<Scatter2D>(makeAxisCode(datasetId, xAxisId, yAxisId));
    }
vector<string> getSignalRegions ( ) [inline]

Helper functions.

Function giving a list of all signal regions

Definition at line 512 of file ATLAS_2012_I1204447.cc.

                                       {

      // List of basic signal regions
      vector<string> basic_signal_regions;
      basic_signal_regions.push_back("3l_offZ");
      basic_signal_regions.push_back("3l_onZ");
      basic_signal_regions.push_back("2ltau_offZ");
      basic_signal_regions.push_back("2ltau_onZ");

      // List of kinematic variables
      vector<string> kinematic_variables;
      kinematic_variables.push_back("HTlep");
      kinematic_variables.push_back("METStrong");
      kinematic_variables.push_back("METWeak");
      kinematic_variables.push_back("Meff");
      kinematic_variables.push_back("MeffStrong");

      vector<string> signal_regions;
      // Loop over all kinematic variables and basic signal regions
      for (size_t i0 = 0; i0 < kinematic_variables.size(); i0++)  {
        for (size_t i1 = 0; i1 < basic_signal_regions.size(); i1++)  {
          // Is signal region onZ?
          int onZ = (basic_signal_regions[i1].find("onZ") != string::npos) ? 1 : 0;
          // Get cut values for this kinematic variable
          vector<int> cut_values = getCutsPerSignalRegion(kinematic_variables[i0], onZ);
          // Loop over all cut values
          for (size_t i2 = 0; i2 < cut_values.size(); i2++)  {
            // push signal region into vector
            signal_regions.push_back( (kinematic_variables[i0] + "_" + basic_signal_regions[i1] + "_cut_" + toString(i2)) );
          }
        }
      }
      return signal_regions;
    }
double getUpperLimit ( const string &  signal_region,
bool  observed 
) [inline]

Function giving observed upper limit (visible cross-section)

Definition at line 833 of file ATLAS_2012_I1204447.cc.

                                                                      {
      map<string,double> upperLimitsObserved;
      upperLimitsObserved["HTlep_3l_offZ_cut_0"] = 11.;
      upperLimitsObserved["HTlep_3l_offZ_cut_100"] = 8.7;
      upperLimitsObserved["HTlep_3l_offZ_cut_150"] = 4.0;
      upperLimitsObserved["HTlep_3l_offZ_cut_200"] = 4.4;
      upperLimitsObserved["HTlep_3l_offZ_cut_300"] = 1.6;
      upperLimitsObserved["HTlep_2ltau_offZ_cut_0"] = 25.;
      upperLimitsObserved["HTlep_2ltau_offZ_cut_100"] = 14.;
      upperLimitsObserved["HTlep_2ltau_offZ_cut_150"] = 6.1;
      upperLimitsObserved["HTlep_2ltau_offZ_cut_200"] = 3.3;
      upperLimitsObserved["HTlep_2ltau_offZ_cut_300"] = 1.2;
      upperLimitsObserved["HTlep_3l_onZ_cut_0"] = 48.;
      upperLimitsObserved["HTlep_3l_onZ_cut_100"] = 38.;
      upperLimitsObserved["HTlep_3l_onZ_cut_150"] = 14.;
      upperLimitsObserved["HTlep_3l_onZ_cut_200"] = 7.2;
      upperLimitsObserved["HTlep_3l_onZ_cut_300"] = 4.5;
      upperLimitsObserved["HTlep_2ltau_onZ_cut_0"] = 85.;
      upperLimitsObserved["HTlep_2ltau_onZ_cut_100"] = 53.;
      upperLimitsObserved["HTlep_2ltau_onZ_cut_150"] = 11.0;
      upperLimitsObserved["HTlep_2ltau_onZ_cut_200"] = 5.2;
      upperLimitsObserved["HTlep_2ltau_onZ_cut_300"] = 3.0;
      upperLimitsObserved["METStrong_3l_offZ_cut_0"] = 2.6;
      upperLimitsObserved["METStrong_3l_offZ_cut_50"] = 2.1;
      upperLimitsObserved["METStrong_3l_offZ_cut_75"] = 2.1;
      upperLimitsObserved["METStrong_2ltau_offZ_cut_0"] = 4.2;
      upperLimitsObserved["METStrong_2ltau_offZ_cut_50"] = 3.1;
      upperLimitsObserved["METStrong_2ltau_offZ_cut_75"] = 2.6;
      upperLimitsObserved["METStrong_3l_onZ_cut_20"] = 11.0;
      upperLimitsObserved["METStrong_3l_onZ_cut_50"] = 6.4;
      upperLimitsObserved["METStrong_3l_onZ_cut_75"] = 5.1;
      upperLimitsObserved["METStrong_2ltau_onZ_cut_20"] = 5.9;
      upperLimitsObserved["METStrong_2ltau_onZ_cut_50"] = 3.4;
      upperLimitsObserved["METStrong_2ltau_onZ_cut_75"] = 1.2;
      upperLimitsObserved["METWeak_3l_offZ_cut_0"] = 11.;
      upperLimitsObserved["METWeak_3l_offZ_cut_50"] = 5.3;
      upperLimitsObserved["METWeak_3l_offZ_cut_75"] = 3.1;
      upperLimitsObserved["METWeak_2ltau_offZ_cut_0"] = 23.;
      upperLimitsObserved["METWeak_2ltau_offZ_cut_50"] = 4.3;
      upperLimitsObserved["METWeak_2ltau_offZ_cut_75"] = 3.1;
      upperLimitsObserved["METWeak_3l_onZ_cut_20"] = 41.;
      upperLimitsObserved["METWeak_3l_onZ_cut_50"] = 16.;
      upperLimitsObserved["METWeak_3l_onZ_cut_75"] = 8.0;
      upperLimitsObserved["METWeak_2ltau_onZ_cut_20"] = 80.;
      upperLimitsObserved["METWeak_2ltau_onZ_cut_50"] = 4.4;
      upperLimitsObserved["METWeak_2ltau_onZ_cut_75"] = 1.8;
      upperLimitsObserved["Meff_3l_offZ_cut_0"] = 11.;
      upperLimitsObserved["Meff_3l_offZ_cut_150"] = 8.1;
      upperLimitsObserved["Meff_3l_offZ_cut_300"] = 3.1;
      upperLimitsObserved["Meff_3l_offZ_cut_500"] = 2.1;
      upperLimitsObserved["Meff_2ltau_offZ_cut_0"] = 25.;
      upperLimitsObserved["Meff_2ltau_offZ_cut_150"] = 12.;
      upperLimitsObserved["Meff_2ltau_offZ_cut_300"] = 3.9;
      upperLimitsObserved["Meff_2ltau_offZ_cut_500"] = 2.2;
      upperLimitsObserved["Meff_3l_onZ_cut_0"] = 48.;
      upperLimitsObserved["Meff_3l_onZ_cut_150"] = 37.;
      upperLimitsObserved["Meff_3l_onZ_cut_300"] = 11.;
      upperLimitsObserved["Meff_3l_onZ_cut_500"] = 4.8;
      upperLimitsObserved["Meff_2ltau_onZ_cut_0"] = 85.;
      upperLimitsObserved["Meff_2ltau_onZ_cut_150"] = 28.;
      upperLimitsObserved["Meff_2ltau_onZ_cut_300"] = 5.9;
      upperLimitsObserved["Meff_2ltau_onZ_cut_500"] = 1.9;
      upperLimitsObserved["MeffStrong_3l_offZ_cut_0"] = 3.8;
      upperLimitsObserved["MeffStrong_3l_offZ_cut_150"] = 3.8;
      upperLimitsObserved["MeffStrong_3l_offZ_cut_300"] = 2.8;
      upperLimitsObserved["MeffStrong_3l_offZ_cut_500"] = 2.1;
      upperLimitsObserved["MeffStrong_2ltau_offZ_cut_0"] = 3.9;
      upperLimitsObserved["MeffStrong_2ltau_offZ_cut_150"] = 4.0;
      upperLimitsObserved["MeffStrong_2ltau_offZ_cut_300"] = 2.9;
      upperLimitsObserved["MeffStrong_2ltau_offZ_cut_500"] = 1.5;
      upperLimitsObserved["MeffStrong_3l_onZ_cut_0"] = 10.0;
      upperLimitsObserved["MeffStrong_3l_onZ_cut_150"] = 10.0;
      upperLimitsObserved["MeffStrong_3l_onZ_cut_300"] = 6.8;
      upperLimitsObserved["MeffStrong_3l_onZ_cut_500"] = 3.9;
      upperLimitsObserved["MeffStrong_2ltau_onZ_cut_0"] = 1.6;
      upperLimitsObserved["MeffStrong_2ltau_onZ_cut_150"] = 1.4;
      upperLimitsObserved["MeffStrong_2ltau_onZ_cut_300"] = 1.5;
      upperLimitsObserved["MeffStrong_2ltau_onZ_cut_500"] = 0.9;

      // Expected upper limits are also given but not used in this analysis
      map<string,double> upperLimitsExpected;
      upperLimitsExpected["HTlep_3l_offZ_cut_0"] = 11.;
      upperLimitsExpected["HTlep_3l_offZ_cut_100"] = 8.5;
      upperLimitsExpected["HTlep_3l_offZ_cut_150"] = 4.6;
      upperLimitsExpected["HTlep_3l_offZ_cut_200"] = 3.6;
      upperLimitsExpected["HTlep_3l_offZ_cut_300"] = 1.9;
      upperLimitsExpected["HTlep_2ltau_offZ_cut_0"] = 23.;
      upperLimitsExpected["HTlep_2ltau_offZ_cut_100"] = 14.;
      upperLimitsExpected["HTlep_2ltau_offZ_cut_150"] = 6.4;
      upperLimitsExpected["HTlep_2ltau_offZ_cut_200"] = 3.6;
      upperLimitsExpected["HTlep_2ltau_offZ_cut_300"] = 1.5;
      upperLimitsExpected["HTlep_3l_onZ_cut_0"] = 33.;
      upperLimitsExpected["HTlep_3l_onZ_cut_100"] = 25.;
      upperLimitsExpected["HTlep_3l_onZ_cut_150"] = 12.;
      upperLimitsExpected["HTlep_3l_onZ_cut_200"] = 6.5;
      upperLimitsExpected["HTlep_3l_onZ_cut_300"] = 3.1;
      upperLimitsExpected["HTlep_2ltau_onZ_cut_0"] = 94.;
      upperLimitsExpected["HTlep_2ltau_onZ_cut_100"] = 61.;
      upperLimitsExpected["HTlep_2ltau_onZ_cut_150"] = 9.9;
      upperLimitsExpected["HTlep_2ltau_onZ_cut_200"] = 4.5;
      upperLimitsExpected["HTlep_2ltau_onZ_cut_300"] = 1.9;
      upperLimitsExpected["METStrong_3l_offZ_cut_0"] = 3.1;
      upperLimitsExpected["METStrong_3l_offZ_cut_50"] = 2.4;
      upperLimitsExpected["METStrong_3l_offZ_cut_75"] = 2.3;
      upperLimitsExpected["METStrong_2ltau_offZ_cut_0"] = 4.8;
      upperLimitsExpected["METStrong_2ltau_offZ_cut_50"] = 3.3;
      upperLimitsExpected["METStrong_2ltau_offZ_cut_75"] = 2.1;
      upperLimitsExpected["METStrong_3l_onZ_cut_20"] = 8.7;
      upperLimitsExpected["METStrong_3l_onZ_cut_50"] = 4.9;
      upperLimitsExpected["METStrong_3l_onZ_cut_75"] = 3.8;
      upperLimitsExpected["METStrong_2ltau_onZ_cut_20"] = 7.3;
      upperLimitsExpected["METStrong_2ltau_onZ_cut_50"] = 2.8;
      upperLimitsExpected["METStrong_2ltau_onZ_cut_75"] = 1.5;
      upperLimitsExpected["METWeak_3l_offZ_cut_0"] = 10.;
      upperLimitsExpected["METWeak_3l_offZ_cut_50"] = 4.7;
      upperLimitsExpected["METWeak_3l_offZ_cut_75"] = 3.0;
      upperLimitsExpected["METWeak_2ltau_offZ_cut_0"] = 21.;
      upperLimitsExpected["METWeak_2ltau_offZ_cut_50"] = 4.0;
      upperLimitsExpected["METWeak_2ltau_offZ_cut_75"] = 2.6;
      upperLimitsExpected["METWeak_3l_onZ_cut_20"] = 30.;
      upperLimitsExpected["METWeak_3l_onZ_cut_50"] = 10.;
      upperLimitsExpected["METWeak_3l_onZ_cut_75"] = 5.4;
      upperLimitsExpected["METWeak_2ltau_onZ_cut_20"] = 88.;
      upperLimitsExpected["METWeak_2ltau_onZ_cut_50"] = 5.5;
      upperLimitsExpected["METWeak_2ltau_onZ_cut_75"] = 2.2;
      upperLimitsExpected["Meff_3l_offZ_cut_0"] = 11.;
      upperLimitsExpected["Meff_3l_offZ_cut_150"] = 8.8;
      upperLimitsExpected["Meff_3l_offZ_cut_300"] = 3.7;
      upperLimitsExpected["Meff_3l_offZ_cut_500"] = 2.1;
      upperLimitsExpected["Meff_2ltau_offZ_cut_0"] = 23.;
      upperLimitsExpected["Meff_2ltau_offZ_cut_150"] = 13.;
      upperLimitsExpected["Meff_2ltau_offZ_cut_300"] = 4.9;
      upperLimitsExpected["Meff_2ltau_offZ_cut_500"] = 2.4;
      upperLimitsExpected["Meff_3l_onZ_cut_0"] = 33.;
      upperLimitsExpected["Meff_3l_onZ_cut_150"] = 25.;
      upperLimitsExpected["Meff_3l_onZ_cut_300"] = 9.;
      upperLimitsExpected["Meff_3l_onZ_cut_500"] = 3.9;
      upperLimitsExpected["Meff_2ltau_onZ_cut_0"] = 94.;
      upperLimitsExpected["Meff_2ltau_onZ_cut_150"] = 35.;
      upperLimitsExpected["Meff_2ltau_onZ_cut_300"] = 6.8;
      upperLimitsExpected["Meff_2ltau_onZ_cut_500"] = 2.5;
      upperLimitsExpected["MeffStrong_3l_offZ_cut_0"] = 3.9;
      upperLimitsExpected["MeffStrong_3l_offZ_cut_150"] = 3.9;
      upperLimitsExpected["MeffStrong_3l_offZ_cut_300"] = 3.0;
      upperLimitsExpected["MeffStrong_3l_offZ_cut_500"] = 2.0;
      upperLimitsExpected["MeffStrong_2ltau_offZ_cut_0"] = 3.8;
      upperLimitsExpected["MeffStrong_2ltau_offZ_cut_150"] = 3.9;
      upperLimitsExpected["MeffStrong_2ltau_offZ_cut_300"] = 3.1;
      upperLimitsExpected["MeffStrong_2ltau_offZ_cut_500"] = 1.6;
      upperLimitsExpected["MeffStrong_3l_onZ_cut_0"] = 6.9;
      upperLimitsExpected["MeffStrong_3l_onZ_cut_150"] = 7.1;
      upperLimitsExpected["MeffStrong_3l_onZ_cut_300"] = 4.9;
      upperLimitsExpected["MeffStrong_3l_onZ_cut_500"] = 3.0;
      upperLimitsExpected["MeffStrong_2ltau_onZ_cut_0"] = 2.4;
      upperLimitsExpected["MeffStrong_2ltau_onZ_cut_150"] = 2.5;
      upperLimitsExpected["MeffStrong_2ltau_onZ_cut_300"] = 2.0;
      upperLimitsExpected["MeffStrong_2ltau_onZ_cut_500"] = 1.1;

      if (observed) return upperLimitsObserved[signal_region];
      else          return upperLimitsExpected[signal_region];
    }
AnalysisHandler& handler ( ) const [inline, inherited]

Access the controlling AnalysisHandler object.

Definition at line 289 of file Analysis.hh.

{ return *_analysishandler; }
const string histoDir ( ) const [protected, inherited]

Get the canonical histogram "directory" path for this analysis.

Todo:
Cache in a member variable

Definition at line 38 of file Analysis.cc.

                                        {
    /// @todo Cache in a member variable
    string _histoDir;
    if (_histoDir.empty()) {
      _histoDir = "/" + name();
      if (handler().runName().length() > 0) {
        _histoDir = "/" + handler().runName() + _histoDir;
      }
      replace_all(_histoDir, "//", "/"); //< iterates until none
    }
    return _histoDir;
  }
const string histoPath ( const std::string &  hname) const [protected, inherited]

Get the canonical histogram path for the named histogram in this analysis.

Definition at line 52 of file Analysis.cc.

                                                            {
    const string path = histoDir() + "/" + hname;
    return path;
  }
const string histoPath ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [protected, inherited]

Get the canonical histogram path for the numbered histogram in this analysis.

Definition at line 58 of file Analysis.cc.

                                                                                                           {
    return histoDir() + "/" + makeAxisCode(datasetId, xAxisId, yAxisId);
  }
const AnalysisInfo& info ( ) const [inline, inherited]

Get the actual AnalysisInfo object in which all this metadata is stored.

Definition at line 105 of file Analysis.hh.

                                     {
      assert(_info && "No AnalysisInfo object :O");
      return *_info;
    }
AnalysisInfo& info ( ) [inline, inherited]

Get the actual AnalysisInfo object in which all this metadata is stored (non-const).

Definition at line 247 of file Analysis.hh.

                         {
      assert(_info && "No AnalysisInfo object :O");
      return *_info;
    }
void init ( ) [inline, virtual]

Book histograms and initialise projections before the run.

Reimplemented from Analysis.

Definition at line 23 of file ATLAS_2012_I1204447.cc.

                {

      // To calculate the acceptance without having the fiducial lepton efficiencies included, this part can be turned off
      _use_fiducial_lepton_efficiency = true;

      // Random numbers for simulation of ATLAS detector reconstruction efficiency
      srand(160385);

      // Read in all signal regions
      _signal_regions = getSignalRegions();

      // Set number of events per signal region to 0
      for (size_t i = 0; i < _signal_regions.size(); i++)
        _eventCountsPerSR[_signal_regions[i]] = 0.0;

      // Final state including all charged and neutral particles
      const FinalState fs(-5.0, 5.0, 1*GeV);
      declare(fs, "FS");

      // Final state including all charged particles
      declare(ChargedFinalState(Cuts::abseta < 2.5 && Cuts::pT > 1*GeV), "CFS");

      // Final state including all visible particles (to calculate MET, Jets etc.)
      declare(VisibleFinalState(Cuts::abseta < 5.0), "VFS");

      // Final state including all AntiKt 04 Jets
      VetoedFinalState vfs;
      vfs.addVetoPairId(PID::MUON);
      declare(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04");

      // Final state including all unstable particles (including taus)
      declare(UnstableFinalState(Cuts::abseta < 5.0 && Cuts::pT > 5*GeV), "UFS");

      // Final state including all electrons
      IdentifiedFinalState elecs(Cuts::abseta < 2.47 && Cuts::pT > 10*GeV);
      elecs.acceptIdPair(PID::ELECTRON);
      declare(elecs, "elecs");

      // Final state including all muons
      IdentifiedFinalState muons(Cuts::abseta < 2.5 && Cuts::pT > 10*GeV);
      muons.acceptIdPair(PID::MUON);
      declare(muons, "muons");

      // Book histograms
      _h_HTlep_all  = bookHisto1D("HTlep_all" , 30, 0, 1500);
      _h_HTjets_all = bookHisto1D("HTjets_all", 30, 0, 1500);
      _h_MET_all    = bookHisto1D("MET_all"   , 20, 0, 1000);
      _h_Meff_all   = bookHisto1D("Meff_all"  , 30, 0, 3000);

      _h_e_n        = bookHisto1D("e_n"  , 10, -0.5, 9.5);
      _h_mu_n       = bookHisto1D("mu_n" , 10, -0.5, 9.5);
      _h_tau_n      = bookHisto1D("tau_n", 10, -0.5, 9.5);

      _h_pt_1_3l    = bookHisto1D("pt_1_3l", 100, 0, 2000);
      _h_pt_2_3l    = bookHisto1D("pt_2_3l", 100, 0, 2000);
      _h_pt_3_3l    = bookHisto1D("pt_3_3l", 100, 0, 2000);
      _h_pt_1_2ltau = bookHisto1D("pt_1_2ltau", 100, 0, 2000);
      _h_pt_2_2ltau = bookHisto1D("pt_2_2ltau", 100, 0, 2000);
      _h_pt_3_2ltau = bookHisto1D("pt_3_2ltau", 100, 0, 2000);

      _h_excluded   = bookHisto1D("excluded", 2, -0.5, 1.5);
    }
virtual std::string inspireId ( ) const [inline, virtual, inherited]

Get the Inspire ID code for this analysis.

Definition at line 120 of file Analysis.hh.

                                        {
      return info().inspireId();
    }
void integrate ( Histo1DPtr  h,
Scatter2DPtr  s 
) const [inherited]

Helper for converting a differential histo to an integral one.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 774 of file Analysis.cc.

                                                             {
    // preserve the path info
    const string path = s->path();
    *s = toIntegralHisto(*h);
    s->setPath(path);
  }
void integrate ( const Histo1D &  h,
Scatter2DPtr  s 
) const [inherited]

Helper for converting a differential histo to an integral one.

Note:
Assigns to the (already registered) output scatter, s. Preserves the path information of the target.

Definition at line 781 of file Analysis.cc.

                                                                 {
    // preserve the path info
    const string path = s->path();
    *s = toIntegralHisto(h);
    s->setPath(path);
  }
bool isCompatible ( const ParticlePair beams) const [inherited]

Check if analysis is compatible with the provided beam particle IDs and energies.

Definition at line 97 of file Analysis.cc.

                                                             {
    return isCompatible(beams.first.pid(),  beams.second.pid(),
                        beams.first.energy(), beams.second.energy());
  }
bool isCompatible ( PdgId  beam1,
PdgId  beam2,
double  e1,
double  e2 
) const [inherited]

Check if analysis is compatible with the provided beam particle IDs and energies.

Definition at line 103 of file Analysis.cc.

                                                                                  {
    PdgIdPair beams(beam1, beam2);
    pair<double,double> energies(e1, e2);
    return isCompatible(beams, energies);
  }
bool isCompatible ( const PdgIdPair beams,
const std::pair< double, double > &  energies 
) const [inherited]

Check if analysis is compatible with the provided beam particle IDs and energies.

int isonZ ( const Particles particles) [inline]

Function checking if there is an OSSF lepton pair or a combination of 3 leptons with an invariant mass close to the Z mass

Todo:
Should the reference Z mass be 91.2?

Definition at line 998 of file ATLAS_2012_I1204447.cc.

                                            {
      int onZ = 0;
      double best_mass_2 = 999.;
      double best_mass_3 = 999.;

      // Loop over all 2 particle combinations to find invariant mass of OSSF pair closest to Z mass
      foreach ( const Particle& p1, particles  )  {
        foreach ( const Particle& p2, particles  )  {
          double mass_difference_2_old = fabs(91.0 - best_mass_2);
          double mass_difference_2_new = fabs(91.0 - (p1.momentum() + p2.momentum()).mass()/GeV);

          // If particle combination is OSSF pair calculate mass difference to Z mass
          if ( (p1.pid()*p2.pid() == -121 || p1.pid()*p2.pid() == -169) )  {

            // Get invariant mass closest to Z mass
            if (mass_difference_2_new < mass_difference_2_old)
              best_mass_2 = (p1.momentum() + p2.momentum()).mass()/GeV;

            // In case there is an OSSF pair take also 3rd lepton into account (e.g. from FSR and photon to electron conversion)
            foreach ( const Particle & p3 , particles  )  {
              double mass_difference_3_old = fabs(91.0 - best_mass_3);
              double mass_difference_3_new = fabs(91.0 - (p1.momentum() + p2.momentum() + p3.momentum()).mass()/GeV);
              if (mass_difference_3_new < mass_difference_3_old)
                best_mass_3 = (p1.momentum() + p2.momentum() + p3.momentum()).mass()/GeV;
            }
          }
        }
      }

      // Pick the minimum invariant mass of the best OSSF pair combination and the best 3 lepton combination
      // If this mass is in a 20 GeV window around the Z mass, the event is classified as onZ
      double best_mass = min(best_mass_2, best_mass_3);
      if (fabs(91.0 - best_mass) < 20) onZ = 1;
      return onZ;
    }
const string makeAxisCode ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [protected, inherited]

Get the internal histogram name for given d, x and y (cf. HepData)

Definition at line 63 of file Analysis.cc.

                                                                                                              {
    stringstream axisCode;
    axisCode << "d";
    if (datasetId < 10) axisCode << 0;
    axisCode << datasetId;
    axisCode << "-x";
    if (xAxisId < 10) axisCode << 0;
    axisCode << xAxisId;
    axisCode << "-y";
    if (yAxisId < 10) axisCode << 0;
    axisCode << yAxisId;
    return axisCode.str();
  }
void markAsOwned ( ) const [inline, inherited]

Mark object as owned by the _projhandler

Todo:
Huh? What's this for?

Definition at line 111 of file ProjectionApplier.hh.

{ _owned = true; }
virtual std::string name ( ) const [inline, virtual, inherited]

Get the name of the analysis.

By default this is computed by combining the results of the experiment, year and Spires ID metadata methods and you should only override it if there's a good reason why those won't work.

Implements ProjectionApplier.

Definition at line 115 of file Analysis.hh.

                                   {
      return (info().name().empty()) ? _defaultname : info().name();
    }
bool needsCrossSection ( ) const [inline, inherited]

Return true if this analysis needs to know the process cross-section.

Todo:
Remove this and require HepMC >= 2.06

Definition at line 230 of file Analysis.hh.

                                   {
      return info().needsCrossSection();
    }
void normalize ( Histo1DPtr  histo,
double  norm = 1.0,
bool  includeoverflows = true 
) [inherited]

Normalize the given histogram, histo, to area = norm.

Definition at line 706 of file Analysis.cc.

                                                                               {
    if (!histo) {
      MSG_WARNING("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")");
      return;
    }
    MSG_TRACE("Normalizing histo " << histo->path() << " to " << norm);
    try {
      histo->normalize(norm, includeoverflows);
    } catch (YODA::Exception& we) {
      MSG_WARNING("Could not normalize histo " << histo->path());
      return;
    }
  }
void normalize ( const std::vector< Histo1DPtr > &  histos,
double  norm = 1.0,
bool  includeoverflows = true 
) [inline, inherited]

Normalize the given histograms, histos, to area = norm.

Note:
Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
Todo:
Use SFINAE for a generic iterable of Histo1DPtrs

Definition at line 662 of file Analysis.hh.

                                                                                                     {
      for (auto& h : histos) normalize(h, norm, includeoverflows);
    }
void normalize ( const Histo1DPtr(&)  histos[array_size],
double  norm = 1.0,
bool  includeoverflows = true 
) [inline, inherited]
Todo:
YUCK!

Definition at line 667 of file Analysis.hh.

                                                                                                        {
      for (auto& h : histos) normalize(h, norm, includeoverflows);
    }
void normalize ( Histo2DPtr  histo,
double  norm = 1.0,
bool  includeoverflows = true 
) [inherited]

Normalize the given histogram, histo, to area = norm.

Definition at line 740 of file Analysis.cc.

                                                                               {
    if (!histo) {
      MSG_ERROR("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")");
      return;
    }
    MSG_TRACE("Normalizing histo " << histo->path() << " to " << norm);
    try {
      histo->normalize(norm, includeoverflows);
    } catch (YODA::Exception& we) {
      MSG_WARNING("Could not normalize histo " << histo->path());
      return;
    }
  }
void normalize ( const std::vector< Histo2DPtr > &  histos,
double  norm = 1.0,
bool  includeoverflows = true 
) [inline, inherited]

Normalize the given histograms, histos, to area = norm.

Note:
Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
Todo:
Use SFINAE for a generic iterable of Histo2DPtrs

Definition at line 693 of file Analysis.hh.

                                                                                                     {
      for (auto& h : histos) normalize(h, norm, includeoverflows);
    }
void normalize ( const Histo2DPtr(&)  histos[array_size],
double  norm = 1.0,
bool  includeoverflows = true 
) [inline, inherited]
Todo:
YUCK!

Definition at line 698 of file Analysis.hh.

                                                                                                        {
      for (auto& h : histos) normalize(h, norm, includeoverflows);
    }
size_t numEvents ( ) const [protected, inherited]

Get the number of events seen (via the analysis handler). Use in the finalize phase only.

Definition at line 84 of file Analysis.cc.

                                   {
    return handler().numEvents();
  }
const Scatter2D & refData ( const string &  hname) const [protected, inherited]

Get reference data for a named histo

Todo:
Move to the templated version when we have C++11 and can have a default fn template type

Definition at line 179 of file Analysis.cc.

                                                              {
    _cacheRefData();
    MSG_TRACE("Using histo bin edges for " << name() << ":" << hname);
    if (!_refdata[hname]) {
      MSG_ERROR("Can't find reference histogram " << hname);
      throw Exception("Reference data " + hname + " not found.");
    }
    return dynamic_cast<Scatter2D&>(*_refdata[hname]);
  }
const Scatter2D & refData ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [protected, inherited]

Get reference data for a numbered histo

Todo:
Move to the templated version when we have C++11 and can have a default fn template type

Definition at line 190 of file Analysis.cc.

                                                                                                             {
    const string hname = makeAxisCode(datasetId, xAxisId, yAxisId);
    return refData(hname);
  }
const T& refData ( const string &  hname) const [inline, protected, inherited]

Get reference data for a named histo

Todo:
Would be nice to just use these and ditch the S2D no-template version, but we need C++11 for default args in function templates
Todo:
SFINAE to ensure that the type inherits from YODA::AnalysisObject?

Definition at line 350 of file Analysis.hh.

                                                {
      _cacheRefData();
      MSG_TRACE("Using histo bin edges for " << name() << ":" << hname);
      if (!_refdata[hname]) {
        MSG_ERROR("Can't find reference histogram " << hname);
        throw Exception("Reference data " + hname + " not found.");
      }
      return dynamic_cast<T&>(*_refdata[hname]);
    }
const T& refData ( unsigned int  datasetId,
unsigned int  xAxisId,
unsigned int  yAxisId 
) const [inline, protected, inherited]

Get reference data for a numbered histo

Todo:
Would be nice to just use these and ditch the S2D no-template version, but we need C++11 for default args in function templates
Todo:
SFINAE to ensure that the type inherits from YODA::AnalysisObject?

Definition at line 366 of file Analysis.hh.

                                                                                               {
      const string hname = makeAxisCode(datasetId, xAxisId, yAxisId);
      return refData(hname);
    }
virtual std::vector<std::string> references ( ) const [inline, virtual, inherited]

Journal, and preprint references.

Definition at line 181 of file Analysis.hh.

                                                    {
      return info().references();
    }
void removeAnalysisObject ( const std::string &  path) [protected, inherited]

Unregister a data object from the histogram system (by name)

Definition at line 799 of file Analysis.cc.

                                                        {
    for (vector<AnalysisObjectPtr>::iterator it = _analysisobjects.begin();  it != _analysisobjects.end(); ++it) {
      if ((*it)->path() == path) {
        _analysisobjects.erase(it);
        break;
      }
    }
  }
void removeAnalysisObject ( AnalysisObjectPtr  ao) [protected, inherited]

Unregister a data object from the histogram system (by pointer)

Definition at line 808 of file Analysis.cc.

                                                          {
    for (vector<AnalysisObjectPtr>::iterator it = _analysisobjects.begin();  it != _analysisobjects.end(); ++it) {
      if (*it == ao) {
        _analysisobjects.erase(it);
        break;
      }
    }
 }
virtual const std::vector<PdgIdPair>& requiredBeams ( ) const [inline, virtual, inherited]

Return the allowed pairs of incoming beams required by this analysis.

Definition at line 207 of file Analysis.hh.

                                                              {
      return info().beams();
    }
virtual const std::vector<std::pair<double, double> >& requiredEnergies ( ) const [inline, virtual, inherited]

Sets of valid beam energy pairs, in GeV.

Definition at line 218 of file Analysis.hh.

                                                                                {
      return info().energies();
    }
virtual std::string runInfo ( ) const [inline, virtual, inherited]

Information about the events needed as input for this analysis.

Event types, energies, kinematic cuts, particles to be considered stable, etc. etc. Should be treated as a restructuredText bullet list (http://docutils.sourceforge.net/rst.html)

Definition at line 161 of file Analysis.hh.

                                      {
      return info().runInfo();
    }
void scale ( CounterPtr  cnt,
double  factor 
) [inherited]

Multiplicatively scale the given counter, cnt, by factor factor.

Definition at line 687 of file Analysis.cc.

                                                    {
    if (!cnt) {
      MSG_WARNING("Failed to scale counter=NULL in analysis " << name() << " (scale=" << factor << ")");
      return;
    }
    if (std::isnan(factor) || std::isinf(factor)) {
      MSG_WARNING("Failed to scale counter=" << cnt->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
      factor = 0;
    }
    MSG_TRACE("Scaling counter " << cnt->path() << " by factor " << factor);
    try {
      cnt->scaleW(factor);
    } catch (YODA::Exception& we) {
      MSG_WARNING("Could not scale counter " << cnt->path());
      return;
    }
  }
void scale ( const std::vector< CounterPtr > &  cnts,
double  factor 
) [inline, inherited]

Multiplicatively scale the given counters, cnts, by factor factor.

Note:
Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
Todo:
Use SFINAE for a generic iterable of CounterPtrs

Definition at line 645 of file Analysis.hh.

                                                                 {
      for (auto& c : cnts) scale(c, factor);
    }
void scale ( const CounterPtr(&)  cnts[array_size],
double  factor 
) [inline, inherited]
Todo:
YUCK!

Definition at line 650 of file Analysis.hh.

                                                                    {
      // for (size_t i = 0; i < std::extent<decltype(cnts)>::value; ++i) scale(cnts[i], factor);
      for (auto& c : cnts) scale(c, factor);
    }
void scale ( Histo1DPtr  histo,
double  factor 
) [inherited]

Multiplicatively scale the given histogram, histo, by factor factor.

Definition at line 721 of file Analysis.cc.

                                                      {
    if (!histo) {
      MSG_WARNING("Failed to scale histo=NULL in analysis " << name() << " (scale=" << factor << ")");
      return;
    }
    if (std::isnan(factor) || std::isinf(factor)) {
      MSG_WARNING("Failed to scale histo=" << histo->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
      factor = 0;
    }
    MSG_TRACE("Scaling histo " << histo->path() << " by factor " << factor);
    try {
      histo->scaleW(factor);
    } catch (YODA::Exception& we) {
      MSG_WARNING("Could not scale histo " << histo->path());
      return;
    }
  }
void scale ( const std::vector< Histo1DPtr > &  histos,
double  factor 
) [inline, inherited]

Multiplicatively scale the given histograms, histos, by factor factor.

Note:
Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
Todo:
Use SFINAE for a generic iterable of Histo1DPtrs

Definition at line 677 of file Analysis.hh.

                                                                   {
      for (auto& h : histos) scale(h, factor);
    }
void scale ( const Histo1DPtr(&)  histos[array_size],
double  factor 
) [inline, inherited]
Todo:
YUCK!

Definition at line 682 of file Analysis.hh.

                                                                      {
      for (auto& h : histos) scale(h, factor);
    }
void scale ( Histo2DPtr  histo,
double  factor 
) [inherited]

Multiplicatively scale the given histogram, histo, by factor factor.

Definition at line 755 of file Analysis.cc.

                                                      {
    if (!histo) {
      MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << factor << ")");
      return;
    }
    if (std::isnan(factor) || std::isinf(factor)) {
      MSG_ERROR("Failed to scale histo=" << histo->path() << " in analysis: " << name() << " (invalid scale factor = " << factor << ")");
      factor = 0;
    }
    MSG_TRACE("Scaling histo " << histo->path() << " by factor " << factor);
    try {
      histo->scaleW(factor);
    } catch (YODA::Exception& we) {
      MSG_WARNING("Could not scale histo " << histo->path());
      return;
    }
  }
void scale ( const std::vector< Histo2DPtr > &  histos,
double  factor 
) [inline, inherited]

Multiplicatively scale the given histograms, histos, by factor factor.

Note:
Constness intentional, if weird, to allow passing rvalue refs of smart ptrs (argh)
Todo:
Use SFINAE for a generic iterable of Histo2DPtrs

Definition at line 708 of file Analysis.hh.

                                                                   {
      for (auto& h : histos) scale(h, factor);
    }
void scale ( const Histo2DPtr(&)  histos[array_size],
double  factor 
) [inline, inherited]
Todo:
YUCK!

Definition at line 713 of file Analysis.hh.

                                                                      {
      for (auto& h : histos) scale(h, factor);
    }
Analysis & setCrossSection ( double  xs) [inherited]

Set the cross section from the generator.

Definition at line 145 of file Analysis.cc.

                                               {
    _crossSection = xs;
    _gotCrossSection = true;
    return *this;
  }
Analysis& setNeedsCrossSection ( bool  needed = true) [inline, inherited]

Declare whether this analysis needs to know the process cross-section from the generator.

Todo:
Remove this and require HepMC >= 2.06

Definition at line 235 of file Analysis.hh.

                                                     {
      info().setNeedsCrossSection(needed);
      return *this;
    }
virtual Analysis& setRequiredBeams ( const std::vector< PdgIdPair > &  requiredBeams) [inline, virtual, inherited]

Declare the allowed pairs of incoming beams required by this analysis.

Definition at line 211 of file Analysis.hh.

                                                                                  {
      info().setBeams(requiredBeams);
      return *this;
    }
virtual Analysis& setRequiredEnergies ( const std::vector< std::pair< double, double > > &  requiredEnergies) [inline, virtual, inherited]

Declare the list of valid beam energy pairs, in GeV.

Definition at line 222 of file Analysis.hh.

                                                                                                       {
      info().setEnergies(requiredEnergies);
      return *this;
    }
virtual std::string spiresId ( ) const [inline, virtual, inherited]

Get the SPIRES ID code for this analysis (~deprecated).

Definition at line 125 of file Analysis.hh.

                                       {
      return info().spiresId();
    }
double sqrtS ( ) const [inherited]

Centre of mass energy for this run.

Definition at line 25 of file Analysis.cc.

                               {
    return handler().sqrtS();
  }
virtual std::string status ( ) const [inline, virtual, inherited]

Whether this analysis is trusted (in any way!)

Definition at line 196 of file Analysis.hh.

                                     {
      return (info().status().empty()) ? "UNVALIDATED" : info().status();
    }
virtual std::string summary ( ) const [inline, virtual, inherited]

Get a short description of the analysis.

Short (one sentence) description used as an index entry. Use description() to provide full descriptive paragraphs of analysis details.

Definition at line 142 of file Analysis.hh.

                                      {
      return info().summary();
    }
double sumOfWeights ( ) const [protected, inherited]

Get the sum of event weights seen (via the analysis handler). Use in the finalize phase only.

Definition at line 89 of file Analysis.cc.

                                      {
    return handler().sumOfWeights();
  }
virtual std::vector<std::string> todos ( ) const [inline, virtual, inherited]

Any work to be done on this analysis.

Definition at line 201 of file Analysis.hh.

                                               {
      return info().todos();
    }
virtual std::string year ( ) const [inline, virtual, inherited]

When the original experimental analysis was published.

Definition at line 176 of file Analysis.hh.

                                   {
      return info().year();
    }

Member Data Documentation

bool _allowProjReg [protected, inherited]

Flag to forbid projection registration in analyses until the init phase.

Definition at line 176 of file ProjectionApplier.hh.

map<string, double> _eventCountsPerSR [private]

Definition at line 1052 of file ATLAS_2012_I1204447.cc.

Histo1DPtr _h_e_n [private]

Definition at line 1043 of file ATLAS_2012_I1204447.cc.

Definition at line 1044 of file ATLAS_2012_I1204447.cc.

Definition at line 1041 of file ATLAS_2012_I1204447.cc.

Histograms.

Definition at line 1041 of file ATLAS_2012_I1204447.cc.

Definition at line 1041 of file ATLAS_2012_I1204447.cc.

Definition at line 1041 of file ATLAS_2012_I1204447.cc.

Histo1DPtr _h_mu_n [private]

Definition at line 1043 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Definition at line 1042 of file ATLAS_2012_I1204447.cc.

Histo1DPtr _h_tau_n [private]

Definition at line 1043 of file ATLAS_2012_I1204447.cc.

vector<string> _signal_regions [private]

List of signal regions and event counts per signal region.

Definition at line 1051 of file ATLAS_2012_I1204447.cc.

Fiducial efficiencies to model the effects of the ATLAS detector.

Definition at line 1048 of file ATLAS_2012_I1204447.cc.


The documentation for this class was generated from the following file: