21 using namespace ctfseeding;
24 : thePairGenerator(0),
29 useMScat(cfg.getParameter<bool>(
"useMultScattering")),
30 useBend(cfg.getParameter<bool>(
"useBending"))
38 const std::vector<SeedingLayer> & layers,
53 OrderedHitPairs::const_iterator ip;
57 if (pairs.empty())
return;
61 typedef std::vector<ThirdHitRZPrediction<PixelRecoLineRZ> > Preds;
64 std::vector<const RecHitsSortedInPhi *> thirdHitMap(size);
66 vector<Hit> thirdHits;
69 for (
int il=0; il!=
size; ++il) {
70 thirdHitMap[il] = &(*theLayerCache)(&
theLayers[il], region, ev, es);
80 for (ip = pairs.begin(); ip != pairs.end(); ip++) {
82 GlobalPoint gp1tmp = (*ip).inner()->globalPosition();
83 GlobalPoint gp2tmp = (*ip).outer()->globalPosition();
94 for (
int il=0; il!=
size; ++il) {
105 Range rzRange = predictionRZ();
107 correction.correctRZRange(rzRange);
110 float phi0 = (*ip).outer()->globalPosition().phi();
116 radius = predictionRZ.detRange();
119 max(rzRange.min(), predictionRZ.detSize().min()),
120 min(rzRange.max(), predictionRZ.detSize().max()) );
122 if (radius.empty())
continue;
123 Range rPhi1m = predictionRPhitmp(radius.max(), -1);
124 Range rPhi1p = predictionRPhitmp(radius.max(), 1);
125 Range rPhi2m = predictionRPhitmp(radius.min(), -1);
126 Range rPhi2p = predictionRPhitmp(radius.min(), 1);
129 correction.correctRPhiRange(rPhi1);
130 correction.correctRPhiRange(rPhi2);
131 rPhi1.first /= radius.
max();
132 rPhi1.second /= radius.max();
133 rPhi2.first /= radius.min();
134 rPhi2.second /= radius.min();
143 thirdHitMap[il]->hits(phiRange.min(),phiRange.max(), thirdHits);
148 typedef vector<Hit>::const_iterator IH;
149 for (IH th=thirdHits.begin(), eh=thirdHits.end(); th !=eh; ++th) {
153 edm::LogError(
"TooManyTriplets")<<
" number of triples exceed maximum. no triplets produced.";
156 const Hit&
hit = (*th);
158 hit->globalPosition().
y()-region.
origin().
y(),
159 hit->globalPosition().z() );
160 float p3_r =
point.perp();
161 float p3_z =
point.z();
162 float p3_phi =
point.phi();
165 Range allowedZ = predictionRZ(p3_r);
166 correction.correctRZRange(allowedZ);
168 float zErr = nSigmaRZ *
std::sqrt(
float(hit->globalPositionError().czz()));
169 Range hitRange(p3_z-zErr, p3_z+zErr);
171 if (crossingRange.empty())
continue;
173 Range allowedR = predictionRZ(p3_z);
174 correction.correctRZRange(allowedR);
175 float rErr = nSigmaRZ *
std::sqrt(
float(hit->globalPositionError().rerr( hit->globalPosition())));
176 Range hitRange(p3_r-rErr, p3_r+rErr);
178 if (crossingRange.empty())
continue;
181 float phiErr = nSigmaPhi*
std::sqrt(
float(hit->globalPositionError().phierr(hit->globalPosition())));
182 for (
int icharge=-1; icharge <=1; icharge+=2) {
183 Range rangeRPhi = predictionRPhi(p3_r, icharge);
184 correction.correctRPhiRange(rangeRPhi);
185 if (
checkPhiInRange(p3_phi, rangeRPhi.first/p3_r-phiErr, rangeRPhi.second/p3_r+phiErr)) {
200 return ( (phi1 <= phi) && (phi <= phi2) );
204 const std::pair<float,float>& r1,
const std::pair<float,float>& r2)
const
206 float r2_min=r2.first;
207 float r2_max=r2.second;
211 return std::make_pair(
min(r1.first,r2_min),
max(r1.second,r2_max));
T getParameter(std::string const &) const
std::vector< ctfseeding::SeedingLayer > theLayers
virtual HitPairGenerator * clone() const =0
void initPropagator(const Propagator *propagator)
virtual float ptMin() const =0
minimal pt of interest
virtual GlobalPoint origin() const =0
void initLayer(const DetLayer *layer)
tuple extraHitRZtolerance
virtual Location location() const =0
Which part of the detector (barrel, endcap)
float extraHitRPhitolerance
static const double nSigmaPhi
PixelRecoRange< T > sum(const PixelRecoRange< T > &r) const
tuple extraHitRPhitolerance
tuple useFixedPreFiltering
virtual void init(const HitPairGenerator &pairs, const std::vector< ctfseeding::SeedingLayer > &layers, LayerCacheType *layerCache)
std::pair< float, float > mergePhiRanges(const std::pair< float, float > &r1, const std::pair< float, float > &r2) const
bool useFixedPreFiltering
T curvature(T InversePt, const edm::EventSetup &iSetup)
const T & max(const T &a, const T &b)
virtual void hitPairs(const TrackingRegion ®, OrderedHitPairs &prs, const edm::EventSetup &es)
HitPairGenerator * thePairGenerator
unsigned int theMaxElement
static const double nSigmaRZ
PixelRecoRange< float > Range
PixelTripletHLTGenerator(const edm::ParameterSet &cfg)
virtual float originRBound() const =0
bounds the particle vertex in the transverse plane
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
bool checkPhiInRange(float phi, float phi1, float phi2) const
TransientTrackingRecHit::ConstRecHitPointer Hit
LayerCacheType * theLayerCache
virtual unsigned int size() const
virtual void hitTriplets(const TrackingRegion ®ion, OrderedHitTriplets &trs, const edm::Event &ev, const edm::EventSetup &es)
float extraHitRZtolerance
tuple size
Write out results.
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point