]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/Tauola/TauolaHepMCEvent.cxx
ATO-97, ATO-78 - speed-up creation of the AliTPCCalPad objects from TTree
[u/mrichter/AliRoot.git] / TEvtGen / Tauola / TauolaHepMCEvent.cxx
CommitLineData
0ca57c2f 1#include "TauolaHepMCEvent.h"
e1938fed 2#include "TauolaLog.h"
0ca57c2f 3
4using namespace std;
5
6namespace Tauolapp
7{
8
9TauolaHepMCEvent::TauolaHepMCEvent(HepMC::GenEvent * event){
10 m_event=event;
11
12 // Default units
13 m_momentum_unit = "GEV";
14 m_length_unit = "MM";
15
16 if(m_event->momentum_unit() != HepMC::Units::GEV) m_momentum_unit = "MEV";
17 if(m_event->length_unit() != HepMC::Units::MM ) m_length_unit = "CM";
18
19 // If needed - change units used by HepMC to GEV and MM
20 if( m_event->momentum_unit() != HepMC::Units::GEV ||
21 m_event->length_unit() != HepMC::Units::MM )
22 {
23 m_event->use_units(HepMC::Units::GEV,HepMC::Units::MM);
24 }
25}
26
27TauolaHepMCEvent::~TauolaHepMCEvent(){
28
29 while(m_tau_list.size()!=0){
30 TauolaParticle * temp = m_tau_list.back();
31 m_tau_list.pop_back();
32 delete temp;
33 }
34
35}
36
37HepMC::GenEvent * TauolaHepMCEvent::getEvent(){
38 return m_event;
39}
40
41std::vector<TauolaParticle*> TauolaHepMCEvent::findParticles(int pdg_id){
42
43 if(m_tau_list.size()==0){
44
45 HepMC::GenEvent::particle_const_iterator part_itr = m_event->particles_begin();
46 //loop over all particle in the event looking for taus (or other)
47 for( ; part_itr!=m_event->particles_end(); part_itr++){
48 if(abs((*part_itr)->pdg_id())==pdg_id)
49 m_tau_list.push_back(new TauolaHepMCParticle(*part_itr));
50 }
51 }
52 return m_tau_list;
53}
54
55std::vector<TauolaParticle*> TauolaHepMCEvent::findStableParticles(int pdg_id){
56
57 /** HepMC::GenEvent::particle_const_iterator part_itr = m_event->particles_begin();
58 //loop over all particle in the event looking for taus (or other)
59 for( ; part_itr!=m_event->particles_end(); part_itr++){
60 if(fabs((*part_itr)->pdg_id())==pdg_id){
61 if((*part_itr)->end_vertex()){
62 cout << "WARNING: Particle with pdg code " << (*part_itr)->pdg_id()
63 << " has end vertex" <<endl;
64 }
65 else
66 list.push_back(new TauolaHepMCParticle(*part_itr));
67 }
68 }**/
69
70 std::vector<TauolaParticle*> tau_list = findParticles(pdg_id);
71 std::vector<TauolaParticle*> stable_tau_list;
72
73 for(int i=0; i<(int) tau_list.size(); i++){
74
75 if(!tau_list.at(i)->hasDaughters())
76 stable_tau_list.push_back(tau_list.at(i));
77 else
78 {
79 std::vector<TauolaParticle*> t = tau_list.at(i)->getDaughters();
80 //Ignore taus that we won't be decaying anyway
81 if(t.size()==1) continue;
82 if(t.size()==2 && (abs(t[0]->getPdgID())==15 || abs(t[1]->getPdgID())==15) ) continue;
83 Log::Warning()<<"Particle with pdg code "<<tau_list.at(i)->getPdgID()
84 <<" already has daughters" <<endl;
85 }
86 }
87
88 return stable_tau_list;
89
90}
91
92void TauolaHepMCEvent::eventEndgame(){
93
94 //Set output units for the event
95 string momentum("GEV"),length("MM");
96
97 switch(Tauola::momentumUnit)
98 {
99 case Tauola::GEV:
100 momentum = "GEV";
101 break;
102 case Tauola::MEV:
103 momentum = "MEV";
104 break;
105 default:
106 momentum = m_momentum_unit;
107 }
108
109 switch(Tauola::lengthUnit)
110 {
111 case Tauola::MM:
112 length = "MM";
113 break;
114 case Tauola::CM:
115 length = "CM";
116 break;
117 default:
118 length = m_length_unit;
119 }
120
121 m_event->use_units(momentum,length);
122}
123
124} // namespace Tauolapp