35 std::pair<double,double>
pt;
36 std::pair<uint32_t,uint32_t>
vlayers, lhits;
58 const std::vector<Point> &points,
const Block &
cut);
85 std::unique_ptr<TrackingRecHitCollection> *
selHits_;
86 std::unique_ptr<std::vector<Trajectory>> *
selTrajs_;
87 std::unique_ptr<TrajTrackAssociationCollection> *
selTTAss_;
90 std::vector<TrackingRecHitRefProd>
rHits_;
100 typedef typename std::vector<T> Ts;
102 if (ret.size() != 2)
throw cms::Exception(
"Invalid configuration") <<
"Parameter '" << name <<
"' must be given as {min,max}";
103 return std::pair<T,T>(ret[0],ret[1]);
108 #include <Math/DistFunc.h>
113 pt(p2p<double>(cfg,
"pt")),
114 vlayers(p2p<uint32_t>(cfg,
"validLayers")),
115 lhits(p2p<uint32_t>(cfg,
"lostHits")),
116 chi2n(p2p<double>(cfg,
"chi2n")),
117 d0(cfg.getParameter<double>(
"d0")),
118 dz(cfg.getParameter<double>(
"dz")),
119 d0Rel(cfg.getParameter<double>(
"d0Rel")),
120 dzRel(cfg.getParameter<double>(
"dzRel"))
129 vtxNumber_( cfg.getParameter<int32_t>(
"vtxNumber") ),
130 vtxTracks_( cfg.getParameter<uint32_t>(
"vtxTracks") ),
144 typedef std::vector<edm::ParameterSet>
VPSet;
147 for (VPSet::const_iterator it = psets.begin(), ed = psets.end(); it != ed; ++it) {
154 sprintf(buff,
"set%d", static_cast<int>(
i+1));
162 for (std::vector<std::string>::const_iterator li =
labels_.begin(), le =
labels_.end(); li != le; ++li) {
163 const char *
l= li->c_str();
164 produces<reco::TrackCollection>(
l).setBranchAlias( alias +
"Tracks" + l);
166 produces<reco::TrackExtraCollection>(
l).setBranchAlias( alias +
"TrackExtras" + l);
167 produces<TrackingRecHitCollection>(
l).setBranchAlias( alias +
"RecHits" + l);
169 produces< std::vector<Trajectory> >(
l).setBranchAlias( alias +
"Trajectories" + l);
170 produces< TrajTrackAssociationCollection >(
l).setBranchAlias( alias +
"TrajectoryTrackAssociations" + l);
176 selTracks_ =
new std::unique_ptr<reco::TrackCollection>[nblocks];
177 selTrackExtras_ =
new std::unique_ptr<reco::TrackExtraCollection>[nblocks];
178 selHits_ =
new std::unique_ptr<TrackingRecHitCollection>[nblocks];
179 selTrajs_ =
new std::unique_ptr<std::vector<Trajectory> >[nblocks];
180 selTTAss_ =
new std::unique_ptr<TrajTrackAssociationCollection >[nblocks];
181 rTracks_ = std::vector<reco::TrackRefProd>(nblocks);
182 rHits_ = std::vector<TrackingRecHitRefProd>(nblocks);
183 rTrackExtras_ = std::vector<reco::TrackExtraRefProd>(nblocks);
184 rTrajectories_ = std::vector< edm::RefProd< std::vector<Trajectory> > >(nblocks);
185 for (
size_t i = 0;
i < nblocks;
i++) {
186 selTracks_[
i] = std::make_unique<reco::TrackCollection>();
188 selHits_[
i] = std::make_unique<TrackingRecHitCollection>();
189 selTrajs_[
i] = std::make_unique<std::vector<Trajectory>>();
190 selTTAss_[
i] = std::make_unique<TrajTrackAssociationCollection>();
207 using namespace reco;
217 std::vector<Point> points;
225 for (
size_t i = 0;
i < nblocks;
i++) {
226 selTracks_[
i] = std::make_unique<TrackCollection>();
230 selHits_[
i] = std::make_unique<TrackingRecHitCollection>();
238 for (TrackCollection::const_iterator it = hSrcTrack->begin(), ed = hSrcTrack->end(); it != ed; ++it, ++current) {
239 const Track & trk = * it;
240 short where =
select(trk, *hBsp, points);
259 auto& selHitsWhere =
selHits_[where];
260 auto const firstHitIndex = selHitsWhere->size();
262 selHitsWhere->push_back( (*hit)->clone() );
264 tx.
setHits(
rHits_[where], firstHitIndex, selHitsWhere->size() - firstHitIndex);
275 for (
size_t i = 0;
i < nblocks;
i++) {
277 selTrajs_[
i] = std::make_unique<std::vector<Trajectory>>();
278 selTTAss_[
i] = std::make_unique<TrajTrackAssociationCollection>();
280 for (
size_t i = 0,
n = hTraj->size();
i <
n; ++
i) {
283 if (match != hTTAss->end()) {
285 short oldKey =
static_cast<short>(trkRef.
key());
297 for (
size_t i = 0;
i < nblocks;
i++) {
312 const std::vector<Point> &points,
316 if (points.empty()) {
318 double dz =
abs(tk.
dz(spot)), d0 =
abs(tk.
dxy(spot));
321 for (std::vector<Point>::const_iterator
point = points.begin(),
end = points.end();
point !=
end; ++
point) {
323 if ((dz < cut.
dz) && (d0 < cut.
d0)
333 for (std::vector<TrackMultiSelector::Block>::const_iterator itb =
blocks_.begin(), edb =
blocks_.end(); itb != edb; ++itb, ++
which) {
334 if ( ( itb->vlayers.first <= vlayers ) && ( vlayers <= itb->vlayers.second ) &&
335 ( itb->chi2n.first <=
chi2n ) && (
chi2n <= itb->chi2n.second ) &&
336 ( itb->pt.first <= pt ) && ( pt <= itb->pt.second ) &&
337 ( itb->lhits.first <= lhits ) && ( lhits <= itb->lhits.second ) &&
338 testVtx(tk, beamSpot, points, *itb) )
346 using namespace reco;
349 for (VertexCollection::const_iterator it = vtxs.begin(), ed = vtxs.end(); it != ed; ++it) {
351 ( (it->chi2() == 0.0) || (TMath::Prob(it->chi2(),
static_cast<int32_t
>(it->ndof()) ) >=
vtxChi2Prob_) ) ) {
352 points.push_back(it->position());
353 toTake--;
if (toTake == 0)
break;
const edm::RefToBase< TrajectorySeed > & seedRef() const
T getParameter(std::string const &) const
std::pair< double, double > pt
tuple ret
prodAgent to be discontinued
double d0Error() const
error on d0
edm::EDGetTokenT< std::vector< Trajectory > > tokenTraj
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
int32_t vtxNumber_
vertex cuts
bool copyExtras_
copy only the tracks, not extras and rechits (for AOD)
std::vector< reco::TrackExtraRefProd > rTrackExtras_
friend struct const_iterator
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
edm::InputTag src_
source collection label
bool getByToken(EDGetToken token, Handle< PROD > &result) const
virtual void produce(Event &, EventSetup const &)=0
bool testVtx(const reco::Track &tk, const reco::BeamSpot &beamSpot, const std::vector< Point > &points, const Block &cut)
#define DEFINE_FWK_MODULE(type)
std::vector< Track > TrackCollection
collection of Tracks
virtual ~TrackMultiSelector()
destructor
bool innerOk() const
return true if the innermost hit is valid
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
std::vector< Vertex > VertexCollection
collection of Vertex objects
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
std::pair< uint32_t, uint32_t > vlayers
key_type key() const
Accessor for product key.
std::unique_ptr< reco::TrackExtraCollection > * selTrackExtras_
const math::XYZPoint & outerPosition() const
position of the outermost hit
short select(const reco::Track &tk, const reco::BeamSpot &beamSpot, const std::vector< Point > &points)
return class, or -1 if rejected
int trackerLayersWithMeasurement() const
std::unique_ptr< reco::TrackCollection > * selTracks_
some storage
const math::XYZPoint & innerPosition() const
position of the innermost hit
U second(std::pair< T, U > const &p)
std::pair< T, T > p2p(const edm::ParameterSet &cfg, const std::string name)
std::unique_ptr< TrackingRecHitCollection > * selHits_
edm::EDGetTokenT< TrajTrackAssociationCollection > tokenTrajTrack
std::vector< edm::RefProd< std::vector< Trajectory > > > rTrajectories_
std::vector< reco::TrackRefProd > rTracks_
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
double pt() const
track transverse momentum
edm::EDGetTokenT< reco::VertexCollection > vertices_
std::vector< std::pair< short, reco::TrackRef > > whereItWent_
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
Abs< T >::type abs(const T &t)
std::pair< double, double > chi2n
bool copyTrajectories_
copy also trajectories and trajectory->track associations
Block(const edm::ParameterSet &cfg)
std::vector< std::string > labels_
output labels
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
std::vector< Block > blocks_
filter psets
std::unique_ptr< std::vector< Trajectory > > * selTrajs_
edm::EDGetTokenT< reco::TrackCollection > tokenTracks
RefProd< PROD > getRefBeforePut()
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
std::vector< TrackingRecHitRefProd > rHits_
void selectVertices(const reco::VertexCollection &vtxs, std::vector< Point > &points)
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
bool splitOutputs_
split selections in more sets
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
bool outerOk() const
return true if the outermost hit is valid
const PropagationDirection & seedDirection() const
direction of how the hits were sorted in the original seed
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
XYZPointD XYZPoint
point in space with cartesian internal representation
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
double sigmaZ() const
sigma z
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
TrackMultiSelector(const edm::ParameterSet &cfg)
constructor
static std::string const emptyString("")
std::unique_ptr< TrajTrackAssociationCollection > * selTTAss_
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
const TrackResiduals & residuals() const
get the residuals
const Point & position() const
position
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
volatile std::atomic< bool > shutdown_flag false
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
void produce(edm::Event &evt, const edm::EventSetup &es) override
process one event
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
tuple size
Write out results.
edm::EDGetTokenT< reco::BeamSpot > beamspot_
*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
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.