Geant4  10.02.p02
G4Clebsch.hh
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 //
27 // -------------------------------------------------------------------
28 // GEANT4 Class file
29 //
30 //
31 // File name: G4Clebsch
32 //
33 // Author: Maria Grazia Pia (MariaGrazia.Pia@genova.infn.it)
34 //
35 // Creation date: 15 April 1999
36 //
37 // Modifications: February 2015, Jason Detwiler (jasondet@gmail.com)
38 // - Update variable names to clarify that twice
39 // the spin value is being used.
40 // - Add function to obtain raw CG coeffients
41 // - Speed up Wigner 3j evaluation by removing
42 // reallocation of vector<double>'s on every call
43 // - Use G4Pow instead of internal logs variable
44 // - Add functions for Wigner 6j and 9j symbols,
45 // Racah coefficients, and d-Matrices
46 // - Make functions statically available
47 // - Eliminate unnecessary constructors, destructors,
48 // operators (class has no members, so default versions
49 // are adequate)
50 // 11.06.2015 V.Ivanchenko adopted for Geant4 source
51 //
52 // Clebsch-Gordan coefficient and related algebra
53 //
54 // -------------------------------------------------------------------
55 
56 #ifndef G4CLEBSCH_HH
57 #define G4CLEBSCH_HH
58 
59 #include "globals.hh"
60 #include <vector>
61 
62 class G4Clebsch
63 {
64 public:
65  // Calculates the standard Clebsch-Gordan coefficient with Condon-Shortley
66  // phase convention.
67  static
68  G4double ClebschGordanCoeff(G4int twoJ1, G4int twoM1,
69  G4int twoJ2, G4int twoM2,
70  G4int twoJ);
71 
72  // Calculates the square of the corresponding Clebsch-Gordan coefficient
73  static
74  G4double ClebschGordan(G4int twoJ1, G4int twoM1,
75  G4int twoJ2, G4int twoM2,
76  G4int twoJ);
77 
78  static
79  std::vector<G4double> GenerateIso3(G4int twoJ1, G4int twoM1,
80  G4int twoJ2, G4int twoM2,
81  G4int twoJOut1, G4int twoJOut2);
82 
83  static
84  G4double Weight(G4int twoJ1, G4int twoM1,
85  G4int twoJ2, G4int twoM2,
86  G4int twoJOut1, G4int twoJOut2);
87 
88  // Deprecated G4double version of Wigner3J that assumes user sent in half-int
89  // values. Use G4int version instead, which guarantees validity of arguments.
90  static
93 
94  // Wigner's 3J symbols (CG-coeffs with a different phase and normalization)
95  static G4double Wigner3J(G4int twoJ1, G4int twoM1,
96  G4int twoJ2, G4int twoM2,
97  G4int twoJ3);
98  static G4double Wigner3J(G4int twoJ1, G4int twoM1,
99  G4int twoJ2, G4int twoM2,
100  G4int twoJ3, G4int twoM3);
101 
102  // Calculates the normalized Clebsch-Gordan coefficient, that is the prob
103  // of isospin decomposition of (J,m) into J1, J2, m1, m2
104  static
106  G4int twoJ1, G4int twoJ2,
107  G4int twom1, G4int twom2);
108 
109  // Triangle coefficient appearing in explicit calculation of CG-coeffs
110  static G4double TriangleCoeff(G4int twoA, G4int twoB, G4int twoC);
111 
112  // Wigner's 6J symbols (generalization of CG's for coupling of 3 angular momenta).
113  static G4double Wigner6J(G4int twoJ1, G4int twoJ2, G4int twoJ3,
114  G4int twoJ4, G4int twoJ5, G4int twoJ6);
115 
116  // Racah's W Coeffs (6J's with a different phase and normalization)
117  static G4double RacahWCoeff(G4int twoJ1, G4int twoJ2,
118  G4int twoJ, G4int twoJ3,
119  G4int twoJ12, G4int twoJ23);
120 
121  // Wigner's 9J symbols (generalization of CG's for coupling of 4 angular momenta).
122  static G4double Wigner9J(G4int twoJ1, G4int twoJ2, G4int twoJ3,
123  G4int twoJ4, G4int twoJ5, G4int twoJ6,
124  G4int twoJ7, G4int twoJ8, G4int twoJ9);
125 
126  // Wigner's little-d matrix
127  static G4double WignerLittleD(G4int twoJ, G4int twoM, G4int twoN,
128  G4double cosTheta);
129 };
130 
131 #endif
132 
static G4double Weight(G4int twoJ1, G4int twoM1, G4int twoJ2, G4int twoM2, G4int twoJOut1, G4int twoJOut2)
Definition: G4Clebsch.cc:320
static const double m3
Definition: G4SIunits.hh:130
static G4double ClebschGordanCoeff(G4int twoJ1, G4int twoM1, G4int twoJ2, G4int twoM2, G4int twoJ)
Definition: G4Clebsch.cc:37
int G4int
Definition: G4Types.hh:78
static G4double TriangleCoeff(G4int twoA, G4int twoB, G4int twoC)
Definition: G4Clebsch.cc:407
static G4double RacahWCoeff(G4int twoJ1, G4int twoJ2, G4int twoJ, G4int twoJ3, G4int twoJ12, G4int twoJ23)
static G4double NormalizedClebschGordan(G4int twoJ, G4int twom, G4int twoJ1, G4int twoJ2, G4int twom1, G4int twom2)
Definition: G4Clebsch.cc:380
static const double m2
Definition: G4SIunits.hh:129
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
static std::vector< G4double > GenerateIso3(G4int twoJ1, G4int twoM1, G4int twoJ2, G4int twoM2, G4int twoJOut1, G4int twoJOut2)
Definition: G4Clebsch.cc:116
static G4double Wigner3J(G4double j1, G4double j2, G4double j3, G4double m1, G4double m2, G4double m3)
Definition: G4Clebsch.cc:345
static G4double ClebschGordan(G4int twoJ1, G4int twoM1, G4int twoJ2, G4int twoM2, G4int twoJ)
Definition: G4Clebsch.cc:106
static G4double Wigner6J(G4int twoJ1, G4int twoJ2, G4int twoJ3, G4int twoJ4, G4int twoJ5, G4int twoJ6)
Definition: G4Clebsch.cc:432
double G4double
Definition: G4Types.hh:76
static G4double WignerLittleD(G4int twoJ, G4int twoM, G4int twoN, G4double cosTheta)
Definition: G4Clebsch.cc:609