CMS 3D CMS Logo

TauDiscriminationProducerBase.h
Go to the documentation of this file.
1 #ifndef RecoTauTag_RecoTau_TauDiscriminationProducerBase_H_
2 #define RecoTauTag_RecoTau_TauDiscriminationProducerBase_H_
3 
4 /* class TauDiscriminationProducerBase
5  *
6  * Base classes for producing Calo and PFTau discriminators
7  *
8  * PFTaus - inherit from PFTauDiscriminationProducerBase
9  * CaloTaus - inherit from CaloTauDiscriminationProducerBase
10  *
11  * The base class takes a (Calo/PF)Tau collection and a collection of
12  * associated (Calo/PF)TauDiscriminators. Each tau is required to pass the given
13  * set of prediscriminants. Taus that pass these are then passed to the
14  * pure virtual function
15  *
16  * double discriminate(const TauRef&);
17  *
18  * The derived classes should implement this function and return a double
19  * giving the specific discriminant result for this tau.
20  *
21  * The edm::Event and EventSetup are available to the derived classes
22  * at the beginning of the event w/ the virtual function
23  *
24  * void beginEvent(...)
25  *
26  * The derived classes can set the desired value for taus that fail the
27  * prediscriminants by setting the protected variable prediscriminantFailValue_
28  *
29  * created : Wed Aug 12 16:58:37 PDT 2009
30  * Authors : Evan Friis (UC Davis), Simone Gennai (SNS)
31  */
32 
40 
43 
46 
49 
50 template<class TauType, class TauDiscriminator>
52  public:
53  // setup framework types for this tautype
54  typedef std::vector<TauType> TauCollection;
57 
58  // standard constructor from PSet
59  explicit TauDiscriminationProducerBase(const edm::ParameterSet& iConfig);
60 
61  // default constructor must not be called - it will throw an exception
62  // derived! classes must call the parameterset constructor.
64 
66 
67  void produce(edm::Event&, const edm::EventSetup&);
68 
69  // called at the beginning of every event - override if necessary.
70  virtual void beginEvent(const edm::Event& evt,
71  const edm::EventSetup& evtSetup) {}
72 
73  // abstract functions implemented in derived classes.
74  virtual double discriminate(const TauRef& tau) const = 0;
75 
76  // called at the end of event processing - override if necessary.
77  virtual void endEvent(edm::Event& evt) {}
78 
79  struct TauDiscInfo {
83  // = consumes<TauDiscriminator>(label);
84  double cut;
85  void fill(const edm::Event& evt) {
86  // disc_token = consumes<TauDiscriminator>(label);
87  evt.getByToken(disc_token, handle);
88  };
89  };
90 
91 
92  protected:
93  //value given to taus that fail prediscriminants
95 
97 
100 
101  // current tau
102  size_t tauIndex_;
103 
104  private:
105  std::vector<TauDiscInfo> prediscriminants_;
106  // select boolean operation on prediscriminants (and = 0x01, or = 0x00)
108 };
109 
110 // define our implementations
117 
118 
120 //for this tau type
121 template<class TauType> std::string getProducerString()
122 {
123  // this generic one shoudl never be called.
124  // these are specialized in TauDiscriminationProducerBase.cc
125  throw cms::Exception("TauDiscriminationProducerBase")
126  << "Unsupported TauType used. You must use either PFTau, PATTau or CaloTaus.";
127 }
128 #endif
edm::EDGetTokenT< TauDiscriminator > disc_token
edm::RefProd< TauCollection > TauRefProd
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:457
TauDiscriminationProducerBase< reco::CaloTau, reco::CaloTauDiscriminator > CaloTauDiscriminationProducerBase
std::vector< TauDiscInfo > prediscriminants_
void produce(edm::Event &, const edm::EventSetup &)
virtual void endEvent(edm::Event &evt)
TauDiscriminationProducerBase< pat::Tau, pat::PATTauDiscriminator > PATTauDiscriminationProducerBase
edm::EDGetTokenT< TauCollection > Tau_token
std::string getProducerString()
helper function retrieve the correct cfi getter string (ie PFTauProducer)
virtual double discriminate(const TauRef &tau) const =0
TauDiscriminationProducerBase< reco::PFTau, reco::PFTauDiscriminator > PFTauDiscriminationProducerBase
virtual void beginEvent(const edm::Event &evt, const edm::EventSetup &evtSetup)