File indexing completed on 2024-04-06 12:30:19
0001 #include "SimG4Core/CustomPhysics/interface/RHStopDump.h"
0002
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006
0007 RHStopDump::RHStopDump(edm::ParameterSet const& parameters)
0008 : mStream(parameters.getParameter<std::string>("stoppedFile").c_str()),
0009 mProducer(parameters.getUntrackedParameter<std::string>("producer", "g4SimHits")),
0010 tokNames_(consumes<std::vector<std::string> >(edm::InputTag(mProducer, "StoppedParticlesName"))),
0011 tokenXs_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesX"))),
0012 tokenYs_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesY"))),
0013 tokenZs_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesZ"))),
0014 tokenTs_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesTime"))),
0015 tokenIds_(consumes<std::vector<int> >(edm::InputTag(mProducer, "StoppedParticlesPdgId"))),
0016 tokenMasses_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesMass"))),
0017 tokenCharges_(consumes<std::vector<float> >(edm::InputTag(mProducer, "StoppedParticlesCharge"))) {}
0018
0019 void RHStopDump::analyze(const edm::Event& fEvent, const edm::EventSetup&) {
0020 const edm::Handle<std::vector<std::string> >& names = fEvent.getHandle(tokNames_);
0021 const edm::Handle<std::vector<float> >& xs = fEvent.getHandle(tokenXs_);
0022 const edm::Handle<std::vector<float> >& ys = fEvent.getHandle(tokenYs_);
0023 const edm::Handle<std::vector<float> >& zs = fEvent.getHandle(tokenZs_);
0024 const edm::Handle<std::vector<float> >& ts = fEvent.getHandle(tokenTs_);
0025 const edm::Handle<std::vector<int> >& ids = fEvent.getHandle(tokenIds_);
0026 const edm::Handle<std::vector<float> >& masses = fEvent.getHandle(tokenMasses_);
0027 const edm::Handle<std::vector<float> >& charges = fEvent.getHandle(tokenCharges_);
0028
0029 if (names->size() != xs->size() || xs->size() != ys->size() || ys->size() != zs->size()) {
0030 edm::LogError("RHStopDump") << "mismatch array sizes name/x/y/z:" << names->size() << '/' << xs->size() << '/'
0031 << ys->size() << '/' << zs->size() << std::endl;
0032 } else {
0033 for (size_t i = 0; i < names->size(); ++i) {
0034 mStream << (*names)[i] << ' ' << (*xs)[i] << ' ' << (*ys)[i] << ' ' << (*zs)[i] << ' ' << (*ts)[i] << std::endl;
0035 mStream << (*ids)[i] << ' ' << (*masses)[i] << ' ' << (*charges)[i] << std::endl;
0036 }
0037 }
0038 }