Geant4 Cross Reference |
1 // ******************************************************************** 2 // * License and Disclaimer * 3 // * * 4 // * The Geant4 software is copyright of the Copyright Holders of * 5 // * the Geant4 Collaboration. It is provided under the terms and * 6 // * conditions of the Geant4 Software License, included in the file * 7 // * LICENSE and available at http://cern.ch/geant4/license . These * 8 // * include a list of copyright holders. * 9 // * * 10 // * Neither the authors of this software system, nor their employing * 11 // * institutes,nor the agencies providing financial support for this * 12 // * work make any representation or warranty, express or implied, * 13 // * regarding this software system or assume any liability for its * 14 // * use. Please see the license in the file LICENSE and URL above * 15 // * for the full disclaimer and the limitation of liability. * 16 // * * 17 // * This code implementation is the result of the scientific and * 18 // * technical work of the GEANT4 collaboration. * 19 // * By using, copying, modifying or distributing the software (or * 20 // * any work based on the software) you agree to acknowledge its * 21 // * use in resulting scientific publications, and indicate your * 22 // * acceptance of all terms of the Geant4 Software license. * 23 // ******************************************************************** 24 // 25 // 26 // ------------------------------------------------------------------- 27 // GEANT4 Class file 28 // 29 // File name: G4NuclearPolarization 30 // 31 // Author: Jason Detwiler (jasondet@gmail.com) 32 // 33 // Creation date: Aug 2015 34 // 35 // Description: 36 // Stores the statistical tensor describing the nuclear polarization 37 // (see Alder and Winther, "Electromagnetic Excitation" (1975), 38 // Appendix F). 39 // 40 // V.Ivanchenko left only polarization tensor and access methods 41 // in this class, also add operators 42 // this allows future implemention of polarized 43 // hadronic models with polarized initial and 44 // final states 45 // 46 // ------------------------------------------------------------------- 47 48 #ifndef G4NUCLEARPOLARIZATION_HH 49 #define G4NUCLEARPOLARIZATION_HH 50 51 #include "globals.hh" 52 #include <vector> 53 54 class G4NuclearPolarization 55 { 56 public: 57 58 explicit G4NuclearPolarization(G4int Z, G4int A, G4double exc); 59 60 ~G4NuclearPolarization(); 61 62 inline void Unpolarize() 63 { 64 Clean(); 65 fPolarization.resize(1); 66 fPolarization[0].push_back(1.0); 67 } 68 69 inline void SetPolarization(std::vector< std::vector<G4complex> >& p) 70 { 71 Clean(); 72 for(auto & pol : p) { 73 fPolarization.push_back(pol); 74 } 75 } 76 77 inline std::vector< std::vector<G4complex> >& GetPolarization() 78 { 79 return fPolarization; 80 } 81 82 inline G4int GetZ() const 83 { 84 return fZ; 85 } 86 87 inline G4int GetA() const 88 { 89 return fA; 90 } 91 92 inline G4double GetExcitationEnergy() const 93 { 94 return fExcEnergy; 95 } 96 97 inline void SetExcitationEnergy(G4double val) 98 { 99 fExcEnergy = val; 100 } 101 102 // ============= OPERATORS ================== 103 104 inline G4NuclearPolarization & operator=(const G4NuclearPolarization &right) 105 { 106 if (this != &right) { 107 fZ = right.fZ; 108 fA = right.fA; 109 fExcEnergy = right.fExcEnergy; 110 fPolarization = right.fPolarization; 111 } 112 return *this; 113 } 114 115 inline G4NuclearPolarization(const G4NuclearPolarization &right ) 116 { 117 *this = right; 118 } 119 120 G4bool operator==(const G4NuclearPolarization &right) const; 121 G4bool operator!=(const G4NuclearPolarization &right) const; 122 123 friend std::ostream& operator<<(std::ostream&, const G4NuclearPolarization&); 124 125 private: 126 127 void Clean(); 128 129 G4int fZ; 130 G4int fA; 131 G4double fExcEnergy; 132 std::vector< std::vector<G4complex> > fPolarization; 133 }; 134 135 #endif 136