Ignore:
Timestamp:
Apr 20, 2009, 4:53:50 PM (15 years ago)
Author:
garnier
Message:

fichier oublies

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/utils/include/G4VEmProcess.hh

    r991 r1005  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VEmProcess.hh,v 1.47 2008/07/31 13:01:26 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-02 $
     26// $Id: G4VEmProcess.hh,v 1.50 2009/02/19 09:57:36 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02-ref-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    108108
    109109  //------------------------------------------------------------------------
    110   // Methods with standard implementation; may be overwritten if needed
    111   //------------------------------------------------------------------------
    112 
    113   inline G4double RecalculateLambda(G4double kinEnergy,
    114                                     const G4MaterialCutsCouple* couple);
    115 
    116   //------------------------------------------------------------------------
    117   // Generic methods common to all Discrete processes
     110  // Implementation of virtual methods common to all Discrete processes
    118111  //------------------------------------------------------------------------
    119112
    120113public:
    121 
    122   void PrintInfoDefinition();
    123 
    124   G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
    125114
    126115  // Initialise for build of tables
     
    129118  // Build physics table during initialisation
    130119  void BuildPhysicsTable(const G4ParticleDefinition&);
     120
     121  void PrintInfoDefinition();
     122
     123  // implementation of virtual method, specific for G4VEmProcess
     124  G4double PostStepGetPhysicalInteractionLength(
     125                             const G4Track& track,
     126                             G4double   previousStepSize,
     127                             G4ForceCondition* condition
     128                            );
     129
     130  // implementation of virtual method, specific for G4VEmProcess
     131  G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
    131132
    132133  // Store PhysicsTable in a file.
     
    145146                              G4bool ascii);
    146147
     148  // deexcitation activated per G4Region
     149  void ActivateDeexcitation(G4bool, const G4Region* r = 0);
     150
    147151  //------------------------------------------------------------------------
    148152  // Specific methods for Discrete EM post step simulation
     
    152156  G4double CrossSectionPerVolume(G4double kineticEnergy,
    153157                                 const G4MaterialCutsCouple* couple);
    154 
    155   // implementation of virtual method
    156   virtual G4double PostStepGetPhysicalInteractionLength(
    157                              const G4Track& track,
    158                              G4double   previousStepSize,
    159                              G4ForceCondition* condition
    160                             );
    161158
    162159  // It returns the cross section of the process per atom
     
    167164  inline G4double MeanFreePath(const G4Track& track);
    168165
    169   inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,
    170                                             size_t& idxRegion) const;
    171 
    172166  // It returns cross section per volume
    173167  inline G4double GetLambda(G4double& kinEnergy,
     
    203197
    204198  //------------------------------------------------------------------------
    205   // Specific methods to set, access, modify models
    206   //------------------------------------------------------------------------
    207 
    208   // Add EM model coupled for the region
     199  // Specific methods to set, access, modify models and basic parameters
     200  //------------------------------------------------------------------------
     201
     202protected:
     203  // Select model in run time
     204  inline void SelectModel(G4double& kinEnergy);
     205
     206public:
     207  // Select model by energy and region index
     208  inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,
     209                                            size_t& idxRegion) const;
     210   
     211  // Add model for region, smaller value of order defines which
     212  // model will be selected for a given energy interval 
    209213  inline void AddEmModel(G4int, G4VEmModel*, const G4Region* region = 0);
    210    
     214
    211215  // Assign a model to a process
    212   inline void SetModel(G4VEmModel*);
     216  inline void SetModel(G4VEmModel*, G4int index = 1);
    213217 
    214218  // return the assigned model
    215   inline G4VEmModel* Model();
     219  inline G4VEmModel* Model(G4int index = 1);
    216220   
    217221  // Define new energy range for the model identified by the name
     
    221225  inline G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false);
    222226
    223   //------------------------------------------------------------------------
    224   // Get/set parameters used for simulation of energy loss
    225   //------------------------------------------------------------------------
    226 
    227   inline void ActivateDeexcitation(G4bool, const G4Region* r = 0);
    228 
    229227  inline void SetLambdaFactor(G4double val);
    230228
     
    233231
    234232  inline void SetApplyCuts(G4bool val);
     233
     234  //------------------------------------------------------------------------
     235  // Other generic methods
     236  //------------------------------------------------------------------------
    235237 
    236238protected:
     
    242244  G4PhysicsVector* LambdaPhysicsVector(const G4MaterialCutsCouple*);
    243245
     246  inline G4double RecalculateLambda(G4double kinEnergy,
     247                                    const G4MaterialCutsCouple* couple);
     248
    244249  inline G4ParticleChangeForGamma* GetParticleChange();
    245250
     
    248253  inline void SetSecondaryParticle(const G4ParticleDefinition* p);
    249254
    250   inline G4VEmModel* SelectModel(G4double& kinEnergy);
    251 
    252255  inline size_t CurrentMaterialCutsCoupleIndex() const;
    253256
     
    280283  inline G4double ComputeCurrentLambda(G4double kinEnergy);
    281284
    282   // hide  assignment operator
    283 
     285  // copy constructor and hide assignment operator
    284286  G4VEmProcess(G4VEmProcess &);
    285287  G4VEmProcess & operator=(const G4VEmProcess &right);
     
    297299  // ======== Parameters of the class fixed at initialisation =======
    298300
     301  std::vector<G4VEmModel*>     emModels;
     302
    299303  // tables and vectors
    300304  G4PhysicsTable*              theLambdaTable;
     
    317321  G4bool                       applyCuts;
    318322  G4bool                       startFromNull;
    319 
    320   G4int                        nRegions;
    321   std::vector<G4Region*>       regions;
    322   std::vector<G4bool>          flagsDeexcitation;
     323  G4bool                       useDeexcitation;
     324
     325  G4int                        nDERegions;
     326  std::vector<const G4Region*> deRegions;
     327  G4bool*                      idxDERegions;
    323328
    324329  // ======== Cashed values - may be state dependent ================
     
    332337  std::vector<G4DynamicParticle*> secParticles;
    333338
    334   G4VEmModel*                  selectedModel; 
     339  G4VEmModel*                  currentModel; 
    335340
    336341  const G4ParticleDefinition*  particle;
     
    348353
    349354//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     355//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     356
     357inline G4double G4VEmProcess::ComputeCrossSectionPerAtom(
     358                 G4double kineticEnergy, G4double Z, G4double A, G4double cut)
     359{
     360  SelectModel(kineticEnergy);
     361  G4double x = 0.0;
     362  if(currentModel) {
     363   x = currentModel->ComputeCrossSectionPerAtom(particle,kineticEnergy,
     364                                                 Z,A,cut);
     365  }
     366  return x;
     367}
     368
     369//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     370
     371inline G4double G4VEmProcess::MeanFreePath(const G4Track& track)
     372{
     373  DefineMaterial(track.GetMaterialCutsCouple());
     374  preStepLambda = GetCurrentLambda(track.GetKineticEnergy());
     375  G4double x = DBL_MAX;
     376  if(DBL_MIN < preStepLambda) x = 1.0/preStepLambda;
     377  return x;
     378}
     379
     380//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     381
     382inline G4double G4VEmProcess::GetLambda(G4double& kineticEnergy,
     383                                        const G4MaterialCutsCouple* couple)
     384{
     385  DefineMaterial(couple);
     386  return GetCurrentLambda(kineticEnergy);
     387}
     388
     389//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     390
     391inline void G4VEmProcess::SetLambdaBinning(G4int nbins)
     392{
     393  nLambdaBins = nbins;
     394}
     395
     396//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     397
     398inline G4int G4VEmProcess::LambdaBinning() const
     399{
     400  return nLambdaBins;
     401}
     402
     403//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     404
     405inline void G4VEmProcess::SetMinKinEnergy(G4double e)
     406{
     407  minKinEnergy = e;
     408}
     409
     410//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     411
     412inline G4double G4VEmProcess::MinKinEnergy() const
     413{
     414  return minKinEnergy;
     415}
     416
     417//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     418
     419inline void G4VEmProcess::SetMaxKinEnergy(G4double e)
     420{
     421  maxKinEnergy = e;
     422}
     423
     424//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     425
     426inline G4double G4VEmProcess::MaxKinEnergy() const
     427{
     428  return maxKinEnergy;
     429}
     430
     431//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     432
     433inline void G4VEmProcess::SetPolarAngleLimit(G4double val)
     434{
     435  if(val < 0.0)     polarAngleLimit = 0.0;
     436  else if(val > pi) polarAngleLimit = pi;
     437  else              polarAngleLimit = val;
     438}
     439
     440//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     441
     442inline G4double G4VEmProcess::PolarAngleLimit() const
     443{
     444  return polarAngleLimit;
     445}
     446
     447//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     448
     449inline const G4PhysicsTable* G4VEmProcess::LambdaTable() const
     450{
     451  return theLambdaTable;
     452}
     453
     454//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     455
     456inline const G4ParticleDefinition* G4VEmProcess::Particle() const
     457{
     458  return particle;
     459}
     460
     461//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     462
     463inline const G4ParticleDefinition* G4VEmProcess::SecondaryParticle() const
     464{
     465  return secondaryParticle;
     466}
     467
     468//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     469
     470inline void G4VEmProcess::SelectModel(G4double& kinEnergy)
     471{
     472  currentModel = modelManager->SelectModel(kinEnergy, currentMaterialIndex);
     473  currentModel->SetCurrentCouple(currentCouple);
     474}
     475
     476//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     477
     478inline G4VEmModel* G4VEmProcess::SelectModelForMaterial(
     479                                   G4double kinEnergy, size_t& idxRegion) const
     480{
     481  return modelManager->SelectModel(kinEnergy, idxRegion);
     482}
     483
     484//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     485
     486inline void G4VEmProcess::AddEmModel(G4int order, G4VEmModel* p,
     487                                     const G4Region* region)
     488{
     489  G4VEmFluctuationModel* fm = 0;
     490  modelManager->AddEmModel(order, p, fm, region);
     491  if(p) p->SetParticleChange(pParticleChange);
     492}
     493
     494//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     495
     496inline void G4VEmProcess::SetModel(G4VEmModel* p, G4int index)
     497{
     498  G4int n = emModels.size();
     499  if(index >= n) for(G4int i=n; i<index+1; i++) {emModels.push_back(0);}
     500  emModels[index] = p;
     501}
     502
     503//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     504
     505inline G4VEmModel* G4VEmProcess::Model(G4int index)
     506{
     507  G4VEmModel* p = 0;
     508  if(index >= 0 && index <  G4int(emModels.size())) p = emModels[index];
     509  return p;
     510}
     511
     512//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     513
     514inline void G4VEmProcess::UpdateEmModel(const G4String& nam,
     515                                        G4double emin, G4double emax)
     516{
     517  modelManager->UpdateEmModel(nam, emin, emax);
     518}
     519
     520//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     521
     522inline G4VEmModel* G4VEmProcess::GetModelByIndex(G4int idx, G4bool ver)
     523{
     524  return modelManager->GetModel(idx, ver);
     525}
     526
     527//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     528
     529inline void G4VEmProcess::SetLambdaFactor(G4double val)
     530{
     531  if(val > 0.0 && val <= 1.0) lambdaFactor = val;
     532}
     533
     534//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     535
     536inline void G4VEmProcess::SetIntegral(G4bool val)
     537{
     538  if(particle && particle != theGamma) integral = val;
     539  if(integral) buildLambdaTable = true;
     540}
     541
     542//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     543
     544inline G4bool G4VEmProcess::IsIntegral() const
     545{
     546  return integral;
     547}
     548
     549//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     550
     551inline void G4VEmProcess::SetApplyCuts(G4bool val)
     552{
     553  applyCuts = val;
     554}
     555
     556//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     557
     558inline G4double G4VEmProcess::RecalculateLambda(G4double e,
     559                                                const G4MaterialCutsCouple* couple)
     560{
     561  DefineMaterial(couple);
     562  return ComputeCurrentLambda(e);
     563}
     564
     565//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     566
     567inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange()
     568{
     569  return &fParticleChange;
     570}
     571
     572//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     573
     574inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p)
     575{
     576  particle = p;
     577}
     578
     579//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     580
     581inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
     582{
     583  secondaryParticle = p;
     584}
     585
     586//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     587
     588inline size_t G4VEmProcess::CurrentMaterialCutsCoupleIndex() const
     589{
     590  return currentMaterialIndex;
     591}
     592
     593//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     594
     595inline G4double G4VEmProcess::GetGammaEnergyCut()
     596{
     597  return (*theCutsGamma)[currentMaterialIndex];
     598}
     599
     600//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     601
     602inline G4double G4VEmProcess::GetElectronEnergyCut()
     603{
     604  return (*theCutsElectron)[currentMaterialIndex];
     605}
     606
     607//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     608
     609inline void G4VEmProcess::SetBuildTableFlag(G4bool val)
     610{
     611  buildLambdaTable = val;
     612  if(!val) integral = false;
     613}
     614
     615//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     616
     617inline void G4VEmProcess::SetStartFromNullFlag(G4bool val)
     618{
     619  startFromNull = val;
     620}
     621
     622//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     623
     624inline void G4VEmProcess::InitialiseStep(const G4Track& track)
     625{
     626  preStepKinEnergy = track.GetKineticEnergy();
     627  DefineMaterial(track.GetMaterialCutsCouple());
     628  if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX;
     629}
     630
    350631//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    351632
     
    358639    mfpKinEnergy = DBL_MAX;
    359640  }
    360 }
    361 
    362 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    363 
    364 inline void G4VEmProcess::InitialiseStep(const G4Track& track)
    365 {
    366   preStepKinEnergy = track.GetKineticEnergy();
    367   DefineMaterial(track.GetMaterialCutsCouple());
    368   if (theNumberOfInteractionLengthLeft < 0.0) mfpKinEnergy = DBL_MAX;
    369 }
    370 
    371 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    372 
    373 inline G4double G4VEmProcess::GetLambda(G4double& kineticEnergy,
    374                                         const G4MaterialCutsCouple* couple)
    375 {
    376   DefineMaterial(couple);
    377   return GetCurrentLambda(kineticEnergy);
    378 }
    379 
    380 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    381 
    382 inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
    383 {
    384   G4double x = 0.0;
    385   if(theLambdaTable) x = GetLambdaFromTable(e);
    386   else               x = ComputeCurrentLambda(e);
    387   return x;
    388 }
    389 
    390 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    391 
    392 inline G4double G4VEmProcess::RecalculateLambda(G4double e,
    393                                                 const G4MaterialCutsCouple* couple)
    394 {
    395   DefineMaterial(couple);
    396   return ComputeCurrentLambda(e);
    397 }
    398 
    399 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    400 
    401 inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
    402 {
    403   G4VEmModel* currentModel = SelectModel(e);
    404   G4double x = 0.0;
    405   if(currentModel)
    406     x = currentModel->CrossSectionPerVolume(currentMaterial,particle,
    407                                             e,(*theCuts)[currentMaterialIndex]);
    408   return x;
    409 }
    410 
    411 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    412 
    413 inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
    414 {
    415   G4bool b;
    416   return (((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b));
    417641}
    418642
     
    442666//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    443667
    444 inline G4double G4VEmProcess::MeanFreePath(const G4Track& track)
    445 {
    446   DefineMaterial(track.GetMaterialCutsCouple());
    447   preStepLambda = GetCurrentLambda(track.GetKineticEnergy());
    448   G4double x = DBL_MAX;
    449   if(DBL_MIN < preStepLambda) x = 1.0/preStepLambda;
     668inline G4double G4VEmProcess::GetLambdaFromTable(G4double e)
     669{
     670  G4bool b;
     671  return (((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b));
     672}
     673
     674//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     675
     676inline G4double G4VEmProcess::GetCurrentLambda(G4double e)
     677{
     678  G4double x = 0.0;
     679  if(theLambdaTable) x = GetLambdaFromTable(e);
     680  else               x = ComputeCurrentLambda(e);
    450681  return x;
    451682}
     
    453684//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    454685
    455 inline G4VEmModel* G4VEmProcess::SelectModel(G4double& kinEnergy)
    456 {
    457   return modelManager->SelectModel(kinEnergy, currentMaterialIndex);
    458 }
    459 
    460 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    461 
    462 inline G4VEmModel* G4VEmProcess::SelectModelForMaterial(
    463                                    G4double kinEnergy, size_t& idxRegion) const
    464 {
    465   return modelManager->SelectModel(kinEnergy, idxRegion);
    466 }
    467 
    468 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    469 
    470 inline const G4ParticleDefinition* G4VEmProcess::Particle() const
    471 {
    472   return particle;
    473 }
    474 
    475 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    476 
    477 inline const G4ParticleDefinition* G4VEmProcess::SecondaryParticle() const
    478 {
    479   return secondaryParticle;
    480 }
    481 
    482 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    483 
    484 inline G4double G4VEmProcess::GetGammaEnergyCut()
    485 {
    486   return (*theCutsGamma)[currentMaterialIndex];
    487 }
    488 
    489 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    490 
    491 inline G4double G4VEmProcess::GetElectronEnergyCut()
    492 {
    493   return (*theCutsElectron)[currentMaterialIndex];
    494 }
    495 
    496 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    497 
    498 inline void G4VEmProcess::SetLambdaFactor(G4double val)
    499 {
    500   if(val > 0.0 && val <= 1.0) lambdaFactor = val;
    501 }
    502 
    503 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    504 
    505 inline G4VEmModel* G4VEmProcess::GetModelByIndex(G4int idx, G4bool ver)
    506 {
    507   return modelManager->GetModel(idx, ver);
    508 }
    509 
    510 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    511 
    512 inline G4ParticleChangeForGamma* G4VEmProcess::GetParticleChange()
    513 {
    514   return &fParticleChange;
    515 }
    516 
    517 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    518 
    519 inline void G4VEmProcess::SetParticle(const G4ParticleDefinition* p)
    520 {
    521   particle = p;
    522 }
    523 
    524 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    525 
    526 inline void G4VEmProcess::SetSecondaryParticle(const G4ParticleDefinition* p)
    527 {
    528   secondaryParticle = p;
    529 }
    530 
    531 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    532 
    533 inline void G4VEmProcess::AddEmModel(G4int order, G4VEmModel* p,
    534                                      const G4Region* region)
    535 {
    536   G4VEmFluctuationModel* fm = 0;
    537   modelManager->AddEmModel(order, p, fm, region);
    538   if(p) p->SetParticleChange(pParticleChange);
    539 }
    540 
    541 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    542 
    543 inline void G4VEmProcess::SetModel(G4VEmModel* model)
    544 {
    545   selectedModel = model;
    546 }
    547 
    548 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    549 
    550 inline G4VEmModel* G4VEmProcess::Model()
    551 {
    552   return selectedModel;
    553 }
    554 
    555 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    556 
    557 inline void G4VEmProcess::UpdateEmModel(const G4String& nam,
    558                                         G4double emin, G4double emax)
    559 {
    560   modelManager->UpdateEmModel(nam, emin, emax);
    561 }
    562 
    563 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    564 
    565 inline G4double G4VEmProcess::ComputeCrossSectionPerAtom(
    566                  G4double kineticEnergy, G4double Z, G4double A, G4double cut)
    567 {
    568   G4VEmModel* model = SelectModel(kineticEnergy);
    569   return model->ComputeCrossSectionPerAtom(particle,kineticEnergy,Z,A,cut);
    570 }
    571 
    572 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    573 
    574 inline void G4VEmProcess::SetLambdaBinning(G4int nbins)
    575 {
    576   nLambdaBins = nbins;
    577 }
    578 
    579 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    580 
    581 inline G4int G4VEmProcess::LambdaBinning() const
    582 {
    583   return nLambdaBins;
    584 }
    585 
    586 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    587 
    588 inline void G4VEmProcess::SetMinKinEnergy(G4double e)
    589 {
    590   minKinEnergy = e;
    591 }
    592 
    593 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    594 
    595 inline G4double G4VEmProcess::MinKinEnergy() const
    596 {
    597   return minKinEnergy;
    598 }
    599 
    600 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    601 
    602 inline void G4VEmProcess::SetMaxKinEnergy(G4double e)
    603 {
    604   maxKinEnergy = e;
    605 }
    606 
    607 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    608 
    609 inline G4double G4VEmProcess::MaxKinEnergy() const
    610 {
    611   return maxKinEnergy;
    612 }
    613 
    614 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    615 
    616 inline void G4VEmProcess::SetPolarAngleLimit(G4double val)
    617 {
    618   if(val < 0.0)     polarAngleLimit = 0.0;
    619   else if(val > pi) polarAngleLimit = pi;
    620   else              polarAngleLimit = val;
    621 }
    622 
    623 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    624 
    625 inline G4double G4VEmProcess::PolarAngleLimit() const
    626 {
    627   return polarAngleLimit;
    628 }
    629 
    630 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    631 
    632 inline void G4VEmProcess::ActivateDeexcitation(G4bool, const G4Region*)
    633 {}
    634 
    635 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    636 
    637 inline const G4PhysicsTable* G4VEmProcess::LambdaTable() const
    638 {
    639   return theLambdaTable;
    640 }
    641 
    642 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    643 
    644 inline void G4VEmProcess::SetIntegral(G4bool val)
    645 {
    646   if(particle && particle != theGamma) integral = val;
    647   if(integral) buildLambdaTable = true;
    648 }
    649 
    650 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    651 
    652 inline G4bool G4VEmProcess::IsIntegral() const
    653 {
    654   return integral;
    655 }
    656 
    657 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    658 
    659 inline void G4VEmProcess::SetBuildTableFlag(G4bool val)
    660 {
    661   buildLambdaTable = val;
    662   if(!val) integral = false;
    663 }
    664 
    665 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    666 
    667 inline void G4VEmProcess::SetStartFromNullFlag(G4bool val)
    668 {
    669   startFromNull = val;
    670 }
    671 
    672 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    673 
    674 inline void G4VEmProcess::SetApplyCuts(G4bool val)
    675 {
    676   applyCuts = val;
    677 }
    678 
    679 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    680 
    681 inline size_t G4VEmProcess::CurrentMaterialCutsCoupleIndex() const
    682 {
    683   return currentMaterialIndex;
     686inline G4double G4VEmProcess::ComputeCurrentLambda(G4double e)
     687{
     688  SelectModel(e);
     689  G4double x = 0.0;
     690  if(currentModel) {
     691    x = currentModel->CrossSectionPerVolume(currentMaterial,particle,
     692                                            e,(*theCuts)[currentMaterialIndex]);
     693  }
     694  return x;
    684695}
    685696
Note: See TracChangeset for help on using the changeset viewer.