File indexing completed on 2023-03-17 10:53:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #include <memory>
0022 #include <numeric>
0023 #include <vector>
0024
0025
0026 #include "FWCore/Framework/interface/Frameworkfwd.h"
0027 #include "FWCore/Framework/interface/global/EDFilter.h"
0028
0029 #include "FWCore/Framework/interface/Event.h"
0030 #include "FWCore/Framework/interface/EventSetup.h"
0031 #include "FWCore/Framework/interface/Run.h"
0032 #include "FWCore/Framework/interface/MakerMacros.h"
0033
0034 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0035
0036 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0037
0038
0039
0040
0041 #include "FWCore/Utilities/interface/InputTag.h"
0042
0043 #include "TrackingTools/PatternTools/interface/Trajectory.h"
0044 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
0045 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0046 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0047 #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h"
0048 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0049
0050 #include "DataFormats/Common/interface/Ref.h"
0051 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0052 #include "DataFormats/DetId/interface/DetId.h"
0053 #include "DataFormats/TrackReco/interface/Track.h"
0054 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0055
0056 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0057
0058
0059
0060
0061
0062 class OverlapProblemTSOSPositionFilter : public edm::global::EDFilter<> {
0063 public:
0064 explicit OverlapProblemTSOSPositionFilter(const edm::ParameterSet&);
0065 ~OverlapProblemTSOSPositionFilter() override;
0066
0067 private:
0068 bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0069
0070
0071
0072 const bool m_validOnly;
0073 edm::EDGetTokenT<TrajTrackAssociationCollection> m_ttacollToken;
0074 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> m_tTopoToken;
0075 };
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 OverlapProblemTSOSPositionFilter::OverlapProblemTSOSPositionFilter(const edm::ParameterSet& iConfig)
0089 : m_validOnly(iConfig.getParameter<bool>("onlyValidRecHit")),
0090 m_ttacollToken(
0091 consumes<TrajTrackAssociationCollection>(iConfig.getParameter<edm::InputTag>("trajTrackAssoCollection"))),
0092 m_tTopoToken(esConsumes())
0093
0094 {
0095
0096 }
0097
0098 OverlapProblemTSOSPositionFilter::~OverlapProblemTSOSPositionFilter() {
0099
0100
0101 }
0102
0103
0104
0105
0106
0107
0108 bool OverlapProblemTSOSPositionFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0109 using namespace edm;
0110
0111
0112
0113 TrajectoryStateCombiner tsoscomb;
0114
0115
0116
0117 Handle<TrajTrackAssociationCollection> ttac;
0118 iEvent.getByToken(m_ttacollToken, ttac);
0119
0120 const auto& tTopo = iSetup.getData(m_tTopoToken);
0121
0122 for (TrajTrackAssociationCollection::const_iterator pair = ttac->begin(); pair != ttac->end(); ++pair) {
0123 const edm::Ref<std::vector<Trajectory> >& traj = pair->key;
0124
0125 const std::vector<TrajectoryMeasurement>& tmcoll = traj->measurements();
0126
0127 for (std::vector<TrajectoryMeasurement>::const_iterator meas = tmcoll.begin(); meas != tmcoll.end(); ++meas) {
0128 if (!meas->updatedState().isValid())
0129 continue;
0130
0131 TrajectoryStateOnSurface tsos = tsoscomb(meas->forwardPredictedState(), meas->backwardPredictedState());
0132 TransientTrackingRecHit::ConstRecHitPointer hit = meas->recHit();
0133
0134 if (!hit->isValid() && m_validOnly)
0135 continue;
0136
0137 if (hit->geographicalId().det() != DetId::Tracker)
0138 continue;
0139
0140 if (hit->geographicalId().subdetId() != StripSubdetector::TEC)
0141 continue;
0142
0143 if (tTopo.tecRing(hit->geographicalId()) != 6)
0144 continue;
0145
0146 if (tsos.localPosition().y() < 6.)
0147 continue;
0148
0149 return true;
0150 }
0151 }
0152
0153 return false;
0154 }
0155
0156
0157 DEFINE_FWK_MODULE(OverlapProblemTSOSPositionFilter);