Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }