Geant4  10.02.p03
XVCrystalPlanarAnalytical Class Referenceabstract

#include <XVCrystalPlanarAnalytical.hh>

Inheritance diagram for XVCrystalPlanarAnalytical:
Collaboration diagram for XVCrystalPlanarAnalytical:

Public Member Functions

void SetNumberOfPlanes (G4int)
 
G4int GetNumberOfPlanes ()
 
virtual G4double ComputeECForSinglePlane (G4double, XPhysicalLattice *)=0
 
G4ThreeVector ComputeEC (G4ThreeVector, XPhysicalLattice *)
 
G4ThreeVector ComputeECFromVector (G4ThreeVector)
 
G4ThreeVector ComputePositionInUnitCell (G4ThreeVector, XPhysicalLattice *)
 
virtual G4double ComputeMaximum (XPhysicalLattice *)
 
virtual G4double ComputeMinimum (XPhysicalLattice *)
 
virtual void PrintOnFile (const G4String &, XPhysicalLattice *, G4double)
 
virtual void ReadFromFile (const G4String &, XPhysicalLattice *, G4double=1)
 
virtual void ReadFromECHARM (const G4String &, G4double=1)
 
void InitializeVector ()
 
 XVCrystalPlanarAnalytical ()
 
 ~XVCrystalPlanarAnalytical ()
 
- Public Member Functions inherited from XVCrystalCharacteristic
XPhysicalLatticeGetXPhysicalLattice (G4VPhysicalVolume *)
 
XUnitCellGetXUnitCell (G4VPhysicalVolume *)
 
XLogicalLatticeGetLogicalLattice (G4VPhysicalVolume *)
 
void InitializePhysicalLattice (XPhysicalLattice *)
 
G4ThreeVector GetEC (G4ThreeVector, XPhysicalLattice *)
 
virtual G4double ComputeTFScreeningRadius (XPhysicalLattice *)
 
virtual G4double GetMaximum (XPhysicalLattice *)
 
virtual G4double GetMinimum (XPhysicalLattice *)
 
G4bool IsInitialized (XPhysicalLattice *)
 
 XVCrystalCharacteristic ()
 
 ~XVCrystalCharacteristic ()
 

Private Attributes

G4int fNumberOfPlanes
 

Additional Inherited Members

- Protected Attributes inherited from XVCrystalCharacteristic
G4double fMaximum
 
G4double fMinimum
 
XPhysicalLatticefPhysicalLattice
 
G4PhysicsVectorfVectorEC
 

Detailed Description

Definition at line 32 of file XVCrystalPlanarAnalytical.hh.

Constructor & Destructor Documentation

◆ XVCrystalPlanarAnalytical()

XVCrystalPlanarAnalytical::XVCrystalPlanarAnalytical ( )

Definition at line 30 of file XVCrystalPlanarAnalytical.cc.

◆ ~XVCrystalPlanarAnalytical()

XVCrystalPlanarAnalytical::~XVCrystalPlanarAnalytical ( )

Definition at line 36 of file XVCrystalPlanarAnalytical.cc.

36  {
37 }

Member Function Documentation

◆ ComputeEC()

G4ThreeVector XVCrystalPlanarAnalytical::ComputeEC ( G4ThreeVector  vPositionVector,
XPhysicalLattice vLattice 
)
virtual

Implements XVCrystalCharacteristic.

Definition at line 54 of file XVCrystalPlanarAnalytical.cc.

55  {
56  G4VPhysicalVolume* vVolume = vLattice->GetVolume();
57 
58  G4double vInterplanarDistance =
60 
61  G4double vPosition = ComputePositionInUnitCell(vPositionVector,
62  vLattice).x();
63 
64  G4double vValue = 0.;
65  for(int i=-int(GetNumberOfPlanes()/2);i<=+int(GetNumberOfPlanes()/2);i++){
66  vValue += ComputeECForSinglePlane( ( vPosition + G4double(i) ) *
67  vInterplanarDistance ,
68  vLattice );
69  }
70 
71  return G4ThreeVector(vValue,0.,0.);
72 }
virtual G4double ComputeECForSinglePlane(G4double, XPhysicalLattice *)=0
CLHEP::Hep3Vector G4ThreeVector
XPhysicalLattice * GetXPhysicalLattice(G4VPhysicalVolume *)
G4ThreeVector ComputePositionInUnitCell(G4ThreeVector, XPhysicalLattice *)
double x() const
double G4double
Definition: G4Types.hh:76
G4double ComputeInterplanarPeriod()
G4VPhysicalVolume * GetVolume()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeECForSinglePlane()

virtual G4double XVCrystalPlanarAnalytical::ComputeECForSinglePlane ( G4double  ,
XPhysicalLattice  
)
pure virtual

Implemented in XCrystalPlanarMoliereElectronDensity, XCrystalPlanarMoliereTempPotential, XCrystalPlanarMoliereElectricField, XCrystalPlanarMolierePotential, and XCrystalPlanarNucleiDensity.

Here is the caller graph for this function:

◆ ComputeECFromVector()

G4ThreeVector XVCrystalPlanarAnalytical::ComputeECFromVector ( G4ThreeVector  vPosition)
virtual

Implements XVCrystalCharacteristic.

Definition at line 77 of file XVCrystalPlanarAnalytical.cc.

77  {
78  G4double vInterplanarPeriod = fPhysicalLattice->ComputeInterplanarPeriod();
79  G4double vX = vPosition.x();
80  if (vX < 0.0) {
81  vX += ((int( - vX / vInterplanarPeriod) + 1.0 )
82  * vInterplanarPeriod);
83  }
84  else if( vX > vInterplanarPeriod ){
85  vX -= ( int( vX / vInterplanarPeriod) * vInterplanarPeriod );
86  }
87  return G4ThreeVector(fVectorEC->Value(vX),0.,0.);
88 }
CLHEP::Hep3Vector G4ThreeVector
XPhysicalLattice * fPhysicalLattice
G4double Value(G4double theEnergy, size_t &lastidx) const
double x() const
double G4double
Definition: G4Types.hh:76
G4double ComputeInterplanarPeriod()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeMaximum()

G4double XVCrystalPlanarAnalytical::ComputeMaximum ( XPhysicalLattice vLattice)
virtual

Reimplemented from XVCrystalCharacteristic.

Reimplemented in XCrystalPlanarMoliereTempPotential, and XCrystalPlanarMolierePotential.

Definition at line 118 of file XVCrystalPlanarAnalytical.cc.

118  {
119  unsigned int vPrecision = 1024;
120  G4VPhysicalVolume* vVolume = vLattice->GetVolume();
122  / vPrecision;
123 
124  G4double vMaximum = -DBL_MAX;
125  G4double vValue;
126 
127  for(unsigned int i=0;i<vPrecision;i++){
128  if( (vValue = GetEC(G4ThreeVector(vStep * i,0.,0.),vLattice).x() )
129  > vMaximum) {vMaximum = vValue;}
130  }
131  return vMaximum;
132 }
CLHEP::Hep3Vector G4ThreeVector
XPhysicalLattice * GetXPhysicalLattice(G4VPhysicalVolume *)
G4ThreeVector GetEC(G4ThreeVector, XPhysicalLattice *)
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
G4double ComputeInterplanarPeriod()
G4VPhysicalVolume * GetVolume()
Here is the call graph for this function:

◆ ComputeMinimum()

G4double XVCrystalPlanarAnalytical::ComputeMinimum ( XPhysicalLattice vLattice)
virtual

Reimplemented from XVCrystalCharacteristic.

Reimplemented in XCrystalPlanarMoliereTempPotential, and XCrystalPlanarMolierePotential.

Definition at line 136 of file XVCrystalPlanarAnalytical.cc.

136  {
137  unsigned int vPrecision = 1024;
138  G4VPhysicalVolume* vVolume = vLattice->GetVolume();
140  / vPrecision;
141 
142  G4double vMinimum = +DBL_MAX;
143  G4double vValue;
144 
145  for(unsigned int i=0;i<vPrecision;i++){
146  if( (vValue = GetEC(G4ThreeVector(vStep * i,0.,0.),vLattice).x() )
147  < vMinimum) {vMinimum = vValue;}
148  }
149  return vMinimum;
150 }
CLHEP::Hep3Vector G4ThreeVector
XPhysicalLattice * GetXPhysicalLattice(G4VPhysicalVolume *)
G4ThreeVector GetEC(G4ThreeVector, XPhysicalLattice *)
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
G4double ComputeInterplanarPeriod()
G4VPhysicalVolume * GetVolume()
Here is the call graph for this function:

◆ ComputePositionInUnitCell()

G4ThreeVector XVCrystalPlanarAnalytical::ComputePositionInUnitCell ( G4ThreeVector  vPosition,
XPhysicalLattice vLattice 
)
virtual

Reimplemented from XVCrystalCharacteristic.

Definition at line 93 of file XVCrystalPlanarAnalytical.cc.

94  {
95  G4VPhysicalVolume* vVolume = vLattice->GetVolume();
96 
97  G4double vInterplanarPeriod =
99 
100  G4double vPositionX = vPosition.x();
101 
102  if((vPositionX >= 0.) &&
103  (vPositionX < vInterplanarPeriod)){
104  return G4ThreeVector(vPositionX/vInterplanarPeriod,0.,0.);
105  }
106  else if(vPositionX == vInterplanarPeriod){
107  return G4ThreeVector(0.,0.,0.);
108  }
109  else{
110  vPositionX -= std::fmod(vPosition.x(),vInterplanarPeriod)
111  * vInterplanarPeriod;
112  return G4ThreeVector(vPositionX/vInterplanarPeriod,0.,0.);
113  }
114 }
CLHEP::Hep3Vector G4ThreeVector
XPhysicalLattice * GetXPhysicalLattice(G4VPhysicalVolume *)
double x() const
double G4double
Definition: G4Types.hh:76
G4double ComputeInterplanarPeriod()
G4VPhysicalVolume * GetVolume()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNumberOfPlanes()

G4int XVCrystalPlanarAnalytical::GetNumberOfPlanes ( )

Definition at line 47 of file XVCrystalPlanarAnalytical.cc.

47  {
48  return fNumberOfPlanes;
49 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ InitializeVector()

void XVCrystalPlanarAnalytical::InitializeVector ( )
virtual

Implements XVCrystalCharacteristic.

Definition at line 248 of file XVCrystalPlanarAnalytical.cc.

248  {
249  G4int imax = 4096;
250  G4double vXposition = 0.;
251  G4double vInterplanarPeriod = fPhysicalLattice->ComputeInterplanarPeriod();
252 
254  vInterplanarPeriod*(imax-1)/imax,
255  imax);
256  for(G4int i = 0;i<imax;i++){
257  vXposition = double(i) / double(imax) * vInterplanarPeriod;
258  fVectorEC->PutValue(i,ComputeEC(G4ThreeVector(vXposition,0.,0.),
259  fPhysicalLattice).x());
260  }
261 }
CLHEP::Hep3Vector G4ThreeVector
int G4int
Definition: G4Types.hh:78
XPhysicalLattice * fPhysicalLattice
void PutValue(size_t index, G4double theValue)
G4ThreeVector ComputeEC(G4ThreeVector, XPhysicalLattice *)
static const G4int imax
double G4double
Definition: G4Types.hh:76
G4double ComputeInterplanarPeriod()
Here is the call graph for this function:

◆ PrintOnFile()

void XVCrystalPlanarAnalytical::PrintOnFile ( const G4String filename,
XPhysicalLattice vLattice,
G4double  vUnit 
)
virtual

Implements XVCrystalCharacteristic.

Definition at line 154 of file XVCrystalPlanarAnalytical.cc.

156  {
157  std::ofstream vFileOut;
158  vFileOut.open(filename);
159  vFileOut << "pos val" << std::endl;
160 
161  G4int imax = 8192;
162  G4double vXposition = 0.;
163  G4double vInterplanarPeriod = vLattice->ComputeInterplanarPeriod();
164 
165  for(G4int i = 0;i<imax;i++){
166  vXposition = double(i) / double(imax) * vInterplanarPeriod;
167  vFileOut << vXposition / CLHEP::angstrom << " ";
168  vFileOut << GetEC(G4ThreeVector(vXposition,0.,0.),vLattice).x() / vUnit;
169  vFileOut << std::endl;
170  }
171 
172  vFileOut.close();
173 }
CLHEP::Hep3Vector G4ThreeVector
int G4int
Definition: G4Types.hh:78
static const double angstrom
Definition: SystemOfUnits.h:81
double x() const
G4ThreeVector GetEC(G4ThreeVector, XPhysicalLattice *)
static const G4int imax
double G4double
Definition: G4Types.hh:76
G4double ComputeInterplanarPeriod()
Here is the call graph for this function:

◆ ReadFromECHARM()

void XVCrystalPlanarAnalytical::ReadFromECHARM ( const G4String filename,
G4double  vConversion = 1 
)
virtual

Implements XVCrystalCharacteristic.

Definition at line 211 of file XVCrystalPlanarAnalytical.cc.

212  {
213  std::ifstream vFileIn;
214  vFileIn.open(filename);
215 
216  G4int imax;
217  G4double xmax;
218 
219  vFileIn >> imax;
220  vFileIn >> xmax;
221 
222  xmax *= CLHEP::meter;
223  fMaximum = -DBL_MAX;
224  fMinimum = +DBL_MAX;
225 
226  fVectorEC = new G4PhysicsLinearVector(0,xmax,imax);
227 
228  for(G4int i=0;i<imax; i++){
229  double vTempX;
230  vFileIn >> vTempX;
231 
232  vTempX *= vConversion;
233  if(vTempX > fMaximum) {fMaximum = vTempX;}
234  if(vTempX < fMinimum) {fMinimum = vTempX;}
235  fVectorEC->PutValue(i,vTempX);
236  }
237 
238  G4cout << "XVCrystalPlanarAnalytical::ReadFromECHARM() - " <<
239  vConversion << " " << imax << " " << xmax << " " <<
240  fMinimum << " " << fMaximum << G4endl;
241 
242  vFileIn.close();
243 
244 }
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
void PutValue(size_t index, G4double theValue)
static const double meter
Definition: SystemOfUnits.h:69
#define G4endl
Definition: G4ios.hh:61
static const G4int imax
double G4double
Definition: G4Types.hh:76
#define DBL_MAX
Definition: templates.hh:83
Here is the call graph for this function:

◆ ReadFromFile()

void XVCrystalPlanarAnalytical::ReadFromFile ( const G4String filename,
XPhysicalLattice ,
G4double  = 1 
)
virtual

Implements XVCrystalCharacteristic.

Definition at line 177 of file XVCrystalPlanarAnalytical.cc.

178  {
179  std::ifstream vFileIn;
180  vFileIn.open(filename);
181  std::string vTempString;
182  vFileIn >> vTempString >> vTempString;
183 
184  double vTempX;
185  double vTempVal;
186  std::vector<double> vTempXvector;
187  std::vector<double> vTempValvector;
188 
189  while(!vFileIn.eof()){
190  vFileIn >> vTempX;
191  vFileIn >> vTempVal;
192  vTempXvector.push_back(vTempX);
193  vTempValvector.push_back(vTempVal);
194  }
195 
196  vFileIn.close();
197 
198  G4int imax = vTempXvector.size();
199  G4double vInterplanarPeriod = vTempXvector.at(imax-1);
200 
202  vInterplanarPeriod*(imax-1)/imax,
203  imax);
204  for(G4int i = 0;i<imax;i++){
205  fVectorEC->PutValue(i,vTempValvector.at(i));
206  }
207 }
int G4int
Definition: G4Types.hh:78
void PutValue(size_t index, G4double theValue)
static const G4int imax
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ SetNumberOfPlanes()

void XVCrystalPlanarAnalytical::SetNumberOfPlanes ( G4int  vNumberOfPlanes)

Definition at line 41 of file XVCrystalPlanarAnalytical.cc.

41  {
42  fNumberOfPlanes = vNumberOfPlanes;
43 }

Member Data Documentation

◆ fNumberOfPlanes

G4int XVCrystalPlanarAnalytical::fNumberOfPlanes
private

Definition at line 35 of file XVCrystalPlanarAnalytical.hh.


The documentation for this class was generated from the following files: