5 srcToken_(iC.consumes<
reco::
CandidateView>(iConfig.getParameter<
edm::InputTag>(
"tagProbePairs"))),
9 if (arbitration ==
"None") {
11 }
else if (arbitration ==
"OneProbe") {
13 }
else if (arbitration ==
"OnePair") {
15 }
else if (arbitration ==
"NonDuplicate") {
17 }
else if (arbitration ==
"BestMass") {
20 }
else if (arbitration ==
"Random2") {
23 }
else if (arbitration ==
"HighestPt") {
25 }
else throw cms::Exception(
"Configuration") <<
"TagProbePairMakerOnTheFly: the only currently " 26 <<
"allowed values for 'arbitration' are " 27 <<
"'None', 'OneProbe', 'BestMass', 'Random2'\n";
29 if (iConfig.
existsAs<
bool>(
"phiCutForTwoLeg")) {
63 int eventNum = iEvent.
id().
event();
64 std::cout <<
"Calling phiCutByEventNumber on eventNum=" << eventNum << std::endl;
75 unsigned int currentNum = 0;
77 size_t nclean = pairs.size();
78 for (TagProbePairs::iterator it = pairs.begin(), ed = pairs.end(); it != ed; ++it) {
79 if (it->tag.isNull())
continue;
81 std::cout <<
"Odd event number " << eventNumber <<
", require 0 < phi(tag) < pi... ";
82 if (!(it->tag->phi() > 0. && it->tag->phi() < 3.141592654)) {
83 std::cout <<
"Rejecting pair number " << currentNum++ <<
" with tag phi " << it->tag->phi();
87 std::cout <<
"Keeping pair number " << currentNum++ <<
" with tag phi " << it->tag->phi();
90 std::cout <<
"Even event number " << eventNumber <<
", require -pi < phi(tag) < 0... ";
92 if (!(it->tag->phi() > -3.141592654 && it->tag->phi() < 0)) {
93 std::cout <<
"Rejecting pair number " << currentNum++ <<
" with tag phi " << it->tag->phi();
97 std::cout <<
"Keeping pair number " << currentNum++ <<
" with tag phi " << it->tag->phi();
105 }
else if (nclean < pairs.size()) {
107 for (TagProbePairs::iterator it = pairs.begin(), ed = pairs.end(); it != ed; ++it) {
108 if (it->tag.isNonnull()) cleaned.push_back(*it);
117 size_t nclean = pairs.size();
118 for (TagProbePairs::iterator it = pairs.begin(), ed = pairs.end(); it != ed; ++it) {
119 if (it->tag.isNull())
continue;
122 for (TagProbePairs::iterator it2 = pairs.begin(); it2 != ed; ++it2) {
123 if (it2->tag.isNull())
continue;
124 if(it!=it2 && it->probe==it2->tag && it->tag==it2->probe){
130 bool invalidateThis =
false;
131 int numberOfProbes=0;
132 for (TagProbePairs::iterator it2 = it + 1; it2 != ed; ++it2) {
145 invalidateThis =
true;
155 if ( it2->probe->pt() > it->probe->pt() ) {
162 if (numberOfProbes>1) {
181 if (it2->tag->pt() > it->tag->pt())
std::swap(*it, *it2);
188 std::abs( it->probe->phi() - it2->tag->phi()) < 1
e-5 &&
189 std::abs( it->probe->eta() - it2->tag->eta()) < 1
e-5 &&
190 std::abs( it->probe->pt() - it2->tag->pt() ) < 1
e-5 &&
191 std::abs(it2->probe->phi() - it->tag->phi()) < 1
e-5 &&
192 std::abs(it2->probe->eta() - it->tag->eta()) < 1
e-5 &&
193 std::abs(it2->probe->pt() - it->tag->pt() ) < 1
e-5) {
202 }
else if (nclean < pairs.size()) {
204 for (TagProbePairs::iterator it = pairs.begin(), ed = pairs.end(); it != ed; ++it) {
205 if (it->tag.isNonnull()) cleaned.push_back(*it);
T getParameter(std::string const &) const
EventNumber_t event() const
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< TagProbePair > TagProbePairs
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
RefToBase< value_type > refAt(size_type i) const
const_iterator begin() const
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< reco::CandidateView > srcToken_
virtual const CandidateBaseRef & masterClone() const =0
virtual double mass() const =0
mass
edm::RefToBase< Candidate > CandidateBaseRef
persistent reference to an object in a collection of Candidate objects
TagProbePairs run(const edm::Event &iEvent) const
fill in tghe T&P pairs for this event
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
const_iterator end() const
a simple struct to hold tag, probe and mass
virtual size_type numberOfDaughters() const =0
number of daughters
TagProbePairMaker(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
void phiCutByEventNumber(TagProbePairs &pairs, int eventNumber) const
void arbitrate(TagProbePairs &pairs) const
edm::View< Candidate > CandidateView
view of a collection containing candidates