35 ~TrackClusterRemover(){}
44 using QualityMaskCollection = std::vector<unsigned char>;
47 const int minNumberOfLayersWithMeasBeforeFiltering_;
74 desc.
add<
double>(
"maxChi2",30.);
75 desc.add<
int>(
"minNumberOfLayersWithMeasBeforeFiltering",0);
79 descriptions.add(
"trackClusterRemover", desc);
84 maxChi2_(iConfig.getParameter<double>(
"maxChi2")),
85 minNumberOfLayersWithMeasBeforeFiltering_(iConfig.getParameter<int>(
"minNumberOfLayersWithMeasBeforeFiltering")),
86 trackQuality_(
reco::TrackBase::qualityByName(iConfig.getParameter<std::
string>(
"TrackQuality"))),
88 trajectories_(iConfig.getParameter<edm::
InputTag>(
"trajectories"),consumesCollector()),
89 pixelClusters_(consumes<edmNew::DetSetVector<
SiPixelCluster> >(iConfig.getParameter<edm::
InputTag>(
"pixelClusters"))),
90 stripClusters_(consumes<edmNew::DetSetVector<
SiStripCluster> >(iConfig.getParameter<edm::
InputTag>(
"stripClusters")))
93 produces<edm::ContainerMask<edmNew::DetSetVector<SiPixelCluster> > >();
94 produces<edm::ContainerMask<edmNew::DetSetVector<SiStripCluster> > >();
98 if ( !overrideTrkQuals.label().empty() )
102 if ( !classifier.label().empty())
103 srcQuals = consumes<QualityMaskCollection>(classifier);
120 iEvent.
getByToken(pixelClusters_, pixelClusters);
122 iEvent.
getByToken(stripClusters_, stripClusters);
125 std::vector<bool> collectedStrips;
126 std::vector<bool> collectedPixels;
128 if(!oldPxlMaskToken_.isUninitialized()) {
131 iEvent.
getByToken(oldPxlMaskToken_ ,oldPxlMask);
132 iEvent.
getByToken(oldStrMaskToken_ ,oldStrMask);
133 LogDebug(
"TrackClusterRemover")<<
"to merge in, "<<oldStrMask->size()<<
" strp and "<<oldPxlMask->size()<<
" pxl";
135 oldStrMask->copyMaskTo(collectedStrips);
136 oldPxlMask->copyMaskTo(collectedPixels);
137 assert(stripClusters->dataSize()>=collectedStrips.size());
138 collectedStrips.resize(stripClusters->dataSize(),
false);
143 collectedStrips.resize(stripClusters->dataSize(),
false);
144 collectedPixels.resize(pixelClusters->dataSize(),
false);
152 unsigned char qualMask = ~0;
156 auto const &
tracks = trajectories_.tracks(iEvent);
157 auto const & trajs = trajectories_.trajectories(iEvent);
162 QualityMaskCollection oldStyle;
163 QualityMaskCollection
const * pquals=
nullptr;
165 if (!overrideTrkQuals_.isUninitialized()) {
170 oldStyle.resize(
s,0);
171 for (
auto i=0U;
i<
s; ++
i)
if ( (*quals).get(
i) > 0 ) oldStyle[
i] = (255)&(*quals).get(
i);
175 if (!srcQuals.isUninitialized()) {
183 for (
auto i=0U;
i<
s; ++
i){
185 bool goodTk = (pquals) ? (*pquals)[
i] & qualMask : track.
quality(trackQuality_);
186 if ( !goodTk)
continue;
190 for (
auto const & tm : tms) {
191 auto const &
hit = *tm.recHit();
192 if (!
hit.isValid())
continue;
193 if ( tm.estimate() > maxChi2_ )
continue;
195 auto const & cluster = thit.firstClusterRef();
196 if (cluster.isStrip()) collectedStrips[cluster.key()]=
true;
197 else collectedPixels[cluster.key()]=
true;
204 auto removedStripClusterMask =
206 LogDebug(
"TrackClusterRemover")<<
"total strip to skip: "<<
std::count(collectedStrips.begin(),collectedStrips.end(),
true);
210 auto removedPixelClusterMask=
212 LogDebug(
"TrackClusterRemover")<<
"total pxl to skip: "<<
std::count(collectedPixels.begin(),collectedPixels.end(),
true);
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
TrackQuality
track quality
#define DEFINE_FWK_MODULE(type)
int trackerLayersWithMeasurement() const
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
DataContainer const & measurements() const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
bool isMatched(TrackingRecHit const &hit)
tuple oldClusterRemovalInfo
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(ConfigurationDescriptions &descriptions)
T const * product() const
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
virtual void produce(StreamID, Event &, EventSetup const &) const =0
bool quality(const TrackQuality) const
Track quality.
Pixel cluster – collection of neighboring pixels above threshold.