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