33 useUserData_(iConfig.exists(
"userData"))
79 throw cms::Exception(
"Configuration") <<
"PATTauProducer: you can't specify both 'tauIDSource' and 'tauIDSources'\n";
84 for (std::vector<std::string>::const_iterator it = names.begin(), ed = names.end(); it != ed; ++it) {
90 "PATTauProducer: id addTauID is true, you must specify either:\n" <<
91 "\tInputTag tauIDSource = <someTag>\n" <<
"or\n" <<
92 "\tPSet tauIDSources = { \n" <<
93 "\t\tInputTag <someName> = <someTag> // as many as you want \n " <<
97 if (iConfig.
exists(
"isoDeposits")) {
107 if ( depconf.
exists(
"user") ) {
108 std::vector<edm::InputTag> userdeps = depconf.
getParameter<std::vector<edm::InputTag> >(
"user");
109 std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
111 for ( ; it != ed; ++it, ++
key) {
131 produces<std::vector<Tau> >();
152 edm::LogWarning(
"DataSource") <<
"WARNING! No Tau collection found. This missing input will not block the job. Instead, an empty tau collection is being be produced.";
153 std::auto_ptr<std::vector<Tau> >
patTaus(
new std::vector<Tau>());
163 std::vector<edm::Handle<edm::ValueMap<IsoDeposit> > > deposits(
isoDepositLabels_.size());
164 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
169 std::vector<edm::Handle<edm::Association<reco::GenParticleCollection> > > genMatches(
genMatchSrc_.size());
180 std::vector<edm::ValueMap<TauJetCorrFactors> > tauJetCorrs;
185 tauJetCorrs.push_back( *tauJetCorr );
189 std::auto_ptr<std::vector<Tau> >
patTaus(
new std::vector<Tau>());
192 for (
size_t idx = 0, ntaus = anyTaus->size(); idx < ntaus; ++idx) {
204 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
210 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
216 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
222 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
228 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
234 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
240 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
246 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
252 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
258 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
264 edm::LogWarning(
"Type Error") <<
"Embedding a PFTau-specific information into a pat::Tau which wasn't made from a reco::PFTau is impossible.\n";
275 std::vector<std::string> levels = tauJetCorrs[0][tausRef].correctionLabels();
276 if(
std::find(levels.begin(), levels.end(),
"L2L3Residual")!=levels.end()){
277 aTau.
initializeJEC(tauJetCorrs[0][tausRef].jecLevel(
"L2L3Residual"));
279 else if(
std::find(levels.begin(), levels.end(),
"L3Absolute")!=levels.end()){
280 aTau.
initializeJEC(tauJetCorrs[0][tausRef].jecLevel(
"L3Absolute"));
283 aTau.
initializeJEC(tauJetCorrs[0][tausRef].jecLevel(
"Uncorrected"));
286 <<
"L2L3Residual and L3Absolute are not part of the correction applied jetCorrFactors \n"
287 <<
"of module " << tauJetCorrs[0][tausRef].jecSet() <<
" jets will remain"
296 for(
size_t i = 0,
n = genMatches.size();
i <
n; ++
i) {
313 std::vector<pat::Tau::IdPair> ids(
tauIDSrcs_.size());
343 "PATTauProducer: unsupported datatype '" <<
typeid(*tausRef).name() <<
"' for tauSource\n";
371 for (
size_t j = 0, nd = deposits.size();
j < nd; ++
j) {
387 patTaus->push_back(aTau);
400 template <
typename TauCollectionType,
typename TauDiscrType>
404 return (*tauIdDiscr)[tauRef];
417 iDesc.
add<
bool>(
"embedIsolationTracks",
false)->setComment(
"embed external isolation tracks");
418 iDesc.
add<
bool>(
"embedLeadTrack",
false)->setComment(
"embed external leading track");
419 iDesc.
add<
bool>(
"embedLeadTracks",
false)->setComment(
"embed external signal tracks");
422 iDesc.
add<
bool>(
"addGenMatch",
true)->setComment(
"add MC matching");
423 iDesc.
add<
bool>(
"embedGenMatch",
false)->setComment(
"embed MC matched MC information");
424 std::vector<edm::InputTag> emptySourceVector;
427 )->
setComment(
"input with MC match information");
430 iDesc.
add<
bool>(
"addGenJetMatch",
true)->setComment(
"add MC jet matching");
431 iDesc.
add<
bool>(
"embedGenJetMatch",
false)->setComment(
"embed MC jet matched jet information");
438 iDesc.
add<
bool>(
"addTauID",
true)->setComment(
"add tau ID variables");
443 )->
setComment(
"input with electron ID variables");
454 isoDepositsPSet.
addOptional<std::vector<edm::InputTag> >(
"user");
460 iDesc.
add(
"efficiencies", efficienciesPSet);
461 iDesc.
add<
bool>(
"addEfficiencies",
false);
470 iDesc.
add(
"userIsolation", isolationPSet);
bool enabled() const
'true' if this there is at least one efficiency configured
T getParameter(std::string const &) const
void setComment(std::string const &value)
Assists in assimilating all pat::UserData into pat objects.
std::pair< std::string, edm::InputTag > NameTag
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup)
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
void setIsolation(IsolationKeys key, float value)
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
static const HistoName names[]
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
bool addTauJetCorrFactors_
void setAllowAnything()
allow any parameter label/value pairs
#define DEFINE_FWK_MODULE(type)
void embedLeadPFChargedHadrCand()
method to store the leading charged hadron candidate internally
pat::helper::EfficiencyLoader efficiencyLoader_
bool exists(std::string const ¶meterName) const
checks if a parameter exists
pat::helper::KinResolutionsLoader resolutionLoader_
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
void embedSignalPFGammaCands()
method to store the signal gamma candidates internally
float getTauIdDiscriminator(const edm::Handle< TauCollectionType > &, size_t, const edm::Handle< TauDiscrType > &)
void embedIsolationPFCands()
method to store the isolation candidates internally
void embedIsolationPFGammaCands()
method to store the isolation gamma candidates internally
void setTauIDs(const std::vector< IdPair > &ids)
IsolationKeys
Enum defining isolation keys.
void embedSignalTracks()
method to store the signal tracks internally
edm::InputTag genJetMatchSrc_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void setResolutions(pat::PATObject< T > &obj) const
Sets the efficiencies for this object, using the reference to the original objects.
std::vector< edm::InputTag > genMatchSrc_
bool enabled() const
'true' if this there is at least one efficiency configured
void setIsoDeposit(IsolationKeys key, const IsoDeposit &dep)
Sets the IsoDeposit associated with some key; if it is already existent, it is overwritten.
bool embedIsolationPFChargedHadrCands_
void initializeJEC(unsigned int level, const unsigned int set=0)
initialize the jet to a given JEC level during creation starting from Uncorrected ...
static void fillDescription(edm::ParameterSetDescription &iDesc)
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
U second(std::pair< T, U > const &p)
bool enabled() const
True if it has a non null configuration.
bool isNonnull() const
Checks for non-null.
void embedSignalPFChargedHadrCands()
method to store the signal charged hadrons candidates internally
void setComment(std::string const &value)
void embedSignalPFCands()
method to store the signal candidates internally
void beginEvent(const edm::Event &event, const edm::EventSetup &eventSetup)
pat::helper::MultiIsolator isolator_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
bool embedIsolationPFNeutralHadrCands_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void embedLeadTrack()
method to store the leading track internally
pat::PATUserDataHelper< pat::Tau > userDataHelper_
bool embedSignalPFNeutralHadrCands_
bool embedIsolationPFCands_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Analysis-level tau class.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
void embedIsolationPFNeutralHadrCands()
method to store the isolation neutral hadrons candidates internally
void embedLeadPFNeutralCand()
method to store the leading neutral candidate internally
void addGenParticleRef(const reco::GenParticleRef &ref)
static void fillDescription(edm::ParameterSetDescription &iDesc)
Method for documentation and validation of PSet.
bool embedIsolationTracks_
bool embedLeadPFChargedHadrCand_
bool embedIsolationPFGammaCands_
void setEfficiencies(pat::PATObject< T > &obj, const R &originalRef) const
Sets the efficiencies for this object, using the reference to the original objects.
void embedSignalPFNeutralHadrCands()
method to store the signal neutral hadrons candidates internally
void setDecayMode(int)
set decay mode
bool embedSignalPFGammaCands_
std::vector< std::pair< pat::IsolationKeys, float > > IsolationValuePairs
void embedIsolationPFChargedHadrCands()
method to store the isolation charged hadrons candidates internally
void addJECFactors(const TauJetCorrFactors &jec)
add more sets of energy correction factors
PATTauProducer(const edm::ParameterSet &iConfig)
bool embedLeadPFNeutralCand_
bool isPFTau() const
Returns true if this pat::Tau was made from a reco::PFTau.
std::vector< edm::InputTag > tauJetCorrFactorsSrc_
void setGenJet(const reco::GenJetRef &ref)
set the matched GenJet
void embedIsolationTracks()
method to store the isolation tracks internally
std::vector< std::pair< pat::IsolationKeys, edm::InputTag > > isoDepositLabels_
bool embedSignalPFChargedHadrCands_
void newEvent(const edm::Event &event, const edm::EventSetup &setup) const
To be called for each new event, reads in the EventSetup object.
void embedLeadPFCand()
method to store the leading candidate internally
std::vector< NameTag > tauIDSrcs_
void newEvent(const edm::Event &event) const
To be called for each new event, reads in the ValueMaps for efficiencies.
GreaterByPt< Tau > pTTauComparator_
void fill(const edm::View< T > &coll, int idx, IsolationValuePairs &isolations) const