1 #ifndef DataFormats_EventHypothesis_interface_EventHypothesisLooper_h 2 #define DataFormats_EventHypothesis_interface_EventHypothesisLooper_h 9 namespace eventhypothesis {
28 cachePtr_ =
dynamic_cast<const T *
>(ptr);
35 if ((ptr !=
nullptr) && (cachePtr_ ==
nullptr))
37 <<
"You can't convert a " <<
typeid(*ptr).name() <<
" to a " <<
typeid(
T).
name() <<
"\n" 38 <<
"note: you can use c++filt command to convert the above in human readable types.\n";
69 const T *
get()
const {
return ptr_.get(
iter_->second.get()); }
104 operator bool()
const;
107 template <
typename T2>
111 template <
typename T2>
115 template <
typename T2>
116 bool operator<=(const Looper<T2> &
other)
const {
119 template <
typename T2>
123 template <
typename T2>
124 bool operator<(const Looper<T2> &
other)
const {
127 template <
typename T2>
151 template <
typename T>
157 template <
typename T>
162 template <
typename T>
164 : eh_(eh), filter_(
filter), total_(-1) {
168 template <
typename T>
170 assert(iter_ <= eh_.end());
171 assert((iter_ + 1) >= eh_.begin());
172 assert((iter_ < eh_.begin()) || (iter_ == eh_.end()) || ((*filter_)(*iter_)));
176 template <
typename T>
180 if (iter_ == eh_.end())
184 if (iter_ == eh_.end())
186 if ((*filter_)(*iter_)) {
195 template <
typename T>
203 if (iter_ < eh_.begin()) {
207 if ((*filter_)(*iter_)) {
217 template <
typename T>
220 std::advance(
this,
delta);
225 template <
typename T>
230 std::advance(
this,
item);
234 std::advance(
this,
item);
240 template <
typename T>
245 for (; iter_ != eh_.end(); ++iter_) {
246 if ((*filter_)(*iter_))
252 template <
typename T>
254 return (iter_ < eh_.end()) && (iter_ >= eh_.begin());
257 template <
typename T>
260 if (
it < eh_.begin()) {
266 for (;
it != eh_.end(); ++
it) {
Looper & reset(int item=0)
const T & operator*() const
Accessor as if it was a const_iterator on a list of T.
const T * get(const reco::Candidate *ptr)
Looper & operator++()
iteration
bool operator!=(const Looper< T2 > &other) const
bool typeOk(const reco::Candidate *ptr)
bool typeOk(const reco::Candidate *ptr)
void operator()(void const *) const
Looper & operator--()
iteration
Looper(const EventHypothesis &eh, const ParticleFilter &filter)
size_t globalIndex()
Index of this item in the full EventHypothesis.
const_iterator begin() const
const reco::Candidate & cand() const
C++ reference to pointed particle.
const CandRefType & ref() const
EDM Ref to pointed particle.
size_t index() const
Index of this item among those in the loop.
bool isTypeOk() const
test if the type is correct
bool operator>=(const Looper< T2 > &other) const
bool operator>(const Looper< T2 > &other) const
bool operator==(const Looper< T2 > &other) const
returns true if loopers point to the same record
size_t size() const
Number of particles in the loop.
void doPtr(const reco::Candidate *ptr)
EventHypothesis::const_iterator const_iterator
vector_type::const_iterator const_iterator
Looper & skip(int delta)
skip (might be slow)
Looper< reco::Candidate > CandLooper
const ParticleFilterPtr filter_
const EventHypothesis & eh_
const T * operator->() const
Accessor as if it was a const_iterator on a list of T.
const std::string & role() const
Role of pointed item.
std::shared_ptr< const ParticleFilter > ParticleFilterPtr