80{
81
83
84
85
86 G4int ProjectilePDGcode=projectile->GetDefinition()->GetPDGEncoding();
87 if(ProjectilePDGcode > 0)
88 {
89 target->SetStatus(2);
90 return false;
91 }
92
93
94
95
97
98 G4int TargetPDGcode=target->GetDefinition()->GetPDGEncoding();
99
101
102
103
104
105
106
108
109
110
111
112
113
115
116
118 Psum=Pprojectile+Ptarget;
120
121
123
125
126
127
128
129
130
131
132
133
134
137
139
141
143
144
145
146 G4double X_a(0.), X_b(0.), X_c(0.), X_d(0.);
147 G4double MesonProdThreshold=projectile->GetDefinition()->GetPDGMass()+
148 target->GetDefinition()->GetPDGMass()+
149 (2.*140.+16.)*MeV;
150
151 G4double Prel2= S*S + M0projectile2*M0projectile2 + M0target2*M0target2 -
152 2.*S*M0projectile2 - 2.*S*M0target2 - 2.*M0projectile2*M0target2;
153 Prel2/=S;
154
155 if(Prel2 < 0. )
156 {
157 X_a= 625.1;
158 X_b= 9.780;
159 X_c= 49.989;
160 X_d= 6.614;
161 }
162 else
163 {
164 G4double FlowF=1./std::sqrt(Prel2)*GeV;
165
166
167
168
169 X_a=25.*FlowF;
170
171
172 if(SqrtS < MesonProdThreshold)
173 {
174 X_b=3.13+140.*std::pow((MesonProdThreshold - SqrtS)/GeV,2.5);
175 }
176 else
177 {
178 X_b=6.8*GeV/SqrtS;
179 }
180 if(projectile->GetDefinition()->GetPDGMass()+
181 target->GetDefinition()->GetPDGMass() > SqrtS) {X_b=0.;}
182
183
184
185 X_c=2.*FlowF*
sqr(projectile->GetDefinition()->GetPDGMass()+
186 target->GetDefinition()->GetPDGMass())/S;
187
188
189 X_d=23.3*GeV*GeV/S;
190 }
191
192
193
194 if((ProjectilePDGcode == -2212)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
195 {X_b*=5.; X_c*=5.; X_d*=6.;}
196 else if((ProjectilePDGcode == -2212)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
197 {X_b*=4.; X_c*=4.; X_d*=4.;}
198 else if((ProjectilePDGcode == -2112)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
199 {X_b*=4.; X_c*=4.; X_d*=4.;}
200 else if((ProjectilePDGcode == -2112)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
201 {X_b*=5.; X_c*=5.; X_d*=6.;}
202 else if((ProjectilePDGcode == -3122)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
203 {X_b*=3.; X_c*=3.; X_d*=2.;}
204 else if((ProjectilePDGcode == -3122)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
205 {X_b*=3.; X_c*=3.; X_d*=2.;}
206 else if((ProjectilePDGcode == -3112)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
207 {X_b*=2.; X_c*=2.; X_d*=0.;}
208 else if((ProjectilePDGcode == -3112)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
209 {X_b*=4.; X_c*=4.; X_d*=2.;}
210 else if((ProjectilePDGcode == -3212)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
211 {X_b*=3.; X_c*=3.; X_d*=2.;}
212 else if((ProjectilePDGcode == -3212)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
213 {X_b*=3.; X_c*=3.; X_d*=2.;}
214 else if((ProjectilePDGcode == -3222)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
215 {X_b*=4.; X_c*=4.; X_d*=2.;}
216 else if((ProjectilePDGcode == -3222)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
217 {X_b*=2.; X_c*=2.; X_d*=0.;}
218 else if((ProjectilePDGcode == -3312)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
219 {X_b*=1.; X_c*=1.; X_d*=0.;}
220 else if((ProjectilePDGcode == -3312)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
221 {X_b*=2.; X_c*=2.; X_d*=0.;}
222 else if((ProjectilePDGcode == -3322)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
223 {X_b*=2.; X_c*=2.; X_d*=0.;}
224 else if((ProjectilePDGcode == -3322)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
225 {X_b*=1.; X_c*=1.; X_d*=0.;}
226 else if((ProjectilePDGcode == -3334)&&((TargetPDGcode == 2212)||(TargetPDGcode == 2214)))
227 {X_b*=0.; X_c*=0.; X_d*=0.;}
228 else if((ProjectilePDGcode == -3334)&&((TargetPDGcode == 2112)||(TargetPDGcode == 2114)))
229 {X_b*=0.; X_c*=0.; X_d*=0.;}
230 else {
G4cout<<
"Unknown anti-baryon for FTF annihilation: PDGcodes - "<<ProjectilePDGcode<<
" "<<TargetPDGcode<<
G4endl;}
231
232
233
234
235
236
237
238
239
240 G4double Xannihilation=X_a+X_b+X_c+X_d;
241
242
244 UnpackBaryon(ProjectilePDGcode, AQ[0], AQ[1], AQ[2]);
245
246
248 UnpackBaryon(TargetPDGcode, Q[0], Q[1], Q[2]);
249
250
252
253 if(Ksi < X_a/Xannihilation)
254 {
255
256
257
258
260
261 G4int Tmp1(0), Tmp2(0);
262 if(SampledCase == 0) { }
263 if(SampledCase == 1) {Tmp1=AQ[1]; AQ[1]=AQ[2]; AQ[2]=Tmp1;}
264 if(SampledCase == 2) {Tmp1=AQ[0]; AQ[0]=AQ[1]; AQ[1]=Tmp1;}
265 if(SampledCase == 3) {Tmp1=AQ[0]; Tmp2=AQ[1]; AQ[0]=AQ[2]; AQ[1]=Tmp1; AQ[2]=Tmp2;}
266 if(SampledCase == 4) {Tmp1=AQ[0]; Tmp2=AQ[1]; AQ[0]=Tmp2; AQ[1]=AQ[2]; AQ[2]=Tmp1;}
267 if(SampledCase == 5) {Tmp1=AQ[0]; Tmp2=AQ[1]; AQ[0]=AQ[2]; AQ[1]=Tmp2; AQ[2]=Tmp1;}
268
269
270
271 projectile->SplitUp();
272
273 projectile->SetFirstParton(AQ[0]);
274 projectile->SetSecondParton(Q[0]);
275 projectile->SetStatus(1);
276
277
278 target->SplitUp();
279
280 target->SetFirstParton(Q[1]);
281 target->SetSecondParton(AQ[1]);
282 target->SetStatus(1);
283
284
290
291
292
293
294
297
298
299 AveragePt2=200.*200.; maxPtSquare=S;
300
301
303
305
306 G4int NumberOfTries(0);
308 do
309 {
310 NumberOfTries++;
311
312 if(NumberOfTries == 100*(NumberOfTries/100))
313 {
314 ScaleFactor/=2.;
315 AveragePt2 *=ScaleFactor;
316 }
317
319 for(
G4int i=0; i<6; i++)
320 {
321 Quark_Mom[i]=GaussianPt(AveragePt2, maxPtSquare);
322 PtSum+=Quark_Mom[i];
323 }
324
325 PtSum/=6.;
326
327 SumMt=0.;
328 for(
G4int i=0; i<6; i++)
329 {
330 Quark_Mom[i]-=PtSum;
331
332 ModMom2[i]=Quark_Mom[i].
mag2();
333 SumMt+=std::sqrt(ModMom2[i]+MassQ2);
334 }
335 } while(SumMt > SqrtS);
336
337 G4double WminusTarget(0.), WplusProjectile(0.);
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
362
363 NumberOfTries=0;
364 ScaleFactor=1.;
365
367 do
368 {
369 Succes=true;
370 NumberOfTries++;
371
372 if(NumberOfTries == 100*(NumberOfTries/100))
373 {
374 ScaleFactor/=2.;
375 }
376
377 if(Alfa_R == 1.)
378 {
382
383 Quark_Mom[0].
setZ(Xaq1); Quark_Mom[1].
setZ(Xaq2); Quark_Mom[2].
setZ(Xaq3);
384 }
385 else
386 {
390
391 Quark_Mom[0].
setZ(Xaq1); Quark_Mom[1].
setZ(Xaq2); Quark_Mom[2].
setZ(Xaq3);
392 }
393
394
395 if(Alfa_R == 1.)
396 {
400
401 Quark_Mom[3].
setZ(Xq1); Quark_Mom[4].
setZ(Xq2); Quark_Mom[5].
setZ(Xq3);
402 }
403 else
404 {
408
409 Quark_Mom[3].
setZ(Xq1); Quark_Mom[4].
setZ(Xq2); Quark_Mom[5].
setZ(Xq3);
410 }
411
413
414 for(
G4int i=0; i<3; i++)
415 {
416 if(Quark_Mom[i].getZ() != 0.)
417 {Alfa+=(ScaleFactor*ModMom2[i]+MassQ2)/Quark_Mom[i].getZ();}
418 else {Succes=false;}
419 }
420
421 for(
G4int i=3; i<6; i++)
422 {
423 if(Quark_Mom[i].getZ() != 0.)
424 {Beta+=(ScaleFactor*ModMom2[i]+MassQ2)/Quark_Mom[i].getZ();}
425 else {Succes=false;}
426 }
427
428 if(!Succes) continue;
429
430 if(std::sqrt(Alfa)+std::sqrt(Beta) > SqrtS) {Succes=false; continue;}
431
432 G4double DecayMomentum2=S*S + Alfa*Alfa + Beta*Beta
433 - 2.*S*Alfa - 2.*S*Beta - 2.*Alfa*Beta;
434
435 WminusTarget=(S-Alfa+Beta+std::sqrt(DecayMomentum2))/2./SqrtS;
436 WplusProjectile=SqrtS-Beta/WminusTarget;
437
438 } while(!Succes);
439
440
441 G4double SqrtScaleF=std::sqrt(ScaleFactor);
442
443 for(
G4int i=0; i<3; i++)
444 {
446 (ScaleFactor*ModMom2[i]+MassQ2)/(2.*WplusProjectile*Quark_Mom[i].getZ());
447 Quark_Mom[i].
setZ(Pz);
448
449 if(ScaleFactor != 1.)
450 {
451 Quark_Mom[i].
setX(SqrtScaleF*Quark_Mom[i].getX());
452 Quark_Mom[i].
setY(SqrtScaleF*Quark_Mom[i].getY());
453 }
454 }
455
456 for(
G4int i=3; i<6; i++)
457 {
459 (ScaleFactor*ModMom2[i]+MassQ2)/(2.*WminusTarget*Quark_Mom[i].getZ());
460 Quark_Mom[i].
setZ(Pz);
461
462 if(ScaleFactor != 1.)
463 {
464 Quark_Mom[i].
setX(SqrtScaleF*Quark_Mom[i].getX());
465 Quark_Mom[i].
setY(SqrtScaleF*Quark_Mom[i].getY());
466 }
467 }
468
469
470
471
474 std::sqrt(Quark_Mom[3].mag2()+MassQ2));
475 G4double Ystring1=Pstring1.rapidity();
476
477
478
479
480
481
482
483
484 tmp=Quark_Mom[1]+Quark_Mom[4];
486 std::sqrt(Quark_Mom[4].mag2()+MassQ2));
487 G4double Ystring2=Pstring2.rapidity();
488
489
490
491
492
493
494
495
496 tmp=Quark_Mom[2]+Quark_Mom[5];
498 std::sqrt(Quark_Mom[5].mag2()+MassQ2));
499 G4double Ystring3=Pstring3.rapidity();
500
501
502
503
504
505
506
507
508
509
510
512
513 if((Ystring1 > Ystring2)&&(Ystring2 > Ystring3))
514 {
515 Pprojectile=Pstring1;
516 LeftString =Pstring2;
517 Ptarget =Pstring3;
518 }
519
520 if((Ystring1 > Ystring3)&&(Ystring3 > Ystring2))
521 {
522 Pprojectile=Pstring1;
523 LeftString =Pstring3;
524 Ptarget =Pstring2;
525 }
526
527 if((Ystring2 > Ystring1)&&(Ystring1 > Ystring3))
528 {
529 Pprojectile=Pstring2;
530 LeftString =Pstring1;
531 Ptarget =Pstring3;
532 }
533
534 if((Ystring2 > Ystring3)&&(Ystring3 > Ystring1))
535 {
536 Pprojectile=Pstring2;
537 LeftString =Pstring3;
538 Ptarget =Pstring1;
539 }
540
541 if((Ystring3 > Ystring1)&&(Ystring1 > Ystring2))
542 {
543 Pprojectile=Pstring3;
544 LeftString =Pstring1;
545 Ptarget =Pstring2;
546 }
547
548 if((Ystring3 > Ystring2)&&(Ystring2 > Ystring1))
549 {
550 Pprojectile=Pstring3;
551 LeftString =Pstring2;
552 Ptarget =Pstring1;
553 }
554
555
556
557
558 Pprojectile.transform(toLab);
559 LeftString.transform(toLab);
560 Ptarget.transform(toLab);
561
562
563
564 projectile->SetTimeOfCreation(target->GetTimeOfCreation());
565 projectile->SetPosition(target->GetPosition());
566
568 AdditionalString->
SetPosition(target->GetPosition());
569
570
571
572
573
574
575 projectile->Set4Momentum(Pprojectile);
577 target->Set4Momentum(Ptarget);
578
579 projectile->IncrementCollisionCount(1);
581 target->IncrementCollisionCount(1);
582
583 return true;
584 }
585
586
587
588
589 if(Ksi < (X_a+X_b)/Xannihilation)
590 {
591
592 G4int CandidatsN(0), CandAQ[9][2], CandQ[9][2];
593 G4int LeftAQ1(0), LeftAQ2(0), LeftQ1(0), LeftQ2(0);
594
595 for(
G4int iAQ=0; iAQ<3; iAQ++)
596 {
597 for(
G4int iQ=0; iQ<3; iQ++)
598 {
599 if(-AQ[iAQ] == Q[iQ])
600 {
601 if(iAQ == 0) {CandAQ[CandidatsN][0]=1; CandAQ[CandidatsN][1]=2;}
602 if(iAQ == 1) {CandAQ[CandidatsN][0]=0; CandAQ[CandidatsN][1]=2;}
603 if(iAQ == 2) {CandAQ[CandidatsN][0]=0; CandAQ[CandidatsN][1]=1;}
604 if(iQ == 0) {CandQ[CandidatsN][0] =1; CandQ[CandidatsN][1]=2;}
605 if(iQ == 1) {CandQ[CandidatsN][0] =0; CandQ[CandidatsN][1]=2;}
606 if(iQ == 2) {CandQ[CandidatsN][0] =0; CandQ[CandidatsN][1]=1;}
607 CandidatsN++;
608 }
609 }
610 }
611
612
613
614 if(CandidatsN != 0)
615 {
617
618 LeftAQ1=AQ[CandAQ[SampledCase][0]];
619 LeftAQ2=AQ[CandAQ[SampledCase][1]];
620
621 LeftQ1=Q[CandQ[SampledCase][0]];
622 LeftQ2=Q[CandQ[SampledCase][1]];
623
624
625 G4int Anti_DQ(0), DQ(0);
626
627 if(std::abs(LeftAQ1) > std::abs(LeftAQ2))
628 {
629 Anti_DQ=1000*LeftAQ1+100*LeftAQ2-3;
630 } else
631 {
632 Anti_DQ=1000*LeftAQ2+100*LeftAQ1-3;
633 }
634
635
636 if(std::abs(LeftQ1) > std::abs(LeftQ2))
637 {
638 DQ=1000*LeftQ1+100*LeftQ2+3;
639 } else
640 {
641 DQ=1000*LeftQ2+100*LeftQ1+3;
642 }
643
644
645
646
647
648 projectile->SplitUp();
649
650
651
652 projectile->SetFirstParton(DQ);
653 projectile->SetSecondParton(Anti_DQ);
654
655 projectile->SetStatus(1);
656 target->SetStatus(3);
657
658 Pprojectile.setPx(0.);
659 Pprojectile.setPy(0.);
660 Pprojectile.setPz(0.);
661 Pprojectile.setE(SqrtS);
662 Pprojectile.transform(toLab);
663
664
665 projectile->SetTimeOfCreation(target->GetTimeOfCreation());
666 projectile->SetPosition(target->GetPosition());
667
668
669
670
671
672
673 projectile->Set4Momentum(Pprojectile);
674
675 projectile->IncrementCollisionCount(1);
676
677 return true;
678 }
679 }
680
681
682
683 if(Ksi < (X_a+X_b+X_c)/Xannihilation)
684 {
685
686
687
688 G4int CandidatsN(0), CandAQ[9][2], CandQ[9][2];
689 G4int LeftAQ1(0), LeftAQ2(0), LeftQ1(0), LeftQ2(0);
690
691 for(
G4int iAQ=0; iAQ<3; iAQ++)
692 {
693 for(
G4int iQ=0; iQ<3; iQ++)
694 {
695 if(-AQ[iAQ] == Q[iQ])
696 {
697 if(iAQ == 0) {CandAQ[CandidatsN][0]=1; CandAQ[CandidatsN][1]=2;}
698 if(iAQ == 1) {CandAQ[CandidatsN][0]=0; CandAQ[CandidatsN][1]=2;}
699 if(iAQ == 2) {CandAQ[CandidatsN][0]=0; CandAQ[CandidatsN][1]=1;}
700 if(iQ == 0) {CandQ[CandidatsN][0] =1; CandQ[CandidatsN][1]=2;}
701 if(iQ == 1) {CandQ[CandidatsN][0] =0; CandQ[CandidatsN][1]=2;}
702 if(iQ == 2) {CandQ[CandidatsN][0] =0; CandQ[CandidatsN][1]=1;}
703 CandidatsN++;
704 }
705 }
706 }
707
708
709
710 if(CandidatsN != 0)
711 {
713
714 LeftAQ1=AQ[CandAQ[SampledCase][0]];
715 LeftAQ2=AQ[CandAQ[SampledCase][1]];
716
718 {
719 LeftQ1=Q[CandQ[SampledCase][0]];
720 LeftQ2=Q[CandQ[SampledCase][1]];
721 } else
722 {
723 LeftQ2=Q[CandQ[SampledCase][0]];
724 LeftQ1=Q[CandQ[SampledCase][1]];
725 }
726
727
728
729 projectile->SplitUp();
730
731 projectile->SetFirstParton(LeftAQ1);
732 projectile->SetSecondParton(LeftQ1);
733 projectile->SetStatus(1);
734
735
736 target->SplitUp();
737
738 target->SetFirstParton(LeftQ2);
739 target->SetSecondParton(LeftAQ2);
740 target->SetStatus(1);
741
742
743
744
747
748
749 AveragePt2=200.*200.; maxPtSquare=S;
750
751
753
755
756 G4int NumberOfTries(0);
758 do
759 {
760 NumberOfTries++;
761
762 if(NumberOfTries == 100*(NumberOfTries/100))
763 {
764 ScaleFactor/=2.;
765 AveragePt2 *=ScaleFactor;
766 }
767
769 for(
G4int i=0; i<4; i++)
770 {
771 Quark_Mom[i]=GaussianPt(AveragePt2, maxPtSquare);
772 PtSum+=Quark_Mom[i];
773 }
774
775 PtSum/=4.;
776
777 SumMt=0.;
778 for(
G4int i=0; i<4; i++)
779 {
780 Quark_Mom[i]-=PtSum;
781
782 ModMom2[i]=Quark_Mom[i].
mag2();
783 SumMt+=std::sqrt(ModMom2[i]+MassQ2);
784 }
785 } while(SumMt > SqrtS);
786
787 G4double WminusTarget(0.), WplusProjectile(0.);
788
789
791
792 NumberOfTries=0;
793 ScaleFactor=1.;
794
796 do
797 {
798 Succes=true;
799 NumberOfTries++;
800
801 if(NumberOfTries == 100*(NumberOfTries/100))
802 {
803 ScaleFactor/=2.;
804 }
805
806 if(Alfa_R == 1.)
807 {
810
811 Quark_Mom[0].
setZ(Xaq1); Quark_Mom[1].
setZ(Xaq2);
812 }
813 else
814 {
817
818 Quark_Mom[0].
setZ(Xaq1); Quark_Mom[1].
setZ(Xaq2);
819 }
820
821
822 if(Alfa_R == 1.)
823 {
826
827 Quark_Mom[2].
setZ(Xq1); Quark_Mom[3].
setZ(Xq2);
828 }
829 else
830 {
833
834 Quark_Mom[2].
setZ(Xq1); Quark_Mom[3].
setZ(Xq2);
835 }
836
838
839 for(
G4int i=0; i<2; i++)
840 {
841 if(Quark_Mom[i].getZ() != 0.)
842 {Alfa+=(ScaleFactor*ModMom2[i]+MassQ2)/Quark_Mom[i].getZ();}
843 else {Succes=false;}
844 }
845
846 for(
G4int i=2; i<4; i++)
847 {
848 if(Quark_Mom[i].getZ() != 0.)
849 {Beta+=(ScaleFactor*ModMom2[i]+MassQ2)/Quark_Mom[i].getZ();}
850 else {Succes=false;}
851 }
852
853 if(!Succes) continue;
854
855 if(std::sqrt(Alfa)+std::sqrt(Beta) > SqrtS) {Succes=false; continue;}
856
857 G4double DecayMomentum2=S*S + Alfa*Alfa + Beta*Beta
858 - 2.*S*Alfa - 2.*S*Beta - 2.*Alfa*Beta;
859
860 WminusTarget=(S-Alfa+Beta+std::sqrt(DecayMomentum2))/2./SqrtS;
861 WplusProjectile=SqrtS-Beta/WminusTarget;
862
863 } while(!Succes);
864
865
866 G4double SqrtScaleF=std::sqrt(ScaleFactor);
867
868 for(
G4int i=0; i<2; i++)
869 {
871 (ScaleFactor*ModMom2[i]+MassQ2)/(2.*WplusProjectile*Quark_Mom[i].getZ());
872 Quark_Mom[i].
setZ(Pz);
873
874 if(ScaleFactor != 1.)
875 {
876 Quark_Mom[i].
setX(SqrtScaleF*Quark_Mom[i].getX());
877 Quark_Mom[i].
setY(SqrtScaleF*Quark_Mom[i].getY());
878 }
879
880 }
881
882 for(
G4int i=2; i<4; i++)
883 {
885 (ScaleFactor*ModMom2[i]+MassQ2)/(2.*WminusTarget*Quark_Mom[i].getZ());
886 Quark_Mom[i].
setZ(Pz);
887
888 if(ScaleFactor != 1.)
889 {
890 Quark_Mom[i].
setX(SqrtScaleF*Quark_Mom[i].getX());
891 Quark_Mom[i].
setY(SqrtScaleF*Quark_Mom[i].getY());
892 }
893
894 }
895
896
897
898
901 std::sqrt(Quark_Mom[2].mag2()+MassQ2));
902 G4double Ystring1=Pstring1.rapidity();
903
904
905
906
907
908
909
910
911 tmp=Quark_Mom[1]+Quark_Mom[3];
913 std::sqrt(Quark_Mom[3].mag2()+MassQ2));
914 G4double Ystring2=Pstring2.rapidity();
915
916
917
918
919
920
921
922
923 if(Ystring1 > Ystring2)
924 {
925 Pprojectile=Pstring1;
926 Ptarget =Pstring2;
927 } else
928 {
929 Pprojectile=Pstring2;
930 Ptarget =Pstring1;
931 }
932
933
934
935
936 Pprojectile.transform(toLab);
937 Ptarget.transform(toLab);
938
939
940
941 projectile->SetTimeOfCreation(target->GetTimeOfCreation());
942 projectile->SetPosition(target->GetPosition());
943
944
945
946
947
948
949
950 projectile->Set4Momentum(Pprojectile);
951
952 target->Set4Momentum(Ptarget);
953
954 projectile->IncrementCollisionCount(1);
955 target->IncrementCollisionCount(1);
956
957 return true;
958 }
959 }
960
961
962
963
964 if(Ksi < (X_a+X_b+X_c+X_d)/Xannihilation)
965 {
966
967 G4int CandidatsN(0), CandAQ[9], CandQ[9];
968 G4int LeftAQ(0), LeftQ(0);
969
970 for(
G4int iAQ1=0; iAQ1<3; iAQ1++)
971 {
972 for(
G4int iAQ2=0; iAQ2<3; iAQ2++)
973 {
974 if(iAQ1 != iAQ2)
975 {
976 for(
G4int iQ1=0; iQ1<3; iQ1++)
977 {
978 for(
G4int iQ2=0; iQ2<3; iQ2++)
979 {
980 if(iQ1 != iQ2)
981 {
982 if((-AQ[iAQ1] == Q[iQ1]) && (-AQ[iAQ2] == Q[iQ2]))
983 {
984 if((iAQ1 == 0) && (iAQ2 == 1)){CandAQ[CandidatsN]=2;}
985 if((iAQ1 == 1) && (iAQ2 == 0)){CandAQ[CandidatsN]=2;}
986
987 if((iAQ1 == 0) && (iAQ2 == 2)){CandAQ[CandidatsN]=1;}
988 if((iAQ1 == 2) && (iAQ2 == 0)){CandAQ[CandidatsN]=1;}
989
990 if((iAQ1 == 1) && (iAQ2 == 2)){CandAQ[CandidatsN]=0;}
991 if((iAQ1 == 2) && (iAQ2 == 1)){CandAQ[CandidatsN]=0;}
992
993 if((iQ1 == 0) && (iQ2 == 1)){CandQ[CandidatsN]=2;}
994 if((iQ1 == 1) && (iQ2 == 0)){CandQ[CandidatsN]=2;}
995
996 if((iQ1 == 0) && (iQ2 == 2)){CandQ[CandidatsN]=1;}
997 if((iQ1 == 2) && (iQ2 == 0)){CandQ[CandidatsN]=1;}
998
999 if((iQ1 == 1) && (iQ2 == 2)){CandQ[CandidatsN]=0;}
1000 if((iQ1 == 2) && (iQ2 == 1)){CandQ[CandidatsN]=0;}
1001 CandidatsN++;
1002 }
1003 }
1004 }
1005 }
1006 }
1007 }
1008 }
1009
1010
1011 if(CandidatsN != 0)
1012 {
1014
1015 LeftAQ=AQ[CandAQ[SampledCase]];
1016
1017 LeftQ =Q[CandQ[SampledCase]];
1018
1019
1020
1021
1022 projectile->SplitUp();
1023
1024
1025
1026 projectile->SetFirstParton(LeftQ);
1027 projectile->SetSecondParton(LeftAQ);
1028
1029 projectile->SetStatus(1);
1030 target->SetStatus(3);
1031
1032 Pprojectile.setPx(0.);
1033 Pprojectile.setPy(0.);
1034 Pprojectile.setPz(0.);
1035 Pprojectile.setE(SqrtS);
1036 Pprojectile.transform(toLab);
1037
1038
1039 projectile->SetTimeOfCreation(target->GetTimeOfCreation());
1040 projectile->SetPosition(target->GetPosition());
1041
1042
1043
1044
1045
1046
1047 projectile->Set4Momentum(Pprojectile);
1048
1049 projectile->IncrementCollisionCount(1);
1050 return true;
1051 }
1052 }
1053
1054
1055
1056return true;
1057}
G4DLLIMPORT std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & rotateZ(double)
HepLorentzVector & rotateY(double)
static long shootInt(long n)
void SetTimeOfCreation(G4double aTime)
void SetStatus(const G4int aStatus)
void Set4Momentum(const G4LorentzVector &a4Momentum)
virtual void SetSecondParton(G4int PDGcode)=0
void IncrementCollisionCount(G4int aCount)
virtual void SetFirstParton(G4int PDGcode)=0
void SetPosition(const G4ThreeVector &aPosition)