source: trunk/source/processes/hadronic/models/parton_string/qgsm/src/G4SPBaryon.cc@ 1199

Last change on this file since 1199 was 1055, checked in by garnier, 17 years ago

maj sur la beta de geant 4.9.3

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