Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4SPBaryon.cc
Go to the documentation of this file.
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#include "G4SPBaryon.hh"
27#include "Randomize.hh"
28#include "G4ParticleTable.hh"
29
30// correcting numbers, HPW Dec 1999
31
33{
34 G4double sum = GetProbability(diQuark);
35 G4double random = G4UniformRand();
36 G4double running = 0;
37 G4int Quark(0);
38 typedef std::vector<G4SPPartonInfo *>::const_iterator iter;
39 iter i;
40 for(i = thePartonInfo.begin(); i!=thePartonInfo.end(); i++)
41 {
42 if (std::abs((*i)->GetDiQuark()) == std::abs(diQuark))
43 {
44 running += (*i)->GetProbability();
45 if (running/sum >= random)
46 {
47 Quark = (*i)->GetQuark();
48 break;
49 }
50 }
51 }
52 return Quark;
53}
54
56{
57 G4double sum = 0;
58 typedef std::vector<G4SPPartonInfo *>::const_iterator iter;
59 iter i;
60 for(i = thePartonInfo.begin(); i!=thePartonInfo.end(); i++)
61 {
62 if (std::abs((*i)->GetDiQuark()) == std::abs(diQuark))
63 {
64 sum += (*i)->GetProbability();
65 }
66 }
67 return sum;
68}
69
71MatchDiQuarkAndGetQuark(const G4SPBaryon & aBaryon, G4int & aDiQuark) const
72{
73 G4int result=0;
74 typedef std::vector<G4SPPartonInfo *>::const_iterator iter;
75 iter i;
76 G4double running = 0;
77 G4double total = 0;
78 for(i = thePartonInfo.begin(); i!=thePartonInfo.end(); i++)
79 {
80 total += aBaryon.GetProbability((*i)->GetDiQuark());
81 }
82 G4double random = G4UniformRand()*total;
83 for(i = thePartonInfo.begin(); i!=thePartonInfo.end(); i++)
84 {
85 running += aBaryon.GetProbability((*i)->GetDiQuark());
86 if(random/total<running)
87 {
88 result = (*i)->GetQuark(); // (diquark annihilated)
89 aDiQuark = (*i)->GetDiQuark();
90 break;
91 }
92 }
93 return result;
94}
95
97SampleQuarkAndDiquark(G4int & quark, G4int & diQuark) const
98{
99 typedef std::vector<G4SPPartonInfo *>::const_iterator iter;
100 G4double random = G4UniformRand();
101 G4double sum = 0;
102 iter i;
103 for(i=thePartonInfo.begin() ; i!=thePartonInfo.end(); i++)
104 {
105 sum += (*i)->GetProbability();
106 if (sum > random)
107 {
108 if (theDefinition->GetPDGEncoding() < 0)
109 {
110 quark = (*i)->GetDiQuark();
111 diQuark = (*i)->GetQuark();
112 }
113 else
114 {
115 quark = (*i)->GetQuark();
116 diQuark = (*i)->GetDiQuark();
117 }
118 break;
119 }
120 }
121}
122
124FindDiquark(G4int quark, G4int & diQuark) const
125{
126 typedef std::vector<G4SPPartonInfo *>::const_iterator iter;
127 G4double sum = 0;
128 iter i;
129 for(i=thePartonInfo.begin() ; i!=thePartonInfo.end(); i++)
130 {
131 if (std::abs((*i)->GetQuark()) == std::abs(quark))
132 {
133 sum += (*i)->GetProbability();
134 }
135 }
136 G4double random = G4UniformRand();
137 G4double running = 0;
138 for(i=thePartonInfo.begin() ; i!=thePartonInfo.end(); i++)
139 {
140 if (std::abs((*i)->GetQuark()) == std::abs(quark))
141 {
142 running += (*i)->GetProbability();
143 if (running/sum >= random)
144 {
145 diQuark = (*i)->GetDiQuark();
146 break;
147 }
148 }
149 }
150}
151
152
154G4SPBaryon(G4Proton * aProton)
155{
156 theDefinition = aProton;
157 thePartonInfo.push_back(new G4SPPartonInfo(2203, 1, 1./3.)); // uu_1, d
158 thePartonInfo.push_back(new G4SPPartonInfo(2103, 2, 1./6.)); // ud_1, u
159 thePartonInfo.push_back(new G4SPPartonInfo(2101, 2, 1./2.)); // ud_0, u
160}
161
163G4SPBaryon(G4AntiProton * aAntiProton)
164{
165 theDefinition = aAntiProton;
166 thePartonInfo.push_back(new G4SPPartonInfo(-2203, -1, 1./3.));
167 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -2, 1./6.));
168 thePartonInfo.push_back(new G4SPPartonInfo(-2101, -2, 1./2.));
169}
170
172G4SPBaryon(G4Neutron * aNeutron)
173{
174 theDefinition = aNeutron;
175 thePartonInfo.push_back(new G4SPPartonInfo(2103, 1, 1./6.)); // ud_1, d
176 thePartonInfo.push_back(new G4SPPartonInfo(2101, 1, 1./2.)); // ud_0, d
177 thePartonInfo.push_back(new G4SPPartonInfo(1103, 2, 1./3.)); // dd_1, u
178}
179
181G4SPBaryon(G4AntiNeutron * aAntiNeutron)
182{
183 theDefinition = aAntiNeutron;
184 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -1, 1./6.));
185 thePartonInfo.push_back(new G4SPPartonInfo(-2101, -1, 1./2.));
186 thePartonInfo.push_back(new G4SPPartonInfo(-1103, -2, 1./3.));
187}
188
190G4SPBaryon(G4Lambda * aLambda)
191{
192 theDefinition = aLambda;
193 thePartonInfo.push_back(new G4SPPartonInfo(2103, 3, 1./3.)); // ud_1, s
194 thePartonInfo.push_back(new G4SPPartonInfo(3203, 1, 1./4.)); // su_1, d
195 thePartonInfo.push_back(new G4SPPartonInfo(3201, 1, 1./12.)); // su_0, d
196 thePartonInfo.push_back(new G4SPPartonInfo(3103, 2, 1./4.)); // sd_1, u
197 thePartonInfo.push_back(new G4SPPartonInfo(3101, 2, 1./12.)); // sd_0, u
198}
199
201G4SPBaryon(G4AntiLambda * aAntiLambda)
202{
203 theDefinition = aAntiLambda;
204 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -3, 1./3.));
205 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -1, 1./4.));
206 thePartonInfo.push_back(new G4SPPartonInfo(-3201, -1, 1./12.));
207 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -2, 1./4.));
208 thePartonInfo.push_back(new G4SPPartonInfo(-3101, -2, 1./12.));
209}
210
212G4SPBaryon(G4SigmaPlus * aSigmaPlus)
213{
214 theDefinition = aSigmaPlus;
215 thePartonInfo.push_back(new G4SPPartonInfo(2203, 3, 1./3.));
216 thePartonInfo.push_back(new G4SPPartonInfo(3203, 2, 1./6.));
217 thePartonInfo.push_back(new G4SPPartonInfo(3201, 2, 1./2.));
218}
219
221G4SPBaryon(G4AntiSigmaPlus * aAntiSigmaPlus)
222{
223 theDefinition = aAntiSigmaPlus;
224 thePartonInfo.push_back(new G4SPPartonInfo(-2203, -3, 1./3.));
225 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -2, 1./6.));
226 thePartonInfo.push_back(new G4SPPartonInfo(-3201, -2, 1./2.));
227}
228
230G4SPBaryon(G4SigmaZero * aSigmaZero)
231{
232 theDefinition = aSigmaZero;
233 thePartonInfo.push_back(new G4SPPartonInfo(2103, 3, 1./3.));
234 thePartonInfo.push_back(new G4SPPartonInfo(3203, 1, 1./12.));
235 thePartonInfo.push_back(new G4SPPartonInfo(3201, 1, 1./4.));
236 thePartonInfo.push_back(new G4SPPartonInfo(3103, 2, 1./12.));
237 thePartonInfo.push_back(new G4SPPartonInfo(3101, 2, 1./4.));
238}
239
241G4SPBaryon(G4AntiSigmaZero * aAntiSigmaZero)
242{
243 theDefinition = aAntiSigmaZero;
244 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -3, 1./3.));
245 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -1, 1./12.));
246 thePartonInfo.push_back(new G4SPPartonInfo(-3201, -1, 1./4.));
247 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -2, 1./12.));
248 thePartonInfo.push_back(new G4SPPartonInfo(-3101, -2, 1./4.));
249}
250
252G4SPBaryon(G4SigmaMinus * aSigmaMinus)
253{
254 theDefinition = aSigmaMinus;
255 thePartonInfo.push_back(new G4SPPartonInfo(1103, 3, 1./3.));
256 thePartonInfo.push_back(new G4SPPartonInfo(3103, 1, 1./6.));
257 thePartonInfo.push_back(new G4SPPartonInfo(3101, 1, 1./2.));
258}
259
261G4SPBaryon(G4AntiSigmaMinus * aAntiSigmaMinus)
262{
263 theDefinition = aAntiSigmaMinus;
264 thePartonInfo.push_back(new G4SPPartonInfo(-1103, -3, 1./3.));
265 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -1, 1./6.));
266 thePartonInfo.push_back(new G4SPPartonInfo(-3101, -1, 1./2.));
267}
268
270G4SPBaryon(G4XiMinus * aXiMinus)
271{
272 theDefinition = aXiMinus;
273 thePartonInfo.push_back(new G4SPPartonInfo(3103, 3, 1./6.));
274 thePartonInfo.push_back(new G4SPPartonInfo(3101, 3, 1./2.));
275 thePartonInfo.push_back(new G4SPPartonInfo(3303, 1, 1./3.));
276}
277
279G4SPBaryon(G4AntiXiMinus * aAntiXiMinus)
280{
281 theDefinition = aAntiXiMinus;
282 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -3, 1./6.));
283 thePartonInfo.push_back(new G4SPPartonInfo(-3101, -3, 1./2.));
284 thePartonInfo.push_back(new G4SPPartonInfo(-3303, -1, 1./3.));
285}
286
288G4SPBaryon(G4XiZero * aXiZero)
289{
290 theDefinition = aXiZero;
291 thePartonInfo.push_back(new G4SPPartonInfo(3203, 3, 1./6.));
292 thePartonInfo.push_back(new G4SPPartonInfo(3201, 3, 1./2.));
293 thePartonInfo.push_back(new G4SPPartonInfo(3303, 2, 1./3.));
294}
295
297G4SPBaryon(G4AntiXiZero * aAntiXiZero)
298{
299 theDefinition = aAntiXiZero;
300 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -3, 1./6.));
301 thePartonInfo.push_back(new G4SPPartonInfo(-3201, -3, 1./2.));
302 thePartonInfo.push_back(new G4SPPartonInfo(-3303, -2, 1./3.));
303}
304
306G4SPBaryon(G4OmegaMinus * anOmegaMinus)
307{
308 theDefinition = anOmegaMinus;
309 thePartonInfo.push_back(new G4SPPartonInfo(3303, 3, 1.));
310}
311
312
314G4SPBaryon(G4AntiOmegaMinus * anAntiOmegaMinus)
315{
316 theDefinition = anAntiOmegaMinus;
317 thePartonInfo.push_back(new G4SPPartonInfo(-3303, -3, 1.));
318}
319
320// non static particles
322G4SPBaryon(G4ParticleDefinition * aDefinition)
323{
324 theDefinition = aDefinition;
325 if(theDefinition ==
326 G4ParticleTable::GetParticleTable()->FindParticle(2224))// D++
327 {
328 thePartonInfo.push_back(new G4SPPartonInfo(2203, 2, 1.));
329 }
330 else if(theDefinition ==
331 G4ParticleTable::GetParticleTable()->FindParticle(-2224))// anti D++
332 {
333 thePartonInfo.push_back(new G4SPPartonInfo(-2203, -2, 1.));
334 }
335 else if(theDefinition ==
336 G4ParticleTable::GetParticleTable()->FindParticle(2214))// D+
337 {
338 thePartonInfo.push_back(new G4SPPartonInfo(2203, 1, 1./3.));
339 thePartonInfo.push_back(new G4SPPartonInfo(2103, 2, 2./3.));
340 }
341 else if(theDefinition ==
342 G4ParticleTable::GetParticleTable()->FindParticle(-2214))// anti D+
343 {
344 thePartonInfo.push_back(new G4SPPartonInfo(-2203, -1, 1./3.));
345 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -2, 2./3.));
346 }
347 else if(theDefinition ==
348 G4ParticleTable::GetParticleTable()->FindParticle(2114))// D0
349 {
350 thePartonInfo.push_back(new G4SPPartonInfo(2103, 1, 2./3.));
351 thePartonInfo.push_back(new G4SPPartonInfo(2103, 2, 1./3.));
352 }
353 else if(theDefinition ==
354 G4ParticleTable::GetParticleTable()->FindParticle(-2114))// anti D0
355 {
356 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -1, 2./3.));
357 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -2, 1./3.));
358 }
359 else if(theDefinition ==
360 G4ParticleTable::GetParticleTable()->FindParticle(1114))// D-
361 {
362 thePartonInfo.push_back(new G4SPPartonInfo(1103, 1, 1.));
363 }
364 else if(theDefinition ==
365 G4ParticleTable::GetParticleTable()->FindParticle(-1114))// anti D-
366 {
367 thePartonInfo.push_back(new G4SPPartonInfo(-1103, -1, 1.));
368 }
369 else if(theDefinition ==
370 G4ParticleTable::GetParticleTable()->FindParticle(3224))// S*+
371 {
372 thePartonInfo.push_back(new G4SPPartonInfo(2203, 3, 1./3.));
373 thePartonInfo.push_back(new G4SPPartonInfo(3203, 2, 2./3.));
374 }
375 else if(theDefinition ==
376 G4ParticleTable::GetParticleTable()->FindParticle(-3224))// anti S*+
377 {
378 thePartonInfo.push_back(new G4SPPartonInfo(-2203, -3, 1./3.));
379 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -2, 2./3.));
380 }
381 else if(theDefinition ==
382 G4ParticleTable::GetParticleTable()->FindParticle(3214))// S*0
383 {
384 thePartonInfo.push_back(new G4SPPartonInfo(2103, 3, 1./3.));
385 thePartonInfo.push_back(new G4SPPartonInfo(3203, 1, 1./3.));
386 thePartonInfo.push_back(new G4SPPartonInfo(3103, 2, 1./3.));
387 }
388 else if(theDefinition ==
389 G4ParticleTable::GetParticleTable()->FindParticle(-3214))// anti S*0
390 {
391 thePartonInfo.push_back(new G4SPPartonInfo(-2103, -3, 1./3.));
392 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -1, 1./3.));
393 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -2, 1./3.));
394 }
395 else if(theDefinition ==
396 G4ParticleTable::GetParticleTable()->FindParticle(3114))// S*-
397 {
398 thePartonInfo.push_back(new G4SPPartonInfo(1103, 3, 1./3.));
399 thePartonInfo.push_back(new G4SPPartonInfo(3103, 1, 2./3.));
400 }
401 else if(theDefinition ==
402 G4ParticleTable::GetParticleTable()->FindParticle(-3224))// anti S*-
403 {
404 thePartonInfo.push_back(new G4SPPartonInfo(-1103, -3, 1./3.));
405 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -1, 2./3.));
406 }
407 else if(theDefinition ==
408 G4ParticleTable::GetParticleTable()->FindParticle(3324))// Xi*0
409 {
410 thePartonInfo.push_back(new G4SPPartonInfo(3203, 3, 1./3.));
411 thePartonInfo.push_back(new G4SPPartonInfo(3303, 2, 2./3.));
412 }
413 else if(theDefinition ==
414 G4ParticleTable::GetParticleTable()->FindParticle(-3324))// anti Xi*0
415 {
416 thePartonInfo.push_back(new G4SPPartonInfo(-3203, -3, 1./3.));
417 thePartonInfo.push_back(new G4SPPartonInfo(-3303, -2, 2./3.));
418 }
419 else if(theDefinition ==
420 G4ParticleTable::GetParticleTable()->FindParticle(3314))// Xi*-
421 {
422 thePartonInfo.push_back(new G4SPPartonInfo(3103, 3, 2./3.));
423 thePartonInfo.push_back(new G4SPPartonInfo(3303, 1, 1./3.));
424 }
425 else if(theDefinition ==
426 G4ParticleTable::GetParticleTable()->FindParticle(-3314))// anti Xi*-
427 {
428 thePartonInfo.push_back(new G4SPPartonInfo(-3103, -3, 2./3.));
429 thePartonInfo.push_back(new G4SPPartonInfo(-3303, -1, 1./3.));
430 }
431}
432
434{
435 for(unsigned int i=0;i<thePartonInfo.size(); i++) delete thePartonInfo[i];
436}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4UniformRand()
Definition: Randomize.hh:53
static G4ParticleTable * GetParticleTable()
G4int MatchDiQuarkAndGetQuark(const G4SPBaryon &aBaryon, G4int &aDiQuark) const
Definition: G4SPBaryon.cc:71
G4double GetProbability(G4int diQuark) const
Definition: G4SPBaryon.cc:55
void FindDiquark(G4int quark, G4int &diQuark) const
Definition: G4SPBaryon.cc:124
G4int FindQuark(G4int diQuark) const
Definition: G4SPBaryon.cc:32
G4SPBaryon(G4Proton *aProton)
Definition: G4SPBaryon.cc:154
void SampleQuarkAndDiquark(G4int &quark, G4int &diQuark) const
Definition: G4SPBaryon.cc:97