CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Attributes
StripCompactDigiSimLinks Class Reference

#include <StripCompactDigiSimLinks.h>

Classes

class  Filler
 
struct  HitRecord
 
struct  RevLink
 
struct  TrackRecord
 

Public Types

typedef std::pair< EncodedEventId, unsigned int > key_type
 
typedef boost::sub_range< const std::vector< HitRecord > > Links
 
typedef Links value_type
 

Public Member Functions

Links getLinks (const key_type &key) const
 
std::map< uint32_t, std::vector< RevLink > > makeReverseMap () const
 Make the map in the reverse direction. SLOW! call it only once. More...
 
Links operator[] (const key_type &key) const
 
 StripCompactDigiSimLinks ()
 Empty constructor, for ROOT persistence. More...
 
 StripCompactDigiSimLinks (const Filler &filler)
 This is the real constructor you will use. More...
 
void swap (StripCompactDigiSimLinks &other)
 
 ~StripCompactDigiSimLinks ()
 

Private Attributes

std::vector< HitRecordhitRecords_
 
std::vector< TrackRecordtrackRecords_
 

Detailed Description

Definition at line 10 of file StripCompactDigiSimLinks.h.

Member Typedef Documentation

typedef std::pair<EncodedEventId,unsigned int> StripCompactDigiSimLinks::key_type

Definition at line 16 of file StripCompactDigiSimLinks.h.

typedef boost::sub_range<const std::vector<HitRecord> > StripCompactDigiSimLinks::Links

Definition at line 25 of file StripCompactDigiSimLinks.h.

Definition at line 26 of file StripCompactDigiSimLinks.h.

Constructor & Destructor Documentation

StripCompactDigiSimLinks::StripCompactDigiSimLinks ( )
inline

Empty constructor, for ROOT persistence.

Definition at line 13 of file StripCompactDigiSimLinks.h.

13 {}
StripCompactDigiSimLinks::~StripCompactDigiSimLinks ( )
inline

Definition at line 14 of file StripCompactDigiSimLinks.h.

14 {}
StripCompactDigiSimLinks::StripCompactDigiSimLinks ( const Filler filler)

This is the real constructor you will use.

Definition at line 21 of file StripCompactDigiSimLinks.cc.

References StripCompactDigiSimLinks::Filler::dataSize(), hitRecords_, StripCompactDigiSimLinks::Filler::keySize(), StripCompactDigiSimLinks::Filler::storage(), and trackRecords_.

22 {
23  trackRecords_.reserve(filler.keySize());
24  hitRecords_.reserve(filler.dataSize());
25  BOOST_FOREACH( const Filler::Map::value_type &pair, filler.storage() ) {
26  trackRecords_.push_back(TrackRecord(pair.first, hitRecords_.size()));
27  hitRecords_.insert(hitRecords_.end(), pair.second.begin(), pair.second.end());
28  }
29 }

Member Function Documentation

StripCompactDigiSimLinks::Links StripCompactDigiSimLinks::getLinks ( const key_type key) const

Definition at line 8 of file StripCompactDigiSimLinks.cc.

References end, hitRecords_, crabWrapper::key, plotBeamSpotDB::last, match(), and trackRecords_.

Referenced by operator[](), and swap().

9 {
10  std::vector<TrackRecord>::const_iterator last = trackRecords_.end();
11  std::vector<TrackRecord>::const_iterator match = std::lower_bound(trackRecords_.begin(), last, key);
12  if ((match != last) && (*match == key)) {
13  // std::vector<TrackRecord>::const_iterator next = match+1;
14  unsigned int end = (match+1 == last ? hitRecords_.size() : (match+1)->start);
15  return Links(hitRecords_.begin()+match->start, hitRecords_.begin()+end);
16  } else {
17  return Links(hitRecords_.end(), hitRecords_.end());
18  }
19 }
Definition: start.py:1
#define end
Definition: vmac.h:37
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
std::map< uint32_t, std::vector< StripCompactDigiSimLinks::RevLink > > StripCompactDigiSimLinks::makeReverseMap ( ) const

Make the map in the reverse direction. SLOW! call it only once.

Definition at line 49 of file StripCompactDigiSimLinks.cc.

References hitRecords_, and trackRecords_.

50 {
51  std::map<uint32_t, std::vector<StripCompactDigiSimLinks::RevLink> > ret;
52  typedef std::vector<TrackRecord>::const_iterator trk_it;
53  typedef std::vector<HitRecord>::const_iterator hit_it;
54  hit_it hstart = hitRecords_.begin(), ith = hstart;
55  for (trk_it itt = trackRecords_.begin(), endt = trackRecords_.end(); itt != endt; ++itt) {
56  hit_it edh = (itt+1 != endt ? hstart + (itt+1)->start : hitRecords_.end());
57  for (; ith < edh; ++ith) {
58  ret[ith->detId].push_back(RevLink(*itt, *ith));
59  }
60  }
61  return ret;
62 }
Definition: start.py:1
Links StripCompactDigiSimLinks::operator[] ( const key_type key) const
inline

Definition at line 35 of file StripCompactDigiSimLinks.h.

References getLinks().

35 { return getLinks(key); }
void StripCompactDigiSimLinks::swap ( StripCompactDigiSimLinks other)
inline

Definition at line 28 of file StripCompactDigiSimLinks.h.

References getLinks(), hitRecords_, crabWrapper::key, std::swap(), and trackRecords_.

Referenced by swap().

28  {
29  using std::swap;
32  }
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)

Member Data Documentation

std::vector<HitRecord> StripCompactDigiSimLinks::hitRecords_
private
std::vector<TrackRecord> StripCompactDigiSimLinks::trackRecords_
private

These MUST be sorted at the same time by key and by start The rule is enforced by allowing to create this only through a Filler

Definition at line 85 of file StripCompactDigiSimLinks.h.

Referenced by getLinks(), makeReverseMap(), StripCompactDigiSimLinks(), and swap().