CMS 3D CMS Logo

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

#include <HitPairGeneratorFromLayerPair.h>

Inheritance diagram for HitPairGeneratorFromLayerPair:
HitPairGenerator OrderedHitsGenerator

Public Types

typedef ctfseeding::SeedingLayer Layer
 
typedef
CombinedHitPairGenerator::LayerCacheType 
LayerCacheType
 

Public Member Functions

virtual
HitPairGeneratorFromLayerPair
clone () const
 
virtual HitDoublets doublets (const TrackingRegion &reg, const edm::Event &ev, const edm::EventSetup &es)
 
 HitPairGeneratorFromLayerPair (const Layer &inner, const Layer &outer, LayerCacheType *layerCache, unsigned int nSize=30000, unsigned int max=0)
 
virtual void hitPairs (const TrackingRegion &reg, OrderedHitPairs &prs, const edm::Event &ev, const edm::EventSetup &es)
 
const LayerinnerLayer () const
 
const LayerouterLayer () const
 
virtual ~HitPairGeneratorFromLayerPair ()
 
- Public Member Functions inherited from HitPairGenerator
virtual void clear ()
 
 HitPairGenerator (unsigned int size=7500)
 
virtual void hitPairs (const TrackingRegion &reg, OrderedHitPairs &prs, const edm::EventSetup &es)
 
virtual const OrderedHitPairsrun (const TrackingRegion &region, const edm::Event &ev, const edm::EventSetup &es)
 
virtual ~HitPairGenerator ()
 
- Public Member Functions inherited from OrderedHitsGenerator
 OrderedHitsGenerator ()
 
virtual ~OrderedHitsGenerator ()
 

Private Attributes

Layer const theInnerLayer
 
LayerCacheTypetheLayerCache
 
Layer const theOuterLayer
 

Additional Inherited Members

- Public Attributes inherited from OrderedHitsGenerator
unsigned int theMaxElement
 

Detailed Description

Definition at line 12 of file HitPairGeneratorFromLayerPair.h.

Member Typedef Documentation

Definition at line 17 of file HitPairGeneratorFromLayerPair.h.

Definition at line 16 of file HitPairGeneratorFromLayerPair.h.

Constructor & Destructor Documentation

HitPairGeneratorFromLayerPair::HitPairGeneratorFromLayerPair ( const Layer inner,
const Layer outer,
LayerCacheType layerCache,
unsigned int  nSize = 30000,
unsigned int  max = 0 
)

Definition at line 35 of file HitPairGeneratorFromLayerPair.cc.

References max(), and OrderedHitsGenerator::theMaxElement.

Referenced by clone().

virtual HitPairGeneratorFromLayerPair::~HitPairGeneratorFromLayerPair ( )
inlinevirtual

Definition at line 25 of file HitPairGeneratorFromLayerPair.h.

25 { }

Member Function Documentation

virtual HitPairGeneratorFromLayerPair* HitPairGeneratorFromLayerPair::clone ( void  ) const
inlinevirtual

Implements HitPairGenerator.

Definition at line 34 of file HitPairGeneratorFromLayerPair.h.

References HitPairGeneratorFromLayerPair().

34  {
35  return new HitPairGeneratorFromLayerPair(*this);
36  }
HitPairGeneratorFromLayerPair(const Layer &inner, const Layer &outer, LayerCacheType *layerCache, unsigned int nSize=30000, unsigned int max=0)
HitDoublets HitPairGeneratorFromLayerPair::doublets ( const TrackingRegion reg,
const edm::Event ev,
const edm::EventSetup es 
)
virtual

Reimplemented from HitPairGenerator.

Definition at line 96 of file HitPairGeneratorFromLayerPair.cc.

References HitDoublets::add(), HitRZCompatibility::algo(), b, TrackingRegion::checkRZ(), HitDoublets::clear(), constexpr, SiPixelRawToDigiRegional_cfi::deltaPhi, ctfseeding::SeedingLayer::detLayer(), RecHitsSortedInPhi::doubleRange(), RecHitsSortedInPhi::drphi, RecHitsSortedInPhi::du, RecHitsSortedInPhi::dv, PixelRecoRange< T >::empty(), RecHitsSortedInPhi::empty(), HitRZCompatibility::etaAlgo, i, RecHitsSortedInPhi::isBarrel, j, LogDebug, max(), PixelRecoRange< T >::max(), PixelRecoRange< T >::min(), nSigmaPhi, HitRZCompatibility::rAlgo, HitDoublets::reserve(), query::result, RecHitsSortedInPhi::rv(), RecHitsSortedInPhi::size(), HitDoublets::size(), RecHitsSortedInPhi::theHits, theInnerLayer, theLayerCache, OrderedHitsGenerator::theMaxElement, theOuterLayer, RecHitsSortedInPhi::x, RecHitsSortedInPhi::y, RecHitsSortedInPhi::z, and HitRZCompatibility::zAlgo.

Referenced by hitPairs().

97  {
98 
99  typedef OrderedHitPair::InnerRecHit InnerHit;
100  typedef OrderedHitPair::OuterRecHit OuterHit;
102 
103  const RecHitsSortedInPhi & innerHitsMap = theLayerCache(&theInnerLayer, region, iEvent, iSetup);
104  if (innerHitsMap.empty()) return HitDoublets(innerHitsMap,innerHitsMap);
105 
106  const RecHitsSortedInPhi& outerHitsMap = theLayerCache(&theOuterLayer, region, iEvent, iSetup);
107  if (outerHitsMap.empty()) return HitDoublets(innerHitsMap,outerHitsMap);
108 
109  HitDoublets result(innerHitsMap,outerHitsMap); result.reserve(std::max(innerHitsMap.size(),outerHitsMap.size()));
110 
112 
113  // std::cout << "layers " << theInnerLayer.detLayer()->seqNum() << " " << theOuterLayer.detLayer()->seqNum() << std::endl;
114 
115  // constexpr float nSigmaRZ = std::sqrt(12.f);
116  constexpr float nSigmaPhi = 3.f;
117  for (int io = 0; io!=int(outerHitsMap.theHits.size()); ++io) {
118  Hit const & ohit = outerHitsMap.theHits[io].hit();
119  PixelRecoRange<float> phiRange = deltaPhi(outerHitsMap.x[io],
120  outerHitsMap.y[io],
121  outerHitsMap.z[io],
122  nSigmaPhi*outerHitsMap.drphi[io]
123  );
124 
125  if (phiRange.empty()) continue;
126 
127  const HitRZCompatibility *checkRZ = region.checkRZ(theInnerLayer.detLayer(), ohit, iSetup,theOuterLayer.detLayer(),
128  outerHitsMap.rv(io),outerHitsMap.z[io],
129  outerHitsMap.isBarrel ? outerHitsMap.du[io] : outerHitsMap.dv[io],
130  outerHitsMap.isBarrel ? outerHitsMap.dv[io] : outerHitsMap.du[io]
131  );
132  if(!checkRZ) continue;
133 
134  Kernels<HitZCheck,HitRCheck,HitEtaCheck> kernels;
135 
136  auto innerRange = innerHitsMap.doubleRange(phiRange.min(), phiRange.max());
137  LogDebug("HitPairGeneratorFromLayerPair")<<
138  "preparing for combination of: "<< innerRange[1]-innerRange[0]+innerRange[3]-innerRange[2]
139  <<" inner and: "<< outerHitsMap.theHits.size()<<" outter";
140  for(int j=0; j<3; j+=2) {
141  auto b = innerRange[j]; auto e=innerRange[j+1];
142  bool ok[e-b];
143  switch (checkRZ->algo()) {
145  std::get<0>(kernels).set(checkRZ);
146  std::get<0>(kernels)(b,e,innerHitsMap, ok);
147  break;
149  std::get<1>(kernels).set(checkRZ);
150  std::get<1>(kernels)(b,e,innerHitsMap, ok);
151  break;
153  std::get<2>(kernels).set(checkRZ);
154  std::get<2>(kernels)(b,e,innerHitsMap, ok);
155  break;
156  }
157  for (int i=0; i!=e-b; ++i) {
158  if (!ok[i]) continue;
159  if (theMaxElement!=0 && result.size() >= theMaxElement){
160  result.clear();
161  edm::LogError("TooManyPairs")<<"number of pairs exceed maximum, no pairs produced";
162  delete checkRZ;
163  return result;
164  }
165  result.add(b+i,io);
166  }
167  }
168  delete checkRZ;
169  }
170  LogDebug("HitPairGeneratorFromLayerPair")<<" total number of pairs provided back: "<<result.size();
171  return result;
172 }
#define LogDebug(id)
std::vector< HitWithPhi > theHits
int i
Definition: DBlmapReader.cc:9
std::vector< float > drphi
T max() const
const DetLayer * detLayer() const
Definition: SeedingLayer.cc:80
std::vector< float > z
bool empty() const
T min() const
std::vector< float > x
DoubleRange doubleRange(float phiMin, float phiMax) const
int iEvent
Definition: GenABIO.cc:243
const T & max(const T &a, const T &b)
tuple result
Definition: query.py:137
int j
Definition: DBlmapReader.cc:9
std::vector< float > y
constexpr double nSigmaPhi
std::size_t size() const
double b
Definition: hdecay.h:120
std::vector< float > dv
TransientTrackingRecHit::ConstRecHitPointer Hit
float rv(int i) const
std::vector< float > du
#define constexpr
void HitPairGeneratorFromLayerPair::hitPairs ( const TrackingRegion reg,
OrderedHitPairs prs,
const edm::Event ev,
const edm::EventSetup es 
)
virtual

Implements HitPairGenerator.

Definition at line 81 of file HitPairGeneratorFromLayerPair.cc.

References doublets(), i, HitDoublets::inner, HitDoublets::outer, OrderedHitPairs::size(), and OrderedHitsGenerator::theMaxElement.

83  {
84 
85  auto const & ds = doublets(region,iEvent,iSetup);
86  for (std::size_t i=0; i!=ds.size(); ++i) {
87  result.push_back( OrderedHitPair( ds.hit(i,HitDoublets::inner),ds.hit(i,HitDoublets::outer) ));
88  }
89  if (theMaxElement!=0 && result.size() >= theMaxElement){
90  result.clear();
91  edm::LogError("TooManyPairs")<<"number of pairs exceed maximum, no pairs produced";
92  }
93 }
int i
Definition: DBlmapReader.cc:9
int iEvent
Definition: GenABIO.cc:243
tuple result
Definition: query.py:137
virtual HitDoublets doublets(const TrackingRegion &reg, const edm::Event &ev, const edm::EventSetup &es)
const Layer& HitPairGeneratorFromLayerPair::innerLayer ( ) const
inline
const Layer& HitPairGeneratorFromLayerPair::outerLayer ( ) const
inline

Member Data Documentation

Layer const HitPairGeneratorFromLayerPair::theInnerLayer
private

Definition at line 44 of file HitPairGeneratorFromLayerPair.h.

Referenced by doublets(), and innerLayer().

LayerCacheType& HitPairGeneratorFromLayerPair::theLayerCache
private

Definition at line 42 of file HitPairGeneratorFromLayerPair.h.

Referenced by doublets().

Layer const HitPairGeneratorFromLayerPair::theOuterLayer
private

Definition at line 43 of file HitPairGeneratorFromLayerPair.h.

Referenced by doublets(), and outerLayer().