FairRoot/PandaRoot
ColorSingletModels.cxx
Go to the documentation of this file.
1 /*
2  * @author Alexey Luchinsky
3  * @author Stanislav Poslavsky (stvlpos (at) mail.ru)
4  */
5 
6 #include <stdexcept>
7 
8 #include "ColorSingletModels.h"
9 #include "EvtGenBase/EvtComplex.hh"
10 
11 EvtSpinDensity chigen::models::createSpinDensity(int spin, int projection) {
12  assert(spin == 1 || spin == 2);
13  assert(-1 <= projection);
14  assert(2 >= projection);
15 
17 
18  //state = 9 -> unpolarized
19  //state = 10 -> (1,0)
20  //state = 11 -> (1,1)
21  //state = 20 -> (2,0)
22  //state = 21 -> (2,1)
23  //state = 22 -> (2,2)
24  //state = 19 -> unpolarized
25 
26  const int state = 10 * spin + projection;
27  EvtSpinDensity matrix;
28  switch (state) {
29  case 9:
30  matrix.setDiag(3);
31  return matrix;
32  case 10:
33  matrix.setDim(3);
34  matrix.set(2, 2, EvtComplex(1.0, 0.0));
35  return matrix;
36  case 11:
37  matrix.setDim(3);
38  matrix.set(0, 0, EvtComplex(1.0, 0.0));
39  matrix.set(1, 1, EvtComplex(1.0, 0.0));
40  return matrix;
41  case 19:
42  matrix.setDiag(5);
43  return matrix;
44  case 20:
45  matrix.setDim(5);
46  matrix.set(4, 4, EvtComplex(1.0, 0.0));
47  return matrix;
48  case 21:
49  matrix.setDim(5);
50  matrix.set(2, 2, EvtComplex(1.0, 0.0));
51  matrix.set(3, 3, EvtComplex(1.0, 0.0));
52  return matrix;
53  case 22:
54  matrix.setDim(5);
55  matrix.set(0, 0, EvtComplex(1.0, 0.0));
56  matrix.set(1, 1, EvtComplex(1.0, 0.0));
57  return matrix;
58  default:
59  throw std::runtime_error("Not a valid polarization.");
60  }
61 }
62 
64  double ecm, int pdg, EvtId evt, EvtSpinDensity spin, double mm,
65  double particleR20, double particleMaxSigma)
66 : chigen::PartonicModel(ecm, pdg, evt, spin, mm) {
67  R20 = particleR20;
68  __S__ = eCM * eCM - 4 * pow2(PROTON_MASS);
69  alpS = 0.3;
70  Xmin = 1.01 * mesonMass2 / __S__;
71  Xmax = 1;
72  Pfct = 20;
73  MaxSigma = particleMaxSigma * R20 * pow3(alpS);
75 }
76 
78  // hard cross section
79  sigma = dsdt();
80  // Multiply by PDF's
81  sigma = sigma * chigen::pythia::pdf->xf(1, x1, mesonMass2) * chigen::pythia::pdf->xf(1, x2, mesonMass2) / x1 / x2;
82  // Correct on change of integration variables
83  sigma = sigma*PhSp;
84 }
85 
87  PhSp = 1;
88 
89  //double Pfct = -1;
90  double Amin = pow(Xmin, -Pfct), Amax = pow(Xmax, -Pfct);
91  double X = pow(Amin + chigen::random::random_engine->flat()*(Amax - Amin), -1 / Pfct);
92  PhSp *= -1 / Pfct * (Amax - Amin) * pow(X, Pfct + 1);
93  sH = X*__S__;
94 
95 
96 
97  // double Xmin = 1.1 * mChi2 / S;
98  // double Xmax=1;
99  // double X = Xmin + (1 - Xmin) * rndm.flat();
100  // PhSp *= (1 - Xmin);
101 
102  double Ymax = log(1 / X) / 2;
103  double Y = Ymax * (2 * chigen::random::random_engine->flat() - 1);
104  PhSp *= 2 * Ymax;
105 
106  x1 = sqrt(X) * exp(Y);
107  x2 = sqrt(X) * exp(-Y);
108 
109  if (x1 * x2 * __S__ < mesonMass2) {
110  return false;
111  }
112 
113  sH = x1 * x2*__S__;
114 
115  tH = (mesonMass2 - sH) * chigen::random::random_engine->flat();
116  PhSp = PhSp * (sH - mesonMass2);
117  uH = mesonMass2 - sH - tH;
118  sH2 = pow2(sH);
119  tH2 = pow2(tH);
120  uH2 = pow2(uH);
121  return true;
122 }
123 
125  PhSp = 1;
126 
127  double xmin = 0.67;
128  double X = 1.1 * xmin;
129  PhSp *= (1 - xmin);
130  double Ymax = log(1 / xmin) / 2;
131  double Y = 0;
132  PhSp *= 2 * Ymax;
133 
134 
135  x1 = sqrt(X) * exp(Y);
136  x2 = sqrt(X) * exp(-Y);
137 
138  if (x1 * x2 * __S__ < mesonMass2) {
139  return false;
140  }
141  sH = X*__S__;
142  tH = (mesonMass2 - sH) * chigen::random::random_engine->flat();
143  PhSp = PhSp * (sH - mesonMass2);
144  uH = mesonMass2 - sH - tH;
145 
146  // MaxSigma = 100000*setSigma();
147  setSigma();
148  MaxSigma = 16 * 10000 * sigma;
149  MaxSigmaBackup = MaxSigma;
150  return true;
151 }
152 
void ensure_chigen_is_initialized()
friend F32vec4 exp(const F32vec4 &a)
Definition: P4_F32vec4.h:109
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
friend F32vec4 log(const F32vec4 &a)
Definition: P4_F32vec4.h:110
int evt
Definition: checkhelixhit.C:36
Double_t sigma[nsteps]
Definition: dedx_bands.C:65
double Y
Definition: anaLmdDigi.C:68
ColorSingletPartonicModel(double ecm, int pdgId, EvtId evtId, EvtSpinDensity spinDensity, double mesonMass, double particleR20, double particleMaxSigma)
EvtSpinDensity createSpinDensity(int spin, int projection)
#define PROTON_MASS
Definition: ChiGenContext.h:31
double X
Definition: anaLmdDigi.C:68
Double_t const mm
ClassImp(PndAnaContFact)
Pythia8::PDF * pdf
Double_t xmin
ChiGenRandomEngine * random_engine