![]() |
![]() |
#include <SimMuon/RPCDigitizer/src/RPCSimTriv.h>
Public Member Functions | |
RPCSimTriv (const edm::ParameterSet &config) | |
void | simulate (const RPCRoll *roll, const edm::PSimHitContainer &rpcHits) |
void | simulateNoise (const RPCRoll *) |
~RPCSimTriv () | |
Private Member Functions | |
void | init () |
Private Attributes | |
RPCSynchronizer * | _rpcSync |
CLHEP::RandFlat * | flatDistribution |
double | gate |
int | N_hits |
int | nbxing |
CLHEP::RandPoissonQ * | poissonDistribution_ |
double | rate |
CLHEP::HepRandomEngine * | rndEngine |
Definition at line 21 of file RPCSimTriv.h.
RPCSimTriv::RPCSimTriv | ( | const edm::ParameterSet & | config | ) |
Definition at line 24 of file RPCSimTriv.cc.
References _rpcSync, Exception, gate, edm::ParameterSet::getParameter(), nbxing, rate, and rndEngine.
00024 : RPCSim(config){ 00025 00026 rate=config.getParameter<double>("Rate"); 00027 nbxing=config.getParameter<int>("Nbxing"); 00028 gate=config.getParameter<double>("Gate"); 00029 00030 edm::Service<edm::RandomNumberGenerator> rng; 00031 if ( ! rng.isAvailable()) { 00032 throw cms::Exception("Configuration") 00033 << "RPCDigitizer requires the RandomNumberGeneratorService\n" 00034 "which is not present in the configuration file. You must add the service\n" 00035 "in the configuration file or remove the modules that require it."; 00036 } 00037 _rpcSync = new RPCSynchronizer(config); 00038 00039 rndEngine = &(rng->getEngine()); 00040 }
RPCSimTriv::~RPCSimTriv | ( | ) |
void RPCSimTriv::simulate | ( | const RPCRoll * | roll, | |
const edm::PSimHitContainer & | rpcHits | |||
) | [virtual] |
Implements RPCSim.
Definition at line 45 of file RPCSimTriv.cc.
References _rpcSync, edm::DetSet< T >::clear(), RPCSim::getRPCSimSetUp(), RPCSynchronizer::getSimHitBx(), RPCRoll::id(), DetId::rawId(), RPCSynchronizer::setRPCSimSetUp(), RPCRoll::specs(), RPCSim::strips, RPCSim::theDetectorHitMap, RPCSim::theRpcDigiSimLinks, and RPCRollSpecs::topology().
00047 { 00048 00049 _rpcSync->setRPCSimSetUp(getRPCSimSetUp()); 00050 theRpcDigiSimLinks.clear(); 00051 theDetectorHitMap.clear(); 00052 theRpcDigiSimLinks = RPCDigiSimLinks(roll->id().rawId()); 00053 00054 const Topology& topology=roll->specs()->topology(); 00055 for (edm::PSimHitContainer::const_iterator _hit = rpcHits.begin(); 00056 _hit != rpcHits.end(); ++_hit){ 00057 00058 int type = _hit->particleType(); 00059 if (type == 13 || type == -13){ 00060 // Here I hould check if the RPC are up side down; 00061 const LocalPoint& entr=_hit->entryPoint(); 00062 int time_hit = _rpcSync->getSimHitBx(&(*_hit)); 00063 std::pair<int, int> digi(topology.channel(entr)+1, 00064 time_hit); 00065 00066 theDetectorHitMap.insert(DetectorHitMap::value_type(digi,&(*_hit))); 00067 strips.insert(digi); 00068 } 00069 } 00070 }
Implements RPCSim.
Definition at line 73 of file RPCSimTriv.cc.
References flatDistribution, gate, i, RPCRoll::id(), TrapezoidalStripTopology::localPosition(), RectangularStripTopology::localPosition(), N_hits, nbxing, RPCRoll::nstrips(), poissonDistribution_, rate, RPCDetId::region(), rndEngine, strip(), RectangularStripTopology::stripLength(), TrapezoidalStripTopology::stripLength(), RPCSim::strips, RPCRoll::topology(), and x.
00074 { 00075 00076 RPCDetId rpcId = roll->id(); 00077 int nstrips = roll->nstrips(); 00078 double area = 0.0; 00079 00080 if ( rpcId.region() == 0 ) 00081 { 00082 const RectangularStripTopology* top_ = dynamic_cast<const 00083 RectangularStripTopology*>(&(roll->topology())); 00084 float xmin = (top_->localPosition(0.)).x(); 00085 float xmax = (top_->localPosition((float)roll->nstrips())).x(); 00086 float striplength = (top_->stripLength()); 00087 area = striplength*(xmax-xmin); 00088 } 00089 else 00090 { 00091 const TrapezoidalStripTopology* top_=dynamic_cast<const TrapezoidalStripTopology*>(&(roll->topology())); 00092 float xmin = (top_->localPosition(0.)).x(); 00093 float xmax = (top_->localPosition((float)roll->nstrips())).x(); 00094 float striplength = (top_->stripLength()); 00095 area = striplength*(xmax-xmin); 00096 } 00097 00098 double ave = rate*nbxing*gate*area*1.0e-9; 00099 poissonDistribution_ = new CLHEP::RandPoissonQ(rndEngine, ave); 00100 N_hits = poissonDistribution_->fire(); 00101 00102 for (int i = 0; i < N_hits; i++ ){ 00103 00104 flatDistribution = new CLHEP::RandFlat(rndEngine, 1, nstrips); 00105 int strip = static_cast<int>(flatDistribution->fire()); 00106 int time_hit; 00107 00108 flatDistribution = new CLHEP::RandFlat(rndEngine, (nbxing*gate)/gate); 00109 time_hit = (static_cast<int>(flatDistribution->fire())) - nbxing/2; 00110 00111 std::pair<int, int> digi(strip,time_hit); 00112 strips.insert(digi); 00113 } 00114 00115 }
RPCSynchronizer* RPCSimTriv::_rpcSync [private] |
CLHEP::RandFlat* RPCSimTriv::flatDistribution [private] |
double RPCSimTriv::gate [private] |
int RPCSimTriv::N_hits [private] |
int RPCSimTriv::nbxing [private] |
CLHEP::RandPoissonQ* RPCSimTriv::poissonDistribution_ [private] |
double RPCSimTriv::rate [private] |
CLHEP::HepRandomEngine* RPCSimTriv::rndEngine [private] |