47 #ifdef G4MULTITHREADED
59 theProjectileFragmentation(ptr),
60 pA(0),pZ(0), tA(0),tZ(0),spectatorA(0),spectatorZ(0),
61 projectile3dNucleus(0),target3dNucleus(0)
73 #ifdef G4MULTITHREADED
78 #ifdef G4MULTITHREADED
93 outFile <<
"G4Binary Light Ion Cascade is an intra-nuclear cascade model\n"
94 <<
"using G4BinaryCasacde to model the interaction of a light\n"
95 <<
"nucleus with a nucleus.\n"
96 <<
"The lighter of the two nuclei is treated like a set of projectiles\n"
97 <<
"which are transported simultanously through the heavier nucleus.\n";
109 if(std::getenv(
"BLICDEBUG") )
G4cerr <<
" ######### Binary Light Ion Reaction starts ######### " <<
G4endl;
159 G4cerr <<
"G4BinaryLightIonReaction no final state for: " <<
G4endl;
165 G4cerr <<
" Target nucleus (A,Z)=("
166 << (swapped?
pA:
tA) <<
","
168 G4cerr <<
" if frequent, please submit above information as bug report"
200 std::vector<G4ReactionProduct *>::iterator iter;
222 G4cout <<
"Warning - G4BinaryLightIonReaction E/P correction for cascaders failed" <<
G4endl;
225 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
230 if (++loopcount > 10 )
232 if ( momentum.
vect().
mag() - momentum.
e()> 10*
keV )
234 G4cerr <<
"G4BinaryLightIonReaction.cc: Cannot correct 4-momentum of cascade particles" <<
G4endl;
246 if ( momentum.
vect().
mag() - momentum.
e()< 10*
keV )
252 for (iter=spectators->begin();iter!=spectators->end();iter++)
257 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
263 G4cout <<
"G4BinaryLightIonReaction.cc: mom check: " << momentum
264 <<
" 3.mag "<< momentum.
vect().
mag() << G4endl
265 <<
" .. pInitialState/pFinalState/spectators " <<
pInitialState <<
" "
268 G4cout <<
"G4BinaryLightIonReaction invalid final state for: " <<
G4endl;
276 G4cout <<
" if frequent, please submit above information as bug report"
278 #ifdef debug_G4BinaryLightIonReaction
280 ed <<
"G4BinaryLightIonreaction: Terminate for above error" <<
G4endl;
306 G4ReactionProductVector::iterator iter;
307 #ifdef debug_BLIR_result
312 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
314 if((*iter)->GetNewlyAdded())
318 (*iter)->GetTotalEnergy(),
319 (*iter)->GetMomentum() );
321 #ifdef debug_BLIR_result
326 tmp*=toBreit.inverse();
327 tmp.setVect(-tmp.vect());
334 aNew.
SetTime(timePrimary + time);
346 #ifdef debug_BLIR_result
361 if(std::getenv(
"BLICDEBUG") )
G4cerr <<
" ######### Binary Light Ion Reaction number ends ######### " <<
G4endl;
373 const int nAttemptScale = 2500;
374 const double ErrLimit = 1.E-6;
379 G4double TotalCollisionMass = TotalCollisionMom.
m();
382 for(i = 0; i < Output->size(); i++)
384 SumMom +=
G4LorentzVector((*Output)[i]->GetMomentum(),(*Output)[i]->GetTotalEnergy());
385 SumMass += (*Output)[i]->GetDefinition()->GetPDGMass();
389 if (SumMass > TotalCollisionMass)
return FALSE;
390 SumMass = SumMom.
m2();
391 if (SumMass < 0)
return FALSE;
392 SumMass = std::sqrt(SumMass);
398 for(i = 0; i < Output->size(); i++)
402 (*Output)[i]->SetMomentum(mom.
vect());
403 (*Output)[i]->SetTotalEnergy(mom.
e());
413 for(cAttempt = 0; cAttempt < nAttemptScale; cAttempt++)
416 for(i = 0; i < Output->size(); i++)
420 G4double E = std::sqrt(HadronMom.
vect().
mag2() +
sqr((*Output)[i]->GetDefinition()->GetPDGMass()));
422 (*Output)[i]->SetMomentum(HadronMom.
vect());
423 (*Output)[i]->SetTotalEnergy(HadronMom.
e());
427 Scale = TotalCollisionMass/Sum - 1;
430 || OldScale ==
Scale)
446 G4cout <<
"G4G4BinaryLightIonReaction::EnergyAndMomentumCorrector - Warning"<<
G4endl;
447 G4cout <<
" Scale not unity at end of iteration loop: "<<TotalCollisionMass<<
" "<<Sum<<
" "<<Scale<<
G4endl;
448 G4cout <<
" Increase number of attempts or increase ERRLIMIT"<<
G4endl;
454 for(i = 0; i < Output->size(); i++)
458 (*Output)[i]->SetMomentum(mom.
vect());
459 (*Output)[i]->SetTotalEnergy(mom.
e());
485 if (m2Compound <
sqr(mFused) ) {
507 for(
size_t count = 0; count<cascaders->size(); count++)
509 cascaders->operator[](count)->SetNewlyAdded(
true);
543 G4LorentzVector tmpV(0,0,0,0);
544 #ifdef debug_BLIR_finalstate
545 G4LorentzVector pinitial;
547 G4LorentzVector nucleonMom(1./
pA*mom);
558 nucleonPosition +=
pos;
565 initalState->push_back(it1);
566 #ifdef debug_BLIR_finalstate
572 #ifdef debug_BLIR_finalstate
573 if( result && result->size()>0)
575 G4LorentzVector presult;
576 G4ReactionProductVector::iterator iter;
578 for (iter=result->begin(); iter !=result->end(); ++iter)
580 presult +=
G4LorentzVector((*iter)->GetMomentum(),(*iter)->GetTotalEnergy());
584 <<
" final " << presult
589 if( result && result->size()==0)
603 }
while (! result && tryCount< 150);
611 G4double theStatisticalExEnergy = 0;
621 G4double localFermiEnergy = std::sqrt(nucMass*nucMass + localPfermi*localPfermi) - nucMass;
623 theStatisticalExEnergy += deltaE;
626 return theStatisticalExEnergy;
635 for(i=0; i<result->size(); i++)
637 if( (*result)[i]->GetNewlyAdded() )
640 cascaders->push_back((*result)[i]);
644 pspectators +=
G4LorentzVector( (*result)[i]->GetMomentum(), (*result)[i]->GetTotalEnergy() );
645 spectators->push_back((*result)[i]);
695 G4ReactionProductVector::iterator ispectator;
696 for (ispectator=spectators->begin();ispectator!=spectators->end();ispectator++)
703 G4ReactionProductVector::iterator ispectator;
704 for (ispectator=spectators->begin();ispectator!=spectators->end();ispectator++)
706 (*ispectator)->SetNewlyAdded(
true);
707 cascaders->push_back(*ispectator);
720 G4ReactionProductVector::iterator ii;
723 for(ii=proFrag->begin(); ii!=proFrag->end(); ii++)
725 (*ii)->SetNewlyAdded(
true);
727 tmp *= boost_fragments;
728 (*ii)->SetMomentum(tmp.vect());
729 (*ii)->SetTotalEnergy(tmp.e());
746 G4cout <<
"G4BinaryLightIonReaction E/P correction for nucleus failed, will try to correct overall" <<
G4endl;
752 for(ii=proFrag->begin(); ii!=proFrag->end(); ii++)
754 cascaders->push_back(*ii);
759 if ( ! EnergyIsCorrect )
765 G4cout <<
"G4BinaryLightIonReaction E/P corrections failed" <<
G4endl;