#include <G4CollisionManager.hh>
Public Member Functions | |
G4CollisionManager () | |
~G4CollisionManager () | |
G4int | Entries () |
void | AddCollision (G4double time, G4KineticTrack *proj, G4KineticTrack *target=NULL) |
void | AddCollision (G4CollisionInitialState *collision) |
void | RemoveCollision (G4CollisionInitialState *collision) |
void | RemoveTracksCollisions (G4KineticTrackVector *ktv) |
void | ClearAndDestroy () |
G4CollisionInitialState * | GetNextCollision () |
void | Print () |
Definition at line 36 of file G4CollisionManager.hh.
G4CollisionManager::G4CollisionManager | ( | ) |
Definition at line 35 of file G4CollisionManager.cc.
00036 { 00037 theCollisionList = new G4ListOfCollisions; 00038 }
G4CollisionManager::~G4CollisionManager | ( | ) |
Definition at line 41 of file G4CollisionManager.cc.
References ClearAndDestroy().
00042 { 00043 ClearAndDestroy(); 00044 delete theCollisionList; 00045 }
void G4CollisionManager::AddCollision | ( | G4CollisionInitialState * | collision | ) | [inline] |
void G4CollisionManager::AddCollision | ( | G4double | time, | |
G4KineticTrack * | proj, | |||
G4KineticTrack * | target = NULL | |||
) |
Definition at line 48 of file G4CollisionManager.cc.
References DBL_MAX, G4cerr, G4endl, G4KineticTrack::Get4Momentum(), G4KineticTrack::GetDefinition(), and G4ParticleDefinition::GetParticleName().
00051 { 00052 if ( time < DBL_MAX ) 00053 { 00054 G4CollisionInitialState * 00055 collision = new G4CollisionInitialState(time, proj, target); 00056 theCollisionList->push_back(collision); 00057 } else { 00058 G4cerr << "G4Scatterer invalid TimeTo Interaction : " << time; 00059 G4cerr <<" projectile "<<proj->Get4Momentum()<<" " 00060 <<proj->GetDefinition()->GetParticleName()<<G4endl; 00061 if (target) G4cerr <<" target " 00062 <<target->Get4Momentum()<<" " 00063 <<target->GetDefinition()->GetParticleName()<<G4endl; 00064 G4cerr <<"G4Scatterer error message end"<< G4endl; 00065 throw G4HadronicException(__FILE__, __LINE__, "G4Scatterer::AddCollision()"); 00066 } 00067 }
void G4CollisionManager::ClearAndDestroy | ( | ) |
Definition at line 131 of file G4CollisionManager.cc.
Referenced by G4BinaryCascade::ApplyYourself(), G4BinaryCascade::Propagate(), and ~G4CollisionManager().
00132 { 00133 std::vector<G4CollisionInitialState *>::iterator i; 00134 for(i = theCollisionList->begin(); i != theCollisionList->end(); ++i) 00135 delete *i; 00136 theCollisionList->clear(); 00137 }
G4int G4CollisionManager::Entries | ( | ) | [inline] |
G4CollisionInitialState * G4CollisionManager::GetNextCollision | ( | ) |
Definition at line 140 of file G4CollisionManager.cc.
References DBL_MAX, G4cerr, and G4endl.
Referenced by G4BinaryCascade::Propagate().
00141 { 00142 G4CollisionInitialState * theNext=0; 00143 G4double nextTime = DBL_MAX; 00144 std::vector<G4CollisionInitialState *>::iterator i; 00145 for(i = theCollisionList->begin(); i != theCollisionList->end(); ++i) 00146 { 00147 if(nextTime > (*i)->GetCollisionTime()) 00148 { 00149 nextTime = (*i)->GetCollisionTime(); 00150 theNext = *i; 00151 } 00152 } 00153 #ifdef debug_G4CollisionManager 00154 if(theNext == 0 && theCollisionList->size()!=0) 00155 { 00156 G4double debugTime = DBL_MAX; 00157 G4cerr <<"G4CollisionManager::GetNextCollision - Fatal"<<G4endl; 00158 G4cerr <<" number of collisions left "<<theCollisionList->size()<<G4endl; 00159 for(i = theCollisionList->begin(); i != theCollisionList->end(); ++i) 00160 { 00161 G4cerr <<" Time to collision "<<(*i)->GetCollisionTime()<<" "<<G4endl; 00162 G4cerr <<" projectile "<<(*i)->GetPrimary()->Get4Momentum()<<" " 00163 <<(*i)->GetPrimary()->GetDefinition()->GetParticleName()<<G4endl; 00164 if ((*i)->GetTarget()) G4cerr <<" target "<<(*i)->GetTarget()->Get4Momentum()<<" " 00165 <<(*i)->GetTarget()->GetDefinition()->GetParticleName()<<G4endl; 00166 } 00167 G4cerr <<"G4CollisionManager::GetNextCollision - End of message"<<G4endl; 00168 } 00169 #endif 00170 00171 return theNext; 00172 }
void G4CollisionManager::Print | ( | ) |
Definition at line 175 of file G4CollisionManager.cc.
References G4cout, G4endl, G4CollisionInitialState::GetCollisionTime(), G4KineticTrack::GetDefinition(), G4CollisionInitialState::GetGenerator(), G4ParticleDefinition::GetPDGEncoding(), G4CollisionInitialState::GetPrimary(), and G4CollisionInitialState::GetTarget().
00176 { 00177 std::vector<G4CollisionInitialState *>::iterator i; 00178 00179 G4cout << "CollisionManager: " << theCollisionList->size() 00180 << " entries at " << theCollisionList << G4endl; 00181 G4CollisionInitialState * collision; 00182 for(i = theCollisionList->begin(); i != theCollisionList->end(); ++i) 00183 { 00184 collision = *i; 00185 G4int tgtPdg=collision->GetTarget() ? 00186 collision->GetTarget()->GetDefinition()->GetPDGEncoding() : 0; 00187 G4cout << " collision " << collision << " time: " 00188 << collision->GetCollisionTime()/second << " proj: " 00189 << collision->GetPrimary() << "/pdg=" 00190 << collision->GetPrimary()->GetDefinition()->GetPDGEncoding() 00191 << " trgt: " 00192 << collision->GetTarget() << "/pdg=" 00193 << tgtPdg 00194 << " Collision type: "<< typeid(*collision->GetGenerator()).name() 00195 << G4endl; 00196 } 00197 }
void G4CollisionManager::RemoveCollision | ( | G4CollisionInitialState * | collision | ) |
Definition at line 70 of file G4CollisionManager.cc.
Referenced by G4BinaryCascade::Propagate().
00071 { 00072 theCollisionList->erase(std::find(theCollisionList->begin(), 00073 theCollisionList->end(), 00074 collision)); 00075 delete collision; 00076 collision = NULL; // prevent future use of the pointer 00077 }
void G4CollisionManager::RemoveTracksCollisions | ( | G4KineticTrackVector * | ktv | ) |
Definition at line 80 of file G4CollisionManager.cc.
References G4CollisionInitialState::GetPrimary(), G4CollisionInitialState::GetTarget(), and G4CollisionInitialState::GetTargetCollection().
00081 { 00082 if(toBeCaned == NULL) 00083 return; 00084 if(toBeCaned->empty()) 00085 return; 00086 00087 G4CollisionInitialState * collision; 00088 std::vector<G4CollisionInitialState *>::iterator collIter, collIter2; 00089 std::vector<G4KineticTrack *>::iterator trackIter; 00090 G4ListOfCollisions toRemove; 00091 00092 for(collIter = theCollisionList->begin(); 00093 collIter != theCollisionList->end(); collIter++) 00094 { 00095 collision = *collIter; 00096 G4KineticTrackVector & targets = collision->GetTargetCollection(); 00097 G4bool getNextCollision = false; 00098 for(trackIter = toBeCaned->begin(); trackIter != toBeCaned->end(); ++trackIter) 00099 { 00100 if((collision->GetTarget() == *trackIter) || 00101 (collision->GetPrimary() == *trackIter)) 00102 { // cannot remove the collision from the list inside the loop. Save and do it later 00103 toRemove.push_back(collision); 00104 break; // exit from the "trackIter" loop 00105 } 00106 for(size_t tcount=0; tcount<targets.size(); tcount++) 00107 { 00108 if(targets[tcount] == *trackIter) 00109 { 00110 toRemove.push_back(collision); 00111 getNextCollision = true; 00112 break; 00113 } 00114 } 00115 if(getNextCollision) break; 00116 } 00117 } 00118 00119 // now remove the collisions 00120 for(collIter = toRemove.begin(); collIter != toRemove.end(); ++collIter) 00121 { 00122 collision = *collIter; 00123 collIter2 = std::find(theCollisionList->begin(), 00124 theCollisionList->end(), collision); 00125 theCollisionList->erase(collIter2); // remove from list... 00126 delete collision; // ...and delete the collision 00127 } 00128 }