Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 2012
Public Member Functions | Protected Attributes

HepRndm::Engine< TYPE > Class Template Reference

#include <HepRndmEngine.h>

Inheritance diagram for HepRndm::Engine< TYPE >:
Inheritance graph
[legend]
Collaboration diagram for HepRndm::Engine< TYPE >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 Engine (const std::string &name, ISvcLocator *loc)
 Standard Constructor.
virtual ~Engine ()
 Standard Destructor.
virtual StatusCode initialize ()
 Initialize the Engine.
virtual StatusCode finalize ()
 Finalize the Engine.
virtual StatusCode initializeEngine ()
 Create/Initialize new HepEngine....
virtual double rndm () const
 Single shot / This was declared "virtual double rndm()" which causes / compiler warnings since the signature if different than / that for RndmEngine::rndm(). I've assumed that the difference / is an error. If it is in fact a deliberate addition of a / new function, remove the "const" below and uncomment the / subsequent lines.
StatusCode setSeeds (const std::vector< long > &seed)
 virtual double rndm() const { return BaseEngine::rndm( ); }
StatusCode seeds (std::vector< long > &seed) const
 Retrieve seeds.
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()
template<>
StatusCode initializeEngine ()

Protected Attributes

std::vector< long > m_seeds
int m_row
int m_col
int m_lux
bool m_useTable
bool m_setSingleton

Detailed Description

template<class TYPE>
class HepRndm::Engine< TYPE >

Definition at line 24 of file HepRndmEngine.h.


Constructor & Destructor Documentation

template<class TYPE >
HepRndm::Engine< TYPE >::Engine ( const std::string name,
ISvcLocator loc 
)

Standard Constructor.

Definition at line 58 of file HepRndmEngines.cpp.

  : BaseEngine (nam, loc)    {
    declareProperty("Seeds",       m_seeds);
    declareProperty("Column",      m_col = 0);
    declareProperty("Row",         m_row = 1);
    declareProperty("Luxury",      m_lux = 3);
    declareProperty("UseTable",    m_useTable     = false);
    declareProperty("SetSingleton",m_setSingleton = false);
  }
template<class TYPE >
HepRndm::Engine< TYPE >::~Engine (  ) [virtual]

Standard Destructor.

Definition at line 69 of file HepRndmEngines.cpp.

                                                       {
  }

Member Function Documentation

template<class TYPE >
StatusCode HepRndm::Engine< TYPE >::finalize (  ) [virtual]

Finalize the Engine.

Reimplemented from RndmEngine.

Definition at line 118 of file HepRndmEngines.cpp.

                                                                   {
    if ( m_hepEngine )   {
      HepRandom::setTheEngine(0);
      delete m_hepEngine;
    }
    m_seeds.clear();
    m_hepEngine = 0;
    return RndmEngine::finalize();
  }
template<class TYPE >
StatusCode HepRndm::Engine< TYPE >::initialize (  ) [virtual]

Initialize the Engine.

Reimplemented from RndmEngine.

Definition at line 73 of file HepRndmEngines.cpp.

                                                                     {
    m_seeds.erase(m_seeds.begin(), m_seeds.end());
    StatusCode status = RndmEngine::initialize();
    if ( m_seeds.size() == 0 )  {
      // Default seeds
      long theSeed = 1234567;
      m_seeds.push_back(theSeed);
      m_seeds.push_back(0);
    }
    MsgStream log(msgSvc(), name());
    if ( status.isSuccess() )   {
      status = initializeEngine();
      if ( status.isSuccess() )   {
        log << MSG::INFO << "Generator engine type:"
                  << System::typeinfoName(typeid(TYPE))
                  << endmsg;
        if ( m_useTable )   {
          if ( m_row > 214 || m_col > 1 )   {
            log << MSG::ERROR << "Generator engine seed table has dimension [215][2], you gave:"
                << " Row=" << m_row << " Column:" << m_col << endmsg;
            status = StatusCode::FAILURE;
          }
          else    {
            log << MSG::INFO << "Generator engine seeds from table."
                << " Row=" << m_row << " Column:" << m_col << endmsg;
          }
        }
        log << "Current Seed:" << m_hepEngine->getSeed();
        log << " Luxury:" << m_lux;
        log << endmsg;
        // Use the default static engine if required (e.g. for GEANT4)
        if ( m_setSingleton )   {
            HepRandom::setTheEngine(m_hepEngine);
          log << "This is the GEANT4 engine!" << endmsg;
        }
        return status;
      }
    }
    log << MSG::ERROR << "Cannot initialze random engine of type:"
          << System::typeinfoName(typeid(TYPE))
        << endmsg;
    return status;
  }
template<>
StatusCode HepRndm::Engine< HepJamesRandom >::initializeEngine (  )

Definition at line 217 of file HepRndmEngines.cpp.

                                                                   {
    m_hepEngine = (m_useTable) ? new HepJamesRandom(m_row, m_col) : new HepJamesRandom(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< Ranlux64Engine >::initializeEngine (  )

Definition at line 207 of file HepRndmEngines.cpp.

                                                                   {
    m_hepEngine = (m_useTable) ? new Ranlux64Engine(m_row, m_col, m_lux) : new Ranlux64Engine(m_seeds[0], m_lux);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< RanluxEngine >::initializeEngine (  )

Definition at line 202 of file HepRndmEngines.cpp.

                                                                 {
    m_hepEngine = (m_useTable) ? new RanluxEngine(m_row, m_col, m_lux) : new RanluxEngine(m_seeds[0], m_lux);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< RanshiEngine >::initializeEngine (  )

Definition at line 197 of file HepRndmEngines.cpp.

                                                                 {
    m_hepEngine = (m_useTable) ? new RanshiEngine(m_row, m_col) : new RanshiEngine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< TripleRand >::initializeEngine (  )

Definition at line 172 of file HepRndmEngines.cpp.

                                                               {
    m_hepEngine = (m_useTable) ? new TripleRand(m_row, m_col) : new TripleRand(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< Hurd288Engine >::initializeEngine (  )

Definition at line 187 of file HepRndmEngines.cpp.

                                                                  {
    m_hepEngine = (m_useTable) ? new Hurd288Engine(m_row, m_col) : new Hurd288Engine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< MTwistEngine >::initializeEngine (  )

Definition at line 212 of file HepRndmEngines.cpp.

                                                                 {
    m_hepEngine = (m_useTable) ? new MTwistEngine(m_row, m_col) : new MTwistEngine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< DRand48Engine >::initializeEngine (  )

Definition at line 177 of file HepRndmEngines.cpp.

                                                                  {
    m_hepEngine = (m_useTable) ? new DRand48Engine(m_row, m_col) : new DRand48Engine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< Hurd160Engine >::initializeEngine (  )

Definition at line 182 of file HepRndmEngines.cpp.

                                                                  {
    m_hepEngine = (m_useTable) ? new Hurd160Engine(m_row, m_col) : new Hurd160Engine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< DualRand >::initializeEngine (  )

Definition at line 167 of file HepRndmEngines.cpp.

                                                             {
    m_hepEngine = (m_useTable) ? new DualRand(m_row, m_col) : new DualRand(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<>
StatusCode HepRndm::Engine< RanecuEngine >::initializeEngine (  )

Definition at line 192 of file HepRndmEngines.cpp.

                                                                 {
    m_hepEngine = (m_useTable) ? new RanecuEngine(m_row) : new RanecuEngine(m_seeds[0]);
    return StatusCode::SUCCESS;
  }
template<class TYPE >
virtual StatusCode HepRndm::Engine< TYPE >::initializeEngine (  ) [virtual]

Create/Initialize new HepEngine....

template<class TYPE >
double HepRndm::Engine< TYPE >::rndm (  ) const [virtual]

Single shot / This was declared "virtual double rndm()" which causes / compiler warnings since the signature if different than / that for RndmEngine::rndm(). I've assumed that the difference / is an error. If it is in fact a deliberate addition of a / new function, remove the "const" below and uncomment the / subsequent lines.

Reimplemented from RndmEngine.

Definition at line 129 of file HepRndmEngines.cpp.

                                                         {
    return m_hepEngine->flat();
  }
template<class TYPE >
StatusCode HepRndm::Engine< TYPE >::seeds ( std::vector< long > &  seed ) const

Retrieve seeds.

Definition at line 151 of file HepRndmEngines.cpp.

                                                                                    {
    /*
    const long *s = m_hepEngine->getSeeds();
    for ( size_t i = 0; i < NUMBER_OF_SEEDS; i++ )   {
      seed.push_back(s[i]);
      if ( m_seeds.size() > i )
        m_seeds[i] = s[i];
      else
        m_seeds.push_back(s[i]);
    }
    */
    seed.push_back(m_hepEngine->getSeed());
    return StatusCode::SUCCESS;
  }
template<class TYPE >
StatusCode HepRndm::Engine< TYPE >::setSeeds ( const std::vector< long > &  seed )

virtual double rndm() const { return BaseEngine::rndm( ); }

Set seeds

Definition at line 134 of file HepRndmEngines.cpp.

                                                                                       {
    typedef std::vector<long> seed_t;
    m_seeds.clear();
    for ( seed_t::const_iterator i = seed.begin(); i < seed.end(); i++ )   {
      m_seeds.push_back(*i);
    }
    if ( m_seeds.size() > 0 )   {
      if ( m_seeds.back() != 0 )    {
        m_seeds.push_back(0);
      }
      m_hepEngine->setSeeds(&m_seeds[0], m_lux);
      return StatusCode::SUCCESS;
    }
    return StatusCode::FAILURE;
  }

Member Data Documentation

template<class TYPE >
int HepRndm::Engine< TYPE >::m_col [protected]

Definition at line 26 of file HepRndmEngine.h.

template<class TYPE >
int HepRndm::Engine< TYPE >::m_lux [protected]

Definition at line 26 of file HepRndmEngine.h.

template<class TYPE >
int HepRndm::Engine< TYPE >::m_row [protected]

Definition at line 26 of file HepRndmEngine.h.

template<class TYPE >
std::vector<long> HepRndm::Engine< TYPE >::m_seeds [mutable, protected]

Definition at line 24 of file HepRndmEngine.h.

template<class TYPE >
bool HepRndm::Engine< TYPE >::m_setSingleton [protected]

Definition at line 27 of file HepRndmEngine.h.

template<class TYPE >
bool HepRndm::Engine< TYPE >::m_useTable [protected]

Definition at line 27 of file HepRndmEngine.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Jan 30 2012 13:53:35 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004