CMS 3D CMS Logo

Public Types | Public Member Functions | Protected Attributes | Private Attributes

OscarProducer Class Reference

#include <OscarProducer.h>

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

List of all members.

Public Types

typedef std::vector
< boost::shared_ptr
< SimProducer > > 
Producers

Public Member Functions

virtual void beginJob ()
virtual void beginRun (edm::Run &r, const edm::EventSetup &c)
virtual void endJob ()
 OscarProducer (edm::ParameterSet const &p)
virtual void produce (edm::Event &e, const edm::EventSetup &c)
virtual ~OscarProducer ()

Protected Attributes

Producers m_producers
RunManagerm_runManager
CustomUIsessionm_UIsession

Private Attributes

CLHEP::HepRandomEngine * m_engine

Detailed Description

Definition at line 21 of file OscarProducer.h.


Member Typedef Documentation

typedef std::vector<boost::shared_ptr<SimProducer> > OscarProducer::Producers

Definition at line 24 of file OscarProducer.h.


Constructor & Destructor Documentation

OscarProducer::OscarProducer ( edm::ParameterSet const &  p) [explicit]

Definition at line 50 of file OscarProducer.cc.

References m_engine, m_producers, m_runManager, m_UIsession, and random.

{   
    StaticRandomEngineSetUnset random;
    m_engine = random.getEngine();
    
    produces<edm::SimTrackContainer>().setBranchAlias("SimTracks");
    produces<edm::SimVertexContainer>().setBranchAlias("SimVertices");
    produces<edm::PSimHitContainer>("TrackerHitsPixelBarrelLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsPixelBarrelHighTof");
    produces<edm::PSimHitContainer>("TrackerHitsTIBLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsTIBHighTof");
    produces<edm::PSimHitContainer>("TrackerHitsTIDLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsTIDHighTof");
    produces<edm::PSimHitContainer>("TrackerHitsPixelEndcapLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsPixelEndcapHighTof");
    produces<edm::PSimHitContainer>("TrackerHitsTOBLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsTOBHighTof");
    produces<edm::PSimHitContainer>("TrackerHitsTECLowTof");
    produces<edm::PSimHitContainer>("TrackerHitsTECHighTof");
    
    produces<edm::PSimHitContainer>("TotemHitsT1");
    produces<edm::PSimHitContainer>("TotemHitsT2Gem");
    produces<edm::PSimHitContainer>("TotemHitsRP");
    produces<edm::PSimHitContainer>("FP420SI");
    produces<edm::PSimHitContainer>("BSCHits");
    produces<edm::PSimHitContainer>("PLTHits");

    produces<edm::PCaloHitContainer>("EcalHitsEB");
    produces<edm::PCaloHitContainer>("EcalHitsEE");
    produces<edm::PCaloHitContainer>("EcalHitsES");
    produces<edm::PCaloHitContainer>("HcalHits");
    produces<edm::PCaloHitContainer>("CaloHitsTk");
    produces<edm::PSimHitContainer>("MuonDTHits");
    produces<edm::PSimHitContainer>("MuonCSCHits");
    produces<edm::PSimHitContainer>("MuonRPCHits");
    produces<edm::PCaloHitContainer>("CastorPL");
    produces<edm::PCaloHitContainer>("CastorFI");
    produces<edm::PCaloHitContainer>("CastorBU");
    produces<edm::PCaloHitContainer>("CastorTU");
    produces<edm::PCaloHitContainer>("EcalTBH4BeamHits");
    produces<edm::PCaloHitContainer>("HcalTB06BeamHits");
    produces<edm::PCaloHitContainer>("ZDCHITS"); 
    produces<edm::PCaloHitContainer>("ChamberHits"); 
    produces<edm::PCaloHitContainer>("FibreHits"); 
    produces<edm::PCaloHitContainer>("WedgeHits"); 
    
    //m_runManager = RunManager::init(p);
    m_runManager = new RunManager(p);

    //register any products 
    m_producers= m_runManager->producers();

    for(Producers::iterator itProd = m_producers.begin();
        itProd != m_producers.end();
        ++itProd) {
       (*itProd)->registerProducts(*this);
    }

    //UIsession manager for message handling
    m_UIsession = new CustomUIsession();

}
OscarProducer::~OscarProducer ( ) [virtual]

Definition at line 113 of file OscarProducer.cc.

References m_runManager, and m_UIsession.

{ 
  //this is causing a seg fault when an exception occurs while constructing
  // an HcalSD.  Need to check for memory problems. 
  if (m_runManager!=0) delete m_runManager; 
  if (m_UIsession!=0) delete m_UIsession;

}

Member Function Documentation

void OscarProducer::beginJob ( void  ) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 128 of file OscarProducer.cc.

References m_engine, and random.

{
  StaticRandomEngineSetUnset random(m_engine);
}
void OscarProducer::beginRun ( edm::Run r,
const edm::EventSetup c 
) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 122 of file OscarProducer.cc.

References RunManager::initG4(), and m_runManager.

{
  m_runManager->initG4(es);
}
void OscarProducer::endJob ( void  ) [virtual]

Reimplemented from edm::EDProducer.

Definition at line 133 of file OscarProducer.cc.

{ }
void OscarProducer::produce ( edm::Event e,
const edm::EventSetup c 
) [virtual]

Implements edm::EDProducer.

Definition at line 135 of file OscarProducer.cc.

References RunManager::abortEvent(), edm::errors::EventCorruption, Exception, recoMuon::in, G4SimEvent::load(), m_engine, m_producers, m_runManager, p1, p2, RunManager::produce(), edm::Event::put(), random, RunManager::sensCaloDetectors(), RunManager::sensTkDetectors(), RunManager::simEvent(), v, and SimG4Exception::what().

{
    StaticRandomEngineSetUnset random(m_engine);

    std::vector<SensitiveTkDetector*>& sTk = m_runManager->sensTkDetectors();
    std::vector<SensitiveCaloDetector*>& sCalo = m_runManager->sensCaloDetectors();

    try
    {
    m_runManager->produce(e,es);

    std::auto_ptr<edm::SimTrackContainer> p1(new edm::SimTrackContainer);
    std::auto_ptr<edm::SimVertexContainer> p2(new edm::SimVertexContainer);
    G4SimEvent * evt = m_runManager->simEvent();
    evt->load(*p1);
    evt->load(*p2);   

    e.put(p1);
    e.put(p2);

    for (std::vector<SensitiveTkDetector*>::iterator it = sTk.begin(); it != sTk.end(); it++)
    {
        std::vector<std::string> v = (*it)->getNames();
        for (std::vector<std::string>::iterator in = v.begin(); in!= v.end(); in++)
        {
            std::auto_ptr<edm::PSimHitContainer> product(new edm::PSimHitContainer);
            (*it)->fillHits(*product,*in);
            e.put(product,*in);
        }
    }
    for (std::vector<SensitiveCaloDetector*>::iterator it = sCalo.begin(); it != sCalo.end(); it++)
    {
        std::vector<std::string>  v = (*it)->getNames();
        for (std::vector<std::string>::iterator in = v.begin(); in!= v.end(); in++)
        {
            std::auto_ptr<edm::PCaloHitContainer> product(new edm::PCaloHitContainer);
            (*it)->fillHits(*product,*in);
            e.put(product,*in);
        }
    }

    for(Producers::iterator itProd = m_producers.begin();
        itProd != m_producers.end();
        ++itProd) {
       (*itProd)->produce(e,es);
    }
    }
    catch ( const SimG4Exception& simg4ex )
    {
       
       edm::LogInfo("SimG4CoreApplication") << " SimG4Exception caght !" << simg4ex.what() << std::endl ;
       
       m_runManager->abortEvent() ;
       throw edm::Exception( edm::errors::EventCorruption ) ;
    }
}

Member Data Documentation

CLHEP::HepRandomEngine* OscarProducer::m_engine [private]

Definition at line 38 of file OscarProducer.h.

Referenced by beginJob(), OscarProducer(), and produce().

Definition at line 34 of file OscarProducer.h.

Referenced by OscarProducer(), and produce().

Definition at line 33 of file OscarProducer.h.

Referenced by beginRun(), OscarProducer(), produce(), and ~OscarProducer().

Definition at line 35 of file OscarProducer.h.

Referenced by OscarProducer(), and ~OscarProducer().