46 if(ph < 0) ph += 2 *
M_PI;
57 theTracker = trackerHandle.
product();
62 theGSTracker = geometricSearchTrackerHandle.
product();
67 theMagneticField = magneticFieldHandle.
product();
73 thePropagator = thePropagatorHandle.
product();
76 rzBounds[0].resize(8); phBounds[0].resize(20);
77 rzBounds[1].resize(8); phBounds[1].resize(32);
78 rzBounds[2].resize(8); phBounds[2].resize(44);
80 rzBounds[3].resize(7); phBounds[3].resize(24);
81 rzBounds[4].resize(7); phBounds[4].resize(24);
82 rzBounds[5].resize(7); phBounds[5].resize(24);
83 rzBounds[6].resize(7); phBounds[6].resize(24);
86 <<
" [ValidHitPairFilter] initializing pixel barrel";
88 for(TrackerGeometry::DetContainer::const_iterator
89 det = theTracker->detsPXB().begin();
90 det!= theTracker->detsPXB().end(); det++)
94 int il =
pid.layer() - 1;
95 int irz =
pid.module() - 1;
96 int iph =
pid.ladder() - 1;
98 rzBounds[il][irz] = (*det)->position().z();
99 phBounds[il][iph] =
spin((*det)->position().phi());
103 <<
" [ValidHitPairFilter] initializing pixel endcap";
105 for(TrackerGeometry::DetContainer::const_iterator
106 det = theTracker->detsPXF().begin();
107 det!= theTracker->detsPXF().end(); det++)
111 int il =
BPix3 + ((
pid.side() -1) << 1) + (
pid.disk() -1);
112 int irz = ((
pid.module()-1) << 1) + (
pid.panel()-1);
113 int iph = (
pid.blade() -1);
115 rzBounds[il][irz] = (*det)->position().perp();
116 phBounds[il][iph] =
spin((*det)->position().phi());
119 for(
int i = 0;
i < 7;
i++)
151 pair<int,int>
c(a,b);
193 track.
charge(), theMagneticField);
203 float rz,
const vector<float>& rzB,
204 float ph,
const vector<float>& phB)
const
206 vector<int> rzVec, phVec;
209 vector<float>::const_iterator irz = lower_bound(rzB.begin(),rzB.end(), rz);
210 if(irz > rzB.begin()) rzVec.push_back(irz - rzB.begin() - 1);
211 if(irz < rzB.end() ) rzVec.push_back(irz - rzB.begin() );
214 vector<float>::const_iterator iph = lower_bound(phB.begin(),phB.end(), ph);
215 if(iph > phB.begin()) phVec.push_back(iph - phB.begin() - 1);
216 else phVec.push_back(phB.end() - phB.begin() - 1);
217 if(iph < phB.end() ) phVec.push_back(iph - phB.begin() );
218 else phVec.push_back(phB.begin() - phB.begin() );
221 vector<const GeomDet *> dets;
223 for(vector<int>::const_iterator irz = rzVec.begin(); irz!= rzVec.end(); irz++)
224 for(vector<int>::const_iterator iph = phVec.begin(); iph!= phVec.end(); iph++)
229 int ladder = *iph + 1;
233 <<
" [ValidHitPairFilter] third ("<<layer<<
"|"<<ladder<<
"|"<<module<<
")";
236 dets.push_back(theTracker->idToDet(
id));
240 int side = (il -
BPix3) / 2 + 1;
241 int disk = (il -
BPix3) % 2 + 1;
242 int blade = *iph + 1;
243 int panel = (*irz) % 2 + 1;
244 int module = (*irz) / 2 + 1;
247 <<
" [ValidHitPairFilter] third ("<<side<<
"|"<<disk<<
"|"<<blade<<
"|"<<panel<<
"|"<<module<<
")";
250 dets.push_back(theTracker->idToDet(
id));
259 (
const reco::Track * track, vector<const TrackingRecHit *> recHits)
const
263 if(recHits.size() == 2)
274 vector<int> missingLayers = getMissingLayers(getLayer(*(recHits[0])),
275 getLayer(*(recHits[1])));
277 for(vector<int>::const_iterator missingLayer = missingLayers.begin();
278 missingLayer!= missingLayers.end();
281 int il = *missingLayer - 1;
291 (theGSTracker->pixelBarrelLayers())[il];
293 tsos = thePropagator->propagate(fts, layer->
surface());
302 layer = (theGSTracker->negPixelForwardLayers())[il -
BPix3 ];
304 layer = (theGSTracker->posPixelForwardLayers())[il -
BPix3 - 2];
306 tsos = thePropagator->propagate(fts, layer->
surface());
317 vector<const GeomDet *> closeDets =
318 getCloseDets(il, rz ,rzBounds[il], phi,phBounds[il]);
320 for(vector<const GeomDet *>::const_iterator det = closeDets.begin();
321 det!= closeDets.end();
325 thePropagator->propagate(fts, (*det)->surface());
337 LogTrace(
"MinBiasTracking") <<
" [ValidHitPairFilter] has gap --> good";
339 LogTrace(
"MinBiasTracking") <<
" [ValidHitPairFilter] no gap --> rejected";
static std::string getInfo(const DetId &id)
const Vector & momentum() const
track momentum vector
int getLayer(const TrackingRecHit &recHit) const
LocalPoint localPosition() const
virtual const BoundSurface & surface() const
The surface of the GeometricSearchDet.
Geom::Phi< T > phi() const
GlobalPoint globalPosition() const
ValidHitPairFilter(const edm::ParameterSet &ps, const edm::EventSetup &es)
unsigned int layer() const
layer id
virtual ~ValidHitPairFilter()
std::vector< int > getMissingLayers(int a, int b) const
unsigned int disk() const
disk id
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
virtual const BoundSurface & surface() const
GeometricSearchDet interface.
T const * product() const
static int position[264][3]
unsigned int side() const
positive or negative id
int charge() const
track electric charge
DetId geographicalId() const
FreeTrajectoryState getTrajectory(const reco::Track &track) const
std::vector< const GeomDet * > getCloseDets(int il, float rz, const std::vector< float > &rzB, float ph, const std::vector< float > &phB) const