ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLOmegaNToPiNChannel.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4INCLOmegaNToPiNChannel.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // INCL++ intra-nuclear cascade model
27 // Alain Boudard, CEA-Saclay, France
28 // Joseph Cugnon, University of Liege, Belgium
29 // Jean-Christophe David, CEA-Saclay, France
30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31 // Sylvie Leray, CEA-Saclay, France
32 // Davide Mancusi, CEA-Saclay, France
33 //
34 #define INCLXX_IN_GEANT4_MODE 1
35 
36 #include "globals.hh"
37 
39 #include "G4INCLKinematicsUtils.hh"
41 #include "G4INCLRandom.hh"
42 #include "G4INCLGlobals.hh"
43 #include "G4INCLLogger.hh"
44 
45 namespace G4INCL {
46 
48  : particle1(p1), particle2(p2)
49  {
50 
51  }
52 
54 
55  }
56 
58  Particle * nucleon;
59  Particle * omega;
60  if(particle1->isNucleon()) {
61  nucleon = particle1;
62  omega = particle2;
63  } else {
64  nucleon = particle2;
65  omega = particle1;
66  }
67 
68  const G4double r2 = Random::shoot();
69  if (nucleon->getType() == Neutron) {
70  if (r2*3. < 2.) {
71  nucleon->setType(Proton);
72  omega->setType(PiMinus);
73  }
74  else {
75  nucleon->setType(Neutron);
76  omega->setType(PiZero);
77  }
78  }
79  else {
80  if (r2*3. < 2.) {
81  nucleon->setType(Neutron);
82  omega->setType(PiPlus);
83  }
84  else {
85  nucleon->setType(Proton);
86  omega->setType(PiZero);
87  }
88  }
89 
90  G4double sh=nucleon->getEnergy()+omega->getEnergy();
91  G4double mn=nucleon->getMass();
92  G4double me=omega->getMass();
93  G4double en=(sh*sh+mn*mn-me*me)/(2*sh);
94  nucleon->setEnergy(en);
95  G4double ee=std::sqrt(en*en-mn*mn+me*me);
96  omega->setEnergy(ee);
97  G4double pn=std::sqrt(en*en-mn*mn);
98 /*// test isotropy
99  const G4double pi=std::acos(-1.0);
100  G4double x1;
101  G4double u1;
102  G4double fteta;
103  G4double teta;
104  G4double fi;
105 
106  G4int passe1=0;
107  while (passe1==0) {
108  // Sample x from 0 to pi/2
109  x1=(pi/2.)*Random::shoot();
110  // Sample u from 0 to 1
111  u1=Random::shoot();
112  fteta=std::sin(x1);
113  // The condition
114  if (u1 < fteta) {
115  teta=x1;
116  passe1=1;
117  if (Random::shoot() < 0.5) {
118  teta=pi-teta;
119  }
120  }
121  }
122  fi=(2.0*pi)*Random::shoot();
123 
124 // end test
125  ThreeVector mom_nucleon(
126  pn*std::sin(teta)*std::cos(fi),
127  pn*std::sin(teta)*std::sin(fi),
128  pn*std::cos(teta)
129  );
130  if (Random::shoot() < 0.5) {
131  nucleon->setMomentum(mom_nucleon);
132  omega->setMomentum(-mom_nucleon);
133  }
134  else {
135  omega->setMomentum(mom_nucleon);
136  nucleon->setMomentum(-mom_nucleon);
137  }
138 */
139  ThreeVector mom_nucleon = Random::normVector(pn);
140 
141  nucleon->setMomentum(mom_nucleon);
142  omega->setMomentum(-mom_nucleon);
143 
144  fs->addModifiedParticle(nucleon);
145  fs->addModifiedParticle(omega);
146  }
147 
148 }