55    G4cout << 
"*******************************************************************************" << 
G4endl;
 
   56    G4cout << 
"*******************************************************************************" << 
G4endl;
 
   57    G4cout << 
"   The name of the class G4MuElecElasticModel is changed to G4MicroElecElasticModel. " << 
G4endl;
 
   58    G4cout << 
"   The obsolete class will be REMOVED with the next release of Geant4. " << 
G4endl;
 
   59    G4cout << 
"*******************************************************************************" << 
G4endl;
 
   60    G4cout << 
"*******************************************************************************" << 
G4endl;
 
   82     G4cout << 
"MuElec Elastic model is constructed " << G4endl
 
   97   std::map< G4String,G4MuElecCrossSectionDataSet*,std::less<G4String> >::iterator 
pos;
 
  117     G4cout << 
"Calling G4MuElecElasticModel::Initialise()" << 
G4endl;
 
  123     G4cout << 
"G4MuElecElasticModel: low energy limit increased from " <<
 
  130     G4cout << 
"G4MuElecElasticModel: high energy limit decreased from " <<
 
  139   G4String fileElectron(
"microelec/sigma_elastic_e_Si");
 
  156     char *path = getenv(
"G4LEDATA");
 
  164     std::ostringstream eFullFileName;
 
  165     eFullFileName << path << 
"/microelec/sigmadiff_elastic_e_Si.dat";
 
  166     std::ifstream eDiffCrossSection(eFullFileName.str().c_str());
 
  168     if (!eDiffCrossSection)
 
  169         G4Exception(
"G4MuElecElasticModel::Initialise",
"em0003",
FatalException,
"Missing data file: /microelec/sigmadiff_elastic_e_Si.dat");
 
  173     while(!eDiffCrossSection.eof())
 
  177         eDiffCrossSection>>tDummy>>eDummy;
 
  183           eVecm[tDummy].push_back(0.);
 
  189         if (!eDiffCrossSection.eof()) eDiffCrossSectionData[tDummy][eDummy]*=scaleFactor;
 
  191         if (eDummy != 
eVecm[tDummy].back()) 
eVecm[tDummy].push_back(eDummy);
 
  198     G4cout << 
"Loaded cross section files for MuElec Elastic model" << 
G4endl;
 
  202     G4cout << 
"MuElec Elastic model is initialized " << G4endl
 
  225     G4cout << 
"Calling CrossSectionPerVolume() of G4MuElecElasticModel" << 
G4endl;
 
  243         std::map< G4String,G4MuElecCrossSectionDataSet*,std::less<G4String> >::iterator 
pos;
 
  256             G4Exception(
"G4MuElecElasticModel::ComputeCrossSectionPerVolume",
"em0002",
FatalException,
"Model not applicable to particle type.");
 
  264     G4cout << 
" - Cross section per Si atom (cm^-1)=" << sigma*density/(1./
cm) << G4endl;
 
  282     G4cout << 
"Calling SampleSecondaries() of G4MuElecElasticModel" << 
G4endl;
 
  303     G4double xDir = std::sqrt(1. - cosTheta*cosTheta);
 
  305     xDir *= std::cos(phi);
 
  306     yDir *= std::sin(phi);
 
  308     G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers));
 
  338     std::vector<double>::iterator t2 = std::upper_bound(eTdummyVec.begin(),eTdummyVec.end(), k);
 
  339     std::vector<double>::iterator t1 = t2-1;
 
  341     std::vector<double>::iterator e12 = std::upper_bound(eVecm[(*t1)].begin(),eVecm[(*t1)].end(), integrDiff);
 
  342     std::vector<double>::iterator e11 = e12-1;
 
  344     std::vector<double>::iterator e22 = std::upper_bound(eVecm[(*t2)].begin(),eVecm[(*t2)].end(), integrDiff);
 
  345     std::vector<double>::iterator e21 = e22-1;
 
  354     xs11 = eDiffCrossSectionData[valueT1][valueE11];
 
  355     xs12 = eDiffCrossSectionData[valueT1][valueE12];
 
  356     xs21 = eDiffCrossSectionData[valueT2][valueE21];
 
  357     xs22 = eDiffCrossSectionData[valueT2][valueE22];
 
  361   if (xs11==0 || xs12==0 ||xs21==0 ||xs22==0) 
return (0.);
 
  363   theta = QuadInterpolator(  valueE11, valueE12,
 
  395   G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1));
 
  396   G4double b = std::log10(xs2) - a*std::log10(e2);
 
  397   G4double sigma = a*std::log10(e) + b;
 
  398   G4double value = (std::pow(10.,sigma));
 
  424  integrdiff = uniformRand;
 
  430  cosTheta= std::cos(theta*
pi/180);
 
static G4Electron * ElectronDefinition()
 
G4double LowEnergyLimit() const 
 
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
 
virtual G4double FindValue(G4double e, G4int componentId=0) const 
 
G4double GetKineticEnergy() const 
 
CLHEP::Hep3Vector G4ThreeVector
 
std::vector< double > eTdummyVec
 
G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
 
G4double HighEnergyLimit() const 
 
virtual G4bool LoadData(const G4String &argFileName)
 
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
 
static G4NistManager * Instance()
 
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
 
virtual ~G4MuElecElasticModel()
 
const G4String & GetParticleName() const 
 
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
 
G4double RandomizeCosTheta(G4double k)
 
void SetHighEnergyLimit(G4double)
 
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
 
G4GLOB_DLL std::ostream G4cout
 
G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2)
 
const G4ThreeVector & GetMomentumDirection() const 
 
G4double lowEnergyLimitOfModel
 
G4MuElecElasticModel(const G4ParticleDefinition *p=0, const G4String &nam="MuElecElasticModel")
 
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy)
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
G4double Theta(G4ParticleDefinition *aParticleDefinition, G4double k, G4double integrDiff)
 
TriDimensionMap eDiffCrossSectionData
 
G4double G4Exp(G4double initial_x)
Exponential Function double precision. 
 
G4double GetTotNbOfAtomsPerVolume() const 
 
const G4Material * GetBaseMaterial() const 
 
G4ParticleChangeForGamma * fParticleChangeForGamma
 
void SetProposedKineticEnergy(G4double proposedKinEnergy)
 
void ProposeTrackStatus(G4TrackStatus status)
 
void SetLowEnergyLimit(G4double)
 
G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, G4double t, G4double e)
 
static const G4double pos
 
G4ParticleChangeForGamma * GetParticleChangeForGamma()