13 using namespace GeomDetEnumerators;
34 : theLayerCache(*layerCache), theOuterLayer(outer), theInnerLayer(inner), theMaxElement(max) {
35 ss =
new std::stringstream;
50 size_t totCountP2 = 0, totCountP1 = 0, totCountM2 = 0, totCountM1 = 0, selCount = 0;
52 (*ss) <<
"In " << innerLayerObj.
name() <<
" Out " <<
theOuterLayer.name() << std::endl;
57 if (innerHitsMap.
empty())
61 if (outerHitsMap.
empty())
68 vector<RecHitsSortedInPhi::Hit> innerHits;
70 float innerPhimin, innerPhimax;
82 std::unique_ptr<const HitRZCompatibility> checkRZ = region.
checkRZ(outerLayerObj.
detLayer(), ohit);
83 for (nextoh = oh + 1; nextoh != outerHits.second; ++nextoh) {
88 (*ss) <<
"\toPos " << oPos <<
" r " << oPos.
perp() <<
" phi " << oPos.
phi() <<
" cotTheta "
89 << oPos.
z() / oPos.
perp() << std::endl;
90 (*ss) <<
"\tnoPos " << noPos <<
" r " << noPos.
perp() <<
" phi " << noPos.
phi() <<
" cotTheta "
91 << noPos.
z() / noPos.
perp() << std::endl;
113 innerPhimin = ohit->globalPosition().phi();
114 innerPhimax = nohit->globalPosition().phi();
118 innerHitsMap.
hits(innerPhimin, innerPhimax, innerHits);
121 (*ss) <<
"\tiphimin, iphimax " << innerPhimin <<
" " << innerPhimax << std::endl;
124 std::unique_ptr<const HitRZCompatibility> checkRZb = region.
checkRZ(innerLayerObj.
detLayer(), ohit);
125 std::unique_ptr<const HitRZCompatibility> checkRZc = region.
checkRZ(innerLayerObj.
detLayer(), nohit);
128 vector<RecHitsSortedInPhi::Hit>::const_iterator ieh = innerHits.end();
129 for (vector<RecHitsSortedInPhi::Hit>::const_iterator ih = innerHits.begin(); ih < ieh; ++ih) {
134 (*ss) <<
"\toPos " << oPos <<
" r " << oPos.
perp() <<
" phi " << oPos.
phi() <<
" cotTheta "
135 << oPos.
z() / oPos.
perp() << std::endl;
136 (*ss) <<
"\tnoPos " << noPos <<
" r " << noPos.
perp() <<
" phi " << noPos.
phi() <<
" cotTheta "
137 << noPos.
z() / noPos.
perp() << std::endl;
138 (*ss) <<
"\tinnPos " << innPos <<
" r " << innPos.
perp() <<
" phi " << innPos.
phi() <<
" cotTheta "
139 << innPos.
z() / innPos.
perp() << std::endl;
149 for (vector<RecHitsSortedInPhi::Hit>::const_iterator nextih = ih + 1; nextih != ieh; ++nextih) {
154 (*ss) <<
"\toPos " << oPos <<
" r " << oPos.
perp() <<
" phi " << oPos.
phi() <<
" cotTheta "
155 << oPos.
z() / oPos.
perp() << std::endl;
156 (*ss) <<
"\tnoPos " << noPos <<
" r " << noPos.
perp() <<
" phi " << noPos.
phi() <<
" cotTheta "
157 << noPos.
z() / noPos.
perp() << std::endl;
158 (*ss) <<
"\tinnPos " << innPos <<
" r " << innPos.
perp() <<
" phi " << innPos.
phi() <<
" cotTheta "
159 << innPos.
z() / innPos.
perp() << std::endl;
160 (*ss) <<
"\tninnPos " << ninnPos <<
" r " << ninnPos.
perp() <<
" phi " << ninnPos.
phi() <<
" cotTheta "
161 << ninnPos.
z() / ninnPos.
perp() << std::endl;
177 edm::LogError(
"TooManyQuads") <<
"number of Quad combinations exceed maximum, no quads produced";
179 (*ss) <<
"In " << innerLayerObj.
name() <<
" Out " << outerLayerObj.
name() <<
"\tP2 " << totCountP2
180 <<
"\tM2 " << totCountM2 <<
"\tP1 " << totCountP1 <<
"\tM1 " << totCountM1 <<
"\tsel " << selCount
197 (*ss) <<
"In " << innerLayerObj.
name() <<
" Out " << outerLayerObj.
name() <<
"\tP2 " << totCountP2 <<
"\tM2 "
198 << totCountM2 <<
"\tP1 " << totCountP1 <<
"\tM1 " << totCountM1 <<
"\tsel " << selCount << std::endl;
209 (*ss) <<
"*******\nNo valid checkRZ\n*******" << std::endl;
216 sqr(hit->globalPosition().y() - region.
origin().
y()));
220 allowed = checkRZ->
range(r_reduced);
221 float zErr = nSigmaRZ * hit->errorGlobalZ();
222 hitRZ =
Range(hit->globalPosition().z() - zErr, hit->globalPosition().z() + zErr);
224 allowed = checkRZ->
range(hit->globalPosition().z());
225 float rErr = nSigmaRZ * hit->errorGlobalR();
226 hitRZ =
Range(r_reduced - rErr, r_reduced + rErr);
231 (*ss) <<
"\n\t\t allowed Range " << allowed.
min() <<
" \t, " << allowed.max() <<
"\n\t\t hitRz Range "
232 << hitRZ.min() <<
" \t, " << hitRZ.max() <<
"\n\t\t Cross Range " << crossRange.min() <<
" \t, "
233 << crossRange.max() << std::endl;
234 if (!crossRange.empty())
235 (*
ss) <<
"\n\t\t !!!!ACCEPTED!!! \n\n";
238 return crossRange.empty();
246 double r[5],
z[5], ez[5];
251 r[0] = ohit->globalPosition().perp();
252 z[0] = ohit->globalPosition().z();
255 r[1] = nohit->globalPosition().perp();
256 z[1] = nohit->globalPosition().z();
259 r[2] = nihit->globalPosition().perp();
260 z[2] = nihit->globalPosition().z();
263 r[3] = ihit->globalPosition().perp();
264 z[3] = ihit->globalPosition().z();
283 double zInnMin = z[4] - ez[4];
284 double zInnMax = z[4] + ez[4];
288 double zOutMin = z[3] - ez[3];
289 double zOutMax = z[3] + ez[3];
291 double zIntMin = z[2] - ez[2];
292 double zIntMax = z[2] + ez[2];
301 zIntMin = z[1] - ez[1];
302 zIntMax = z[1] + ez[1];
311 zIntMin = z[0] - ez[0];
312 zIntMax = z[0] + ez[0];
322 int size,
double *ax,
double *ay,
double *e2y,
double &p0,
double &e2p0,
double &
p1) {
333 double sqrProjFactor =
334 sqr((hit->globalPosition().z() - region.
origin().
z()) / (hit->globalPosition().perp() - region.
origin().
perp()));
335 return (hit->globalPositionError().czz() + sqrProjFactor * hit->globalPositionError().rerr(hit->globalPosition()));
343 double sqrProjFactor =
344 sqr((hit->globalPosition().z() - region.
origin().
z()) / (hit->globalPosition().perp() - region.
origin().
perp()));
346 sqrt(hit->globalPositionError().czz() + sqrProjFactor * hit->globalPositionError().rerr(hit->globalPosition()));
362 double tmpr, tmpz, tmpez;
366 for (
int i = 0;
i < n -
j;
i++) {
367 if (ar[
i] > ar[
i + 1]) {
397 double zLeft =
getZAtR(rInn, zInnMin, rInt, rOut, zOutMin);
401 double zRight =
getZAtR(rInn, zInnMax, rInt, rOut, zOutMax);
402 if (zIntMin > zRight)
404 if (zIntMin < zLeft && zIntMax < zRight) {
408 if (zIntMin > zLeft && zIntMax > zRight) {
418 double &rInn,
double &zInn,
double &
r,
double &rOut,
double &zOut) {
423 return zInn + (zOut - zInn) * (r - rInn) / (rOut - rInn);
constexpr double deltaPhi(double phi1, double phi2)
std::vector< Hit > hits(float phiMin, float phiMax) const
virtual std::unique_ptr< HitRZCompatibility > checkRZ(const DetLayer *layer, const Hit &outerHit, const DetLayer *outerlayer=nullptr, float lr=0, float gz=0, float dr=0, float dz=0) const =0
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
GlobalPoint const & origin() const
virtual Location location() const =0
Which part of the detector (barrel, endcap)
virtual Range range(const float &rORz) const =0
PixelRecoRange< float > Range
LayerCacheType & theLayerCache
Geom::Phi< T > phi() const
SeedingHitSet::ConstRecHitPointer InnerRecHit
const unsigned int theOuterLayer
Log< level::Error, false > LogError
void hitPairs(const TrackingRegion ®, OrderedHitPairs &prs, const Layers &layers)
constexpr std::array< uint8_t, layerIndexSize > layer
std::vector< HitWithPhi >::const_iterator HitIter
constexpr double nSigmaRZ
std::pair< HitIter, HitIter > Range
bool failCheckSegmentZCompatibility(double &rInn, double &zInnMin, double &zInnMax, double &rInt, double &zIntMin, double &zIntMax, double &rOut, double &zOutMin, double &zOutMax)
const std::string & name() const
HitQuadrupletGeneratorFromLayerPairForPhotonConversion(unsigned int inner, unsigned int outer, LayerCacheType *layerCache, unsigned int max=0)
bool failCheckSlopeTest(const RecHitsSortedInPhi::Hit &ohit, const RecHitsSortedInPhi::Hit &nohit, const RecHitsSortedInPhi::Hit &ihit, const RecHitsSortedInPhi::Hit &nihit, const TrackingRegion ®ion)
float originZBound() const
bounds the particle vertex in the longitudinal plane
unsigned int size() const override
SeedingHitSet::ConstRecHitPointer Hit
BaseTrackerRecHit const * Hit
const unsigned int theMaxElement
double getEffectiveErrorOnZ(const RecHitsSortedInPhi::Hit &hit, const TrackingRegion ®ion)
double verySimpleFit(int size, double *ax, double *ay, double *e2y, double &p0, double &e2p0, double &p1)
const DetLayer * detLayer() const
const unsigned int theInnerLayer
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
double getZAtR(double &rInn, double &zInn, double &r, double &rOut, double &zOut)
bool failCheckRZCompatibility(const RecHitsSortedInPhi::Hit &hit, const DetLayer &layer, const HitRZCompatibility *checkRZ, const TrackingRegion ®ion)
tuple size
Write out results.
SeedingHitSet::ConstRecHitPointer OuterRecHit
void bubbleSortVsR(int n, double *ax, double *ay, double *aey)
double getSqrEffectiveErrorOnZ(const RecHitsSortedInPhi::Hit &hit, const TrackingRegion ®ion)