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
HitQuadrupletGeneratorFromLayerPairForPhotonConversion Class Reference

#include <HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h>

Inheritance diagram for HitQuadrupletGeneratorFromLayerPairForPhotonConversion:
HitPairGenerator OrderedHitsGenerator

Public Types

typedef
SeedingLayerSetsHits::SeedingLayer 
Layer
 
typedef
CombinedHitPairGenerator::LayerCacheType 
LayerCacheType
 
typedef
SeedingLayerSetsHits::SeedingLayerSet 
Layers
 

Public Member Functions

void bubbleSortVsR (int n, double *ax, double *ay, double *aey)
 
virtual
HitQuadrupletGeneratorFromLayerPairForPhotonConversion
clone () const
 
bool failCheckRZCompatibility (const RecHitsSortedInPhi::Hit &hit, const DetLayer &layer, const HitRZCompatibility *checkRZ, const TrackingRegion &region)
 
bool failCheckSegmentZCompatibility (double &rInn, double &zInnMin, double &zInnMax, double &rInt, double &zIntMin, double &zIntMax, double &rOut, double &zOutMin, double &zOutMax)
 
bool failCheckSlopeTest (const RecHitsSortedInPhi::Hit &ohit, const RecHitsSortedInPhi::Hit &nohit, const RecHitsSortedInPhi::Hit &ihit, const RecHitsSortedInPhi::Hit &nihit, const TrackingRegion &region)
 
double getEffectiveErrorOnZ (const RecHitsSortedInPhi::Hit &hit, const TrackingRegion &region)
 
double getSqrEffectiveErrorOnZ (const RecHitsSortedInPhi::Hit &hit, const TrackingRegion &region)
 
double getZAtR (double &rInn, double &zInn, double &r, double &rOut, double &zOut)
 
virtual void hitPairs (const TrackingRegion &reg, OrderedHitPairs &prs, const edm::Event &ev, const edm::EventSetup &es)
 
 HitQuadrupletGeneratorFromLayerPairForPhotonConversion (unsigned int inner, unsigned int outer, LayerCacheType *layerCache, unsigned int nSize=30000, unsigned int max=0)
 
Layer innerLayer () const
 
Layer outerLayer () const
 
void setSeedingLayers (Layers layers) override
 
double verySimpleFit (int size, double *ax, double *ay, double *e2y, double &p0, double &e2p0, double &p1)
 
virtual ~HitQuadrupletGeneratorFromLayerPairForPhotonConversion ()
 
- Public Member Functions inherited from HitPairGenerator
virtual void clear ()
 
virtual HitDoublets doublets (const TrackingRegion &reg, const edm::Event &ev, const edm::EventSetup &es)
 
 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

std::stringstream * ss
 
const unsigned int theInnerLayer
 
LayerCacheTypetheLayerCache
 
const unsigned int theOuterLayer
 
Layers theSeedingLayers
 

Additional Inherited Members

- Public Attributes inherited from OrderedHitsGenerator
unsigned int theMaxElement
 

Detailed Description

Definition at line 13 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h.

Member Typedef Documentation

Constructor & Destructor Documentation

HitQuadrupletGeneratorFromLayerPairForPhotonConversion::HitQuadrupletGeneratorFromLayerPairForPhotonConversion ( unsigned int  inner,
unsigned int  outer,
LayerCacheType layerCache,
unsigned int  nSize = 30000,
unsigned int  max = 0 
)
virtual HitQuadrupletGeneratorFromLayerPairForPhotonConversion::~HitQuadrupletGeneratorFromLayerPairForPhotonConversion ( )
inlinevirtual

Definition at line 27 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h.

27 { }

Member Function Documentation

void HitQuadrupletGeneratorFromLayerPairForPhotonConversion::bubbleSortVsR ( int  n,
double *  ax,
double *  ay,
double *  aey 
)

Definition at line 382 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References i, and j.

Referenced by failCheckSlopeTest().

382  {
383  bool swapped = true;
384  int j = 0;
385  double tmpr, tmpz, tmpez;
386  while (swapped) {
387  swapped = false;
388  j++;
389  for (int i = 0; i < n - j; i++) {
390  if ( ar[i] > ar[i+1] ) {
391  tmpr = ar[i];
392  ar[i] = ar[i + 1];
393  ar[i + 1] = tmpr;
394  tmpz = az[i];
395  az[i] = az[i + 1];
396  az[i + 1] = tmpz;
397  tmpez = aez[i];
398  aez[i] = aez[i + 1];
399  aez[i + 1] = tmpez;
400  swapped = true;
401  }
402  }
403  }
404 }
int i
Definition: DBlmapReader.cc:9
int j
Definition: DBlmapReader.cc:9
virtual HitQuadrupletGeneratorFromLayerPairForPhotonConversion* HitQuadrupletGeneratorFromLayerPairForPhotonConversion::clone ( void  ) const
inlinevirtual

Implements HitPairGenerator.

Definition at line 34 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h.

References HitQuadrupletGeneratorFromLayerPairForPhotonConversion().

34  {
36  }
HitQuadrupletGeneratorFromLayerPairForPhotonConversion(unsigned int inner, unsigned int outer, LayerCacheType *layerCache, unsigned int nSize=30000, unsigned int max=0)
bool HitQuadrupletGeneratorFromLayerPairForPhotonConversion::failCheckRZCompatibility ( const RecHitsSortedInPhi::Hit hit,
const DetLayer layer,
const HitRZCompatibility checkRZ,
const TrackingRegion region 
)

Definition at line 224 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References Reference_intrackfit_cff::barrel, f, PixelRecoRange< T >::intersection(), DetLayer::location(), PixelRecoRange< T >::min(), nSigmaRZ, TrackingRegion::origin(), HitRZCompatibility::range(), funct::sqr(), mathSSE::sqrt(), ss, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by hitPairs().

224  {
225 
226  if(!checkRZ) {
227 #ifdef mydebug_QSeed
228  (*ss) << "*******\nNo valid checkRZ\n*******" << std::endl;
229 #endif
230  return true;
231  }
232 
233  static const float nSigmaRZ = std::sqrt(12.f);
234  float r_reduced = std::sqrt( sqr(hit->globalPosition().x()-region.origin().x())+sqr(hit->globalPosition().y()-region.origin().y()));
235  Range allowed;
236  Range hitRZ;
237  if (layer.location() == barrel) {
238  allowed = checkRZ->range(r_reduced);
239  float zErr = nSigmaRZ * hit->errorGlobalZ();
240  hitRZ = Range(hit->globalPosition().z()-zErr, hit->globalPosition().z()+zErr);
241  } else {
242  allowed = checkRZ->range(hit->globalPosition().z());
243  float rErr = nSigmaRZ * hit->errorGlobalR();
244  hitRZ = Range(r_reduced-rErr, r_reduced+rErr);
245  }
246  Range crossRange = allowed.intersection(hitRZ);
247 
248 #ifdef mydebug_QSeed
249  (*ss)
250  << "\n\t\t allowed Range " << allowed.min() << " \t, " << allowed.max()
251  << "\n\t\t hitRz Range " << hitRZ.min() << " \t, " << hitRZ.max()
252  << "\n\t\t Cross Range " << crossRange.min() << " \t, " << crossRange.max()
253  << std::endl;
254  if( !crossRange.empty())
255  (*ss) << "\n\t\t !!!!ACCEPTED!!! \n\n";
256 #endif
257 
258  return crossRange.empty();
259 }
GlobalPoint const & origin() const
virtual Location location() const =0
Which part of the detector (barrel, endcap)
virtual Range range(const float &rORz) const =0
T y() const
Definition: PV3DBase.h:63
T min() const
constexpr double nSigmaRZ
T sqrt(T t)
Definition: SSEVec.h:48
double f[11][100]
PixelRecoRange< float > Range
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
Square< F >::type sqr(const F &f)
Definition: Square.h:13
T x() const
Definition: PV3DBase.h:62
bool HitQuadrupletGeneratorFromLayerPairForPhotonConversion::failCheckSegmentZCompatibility ( double &  rInn,
double &  zInnMin,
double &  zInnMax,
double &  rInt,
double &  zIntMin,
double &  zIntMax,
double &  rOut,
double &  zOutMin,
double &  zOutMax 
)

Definition at line 407 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References getZAtR().

Referenced by failCheckSlopeTest().

409  {
410  //
411  // Check the compatibility in z of an INTermediate segment between an INNer segment and an OUTer segment;
412  // when true is returned zIntMin and zIntMax are replaced with allowed range values
413 
414  //Left side
415  double zLeft = getZAtR(rInn, zInnMin, rInt, rOut, zOutMin);
416  if ( zIntMax < zLeft ) return true;
417  //Right side
418  double zRight = getZAtR(rInn, zInnMax, rInt, rOut, zOutMax);
419  if ( zIntMin > zRight ) return true;
420  if ( zIntMin < zLeft && zIntMax < zRight ) {
421  zIntMax = zLeft;
422  return false;
423  }
424  if ( zIntMin > zLeft && zIntMax > zRight ) {
425  zIntMax = zRight;
426  return false;
427  }
428 
429  //Segment is fully contained
430  return false;
431 
432 }
double getZAtR(double &rInn, double &zInn, double &r, double &rOut, double &zOut)
bool HitQuadrupletGeneratorFromLayerPairForPhotonConversion::failCheckSlopeTest ( const RecHitsSortedInPhi::Hit ohit,
const RecHitsSortedInPhi::Hit nohit,
const RecHitsSortedInPhi::Hit ihit,
const RecHitsSortedInPhi::Hit nihit,
const TrackingRegion region 
)

Definition at line 263 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References bubbleSortVsR(), failCheckSegmentZCompatibility(), getEffectiveErrorOnZ(), TrackingRegion::origin(), TrackingRegion::originZBound(), PV3DBase< T, PVType, FrameType >::perp(), alignCSCRings::r, detailsBasic3DVector::z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by hitPairs().

263  {
264 
265  double r[5], z[5], ez[5];
266  // double pr[2], pz[2], e2pz[2], mr[2], mz[2], e2mz[2];
267 
268  //
269  //Hits
270  r[0] = ohit->globalPosition().perp();
271  z[0] = ohit->globalPosition().z();
272  ez[0] = getEffectiveErrorOnZ(ohit, region);
273  //
274  r[1] = nohit->globalPosition().perp();
275  z[1] = nohit->globalPosition().z();
276  ez[1] = getEffectiveErrorOnZ(nohit, region);
277  //
278  r[2] = nihit->globalPosition().perp();
279  z[2] = nihit->globalPosition().z();
280  ez[2] = getEffectiveErrorOnZ(nihit, region);
281  //
282  r[3] = ihit->globalPosition().perp();
283  z[3] = ihit->globalPosition().z();
284  ez[3] = getEffectiveErrorOnZ(ihit, region);
285  //
286  //R (r) ordering of the 4 hit arrays
287  bubbleSortVsR(4, r, z, ez);
288  //
289  //Vertex
290  r[4] = region.origin().perp();
291  z[4] = region.origin().z();
292  double vError = region.originZBound();
293  if ( vError > 15. ) vError = 1.;
294  ez[4] = 3.*vError;
295 
296  //
297  //Sequence of checks
298  //
299  //Inner segment == vertex
300  double rInn = r[4];
301  double zInnMin = z[4]-ez[4];
302  double zInnMax = z[4]+ez[4];
303  //
304  // Int == 2, Out == 3
305  double rOut = r[3];
306  double zOutMin = z[3]-ez[3];
307  double zOutMax = z[3]+ez[3];
308  double rInt = r[2];
309  double zIntMin = z[2]-ez[2];
310  double zIntMax = z[2]+ez[2];
311  if ( failCheckSegmentZCompatibility(rInn, zInnMin, zInnMax,
312  rInt, zIntMin, zIntMax,
313  rOut, zOutMin, zOutMax) ) return true;
314  //
315  // Int == 1, Out == 2 (with updated limits)
316  rOut = rInt;
317  zOutMin = zIntMin;
318  zOutMax = zIntMax;
319  rInt = r[1];
320  zIntMin = z[1]-ez[1];
321  zIntMax = z[1]+ez[1];
322  if ( failCheckSegmentZCompatibility(rInn, zInnMin, zInnMax,
323  rInt, zIntMin, zIntMax,
324  rOut, zOutMin, zOutMax) ) return true;
325  //
326  // Int == 0, Out == 1 (with updated limits)
327  rOut = rInt;
328  zOutMin = zIntMin;
329  zOutMax = zIntMax;
330  rInt = r[0];
331  zIntMin = z[0]-ez[0];
332  zIntMax = z[0]+ez[0];
333  if ( failCheckSegmentZCompatibility(rInn, zInnMin, zInnMax,
334  rInt, zIntMin, zIntMax,
335  rOut, zOutMin, zOutMax) ) return true;
336 
337  //
338  // Test is ok!!!
339  return false;
340 
341 }
T perp() const
Definition: PV3DBase.h:72
GlobalPoint const & origin() const
float float float z
T z() const
Definition: PV3DBase.h:64
bool failCheckSegmentZCompatibility(double &rInn, double &zInnMin, double &zInnMax, double &rInt, double &zIntMin, double &zIntMax, double &rOut, double &zOutMin, double &zOutMax)
float originZBound() const
bounds the particle vertex in the longitudinal plane
double getEffectiveErrorOnZ(const RecHitsSortedInPhi::Hit &hit, const TrackingRegion &region)
double HitQuadrupletGeneratorFromLayerPairForPhotonConversion::getEffectiveErrorOnZ ( const RecHitsSortedInPhi::Hit hit,
const TrackingRegion region 
)

Definition at line 362 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References TrackingRegion::origin(), PV3DBase< T, PVType, FrameType >::perp(), funct::sqr(), mathSSE::sqrt(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by failCheckSlopeTest().

362  {
363 
364  //
365  //Fit-wise the effective error on Z is approximately the sum in quadrature of the error on Z
366  //and the error on R correctly projected by using hit-vertex direction
367  double sqrProjFactor = sqr((hit->globalPosition().z()-region.origin().z())/(hit->globalPosition().perp()-region.origin().perp()));
368  double effErr = sqrt(hit->globalPositionError().czz()+sqrProjFactor*hit->globalPositionError().rerr(hit->globalPosition()));
369  if ( effErr>2. ) {
370  effErr*=1.8; //Single Side error is strip length * sqrt( 12.) = 3.46
371  //empirically found that the error on ss hits value it is already twice as large (two sigmas)!
372  //Multiply by sqrt(12.)/2.=1.73 to have effErr equal to the strip lenght (1.8 to allow for some margin)
373  //effErr*=2.5; //Used in some tests
374  } else {
375  effErr*=2.; //Tight //Double side... allowing for 2 sigma variation
376  //effErr*=5.; //Loose //Double side... allowing for 2 sigma variation
377  }
378  return effErr;
379 
380 }
T perp() const
Definition: PV3DBase.h:72
GlobalPoint const & origin() const
T sqrt(T t)
Definition: SSEVec.h:48
T z() const
Definition: PV3DBase.h:64
Square< F >::type sqr(const F &f)
Definition: Square.h:13
double HitQuadrupletGeneratorFromLayerPairForPhotonConversion::getSqrEffectiveErrorOnZ ( const RecHitsSortedInPhi::Hit hit,
const TrackingRegion region 
)

Definition at line 351 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References TrackingRegion::origin(), PV3DBase< T, PVType, FrameType >::perp(), funct::sqr(), and PV3DBase< T, PVType, FrameType >::z().

351  {
352 
353  //
354  //Fit-wise the effective error on Z is approximately the sum in quadrature of the error on Z
355  //and the error on R correctly projected by using hit-vertex direction
356 
357  double sqrProjFactor = sqr((hit->globalPosition().z()-region.origin().z())/(hit->globalPosition().perp()-region.origin().perp()));
358  return (hit->globalPositionError().czz()+sqrProjFactor*hit->globalPositionError().rerr(hit->globalPosition()));
359 
360 }
T perp() const
Definition: PV3DBase.h:72
GlobalPoint const & origin() const
T z() const
Definition: PV3DBase.h:64
Square< F >::type sqr(const F &f)
Definition: Square.h:13
double HitQuadrupletGeneratorFromLayerPairForPhotonConversion::getZAtR ( double &  rInn,
double &  zInn,
double &  r,
double &  rOut,
double &  zOut 
)

Definition at line 435 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

Referenced by failCheckSegmentZCompatibility().

437  {
438 
439  // z - zInn r - rInn r - rInn
440  // ----------- = ----------- ==> z = zInn + (zOut - zInn) * -----------
441  // zOut - zInn rOut - rInn rOut - rInn
442 
443 
444  return zInn + (zOut - zInn)*(r - rInn)/(rOut - rInn);
445 
446 }
void HitQuadrupletGeneratorFromLayerPairForPhotonConversion::hitPairs ( const TrackingRegion reg,
OrderedHitPairs prs,
const edm::Event ev,
const edm::EventSetup es 
)
virtual

Implements HitPairGenerator.

Definition at line 48 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

References RecHitsSortedInPhi::all(), TrackingRegion::checkRZ(), gather_cfg::cout, reco::deltaPhi(), SeedingLayerSetsHits::SeedingLayer::detLayer(), RecHitsSortedInPhi::empty(), failCheckRZCompatibility(), failCheckSlopeTest(), RecHitsSortedInPhi::hits(), innerLayer(), CommPDSkim_cfg::maxDeltaPhi, SeedingLayerSetsHits::SeedingLayer::name(), outerLayer(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), OrderedHitPairs::size(), ss, theLayerCache, OrderedHitsGenerator::theMaxElement, theOuterLayer, and PV3DBase< T, PVType, FrameType >::z().

50 {
51 
52  ss->str("");
53 
54  typedef OrderedHitPair::InnerRecHit InnerHit;
55  typedef OrderedHitPair::OuterRecHit OuterHit;
57 
58  Layer innerLayerObj = innerLayer();
59  Layer outerLayerObj = outerLayer();
60 
61  size_t totCountP2=0, totCountP1=0, totCountM2=0, totCountM1=0, selCount=0;
62 #ifdef mydebug_QSeed
63  (*ss) << "In " << innerLayerObj.name() << " Out " << theOuterLayer.name() << std::endl;
64 #endif
65 
66  /*get hit sorted in phi for each layer: NB: doesn't apply any region cut*/
67  const RecHitsSortedInPhi & innerHitsMap = theLayerCache(innerLayerObj, region, event, es);
68  if (innerHitsMap.empty()) return;
69 
70  const RecHitsSortedInPhi& outerHitsMap = theLayerCache(outerLayerObj, region, event, es);
71  if (outerHitsMap.empty()) return;
72  /*----------------*/
73 
74  /*This object will check the compatibility of the his in phi among the two layers. */
75  //InnerDeltaPhi deltaPhi(*innerLayerObj.detLayer(), region, es);
76 
77  vector<RecHitsSortedInPhi::Hit> innerHits;
78  // float outerPhimin, outerPhimax;
79  float innerPhimin, innerPhimax;
80  float maxDeltaPhi=1.; //sguazz
81  //float maxDeltaPhi=1.;
82 
83  RecHitsSortedInPhi::Range outerHits = outerHitsMap.all();
84 
86  for (RecHitsSortedInPhi::HitIter oh = outerHits.first; oh!= outerHits.second; ++oh) {
87  RecHitsSortedInPhi::Hit ohit = (*oh).hit();
88  GlobalPoint oPos = ohit->globalPosition();
89 
90  totCountP2++;
91  const HitRZCompatibility *checkRZ = region.checkRZ(outerLayerObj.detLayer(), ohit, es);
92  for(nextoh=oh+1;nextoh!=outerHits.second; ++nextoh){
93 
94  RecHitsSortedInPhi::Hit nohit = (*nextoh).hit();
95  GlobalPoint noPos = nohit->globalPosition();
96 
97 
98 #ifdef mydebug_QSeed
99  (*ss) << "\toPos " << oPos << " r " << oPos.perp() << " phi " << oPos.phi() << " cotTheta " << oPos.z()/oPos.perp() << std::endl;
100  (*ss) << "\tnoPos " << noPos << " r " << noPos.perp() << " phi " << noPos.phi() << " cotTheta " << noPos.z()/noPos.perp() << std::endl;
101  (*ss) << "\tDeltaPhi " << reco::deltaPhi(noPos.phi(),oPos.phi()) << std::endl;
102 #endif
103 
104  if(fabs(reco::deltaPhi(noPos.phi(),oPos.phi()))>maxDeltaPhi) break;
105 
106  totCountM2++;
107 
108  /*Check the compatibility of the ohit with the eta of the seeding track*/
109  if(failCheckRZCompatibility(nohit,*outerLayerObj.detLayer(),checkRZ,region)) continue;
110 
111  /*
112  //Do I need this? it uses a compatibility that probably I wouldn't
113  //Removing for the time being
114 
115  PixelRecoRange<float> phiRange = deltaPhi( oPos.perp(), oPos.phi(), oPos.z(), nSigmaPhi*(ohit->errorGlobalRPhi()));
116  if (phiRange.empty()) continue;
117  */
118 
119 
120  /*Get only the inner hits compatible with the conversion region*/
121  innerPhimin=ohit->globalPosition().phi();
122  innerPhimax=nohit->globalPosition().phi();
123  // checkPhiRange(innerPhimin,innerPhimax);
124 
125  innerHits.clear();
126  innerHitsMap.hits(innerPhimin, innerPhimax, innerHits);
127 
128 #ifdef mydebug_QSeed
129  (*ss) << "\tiphimin, iphimax " << innerPhimin << " " << innerPhimax << std::endl;
130 #endif
131 
132  const HitRZCompatibility *checkRZb = region.checkRZ(innerLayerObj.detLayer(), ohit, es);
133  const HitRZCompatibility *checkRZc = region.checkRZ(innerLayerObj.detLayer(), nohit, es);
134 
135  /*Loop on inner hits*/
136  vector<RecHitsSortedInPhi::Hit>::const_iterator ieh = innerHits.end();
137  for ( vector<RecHitsSortedInPhi::Hit>::const_iterator ih=innerHits.begin(); ih < ieh; ++ih) {
138  RecHitsSortedInPhi::Hit ihit = *ih;
139 
140 #ifdef mydebug_QSeed
141  GlobalPoint innPos = (*ih)->globalPosition();
142  (*ss) << "\toPos " << oPos << " r " << oPos.perp() << " phi " << oPos.phi() << " cotTheta " << oPos.z()/oPos.perp() << std::endl;
143  (*ss) << "\tnoPos " << noPos << " r " << noPos.perp() << " phi " << noPos.phi() << " cotTheta " << noPos.z()/noPos.perp() << std::endl;
144  (*ss) << "\tinnPos " << innPos << " r " << innPos.perp() << " phi " << innPos.phi() << " cotTheta " << innPos.z()/innPos.perp() << std::endl;
145 #endif
146 
147  totCountP1++;
148 
149  /*Check the compatibility of the ihit with the two outer hits*/
150  if(failCheckRZCompatibility(ihit,*innerLayerObj.detLayer(),checkRZb,region)
151  ||
152  failCheckRZCompatibility(ihit,*innerLayerObj.detLayer(),checkRZc,region) ) continue;
153 
154 
155  for ( vector<RecHitsSortedInPhi::Hit>::const_iterator nextih=ih+1; nextih != ieh; ++nextih) {
156  RecHitsSortedInPhi::Hit nihit = *nextih;
157 
158 
159 #ifdef mydebug_QSeed
160  GlobalPoint ninnPos = (*nextih)->globalPosition();
161  (*ss) << "\toPos " << oPos << " r " << oPos.perp() << " phi " << oPos.phi() << " cotTheta " << oPos.z()/oPos.perp() << std::endl;
162  (*ss) << "\tnoPos " << noPos << " r " << noPos.perp() << " phi " << noPos.phi() << " cotTheta " << noPos.z()/noPos.perp() << std::endl;
163  (*ss) << "\tinnPos " << innPos << " r " << innPos.perp() << " phi " << innPos.phi() << " cotTheta " << innPos.z()/innPos.perp() << std::endl;
164  (*ss) << "\tninnPos " << ninnPos << " r " << ninnPos.perp() << " phi " << ninnPos.phi() << " cotTheta " << ninnPos.z()/ninnPos.perp() << std::endl;
165 #endif
166 
167  totCountM1++;
168 
169  /*Check the compatibility of the nihit with the two outer hits*/
170  if(failCheckRZCompatibility(nihit,*innerLayerObj.detLayer(),checkRZb,region)
171  ||
172  failCheckRZCompatibility(nihit,*innerLayerObj.detLayer(),checkRZc,region) ) continue;
173 
174  /*Sguazz modifica qui*/
175  if(failCheckSlopeTest(ohit,nohit,ihit,nihit,region)) continue;
176 
177  if (theMaxElement!=0 && result.size() >= theMaxElement){
178  result.clear();
179  edm::LogError("TooManyQuads")<<"number of Quad combinations exceed maximum, no quads produced";
180  delete checkRZ;
181  delete checkRZb;
182  delete checkRZc;
183 #ifdef mydebug_QSeed
184  (*ss) << "In " << innerLayerObj.name() << " Out " << outerLayerObj.name()
185  << "\tP2 " << totCountP2
186  << "\tM2 " << totCountM2
187  << "\tP1 " << totCountP1
188  << "\tM1 " << totCountM1
189  << "\tsel " << selCount
190  << std::endl;
191  std::cout << (*ss).str();
192 #endif
193  return;
194  }
195  selCount++;
196  result.push_back( OrderedHitPair( ihit, ohit) );
197  result.push_back( OrderedHitPair( nihit, nohit) );
198  //#ifdef mydebug_QSeed
199  //(*ss) << "sizeOfresul " << result.size() << std::endl;
200  //#endif
201  }
202  }
203  delete checkRZb;
204  delete checkRZc;
205  }
206  delete checkRZ;
207  }
208 #ifdef mydebug_QSeed
209  (*ss) << "In " << innerLayerObj.name() << " Out " << outerLayerObj.name()
210  << "\tP2 " << totCountP2
211  << "\tM2 " << totCountM2
212  << "\tP1 " << totCountP1
213  << "\tM1 " << totCountM1
214  << "\tsel " << selCount
215  << std::endl;
216  std::cout << (*ss).str();
217 #endif
218 }
std::vector< Hit > hits(float phiMin, float phiMax) const
T perp() const
Definition: PV3DBase.h:72
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
SeedingHitSet::ConstRecHitPointer InnerRecHit
std::pair< HitIter, HitIter > Range
std::vector< HitWithPhi >::const_iterator HitIter
T z() const
Definition: PV3DBase.h:64
tuple result
Definition: query.py:137
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool failCheckSlopeTest(const RecHitsSortedInPhi::Hit &ohit, const RecHitsSortedInPhi::Hit &nohit, const RecHitsSortedInPhi::Hit &ihit, const RecHitsSortedInPhi::Hit &nihit, const TrackingRegion &region)
SeedingHitSet::ConstRecHitPointer Hit
BaseTrackerRecHit const * Hit
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:12
tuple cout
Definition: gather_cfg.py:121
bool failCheckRZCompatibility(const RecHitsSortedInPhi::Hit &hit, const DetLayer &layer, const HitRZCompatibility *checkRZ, const TrackingRegion &region)
SeedingHitSet::ConstRecHitPointer OuterRecHit
Layer HitQuadrupletGeneratorFromLayerPairForPhotonConversion::innerLayer ( ) const
inline
Layer HitQuadrupletGeneratorFromLayerPairForPhotonConversion::outerLayer ( ) const
inline
void HitQuadrupletGeneratorFromLayerPairForPhotonConversion::setSeedingLayers ( Layers  layers)
inlineoverridevirtual
double HitQuadrupletGeneratorFromLayerPairForPhotonConversion::verySimpleFit ( int  size,
double *  ax,
double *  ay,
double *  e2y,
double &  p0,
double &  e2p0,
double &  p1 
)

Definition at line 344 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.cc.

344  {
345 
346  //#include "RecoTracker/ConversionSeedGenerators/interface/verySimpleFit.icc"
347  return 0;
348 }

Member Data Documentation

std::stringstream* HitQuadrupletGeneratorFromLayerPairForPhotonConversion::ss
private
const unsigned int HitQuadrupletGeneratorFromLayerPairForPhotonConversion::theInnerLayer
private

Definition at line 59 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h.

Referenced by innerLayer().

LayerCacheType& HitQuadrupletGeneratorFromLayerPairForPhotonConversion::theLayerCache
private

Definition at line 56 of file HitQuadrupletGeneratorFromLayerPairForPhotonConversion.h.

Referenced by hitPairs().

const unsigned int HitQuadrupletGeneratorFromLayerPairForPhotonConversion::theOuterLayer
private
Layers HitQuadrupletGeneratorFromLayerPairForPhotonConversion::theSeedingLayers
private