File indexing completed on 2023-03-17 11:19:24
0001
0002
0003
0004
0005 #include <RecoLocalMuon/GEMCSCSegment/plugins/GEMCSCSegmentProducer.h>
0006 #include <RecoLocalMuon/GEMCSCSegment/plugins/GEMCSCSegmentBuilder.h>
0007
0008 #include <DataFormats/Common/interface/Handle.h>
0009 #include <FWCore/Framework/interface/ESHandle.h>
0010 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0011
0012 #include <DataFormats/GEMRecHit/interface/GEMRecHitCollection.h>
0013 #include <DataFormats/GEMRecHit/interface/GEMCSCSegmentCollection.h>
0014 #include <DataFormats/GEMRecHit/interface/GEMCSCSegment.h>
0015
0016 #include <DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h>
0017 #include <DataFormats/CSCRecHit/interface/CSCSegmentCollection.h>
0018 #include <DataFormats/CSCRecHit/interface/CSCSegment.h>
0019
0020 GEMCSCSegmentProducer::GEMCSCSegmentProducer(const edm::ParameterSet& pas)
0021 : kCSCGeometryToken_(esConsumes<CSCGeometry, MuonGeometryRecord>()),
0022 kGEMGeometryToken_(esConsumes<GEMGeometry, MuonGeometryRecord>()),
0023 kCSCSegmentCollectionToken_(consumes<CSCSegmentCollection>(pas.getParameter<edm::InputTag>("inputObjectsCSC"))),
0024 kGEMRecHitCollectionToken_(consumes<GEMRecHitCollection>(pas.getParameter<edm::InputTag>("inputObjectsGEM"))),
0025 iev(0) {
0026 segmentBuilder_ = new GEMCSCSegmentBuilder(pas);
0027
0028
0029 produces<GEMCSCSegmentCollection>();
0030 }
0031
0032 GEMCSCSegmentProducer::~GEMCSCSegmentProducer() {
0033 LogDebug("GEMCSCSegment") << "deleting GEMCSCSegmentBuilder after " << iev << " events w/ gem and csc data.";
0034 delete segmentBuilder_;
0035 }
0036
0037 void GEMCSCSegmentProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0038
0039 edm::ParameterSetDescription desc;
0040 desc.add<edm::InputTag>("inputObjectsGEM", edm::InputTag("gemRecHits"));
0041 desc.add<edm::InputTag>("inputObjectsCSC", edm::InputTag("cscSegments"));
0042 desc.add<bool>("enableME21GE21", false);
0043 desc.add<std::string>("algo_name", "GEMCSCSegAlgoRR");
0044 {
0045 edm::ParameterSetDescription psd0;
0046 psd0.addUntracked<bool>("GEMCSCDebug", true);
0047 psd0.add<unsigned int>("minHitsPerSegment", 2);
0048 psd0.add<bool>("preClustering", true);
0049 psd0.add<double>("dXclusBoxMax", 1.0);
0050 psd0.add<double>("dYclusBoxMax", 5.0);
0051 psd0.add<bool>("preClusteringUseChaining", true);
0052 psd0.add<double>("dPhiChainBoxMax", 1.0);
0053 psd0.add<double>("dThetaChainBoxMax", 0.02);
0054 psd0.add<double>("dRChainBoxMax", 0.5);
0055 psd0.add<int>("maxRecHitsInCluster", 6);
0056 desc.add<edm::ParameterSetDescription>("algo_psets", psd0);
0057 }
0058 descriptions.add("gemcscSegments", desc);
0059 }
0060
0061 void GEMCSCSegmentProducer::produce(edm::Event& ev, const edm::EventSetup& setup) {
0062 LogDebug("GEMCSCSegment") << "start producing segments for " << ++iev << "th event w/ gem and csc data";
0063
0064
0065 const auto cscg = setup.getHandle(kCSCGeometryToken_);
0066 if (not cscg.isValid()) {
0067 edm::LogError("GEMCSCSegment") << "invalid CSCGeometry";
0068 return;
0069 }
0070 const CSCGeometry* cgeom = &*cscg;
0071
0072 const auto gemg = setup.getHandle(kGEMGeometryToken_);
0073 if (not gemg.isValid()) {
0074 edm::LogError("GEMCSCSegment") << "invalid GEMGeometry";
0075 return;
0076 }
0077 const GEMGeometry* ggeom = &*gemg;
0078
0079
0080 segmentBuilder_->setGeometry(ggeom, cgeom);
0081
0082
0083 segmentBuilder_->LinkGEMRollsToCSCChamberIndex(ggeom, cgeom);
0084
0085
0086 const auto cscSegment = ev.getHandle(kCSCSegmentCollectionToken_);
0087 if (not cscSegment.isValid()) {
0088 edm::LogError("GEMCSCSegment") << "invalid CSCSegmentCollection";
0089 return;
0090 }
0091
0092 const auto gemRecHits = ev.getHandle(kGEMRecHitCollectionToken_);
0093 if (not gemRecHits.isValid()) {
0094 edm::LogError("GEMCSCSegment") << "invalid GEMRecHitCollection";
0095 return;
0096 }
0097
0098
0099 auto oc = std::make_unique<GEMCSCSegmentCollection>();
0100
0101
0102 segmentBuilder_->build(gemRecHits.product(), cscSegment.product(), *oc);
0103
0104
0105 ev.put(std::move(oc));
0106 }