Warning, file /include/Geant4/G4Fancy3DNucleus.hh was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 #ifndef G4Fancy3DNucleus_h
0027 #define G4Fancy3DNucleus_h 1
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 #include "globals.hh"
0042 #include "G4DynamicParticle.hh"
0043 #include "G4Nucleon.hh"
0044 #include "G4V3DNucleus.hh"
0045 #include "G4VNuclearDensity.hh"
0046 #include "G4FermiMomentum.hh"
0047 #include <vector>
0048
0049 class G4Fancy3DNucleusHelper;
0050
0051
0052
0053
0054 class G4Fancy3DNucleus : public G4V3DNucleus
0055 {
0056
0057 public:
0058 G4Fancy3DNucleus();
0059 ~G4Fancy3DNucleus();
0060
0061 private:
0062 G4Fancy3DNucleus(const G4Fancy3DNucleus &right);
0063 const G4Fancy3DNucleus & operator=(const G4Fancy3DNucleus &right);
0064 G4bool operator==(const G4Fancy3DNucleus &right) const;
0065 G4bool operator!=(const G4Fancy3DNucleus &right) const;
0066
0067
0068
0069 void ChooseNucleons();
0070 void ChoosePositions();
0071 void ChooseFermiMomenta();
0072 G4double BindingEnergy();
0073 G4bool ReduceSum();
0074
0075 public:
0076 #if defined(NON_INTEGER_A_Z)
0077 void Init(G4double theA, G4double theZ, G4int numberOfLambdas = 0);
0078 #endif
0079 void Init(G4int theA, G4int theZ, G4int numberOfLambdas = 0);
0080 G4bool StartLoop();
0081 G4Nucleon * GetNextNucleon();
0082 const std::vector<G4Nucleon> & GetNucleons();
0083 G4int GetMassNumber();
0084 G4double GetMass();
0085 G4int GetCharge();
0086 G4int GetNumberOfLambdas();
0087 G4double GetNuclearRadius();
0088 G4double GetNuclearRadius(const G4double maxRelativeDensity);
0089 G4double GetOuterRadius();
0090 G4double AddExcitationEnergy(G4double);
0091 G4double GetExcitationEnergy();
0092 G4double CoulombBarrier();
0093 void DoLorentzBoost(const G4LorentzVector & theBoost);
0094 void DoLorentzBoost(const G4ThreeVector & theBeta);
0095 void DoLorentzContraction(const G4LorentzVector & theBoost);
0096 void DoLorentzContraction(const G4ThreeVector & theBeta);
0097 void CenterNucleons();
0098 void DoTranslation(const G4ThreeVector & theShift);
0099 const G4VNuclearDensity * GetNuclearDensity() const;
0100 void SortNucleonsIncZ();
0101 void SortNucleonsDecZ();
0102
0103 private:
0104
0105 G4int myA;
0106 G4int myZ;
0107 G4int myL;
0108 std::vector<G4Nucleon> theNucleons;
0109
0110 G4int currentNucleon;
0111 G4VNuclearDensity * theDensity;
0112 G4FermiMomentum theFermi;
0113 G4double nucleondistance;
0114 G4double excitationEnergy;
0115
0116 std::vector<G4ThreeVector> places;
0117 std::vector<G4ThreeVector> momentum;
0118 std::vector<G4double> fermiM;
0119 std::vector<G4Fancy3DNucleusHelper> testSums;
0120 };
0121
0122
0123 inline G4int G4Fancy3DNucleus::GetCharge()
0124 {
0125 return myZ;
0126 }
0127
0128 inline G4int G4Fancy3DNucleus::GetMassNumber()
0129 {
0130 return myA;
0131 }
0132
0133 inline G4int G4Fancy3DNucleus::GetNumberOfLambdas()
0134 {
0135 return myL;
0136 }
0137
0138 inline G4double G4Fancy3DNucleus::AddExcitationEnergy(G4double anE)
0139 {
0140 excitationEnergy +=anE;
0141 return excitationEnergy;
0142 }
0143
0144 inline G4double G4Fancy3DNucleus::GetExcitationEnergy()
0145 {
0146 return excitationEnergy;
0147 }
0148
0149 #endif