1235 #ifdef debug_BIC_ApplyCollision 1236 G4cerr <<
"G4BinaryCascade::ApplyCollision start"<<
G4endl;
1242 G4bool haveTarget=target_collection.size()>0;
1245 #ifdef debug_G4BinaryCascade 1246 G4cout <<
"G4BinaryCasacde::ApplyCollision(): StateError " << primary <<
G4endl;
1248 PrintKTVector(&target_collection,std::string(
"... targets"));
1268 G4int initialBaryon(0);
1269 G4int initialCharge(0);
1283 #ifdef debug_BIC_ApplyCollision 1290 G4bool lateParticleCollision= (!haveTarget) && products && products->size() == 1;
1291 G4bool decayCollision= (!haveTarget) && products && products->size() > 1;
1295 #ifdef debug_G4BinaryCascade 1296 G4int lateBaryon(0), lateCharge(0);
1299 if ( lateParticleCollision )
1303 #ifdef debug_G4BinaryCascade 1304 lateBaryon = initialBaryon;
1305 lateCharge = initialCharge;
1307 initialBaryon=initialCharge=0;
1314 if (!lateParticleCollision)
1318 #ifdef debug_BIC_ApplyCollision 1319 if (products)
G4cout <<
" ======Failed Pauli =====" <<
G4endl;
1320 G4cerr <<
"G4BinaryCascade::ApplyCollision blocked"<<
G4endl;
1334 #ifdef debug_BIC_ApplyCollision 1346 G4int finalBaryon(0);
1347 G4int finalCharge(0);
1349 for(std::vector<G4KineticTrack *>::iterator i =products->begin(); i != products->end(); i++)
1351 if ( ! lateParticleCollision )
1353 (*i)->SetState(primary->
GetState());
1355 finalBaryon+=(*i)->GetDefinition()->GetBaryonNumber();
1356 finalCharge+=
G4lrint((*i)->GetDefinition()->GetPDGCharge()/
eplus);
1360 tin < 0 && tout > 0 )
1363 G4cout <<
"tin tout: " << tin <<
" " << tout <<
G4endl;
1368 if (((
G4RKPropagation*)thePropagator)->GetSphereIntersectionTimes((*i),tin,tout))
1375 else if ( tout > 0 )
1378 finalBaryon+=(*i)->GetDefinition()->GetBaryonNumber();
1379 finalCharge+=
G4lrint((*i)->GetDefinition()->GetPDGCharge()/
eplus);
1384 toFinalState.push_back((*i));
1390 toFinalState.push_back((*i));
1395 if(!toFinalState.empty())
1398 toFinalState.begin(),toFinalState.end());
1399 std::vector<G4KineticTrack *>::iterator iter1, iter2;
1400 for(iter1 = toFinalState.begin(); iter1 != toFinalState.end();
1403 iter2 = std::find(products->begin(), products->end(),
1405 if ( iter2 != products->end() ) products->erase(iter2);
1411 currentA += finalBaryon-initialBaryon;
1412 currentZ += finalCharge-initialCharge;
1416 oldSecondaries.push_back(primary);
1419 #ifdef debug_G4BinaryCascade 1420 if ( (finalBaryon-initialBaryon-lateBaryon) != 0 || (finalCharge-initialCharge-lateCharge) != 0 )
1422 G4cout <<
"G4BinaryCascade: Error in Balancing: " <<
G4endl;
1423 G4cout <<
"initial/final baryon number, initial/final Charge " 1424 << initialBaryon <<
" "<< finalBaryon <<
" " 1425 << initialCharge <<
" "<< finalCharge <<
" " 1427 <<
", with number of products: "<< products->size() <<
G4endl;
1428 G4cout << G4endl<<
"Initial condition are these:"<<
G4endl;
1441 for(
size_t ii=0; ii< oldTarget.size(); ii++)
1443 oldTarget[ii]->Hit();
const G4ParticleDefinition * GetDefinition() const
void FindDecayCollision(G4KineticTrack *)
G4VFieldPropagation * thePropagator
void DebugApplyCollisionFail(G4CollisionInitialState *collision, G4KineticTrackVector *products)
G4KineticTrackVector theFinalState
G4int GetBaryonNumber() const
G4KineticTrack * GetPrimary(void)
void ClearAndDestroy(G4KineticTrackVector *ktv)
const G4LorentzVector & GetTrackingMomentum() const
void RemoveTracksCollisions(G4KineticTrackVector *ktv)
G4KineticTrackVector * GetFinalState()
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
void UpdateTracksAndCollisions(G4KineticTrackVector *oldSecondaries, G4KineticTrackVector *oldTarget, G4KineticTrackVector *newSecondaries)
G4CollisionManager * theCollisionMgr
G4bool CheckPauliPrinciple(G4KineticTrackVector *)
G4int GetTargetBaryonNumber()
void Set4Momentum(const G4LorentzVector &a4Momentum)
G4KineticTrackVector & GetTargetCollection(void)
void PrintKTVector(G4KineticTrackVector *ktv, std::string comment=std::string(""))
G4bool CorrectShortlivedFinalsForFermi(G4KineticTrackVector *products, G4double initial_Efermi)
void DebugApplyCollision(G4CollisionInitialState *collision, G4KineticTrackVector *products)
CascadeState GetState() const
static const double eplus
G4double GetPDGCharge() const
const G4BCAction * GetGenerator()
G4double CorrectShortlivedPrimaryForFermi(G4KineticTrack *primary, G4KineticTrackVector target_collection)
G4GLOB_DLL std::ostream G4cerr
const G4LorentzVector & Get4Momentum() const