00001 #include "AtlfastAlgs/BremEtaBin.h"
00002
00003 namespace Atlfast{
00004
00005 BremEtaBin::BremEtaBin(int randSeed) {
00006 m_randomEngine = new HepJamesRandom(randSeed);
00007 }
00008 BremEtaBin::BremEtaBin(const BremEtaBin& other): m_randomEngine(NULL){
00009 *this = other;
00010 }
00011
00012 BremEtaBin& BremEtaBin::operator=(const BremEtaBin& other) {
00013 if (this != &other) {
00014 if (m_randomEngine) delete m_randomEngine;
00015 m_randomEngine = new HepJamesRandom(*other.m_randomEngine);
00016 map<TestValue, BremRBin*>::const_iterator iter = other.m_rBins.begin();
00017 map<TestValue, BremRBin*>::const_iterator end = other.m_rBins.end();
00018 for (;iter != end; ++iter) {
00019 m_rBins[iter->first] = new BremRBin( *(iter->second) );
00020 }
00021 }
00022 return *this;
00023 }
00024 BremEtaBin::~BremEtaBin() {
00025 map<TestValue, BremRBin*>::iterator iter = m_rBins.begin();
00026 map<TestValue, BremRBin*>::iterator end = m_rBins.end();
00027 for (;iter !=end; ++iter) {
00028 delete iter->second;
00029 }
00030 delete m_randomEngine;
00031 }
00032
00033 void BremEtaBin::addBin(TestValue bremR, BremRBin* bin) {
00034 m_rBins[bremR] = bin;
00035 }
00036
00037 double BremEtaBin::calculatePScale(double random) const {
00038 map<TestValue, BremRBin*>::const_iterator iter = m_rBins.begin();
00039 map<TestValue, BremRBin*>::const_iterator end = m_rBins.end();
00040 for (;iter != end; ++iter) {
00041 if (random < (iter->first).value() ) {
00042 return iter->second->calculatePScale();
00043 }else{
00044 }
00045 }
00046 return m_rBins.rbegin()->second->calculatePScale();
00047 }
00048
00049
00050 const map<TestValue, BremRBin*>* BremEtaBin::bins() const {return &m_rBins;}
00051
00052 MsgStream& operator<<(MsgStream& s, BremEtaBin& bin) {
00053 map<TestValue, BremRBin*>::const_iterator iter = bin.bins()->begin();
00054 map<TestValue, BremRBin*>::const_iterator end = bin.bins()->end();
00055 s << "----------------- New Eta Bin with " << bin.bins()->size() << " R Bins ----------------" << endreq;
00056 int i=1;
00057 for (; iter!=end; ++iter) {
00058 s << "Bremstrahlung Radius " << i << " = " << (iter->first).value() << endreq;
00059 s << *(iter->second) << endreq;
00060 ++i;
00061 }
00062 return s;
00063 }
00064
00065 }
00066
00067
00068
00069
00070
00071
00072