Geant4-11
Public Member Functions | Private Types | Private Member Functions | Private Attributes
G4PolarizationTransition Class Reference

#include <G4PolarizationTransition.hh>

Public Member Functions

void DumpTransitionData (const POLAR &pol) const
 
G4double F3Coefficient (G4int K, G4int K2, G4int K1, G4int L, G4int Lprime, G4int twoJ2, G4int twoJ1) const
 
G4double FCoefficient (G4int K, G4int L, G4int Lprime, G4int twoJ2, G4int twoJ1) const
 
 G4PolarizationTransition ()
 
G4double GammaTransF3Coefficient (G4int K, G4int K2, G4int K1) const
 
G4double GammaTransFCoefficient (G4int K) const
 
void SampleGammaTransition (G4NuclearPolarization *np, G4int twoJ1, G4int twoJ2, G4int L0, G4int Lp, G4double mpRatio, G4double &cosTheta, G4double &phi)
 
void SetVerbose (G4int val)
 
 ~G4PolarizationTransition ()
 

Private Types

typedef std::vector< std::vector< G4complex > > POLAR
 

Private Member Functions

 G4PolarizationTransition (const G4PolarizationTransition &right)=delete
 
G4double GenerateGammaCosTheta (const POLAR &)
 
G4double GenerateGammaPhi (G4double &cosTheta, const POLAR &)
 
G4double LnFactorial (int k) const
 
const G4PolarizationTransitionoperator= (const G4PolarizationTransition &right)=delete
 

Private Attributes

G4double fDelta
 
G4LegendrePolynomial fgLegendrePolys
 
G4int fL
 
G4int fLbar
 
G4int fTwoJ1
 
G4int fTwoJ2
 
G4int fVerbose
 
G4double kEps
 
G4PolynomialPDF kPolyPDF
 

Detailed Description

Definition at line 58 of file G4PolarizationTransition.hh.

Member Typedef Documentation

◆ POLAR

typedef std::vector< std::vector<G4complex> > G4PolarizationTransition::POLAR
private

Definition at line 60 of file G4PolarizationTransition.hh.

Constructor & Destructor Documentation

◆ G4PolarizationTransition() [1/2]

G4PolarizationTransition::G4PolarizationTransition ( )
explicit

◆ ~G4PolarizationTransition()

G4PolarizationTransition::~G4PolarizationTransition ( )

Definition at line 54 of file G4PolarizationTransition.cc.

55{}

◆ G4PolarizationTransition() [2/2]

G4PolarizationTransition::G4PolarizationTransition ( const G4PolarizationTransition right)
privatedelete

Member Function Documentation

◆ DumpTransitionData()

void G4PolarizationTransition::DumpTransitionData ( const POLAR pol) const

Definition at line 387 of file G4PolarizationTransition.cc.

388{
389 G4cout << "G4PolarizationTransition: ";
390 (fTwoJ1 % 2) ? G4cout << fTwoJ1 << "/2" : G4cout << fTwoJ1/2;
391 G4cout << " --(" << fLbar;
392 if(fDelta != 0) G4cout << " + " << fDelta << "*" << fL;
393 G4cout << ")--> ";
394 (fTwoJ2 % 2) ? G4cout << fTwoJ2 << "/2" : G4cout << fTwoJ2/2;
395 G4cout << ", P = [ { ";
396 for(size_t k=0; k<pol.size(); ++k) {
397 if(k>0) G4cout << " }, { ";
398 for(size_t kappa=0; kappa<(pol[k]).size(); ++kappa) {
399 if(kappa > 0) G4cout << ", ";
400 G4cout << (pol[k])[kappa].real() << " + " << (pol[k])[kappa].imag() << "*i";
401 }
402 }
403 G4cout << " } ]" << G4endl;
404}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References fDelta, fL, fLbar, fTwoJ1, fTwoJ2, G4cout, and G4endl.

Referenced by GenerateGammaCosTheta(), GenerateGammaPhi(), and SampleGammaTransition().

◆ F3Coefficient()

G4double G4PolarizationTransition::F3Coefficient ( G4int  K,
G4int  K2,
G4int  K1,
G4int  L,
G4int  Lprime,
G4int  twoJ2,
G4int  twoJ1 
) const

Definition at line 68 of file G4PolarizationTransition.cc.

71{
72 G4double fCoeff = G4Clebsch::Wigner3J(2*LL, 2, 2*Lprime, -2, 2*K, 0);
73 if(fCoeff == 0) return 0;
74 fCoeff *= G4Clebsch::Wigner9J(twoJ2, 2*LL, twoJ1, twoJ2, 2*Lprime, twoJ1,
75 2*K2, 2*K, 2*K1);
76 if(fCoeff == 0) return 0;
77 if((Lprime+K2+K1+1) % 2) fCoeff = -fCoeff;
78
79 //AR-13Jun2017 : apply Jason Detwiler's conversion to double
80 // in the argument of sqrt() to avoid integer overflows.
81 return fCoeff*std::sqrt(G4double((twoJ1+1)*(twoJ2+1)*(2*LL+1))
82 *G4double((2*Lprime+1)*(2*K+1)*(2*K1+1)*(2*K2+1)));
83}
static const G4int LL[nN]
double G4double
Definition: G4Types.hh:83
static G4double Wigner3J(G4double j1, G4double j2, G4double j3, G4double m1, G4double m2, G4double m3)
Definition: G4Clebsch.cc:345
static G4double Wigner9J(G4int twoJ1, G4int twoJ2, G4int twoJ3, G4int twoJ4, G4int twoJ5, G4int twoJ6, G4int twoJ7, G4int twoJ8, G4int twoJ9)
Definition: G4Clebsch.cc:533

References LL, G4Clebsch::Wigner3J(), and G4Clebsch::Wigner9J().

Referenced by GammaTransF3Coefficient().

◆ FCoefficient()

G4double G4PolarizationTransition::FCoefficient ( G4int  K,
G4int  L,
G4int  Lprime,
G4int  twoJ2,
G4int  twoJ1 
) const

Definition at line 57 of file G4PolarizationTransition.cc.

59{
60 G4double fCoeff = G4Clebsch::Wigner3J(2*LL, 2, 2*Lprime, -2, 2*K, 0);
61 if(fCoeff == 0) return 0;
62 fCoeff *= G4Clebsch::Wigner6J(2*LL, 2*Lprime, 2*K, twoJ1, twoJ1, twoJ2);
63 if(fCoeff == 0) return 0;
64 if(((twoJ1+twoJ2)/2 - 1) %2) fCoeff = -fCoeff;
65 return fCoeff*std::sqrt(G4double((2*K+1)*(twoJ1+1)*(2*LL+1)*(2*Lprime+1)));
66}
static G4double Wigner6J(G4int twoJ1, G4int twoJ2, G4int twoJ3, G4int twoJ4, G4int twoJ5, G4int twoJ6)
Definition: G4Clebsch.cc:432

References LL, G4Clebsch::Wigner3J(), and G4Clebsch::Wigner6J().

Referenced by GammaTransFCoefficient().

◆ GammaTransF3Coefficient()

G4double G4PolarizationTransition::GammaTransF3Coefficient ( G4int  K,
G4int  K2,
G4int  K1 
) const

Definition at line 94 of file G4PolarizationTransition.cc.

96{
97 double transF3Coeff = F3Coefficient(K, K2, K1, fLbar, fLbar, fTwoJ2, fTwoJ1);
98 if(fDelta == 0) return transF3Coeff;
99 transF3Coeff += 2.*fDelta*F3Coefficient(K, K2, K1, fLbar, fL, fTwoJ2, fTwoJ1);
100 transF3Coeff += fDelta*fDelta*F3Coefficient(K, K2, K1, fL, fL, fTwoJ2, fTwoJ1);
101 return transF3Coeff;
102}
G4double F3Coefficient(G4int K, G4int K2, G4int K1, G4int L, G4int Lprime, G4int twoJ2, G4int twoJ1) const

References F3Coefficient(), fDelta, fL, fLbar, fTwoJ1, and fTwoJ2.

Referenced by SampleGammaTransition().

◆ GammaTransFCoefficient()

G4double G4PolarizationTransition::GammaTransFCoefficient ( G4int  K) const

Definition at line 85 of file G4PolarizationTransition.cc.

86{
87 double transFCoeff = FCoefficient(K, fLbar, fLbar, fTwoJ2, fTwoJ1);
88 if(fDelta == 0) return transFCoeff;
89 transFCoeff += 2.*fDelta*FCoefficient(K, fLbar, fL, fTwoJ2, fTwoJ1);
90 transFCoeff += fDelta*fDelta*FCoefficient(K, fL, fL, fTwoJ2, fTwoJ1);
91 return transFCoeff;
92}
G4double FCoefficient(G4int K, G4int L, G4int Lprime, G4int twoJ2, G4int twoJ1) const

References FCoefficient(), fDelta, fL, fLbar, fTwoJ1, and fTwoJ2.

Referenced by GenerateGammaCosTheta(), and GenerateGammaPhi().

◆ GenerateGammaCosTheta()

G4double G4PolarizationTransition::GenerateGammaCosTheta ( const POLAR pol)
private

Definition at line 104 of file G4PolarizationTransition.cc.

105{
106 size_t length = pol.size();
107 // Isotropic case
108 if(length <= 1) return G4UniformRand()*2.-1.;
109
110 // kappa > 0 terms integrate out to zero over phi: 0->2pi, so just need (k,0)
111 // terms to generate cos theta distribution
112 vector<G4double> polyPDFCoeffs(length, 0.0);
113 for(size_t k = 0; k < length; k += 2) {
114 if ((pol[k]).size() > 0 ) {
115 if(fVerbose > 1 && std::abs(((pol)[k])[0].imag()) > kEps) {
116 G4cout << "G4PolarizationTransition::GenerateGammaCosTheta WARNING: \n"
117 << " fPolarization["
118 << k << "][0] has imag component: = "
119 << ((pol)[k])[0].real() << " + "
120 << ((pol)[k])[0].imag() << "*i" << G4endl;
121 }
122 G4double a_k = std::sqrt((G4double)(2*k+1))*GammaTransFCoefficient(k)*((pol)[k])[0].real();
123 size_t nCoeff = fgLegendrePolys.GetNCoefficients(k);
124 for(size_t iCoeff=0; iCoeff < nCoeff; ++iCoeff) {
125 polyPDFCoeffs[iCoeff] += a_k*fgLegendrePolys.GetCoefficient(iCoeff, k);
126 }
127 } else {
128 G4cout << "G4PolarizationTransition::GenerateGammaCosTheta: WARNING: \n"
129 << " size of pol[" << k << "] = " << (pol[k]).size()
130 << " returning isotropic " << G4endl;
131 return G4UniformRand()*2.-1.;
132 }
133 }
134 if(fVerbose > 1 && polyPDFCoeffs[polyPDFCoeffs.size()-1] == 0) {
135 G4cout << "G4PolarizationTransition::GenerateGammaCosTheta: WARNING: "
136 << "got zero highest-order coefficient." << G4endl;
138 }
139 kPolyPDF.SetCoefficients(polyPDFCoeffs);
140 return kPolyPDF.GetRandomX();
141}
#define G4UniformRand()
Definition: Randomize.hh:52
G4double GetCoefficient(size_t i, size_t order)
static size_t GetNCoefficients(size_t order)
void DumpTransitionData(const POLAR &pol) const
G4LegendrePolynomial fgLegendrePolys
G4double GammaTransFCoefficient(G4int K) const
void SetCoefficients(const std::vector< G4double > &v)
G4double GetRandomX()

References DumpTransitionData(), fgLegendrePolys, fVerbose, G4cout, G4endl, G4UniformRand, GammaTransFCoefficient(), G4LegendrePolynomial::GetCoefficient(), G4LegendrePolynomial::GetNCoefficients(), G4PolynomialPDF::GetRandomX(), kEps, kPolyPDF, and G4PolynomialPDF::SetCoefficients().

Referenced by SampleGammaTransition().

◆ GenerateGammaPhi()

G4double G4PolarizationTransition::GenerateGammaPhi ( G4double cosTheta,
const POLAR pol 
)
private

Definition at line 143 of file G4PolarizationTransition.cc.

145{
146 size_t length = pol.size();
147 // Isotropic case
148 G4bool phiIsIsotropic = true;
149 for(size_t i=0; i<length; ++i) {
150 if(((pol)[i]).size() > 1) {
151 phiIsIsotropic = false;
152 break;
153 }
154 }
155 if(phiIsIsotropic) { return G4UniformRand()*CLHEP::twopi; }
156
157 // map<G4int, map<G4int, G4double> > cache;
158 map<G4int, map<G4int, G4double> >* cachePtr = nullptr;
159 // if(length > 10) cachePtr = &cache;
160
161 // Otherwise, P(phi) can be written as a sum of cos(kappa phi + phi_kappa).
162 // Calculate the amplitude and phase for each term
163 std::vector<G4double> amp(length, 0.0);
164 std::vector<G4double> phase(length, 0.0);
165 for(size_t kappa = 0; kappa < length; ++kappa) {
166 G4complex cAmpSum(0.,0.);
167 for(size_t k = kappa + (kappa % 2); k < length; k += 2) {
168 size_t kmax = (pol[k]).size();
169 if(kmax > 0) {
170 if(kappa >= kmax || std::abs(((pol)[k])[kappa]) < kEps) { continue; }
172 if(tmpAmp == 0) { continue; }
173 tmpAmp *= std::sqrt((G4double)(2*k+1))
174 * fgLegendrePolys.EvalAssocLegendrePoly(k, kappa, cosTheta, cachePtr);
175 if(kappa > 0) tmpAmp *= 2.*G4Exp(0.5*(LnFactorial(k-kappa) - LnFactorial(k+kappa)));
176 cAmpSum += ((pol)[k])[kappa]*tmpAmp;
177 } else {
178 if(fVerbose > 1) {
179 G4cout << "G4PolarizationTransition::GenerateGammaPhi: WARNING: \n"
180 << " size of pol[" << k << "] = " << (pol[k]).size()
181 << " returning isotropic " << G4endl;
182 }
184 }
185 }
186 if(fVerbose > 1 && kappa == 0 && std::abs(cAmpSum.imag()) > kEps) {
187 G4cout << "G4PolarizationTransition::GenerateGammaPhi: WARNING: \n"
188 << " Got complex amp for kappa = 0! A = " << cAmpSum.real()
189 << " + " << cAmpSum.imag() << "*i" << G4endl;
190 }
191 amp[kappa] = std::abs(cAmpSum);
192 phase[kappa] = arg(cAmpSum);
193 }
194
195 // Normalize PDF and calc max (note: it's not the true max, but the max
196 // assuming that all of the phases line up at a max)
197 G4double pdfMax = 0.;
198 for(size_t kappa = 0; kappa < length; ++kappa) { pdfMax += amp[kappa]; }
199 if(fVerbose > 1 && pdfMax < kEps) {
200 G4cout << "G4PolarizationTransition::GenerateGammaPhi: WARNING "
201 << "got pdfMax = 0 for \n";
203 G4cout << "I suspect a non-allowed transition! Returning isotropic phi..."
204 << G4endl;
206 }
207
208 // Finally, throw phi until it falls in the pdf
209 for(size_t i=0; i<100; ++i) {
211 G4double prob = G4UniformRand()*pdfMax;
212 G4double pdfSum = amp[0];
213 for(size_t kappa = 1; kappa < length; ++kappa) {
214 pdfSum += amp[kappa]*std::cos(phi*kappa + phase[kappa]);
215 }
216 if(fVerbose > 1 && pdfSum > pdfMax) {
217 G4cout << "G4PolarizationTransition::GenerateGammaPhi: WARNING: \n"
218 << "got pdfSum (" << pdfSum << ") > pdfMax ("
219 << pdfMax << ") at phi = " << phi << G4endl;
220 }
221 if(prob <= pdfSum) { return phi; }
222 }
223 if(fVerbose > 1) {
224 G4cout << "G4PolarizationTransition::GenerateGammaPhi: WARNING: \n"
225 << "no phi generated in 1000 throws! Returning isotropic phi..."
226 << G4endl;
227 }
229}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
bool G4bool
Definition: G4Types.hh:86
std::complex< G4double > G4complex
Definition: G4Types.hh:88
G4double EvalAssocLegendrePoly(G4int l, G4int m, G4double x, std::map< G4int, std::map< G4int, G4double > > *cache=NULL)
G4double LnFactorial(int k) const
static constexpr double twopi
Definition: SystemOfUnits.h:56

References DumpTransitionData(), G4LegendrePolynomial::EvalAssocLegendrePoly(), fgLegendrePolys, fVerbose, G4cout, G4endl, G4Exp(), G4UniformRand, GammaTransFCoefficient(), kEps, LnFactorial(), and CLHEP::twopi.

Referenced by SampleGammaTransition().

◆ LnFactorial()

G4double G4PolarizationTransition::LnFactorial ( int  k) const
inlineprivate

Definition at line 95 of file G4PolarizationTransition.hh.

95{ return G4Pow::GetInstance()->logfactorial(k); }
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double logfactorial(G4int Z) const
Definition: G4Pow.hh:237

References G4Pow::GetInstance(), and G4Pow::logfactorial().

Referenced by GenerateGammaPhi(), and SampleGammaTransition().

◆ operator=()

const G4PolarizationTransition & G4PolarizationTransition::operator= ( const G4PolarizationTransition right)
privatedelete

◆ SampleGammaTransition()

void G4PolarizationTransition::SampleGammaTransition ( G4NuclearPolarization np,
G4int  twoJ1,
G4int  twoJ2,
G4int  L0,
G4int  Lp,
G4double  mpRatio,
G4double cosTheta,
G4double phi 
)

Definition at line 231 of file G4PolarizationTransition.cc.

236{
237 if(nucpol == nullptr) {
238 if(fVerbose > 1) {
239 G4cout << "G4PolarizationTransition::SampleGammaTransition ERROR: "
240 << "cannot update NULL nuclear polarization" << G4endl;
241 }
242 return;
243 }
244 fTwoJ1 = twoJ1; // add abs to remove negative J
245 fTwoJ2 = twoJ2;
246 fLbar = L0;
247 fL = Lp;
248 fDelta = mpRatio;
249 if(fVerbose > 2) {
250 G4cout << "G4PolarizationTransition: 2J1= " << fTwoJ1 << " 2J2= " << fTwoJ2
251 << " Lbar= " << fLbar << " delta= " << fDelta << " Lp= " << fL
252 << G4endl;
253 G4cout << *nucpol << G4endl;
254 }
255
256 const POLAR& pol = nucpol->GetPolarization();
257
258 if(fTwoJ1 == 0) {
259 nucpol->Unpolarize();
260 cosTheta = 2*G4UniformRand() - 1.0;
262 }
263 else {
264 cosTheta = GenerateGammaCosTheta(pol);
265 if(fVerbose > 2) {
266 G4cout << "G4PolarizationTransition::SampleGammaTransition: cosTheta= "
267 << cosTheta << G4endl;
268 }
269 phi = GenerateGammaPhi(cosTheta, pol);
270 if(fVerbose > 2) {
271 G4cout << "G4PolarizationTransition::SampleGammaTransition: phi= "
272 << phi << G4endl;
273 }
274 }
275
276 if(fTwoJ2 == 0) {
277 nucpol->Unpolarize();
278 return;
279 }
280
281 size_t newlength = fTwoJ2+1;
282 //POLAR newPol(newlength);
283 POLAR newPol;
284
285 //map<G4int, map<G4int, G4double> > cache;
286 map<G4int, map<G4int, G4double> >* cachePtr = nullptr;
287 //if(newlength > 10 || pol.size() > 10) cachePtr = &cache;
288
289 for(size_t k2=0; k2<newlength; ++k2) {
290 std::vector<G4complex> npolar;
291 npolar.resize(k2+1, 0);
292 //(newPol[k2]).assign(k2+1, 0);
293 for(size_t k1=0; k1<pol.size(); ++k1) {
294 for(size_t k=0; k<=k1+k2; k+=2) {
295 // TransF3Coefficient takes the most time. Only calculate it once per
296 // (k, k1, k2) triplet, and wait until the last possible moment to do
297 // so. Break out of the inner loops as soon as it is found to be zero.
298 G4double tF3 = 0.;
299 G4bool recalcTF3 = true;
300 for(size_t kappa2=0; kappa2<=k2; ++kappa2) {
301 G4int ll = (pol[k1]).size();
302 for(G4int kappa1 = 1 - ll; kappa1<ll; ++kappa1) {
303 if(k+k2<k1 || k+k1<k2) continue;
304 G4complex tmpAmp = (kappa1 < 0) ?
305 conj((pol[k1])[-kappa1])*(kappa1 % 2 ? -1.: 1.) : (pol[k1])[kappa1];
306 if(std::abs(tmpAmp) < kEps) continue;
307 G4int kappa = kappa1-(G4int)kappa2;
308 tmpAmp *= G4Clebsch::Wigner3J(2*k1, -2*kappa1, 2*k, 2*kappa, 2*k2, 2*kappa2);
309 if(std::abs(tmpAmp) < kEps) continue;
310 if(recalcTF3) {
311 tF3 = GammaTransF3Coefficient(k, k2, k1);
312 recalcTF3 = false;
313 }
314 if(std::abs(tF3) < kEps) break;
315 tmpAmp *= tF3;
316 if(std::abs(tmpAmp) < kEps) continue;
317 tmpAmp *= ((kappa1+(G4int)k1)%2 ? -1. : 1.)
318 * sqrt((2.*k+1.)*(2.*k1+1.)/(2.*k2+1.));
319 //AR-13Jun2017 Useful for debugging very long computations
320 //G4cout << "G4PolarizationTransition::UpdatePolarizationToFinalState : k1=" << k1
321 // << " ; k2=" << k2 << " ; kappa1=" << kappa1 << " ; kappa2=" << kappa2 << G4endl;
322 tmpAmp *= fgLegendrePolys.EvalAssocLegendrePoly(k, kappa, cosTheta, cachePtr);
323 if(kappa != 0) {
324 tmpAmp *= G4Exp(0.5*(LnFactorial(((G4int)k)-kappa)
325 - LnFactorial(((G4int)k)+kappa)));
326 tmpAmp *= polar(1., phi*kappa);
327 }
328 //(newPol[k2])[kappa2] += tmpAmp;
329 npolar[kappa2] += tmpAmp;
330 }
331 if(!recalcTF3 && std::abs(tF3) < kEps) break;
332 }
333 }
334 }
335 newPol.push_back(npolar);
336 }
337
338 // sanity checks
339 if(fVerbose > 2 && 0.0 == newPol[0][0]) {
340 G4cout << "G4PolarizationTransition::SampleGammaTransition WARNING:"
341 << " P[0][0] is zero!" << G4endl;
342 G4cout << "Old pol is: " << *nucpol << G4endl;
343 DumpTransitionData(newPol);
344 G4cout << "Unpolarizing..." << G4endl;
345 nucpol->Unpolarize();
346 return;
347 }
348 if(fVerbose > 2 && std::abs((newPol[0])[0].imag()) > kEps) {
349 G4cout << "G4PolarizationTransition::SampleGammaTransition WARNING: \n"
350 << " P[0][0] has a non-zero imaginary part! Unpolarizing..."
351 << G4endl;
352 nucpol->Unpolarize();
353 return;
354 }
355 if(fVerbose > 2) {
356 G4cout << "Before normalization: " << G4endl;
357 DumpTransitionData(newPol);
358 }
359 // Normalize and trim
360 size_t lastNonEmptyK2 = 0;
361 for(size_t k2=0; k2<newlength; ++k2) {
362 G4int lastNonZero = -1;
363 for(size_t kappa2=0; kappa2<(newPol[k2]).size(); ++kappa2) {
364 if(k2 == 0 && kappa2 == 0) {
365 lastNonZero = 0;
366 continue;
367 }
368 if(std::abs((newPol[k2])[kappa2]) > 0.0) {
369 lastNonZero = kappa2;
370 (newPol[k2])[kappa2] /= (newPol[0])[0];
371 }
372 }
373 while((newPol[k2]).size() != size_t (lastNonZero+1)) (newPol[k2]).pop_back();
374 if((newPol[k2]).size() > 0) lastNonEmptyK2 = k2;
375 }
376
377 // Remove zero-value entries
378 while(newPol.size() != lastNonEmptyK2+1) { newPol.pop_back(); }
379 (newPol[0])[0] = 1.0;
380
381 nucpol->SetPolarization(newPol);
382 if(fVerbose > 2) {
383 G4cout << "Updated polarization: " << *nucpol << G4endl;
384 }
385}
int G4int
Definition: G4Types.hh:85
G4double GenerateGammaCosTheta(const POLAR &)
std::vector< std::vector< G4complex > > POLAR
G4double GammaTransF3Coefficient(G4int K, G4int K2, G4int K1) const
G4double GenerateGammaPhi(G4double &cosTheta, const POLAR &)

References DumpTransitionData(), G4LegendrePolynomial::EvalAssocLegendrePoly(), fDelta, fgLegendrePolys, fL, fLbar, fTwoJ1, fTwoJ2, fVerbose, G4cout, G4endl, G4Exp(), G4UniformRand, GammaTransF3Coefficient(), GenerateGammaCosTheta(), GenerateGammaPhi(), G4NuclearPolarization::GetPolarization(), kEps, LnFactorial(), G4NuclearPolarization::SetPolarization(), CLHEP::twopi, G4NuclearPolarization::Unpolarize(), and G4Clebsch::Wigner3J().

Referenced by G4GammaTransition::SampleDirection().

◆ SetVerbose()

void G4PolarizationTransition::SetVerbose ( G4int  val)
inline

Definition at line 83 of file G4PolarizationTransition.hh.

83{ fVerbose = val; };

References fVerbose.

Referenced by G4GammaTransition::SetVerbose().

Field Documentation

◆ fDelta

G4double G4PolarizationTransition::fDelta
private

◆ fgLegendrePolys

G4LegendrePolynomial G4PolarizationTransition::fgLegendrePolys
private

◆ fL

G4int G4PolarizationTransition::fL
private

◆ fLbar

G4int G4PolarizationTransition::fLbar
private

◆ fTwoJ1

G4int G4PolarizationTransition::fTwoJ1
private

◆ fTwoJ2

G4int G4PolarizationTransition::fTwoJ2
private

◆ fVerbose

G4int G4PolarizationTransition::fVerbose
private

◆ kEps

G4double G4PolarizationTransition::kEps
private

◆ kPolyPDF

G4PolynomialPDF G4PolarizationTransition::kPolyPDF
private

Definition at line 102 of file G4PolarizationTransition.hh.

Referenced by GenerateGammaCosTheta().


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