ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Clebsch.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4Clebsch.hh
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