63{
68 G4bool stringsInitted=
false;
71
73#ifdef edebug
74 G4cout<<
"G4QIn::Constr:*Called*,pA="<<pNucleus<<proj4M<<
",tA="<<tNucleus<<targM<<
G4endl;
75#endif
79 G4int pPDG=90000000+pZ*1000+pN;
83 G4int tPDG=90000000+tZ*1000+tN;
88#ifdef edebug
94 G4cout<<
"-EMC-G4QIonIonCollision::Constr: tLS4M="<<totLS4M<<
",tZLS4M="<<totZLS4M<<
G4endl;
95
96#endif
100 G4int ModelMode=SOFT;
104#ifdef debug
106#endif
110#ifdef debug
112#endif
113#ifdef edebug
116 G4cout<<
"-EMC-G4QIonIonCollision::Construct: pNuc4M="<<sumP1<<
", tNuc4M="<<sumT1<<
G4endl;
117#endif
120
123 G4double e_per_projectile = proj4M.e()/pA+targM/tA;
124 G4double vz = pz_per_projectile/e_per_projectile;
125#ifdef debug
126 G4cout<<
"G4QIonIonCollision::Construct: (КщеЯ)Projectile4M="<<proj4M<<
", Vz="<<vz
127 <<
", pA="<<pA<<
", pE="<<e_per_projectile<<
G4endl;
128#endif
129 theCMVelocity.setZ(vz);
134 theALVelocity.setZ(avz);
135#ifdef edebug
138 G4cout<<
"-EMC-G4QIonIonCollision::Construct: Boosted, vCM="<<vz<<
", vAL="<<avz<<
", tN4M="
139 <<sumT2<<
", pN4M="<<sumP2<<
G4endl;
140#endif
142
143
144
147
148#ifdef debug
149 G4cout<<
"G4QIonIonCollision::Construct: theIntSize="<<theInteractions.size()<<
G4endl;
150#endif
153
154
159 while(!theInteractions.size() && ++attCnt < maxAtt)
160 {
161
162
163 G4int nint=theInteractions.size();
164 for(
G4int ni=0; ni < nint; ++ni)
165 {
169 delete curInt;
170 }
171 theInteractions.clear();
172
173 if(attCnt)
174 {
177 }
178 curProjNucleus = theProjNucleus;
179 curTargNucleus = theTargNucleus;
180
181 std::pair<G4double, G4double> theImpactParameter;
183 G4double impactX = theImpactParameter.first;
184 G4double impactY = theImpactParameter.second;
185#ifdef debug
186 G4cout<<
"G4QIonIonCollision::Con:At#="<<attCnt<<
",X="<<impactX<<
",Y="<<impactY<<
G4endl;
187#endif
191#ifdef debu
192 G4cout<<
"G4QIonIonCollision::Constr: Before the WHILE over pNucleons,pA="<<pnA<<
G4endl;
193#endif
195 {
196 ++pnCnt;
204 if (proB>0) prEn-=pNucleus.
GetMass();
205 else if(proB<0) prEn+=mProt;
206#ifdef debug
208 G4cout<<
"G4QIonIonCollision::Construct: estimated energy, prEn="<<prEn<<
G4endl;
209#endif
211
213 G4double pImp=std::sqrt(pImpX*pImpX+pImpY*pImpY);
215 maxEn=eflen*stringTension;
216 maxNuc=static_cast<int>(eflen*tubeDensity+0.5);
217#ifdef debug
218 G4cout<<
"G4QIonIonCollision::Con:pE="<<prEn<<
" < mE="<<maxEn<<
",mN="<<maxNuc<<
G4endl;
219#endif
220 if(prEn < maxEn)
221 {
229 curInteractions.push_back(anInteraction);
236#ifdef debug
237 G4cout<<
"G4QIonIonCollision::Construct: DINR interaction is created"<<
G4endl;
238#endif
239 break;
240 }
241
244#ifdef debu
245 G4cout<<
"G4QIonIonCollision::Constr: Before WHILE over tNucleons, tA="<<tnA<<
G4endl;
246#endif
247 while((tNucleon=curTargNucleus.
GetNextNucleon()) && tnCnt<tnA && totalCuts<maxCuts)
248 {
249 ++tnCnt;
251#ifdef debug
252 G4cout<<
"G4QIonIonCollision::Constr: OuterR="<<outerRadius<<
", mC="<<maxCuts
253 <<
", pA="<<curProjNucleus<<
", tA="<<curTargNucleus<<
G4endl;
254#endif
255
256 G4double s_value = (tNuc4M + pNuc4M).mag2();
258#ifdef debug
259 G4cout<<
"G4QInel::Constr: s="<<s_value<<
", ThreshM="<<
sqr(ThresholdMass)<<
G4endl;
260#endif
261 ModelMode = SOFT;
262 if (s_value < 0.)
263 {
264 G4cerr<<
"*G4QInelast::Constr:s="<<s_value<<
",pN4M="<<pNuc4M<<
",tN4M="<<tNuc4M<<
G4endl;
266 }
267 if (s_value <
sqr(ThresholdMass))
268 {
269#ifdef debug
270 G4cout<<
"G4QIonIonCollision::Constr: ***OnlyDiffraction***, ThM="<<ThresholdMass
271 <<
">sqrt(s)="<<std::sqrt(s_value)<<
" -> only Diffraction is possible"<<
G4endl;
272#endif
273 ModelMode = DIFFRACTIVE;
274 }
278 G4double Distance2=dImpX*dImpX+dImpY*dImpY;
279#ifdef sdebug
280 G4cout<<
"G4QIonIonCollision::Construct: s="<<s_value<<
", D2="<<Distance2<<
G4endl;
281#endif
282
283 if(s_value<=10000.)
284 {
285 G4cout<<
"-Warning-G4QIonIonCollision::Construct: s < .01 GeV^2, p4M="
287 continue;
288 }
289 G4double Probability = theProbability.GetPomInelProbability(s_value, Distance2);
290
291#ifdef sdebug
292 G4cout<<
"G4QIonIonCollision::Construct: Probubility="<<Probability<<
G4endl;
293#endif
295
296#ifdef sdebug
297 G4cout<<
"G4QIonIonCollision::Construct: NLOOP prob="<<Probability<<
", rndm="
298 <<rndNumber<<
", d="<<std::sqrt(Distance2)<<
G4endl;
299#endif
300 if (Probability > rndNumber)
301 {
304#ifdef edebug
305 G4cout<<
"--->EMC-->G4QIonIonCollision::Construct: TargNucleon is filled, 4M/PDG="
307#endif
308
315 if((theProbability.GetPomDiffProbability(s_value,Distance2)/Probability >
316 G4UniformRand() && ModelMode==SOFT ) || ModelMode==DIFFRACTIVE)
317 {
318
324 curInteractions.push_back(anInteraction);
325
326 totalCuts++;
327#ifdef debug
328 G4cout<<
"G4QIonIonCollision::Constr:NLOOP DiffInteract,tC="<<totalCuts<<
G4endl;
329#endif
330 }
331 else
332 {
333
334
337 for(nCut = 0; nCut < nCutMax; nCut++)
338 {
339 running[nCut]= theProbability.GetCutPomProbability(s_value, Distance2, nCut+1);
340 if(nCut) running[nCut] += running[nCut-1];
341 }
343 for(nCut = 0; nCut < nCutMax; nCut++) if(running[nCut] > random) break;
344 delete [] running;
345#ifdef debug
346 G4cout<<
"G4QIonIonCollision::Construct: NLOOP-Soft Chosen nCut="<<nCut<<
G4endl;
347#endif
348
349
350
356 curInteractions.push_back(anInteraction);
357 totalCuts += nCut+1;
358#ifdef debug
359 G4cout<<
"G4QIonIonCollision::Constr:NLOOP SoftInteract,tC="<<totalCuts<<
G4endl;
360 impactUsed=Distance2;
361#endif
362 }
363 }
364 }
365 G4int nCurInt=curInteractions.size();
366 for(
G4int ni=0; ni < nCurInt; ++ni) theInteractions.push_back(curInteractions[ni]);
367 curInteractions.clear();
368 }
369 }
372 theProjNucleus = curProjNucleus;
373 theTargNucleus = curTargNucleus;
376 G4int nInt=theInteractions.size();
377#ifdef debug
378 G4cout<<
"G4QIonIonCollision::Constr: #ofInteractions = "<<nInt<<
", #OfDINR = "
379 <<theInteractions[0]->GetNumberOfDINRCollisions()<<
G4endl;
380#endif
381 if(!nInt || (nInt==1 && theInteractions[0]->GetNumberOfDINRCollisions()==1))
382 {
385 if(nInt)
386 {
387 aTarget=theInteractions[0]->GetTarget();
388 aProjectile=theInteractions[0]->GetProjectile();
389 delete theInteractions[0];
390 theInteractions.clear();
391 }
392 else
393 {
406 }
409 delete aTarget;
410 delete aProjectile;
411
412 Q4M.
boost(theCMVelocity);
413 Q4M=toLab*Q4M;
415 theQuasmons.push_back(stringQuasmon);
418 return;
419 }
420
421
422
423 for(
G4int i=0; i<nInt; i++)
424 {
425 theInteractions[i]->SplitHadrons();
426#ifdef edebug
427 G4QHadron* projH=theInteractions[i]->GetProjectile();
428 G4QHadron* targH=theInteractions[i]->GetTarget();
431 std::list<G4QParton*> projCP=projH->
GetColor();
433 std::list<G4QParton*> targCP=targH->
GetColor();
435 std::list<G4QParton*>::iterator picp = projCP.begin();
436 std::list<G4QParton*>::iterator pecp = projCP.end();
437 std::list<G4QParton*>::iterator piac = projAC.begin();
438 std::list<G4QParton*>::iterator peac = projAC.end();
439 std::list<G4QParton*>::iterator ticp = targCP.begin();
440 std::list<G4QParton*>::iterator tecp = targCP.end();
441 std::list<G4QParton*>::iterator tiac = targAC.begin();
442 std::list<G4QParton*>::iterator teac = targAC.end();
443 for(; picp!=pecp&& piac!=peac&& ticp!=tecp&& tiac!=teac; ++picp,++piac,++ticp,++tiac)
444 {
445 pSP+=(*picp)->Get4Momentum();
446 pSP+=(*piac)->Get4Momentum();
447 tSP+=(*ticp)->Get4Momentum();
448 tSP+=(*tiac)->Get4Momentum();
449 }
450 G4cout<<
"-EMC-G4QIonIonCollision::Construct: Interaction#"<<i<<
",dP4M="
452#endif
453 }
454
455
456
457 G4QInteractionVector::iterator it;
458#ifdef debug
459 G4cout<<
"G4QIonIonCollision::Constr: Creation ofSoftCollisionPartonPair STARTS"<<
G4endl;
460#endif
462 while(rep && theInteractions.size())
463 {
464 for(it = theInteractions.begin(); it != theInteractions.end(); ++it)
465 {
469#ifdef debug
470 G4cout<<
"G4QIonIonCollision::Construct: #0f SoftCollisions ="<<nSoftCollisions<<
G4endl;
471#endif
472 if (nSoftCollisions)
473 {
476 for (
G4int j = 0; j < nSoftCollisions; j++)
477 {
481 thePartonPairs.push_back(aPair);
485 thePartonPairs.push_back(aPair);
486#ifdef debug
487 G4cout<<
"--->G4QIonIonCollision::Constr: SOFT, 2 parton pairs are filled"<<
G4endl;
488#endif
489 }
490 delete *it;
491 it=theInteractions.erase(it);
492 if( it != theInteractions.begin() )
493 {
494 it--;
495 rep=false;
496 }
497 else
498 {
499 rep=true;
500 break;
501 }
502 }
503 else rep=false;
504 }
505 }
506#ifdef debug
507 G4cout<<
"G4QIonIonCollision::Constr: -> Parton pairs for SOFT strings are made"<<
G4endl;
508#endif
509
510
511
512 for(unsigned i = 0; i < theInteractions.size(); i++)
513 {
514
517#ifdef debug
518 G4cout<<
"G4QIonIonCollision::Constr: CreationOfDiffractivePartonPairs, i="<<i<<
G4endl;
519#endif
520
523 if (aParton)
524 {
528 thePartonPairs.push_back(aPartonPair);
529#ifdef debug
530 G4cout<<
"G4QIonIonCollision::Constr: proj Diffractive PartonPair is filled"<<
G4endl;
531#endif
532 }
533
536 if (aParton)
537 {
540 thePartonPairs.push_back(aPartonPair);
541#ifdef debug
542 G4cout<<
"G4QIonIonCollision::Constr: target Diffractive PartonPair's filled"<<
G4endl;
543#endif
544 }
545 }
546#ifdef debug
547 G4cout<<
"G4QIonIonCollision::Construct: DiffractivePartonPairs are created"<<
G4endl;
548#endif
549
550
551
553 theInteractions.clear();
554#ifdef debug
555 G4cout<<
"G4QIonIonCollision::Construct: Temporary objects are cleaned up"<<
G4endl;
556#endif
557
560
561#ifdef debug
562 G4cout<<
">>........>>G4QIonIonCollision::Construct: >>..>> Strings are created "<<
G4endl;
563#endif
566 while(thePartonPairs.size())
567 {
568 aPair = thePartonPairs.back();
569 thePartonPairs.pop_back();
570#ifdef debug
572#endif
574#ifdef debug
576#endif
577 aString->
Boost(theCMVelocity);
578 strings.push_back(aString);
579 stringsInitted=true;
580 delete aPair;
581 }
582#ifdef edebug
584 G4int rChg=totChg-theProjNucleus.
GetZ()-theTargNucleus.
GetZ();
585 G4int rBaN=totBaN-theProjNucleus.
GetA()-theTargNucleus.
GetA();
586 G4int nStrings=strings.size();
587 G4cout<<
"-EMC-G4QIonIonCollision::Constr:#ofString="<<nStrings<<
",tNuc4M="<<sum<<
G4endl;
588 for(
G4int i=0; i<nStrings; i++)
589 {
592 sum+=strI4M;
599 rChg-=sChg;
600 rBaN-=sBaN;
601 G4cout<<
"-EMC-G4QIonIonCollision::Construct: String#"<<i<<
", 4M="<<strI4M<<
", LPDG="
602 <<LPDG<<LQC<<
",RPDG="<<RPDG<<RQC<<
", Ch="<<sChg<<
", BN="<<sBaN<<
G4endl;
603 }
604 G4cout<<
"-EMC-G4QInel::Constr: r4M="<<sum-totZLS4M<<
", rC="<<rChg<<
", rB="<<rBaN<<
G4endl;
605#endif
606 if(!stringsInitted)
607 {
608 G4cerr<<
"*****G4QIonIonCollision::Construct:**** No strings are created *****"<<
G4endl;
610 }
611#ifdef debug
612 G4cout<<
"G4QIonIonCollision::Constr:BeforeRotation, #0fStrings="<<strings.size()<<
G4endl;
613#endif
614
615
616
617 for(unsigned astring=0; astring < strings.size(); astring++)
618 strings[astring]->LorentzRotate(toLab);
621
622#ifdef edebug
624 G4int rCg=totChg-theProjNucleus.
GetZ()-theTargNucleus.
GetZ();
625 G4int rBC=totBaN-theProjNucleus.
GetA()-theTargNucleus.
GetA();
626 G4int nStrs=strings.size();
627 G4cout<<
"-EMCLS-G4QIonIonCollision::Constr:#ofS="<<nStrings<<
",Nuc4M(E=M)="<<sum<<
G4endl;
628 for(
G4int i=0; i<nStrs; i++)
629 {
632 G4int sChg=strings[i]->GetCharge();
633 rCg-=sChg;
634 G4int sBaN=strings[i]->GetBaryonNumber();
635 rBC-=sBaN;
636 G4cout<<
"-EMCLS-G4QInel::Construct:String#"<<i<<
",4M="<<strI4M<<strI4M.
m()<<
",Charge="
637 <<sChg<<
",BaryN="<<sBaN<<
G4endl;
638 }
639 G4cout<<
"-EMCLS-...G4QInel::Constr: r4M="<<
sm-totLS4M<<
", rC="<<rCg<<
",rB="<<rBC<<
G4endl;
640#endif
641
642
643
645
646
647
649 G4QStringVector::iterator ist;
651 while(con && strings.size())
652 {
653 for(ist = strings.begin(); ist < strings.end(); ++ist)
654 {
658 G4QParton* cLeft=(*ist)->GetLeftParton();
659 G4QParton* cRight=(*ist)->GetRightParton();
666 if (cLPDG > 7) aLPDG= cLPDG/100;
667 else if(cLPDG <-7) aLPDG=(-cLPDG)/100;
668 if (cRPDG > 7) aRPDG= cRPDG/100;
669 else if(cRPDG <-7) aRPDG=(-cRPDG)/100;
672 if(aLPDG)
673 {
674 L1=aLPDG/10;
675 L2=aLPDG%10;
676 }
679 if(aRPDG)
680 {
681 R1=aRPDG/10;
682 R2=aRPDG%10;
683 }
685 if(cSM2>0.) cSM=std::sqrt(cSM2);
686#ifdef debug
687 G4cout<<
"G4QIonIonCollision::Construct: Needs Fusion? cLPDG="<<cLPDG<<
",cRPDG="<<cRPDG
688 <<
",cM(cM2 if neg)="<<cSM<<
G4endl;
689#endif
690 if(cSM>0.)
691 {
694 if(cLT==2 && cRT==2)
695 {
696 if(L1!=R1 && L1!=R2 && L2!=R1 && L2!=R2)
697 {
698 single=false;
702 }
703 }
705
706#ifdef debug
707 G4cout<<
"G4QInel::Const:*IsItGood? realM="<<std::sqrt(cSM2)<<
" > GSM="<<miM<<
G4endl;
708#endif
709 if(std::sqrt(cSM2) > miM) bad=false;
710 }
711 if(bad)
712 {
713#ifdef debug
714 G4cout<<
"G4QInel::Const:TryFuse,L1="<<L1<<
",L2="<<L2<<
",R1="<<R1<<
",R2="<<R2<<
G4endl;
715#endif
719 G4QStringVector::iterator sst;
720 G4QStringVector::iterator pst;
725 if(cSM2>0.) minC=false;
726 for(pst = strings.begin(); pst < strings.end(); pst++) if(pst != ist)
727 {
733#ifdef debug
734 G4cout<<
"->G4QIonIonCollision::Construct: sum4M="<<pS4M<<
", M2="<<pSM2<<
G4endl;
735#endif
736
737
738 G4QParton* pLeft=(*pst)->GetLeftParton();
739 G4QParton* pRight=(*pst)->GetRightParton();
746 if (pLPDG > 7) LPDG= pLPDG/100;
747 else if(pLPDG <-7) LPDG=(-pLPDG)/100;
748 if (pRPDG > 7) RPDG= pRPDG/100;
749 else if(pRPDG <-7) RPDG=(-pRPDG)/100;
752 if(LPDG)
753 {
754 pL1=LPDG/10;
755 pL2=LPDG%10;
756 }
759 if(RPDG)
760 {
761 pR1=RPDG/10;
762 pR2=RPDG%10;
763 }
765#ifdef debug
766 G4cout<<
"G4QInel::Construct: Partner/w pLPDG="<<pLPDG<<
", pRPDG="<<pRPDG<<
", pM2="
768#endif
769
772 if (cST==2 && pST==2)
773 {
774 tf=1;
775 af=1;
776 }
777 else if(cST==2 && pST==3)
778 {
779 tf=2;
780 if (pLPDG > 7 &&
781 ( (cLPDG<0 && (-cLPDG==pL1 || -cLPDG==pL2 || -cLPDG==pRPDG) ) ||
782 (cRPDG<0 && (-cRPDG==pL1 || -cRPDG==pL2 || -cRPDG==pRPDG) )
783 )
784 ) af=1;
785 else if(pRPDG > 7 &&
786 ( (cLPDG<0 && (-cLPDG==pR1 || -cLPDG==pR2 || -cLPDG==pLPDG) ) ||
787 (cRPDG<0 && (-cRPDG==pR1 || -cRPDG==pR2 || -cRPDG==pLPDG) )
788 )
789 ) af=2;
790 else if(pLPDG <-7 &&
791 ( (cLPDG>0 && ( cLPDG==pL1 || cLPDG==pL2 || cLPDG==-pRPDG) ) ||
792 (cRPDG>0 && ( cRPDG==pL1 || cRPDG==pL2 || cRPDG==-pRPDG) )
793 )
794 ) af=3;
795 else if(pRPDG <-7 &&
796 ( (cLPDG>0 && ( cLPDG==pR1 || cLPDG==pR2 || cLPDG==-pLPDG) ) ||
797 (cRPDG>0 && ( cRPDG==pR1 || cRPDG==pR2 || cRPDG==-pLPDG) )
798 )
799 ) af=4;
800#ifdef debug
801 else G4cout<<
"G4QIonIonCollision::Constr:2(QaQ+QDiQ/aQaDiQ) Can't fuse"<<
G4endl;
802#endif
803 }
804 else if(cST==3 && pST==2)
805 {
806 tf=3;
807 if (cLPDG > 7 &&
808 ( (pLPDG<0 && (-pLPDG==L1 || -pLPDG==L2) ) ||
809 (pRPDG<0 && (-pRPDG==L1 || -pRPDG==L2) )
810 )
811 ) af=1;
812 else if(cRPDG > 7 &&
813 ( (pLPDG<0 && (-pLPDG==R1 || -pLPDG==R2) ) ||
814 (pRPDG<0 && (-pRPDG==R1 || -pRPDG==R2) )
815 )
816 ) af=2;
817 else if(cLPDG <-7 &&
818 ( (pLPDG>0 && ( pLPDG==L1 || pLPDG==L2) ) ||
819 (pRPDG>0 && ( pRPDG==L1 || pRPDG==L2) )
820 )
821 ) af=3;
822 else if(cRPDG <-7 &&
823 ( (pLPDG>0 && ( pLPDG==R1 || pLPDG==R2) ) ||
824 (pRPDG>0 && ( pRPDG==R1 || pRPDG==R2) )
825 )
826 ) af=4;
827#ifdef debug
828 else G4cout<<
"G4QIonIonCollision::Constr:3(QDiQ/aQaDiQ+QaQ) Can't fuse"<<
G4endl;
829#endif
830 }
831 else if(cST==2 && pST==4)
832 {
833 tf=4;
834 if (pLPDG > 7)
835 {
836 if ( (-cLPDG==pL1 || -cLPDG==pL2) && (cRPDG==pR1 || cRPDG==pR2) ) af=1;
837 else if( (-cRPDG==pL1 || -cRPDG==pL2) && (cLPDG==pR1 || cLPDG==pR2) ) af=2;
838 }
839 else if(pRPDG > 7)
840 {
841 if ( (-cRPDG==pR1 || -cRPDG==pR2) && (cLPDG==pL1 || cLPDG==pL2) ) af=3;
842 else if( (-cLPDG==pR1 || -cLPDG==pR2) && (cRPDG==pL1 || cRPDG==pL2) ) af=4;
843 }
844#ifdef debug
845 else G4cout<<
"-G4QIonIonCollision::Constr: 4 (QaQ+aQDiQDiQ) Can't fuse"<<
G4endl;
846#endif
847 }
848 else if(cST==4 && pST==2)
849 {
850 tf=5;
851 if (cLPDG > 7)
852 {
853 if ( (-pLPDG==L1 || -pLPDG==L2) && (pRPDG==R1 || pRPDG==R2) ) af=1;
854 else if( (-pRPDG==L1 || -pRPDG==L2) && (pLPDG==R1 || pLPDG==R2) ) af=2;
855 }
856 else if(cRPDG > 7)
857 {
858 if ( (-pRPDG==R1 || -pRPDG==R2) && (pLPDG==L1 || pLPDG==L2) ) af=3;
859 else if( (-pLPDG==R1 || -pLPDG==R2) && (pRPDG==L1 || pRPDG==L2) ) af=4;
860 }
861#ifdef debug
862 else G4cout<<
"-G4QIonIonCollision::Constr: 5 (aQDiQDiQ+QaQ) Can't fuse"<<
G4endl;
863#endif
864 }
865 else if(cST==3 && pST==3)
866 {
867 tf=6;
868 if(pLPDG > 7)
869 {
870 if (cLPDG<-7 && (-cRPDG==pL1 || -cRPDG==pL2) && (pRPDG==L1 || pRPDG==L2))
871 af=1;
872 else if(cRPDG<-7 && (-cLPDG==pL1 || -cLPDG==pL2) && (pRPDG==R1 || pRPDG==R2))
873 af=2;
874 }
875 else if(pRPDG > 7)
876 {
877 if (cLPDG<-7 && (-cRPDG==pR1 || -cRPDG==pR2) && (pLPDG==L1 || pLPDG==L2))
878 af=3;
879 else if(cRPDG<-7 && (-cLPDG==pR1 || -cLPDG==pR2) && (pLPDG==R1 || pLPDG==R2))
880 af=4;
881 }
882 else if(cLPDG > 7)
883 {
884 if (pLPDG<-7 && (-pRPDG==L1 || -pRPDG==L2) && (cRPDG==pL1 || cRPDG==pL2))
885 af=5;
886 else if(pRPDG<-7 && (-pLPDG==L1 || -pLPDG==L2) && (cRPDG==pR1 || cRPDG==pR2))
887 af=6;
888 }
889 else if(cRPDG > 7)
890 {
891 if (pLPDG<-7 && (-pRPDG==R1 || -pRPDG==R2) && (cLPDG==pL1 || cLPDG==pL2))
892 af=7;
893 else if(pRPDG<-7 && (-pLPDG==R1 || -pLPDG==R2) && (cLPDG==pR1 || cLPDG==pR2))
894 af=8;
895 }
896#ifdef debug
897 else G4cout<<
"-G4QIonIonCollision::Constr: 6 (QDiQ+aQaDiQ) Can't fuse"<<
G4endl;
898#endif
899 }
900#ifdef debug
901 G4cout<<
"G4QIonIonCollision::Constr: **Possibility**, tf="<<tf<<
",af="<<af<<
G4endl;
902#endif
903 if(tf && af)
904 {
905
907 switch (tf)
908 {
909 case 1:
910 if (cLPDG > 0 && pLPDG > 0)
911 {
912 order= 1;
913 if (cLPDG > pLPDG) nLPDG=cLPDG*1000+pLPDG*100+1;
914 else if(cLPDG < pLPDG) nLPDG=pLPDG*1000+cLPDG*100+1;
915 else nLPDG=pLPDG*1000+cLPDG*100+3;
916 if (cRPDG < pRPDG) nRPDG=cRPDG*1000+pRPDG*100-1;
917 else if(cRPDG > pRPDG) nRPDG=pRPDG*1000+cRPDG*100-1;
918 else nRPDG=pRPDG*1000+cRPDG*100-3;
919 }
920 else if(cLPDG < 0 && pLPDG < 0)
921 {
922 order= 1;
923 if (cRPDG > pRPDG) nRPDG=cRPDG*1000+pRPDG*100+1;
924 else if(cRPDG < pRPDG) nRPDG=pRPDG*1000+cRPDG*100+1;
925 else nRPDG=pRPDG*1000+cRPDG*100+3;
926 if (cLPDG < pLPDG) nLPDG=cLPDG*1000+pLPDG*100-1;
927 else if(cLPDG > pLPDG) nLPDG=pLPDG*1000+cLPDG*100-1;
928 else nLPDG=pLPDG*1000+cLPDG*100-3;
929 }
930 else if(cRPDG > 0 && pLPDG > 0)
931 {
932 order=-1;
933 if (cRPDG > pLPDG) nLPDG=cRPDG*1000+pLPDG*100+1;
934 else if(cRPDG < pLPDG) nLPDG=pLPDG*1000+cRPDG*100+1;
935 else nLPDG=pLPDG*1000+cRPDG*100+3;
936 if (cLPDG < pRPDG) nRPDG=cLPDG*1000+pRPDG*100-1;
937 else if(cLPDG > pRPDG) nRPDG=pRPDG*1000+cLPDG*100-1;
938 else nRPDG=pRPDG*1000+cLPDG*100-3;
939 }
940 else if(cRPDG < 0 && pLPDG < 0)
941 {
942 order=-1;
943 if (cLPDG > pRPDG) nRPDG=cLPDG*1000+pRPDG*100+1;
944 else if(cLPDG < pRPDG) nRPDG=pRPDG*1000+cLPDG*100+1;
945 else nRPDG=pRPDG*1000+cLPDG*100+3;
946 if (cRPDG < pLPDG) nLPDG=cRPDG*1000+pLPDG*100-1;
947 else if(cRPDG > pLPDG) nLPDG=pLPDG*1000+cRPDG*100-1;
948 else nLPDG=pLPDG*1000+cRPDG*100-3;
949 }
950 break;
951 case 2:
952 switch (af)
953 {
954 case 1:
955 if(cLPDG < 0)
956 {
957 order= 1;
958 if(-cLPDG==pRPDG)
959 {
960 nLPDG=pLPDG;
961 nRPDG=cRPDG;
962 }
963 else
964 {
965 if (cRPDG > pRPDG) nRPDG=cRPDG*1000+pRPDG*100+1;
966 else if(cRPDG < pRPDG) nRPDG=pRPDG*1000+cRPDG*100+1;
967 else nRPDG=pRPDG*1000+cRPDG*100+3;
968 if (-cLPDG == pL1) nLPDG=pL2;
969 else nLPDG=pL1;
970 }
971 }
972 else
973 {
974 order=-1;
975 if(-cRPDG==pRPDG)
976 {
977 nLPDG=pLPDG;
978 nRPDG=cLPDG;
979 }
980 else
981 {
982 if (cLPDG > pRPDG) nRPDG=cLPDG*1000+pRPDG*100+1;
983 else if(cLPDG < pRPDG) nRPDG=pRPDG*1000+cLPDG*100+1;
984 else nRPDG=pRPDG*1000+cLPDG*100+3;
985 if (-cRPDG == pL1) nLPDG=pL2;
986 else nLPDG=pL1;
987 }
988 }
989 break;
990 case 2:
991 if(cLPDG < 0)
992 {
993 order=-1;
994 if(-cLPDG==pLPDG)
995 {
996 nLPDG=cRPDG;
997 nRPDG=pRPDG;
998 }
999 else
1000 {
1001 if (cRPDG > pLPDG) nLPDG=cRPDG*1000+pLPDG*100+1;
1002 else if(cRPDG < pLPDG) nLPDG=pLPDG*1000+cRPDG*100+1;
1003 else nLPDG=pLPDG*1000+cRPDG*100+3;
1004 if (-cLPDG == pR1) nRPDG=pR2;
1005 else nRPDG=pR1;
1006 }
1007 }
1008 else
1009 {
1010 order= 1;
1011 if(-cRPDG==pLPDG)
1012 {
1013 nLPDG=cLPDG;
1014 nRPDG=pRPDG;
1015 }
1016 else
1017 {
1018 if (cLPDG > pLPDG) nLPDG=cLPDG*1000+pLPDG*100+1;
1019 else if(cLPDG < pLPDG) nLPDG=pLPDG*1000+cLPDG*100+1;
1020 else nLPDG=pLPDG*1000+cLPDG*100+3;
1021 if (-cRPDG == pR1) nRPDG=pR2;
1022 else nRPDG=pR1;
1023 }
1024 }
1025 break;
1026 case 3:
1027 if(cLPDG > 0)
1028 {
1029 order= 1;
1030 if(cLPDG==-pRPDG)
1031 {
1032 nLPDG=pLPDG;
1033 nRPDG=cRPDG;
1034 }
1035 else
1036 {
1037 if (cRPDG < pRPDG) nRPDG=cRPDG*1000+pRPDG*100-1;
1038 else if(cRPDG > pRPDG) nRPDG=pRPDG*1000+cRPDG*100-1;
1039 else nRPDG=pRPDG*1000+cRPDG*100-3;
1040 if ( cLPDG == pL1) nLPDG=-pL2;
1041 else nLPDG=-pL1;
1042 }
1043 }
1044 else
1045 {
1046 order=-1;
1047 if(cRPDG==-pRPDG)
1048 {
1049 nLPDG=pLPDG;
1050 nRPDG=cLPDG;
1051 }
1052 else
1053 {
1054 if (cLPDG < pRPDG) nRPDG=cLPDG*1000+pRPDG*100-1;
1055 else if(cLPDG > pRPDG) nRPDG=pRPDG*1000+cLPDG*100-1;
1056 else nRPDG=pRPDG*1000+cLPDG*100-3;
1057 if ( cRPDG == pL1) nLPDG=-pL2;
1058 else nLPDG=-pL1;
1059 }
1060 }
1061 break;
1062 case 4:
1063 if(cLPDG > 0)
1064 {
1065 order=-1;
1066 if(cLPDG==-pLPDG)
1067 {
1068 nLPDG=cRPDG;
1069 nRPDG=pRPDG;
1070 }
1071 else
1072 {
1073 if (cRPDG < pLPDG) nLPDG=cRPDG*1000+pLPDG*100-1;
1074 else if(cRPDG > pLPDG) nLPDG=pLPDG*1000+cRPDG*100-1;
1075 else nLPDG=pLPDG*1000+cRPDG*100-3;
1076 if ( cLPDG == pR1) nRPDG=-pR2;
1077 else nRPDG=-pR1;
1078 }
1079 }
1080 else
1081 {
1082 order= 1;
1083 if(cRPDG==-pLPDG)
1084 {
1085 nLPDG=cLPDG;
1086 nRPDG=pRPDG;
1087 }
1088 else
1089 {
1090 if (cLPDG < pLPDG) nLPDG=cLPDG*1000+pLPDG*100-1;
1091 else if(cLPDG > pLPDG) nLPDG=pLPDG*1000+cLPDG*100-1;
1092 else nLPDG=pLPDG*1000+cLPDG*100-3;
1093 if ( cRPDG == pR1) nRPDG=-pR2;
1094 else nRPDG=-pR1;
1095 }
1096 }
1097 break;
1098 }
1099 break;
1100 case 3:
1101 switch (af)
1102 {
1103 case 1:
1104 if(pLPDG < 0)
1105 {
1106 order= 1;
1107 if (pRPDG > cRPDG) nRPDG=pRPDG*1000+cRPDG*100+1;
1108 else if(pRPDG < cRPDG) nRPDG=cRPDG*1000+pRPDG*100+1;
1109 else nRPDG=cRPDG*1000+pRPDG*100+3;
1110 if (-pLPDG == L1) nLPDG=L2;
1111 else nLPDG=L1;
1112 }
1113 else
1114 {
1115 order=-1;
1116 if (pLPDG > cRPDG) nLPDG=pLPDG*1000+cRPDG*100+1;
1117 else if(pLPDG < cRPDG) nLPDG=cRPDG*1000+pLPDG*100+1;
1118 else nLPDG=cRPDG*1000+pLPDG*100+3;
1119 if (-pRPDG == L1) nRPDG=L2;
1120 else nRPDG=L1;
1121 }
1122 break;
1123 case 2:
1124 if(pLPDG < 0)
1125 {
1126 order=-1;
1127 if (pRPDG > cLPDG) nRPDG=pRPDG*1000+cLPDG*100+1;
1128 else if(pRPDG < cLPDG) nRPDG=cLPDG*1000+pRPDG*100+1;
1129 else nRPDG=cLPDG*1000+pRPDG*100+3;
1130 if (-pLPDG == R1) nLPDG=R2;
1131 else nLPDG=R1;
1132 }
1133 else
1134 {
1135 order= 1;
1136 if (pLPDG > cLPDG) nLPDG=pLPDG*1000+cLPDG*100+1;
1137 else if(pLPDG < cLPDG) nLPDG=cLPDG*1000+pLPDG*100+1;
1138 else nLPDG=cLPDG*1000+pLPDG*100+3;
1139 if (-pRPDG == R1) nRPDG=R2;
1140 else nRPDG=R1;
1141 }
1142 break;
1143 case 3:
1144 if(pLPDG > 0)
1145 {
1146 order= 1;
1147 if (pRPDG < cRPDG) nRPDG=pRPDG*1000+cRPDG*100-1;
1148 else if(pRPDG > cRPDG) nRPDG=cRPDG*1000+pRPDG*100-1;
1149 else nRPDG=cRPDG*1000+pRPDG*100-3;
1150 if ( pLPDG == L1) nLPDG=-L2;
1151 else nLPDG=-L1;
1152 }
1153 else
1154 {
1155 order=-1;
1156 if (pLPDG < cRPDG) nLPDG=pLPDG*1000+cRPDG*100-1;
1157 else if(pLPDG > cRPDG) nLPDG=cRPDG*1000+pLPDG*100-1;
1158 else nLPDG=cRPDG*1000+pLPDG*100-3;
1159 if ( pRPDG == L1) nRPDG=-L2;
1160 else nRPDG=-L1;
1161 }
1162 break;
1163 case 4:
1164 if(pLPDG > 0)
1165 {
1166 order=-1;
1167 if (pRPDG < cLPDG) nRPDG=pRPDG*1000+cLPDG*100-1;
1168 else if(pRPDG > cLPDG) nRPDG=cLPDG*1000+pRPDG*100-1;
1169 else nRPDG=cLPDG*1000+pRPDG*100-3;
1170 if ( pLPDG == R1) nLPDG=-R2;
1171 else nLPDG=-R1;
1172 }
1173 else
1174 {
1175 order= 1;
1176 if (pLPDG < cLPDG) nLPDG=pLPDG*1000+cLPDG*100-1;
1177 else if(pLPDG > cLPDG) nLPDG=cLPDG*1000+pLPDG*100-1;
1178 else nLPDG=cLPDG*1000+pLPDG*100-3;
1179 if ( pRPDG == R1) nRPDG=-R2;
1180 else nRPDG=-R1;
1181 }
1182 break;
1183 }
1184 break;
1185 case 4:
1186 switch (af)
1187 {
1188 case 1:
1189 order= 1;
1190 if(-cLPDG == pL1) nLPDG= pL2;
1191 else nLPDG= pL1;
1192 if( cRPDG == pR1) nRPDG=-pR2;
1193 else nRPDG=-pR1;
1194 break;
1195 case 2:
1196 order=-1;
1197 if(-cRPDG == pL1) nLPDG= pL2;
1198 else nLPDG= pL1;
1199 if( cLPDG == pR1) nRPDG=-pR2;
1200 else nRPDG=-pR1;
1201 break;
1202 case 3:
1203 order= 1;
1204 if( cLPDG == pL1) nLPDG=-pL2;
1205 else nLPDG=-pL1;
1206 if(-cRPDG == pR1) nRPDG= pR2;
1207 else nRPDG= pR1;
1208 break;
1209 case 4:
1210 order=-1;
1211 if( cRPDG == pL1) nLPDG=-pL2;
1212 else nLPDG=-pL1;
1213 if(-cLPDG == pR1) nRPDG= pR2;
1214 else nRPDG= pR1;
1215 break;
1216 }
1217 break;
1218 case 5:
1219 switch (af)
1220 {
1221 case 1:
1222 order= 1;
1223 if(-pLPDG == L1) nLPDG= L2;
1224 else nLPDG= L1;
1225 if( pRPDG == R1) nRPDG=-R2;
1226 else nRPDG=-R1;
1227 break;
1228 case 2:
1229 order=-1;
1230 if(-pRPDG == L1) nRPDG= L2;
1231 else nRPDG= L1;
1232 if( pLPDG == R1) nLPDG=-R2;
1233 else nLPDG=-R1;
1234 break;
1235 case 3:
1236 order= 1;
1237 if( pLPDG == L1) nLPDG=-L2;
1238 else nLPDG=-L1;
1239 if(-pRPDG == R1) nRPDG= R2;
1240 else nRPDG= R1;
1241 break;
1242 case 4:
1243 order=-1;
1244 if( pRPDG == L1) nRPDG=-L2;
1245 else nRPDG=-L1;
1246 if(-pLPDG == R1) nLPDG= R2;
1247 else nLPDG= R1;
1248 break;
1249 }
1250 break;
1251 case 6:
1252 switch (af)
1253 {
1254 case 1:
1255 order=-1;
1256 if(-cRPDG == pL1) nLPDG= pL2;
1257 else nLPDG= pL1;
1258 if( pRPDG == L1) nRPDG= -L2;
1259 else nRPDG= -L1;
1260 break;
1261 case 2:
1262 order= 1;
1263 if(-cLPDG == pL1) nLPDG= pL2;
1264 else nLPDG= pL1;
1265 if( pRPDG == R1) nRPDG= -R2;
1266 else nRPDG= -R1;
1267 break;
1268 case 3:
1269 order= 1;
1270 if(-cRPDG == pR1) nRPDG= pR2;
1271 else nRPDG= pR1;
1272 if( pLPDG == L1) nLPDG= -L2;
1273 else nLPDG= -L1;
1274 break;
1275 case 4:
1276 order=-1;
1277 if(-cLPDG == pR1) nRPDG= pR2;
1278 else nRPDG= pR1;
1279 if( pLPDG == R1) nLPDG= -R2;
1280 else nLPDG= -R1;
1281 break;
1282 case 5:
1283 order=-1;
1284 if(-pRPDG == L1) nRPDG= L2;
1285 else nRPDG= L1;
1286 if( cRPDG == pL1) nLPDG=-pL2;
1287 else nLPDG=-pL1;
1288 break;
1289 case 6:
1290 order= 1;
1291 if(-pLPDG == L1) nLPDG= L2;
1292 else nLPDG= L1;
1293 if( cRPDG == pR1) nRPDG=-pR2;
1294 else nRPDG=-pR1;
1295 break;
1296 case 7:
1297 order= 1;
1298 if(-pRPDG == R1) nRPDG= R2;
1299 else nRPDG= R1;
1300 if( cLPDG == pL1) nLPDG=-pL2;
1301 else nLPDG=-pL1;
1302 break;
1303 case 8:
1304 order=-1;
1305 if(-pLPDG == R1) nLPDG= R2;
1306 else nLPDG= R1;
1307 if( cLPDG == pR1) nRPDG=-pR2;
1308 else nRPDG=-pR1;
1309 break;
1310 }
1311 break;
1312 }
1313 if(!order)
G4cerr<<
"-Warning-G4QInel::Constr: t="<<tf<<
", a="<<af<<
", cL="<<cLPDG
1314 <<
", cR="<<cRPDG<<
", pL="<<pLPDG<<
", pR="<<pRPDG<<
G4endl;
1315 else
1316 {
1317
1319 if(std::abs(nLPDG) > 7) ++
LT;
1321 if(std::abs(nRPDG) > 7) ++RT;
1324 if(cLT==2 && cRT==2)
1325 {
1326 aLPDG=0;
1327 aRPDG=0;
1328 if(cLPDG>0)
1329 {
1330 aLPDG=nLPDG/100;
1331 aRPDG=(-nRPDG)/100;
1332 }
1333 else
1334 {
1335 aRPDG=nRPDG/100;
1336 aLPDG=(-nLPDG)/100;
1337 }
1342 if(nL1!=nR1 && nL1!=nR2 && nL2!=nR1 && nL2!=nR2)
1343 {
1344#ifdef debug
1345 G4cout<<
"G4QIonIonCollis::Constr:aLPDG="<<aLPDG<<
", aRPDG="<<aRPDG<<
G4endl;
1346#endif
1347 sing=false;
1349 std::pair<G4int,G4int> pB=tmp.
MakeTwoBaryons(nL1, nL2, nR1, nR2);
1351 }
1352 }
1353 if(sing)
1354 {
1355 std::pair<G4int,G4int> newPair = std::make_pair(nLPDG,nRPDG);
1357#ifdef debug
1358 G4cout<<
"G4QIn::Con: LPDG="<<nLPDG<<
",RPDG="<<nRPDG<<
",QC="<<newStQC<<
G4endl;
1359#endif
1360 G4int minPDG=newStQC.GetSPDGCode();
1362 }
1363
1366 if(pSM2>0.) pSM=std::sqrt(pSM2);
1367 if(minC && pSM2 > maxiM2)
1368 {
1369 maxiM2=pSM2;
1370 win=true;
1371 }
1372 else if(!minC || pSM > minM)
1373 {
1374 pExcess=pSM-minM;
1375 if(minC || pExcess > excess)
1376 {
1377 minC=false;
1378 excess=pExcess;
1379 win=true;
1380 }
1381 }
1382 if(win)
1383 {
1384 sst=pst;
1385 sLPDG=nLPDG;
1386 sRPDG=nRPDG;
1387 sOrd=order;
1388 }
1389 }
1390 }
1391
1392 }
1393 if(sOrd)
1394 {
1397 G4QParton* pLeft=(*sst)->GetLeftParton();
1398 G4QParton* pRight=(*sst)->GetRightParton();
1401#ifdef debug
1402 G4cout<<
"G4QIonIonCollis::Constr:cS4M="<<cS4M<<
" fused/w pS4M="<<pL4M+pR4M<<
G4endl;
1403#endif
1404 if(sOrd>0)
1405 {
1406 pL4M+=cL4M;
1407 pR4M+=cR4M;
1408 }
1409 else
1410 {
1411 pL4M+=cR4M;
1412 pR4M+=cL4M;
1413 }
1418 delete (*ist);
1419 strings.erase(ist);
1420#ifdef debug
1422 G4cout<<
"G4QIonIonCollision::Constr:Created,4M="<<ss4M<<
",m2="<<ss4M.
m2()<<
G4endl;
1423#endif
1424 if( ist != strings.begin() )
1425 {
1426 ist--;
1427 con=false;
1428#ifdef debug
1429 G4cout<<
"G4QIonIonCollision::Construct: *** IST Decremented ***"<<
G4endl;
1430#endif
1431 }
1432 else
1433 {
1434 con=true;
1435#ifdef debug
1436 G4cout<<
"G4QIonIonCollision::Construct: *** IST Begin ***"<<
G4endl;
1437#endif
1438 break;
1439 }
1440 }
1441 else
1442 {
1443#ifdef debug
1444 G4cout<<
"-Warning-G4QInel::Const: S4M="<<cS4M<<
",M2="<<cSM2<<
" Leave ASIS"<<
G4endl;
1445#endif
1446 ++problem;
1447 con=false;
1448 }
1449 }
1450 else con=false;
1451 }
1452#ifdef debug
1453 G4cout<<
"G4QIonIonCollision::Construct: *** IST While *** , con="<<con<<
G4endl;
1454#endif
1455 }
1456#ifdef edebug
1457
1459 G4int rC=totChg-theProjNucleus.
GetZ()-theTargNucleus.
GetZ();
1460 G4int rB=totBaN-theProjNucleus.
GetA()-theTargNucleus.
GetA();
1461 G4int nStr=strings.size();
1462 G4cout<<
"-EMCLS-G4QIn::Const: AfterSUPPRESION #ofS="<<nStr<<
",tNuc4M(E=M)="<<sum<<
G4endl;
1463 for(
G4int i=0; i<nStr; i++)
1464 {
1466 t4M+=strI4M;
1467 G4int sChg=strings[i]->GetCharge();
1468 rC-=sChg;
1469 G4int sBaN=strings[i]->GetBaryonNumber();
1470 rB-=sBaN;
1471 G4cout<<
"-EMCLS-G4QIonIonCollision::Construct: St#"<<i<<
", 4M="<<strI4M<<
", M="
1472 <<strI4M.
m()<<
", C="<<sChg<<
", B="<<sBaN<<
G4endl;
1473 }
1474 G4cout<<
"-EMCLS-G4QInel::Construct: r4M="<<t4M-totLS4M<<
", rC="<<rC<<
", rB="<<rB<<
G4endl;
1475#endif
1476
1477
1478
1479#ifdef debug
1480 G4cout<<
"G4QIonIonCollision::Construct: problem="<<problem<<
G4endl;
1481#endif
1482 if(problem)
1483 {
1484 G4int nOfStr=strings.size();
1485#ifdef debug
1486 G4cout<<
"G4QIonIonCollision::Constr:SecurityDiQaDiQReduction, #OfStr="<<nOfStr<<
G4endl;
1487#endif
1488 for (
G4int astring=0; astring < nOfStr; astring++)
1489 {
1498 {
1499#ifdef debug
1500 G4cout<<
"G4QIonIonCollis::Constr:TrySelfReduString,L="<<sPDG<<
",R="<<nPDG<<
G4endl;
1501#endif
1503 {
1506#ifdef debug
1507 G4cout<<
"+G4QInel::Const:#"<<astring<<
" Reduced, L="<<sPDG<<
", R="<<nPDG<<
G4endl;
1508#endif
1509 }
1510#ifdef debug
1511 else G4cout<<
"--*--G4QInel::Const: #"<<astring<<
" DQ-aDQ reduction Failed"<<
G4endl;
1512#endif
1513 }
1514 else if(sPDG==3 && nPDG==-3)
1515 {
1516 sPDG= 1;
1517 nPDG=-1;
1520 }
1521 else if(sPDG==-3 && nPDG==3)
1522 {
1523 sPDG=-1;
1524 nPDG= 1;
1527 }
1528 }
1530 }
1531#ifdef edebug
1533 G4int rCh=totChg-theProjNucleus.
GetZ()-theTargNucleus.
GetZ();
1534 G4int rBa=totBaN-theProjNucleus.
GetA()-theTargNucleus.
GetA();
1535 G4int nStri=strings.size();
1536 G4cout<<
"-EMCLS-G4QIn::Const: FinalConstruct, #ofSt="<<nStri<<
",tN4M(E=M)="<<t4M<<
G4endl;
1537 for(
G4int i=0; i<nStri; i++)
1538 {
1540 u4M+=strI4M;
1541 G4int sChg=strings[i]->GetCharge();
1542 rCh-=sChg;
1543 G4int sBaN=strings[i]->GetBaryonNumber();
1544 rBa-=sBaN;
1545 G4cout<<
"-EMCLS-G4QIonIonCollision::Construct: St#"<<i<<
", 4M="<<strI4M<<
", M="
1546 <<strI4M.
m()<<
", C="<<sChg<<
", B="<<sBaN<<
G4endl;
1547 }
1548 G4cout<<
"-EMCLS-G4QInel::Construct: r4M="<<u4M-totLS4M<<
",rC="<<rCh<<
",rB="<<rBa<<
G4endl;
1549#endif
1550}
std::vector< G4QHadron * > G4QHadronVector
std::vector< G4QInteraction * > G4QInteractionVector
std::vector< G4QPartonPair * > G4QPartonPairVector
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
HepLorentzRotation & rotateY(double delta)
HepLorentzRotation & rotateZ(double delta)
HepLorentzRotation inverse() const
HepLorentzVector & boost(double, double, double)
static G4QCHIPSWorld * Get()
G4LorentzVector Get4Momentum() const
G4int GetBaryonNumber() const
void IncrementCollisionCount(G4int aCount)
G4QParton * GetNextParton()
const G4ThreeVector & GetPosition() const
std::list< G4QParton * > GetColor()
std::list< G4QParton * > GetAntiColor()
G4QParton * GetNextAntiParton()
void Set4Momentum(const G4LorentzVector &aMom)
G4int GetNumberOfSoftCollisions()
void SetNumberOfSoftCollisions(G4int nofSoft)
G4QHadron * GetProjectile() const
G4QHadron * GetTarget() const
void SetTarget(G4QHadron *aTarget)
void SetNumberOfDINRCollisions(G4int nofDINR)
void SetNumberOfDiffractiveCollisions(G4int nofDiff)
G4bool ExciteSingDiffParticipants(G4QHadron *aPartner, G4QHadron *bPartner) const
G4bool IsSingleDiffractive()
G4bool ExciteDiffParticipants(G4QHadron *aPartner, G4QHadron *bPartner) const
void InitByPDG(G4int newPDG)
std::pair< G4double, G4double > ChooseImpactXandY(G4double maxImpact)
G4double GetOuterRadius()
void SubtractNucleon(G4QHadron *pNucleon)
void DoLorentzBoost(const G4LorentzVector &theBoost)
void DoLorentzRotation(const G4LorentzRotation &theLoRot)
G4double GetThickness(G4double b)
G4LorentzVector GetNucleons4Momentum()
G4QHadron * GetNextNucleon()
G4double GetGSMass() const
std::pair< G4int, G4int > MakeTwoBaryons(G4int L1, G4int L2, G4int R1, G4int R2)
void SetPDGCode(G4int aPDG)
const G4int & GetType() const
const G4LorentzVector & Get4Momentum() const
void Set4Momentum(const G4LorentzVector &aMomentum)
G4bool ReduceDiQADiQ(G4QParton *d1, G4QParton *d2)
G4QParton * GetLeftParton() const
G4LorentzVector Get4Momentum() const
G4int GetBaryonNumber() const
G4QParton * GetRightParton() const
void Boost(G4ThreeVector &Velocity)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)