CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/RecoJets/JetProducers/plugins/CATopJetProducer.h

Go to the documentation of this file.
00001 #ifndef RecoJets_JetProducers_CATopJetProducer_h
00002 #define RecoJets_JetProducers_CATopJetProducer_h
00003 
00004 
00005 /* *********************************************************
00006 
00007 
00008  * \class CATopJetProducer
00009  * Jet producer to produce top jets using the C-A algorithm to break
00010  * jets into subjets as described here:
00011  * "Top-tagging: A Method for Identifying Boosted Hadronic Tops"
00012  * David E. Kaplan, Keith Rehermann, Matthew D. Schwartz, Brock Tweedie
00013  * arXiv:0806.0848v1 [hep-ph] 
00014 
00015   \brief Jet producer to run the CATopJetAlgorithm
00016 
00017   \author   Salvatore Rappoccio
00018   \version  
00019 
00020          Notes on implementation:
00021 
00022          Because the BaseJetProducer only allows the user to produce
00023          one jet collection at a time, this algorithm cannot
00024          fit into that paradigm. 
00025 
00026          All of the "hard" jets are of type BasicJet, since
00027          they are "jets of jets". The subjets will be either
00028          CaloJets, GenJets, etc.
00029 
00030          In order to avoid a templatization of the entire
00031          EDProducer itself, we only use a templated method
00032          to write out the subjets to the event record,
00033          and to use that information to write out the
00034          hard jets to the event record.
00035 
00036          This templated method is called "write_outputs". It
00037          relies on a second templated method called "write_specific",
00038          which relies on some template specialization to create
00039          different specific objects (i.e. CaloJets, BasicJets, GenJets, etc). 
00040 
00041  ************************************************************/
00042 
00043 
00044 
00045 
00046 #include "FWCore/Framework/interface/Event.h"
00047 #include "FWCore/Framework/interface/EventSetup.h"
00048 #include "DataFormats/Common/interface/View.h"
00049 #include "DataFormats/Common/interface/Handle.h"
00050 #include "DataFormats/Provenance/interface/ProductID.h"
00051 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00052 
00053 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00054 #include "DataFormats/JetReco/interface/GenJetCollection.h"
00055 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00056 #include "DataFormats/JetReco/interface/BasicJetCollection.h"
00057 #include "RecoJets/JetAlgorithms/interface/JetAlgoHelper.h"
00058 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00059 #include "DataFormats/Candidate/interface/LeafCandidate.h"
00060 #include "FWCore/Framework/interface/ESHandle.h"
00061 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00062 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00063 
00064 #include "RecoJets/JetProducers/plugins/FastjetJetProducer.h"
00065 #include "RecoJets/JetAlgorithms/interface/CATopJetAlgorithm.h"
00066 #include "CATopJetProducer.h"
00067 #include "RecoJets/JetAlgorithms/interface/CMSTopTagger.h"
00068 #include "RecoJets/JetAlgorithms/interface/HEPTopTaggerWrapper.h"
00069 
00070 #include <fastjet/tools/RestFrameNSubjettinessTagger.hh>
00071 #include "fastjet/SISConePlugin.hh"
00072 
00073 
00074 namespace cms
00075 {
00076   class CATopJetProducer : public FastjetJetProducer
00077   {
00078   public:
00079 
00080     CATopJetProducer(const edm::ParameterSet& ps);
00081 
00082     virtual ~CATopJetProducer() {}
00083 
00084     virtual void produce( edm::Event& iEvent, const edm::EventSetup& iSetup );
00085 
00086     virtual void runAlgorithm( edm::Event& iEvent, const edm::EventSetup& iSetup );
00087 
00088   private:
00089     std::auto_ptr<CATopJetAlgorithm>        legacyCMSTopTagger_;         
00090     std::auto_ptr<fastjet::CMSTopTagger>     fjCMSTopTagger_;    // The FastJet implementation of the CMS tagger
00091     std::auto_ptr<fastjet::HEPTopTagger>     fjHEPTopTagger_;
00092     std::auto_ptr<fastjet::JHTopTagger>     fjJHUTopTagger_;
00093     std::auto_ptr<fastjet::RestFrameNSubjettinessTagger>   fjNSUBTagger_;
00094 
00095 
00096 
00097     int tagAlgo_;
00098     double ptMin_;
00099     double centralEtaCut_;
00100     bool verbose_;
00101     enum tagalgos {
00102         CA_TOPTAGGER,
00103         FJ_CMS_TOPTAG,
00104         FJ_HEP_TOPTAG,
00105         FJ_JHU_TOPTAG,
00106         FJ_NSUB_TAG
00107     };
00108 
00109 
00110   };
00111 
00112 }
00113 
00114 
00115 #endif