CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Types | Public Member Functions | Protected Attributes | Private Attributes
TauDiscriminationProducerBase< TauType, TauDiscriminator > Class Template Referenceabstract

#include <TauDiscriminationProducerBase.h>

Inheritance diagram for TauDiscriminationProducerBase< TauType, TauDiscriminator >:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper CaloRecoTauDiscriminationAgainstElectron CaloRecoTauDiscriminationAgainstHadronicJets CaloRecoTauDiscriminationByCharge CaloRecoTauDiscriminationByDeltaE CaloRecoTauDiscriminationByFlightPathSignificance CaloRecoTauDiscriminationByInvMass CaloRecoTauDiscriminationByIsolation CaloRecoTauDiscriminationByLeadingTrackPtCut CaloRecoTauDiscriminationByNProngs CaloRecoTauDiscriminationByTauPolarization PFRecoTauCorrectedInvariantMassProducer PFRecoTauDiscriminationAgainstElectron PFRecoTauDiscriminationAgainstElectronDeadECAL PFRecoTauDiscriminationAgainstElectronMVA PFRecoTauDiscriminationAgainstElectronMVA2 PFRecoTauDiscriminationAgainstElectronMVA3 PFRecoTauDiscriminationAgainstMuon PFRecoTauDiscriminationAgainstMuon2 PFRecoTauDiscriminationByCharge PFRecoTauDiscriminationByDeltaE PFRecoTauDiscriminationByFlight PFRecoTauDiscriminationByFlightPathSignificance PFRecoTauDiscriminationByHPSSelection PFRecoTauDiscriminationByInvMass PFRecoTauDiscriminationByIsolation PFRecoTauDiscriminationByLeadingObjectPtCut PFRecoTauDiscriminationByMVAIsolation PFRecoTauDiscriminationByNProngs PFRecoTauDiscriminationByTauPolarization PFTauDecayModeCutMultiplexer PFTauDiscriminatorLogicalAndProducer PFTauMVADiscriminator PFTauRandomDiscriminator RecoTauDecayModeCutMultiplexer RecoTauDiscriminantCutMultiplexer RecoTauDiscriminationByGenMatch RecoTauIndexDiscriminatorProducer RecoTauMVADiscriminator RecoTauMVATransform TauDiscriminationAgainstCaloMuon< TauType, TauDiscriminator > TauDiscriminationAgainstMuon< TauType, TauDiscriminator > TauDiscriminationByStringCut< TauType, TauDiscriminator > TCRecoTauDiscriminationAgainstHadronicJets TCRecoTauDiscriminationAlgoComponent

Classes

struct  TauDiscInfo
 

Public Types

typedef std::vector< TauType > TauCollection
 
typedef edm::Ref< TauCollectionTauRef
 
typedef edm::RefProd
< TauCollection
TauRefProd
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

virtual void beginEvent (const edm::Event &evt, const edm::EventSetup &evtSetup)
 
virtual double discriminate (const TauRef &tau)=0
 
virtual void endEvent (edm::Event &evt)
 
void produce (edm::Event &, const edm::EventSetup &)
 
 TauDiscriminationProducerBase (const edm::ParameterSet &iConfig)
 
 TauDiscriminationProducerBase ()
 
virtual ~TauDiscriminationProducerBase ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Protected Attributes

std::string moduleLabel_
 
double prediscriminantFailValue_
 
edm::InputTag TauProducer_
 

Private Attributes

uint8_t andPrediscriminants_
 
std::vector< TauDiscInfoprediscriminants_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

template<class TauType, class TauDiscriminator>
class TauDiscriminationProducerBase< TauType, TauDiscriminator >

Definition at line 47 of file TauDiscriminationProducerBase.h.

Member Typedef Documentation

template<class TauType , class TauDiscriminator >
typedef std::vector<TauType> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauCollection

Definition at line 50 of file TauDiscriminationProducerBase.h.

template<class TauType , class TauDiscriminator >
typedef edm::Ref<TauCollection> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauRef

Definition at line 51 of file TauDiscriminationProducerBase.h.

template<class TauType , class TauDiscriminator >
typedef edm::RefProd<TauCollection> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauRefProd

Definition at line 52 of file TauDiscriminationProducerBase.h.

Constructor & Destructor Documentation

template<class TauType , class TauDiscriminator >
TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscriminationProducerBase ( const edm::ParameterSet iConfig)
explicit

Definition at line 17 of file TauDiscriminationProducerBase.cc.

References TauDiscriminationProducerBase< TauType, TauDiscriminator >::andPrediscriminants_, GOODCOLL_filter_cfg::cut, edm::hlt::Exception, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), diffTwoXMLs::label, TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscInfo::label, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminantFailValue_, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminants_, AlCaHLTBitMon_QueryRunRegistry::string, TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauProducer_, and create_public_pileup_plots::transform.

18  : moduleLabel_(iConfig.getParameter<std::string>("@module_label"))
19 {
20  // tau collection to discriminate
21  TauProducer_ = iConfig.getParameter<edm::InputTag>(getProducerString<TauType>());
22 
23  // prediscriminant operator
24  // require the tau to pass the following prediscriminants
25  const edm::ParameterSet& prediscriminantConfig = iConfig.getParameter<edm::ParameterSet>("Prediscriminants");
26 
27  // determine boolean operator used on the prediscriminants
28  std::string pdBoolOperator = prediscriminantConfig.getParameter<std::string>("BooleanOperator");
29  // convert string to lowercase
30  transform(pdBoolOperator.begin(), pdBoolOperator.end(), pdBoolOperator.begin(), ::tolower);
31 
32  if( pdBoolOperator == "and" )
33  {
34  andPrediscriminants_ = 0x1; //use chars instead of bools so we can do a bitwise trick later
35  }
36  else if ( pdBoolOperator == "or" )
37  {
39  }
40  else
41  {
42  throw cms::Exception("TauDiscriminationProducerBase") << "PrediscriminantBooleanOperator defined incorrectly, options are: AND,OR";
43  }
44 
45  // get the list of prediscriminants
46  std::vector<std::string> prediscriminantsNames = prediscriminantConfig.getParameterNamesForType<edm::ParameterSet>();
47 
48  for( std::vector<std::string>::const_iterator iDisc = prediscriminantsNames.begin();
49  iDisc != prediscriminantsNames.end(); ++iDisc )
50  {
51  const edm::ParameterSet& iPredisc = prediscriminantConfig.getParameter<edm::ParameterSet>(*iDisc);
52  const edm::InputTag& label = iPredisc.getParameter<edm::InputTag>("Producer");
53  double cut = iPredisc.getParameter<double>("cut");
54 
55  TauDiscInfo thisDiscriminator;
56  thisDiscriminator.label = label;
57  thisDiscriminator.cut = cut;
58  prediscriminants_.push_back(thisDiscriminator);
59  }
60 
62 
63  // register product
64  produces<TauDiscriminator>();
65 }
T getParameter(std::string const &) const
std::vector< TauDiscInfo > prediscriminants_
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:195
template<class TauType , class TauDiscriminator >
TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscriminationProducerBase ( )

Definition at line 9 of file TauDiscriminationProducerBase.cc.

References edm::hlt::Exception.

10 {
11  throw cms::Exception("TauDiscriminationProducerBase") << " -- default ctor called; derived classes must call " <<
12  "TauDiscriminationProducerBase(const ParameterSet&)";
13 }
template<class TauType , class TauDiscriminator >
virtual TauDiscriminationProducerBase< TauType, TauDiscriminator >::~TauDiscriminationProducerBase ( )
inlinevirtual

Definition at line 61 of file TauDiscriminationProducerBase.h.

61 {}

Member Function Documentation

template<class TauType , class TauDiscriminator >
virtual void TauDiscriminationProducerBase< TauType, TauDiscriminator >::beginEvent ( const edm::Event evt,
const edm::EventSetup evtSetup 
)
inlinevirtual
template<class TauType , class TauDiscriminator >
virtual double TauDiscriminationProducerBase< TauType, TauDiscriminator >::discriminate ( const TauRef tau)
pure virtual
template<class TauType , class TauDiscriminator >
virtual void TauDiscriminationProducerBase< TauType, TauDiscriminator >::endEvent ( edm::Event evt)
inlinevirtual
template<class TauType , class TauDiscriminator >
void TauDiscriminationProducerBase< TauType, TauDiscriminator >::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
virtual

Implements edm::EDProducer.

Definition at line 68 of file TauDiscriminationProducerBase.cc.

References edm::hlt::Exception, edm::ProductID::id(), edm::HandleBase::id(), convertSQLitetoXML_cfg::output, and query::result.

69 {
70  // setup function - does nothing in base, but can be overridden to retrieve PV or other stuff
71  beginEvent(event, eventSetup);
72 
73  // retrieve the tau collection to discriminate
75  event.getByLabel(TauProducer_, taus);
76 
77  edm::ProductID tauProductID = taus.id();
78 
79  // output product
80  std::auto_ptr<TauDiscriminator> output(new TauDiscriminator(TauRefProd(taus)));
81 
82  size_t nTaus = taus->size();
83 
84  // load prediscriminators
85  size_t nPrediscriminants = prediscriminants_.size();
86  for( size_t iDisc = 0; iDisc < nPrediscriminants; ++iDisc )
87  {
88  prediscriminants_[iDisc].fill(event);
89 
90  // Check to make sure the product is correct for the discriminator.
91  // If not, throw a more informative exception.
92  edm::ProductID discKeyId =
93  prediscriminants_[iDisc].handle->keyProduct().id();
94  if (tauProductID != discKeyId) {
95  throw cms::Exception("MisconfiguredPrediscriminant")
96  << "The tau collection with input tag " << TauProducer_
97  << " has product ID: " << tauProductID
98  << " but the pre-discriminator with input tag "
99  << prediscriminants_[iDisc].label
100  << " is keyed with product ID: " << discKeyId << std::endl;
101  }
102  }
103 
104  // loop over taus
105  for( size_t iTau = 0; iTau < nTaus; ++iTau )
106  {
107  // get reference to tau
108  TauRef tauRef(taus, iTau);
109 
110  bool passesPrediscriminants = true;
111  // check tau passes prediscriminants
112  for( size_t iDisc = 0; iDisc < nPrediscriminants; ++iDisc )
113  {
114  // current discriminant result for this tau
115  double discResult = (*prediscriminants_[iDisc].handle)[tauRef];
116  uint8_t thisPasses = ( discResult > prediscriminants_[iDisc].cut ) ? 1 : 0;
117 
118  // if we are using the AND option, as soon as one fails,
119  // the result is FAIL and we can quit looping.
120  // if we are using the OR option as soon as one passes,
121  // the result is pass and we can quit looping
122 
123  // truth table
124  // | result (thisPasses)
125  // | F | T
126  //-----------------------------------
127  // AND(T) | res=fails | continue
128  // | break |
129  //-----------------------------------
130  // OR (F) | continue | res=passes
131  // | | break
132 
133  if( thisPasses ^ andPrediscriminants_ ) //XOR
134  {
135  passesPrediscriminants = ( andPrediscriminants_ ? 0 : 1 ); //NOR
136  break;
137  }
138  }
139 
141  if( passesPrediscriminants )
142  {
143  // this tau passes the prereqs, call our implemented discrimination function
144  result = discriminate(tauRef);
145  }
146 
147  // store the result of this tau into our new discriminator
148  output->setValue(iTau, result);
149  }
150  event.put(output);
151 
152  // function to put additional information into the event - does nothing in base, but can be overridden in derived classes
153  endEvent(event);
154 }
virtual double discriminate(const TauRef &tau)=0
edm::RefProd< TauCollection > TauRefProd
ProductID id() const
Definition: HandleBase.cc:15
std::vector< TauDiscInfo > prediscriminants_
virtual void endEvent(edm::Event &evt)
tuple result
Definition: query.py:137
virtual void beginEvent(const edm::Event &evt, const edm::EventSetup &evtSetup)

Member Data Documentation

template<class TauType , class TauDiscriminator >
uint8_t TauDiscriminationProducerBase< TauType, TauDiscriminator >::andPrediscriminants_
private
template<class TauType , class TauDiscriminator >
std::string TauDiscriminationProducerBase< TauType, TauDiscriminator >::moduleLabel_
protected
template<class TauType , class TauDiscriminator >
double TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminantFailValue_
protected
template<class TauType , class TauDiscriminator >
std::vector<TauDiscInfo> TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminants_
private
template<class TauType , class TauDiscriminator >
edm::InputTag TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauProducer_
protected