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

Last change on this file since 1198 was 1055, checked in by garnier, 15 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.