File indexing completed on 2024-09-10 02:59:11
0001
0002 #include <vector>
0003
0004
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0008 #include "FWCore/Utilities/interface/EDGetToken.h"
0009 #include "DataFormats/Common/interface/ValidHandle.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011
0012 #include "FWCore/Framework/interface/Event.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014
0015 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
0016 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
0017 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
0018
0019 class TrackingTruthDumper : public edm::one::EDAnalyzer<> {
0020 public:
0021 explicit TrackingTruthDumper(const edm::ParameterSet&);
0022 ~TrackingTruthDumper() override {}
0023
0024 void analyze(const edm::Event&, const edm::EventSetup&) override;
0025 void beginJob() override {}
0026 void endJob() override {}
0027
0028 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0029
0030 private:
0031 edm::EDGetTokenT<TrackingParticleCollection> simTPToken_;
0032 edm::EDGetTokenT<TrackingVertexCollection> simTVToken_;
0033
0034 bool dumpVtx_;
0035 bool dumpTk_;
0036 };
0037
0038 TrackingTruthDumper::TrackingTruthDumper(const edm::ParameterSet& iConfig)
0039 : simTPToken_(consumes<TrackingParticleCollection>(iConfig.getParameter<edm::InputTag>("moduleLabelTk"))),
0040 simTVToken_(consumes<TrackingVertexCollection>(iConfig.getParameter<edm::InputTag>("moduleLabelVtx"))),
0041 dumpVtx_(iConfig.getUntrackedParameter<bool>("dumpVtx")),
0042 dumpTk_(iConfig.getUntrackedParameter<bool>("dumpTk")) {}
0043
0044
0045
0046
0047
0048
0049 void TrackingTruthDumper::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0050 auto SimTk = edm::makeValid(iEvent.getHandle(simTPToken_));
0051 auto SimVtx = edm::makeValid(iEvent.getHandle(simTVToken_));
0052
0053 edm::LogPrint("DumpTkVtx") << "\n SimVertex / SimTrack structure dump \n";
0054 edm::LogPrint("DumpTkVtx") << " SimVertex in the event = " << (*SimVtx).size();
0055 edm::LogPrint("DumpTkVtx") << " SimTracks in the event = " << (*SimTk).size();
0056 edm::LogPrint("DumpTkVtx") << "\n";
0057 size_t isimvtx(0);
0058 size_t isimtk(0);
0059
0060 if (dumpVtx_) {
0061 for (const auto& vtx : *SimVtx) {
0062 edm::LogPrint("DumpTkVtx") << "TrackingVertex " << isimvtx << " = " << vtx << "\n";
0063 edm::LogPrint("DumpTkVtx") << "TPs of this vertex: \n";
0064 isimtk = 0;
0065 for (const auto& tk : vtx.daughterTracks()) {
0066 bool isMerged = tk->g4Tracks().size() > 1;
0067 edm::LogPrint("DumpTkVtx") << "TrackingParticle " << isimtk << " isMerged " << isMerged << "\n" << *tk << "\n";
0068 isimtk++;
0069 }
0070 edm::LogPrint("DumpTkVtx") << "\n";
0071 isimvtx++;
0072 }
0073 }
0074
0075 if (dumpTk_) {
0076 edm::LogPrint("DumpTkVtx") << "TrackingParticles: \n";
0077 isimtk = 0;
0078 for (const auto& tk : *SimTk) {
0079 bool isMerged = tk.g4Tracks().size() > 1;
0080 edm::LogPrint("DumpTkVtx") << "TrackingParticle " << isimtk << " isMerged " << isMerged << "\n" << tk << "\n";
0081 isimtk++;
0082 }
0083 }
0084
0085 return;
0086 }
0087
0088 void TrackingTruthDumper::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0089 edm::ParameterSetDescription desc;
0090 desc.add<edm::InputTag>("moduleLabelTk", edm::InputTag("mix", "MergedTrackTruth"))
0091 ->setComment("Module for input TrackingParticle collection");
0092 desc.add<edm::InputTag>("moduleLabelVtx", edm::InputTag("mix", "MergedTrackTruth"))
0093 ->setComment("Module for input TrackingVertex collection");
0094 desc.addUntracked<bool>("dumpVtx", true);
0095 desc.addUntracked<bool>("dumpTk", true);
0096 descriptions.add("trackingTruthDumper", desc);
0097 }
0098
0099 #include "FWCore/Framework/interface/MakerMacros.h"
0100
0101
0102 DEFINE_FWK_MODULE(TrackingTruthDumper);