12 inline double sqr(
double a) {
return a *
a; }
22 theClusterCheck(conf.getParameter<
edm::
ParameterSet>(
"ClusterCheckPSet"), iC),
23 theSilentOnClusterCheck(conf.getParameter<
edm::
ParameterSet>(
"ClusterCheckPSet")
24 .getUntrackedParameter<
bool>(
"silentClusterCheck",
false)),
25 _vtxMinDoF(conf.getParameter<double>(
"vtxMinDoF")),
26 _maxDZSigmas(conf.getParameter<double>(
"maxDZSigmas")),
27 _maxNumSelVtx(conf.getParameter<uint32_t>(
"maxNumSelVtx")),
28 _applyTkVtxConstraint(conf.getParameter<
bool>(
"applyTkVtxConstraint")),
30 _primaryVtxInputTag(conf.getParameter<
edm::
InputTag>(
"primaryVerticesTag")),
31 _beamSpotInputTag(conf.getParameter<
edm::
InputTag>(
"beamSpotInputTag")) {
52 edm::LogError(
"TooManyClusters") <<
"Found too many clusters (" << clustsOrZero <<
"), bailing out.\n";
70 <<
"Error! Can't get the product primary Vertex Collection " <<
_primaryVtxInputTag <<
"\n";
85 ss <<
"\n++++++++++++++++++\n";
97 seedCollection =
nullptr;
106 <<
" could not find track collecion in PhotonConversionTrajectorySeedProducerFromSingleLegAlgo";
121 std::vector<reco::Vertex> selectedPriVtxCompatibleWithTrack;
123 selectedPriVtxCompatibleWithTrack.push_back(*(
vertexHandle->begin()));
134 edm::LogInfo(
"debugTrajSeedFromSingleLeg") <<
"Inspected " <<
sel <<
" tracks over " << idx
140 const reco::Track& tk, std::vector<reco::Vertex>& selectedPriVtxCompatibleWithTrack) {
141 std::vector<std::pair<double, short> >
idx;
144 double cosPhi = tk.
px() / tk.
pt();
145 double sinPhi = tk.
py() / tk.
pt();
154 double _dz = tk.
dz(
vtx.position());
155 double _dzError = tk.
dzError();
157 double cotTheta = tk.
pz() / tk.
pt();
158 double dx =
vtx.position().x();
159 double dy =
vtx.position().y();
160 double sx2 =
vtx.covariance(0, 0);
161 double sy2 =
vtx.covariance(1, 1);
163 double sxy2 =
sqr(cosPhi * cotTheta) * sx2 +
sqr(sinPhi * cotTheta) * sy2 +
164 sqr(cotTheta * (-dx * sinPhi + dy * cosPhi)) * sphi2 +
165 sqr((1 + cotTheta * cotTheta) * (dx * cosPhi + dy * sinPhi)) * stheta2;
168 _dzError * _dzError +
vtx.covariance(2, 2) +
172 ss <<
" primary vtx " <<
vtx.position() <<
" \tk vz " << tk.
vz() <<
" vx " << tk.
vx() <<
" vy " << tk.
vy()
173 <<
" pz/pt " << tk.
pz() / tk.
pt() <<
" \t dz " << _dz <<
" \t " << _dzError <<
" sxy2 " << sxy2
174 <<
" \t dz/dzErr " << _dz / _dzError << std::endl;
180 idx.push_back(std::pair<double, short>(fabs(_dz), count));
184 ss <<
"no vertex selected " << std::endl;
190 idx.begin(), idx.end(), [](std::pair<double, short>
a, std::pair<double, short>
b) {
return a.first <
b.first; });
193 selectedPriVtxCompatibleWithTrack.push_back((*vertexHandle)[idx[
i].
second]);
195 ss <<
"selected vtx dz " << idx[0].first <<
" position" << idx[0].second << std::endl;
203 const reco::Track& tk,
const std::vector<reco::Vertex>& selectedPriVtxCompatibleWithTrack) {
204 bool foundAtLeastASeedCand =
false;
205 for (
auto const&
vtx : selectedPriVtxCompatibleWithTrack) {
212 ss <<
"[PrintRegion] " << region.
print() << std::endl;
219 if (
inspectTrack(&tk, region, primaryVertexPoint) and !foundAtLeastASeedCand) {
220 foundAtLeastASeedCand =
true;
305 float originRBound = 3;
306 float originZBound = 3.;
322 GlobalVector originBounds(originRBound, originRBound, originZBound);
324 GlobalPoint pvtxPoint(primaryVertexPoint.x(), primaryVertexPoint.y(), primaryVertexPoint.z());
329 ss <<
"\nConversion Point " << originPos <<
" " << originPos.
perp() <<
"\n";
334 unsigned int nHitss = hitss.
size();
340 ss <<
"\n nHitss " << nHitss <<
"\n";
347 for (
unsigned int iHits = 0; iHits < nHitss; ++iHits) {
349 ss <<
"\n iHits " << iHits <<
"\n";
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::BeamSpot > token_bs
void setData(const reco::Track *track, const math::XYZVector &refPoint=math::XYZVector(0, 0, 0))
PhotonConversionTrajectorySeedProducerFromSingleLegAlgo(const edm::ParameterSet &, edm::ConsumesCollector &&iC)
IdealHelixParameters _IdealHelixParameters
std::unique_ptr< SeedForPhotonConversion1Leg > theSeedCreator
void setMagnField(const MagneticField *magnField)
void find(const edm::Event &event, const edm::EventSetup &setup, TrajectorySeedCollection &output)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
constexpr bool isNotFinite(T x)
ClusterChecker theClusterCheck
Global3DPoint GlobalPoint
edm::InputTag _primaryVtxInputTag
std::vector< Track > TrackCollection
collection of Tracks
std::vector< Vertex > VertexCollection
collection of Vertex objects
TrajectorySeedCollection * seedCollection
double px() const
x coordinate of momentum vector
math::XYZVector GetMomentumAtTangentPoint() const
U second(std::pair< T, U > const &p)
const edm::EventSetup * myEsetup
math::XYZVector GetTangentPoint() const
edm::EDGetTokenT< reco::TrackCollection > token_refitter
std::vector< TrajectorySeed > TrajectorySeedCollection
const MagneticField * magField
edm::InputTag _beamSpotInputTag
CovarianceMatrix covariance() const
return track covariance matrix
double pt() const
track transverse momentum
size_t tooManyClusters(const edm::Event &e) const
Abs< T >::type abs(const T &t)
edm::EDGetTokenT< reco::VertexCollection > token_vertex
virtual unsigned int size() const =0
void print(std::stringstream &ss, const SiStripCluster &clus)
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 inspectTrack(const reco::Track *track, const TrackingRegion ®ion, math::XYZPoint &primaryVertexPoint)
~PhotonConversionTrajectorySeedProducerFromSingleLegAlgo()
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
double pz() const
z coordinate of momentum vector
std::unique_ptr< GlobalTrackingRegionProducerFromBeamSpot > theRegionProducer
bool _applyTkVtxConstraint
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
double dzError() const
error on dz
double vz() const
z coordinate of the reference point on track
void loopOnPriVtx(const reco::Track &tk, const std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
const edm::Event * myEvent
XYZVectorD XYZVector
spatial vector with cartesian internal representation
XYZPointD XYZPoint
point in space with cartesian internal representation
bool rejectTrack(const reco::Track &track)
virtual std::string print() const
edm::Handle< reco::VertexCollection > vertexHandle
double vy() const
y coordinate of the reference point on track
std::unique_ptr< CombinedHitPairGeneratorForPhotonConversion > theHitsGenerator
Square< F >::type sqr(const F &f)
bool theSilentOnClusterCheck
Regions::const_iterator IR
edm::Handle< reco::BeamSpot > recoBeamSpotHandle
edm::Handle< reco::TrackCollection > trackCollectionH
int charge() const
track electric charge
const Point & position() const
position
T const * product() const
bool selectPriVtxCompatibleWithTrack(const reco::Track &tk, std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
double py() const
y coordinate of momentum vector
double vx() const
x coordinate of the reference point on track
double thetaError() const
error on theta