File indexing completed on 2023-03-17 11:24:41
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0025
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/EventSetup.h"
0028 #include "FWCore/Framework/interface/MakerMacros.h"
0029
0030 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0031 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0032 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0033
0034 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
0035
0036 #include "SimDataFormats/Track/interface/SimTrack.h"
0037 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0038 #include "SimDataFormats/Vertex/interface/SimVertex.h"
0039 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h"
0040 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0041
0042
0043
0044
0045
0046
0047 class SimHitTrackerAnalyzer : public edm::one::EDAnalyzer<> {
0048 public:
0049 explicit SimHitTrackerAnalyzer(const edm::ParameterSet&);
0050 ~SimHitTrackerAnalyzer() override = default;
0051
0052 void analyze(const edm::Event&, const edm::EventSetup&) override;
0053
0054 private:
0055
0056 const std::string HepMCLabel;
0057 const std::string SimTkLabel;
0058 const std::string SimVtxLabel;
0059 const std::string SimHitLabel;
0060 const edm::EDGetTokenT<edm::SimTrackContainer> tokSimTk_;
0061 const edm::EDGetTokenT<edm::SimVertexContainer> tokSimVtx_;
0062 const edm::EDGetTokenT<edm::PSimHitContainer> tokPixelBarrelHitsLowTof_;
0063 const edm::EDGetTokenT<edm::PSimHitContainer> tokPixelBarrelHitsHighTof_;
0064 const edm::EDGetTokenT<edm::PSimHitContainer> tokPixelEndcapHitsLowTof_;
0065 const edm::EDGetTokenT<edm::PSimHitContainer> tokPixelEndcapHitsHighTof_;
0066 const edm::EDGetTokenT<edm::PSimHitContainer> tokTIBHitsLowTof_;
0067 const edm::EDGetTokenT<edm::PSimHitContainer> tokTIBHitsHighTof_;
0068 const edm::EDGetTokenT<edm::PSimHitContainer> tokTIDHitsLowTof_;
0069 const edm::EDGetTokenT<edm::PSimHitContainer> tokTIDHitsHighTof_;
0070 const edm::EDGetTokenT<edm::PSimHitContainer> tokTOBHitsLowTof_;
0071 const edm::EDGetTokenT<edm::PSimHitContainer> tokTOBHitsHighTof_;
0072 const edm::EDGetTokenT<edm::PSimHitContainer> tokTECHitsLowTof_;
0073 const edm::EDGetTokenT<edm::PSimHitContainer> tokTECHitsHighTof_;
0074 };
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 SimHitTrackerAnalyzer::SimHitTrackerAnalyzer(const edm::ParameterSet& iConfig)
0088 : HepMCLabel(iConfig.getUntrackedParameter("moduleLabelMC", std::string("FlatRandomPtGunProducer"))),
0089 SimTkLabel(iConfig.getUntrackedParameter("moduleLabelTk", std::string("g4SimHits"))),
0090 SimVtxLabel(iConfig.getUntrackedParameter("moduleLabelVtx", std::string("g4SimHits"))),
0091 SimHitLabel(iConfig.getUntrackedParameter("moduleLabelHit", std::string("g4SimHits"))),
0092 tokSimTk_(consumes<edm::SimTrackContainer>(SimTkLabel)),
0093 tokSimVtx_(consumes<edm::SimVertexContainer>(SimVtxLabel)),
0094 tokPixelBarrelHitsLowTof_(
0095 consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsPixelBarrelLowTof"))),
0096 tokPixelBarrelHitsHighTof_(
0097 consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsPixelBarrelHighTof"))),
0098 tokPixelEndcapHitsLowTof_(
0099 consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsPixelEndcapLowTof"))),
0100 tokPixelEndcapHitsHighTof_(
0101 consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsPixelEndcapHighTof"))),
0102 tokTIBHitsLowTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTIBLowTof"))),
0103 tokTIBHitsHighTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTIBHighTof"))),
0104 tokTIDHitsLowTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTIDLowTof"))),
0105 tokTIDHitsHighTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTIDHighTof"))),
0106 tokTOBHitsLowTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTOBLowTof"))),
0107 tokTOBHitsHighTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTOBHighTof"))),
0108 tokTECHitsLowTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTECLowTof"))),
0109 tokTECHitsHighTof_(consumes<edm::PSimHitContainer>(edm::InputTag(SimHitLabel, "TrackerHitsTECHighTof"))) {}
0110
0111
0112
0113
0114
0115
0116 void SimHitTrackerAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0117 using namespace edm;
0118
0119 std::vector<PSimHit> theTrackerHits;
0120 std::vector<SimTrack> theSimTracks;
0121 std::vector<SimVertex> theSimVertexes;
0122
0123
0124 auto const& SimTk = iEvent.getHandle(tokSimTk_);
0125 auto const& SimVtx = iEvent.getHandle(tokSimVtx_);
0126 auto const& PixelBarrelHitsLowTof = iEvent.getHandle(tokPixelBarrelHitsLowTof_);
0127 auto const& PixelBarrelHitsHighTof = iEvent.getHandle(tokPixelBarrelHitsHighTof_);
0128 auto const& PixelEndcapHitsLowTof = iEvent.getHandle(tokPixelEndcapHitsLowTof_);
0129 auto const& PixelEndcapHitsHighTof = iEvent.getHandle(tokPixelEndcapHitsHighTof_);
0130 auto const& TIBHitsLowTof = iEvent.getHandle(tokTIBHitsLowTof_);
0131 auto const& TIBHitsHighTof = iEvent.getHandle(tokTIBHitsHighTof_);
0132 auto const& TIDHitsLowTof = iEvent.getHandle(tokTIDHitsLowTof_);
0133 auto const& TIDHitsHighTof = iEvent.getHandle(tokTIDHitsHighTof_);
0134 auto const& TOBHitsLowTof = iEvent.getHandle(tokTOBHitsLowTof_);
0135 auto const& TOBHitsHighTof = iEvent.getHandle(tokTOBHitsHighTof_);
0136 auto const& TECHitsLowTof = iEvent.getHandle(tokTECHitsLowTof_);
0137 auto const& TECHitsHighTof = iEvent.getHandle(tokTECHitsHighTof_);
0138
0139 theSimTracks.insert(theSimTracks.end(), SimTk->begin(), SimTk->end());
0140 theSimVertexes.insert(theSimVertexes.end(), SimVtx->begin(), SimVtx->end());
0141 theTrackerHits.insert(theTrackerHits.end(), PixelBarrelHitsLowTof->begin(), PixelBarrelHitsLowTof->end());
0142 theTrackerHits.insert(theTrackerHits.end(), PixelBarrelHitsHighTof->begin(), PixelBarrelHitsHighTof->end());
0143 theTrackerHits.insert(theTrackerHits.end(), PixelEndcapHitsLowTof->begin(), PixelEndcapHitsLowTof->end());
0144 theTrackerHits.insert(theTrackerHits.end(), PixelEndcapHitsHighTof->begin(), PixelEndcapHitsHighTof->end());
0145 theTrackerHits.insert(theTrackerHits.end(), TIBHitsLowTof->begin(), TIBHitsLowTof->end());
0146 theTrackerHits.insert(theTrackerHits.end(), TIBHitsHighTof->begin(), TIBHitsHighTof->end());
0147 theTrackerHits.insert(theTrackerHits.end(), TIDHitsLowTof->begin(), TIDHitsLowTof->end());
0148 theTrackerHits.insert(theTrackerHits.end(), TIDHitsHighTof->begin(), TIDHitsHighTof->end());
0149 theTrackerHits.insert(theTrackerHits.end(), TOBHitsLowTof->begin(), TOBHitsLowTof->end());
0150 theTrackerHits.insert(theTrackerHits.end(), TOBHitsHighTof->begin(), TOBHitsHighTof->end());
0151 theTrackerHits.insert(theTrackerHits.end(), TECHitsLowTof->begin(), TECHitsLowTof->end());
0152 theTrackerHits.insert(theTrackerHits.end(), TECHitsHighTof->begin(), TECHitsHighTof->end());
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 for (std::vector<SimTrack>::iterator isimtk = theSimTracks.begin(); isimtk != theSimTracks.end(); ++isimtk) {
0165 edm::LogInfo("TrackerSimInfoAnalyzer") << " Track momentum x = " << isimtk->momentum().x()
0166 << " y = " << isimtk->momentum().y() << " z = " << isimtk->momentum().z();
0167 edm::LogInfo("TrackerSimInfoAnalyzer") << " Track momentum Ptx = " << std::sqrt(isimtk->momentum().perp2());
0168 }
0169
0170 for (std::vector<SimVertex>::iterator isimvtx = theSimVertexes.begin(); isimvtx != theSimVertexes.end(); ++isimvtx) {
0171 edm::LogInfo("TrackerSimInfoAnalyzer") << " Vertex position x = " << isimvtx->position().x()
0172 << " y = " << isimvtx->position().y() << " z = " << isimvtx->position().z();
0173 }
0174
0175 std::map<unsigned int, std::vector<PSimHit>, std::less<unsigned int> > SimHitMap;
0176
0177 for (std::vector<PSimHit>::iterator isim = theTrackerHits.begin(); isim != theTrackerHits.end(); ++isim) {
0178 SimHitMap[(*isim).detUnitId()].push_back((*isim));
0179 edm::LogInfo("TrackerSimInfoAnalyzer")
0180 << " SimHit position x = " << isim->localPosition().x() << " y = " << isim->localPosition().y()
0181 << " z = " << isim->localPosition().z();
0182 edm::LogInfo("TrackerSimInfoAnalyzer") << " SimHit DetID = " << isim->detUnitId();
0183 edm::LogInfo("TrackerSimInfoAnalyzer") << " Time of flight = " << isim->timeOfFlight();
0184 }
0185 }
0186
0187
0188 DEFINE_FWK_MODULE(SimHitTrackerAnalyzer);