00001 #include <iostream>
00002 #include "McTruth/McParticle.h"
00003
00004 namespace Event {
00005
00007 McParticle::StdHepId McParticle::particleProperty() const
00008 {
00009 return m_particleID;
00010 }
00011
00013 bool McParticle::primaryParticle() const
00014 {
00015 return (m_statusFlags & PRIMARY)==PRIMARY;
00016 }
00017
00019 bool McParticle::leafParticle() const
00020 {
00021 return (m_statusFlags & LEAF)==LEAF;
00022 }
00023
00025 bool McParticle::decayFromGenerator() const
00026 {
00027 return (m_statusFlags & DECAYED)==DECAYED;
00028 }
00029
00031 bool McParticle::decayInFlight() const
00032 {
00033 return (m_statusFlags & DECAYFLT)==DECAYFLT;
00034 }
00035
00036 void McParticle::init( McParticle* mother,
00037 StdHepId id,
00038 unsigned int flags,
00039 const HepLorentzVector& initialMomentum,
00040 const HepLorentzVector& finalMomentum,
00041 const HepLorentzVector& initialPosition,
00042 const HepLorentzVector& finalPosition,
00043 const std::string process)
00044 {
00045 initialize(mother, id, flags, initialMomentum, initialPosition,process);
00046
00047 finalize(finalPosition);
00048 }
00049
00050 void McParticle::initialize(
00051 StdHepId id,
00052 unsigned int flags,
00053 const HepLorentzVector& initialMomentum,
00054 const HepLorentzVector& initialPosition, const std::string process)
00055 {
00056 m_particleID = id;
00057 m_statusFlags = flags;
00058 m_initialFourMomentum = initialMomentum;
00059 m_initialPosition = initialPosition;
00060 m_process = process;
00061 }
00062
00063 void McParticle::initialize( McParticle* mother,
00064 StdHepId id,
00065 unsigned int flags,
00066 const HepLorentzVector& initialMomentum,
00067 const HepLorentzVector& initialPosition, const std::string process)
00068 {
00069 m_mother = mother;
00070 m_particleID = id;
00071 m_statusFlags = flags;
00072 m_initialFourMomentum = initialMomentum;
00073 m_initialPosition = initialPosition;
00074 m_process = process;
00075 if( mother != this) mother->m_daughters.push_back(this);
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085 void McParticle::finalize(const HepLorentzVector& finalPosition)
00086 {
00087 m_finalPosition = finalPosition;
00088 }
00089
00090 void McParticle::setMother(const SmartRef<McParticle> m)
00091 {
00092 m_mother = m;
00093 }
00094
00095 const HepLorentzVector& McParticle::initialPosition()const
00096 {
00097 return m_initialPosition;
00098 }
00099 const HepLorentzVector& McParticle::finalPosition()const
00100 {
00101 return m_finalPosition;
00102 }
00103 const HepLorentzVector& McParticle::initialFourMomentum()const
00104 {
00105 return m_initialFourMomentum;
00106 }
00107
00108
00109
00110
00111
00112 unsigned int McParticle::statusFlags()const{
00113 return m_statusFlags;
00114 }
00115
00117 const McParticle& McParticle::mother()const
00118 {
00119 return *m_mother;
00120 }
00121
00123 void McParticle::removeDaughter(const SmartRef<McParticle> mcPart)
00124 {
00125 SmartRefVector<Event::McParticle>::iterator daughtIter;
00126 for(daughtIter = m_daughters.begin();daughtIter != m_daughters.end();daughtIter++)
00127 {
00128 if (mcPart == *daughtIter)
00129 {
00130 m_daughters.erase(daughtIter);
00131 break;
00132 }
00133 }
00134 return;
00135 }
00136
00137 }