CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
helper::ClusterStorer Class Reference

#include <ClusterStorer.h>

Classes

class  ClusterHitRecord
 A struct for clusters associated to hits. More...
 

Public Member Functions

void addCluster (TrackingRecHitCollection &hits, size_t index)
 add cluster of newHit to list (throws if hit is of unknown type) More...
 
void clear ()
 clear records More...
 
 ClusterStorer ()
 
void processAllClusters (edmNew::DetSetVector< SiPixelCluster > &pixelDsvToFill, edm::RefProd< edmNew::DetSetVector< SiPixelCluster > > refPixelClusters, edmNew::DetSetVector< SiStripCluster > &stripDsvToFill, edm::RefProd< edmNew::DetSetVector< SiStripCluster > > refStripClusters)
 

Private Types

typedef ClusterHitRecord
< SiPixelRecHit::ClusterRef
PixelClusterHitRecord
 
typedef ClusterHitRecord
< SiStripRecHit2D::ClusterRef
StripClusterHitRecord
 Assuming that the ClusterRef is the same for all SiStripRecHit*: More...
 

Private Member Functions

template<typename HitType , typename ClusterType >
void processClusters (std::vector< ClusterHitRecord< typename HitType::ClusterRef > > &clusterRecords, edmNew::DetSetVector< ClusterType > &dsvToFill, edm::RefProd< edmNew::DetSetVector< ClusterType > > &refprod)
 

Private Attributes

std::vector
< PixelClusterHitRecord
pixelClusterRecords_
 
std::vector
< StripClusterHitRecord
stripClusterRecords_
 

Detailed Description

Definition at line 26 of file ClusterStorer.h.

Member Typedef Documentation

Definition at line 74 of file ClusterStorer.h.

Assuming that the ClusterRef is the same for all SiStripRecHit*:

Definition at line 76 of file ClusterStorer.h.

Constructor & Destructor Documentation

helper::ClusterStorer::ClusterStorer ( )
inline

Definition at line 28 of file ClusterStorer.h.

28 {}

Member Function Documentation

void ClusterStorer::addCluster ( TrackingRecHitCollection hits,
size_t  index 
)

add cluster of newHit to list (throws if hit is of unknown type)

Definition at line 21 of file ClusterStorer.cc.

References edm::hlt::Exception, getHLTprescales::index, SiStripMatchedRecHit2D::monoHit(), ProjectedSiStripRecHit2D::originalHit(), pixelClusterRecords_, SiStripMatchedRecHit2D::stereoHit(), and stripClusterRecords_.

Referenced by helper::MuonCollectionStoreManager::processMuon(), and helper::TrackCollectionStoreManager::processTrack().

22  {
23  TrackingRecHit &newHit = hits[index];
24  const std::type_info &hit_type = typeid(newHit);
25  if (hit_type == typeid(SiPixelRecHit)) {
26  //std::cout << "| It is a Pixel hit !!" << std::endl;
27  pixelClusterRecords_.push_back(PixelClusterHitRecord(static_cast<SiPixelRecHit&>(newHit),
28  hits, index));
29  } else if (hit_type == typeid(SiStripRecHit1D)) {
30  //std::cout << "| It is a SiStripRecHit1D hit !!" << std::endl;
31  stripClusterRecords_.push_back(StripClusterHitRecord(static_cast<SiStripRecHit1D&>(newHit),
32  hits, index));
33  } else if (hit_type == typeid(SiStripRecHit2D)) {
34  //std::cout << "| It is a SiStripRecHit2D hit !!" << std::endl;
35  stripClusterRecords_.push_back(StripClusterHitRecord(static_cast<SiStripRecHit2D&>(newHit),
36  hits, index));
37  } else if (hit_type == typeid(SiStripMatchedRecHit2D)) {
38  //std::cout << "| It is a SiStripMatchedRecHit2D hit !!" << std::endl;
39  SiStripMatchedRecHit2D &mhit = static_cast<SiStripMatchedRecHit2D&>(newHit);
40  stripClusterRecords_.push_back(StripClusterHitRecord(*mhit.monoHit(), hits, index));
41  stripClusterRecords_.push_back(StripClusterHitRecord(*mhit.stereoHit(), hits, index));
42  } else if (hit_type == typeid(ProjectedSiStripRecHit2D)) {
43  //std::cout << "| It is a ProjectedSiStripRecHit2D hit !!" << std::endl;
44  ProjectedSiStripRecHit2D &phit = static_cast<ProjectedSiStripRecHit2D&>(newHit);
46  } else {
47  if (hit_type == typeid(SiTrackerGSMatchedRecHit2D)
48  || hit_type == typeid(SiTrackerGSRecHit2D)) {
49  //std::cout << "| It is a " << hit_type.name() << " hit !!" << std::endl;
50  // FastSim hits: Do nothing instead of caring about FastSim clusters,
51  // not even sure whether these really exist.
52  // At least predecessor code in TrackSelector and MuonSelector
53  // did not treat them.
54  } else {
55  // through for unknown types
56  throw cms::Exception("UnknownHitType") << "helper::ClusterStorer::addCluster: "
57  << "Unknown hit type " << hit_type.name()
58  << ".\n";
59  }
60  } // end 'switch' on hit type
61 
62  }
ClusterHitRecord< SiStripRecHit2D::ClusterRef > StripClusterHitRecord
Assuming that the ClusterRef is the same for all SiStripRecHit*:
Definition: ClusterStorer.h:76
const SiStripRecHit2D * stereoHit() const
ClusterHitRecord< SiPixelRecHit::ClusterRef > PixelClusterHitRecord
Definition: ClusterStorer.h:74
std::vector< PixelClusterHitRecord > pixelClusterRecords_
Definition: ClusterStorer.h:89
const SiStripRecHit2D * monoHit() const
const SiStripRecHit2D & originalHit() const
Our base class.
Definition: SiPixelRecHit.h:27
std::vector< StripClusterHitRecord > stripClusterRecords_
Definition: ClusterStorer.h:90
void ClusterStorer::clear ( void  )
void ClusterStorer::processAllClusters ( edmNew::DetSetVector< SiPixelCluster > &  pixelDsvToFill,
edm::RefProd< edmNew::DetSetVector< SiPixelCluster > >  refPixelClusters,
edmNew::DetSetVector< SiStripCluster > &  stripDsvToFill,
edm::RefProd< edmNew::DetSetVector< SiStripCluster > >  refStripClusters 
)

Processes all the clusters of the tracks (after the tracks have been dealt with), need Refs to products (i.e. full collections) in the event.

Definition at line 73 of file ClusterStorer.cc.

References pixelClusterRecords_, and stripClusterRecords_.

Referenced by helper::MuonCollectionStoreManager::cloneAndStore(), and helper::TrackCollectionStoreManager::cloneAndStore().

77  {
78  if (!pixelClusterRecords_.empty()) {
79  this->processClusters<SiPixelRecHit, SiPixelCluster>
80  (pixelClusterRecords_, pixelDsvToFill, refPixelClusters);
81  }
82  if (!stripClusterRecords_.empty()) {
83  // All we need from the HitType 'SiStripRecHit2D' is the
84  // typedef for 'SiStripRecHit2D::ClusterRef'.
85  // The fact that rekey<SiStripRecHit2D> is called is irrelevant since
86  // ClusterHitRecord<typename SiStripRecHit2D::ClusterRef>::rekey<RecHitType>
87  // is specialised such that 'RecHitType' is not used...
88  this->processClusters<SiStripRecHit2D, SiStripCluster>
89  (stripClusterRecords_, stripDsvToFill, refStripClusters);
90  }
91  }
std::vector< PixelClusterHitRecord > pixelClusterRecords_
Definition: ClusterStorer.h:89
std::vector< StripClusterHitRecord > stripClusterRecords_
Definition: ClusterStorer.h:90
template<typename HitType , typename ClusterType >
void ClusterStorer::processClusters ( std::vector< ClusterHitRecord< typename HitType::ClusterRef > > &  clusterRecords,
edmNew::DetSetVector< ClusterType > &  dsvToFill,
edm::RefProd< edmNew::DetSetVector< ClusterType > > &  refprod 
)
private

Processes all the clusters of a specific type (after the tracks have been dealt with)

Definition at line 96 of file ClusterStorer.cc.

References cond::rpcobgas::detid, end, edmNew::DetSetVector< T >::FastFiller::push_back(), and python.multivaluedict::sort().

99  {
100  std::sort(clusterRecords.begin(), clusterRecords.end()); // this sorts them by detid
101  typedef
102  typename std::vector<ClusterHitRecord<typename HitType::ClusterRef> >::const_iterator
103  RIT;
104  RIT it = clusterRecords.begin(), end = clusterRecords.end();
105  size_t clusters = 0;
106  while (it != end) {
107  RIT it2 = it;
108  uint32_t detid = it->detid();
109 
110  // first isolate all clusters on the same detid
111  while ( (it2 != end) && (it2->detid() == detid)) { ++it2; }
112  // now [it, it2] bracket one detid
113 
114  // then prepare to copy the clusters
115  typename edmNew::DetSetVector<ClusterType>::FastFiller filler(dsvToFill, detid);
116  typename HitType::ClusterRef lastRef, newRef;
117  for ( ; it != it2; ++it) { // loop on the detid
118  // first check if we need to clone the hit
119  if (it->clusterRef() != lastRef) {
120  lastRef = it->clusterRef();
121  // clone cluster
122  filler.push_back( *lastRef );
123  // make new ref
124  newRef = typename HitType::ClusterRef( refprod, clusters++ );
125  }
126  it->template rekey<HitType>(newRef);
127  } // end of the loop on a single detid
128 
129  } // end of the loop on all clusters
130  }
#define end
Definition: vmac.h:38

Member Data Documentation

std::vector<PixelClusterHitRecord> helper::ClusterStorer::pixelClusterRecords_
private

Definition at line 89 of file ClusterStorer.h.

Referenced by addCluster(), clear(), and processAllClusters().

std::vector<StripClusterHitRecord> helper::ClusterStorer::stripClusterRecords_
private

Definition at line 90 of file ClusterStorer.h.

Referenced by addCluster(), clear(), and processAllClusters().