Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCL::NDeltaOmegaProductionChannel Class Reference

#include <G4INCLNDeltaOmegaProductionChannel.hh>

Inheritance diagram for G4INCL::NDeltaOmegaProductionChannel:
Collaboration diagram for G4INCL::NDeltaOmegaProductionChannel:

Public Member Functions

 NDeltaOmegaProductionChannel (Particle *, Particle *)
 
virtual ~NDeltaOmegaProductionChannel ()
 
void fillFinalState (FinalState *fs)
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
FinalStategetFinalState ()
 

Detailed Description

Definition at line 48 of file G4INCLNDeltaOmegaProductionChannel.hh.

Constructor & Destructor Documentation

G4INCL::NDeltaOmegaProductionChannel::NDeltaOmegaProductionChannel ( Particle p1,
Particle p2 
)

Definition at line 51 of file G4INCLNDeltaOmegaProductionChannel.cc.

52  : particle1(p1), particle2(p2)
53  {}
G4INCL::NDeltaOmegaProductionChannel::~NDeltaOmegaProductionChannel ( )
virtual

Definition at line 55 of file G4INCLNDeltaOmegaProductionChannel.cc.

55 {}

Member Function Documentation

void G4INCL::NDeltaOmegaProductionChannel::fillFinalState ( FinalState fs)
virtual

Unlike NN -> NDelta, NN -> NDeltaOmega is drawn from a phase-space generator

Implements G4INCL::IChannel.

Definition at line 97 of file G4INCLNDeltaOmegaProductionChannel.cc.

97  {
98 
105  G4int is1=ParticleTable::getIsospin(particle1->getType());
106  G4int is2=ParticleTable::getIsospin(particle2->getType());
107 
108  ParticleList list;
109  list.push_back(particle1);
110  list.push_back(particle2);
111  fs->addModifiedParticle(particle1);
112  fs->addModifiedParticle(particle2);
113 
114 // isospin Repartition of N and Delta;
115  G4double ecm = KinematicsUtils::totalEnergyInCM(particle1, particle2);
116  const G4int isospin = is1+is2;
117 
118  G4double rndm = 0.0;
119  G4double xmdel = sampleDeltaMass(ecm);
120 
121  G4int index2=0;
122  if (isospin == 0) { // pn case
123  rndm = Random::shoot();
124  if (rndm < 0.5) index2=1;
125  }
126 
127  if (isospin == 0) {
128  if(index2 == 1) {
129  G4int isi=is1;
130  is1=is2;
131  is2=isi;
132  }
133 // particle1->setHelicity(0.0);
134  } else {
135  rndm = Random::shoot();
136  if (rndm >= 0.25) {
137  is1=3*is1;
138  is2=-is2;
139  }
140 // particle1->setHelicity(ctet*ctet);
141  }
142 
144  particle1->setType(DeltaMinus);
145  } else if(is1 == ParticleTable::getIsospin(DeltaZero)) {
146  particle1->setType(DeltaZero);
147  } else if(is1 == ParticleTable::getIsospin(DeltaPlus)) {
148  particle1->setType(DeltaPlus);
149  } else if(is1 == ParticleTable::getIsospin(DeltaPlusPlus)) {
150  particle1->setType(DeltaPlusPlus);
151  }
152 
153  if(is2 == ParticleTable::getIsospin(Proton)) {
154  particle2->setType(Proton);
155  } else if(is2 == ParticleTable::getIsospin(Neutron)) {
156  particle2->setType(Neutron);
157  }
158 
159  if(particle1->isDelta()) particle1->setMass(xmdel);
160  if(particle2->isDelta()) particle2->setMass(xmdel);
161 
162  fs->addModifiedParticle(particle1);
163  fs->addModifiedParticle(particle2);
164 
165  const ThreeVector &rcolnucleon1 = particle1->getPosition();
166  const ThreeVector &rcolnucleon2 = particle2->getPosition();
167  const ThreeVector rcol = (rcolnucleon1+rcolnucleon2)*0.5;
168  const ThreeVector zero;
169  Particle *omega = new Particle(Omega,zero,rcol);
170  list.push_back(omega);
171  fs->addCreatedParticle(omega);
172 
173  const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
174  G4int biasIndex = ((Random::shoot()<0.5) ? 0 : 1);
175  PhaseSpaceGenerator::generateBiased(sqrtS, list, biasIndex, angularSlope);
176 
177  const ThreeVector vz(0.0,0.0,1.0);
178  G4double ctet=(particle1->getMomentum().dot(vz))/particle1->getMomentum().mag();
179  if (isospin == 0)
180  particle1->setHelicity(0.0);
181  else
182  particle1->setHelicity(ctet*ctet);
183  fs->addModifiedParticle(particle1);
184 
185  }
void setMass(G4double mass)
G4double dot(const ThreeVector &v) const
const G4INCL::ThreeVector & getMomentum() const
G4bool isDelta() const
Is it a Delta?
int G4int
Definition: G4Types.hh:78
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4INCL::ParticleType getType() const
const G4INCL::ThreeVector & getPosition() const
void setType(ParticleType t)
G4double shoot()
Definition: G4INCLRandom.cc:93
G4double mag() const
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
void setHelicity(G4double h)

Here is the call graph for this function:


The documentation for this class was generated from the following files: