Geant4 Cross Reference |
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 91 G4double Wigner3J(G4double j1, G4double j2, G4double j3, 92 G4double m1, G4double m2, G4double m3); 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 105 G4double NormalizedClebschGordan(G4int twoJ, G4int twom, 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 133