File indexing completed on 2024-04-06 12:29:01
0001
0002
0003
0004
0005
0006
0007
0008 #include <memory>
0009
0010
0011 #include "FWCore/Framework/interface/Frameworkfwd.h"
0012 #include "FWCore/Framework/interface/one/EDFilter.h"
0013
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/Utilities/interface/StreamID.h"
0019
0020 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0021 #include "DataFormats/TrackReco/interface/Track.h"
0022 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0023 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
0024 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h"
0025 #include "TrackingTools/PatternTools/interface/Trajectory.h"
0026 #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h"
0027
0028 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
0029 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
0030 #include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementPoint.h"
0031 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0032 #include "Geometry/CommonTopologies/interface/TkRadialStripTopology.h"
0033
0034 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0035 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0036 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
0037
0038 #include "RecoTracker/TransientTrackingRecHit/interface/TkTransientTrackingRecHitBuilder.h"
0039 #include "TrackingTools/Records/interface/TransientRecHitRecord.h"
0040 #include "RecoLocalTracker/ClusterParameterEstimator/interface/FakeCPE.h"
0041 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelFakeCPE.h"
0042 #include "RecoLocalTracker/ClusterParameterEstimator/interface/StripFakeCPE.h"
0043
0044
0045
0046
0047
0048 class FakeCPEFiller final : public edm::one::EDFilter<> {
0049 public:
0050 explicit FakeCPEFiller(const edm::ParameterSet&);
0051 ~FakeCPEFiller() = default;
0052
0053 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0054
0055 private:
0056 bool filter(edm::Event&, const edm::EventSetup&) override;
0057
0058
0059
0060 edm::EDGetTokenT<std::vector<Trajectory> > inputTraj_;
0061 TrackerHitAssociator::Config trackerHitAssociatorConfig_;
0062 edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> theBToken_;
0063 edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> globalGeometryToken_;
0064
0065 FakeCPE fakeCPE;
0066 };
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079 FakeCPEFiller::FakeCPEFiller(const edm::ParameterSet& iConfig)
0080 : inputTraj_(consumes<std::vector<Trajectory> >(edm::InputTag("FinalTracks"))),
0081 trackerHitAssociatorConfig_(iConfig, consumesCollector()),
0082 theBToken_(esConsumes(edm::ESInputTag("", "Fake"))),
0083 globalGeometryToken_(esConsumes()) {}
0084
0085
0086 bool FakeCPEFiller::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0087 bool accept = true;
0088 fakeCPE.map().clear();
0089
0090 edm::ESHandle<TransientTrackingRecHitBuilder> theB = iSetup.getHandle(theBToken_);
0091
0092 auto const& ttb = static_cast<TkTransientTrackingRecHitBuilder const&>(*theB);
0093 const_cast<StripFakeCPE*>(static_cast<StripFakeCPE const*>(ttb.stripClusterParameterEstimator()))
0094 ->setFakeCPE(&fakeCPE);
0095 const_cast<PixelFakeCPE*>(static_cast<PixelFakeCPE const*>(ttb.pixelClusterParameterEstimator()))
0096 ->setFakeCPE(&fakeCPE);
0097
0098 using namespace edm;
0099
0100 edm::ESHandle<GlobalTrackingGeometry> globalGeometry = iSetup.getHandle(globalGeometryToken_);
0101
0102 Handle<std::vector<Trajectory> > trajH;
0103 iEvent.getByToken(inputTraj_, trajH);
0104
0105 TrackerHitAssociator HitAssoc(iEvent, trackerHitAssociatorConfig_);
0106
0107 using LocalValues = std::pair<LocalPoint, LocalError>;
0108
0109 for (unsigned int j = 0; j < trajH->size(); ++j) {
0110 const std::vector<TrajectoryMeasurement>& tms = (*trajH)[j].measurements();
0111
0112 for (unsigned int i = 0; i < tms.size(); ++i) {
0113 TrajectoryStateOnSurface updatedState = tms[i].updatedState();
0114
0115 if (!updatedState.isValid())
0116 continue;
0117
0118 if (!tms[i].recHit()->isValid())
0119 continue;
0120
0121 auto const& thit = static_cast<BaseTrackerRecHit const&>(*tms[i].recHit());
0122 auto const& clus = thit.firstClusterRef();
0123
0124 auto const& simHits = HitAssoc.associateHit(*(tms[i].recHit()));
0125
0126 std::cout << "rechit " << thit.detUnit()->geographicalId().rawId() << ' ' << thit.localPosition() << ' '
0127 << thit.localPositionError() << ' ' << simHits.size() << std::endl;
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141 bool ok = false;
0142 for (auto const& sh : simHits) {
0143 if (sh.processType() != 0)
0144 continue;
0145
0146 std::cout << "simhit " << sh.localPosition() << std::endl;
0147
0148
0149 LocalValues lv(sh.localPosition(), thit.localPositionError());
0150
0151
0152 if (clus.isPixel())
0153 fakeCPE.map().add(clus.pixelCluster(), *thit.detUnit(), lv);
0154 else
0155 fakeCPE.map().add(clus.stripCluster(), *thit.detUnit(), lv);
0156 ok = true;
0157 break;
0158
0159 }
0160 if (!ok) {
0161 std::cout << "SimHit non found in det " << thit.detUnit()->geographicalId().rawId() << std::endl;
0162 accept = false;
0163 }
0164 }
0165
0166 }
0167
0168 return accept;
0169 }
0170
0171
0172 void FakeCPEFiller::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0173
0174
0175 edm::ParameterSetDescription desc;
0176 desc.setUnknown();
0177 descriptions.addDefault(desc);
0178 }
0179
0180 DEFINE_FWK_MODULE(FakeCPEFiller);