00001 #include "FastShowerUtils/RTestParameterGenerator.h"
00002
00003 #include <cmath>
00004 namespace FastShower{
00005
00006 RTestParameterGenerator::RTestParameterGenerator(int nEvents):
00007 m_nEvents(nEvents), m_curEvnt(nEvents), m_nParticles(0){
00008
00009 cout<<"RTestParameterGenerator begin"<<endl;
00010
00011 double delEnergy = 0.0;
00012 double energy = 0.0;
00013
00014 while(energy < 120.0){
00015 energy += delEnergy;
00016 m_energies.push_back(energy);
00017 ++delEnergy;
00018 }
00019 m_enIter = m_energies.begin();
00020
00021 m_ids.push_back(11);
00022 m_ids.push_back(22);
00023 m_ids.push_back(211);
00024 m_pidIter = m_ids.begin();
00025
00026 double eta;
00027 double cellEtaWidth = 3.2/32;
00028 double delEta = cellEtaWidth/10;
00029 eta = 0.200;
00030 while(eta<(0.200+cellEtaWidth+0.0005)){
00031 m_etas.push_back(eta);
00032 eta += delEta;
00033 }
00034 eta = 1.900;
00035 while(eta<(1.900+cellEtaWidth+0.0005)){
00036 m_etas.push_back(eta);
00037 eta += delEta;
00038 }
00039 m_etaIter = m_etas.begin();
00040
00041 double cellPhiWidth = M_PI/32;
00042 double delPhi = cellPhiWidth/10;
00043 double phi = 0.0;
00044 while(phi<(cellPhiWidth+0.0005)){
00045 m_phis.push_back(phi);
00046 phi += delPhi;
00047 }
00048 m_phiIter = m_phis.begin();
00049
00050
00051 std::ostream_iterator<double> dOut(cout, "\n");
00052 std::ostream_iterator<int> iOut(cout, "\n");
00053 std::ostream_iterator<double> eOut(cout, "\n");
00054 std::ostream_iterator<double> pOut(cout, "\n");
00055
00056 cout<<"RTestParameterGenerator vectors:"<<endl;
00057
00058 cout<<"Energies"<<endl;
00059 std::copy(m_energies.begin(), m_energies.end(), dOut);
00060
00061 cout<<"Ids"<<endl;
00062 std::copy(m_ids.begin(), m_ids.end(), iOut);
00063
00064 cout<<"Etas"<<endl;
00065 std::copy(m_etas.begin(), m_etas.end(), eOut);
00066
00067 cout<<"Phis"<<endl;
00068 std::copy(m_phis.begin(), m_phis.end(), pOut);
00069
00070 cout<<"RTestParameterGenerator Constructor end"<<endl;
00071 }
00072 ParticleInfo* RTestParameterGenerator::next(){
00073 if(m_curEvnt == 0){
00074 m_curEvnt = m_nEvents;
00075 m_nParticles = 0;
00076 return 0;
00077 }
00078
00079 ParticleInfo* p = new ParticleInfo(*m_phiIter, *m_etaIter, *m_enIter, *m_pidIter);
00080
00081 if(++m_enIter == m_energies.end()){
00082 m_enIter = m_energies.begin();
00083 ++m_etaIter;
00084 if(m_etaIter == m_etas.end()){
00085 m_etaIter = m_etas.begin();
00086 ++m_phiIter;
00087 if(m_phiIter == m_phis.end()){
00088 m_phiIter = m_phis.begin();
00089 ++m_pidIter;
00090 if(m_pidIter == m_ids.end()){
00091 m_pidIter = m_ids.begin();
00092 --m_curEvnt;
00093 }
00094 }
00095 }
00096 }
00097
00098 ++m_nParticles;
00099
00100
00101 return p;
00102 }
00103 void RTestParameterGenerator::report(){
00104 cout<<m_nParticles<<" Generated in "<<m_nEvents<<" Events"<<endl;
00105 }
00106
00107 }
00108
00109
00110
00111
00112