66 #ifndef G4VEmProcess_h
67 #define G4VEmProcess_h 1
219 size_t& idxRegion)
const;
307 void BuildLambdaTable();
309 void FindLambdaMax();
313 inline void ComputeIntegralLambda(
G4double kinEnergy);
340 std::vector<G4VEmModel*> emModels;
341 G4int numberOfModels;
346 std::vector<G4double> theEnergyOfCrossSectionMax;
347 std::vector<G4double> theCrossSectionMax;
349 const std::vector<G4double>* theCuts;
350 const std::vector<G4double>* theCutsGamma;
351 const std::vector<G4double>* theCutsElectron;
352 const std::vector<G4double>* theCutsPositron;
353 const std::vector<G4double>* theDensityFactor;
354 const std::vector<G4int>* theDensityIdx;
378 std::vector<G4DynamicParticle*> secParticles;
389 size_t currentCoupleIndex;
390 size_t basedCoupleIndex;
406 return currentCoupleIndex;
413 return (*theCutsGamma)[currentCoupleIndex];
420 return (*theCutsElectron)[currentCoupleIndex];
427 if(couple != currentCouple) {
428 currentCouple = couple;
431 currentCoupleIndex = couple->
GetIndex();
432 basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
433 fFactor = biasFactor*(*theDensityFactor)[currentCoupleIndex];
434 if(!baseMaterial) { baseMaterial = currentMaterial; }
444 if(1 < numberOfModels) {
445 currentModel = modelManager->
SelectModel(kinEnergy, index);
455 size_t& idxRegion)
const
457 return modelManager->
SelectModel(kinEnergy, idxRegion);
464 return ((*theLambdaTable)[basedCoupleIndex])->Value(e);
471 return ((*theLambdaTablePrim)[basedCoupleIndex])->Value(e)/
e;
479 e,(*theCuts)[currentCoupleIndex]);
487 if(e >= minKinEnergyPrim) { x = GetLambdaFromTablePrim(e); }
488 else if(theLambdaTable) { x = GetLambdaFromTable(e); }
489 else { x = ComputeCurrentLambda(e); }
499 DefineMaterial(couple);
501 return GetCurrentLambda(kinEnergy);
509 DefineMaterial(couple);
511 return fFactor*ComputeCurrentLambda(e);
516 inline void G4VEmProcess::ComputeIntegralLambda(
G4double e)
518 mfpKinEnergy = theEnergyOfCrossSectionMax[currentCoupleIndex];
519 if (e <= mfpKinEnergy) {
520 preStepLambda = GetCurrentLambda(e);
524 if(e1 > mfpKinEnergy) {
525 preStepLambda = GetCurrentLambda(e);
526 G4double preStepLambda1 = GetCurrentLambda(e1);
527 if(preStepLambda1 > preStepLambda) {
529 preStepLambda = preStepLambda1;
532 preStepLambda = fFactor*theCrossSectionMax[currentCoupleIndex];
569 minKinEnergyPrim =
e;
576 if(val < 0.0) { polarAngleLimit = 0.0; }
577 else if(val > CLHEP::pi) { polarAngleLimit = CLHEP::pi; }
578 else { polarAngleLimit = val; }
585 return polarAngleLimit;
599 return theLambdaTable;
613 return secondaryParticle;
620 if(val > 0.0 && val <= 1.0) { lambdaFactor = val; }
627 if(particle && particle != theGamma) { integral = val; }
648 buildLambdaTable = val;
670 secondaryParticle =
p;