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 // V.Ivanchenko left only polarization tensor and add operators 36 // 37 // ------------------------------------------------------------------- 38 39 #include "G4NuclearPolarization.hh" 40 #include <iomanip> 41 42 G4NuclearPolarization::G4NuclearPolarization(G4int Z, G4int A, G4double exc) 43 : fZ(Z), fA(A), fExcEnergy(exc) 44 { 45 Unpolarize(); 46 //G4cout << "NP: new " << this << G4endl; 47 } 48 49 G4NuclearPolarization::~G4NuclearPolarization() 50 { 51 //G4cout << "NP: delete " << this << G4endl; 52 Clean(); 53 } 54 55 void G4NuclearPolarization::Clean() 56 { 57 if(!fPolarization.empty()) { 58 for(auto & pol : fPolarization) { 59 pol.clear(); 60 } 61 fPolarization.clear(); 62 } 63 } 64 65 G4bool G4NuclearPolarization::operator==(const G4NuclearPolarization &right) const 66 { 67 return (fZ == right.fZ && fA == right.fA && fExcEnergy == right.fExcEnergy 68 && fPolarization == right.fPolarization); 69 } 70 71 G4bool G4NuclearPolarization::operator!=(const G4NuclearPolarization &right) const 72 { 73 return (fZ != right.fZ || fA != right.fA || fExcEnergy != right.fExcEnergy 74 || fPolarization != right.fPolarization); 75 } 76 77 std::ostream& operator<<(std::ostream& out, const G4NuclearPolarization& p) 78 { 79 out << "G4NuclearPolarization: Z= " << p.fZ << " A= " << p.fA << " Exc(MeV)= " 80 << p.fExcEnergy << G4endl; 81 out << " P = [ {"; 82 size_t kk = p.fPolarization.size(); 83 for(size_t k=0; k<kk; ++k) { 84 if(k>0) { out << " {"; } 85 size_t kpmax = (p.fPolarization[k]).size(); 86 for(size_t kappa=0; kappa<kpmax; ++kappa) { 87 if(kappa > 0) { out << "} {"; } 88 out << p.fPolarization[k][kappa].real() << " + " 89 << p.fPolarization[k][kappa].imag() << "*i"; 90 } 91 if(k+1 < kk) { out << "}" << G4endl; } 92 } 93 out << "} ]" << G4endl; 94 return out; 95 } 96