48#ifndef G4VEmAdjointModel_h
49#define G4VEmAdjointModel_h 1
88 G4bool IsScatProjToProjCase,
99 G4bool IsScatProjToProjCase);
103 G4bool IsScatProjToProjCase);
152 G4int nbin_pro_decade=10
158 G4int nbin_pro_decade=10
164 G4int nbin_pro_decade=10
169 G4int nbin_pro_decade=10
174 inline void SetCSMatrices(std::vector< G4AdjointCSMatrix* >* Vec1CSMatrix, std::vector< G4AdjointCSMatrix* >* Vec2CSMatrix){
246 G4bool IsScatProjToProjCase);
void SetUseMatrixPerElement(G4bool aBool)
size_t currentCoupleIndex
G4double mass_ratio_product
virtual G4double DiffCrossSectionPerVolumePrimToScatPrim(const G4Material *aMaterial, G4double kinEnergyProj, G4double kinEnergyScatProj)
void SetAdjointEquivalentOfDirectSecondaryParticleDefinition(G4ParticleDefinition *aPart)
G4bool GetSecondPartOfSameType()
void SetCSMatrices(std::vector< G4AdjointCSMatrix * > *Vec1CSMatrix, std::vector< G4AdjointCSMatrix * > *Vec2CSMatrix)
virtual ~G4VEmAdjointModel()
G4double lastAdjointCSForProdToProjCase
virtual void SampleSecondaries(const G4Track &aTrack, G4bool IsScatProjToProjCase, G4ParticleChange *fParticleChange)=0
G4double DiffCrossSectionFunction1(G4double kinEnergyProj)
G4VEmModel * theDirectEMModel
void SetUseMatrix(G4bool aBool)
G4bool GetUseOnlyOneMatrixForAllElements()
G4double mass_ratio_projectile
G4double lastAdjointCSForScatProjToProjCase
virtual G4double GetSecondAdjEnergyMaxForProdToProjCase(G4double PrimAdjEnergy)
G4double kinEnergyProjForIntegration
size_t indexOfUsedCrossSectionMatrix
void SelectCSMatrix(G4bool IsScatProjToProjCase)
std::vector< std::vector< double > * > ComputeAdjointCrossSectionVectorPerAtomForSecond(G4double kinEnergyProd, G4double Z, G4double A=0., G4int nbin_pro_decade=10)
virtual void CorrectPostStepWeight(G4ParticleChange *fParticleChange, G4double old_weight, G4double adjointPrimKinEnergy, G4double projectileKinEnergy, G4bool IsScatProjToProjCase)
virtual void SetCSBiasingFactor(G4double aVal)
virtual G4double DiffCrossSectionPerVolumePrimToSecond(const G4Material *aMaterial, G4double kinEnergyProj, G4double kinEnergyProd)
G4ParticleDefinition * GetAdjointEquivalentOfDirectPrimaryParticleDefinition()
G4double GetLowEnergyLimit()
virtual G4double DiffCrossSectionPerAtomPrimToScatPrim(G4double kinEnergyProj, G4double kinEnergyScatProj, G4double Z, G4double A=0.)
G4bool second_part_of_same_type
void SetLowEnergyLimit(G4double aVal)
G4double DiffCrossSectionPerVolumeFunctionForIntegrationOverEkinProj(G4double EkinProd)
std::vector< G4double > CS_Vs_ElementForScatProjToProjCase
void DefineCurrentMaterial(const G4MaterialCutsCouple *couple)
G4ParticleDefinition * GetAdjointEquivalentOfDirectSecondaryParticleDefinition()
G4ParticleDefinition * theDirectPrimaryPartDef
G4double SampleAdjSecEnergyFromCSMatrix(size_t MatrixIndex, G4double prim_energy, G4bool IsScatProjToProjCase)
G4bool GetApplyCutInRange()
virtual G4double GetSecondAdjEnergyMaxForScatProjToProjCase(G4double PrimAdjEnergy)
G4double kinEnergyProdForIntegration
G4double kinEnergyScatProjForIntegration
void SetSecondPartOfSameType(G4bool aBool)
G4double currentTcutForDirectPrim
std::vector< G4AdjointCSMatrix * > * pOnCSMatrixForScatProjToProjBackwardScattering
G4Material * currentMaterial
virtual G4double GetAdjointCrossSection(const G4MaterialCutsCouple *aCouple, G4double primEnergy, G4bool IsScatProjToProjCase)
std::vector< std::vector< double > * > ComputeAdjointCrossSectionVectorPerVolumeForSecond(G4Material *aMaterial, G4double kinEnergyProd, G4int nbin_pro_decade=10)
G4bool UseOnlyOneMatrixForAllElements
virtual G4double GetSecondAdjEnergyMinForProdToProjCase(G4double PrimAdjEnergy)
G4Material * SelectedMaterial
G4bool GetUseMatrixPerElement()
std::vector< G4AdjointCSMatrix * > * pOnCSMatrixForProdToProjBackwardScattering
G4VParticleChange * pParticleChange
void SetUseOnlyOneMatrixForAllElements(G4bool aBool)
G4double DiffCrossSectionFunction2(G4double kinEnergyProj)
std::vector< G4double > CS_Vs_ElementForProdToProjCase
void SetAdjointEquivalentOfDirectPrimaryParticleDefinition(G4ParticleDefinition *aPart)
void DefineDirectEMModel(G4VEmModel *aModel)
std::vector< std::vector< double > * > ComputeAdjointCrossSectionVectorPerVolumeForScatProj(G4Material *aMaterial, G4double kinEnergyProd, G4int nbin_pro_decade=10)
G4double CS_biasing_factor
virtual G4double DiffCrossSectionPerAtomPrimToSecond(G4double kinEnergyProj, G4double kinEnergyProd, G4double Z, G4double A=0.)
G4double currentTcutForDirectSecond
G4MaterialCutsCouple * currentCouple
virtual G4double AdjointCrossSection(const G4MaterialCutsCouple *aCouple, G4double primEnergy, G4bool IsScatProjToProjCase)
virtual G4double SampleAdjSecEnergyFromDiffCrossSectionPerAtom(G4double prim_energy, G4bool IsScatProjToProjCase)
void SetHighEnergyLimit(G4double aVal)
std::vector< std::vector< double > * > ComputeAdjointCrossSectionVectorPerAtomForScatProj(G4double kinEnergyProd, G4double Z, G4double A=0., G4int nbin_pro_decade=10)
G4ParticleDefinition * theAdjEquivOfDirectSecondPartDef
G4double GetHighEnergyLimit()
G4bool UseMatrixPerElement
size_t currentMaterialIndex
void SetApplyCutInRange(G4bool aBool)
virtual G4double GetSecondAdjEnergyMinForScatProjToProjCase(G4double PrimAdjEnergy, G4double Tcut=0)
G4ParticleDefinition * theAdjEquivOfDirectPrimPartDef