Geant4-11
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
G4INCL::NDeltaToDeltaSKChannel Class Reference

#include <G4INCLNDeltaToDeltaSKChannel.hh>

Inheritance diagram for G4INCL::NDeltaToDeltaSKChannel:
G4INCL::IChannel

Public Member Functions

void fillFinalState (FinalState *fs)
 
FinalStategetFinalState ()
 
 NDeltaToDeltaSKChannel (Particle *, Particle *)
 
virtual ~NDeltaToDeltaSKChannel ()
 

Private Member Functions

 INCL_DECLARE_ALLOCATION_POOL (NDeltaToDeltaSKChannel)
 
G4double sampleDeltaMass (G4double ecm)
 

Private Attributes

Particleparticle1
 
Particleparticle2
 

Static Private Attributes

static const G4double angularSlope = 2.
 

Detailed Description

Definition at line 47 of file G4INCLNDeltaToDeltaSKChannel.hh.

Constructor & Destructor Documentation

◆ NDeltaToDeltaSKChannel()

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

◆ ~NDeltaToDeltaSKChannel()

G4INCL::NDeltaToDeltaSKChannel::~NDeltaToDeltaSKChannel ( )
virtual

Definition at line 55 of file G4INCLNDeltaToDeltaSKChannel.cc.

55{}

Member Function Documentation

◆ fillFinalState()

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

Implements G4INCL::IChannel.

Definition at line 95 of file G4INCLNDeltaToDeltaSKChannel.cc.

95 {
96 //
97 // D++ p -> S+ K+ D+ (2)
98 // D++ p -> S0 K+ D++ (1)
99 // D++ p -> S+ K0 D++ (6)
100 //
101 // D++ n -> S+ K+ D0 (2)
102 // D++ n -> S0 K+ D+ (4)
103 // D++ n -> S- K+ D++ (6)
104 // D++ n -> S+ K0 D+ (2)
105 // D++ n -> S0 K0 D++ (1)
106 //
107 // D+ p -> S+ K+ D0 (2)
108 // D+ p -> S0 K+ D+ (1)
109 // D+ p -> S- K+ D++ (2)
110 // D+ p -> S+ K0 D+ (2)
111 // D+ p -> S0 K0 D++ (4)
112 //
113 // D+ n -> S+ K+ D- (2)
114 // D+ n -> S0 K+ D0 (4)
115 // D+ n -> S- K+ D+ (2)
116 // D+ n -> S+ K0 D0 (2)
117 // D+ n -> S0 K0 D+ (1)
118 // D+ n -> S- K0 D++ (2)
119
120
121 Particle *delta;
122
123 if (particle1->isResonance()) {
124 delta = particle1;
125 }
126 else {
127 delta = particle2;
128 }
129
131
133 const G4int iso_d = ParticleTable::getIsospin(delta->getType());
134
135 ParticleType KaonType;
136 ParticleType DeltaType;
137 ParticleType SigmaType;
138
139 const G4double rdm = Random::shoot();
140
141 if(std::abs(iso) == 4){// D++ p
142 if(rdm*9 < 2){
143 KaonType = ParticleTable::getKaonType(iso/4);
144 DeltaType = ParticleTable::getDeltaType(iso/4);
145 SigmaType = ParticleTable::getSigmaType(iso/2);
146 }
147 else if(rdm*9 < 3){
148 KaonType = ParticleTable::getKaonType(iso/4);
149 DeltaType = ParticleTable::getDeltaType(3*iso/4);
150 SigmaType = SigmaZero;
151 }
152 else{
153 KaonType = ParticleTable::getKaonType(-iso/4);
154 DeltaType = ParticleTable::getDeltaType(3*iso/4);
155 SigmaType = ParticleTable::getSigmaType(iso/2);
156 }
157 }
158 else if(iso == 0){// D+ n
159 if(rdm*13 < 2){
160 KaonType = ParticleTable::getKaonType(iso_d);
161 DeltaType = ParticleTable::getDeltaType(-3*iso_d);
162 SigmaType = ParticleTable::getSigmaType(2*iso_d);
163 }
164 else if(rdm*13 < 6){
165 KaonType = ParticleTable::getKaonType(iso_d);
166 DeltaType = ParticleTable::getDeltaType(-iso_d);
167 SigmaType = SigmaZero;
168 }
169 else if(rdm*13 < 8){
170 KaonType = ParticleTable::getKaonType(iso_d);
171 DeltaType = ParticleTable::getDeltaType(iso_d);
172 SigmaType = ParticleTable::getSigmaType(-2*iso_d);
173 }
174 else if(rdm*13 < 10){
175 KaonType = ParticleTable::getKaonType(-iso_d);
176 DeltaType = ParticleTable::getDeltaType(-iso_d);
177 SigmaType = ParticleTable::getSigmaType(2*iso_d);
178 }
179 else if(rdm*13 < 11){
180 KaonType = ParticleTable::getKaonType(-iso_d);
181 DeltaType = ParticleTable::getDeltaType(iso_d);
182 SigmaType = SigmaZero;
183 }
184 else{
185 KaonType = ParticleTable::getKaonType(-iso_d);
186 DeltaType = ParticleTable::getDeltaType(3*iso_d);
187 SigmaType = ParticleTable::getSigmaType(-2*iso_d);
188 }
189 }
191 if(rdm*11 < 2){
192 KaonType = ParticleTable::getKaonType(iso/2);
193 DeltaType = ParticleTable::getDeltaType(-iso/2);
194 SigmaType = ParticleTable::getSigmaType(iso);
195 }
196 else if(rdm*11 < 3){
197 KaonType = ParticleTable::getKaonType(iso/2);
198 DeltaType = ParticleTable::getDeltaType(iso/2);
199 SigmaType = SigmaZero;
200 }
201 else if(rdm*11 < 5){
202 KaonType = ParticleTable::getKaonType(iso/2);
203 DeltaType = ParticleTable::getDeltaType(3*iso/2);
204 SigmaType = ParticleTable::getSigmaType(-iso);
205 }
206 else if(rdm*11 < 7){
207 KaonType = ParticleTable::getKaonType(-iso/2);
208 DeltaType = ParticleTable::getDeltaType(iso/2);
209 SigmaType = ParticleTable::getSigmaType(iso);
210 }
211 else{
212 KaonType = ParticleTable::getKaonType(-iso/2);
213 DeltaType = ParticleTable::getDeltaType(3*iso/2);
214 SigmaType = SigmaZero;
215 }
216 }
217 else{// D++ n
218 if(rdm*15 < 2){
219 KaonType = ParticleTable::getKaonType(iso/2);
220 DeltaType = ParticleTable::getDeltaType(-iso/2);
221 SigmaType = ParticleTable::getSigmaType(iso);
222 }
223 else if(rdm*15 < 6){
224 KaonType = ParticleTable::getKaonType(iso/2);
225 DeltaType = ParticleTable::getDeltaType(iso/2);
226 SigmaType = SigmaZero;
227 }
228 else if(rdm*15 < 12){
229 KaonType = ParticleTable::getKaonType(iso/2);
230 DeltaType = ParticleTable::getDeltaType(3*iso/2);
231 SigmaType = ParticleTable::getSigmaType(-iso);
232 }
233 else if(rdm*15 < 14){
234 KaonType = ParticleTable::getKaonType(-iso/2);
235 DeltaType = ParticleTable::getDeltaType(iso/2);
236 SigmaType = ParticleTable::getSigmaType(iso);
237 }
238 else{
239 KaonType = ParticleTable::getKaonType(-iso/2);
240 DeltaType = ParticleTable::getDeltaType(3*iso/2);
241 SigmaType = SigmaZero;
242 }
243 }
244
245
246 particle1->setType(DeltaType);
248 particle2->setType(SigmaType);
249
250 ParticleList list;
251 list.push_back(particle1);
252 list.push_back(particle2);
253 const ThreeVector &rcol = particle2->getPosition();
254 const ThreeVector zero;
255 Particle *kaon = new Particle(KaonType,zero,rcol);
256 list.push_back(kaon);
257
260
261 fs->addModifiedParticle(particle1);
262 fs->addModifiedParticle(particle2);
263 fs->addCreatedParticle(kaon);
264
265 }
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
void setMass(G4double mass)
const G4INCL::ThreeVector & getPosition() const
G4INCL::ParticleType getType() const
G4bool isResonance() const
Is it a resonance?
void setType(ParticleType t)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getDeltaType(const G4int isosp)
Get the type of delta.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4double shoot()
Definition: G4INCLRandom.cc:93
static const G4LorentzVector zero(0., 0., 0., 0.)

References G4INCL::FinalState::addCreatedParticle(), G4INCL::FinalState::addModifiedParticle(), angularSlope, G4INCL::PhaseSpaceGenerator::generateBiased(), G4INCL::ParticleTable::getDeltaType(), G4INCL::ParticleTable::getIsospin(), G4INCL::ParticleTable::getKaonType(), G4INCL::Particle::getPosition(), G4INCL::ParticleTable::getSigmaType(), G4INCL::Particle::getType(), G4INCL::Particle::isResonance(), particle1, particle2, sampleDeltaMass(), G4INCL::Particle::setMass(), G4INCL::Particle::setType(), G4INCL::Random::shoot(), G4INCL::SigmaZero, G4INCL::KinematicsUtils::totalEnergyInCM(), and anonymous_namespace{G4CascadeDeexciteBase.cc}::zero.

◆ getFinalState()

FinalState * G4INCL::IChannel::getFinalState ( )
inherited

Definition at line 50 of file G4INCLIChannel.cc.

50 {
51 FinalState *fs = new FinalState;
53 return fs;
54 }
virtual void fillFinalState(FinalState *fs)=0

References G4INCL::IChannel::fillFinalState().

◆ INCL_DECLARE_ALLOCATION_POOL()

G4INCL::NDeltaToDeltaSKChannel::INCL_DECLARE_ALLOCATION_POOL ( NDeltaToDeltaSKChannel  )
private

◆ sampleDeltaMass()

G4double G4INCL::NDeltaToDeltaSKChannel::sampleDeltaMass ( G4double  ecm)
private

Definition at line 57 of file G4INCLNDeltaToDeltaSKChannel.cc.

57 {
59 const G4double maxDeltaMassRndm = std::atan((maxDeltaMass-ParticleTable::effectiveDeltaMass)*2./ParticleTable::effectiveDeltaWidth); // atan((mass-1232)*2/130)
60 const G4double deltaMassRndmRange = maxDeltaMassRndm - ParticleTable::minDeltaMassRndm; // atan
61// assert(deltaMassRndmRange>0.);
62
63 G4double y=ecm*ecm;
64 G4double q2=(y-1.157776E6)*(y-6.4E5)/y/4.0; // 1.157776E6 = 1076^2 = (mNucleon + mPion)^2, 6.4E5 = 800^2 = (mNucleon - mPion)^2 // (prc56(1997)2431) (eq 3.7)^2
65 G4double q3=std::pow(std::sqrt(q2), 3.);
66 const G4double f3max=q3/(q3+5.832E6); // 5.832E6 = 180^3 = cut_parameter^3 // (prc56(1997)2431) (cf eq 3.6)
67 G4double x;
68
69 G4int nTries = 0;
70 G4bool success = false;
71 while(!success) { /* Loop checking, 10.07.2015, D.Mancusi */
72 if(++nTries >= 100000) {
73 INCL_WARN("NDeltaToDeltaSKChannel::sampleDeltaMass loop was stopped because maximum number of tries was reached. Minimum delta mass "
74 << ParticleTable::minDeltaMass << " MeV with CM energy " << ecm << " MeV may be unphysical." << '\n');
76 }
77
78 G4double rndm = ParticleTable::minDeltaMassRndm + Random::shoot() * deltaMassRndmRange; // atan in order to avec a distribution in 1/(1+x^2)
79 y = std::tan(rndm); // (mass-1232)*2/130
80 x = ParticleTable::effectiveDeltaMass + 0.5*ParticleTable::effectiveDeltaWidth*y; // probability to have the mass M = 1/(1+(M-1232)^2)/Pi cut with min and max mass
81// assert(x>=ParticleTable::minDeltaMass && ecm >= x + ParticleTable::effectiveSigmaMass + ParticleTable::effectiveKaonMass + 1.0);
82
83 // generation of the delta mass with the penetration factor
84 // (see prc56(1997)2431)
85 y=x*x;
86 q2=(y-1.157776E6)*(y-6.4E5)/y/4.0; // 1.157776E6 = 1076^2 = (mNucleon + mPion)^2, 6.4E5 = 800^2 = (mNucleon - mPion)^2 // (prc56(1997)2431) (eq 3.7)^2
87 q3=std::pow(std::sqrt(q2), 3.);
88 const G4double f3=q3/(q3+5.832E6); // 5.832E6 = 180^3 = cut_parameter^3 // (prc56(1997)2431) (eq 3.6)
89 rndm = Random::shoot();
90 if (rndm*f3max < f3) success = true; // promoting high masses
91 }
92 return x;
93 }
#define INCL_WARN(x)
bool G4bool
Definition: G4Types.hh:86
const G4double effectiveDeltaWidth
const G4double effectiveKaonMass
const G4double effectiveDeltaMass
G4ThreadLocal G4double minDeltaMass
G4ThreadLocal G4double minDeltaMassRndm
const G4double effectiveSigmaMass

References G4INCL::ParticleTable::effectiveDeltaMass, G4INCL::ParticleTable::effectiveDeltaWidth, G4INCL::ParticleTable::effectiveKaonMass, G4INCL::ParticleTable::effectiveSigmaMass, INCL_WARN, G4INCL::ParticleTable::minDeltaMass, G4INCL::ParticleTable::minDeltaMassRndm, and G4INCL::Random::shoot().

Referenced by fillFinalState().

Field Documentation

◆ angularSlope

const G4double G4INCL::NDeltaToDeltaSKChannel::angularSlope = 2.
staticprivate

Definition at line 59 of file G4INCLNDeltaToDeltaSKChannel.hh.

Referenced by fillFinalState().

◆ particle1

Particle* G4INCL::NDeltaToDeltaSKChannel::particle1
private

Definition at line 57 of file G4INCLNDeltaToDeltaSKChannel.hh.

Referenced by fillFinalState().

◆ particle2

Particle * G4INCL::NDeltaToDeltaSKChannel::particle2
private

Definition at line 57 of file G4INCLNDeltaToDeltaSKChannel.hh.

Referenced by fillFinalState().


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