CMS 3D CMS Logo

Public Member Functions | Private Types | Static Private Member Functions | Private Attributes

MCParticleReplacer Class Reference

#include <MCParticleReplacer.h>

Inheritance diagram for MCParticleReplacer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

virtual void beginJob ()
virtual void beginRun (edm::Run &iRun, const edm::EventSetup &iSetup)
virtual void endJob ()
virtual void endRun ()
 MCParticleReplacer (const edm::ParameterSet &)
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)
 ~MCParticleReplacer ()

Private Types

enum  HepMcMode { kInvalid = 0, kNew, kReplace }

Static Private Member Functions

static HepMcMode stringToHepMcMode (const std::string &name)

Private Attributes

HepMcMode hepMcMode_
boost::shared_ptr
< ParticleReplacerBase
replacer_
edm::InputTag src_
edm::InputTag srcHepMC_

Detailed Description

Definition at line 31 of file MCParticleReplacer.h.


Member Enumeration Documentation

Enumerator:
kInvalid 
kNew 
kReplace 

Definition at line 44 of file MCParticleReplacer.h.


Constructor & Destructor Documentation

MCParticleReplacer::MCParticleReplacer ( const edm::ParameterSet pset) [explicit]

Definition at line 12 of file MCParticleReplacer.cc.

                                                                 :
  src_(pset.getParameter<edm::InputTag>("src")),
  srcHepMC_(pset.getParameter<edm::InputTag>("hepMcSrc")),
  hepMcMode_(stringToHepMcMode(pset.getParameter<std::string>("hepMcMode"))),
  replacer_(ParticleReplacerFactory::create(pset.getParameter<std::string>("algorithm"), pset)) {

  produces<edm::HepMCProduct>();
  produces<double>("weight");
}
MCParticleReplacer::~MCParticleReplacer ( )

Definition at line 22 of file MCParticleReplacer.cc.

{}

Member Function Documentation

void MCParticleReplacer::beginJob ( void  ) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 111 of file MCParticleReplacer.cc.

References replacer_.

{
  replacer_->beginJob();
}
void MCParticleReplacer::beginRun ( edm::Run iRun,
const edm::EventSetup iSetup 
) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 99 of file MCParticleReplacer.cc.

References replacer_.

{
  replacer_->beginRun(iRun, iSetup);
}
void MCParticleReplacer::endJob ( void  ) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 118 of file MCParticleReplacer.cc.

References replacer_.

{
  replacer_->endJob();
}
void MCParticleReplacer::endRun ( void  ) [virtual]

Definition at line 104 of file MCParticleReplacer.cc.

References replacer_.

{
  replacer_->endRun();
}
void MCParticleReplacer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [virtual]

Implements edm::EDProducer.

Definition at line 36 of file MCParticleReplacer.cc.

References DeDxDiscriminatorTools::charge(), Exception, edm::Event::getByLabel(), hepMcMode_, UserOptions_cff::idx, kNew, kReplace, patZpeak::muons, p4, edm::Event::put(), replacer_, src_, and srcHepMC_.

{
        std::vector<reco::Muon> muons;
        
        edm::Handle< std::vector< reco::CompositeCandidate > > combCandidatesHandle;
        if (iEvent.getByLabel(src_, combCandidatesHandle))
        {
                if (combCandidatesHandle->size()==0)
                        return;
                for (size_t idx = 0; idx < combCandidatesHandle->at(0).numberOfDaughters(); ++idx)
                {
                        int charge = combCandidatesHandle->at(0).daughter(idx)->charge();
                        reco::Particle::LorentzVector p4 = combCandidatesHandle->at(0).daughter(idx)->p4();
                        reco::Particle::Point vtx = combCandidatesHandle->at(0).daughter(idx)->vertex();
                        muons.push_back( reco::Muon(charge, p4, vtx));
                }
        }
        else
        {
                edm::Handle< edm::View<reco::Candidate> > candsHandle;
                if (iEvent.getByLabel(src_, candsHandle))
                {
                        for (size_t idx = 0; idx < candsHandle->size(); ++idx)
                        {
                                int charge = candsHandle->at(idx).charge();
                                reco::Particle::LorentzVector p4 = candsHandle->at(idx).p4();
                                reco::Particle::Point vtx = candsHandle->at(idx).vertex();
                                muons.push_back( reco::Muon(charge, p4, vtx));
                        }
                }
        }
        if (muons.size() == 0)
        {
                edm::LogError("MCParticleReplacer") << "No candidates or muons found!";
                return;
        }
        
  std::auto_ptr<HepMC::GenEvent> evt;
  if(hepMcMode_ == kReplace) {
    edm::Handle<edm::HepMCProduct> HepMCHandle;  
    iEvent.getByLabel(srcHepMC_, HepMCHandle);

    evt = replacer_->produce(muons, 0, HepMCHandle->GetEvent());
  }
  else if(hepMcMode_ == kNew) {
    evt = replacer_->produce(muons);
  }
  else
    throw cms::Exception("LogicError") << "Invalid hepMcMode " << hepMcMode_ << std::endl;


  if(evt.get() != 0) {
    std::auto_ptr<edm::HepMCProduct> bare_product(new edm::HepMCProduct());  
    bare_product->addHepMCData(evt.release()); // transfer ownership of the HepMC:GenEvent to bare_product

    iEvent.put(bare_product);
    
    std::auto_ptr<double> bare_weight(new double(replacer_->eventWeight));
    iEvent.put(bare_weight, std::string("weight"));
  }
  
}
MCParticleReplacer::HepMcMode MCParticleReplacer::stringToHepMcMode ( const std::string &  name) [static, private]

Definition at line 25 of file MCParticleReplacer.cc.

References Exception, kNew, and kReplace.

                                                                                       {
  if(name == "new")
    return kNew;
  else if(name == "replace")
    return kReplace;
  else
    throw cms::Exception("Configuration") << "Unsupported hepMcMode " << name << ", should be 'new' or 'replace'" << std::endl;
}

Member Data Documentation

Definition at line 49 of file MCParticleReplacer.h.

Referenced by produce().

Definition at line 50 of file MCParticleReplacer.h.

Referenced by beginJob(), beginRun(), endJob(), endRun(), and produce().

Definition at line 47 of file MCParticleReplacer.h.

Referenced by produce().

Definition at line 48 of file MCParticleReplacer.h.

Referenced by produce().