|
|
Go to the documentation of this file.
4 #ifndef DataFormats_PatCandidates_PATObject_h
5 #define DataFormats_PatCandidates_PATObject_h
42 namespace pat_statics {
47 template <
class ObjectType>
91 const size_t idx = 0)
const;
93 const size_t idx = 0)
const {
98 const size_t idx = 0)
const {
121 const size_t idx = 0)
const;
124 const size_t idx = 0)
const {
131 const bool algoCondAccepted =
true)
const;
134 const bool algoCondAccepted =
true)
const {
139 const unsigned algoCondAccepted)
const {
144 const unsigned algoCondAccepted)
const {
151 const bool algoCondAccepted =
true,
152 const size_t idx = 0)
const;
155 const bool algoCondAccepted =
true,
156 const size_t idx = 0)
const {
161 const unsigned algoCondAccepted,
162 const size_t idx = 0)
const {
167 const unsigned algoCondAccepted,
168 const size_t idx = 0)
const {
179 const size_t idx = 0)
const;
190 const bool pathLastFilterAccepted =
false,
191 const bool pathL3FilterAccepted =
true)
const;
194 const bool pathLastFilterAccepted =
false,
195 const bool pathL3FilterAccepted =
true)
const {
200 const unsigned pathLastFilterAccepted,
201 const unsigned pathL3FilterAccepted = 1)
const {
206 const unsigned pathLastFilterAccepted,
207 const unsigned pathL3FilterAccepted = 1)
const {
209 std::string(namePath),
bool(pathLastFilterAccepted),
bool(pathL3FilterAccepted));
217 const bool pathLastFilterAccepted =
false,
218 const bool pathL3FilterAccepted =
true,
219 const size_t idx = 0)
const;
222 const bool pathLastFilterAccepted =
false,
223 const bool pathL3FilterAccepted =
true,
224 const size_t idx = 0)
const {
229 const unsigned pathLastFilterAccepted,
230 const unsigned pathL3FilterAccepted = 1,
231 const size_t idx = 0)
const {
236 const unsigned pathLastFilterAccepted,
237 const unsigned pathL3FilterAccepted = 1,
238 const size_t idx = 0)
const {
240 std::string(namePath),
bool(pathLastFilterAccepted),
bool(pathL3FilterAccepted),
idx);
252 it->unpackPathNames(
names);
258 std::vector<std::pair<std::string, pat::LookupTableRecord> >
efficiencies()
const;
326 template <
typename T>
329 return (
data !=
nullptr ?
data->template get<T>() :
nullptr);
345 return (
data !=
nullptr ?
data->bareData() :
nullptr);
352 template <
typename T>
354 std::unique_ptr<pat::UserData> made(pat::UserData::make<T>(
data, transientOnly));
361 std::unique_ptr<pat::UserData>
cloned(
data->clone());
508 template <
class ObjectType>
511 template <
class ObjectType>
514 template <
class ObjectType>
523 template <
class ObjectType>
526 template <
class ObjectType>
528 if (refToOrig_.isNull()) {
532 }
else if (!refToOrig_.isAvailable()) {
534 <<
"The original collection from which this PAT object was made is not present any more in the event, hence "
535 "you cannot access the originating object anymore.";
537 return refToOrig_.get();
541 template <
class ObjectType>
546 template <
class ObjectType>
548 if (
idx >= triggerObjectMatches().
size())
554 template <
class ObjectType>
558 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
559 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasTriggerObjectType(triggerObjectType))
560 matches.push_back(*(triggerObjectMatch(
i)));
565 template <
class ObjectType>
568 std::vector<size_t> refs;
569 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
570 if (triggerObjectMatch(
i) !=
nullptr && triggerObjectMatch(
i)->hasTriggerObjectType(triggerObjectType))
573 if (
idx >= refs.size())
576 return ref.
isNonnull() ? ref.get() :
nullptr;
579 template <
class ObjectType>
583 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
584 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasCollection(coll))
585 matches.push_back(*(triggerObjectMatch(
i)));
590 template <
class ObjectType>
592 const size_t idx)
const {
593 std::vector<size_t> refs;
594 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
595 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasCollection(coll)) {
599 if (
idx >= refs.size())
602 return ref.
isNonnull() ? ref.get() :
nullptr;
605 template <
class ObjectType>
609 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
610 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasConditionName(nameCondition))
611 matches.push_back(*(triggerObjectMatch(
i)));
616 template <
class ObjectType>
618 const size_t idx)
const {
619 std::vector<size_t> refs;
620 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
621 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasConditionName(nameCondition))
624 if (
idx >= refs.size())
627 return ref.
isNonnull() ? ref.get() :
nullptr;
630 template <
class ObjectType>
632 const std::string &nameAlgorithm,
const bool algoCondAccepted)
const {
634 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
635 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasAlgorithmName(nameAlgorithm, algoCondAccepted))
636 matches.push_back(*(triggerObjectMatch(
i)));
641 template <
class ObjectType>
643 const bool algoCondAccepted,
644 const size_t idx)
const {
645 std::vector<size_t> refs;
646 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
647 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasAlgorithmName(nameAlgorithm, algoCondAccepted))
650 if (
idx >= refs.size())
653 return ref.
isNonnull() ? ref.get() :
nullptr;
656 template <
class ObjectType>
660 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
661 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasFilterLabel(labelFilter))
662 matches.push_back(*(triggerObjectMatch(
i)));
667 template <
class ObjectType>
669 const size_t idx)
const {
670 std::vector<size_t> refs;
671 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
672 if (triggerObjectMatch(
i) != 0 && triggerObjectMatch(
i)->hasFilterLabel(labelFilter))
675 if (
idx >= refs.size())
678 return ref.
isNonnull() ? ref.get() :
nullptr;
681 template <
class ObjectType>
683 const std::string &namePath,
const bool pathLastFilterAccepted,
const bool pathL3FilterAccepted)
const {
685 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
686 if (triggerObjectMatch(
i) !=
nullptr &&
687 triggerObjectMatch(
i)->hasPathName(namePath, pathLastFilterAccepted, pathL3FilterAccepted))
688 matches.push_back(*(triggerObjectMatch(
i)));
693 template <
class ObjectType>
695 const bool pathLastFilterAccepted,
696 const bool pathL3FilterAccepted,
697 const size_t idx)
const {
698 std::vector<size_t> refs;
699 for (
size_t i = 0;
i < triggerObjectMatches().size(); ++
i) {
700 if (triggerObjectMatch(
i) !=
nullptr &&
701 triggerObjectMatch(
i)->hasPathName(namePath, pathLastFilterAccepted, pathL3FilterAccepted))
704 if (
idx >= refs.size())
707 return ref.
isNonnull() ? ref.get() :
nullptr;
710 template <
class ObjectType>
714 if ((it == efficiencyNames_.end()) || (*it !=
name)) {
715 throw cms::Exception(
"Invalid Label") <<
"There is no efficiency with name '" <<
name <<
"' in this PAT Object\n";
717 return efficiencyValues_[
std::distance(efficiencyNames_.cbegin(), it)];
720 template <
class ObjectType>
722 std::vector<std::pair<std::string, pat::LookupTableRecord> >
ret;
723 std::vector<std::string>::const_iterator itn = efficiencyNames_.begin(), edn = efficiencyNames_.end();
724 std::vector<pat::LookupTableRecord>::const_iterator itv = efficiencyValues_.begin();
725 for (; itn != edn; ++itn, ++itv) {
726 ret.emplace_back(*itn, *itv);
731 template <
class ObjectType>
735 const auto dist =
std::distance(efficiencyNames_.begin(), it);
736 if (it == efficiencyNames_.end()) {
737 efficiencyNames_.push_back(
name);
738 efficiencyValues_.push_back(
value);
739 }
else if (*it ==
name) {
740 efficiencyValues_[dist] =
value;
742 efficiencyNames_.insert(it,
name);
743 efficiencyValues_.insert(efficiencyValues_.begin() + dist,
value);
747 template <
class ObjectType>
749 genParticleRef_ = std::vector<reco::GenParticleRef>(1, ref);
750 genParticleEmbedded_.clear();
755 template <
class ObjectType>
757 if (!genParticleEmbedded_.empty()) {
759 genParticleEmbedded_.push_back(*ref);
761 genParticleRef_.push_back(ref);
765 template <
class ObjectType>
767 genParticleEmbedded_.clear();
768 genParticleEmbedded_.push_back(particle);
769 genParticleRef_.clear();
772 template <
class ObjectType>
774 genParticleEmbedded_.clear();
775 for (std::vector<reco::GenParticleRef>::const_iterator it = genParticleRef_.begin(); it != genParticleRef_.end();
778 genParticleEmbedded_.push_back(**it);
780 genParticleRef_.clear();
783 template <
class ObjectType>
785 if (genParticleEmbedded_.empty())
786 return genParticleRef_;
787 std::vector<reco::GenParticleRef>
ret(genParticleEmbedded_.size());
788 for (
size_t i = 0,
n =
ret.size();
i <
n; ++
i) {
794 template <
class ObjectType>
797 const std::vector<reco::GenParticleRef> &vec = (genParticleEmbedded_.empty() ? genParticleRef_ : genParticleRefs());
798 for (std::vector<reco::GenParticleRef>::const_iterator ref = vec.begin(),
end = vec.end(); ref !=
end; ++ref) {
799 if (ref->isNonnull()) {
805 }
else if (!autoCharge) {
812 else if ((this->
charge() == 0) && (pdgId ==
g.pdgId()))
814 else if (
g.charge() * this->
charge() * pdgId > 0)
822 template <
class ObjectType>
828 template <
class ObjectType>
836 template <
class ObjectType>
842 overlapItems_.insert(overlapItems_.begin() + dist,
overlaps);
848 template <
class ObjectType>
851 if (it != userDataLabels_.cend() && *it ==
key) {
852 return &userDataObjects_[
std::distance(userDataLabels_.cbegin(), it)];
857 template <
class ObjectType>
859 std::unique_ptr<pat::UserData>
data,
862 const auto dist =
std::distance(userDataLabels_.begin(), it);
863 if (it == userDataLabels_.end() || *it !=
label) {
864 userDataLabels_.insert(it,
label);
865 userDataObjects_.insert(userDataObjects_.begin() + dist,
std::move(
data));
866 }
else if (overwrite) {
870 userDataLabels_.insert(it + 1,
label);
871 userDataObjects_.insert(userDataObjects_.begin() + dist + 1,
std::move(
data));
875 template <
class ObjectType>
878 if (it != userFloatLabels_.cend() && *it ==
key) {
879 return userFloats_[
std::distance(userFloatLabels_.cbegin(), it)];
882 return std::numeric_limits<float>::quiet_NaN();
885 template <
class ObjectType>
887 auto range = std::equal_range(userFloatLabels_.cbegin(), userFloatLabels_.cend(),
key);
888 std::vector<float>
result;
890 for (
auto it =
range.first; it !=
range.second; ++it) {
896 template <
class ObjectType>
899 const auto dist =
std::distance(userFloatLabels_.begin(), it);
900 if (it == userFloatLabels_.end() || *it !=
label) {
901 userFloatLabels_.insert(it,
label);
902 userFloats_.insert(userFloats_.begin() + dist,
data);
903 }
else if (overwrite) {
904 userFloats_[dist] =
data;
907 userFloatLabels_.insert(it + 1,
label);
908 userFloats_.insert(userFloats_.begin() + dist + 1,
data);
912 template <
class ObjectType>
915 if (it != userIntLabels_.cend() && *it ==
key) {
916 return userInts_[
std::distance(userIntLabels_.cbegin(), it)];
922 template <
class ObjectType>
924 auto range = std::equal_range(userIntLabels_.cbegin(), userIntLabels_.cend(),
key);
927 for (
auto it =
range.first; it !=
range.second; ++it) {
933 template <
class ObjectType>
937 if (it == userIntLabels_.end() || *it !=
label) {
938 userIntLabels_.insert(it,
label);
939 userInts_.insert(userInts_.begin() + dist,
data);
940 }
else if (overwrite) {
941 userInts_[dist] =
data;
944 userIntLabels_.insert(it + 1,
label);
945 userInts_.insert(userInts_.begin() + dist + 1,
data);
949 template <
class ObjectType>
952 if (it != userCandLabels_.cend()) {
953 return userCands_[
std::distance(userCandLabels_.begin(), it)];
958 template <
class ObjectType>
961 const bool overwrite) {
963 const auto dist =
std::distance(userCandLabels_.begin(), it);
964 if (it == userCandLabels_.end() || *it !=
label) {
965 userCandLabels_.insert(it,
label);
966 userCands_.insert(userCands_.begin() + dist,
data);
967 }
else if (overwrite) {
968 userCands_[dist] =
data;
970 userCandLabels_.insert(it + 1,
label);
971 userCands_.insert(userCands_.begin() + dist + 1,
data);
975 template <
class ObjectType>
977 const bool has_unlabelled = (kinResolutionLabels_.size() + 1 == kinResolutions_.size());
979 if (has_unlabelled) {
980 return kinResolutions_[0];
982 throw cms::Exception(
"Missing Data",
"This object does not contain an un-labelled kinematic resolution");
987 const size_t increment = (has_unlabelled ? 1 : 0);
990 ex <<
"This object does not contain a kinematic resolution with name '" <<
label <<
"'.\n";
991 ex <<
"The known labels are: ";
992 for (std::vector<std::string>::const_iterator it = kinResolutionLabels_.cbegin();
993 it != kinResolutionLabels_.cend();
995 ex <<
"'" << *it <<
"' ";
1000 return kinResolutions_[dist + increment];
1005 template <
class ObjectType>
1007 if (
label.empty()) {
1008 return (kinResolutionLabels_.size() + 1 == kinResolutions_.size());
1015 template <
class ObjectType>
1017 const bool has_unlabelled = (kinResolutionLabels_.size() + 1 == kinResolutions_.size());
1018 if (
label.empty()) {
1019 if (has_unlabelled) {
1021 kinResolutions_[0] =
resol;
1025 kinResolutions_.insert(kinResolutions_.begin(),
resol);
1030 const size_t increment = (has_unlabelled ? 1 : 0);
1033 kinResolutions_[dist + increment] =
resol;
1036 kinResolutions_.insert(kinResolutions_.begin() + dist + increment,
resol);
ret
prodAgent to be discontinued
const std::vector< pat::LookupTableRecord > & efficiencyValues() const
Returns the list of the values of the stored efficiencies (the ordering is the same as in efficiencyN...
void setOverlaps(const std::string &label, const reco::CandidatePtrVector &overlaps)
Base class for data that users can add to pat objects.
double resolP(const LorentzVector &p4) const
Resolution on p, given the 4-momentum of the associated Candidate.
edm::Ref< GenParticleCollection > GenParticleRef
persistent reference to a GenParticle
const std::vector< std::string > & overlapLabels() const
Returns the labels of the overlap tests that found at least one overlap.
def addGenParticleRef(patMuonProducer, label='classByHitsGlbOrTrk')
void throwMissingLabel(const std::string &what, const std::string &bad_label, const std::vector< std::string > &available)
std::vector< pat::LookupTableRecord > efficiencyValues_
vector of the efficiencies (values)
const void * userDataBare(const std::string &key) const
const TriggerObjectStandAlone * triggerObjectMatchByPath(const std::string &namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true, const size_t idx=0) const
const TriggerObjectStandAloneCollection & triggerObjectMatches() const
get all matched trigger objects
const TriggerObjectStandAloneCollection triggerObjectMatchesByFilterID(const unsigned triggerObjectType) const
bool hasUserData(const std::string &key) const
Check if user data with a specific type is present.
const T * userData(const std::string &key) const
Returns user-defined data. Returns NULL if the data is not present, or not of type T.
void addTriggerObjectMatch(const TriggerObjectStandAlone &trigObj)
add a trigger match
const TriggerObjectStandAlone * triggerObjectMatchByAlgorithm(const char *nameAlgorithm, const bool algoCondAccepted=true, const size_t idx=0) const
const TriggerObjectStandAloneCollection triggerObjectMatchesByType(const trigger::TriggerObjectType triggerObjectType) const
const TriggerObjectStandAlone * triggerObjectMatchByFilter(const char *labelFilter, const size_t idx=0) const
std::vector< std::string > kinResolutionLabels_
double resolPInv(const std::string &label="") const
Resolution on 1/p, possibly with a label to specify which resolution to use.
reco::GenParticleRef genParticleById(int pdgId, int status, uint8_t autoCharge=0) const
Analysis-level trigger object class (stand-alone)
double resolPx(const LorentzVector &p4) const
Resolution on px, given the 4-momentum of the associated Candidate.
const TriggerObjectStandAlone * triggerObjectMatchByFilter(const std::string &labelFilter, const size_t idx=0) const
get one matched HLT object used in a certain HLT filter by index
double resolPhi(const LorentzVector &p4) const
Resolution on phi, given the 4-momentum of the associated Candidate.
const TriggerObjectStandAloneCollection triggerObjectMatchesByAlgorithm(const std::string &nameAlgorithm, const bool algoCondAccepted=true) const
T const * get() const
Returns C++ pointer to the item.
double resolPInv(const LorentzVector &p4) const
Resolution on 1/p, given the 4-momentum of the associated Candidate.
size_t genParticlesSize() const
Number of generator level particles stored as ref or embedded.
void addGenParticleRef(const reco::GenParticleRef &ref)
void addUserInt(const std::string &label, int32_t data, const bool overwrite=false)
Set user-defined int.
const TriggerObjectStandAlone * triggerObjectMatchByAlgorithm(const std::string &nameAlgorithm, const bool algoCondAccepted=true, const size_t idx=0) const
bool hasOverlaps(const std::string &label) const
Returns true if there was at least one overlap for this test label.
double resolPhi(const std::string &label="") const
Resolution on phi, possibly with a label to specify which resolution to use.
std::vector< std::pair< std::string, pat::LookupTableRecord > > efficiencies() const
Returns the efficiencies as <name,value> pairs (by value)
float userFloat(const std::string &key) const
std::vector< int > userIntRange(const std::string &key) const
returns a range of values corresponding to key
const TriggerObjectStandAlone * triggerObjectMatchByCondition(const std::string &nameCondition, const size_t idx=0) const
get one matched L1 object used in a succeeding object combination of a certain L1 condition by index
bool hasUserCand(const std::string &key) const
Return true if there is a user-defined int with a given name.
const TriggerObjectStandAloneCollection triggerObjectMatchesByCondition(const std::string &nameCondition) const
get all matched L1 objects used in a succeeding object combination of a certain L1 condition
pat::UserDataCollection userDataObjects_
void addUserDataFromPtr(const std::string &label, const edm::Ptr< pat::UserData > &data, bool overwrite=false)
const TriggerObjectStandAloneCollection triggerObjectMatchesByFilter(const char *labelFilter) const
std::vector< std::string > overlapLabels_
Overlapping test labels (only if there are any overlaps)
std::vector< int32_t > userInts_
const TriggerObjectStandAlone * triggerObjectMatchByCollection(const std::string &coll, const size_t idx=0) const
get one matched trigger object from a certain collection by index
double resolTheta(const std::string &label="") const
Resolution on theta, possibly with a label to specify which resolution to use.
double resolP(const std::string &label="") const
Resolution on p, possibly with a label to specify which resolution to use.
edm::Ptr< reco::Candidate > refToOrig_
const std::string names[nVars_]
double resolPy(const LorentzVector &p4) const
Resolution on py, given the 4-momentum of the associated Candidate.
const TriggerObjectStandAloneCollection triggerObjectMatchesByFilter(const std::string &labelFilter) const
get all matched HLT objects used in a certain HLT filter
std::vector< reco::GenParticleRef > genParticleRefs() const
const reco::CandidatePtrVector & overlaps(const std::string &label) const
void addUserData(const std::string &label, const T &data, bool transientOnly=false, bool overwrite=false)
const TriggerObjectStandAlone * triggerObjectMatchByFilterID(const unsigned triggerObjectType, const size_t idx=0) const
bool hasUserFloat(const std::string &key) const
Return true if there is a user-defined float with a given name.
static const std::string EMPTY_STR("")
Templated PAT object container.
double resolPy(const std::string &label="") const
Resolution on py, possibly with a label to specify which resolution to use.
const TriggerObjectStandAlone * triggerObjectMatchByCondition(const char *nameCondition, const size_t idx=0) const
reco::CandidatePtr userCand(const std::string &key) const
~PATObject() override
destructor
std::vector< float > userFloatRange(const std::string &key) const
return a range of values corresponding to key
const TriggerObjectStandAlone * triggerObjectMatchByAlgorithm(const std::string &nameAlgorithm, const unsigned algoCondAccepted, const size_t idx=0) const
double resolM(const LorentzVector &p4) const
bool hasUserFloat(const char *key) const
a CINT-friendly interface
void addUserDataObject_(const std::string &label, std::unique_ptr< pat::UserData > value, bool overwrite=false)
void addUserCand(const std::string &label, const reco::CandidatePtr &data, const bool overwrite=false)
Set user-defined int.
__host__ constexpr __device__ RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
const TriggerObjectStandAlone * triggerObjectMatchByAlgorithm(const char *nameAlgorithm, const unsigned algoCondAccepted, const size_t idx=0) const
const pat::LookupTableRecord & efficiency(const std::string &name) const
Returns an efficiency given its name.
const edm::Ptr< reco::Candidate > & originalObjectRef() const
reference to original object. Returns a null reference if not available
bool hasUserInt(const std::string &key) const
Return true if there is a user-defined int with a given name.
std::vector< reco::CandidatePtr > userCands_
const TriggerObjectStandAlone * triggerObjectMatchByPath(const std::string &namePath, const unsigned pathLastFilterAccepted, const unsigned pathL3FilterAccepted=1, const size_t idx=0) const
std::vector< std::string > userIntLabels_
const TriggerObjectStandAloneCollection triggerObjectMatchesByAlgorithm(const std::string &nameAlgorithm, const unsigned algoCondAccepted) const
float userFloat(const char *key) const
a CINT-friendly interface
const std::string & userDataObjectType(const std::string &key) const
Get human-readable type of user data object, for debugging.
const TriggerObjectStandAlone * triggerObjectMatch(const size_t idx=0) const
get one matched trigger object by index
std::vector< reco::GenParticleRef > genParticleRef_
Reference to a generator level particle.
double resolPt(const LorentzVector &p4) const
Resolution on pt, given the 4-momentum of the associated Candidate.
const TriggerObjectStandAloneCollection triggerObjectMatchesByCollection(const std::string &coll) const
get all matched trigger objects from a certain collection
bool isNonnull() const
Checks for non-null.
const pat::UserData * userDataObject_(const std::string &key) const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
void setGenParticle(const reco::GenParticle &particle)
Set the generator level particle from a particle not in the Event (embedding it, of course)
void addUserFloat(const std::string &label, float data, const bool overwrite=false)
Set user-defined float.
double resolPt(const std::string &label="") const
Resolution on pt, possibly with a label to specify which resolution to use.
std::vector< TriggerObjectStandAlone > TriggerObjectStandAloneCollection
Collection of TriggerObjectStandAlone.
double resolPx(const std::string &label="") const
Resolution on px, possibly with a label to specify which resolution to use.
const std::vector< std::string > & userFloatNames() const
Get list of user-defined float names.
std::vector< std::string > efficiencyNames_
vector of the efficiencies (names)
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const std::string &namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true) const
double resolE(const LorentzVector &p4) const
Resolution on energy, given the 4-momentum of the associated Candidate.
std::vector< reco::GenParticle > genParticleEmbedded_
vector to hold an embedded generator level particle
const TriggerObjectStandAlone * triggerObjectMatchByPath(const char *namePath, const unsigned pathLastFilterAccepted, const unsigned pathL3FilterAccepted=1, const size_t idx=0) const
const TriggerObjectStandAloneCollection triggerObjectMatchesByAlgorithm(const char *nameAlgorithm, const bool algoCondAccepted=true) const
const TriggerObjectStandAlone * triggerObjectMatchByType(const trigger::TriggerObjectType triggerObjectType, const size_t idx=0) const
get one matched trigger object of a certain type by index
void setGenParticleRef(const reco::GenParticleRef &ref, bool embed=false)
Set the generator level particle reference.
double resolEta(const std::string &label="") const
Resolution on eta, possibly with a label to specify which resolution to use.
const std::vector< std::string > & efficiencyNames() const
Returns the list of the names of the stored efficiencies.
PATObject()
default constructor
std::vector< pat::CandKinResolution > kinResolutions_
Kinematic resolutions.
const reco::Candidate * originalObject() const
access to the original object; returns zero for null Ref and throws for unavailable collection
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const char *namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true) const
const TriggerObjectStandAloneCollection triggerObjectMatchesByCollection(const char *coll) const
std::vector< std::string > userCandLabels_
const TriggerObjectStandAloneCollection triggerObjectMatchesByType(const unsigned triggerObjectType) const
void setEfficiency(const std::string &name, const pat::LookupTableRecord &value)
double resolM(const std::string &label="") const
double resolTheta(const LorentzVector &p4) const
Resolution on theta, given the 4-momentum of the associated Candidate.
static const reco::CandidatePtrVector EMPTY_CPV
double resolPz(const LorentzVector &p4) const
Resolution on pz, given the 4-momentum of the associated Candidate.
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const char *namePath, const unsigned pathLastFilterAccepted, const unsigned pathL3FilterAccepted=1) const
double resolPz(const std::string &label="") const
Resolution on pz, possibly with a label to specify which resolution to use.
const TriggerObjectStandAlone * triggerObjectMatchByPath(const char *namePath, const bool pathLastFilterAccepted=false, const bool pathL3FilterAccepted=true, const size_t idx=0) const
const reco::GenParticle * genParticle(size_t idx=0) const
bool hasKinResolution(const std::string &label="") const
Check if the kinematic resolutions are stored into this object (possibly specifying a label for them)
const std::vector< std::string > & userIntNames() const
Get list of user-defined int names.
double resolEt(const std::string &label="") const
Resolution on et, possibly with a label to specify which resolution to use.
const TriggerObjectStandAloneCollection triggerObjectMatchesByPath(const std::string &namePath, const unsigned pathLastFilterAccepted, const unsigned pathL3FilterAccepted=1) const
char data[epos_bytes_allocation]
TriggerObjectStandAloneCollection triggerObjectMatchesEmbedded_
vector of trigger matches
std::vector< std::string > userDataLabels_
User data object.
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Abs< T >::type abs(const T &t)
const TriggerObjectStandAlone * triggerObjectMatchByType(const unsigned triggerObjectType, const size_t idx=0) const
const TriggerObjectStandAloneCollection triggerObjectMatchesByCondition(const char *nameCondition) const
int32_t userInt(const std::string &key) const
void unpackTriggerObjectPathNames(const edm::TriggerNames &names)
unpack path names of matched trigger objects (if they were packed before embedding,...
double resolEta(const LorentzVector &p4) const
Resolution on eta, given the 4-momentum of the associated Candidate.
Class to store the result of a lookup table fetch, e.g. for efficiencies.
const TriggerObjectStandAlone * triggerObjectMatchByCollection(const char *coll, const size_t idx=0) const
const TriggerObjectStandAloneCollection triggerObjectMatchesByAlgorithm(const char *nameAlgorithm, const unsigned algoCondAccepted) const
reco::GenParticleRef genParticleRef(size_t idx=0) const
const std::vector< std::string > & userDataNames() const
Get list of user data object names.
double resolEt(const LorentzVector &p4) const
Resolution on et, given the 4-momentum of the associated Candidate.
std::vector< std::string > userFloatLabels_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
double resolE(const std::string &label="") const
Resolution on energy, possibly with a label to specify which resolution to use.
std::vector< float > userFloats_
const pat::CandKinResolution & getKinResolution(const std::string &label="") const
const std::vector< std::string > & userCandNames() const
Get list of user-defined cand names.
std::vector< reco::CandidatePtrVector > overlapItems_
Overlapping items (sorted by distance)
void setKinResolution(const pat::CandKinResolution &resol, const std::string &label="")
Add a kinematic resolution to this object (possibly with a label)