Ignore:
Timestamp:
Apr 17, 2009, 12:17:14 PM (15 years ago)
Author:
garnier
Message:

update

File:
1 edited

Legend:

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

    r961 r991  
    2424// ********************************************************************
    2525//
    26 // $Id: G4VMultipleScattering.hh,v 1.55 2009/02/18 12:19:33 vnivanch Exp $
    27 // GEANT4 tag $Name: geant4-09-02-ref-02 $
     26// $Id: G4VMultipleScattering.hh,v 1.54 2008/07/31 13:01:26 vnivanch Exp $
     27// GEANT4 tag $Name: geant4-09-02 $
    2828//
    2929// -------------------------------------------------------------------
     
    145145                              G4bool ascii);
    146146
     147  //------------------------------------------------------------------------
     148  // Specific methods for msc processes
     149  //------------------------------------------------------------------------
     150
    147151  // The function overloads the corresponding function of the base
    148152  // class.It limits the step near to boundaries only
    149153  // and invokes the method GetMscContinuousStepLimit at every step.
    150   G4double AlongStepGetPhysicalInteractionLength(
     154  virtual G4double AlongStepGetPhysicalInteractionLength(
    151155                                            const G4Track&,
    152156                                            G4double  previousStepSize,
     
    188192  inline G4PhysicsTable* LambdaTable() const;
    189193
    190   // access particle type
     194  //------------------------------------------------------------------------
     195  // Define and access particle type
     196  //------------------------------------------------------------------------
     197
    191198  inline const G4ParticleDefinition* Particle() const;
     199  inline void SetParticle(const G4ParticleDefinition*);
    192200
    193201  //------------------------------------------------------------------------
     
    195203  //------------------------------------------------------------------------
    196204
    197 protected:
    198   // Select model in run time
    199   inline G4VEmModel* SelectModel(G4double kinEnergy);
    200 
    201 public:
    202   // Select model in run time
     205  inline void AddEmModel(G4int, G4VEmModel*, const G4Region* region = 0);
     206
    203207  inline G4VEmModel* SelectModelForMaterial(G4double kinEnergy,
    204208                                            size_t& idxRegion) const;
    205209
    206   // Add model for region, smaller value of order defines which
    207   // model will be selected for a given energy interval 
    208   inline void AddEmModel(G4int order, G4VEmModel*, const G4Region* region = 0);
    209 
    210   // Access to models by index
     210  // Access to models
    211211  inline G4VEmModel* GetModelByIndex(G4int idx = 0, G4bool ver = false);
    212212
    213213  //------------------------------------------------------------------------
    214   // Get/Set parameters for simulation of multiple scattering
    215   //------------------------------------------------------------------------
    216 
    217   inline G4bool LateralDisplasmentFlag() const;
     214  // Set parameters for simulation of multiple scattering
     215  //------------------------------------------------------------------------
     216
    218217  inline void SetLateralDisplasmentFlag(G4bool val);
    219218
    220   inline G4double Skin() const;
    221219  inline void SetSkin(G4double val);
    222220
    223   inline G4double RangeFactor() const;
    224221  inline void SetRangeFactor(G4double val);
    225222
    226   inline G4double GeomFactor() const;
    227223  inline void SetGeomFactor(G4double val);
    228224
    229   inline G4double PolarAngleLimit() const;
    230225  inline void SetPolarAngleLimit(G4double val);
    231226
    232   inline G4MscStepLimitType StepLimitType() const;
    233227  inline void SetStepLimitType(G4MscStepLimitType val);
    234 
    235   //------------------------------------------------------------------------
    236   // Run time methods
    237   //------------------------------------------------------------------------
    238228
    239229protected:
     
    243233                           G4double,
    244234                           G4ForceCondition* condition);
     235
     236  //------------------------------------------------------------------------
     237  // Run time methods
     238  //------------------------------------------------------------------------
    245239
    246240  // This method is not used for tracking, it returns step limit
     
    259253                                            G4double& currentSafety);
    260254
     255  inline G4VEmModel* SelectModel(G4double kinEnergy);
     256  // Select concrete model
     257
     258  inline const G4MaterialCutsCouple* CurrentMaterialCutsCouple() const;
     259
    261260  // define current material
    262261  inline void DefineMaterial(const G4MaterialCutsCouple* couple);
    263262
    264   inline const G4MaterialCutsCouple* CurrentMaterialCutsCouple() const;
     263  //------------------------------------------------------------------------
     264  // Access parameters of multiple scattering
     265  //------------------------------------------------------------------------
    265266
    266267  inline G4ParticleChangeForMSC* GetParticleChange();
    267268
     269  inline G4double Skin() const;
     270
     271  inline G4double RangeFactor() const;
     272
     273  inline G4double GeomFactor() const;
     274
     275  inline G4double PolarAngleLimit() const;
     276
     277  inline G4MscStepLimitType StepLimitType() const;
     278
     279  inline G4bool LateralDisplasmentFlag() const;
    268280
    269281private:
    270282
    271283  // hide  assignment operator
     284
    272285  G4VMultipleScattering(G4VMultipleScattering &);
    273286  G4VMultipleScattering & operator=(const G4VMultipleScattering &right);
     
    317330//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    318331
    319 inline G4double G4VMultipleScattering::ContinuousStepLimit(
    320                                        const G4Track& track,
    321                                        G4double previousStepSize,
    322                                        G4double currentMinimalStep,
    323                                        G4double& currentSafety)
    324 {
    325   return GetMscContinuousStepLimit(track,previousStepSize,currentMinimalStep,
    326                                    currentSafety);
    327 }
    328 
    329 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    330 
    331 inline void G4VMultipleScattering::SetBinning(G4int nbins)
    332 {
    333   nBins = nbins;
    334 }
    335 
    336 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    337 
    338 inline G4int G4VMultipleScattering::Binning() const
    339 {
    340   return nBins;
    341 }
    342 
    343 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    344 
    345 inline void G4VMultipleScattering::SetMinKinEnergy(G4double e)
    346 {
    347   minKinEnergy = e;
    348 }
    349 
    350 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    351 
    352 inline G4double G4VMultipleScattering::MinKinEnergy() const
    353 {
    354   return minKinEnergy;
    355 }
    356 
    357 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    358 
    359 inline void G4VMultipleScattering::SetMaxKinEnergy(G4double e)
    360 {
    361   maxKinEnergy = e;
    362 }
    363 
    364 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    365 
    366 inline G4double G4VMultipleScattering::MaxKinEnergy() const
    367 {
    368   return maxKinEnergy;
    369 }
    370 
    371 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    372 
    373 inline  void G4VMultipleScattering::SetBuildLambdaTable(G4bool val)
    374 {
    375   buildLambdaTable = val;
    376 }
    377 
    378 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    379 
    380 inline G4PhysicsTable* G4VMultipleScattering::LambdaTable() const
    381 {
    382   return theLambdaTable;
    383 }
    384 
    385 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    386 
    387 inline  const G4ParticleDefinition* G4VMultipleScattering::Particle() const
    388 {
    389   return currentParticle;
    390 }
    391 
    392 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    393 
    394 inline void G4VMultipleScattering::AddEmModel(G4int order, G4VEmModel* p,
    395                                               const G4Region* region)
    396 {
    397   G4VEmFluctuationModel* fm = 0;
    398   modelManager->AddEmModel(order, p, fm, region);
    399   if(p) p->SetParticleChange(pParticleChange);
    400 }
    401 
    402 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    403 
    404 inline G4VEmModel* G4VMultipleScattering::SelectModel(G4double kinEnergy)
    405 {
    406   return modelManager->SelectModel(kinEnergy, currentMaterialIndex);
    407 }
    408 
    409 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    410 
    411 inline G4VEmModel* G4VMultipleScattering::SelectModelForMaterial(
    412                    G4double kinEnergy, size_t& idxRegion) const
    413 {
    414   return modelManager->SelectModel(kinEnergy, idxRegion);
    415 }
    416 
    417 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    418 
    419332inline
    420 G4VEmModel* G4VMultipleScattering::GetModelByIndex(G4int idx, G4bool ver)
    421 {
    422   return modelManager->GetModel(idx, ver);
    423 }
    424 
    425 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    426 
    427 inline  G4bool G4VMultipleScattering::LateralDisplasmentFlag() const
    428 {
    429   return latDisplasment;
    430 }
    431 
    432 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    433 
    434 inline  void G4VMultipleScattering::SetLateralDisplasmentFlag(G4bool val)
    435 {
    436   latDisplasment = val;
    437 }
    438 
    439 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    440 
    441 inline  G4double G4VMultipleScattering::Skin() const
    442 {
    443   return skin;
    444 }
    445 
    446 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    447 
    448 inline  void G4VMultipleScattering::SetSkin(G4double val)
    449 {
    450   if(val < 1.0) skin = 0.0;
    451   else          skin = val;
    452 }
    453 
    454 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    455 
    456 inline  G4double G4VMultipleScattering::RangeFactor() const
    457 {
    458   return facrange;
    459 }
    460 
    461 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    462 
    463 inline  void G4VMultipleScattering::SetRangeFactor(G4double val)
    464 {
    465   if(val > 0.0) facrange = val;
    466 }
    467 
    468 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    469 
    470 inline  G4double G4VMultipleScattering::GeomFactor() const
    471 {
    472   return facgeom;
    473 }
    474 
    475 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    476 
    477 inline  void G4VMultipleScattering::SetGeomFactor(G4double val)
    478 {
    479   if(val > 0.0) facgeom = val;
    480 }
    481 
    482 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    483 
    484 inline  G4double G4VMultipleScattering::PolarAngleLimit() const
    485 {
    486   return polarAngleLimit;
    487 }
    488 
    489 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    490 
    491 inline  void G4VMultipleScattering::SetPolarAngleLimit(G4double val)
    492 {
    493   if(val < 0.0)     polarAngleLimit = 0.0;
    494   else if(val > pi) polarAngleLimit = pi;
    495   else              polarAngleLimit = val;
    496 }
    497 
    498 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    499 
    500 inline G4MscStepLimitType G4VMultipleScattering::StepLimitType() const
    501 {
    502   return stepLimit;
    503 }
    504 
    505 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    506 
    507 inline void G4VMultipleScattering::SetStepLimitType(G4MscStepLimitType val)
    508 {
    509   stepLimit = val;
    510   if(val == fMinimal) facrange = 0.2;
    511 }
    512 
    513 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    514 
    515 inline
    516 G4double G4VMultipleScattering::GetLambda(const G4ParticleDefinition* p,
    517                                           G4double& e)
    518 {
    519   G4double x;
    520   if(theLambdaTable) {
    521     G4bool b;
    522     x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
    523   } else {
    524     x = currentModel->CrossSection(currentCouple,p,e);
     333void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* couple)
     334{
     335  if(couple != currentCouple) {
     336    currentCouple   = couple;
     337    currentMaterialIndex = couple->GetIndex();
    525338  }
    526   if(x > DBL_MIN) x = 1./x;
    527   else            x = DBL_MAX;
    528   return x;
    529339}
    530340
     
    554364//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    555365
     366inline G4double G4VMultipleScattering::ContinuousStepLimit(
     367                                       const G4Track& track,
     368                                       G4double previousStepSize,
     369                                       G4double currentMinimalStep,
     370                                       G4double& currentSafety)
     371{
     372  return GetMscContinuousStepLimit(track,previousStepSize,currentMinimalStep,
     373                                   currentSafety);
     374}
     375
     376//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     377
    556378inline
    557 void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* couple)
    558 {
    559   if(couple != currentCouple) {
    560     currentCouple   = couple;
    561     currentMaterialIndex = couple->GetIndex();
     379G4double G4VMultipleScattering::GetLambda(const G4ParticleDefinition* p,
     380                                          G4double& e)
     381{
     382  G4double x;
     383  if(theLambdaTable) {
     384    G4bool b;
     385    x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
     386  } else {
     387    x = currentModel->CrossSection(currentCouple,p,e);
    562388  }
    563 }
    564 
    565 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    566 
    567 inline const G4MaterialCutsCouple*
    568 G4VMultipleScattering::CurrentMaterialCutsCouple() const
     389  if(x > DBL_MIN) x = 1./x;
     390  else            x = DBL_MAX;
     391  return x;
     392}
     393
     394//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     395
     396inline G4VEmModel* G4VMultipleScattering::SelectModel(G4double kinEnergy)
     397{
     398  return modelManager->SelectModel(kinEnergy, currentMaterialIndex);
     399}
     400
     401//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     402
     403inline G4VEmModel* G4VMultipleScattering::SelectModelForMaterial(
     404                   G4double kinEnergy, size_t& idxRegion) const
     405{
     406  return modelManager->SelectModel(kinEnergy, idxRegion);
     407}
     408
     409//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     410
     411inline void G4VMultipleScattering::SetBinning(G4int nbins)
     412{
     413  nBins = nbins;
     414}
     415
     416//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     417
     418inline G4int G4VMultipleScattering::Binning() const
     419{
     420  return nBins;
     421}
     422
     423//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     424
     425inline void G4VMultipleScattering::SetMinKinEnergy(G4double e)
     426{
     427  minKinEnergy = e;
     428}
     429
     430//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     431
     432inline G4double G4VMultipleScattering::MinKinEnergy() const
     433{
     434  return minKinEnergy;
     435}
     436
     437//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     438
     439inline void G4VMultipleScattering::SetMaxKinEnergy(G4double e)
     440{
     441  maxKinEnergy = e;
     442}
     443
     444//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     445
     446inline G4double G4VMultipleScattering::MaxKinEnergy() const
     447{
     448  return maxKinEnergy;
     449}
     450
     451//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     452
     453inline  G4bool G4VMultipleScattering::LateralDisplasmentFlag() const
     454{
     455  return latDisplasment;
     456}
     457
     458//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     459
     460inline  void G4VMultipleScattering::SetLateralDisplasmentFlag(G4bool val)
     461{
     462  latDisplasment = val;
     463}
     464
     465//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     466
     467inline G4ParticleChangeForMSC* G4VMultipleScattering::GetParticleChange()
     468{
     469  return &fParticleChange;
     470}
     471
     472//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     473
     474inline  G4double G4VMultipleScattering::Skin() const
     475{
     476  return skin;
     477}
     478
     479//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     480
     481inline  void G4VMultipleScattering::SetSkin(G4double val)
     482{
     483  if(val < 1.0) skin = 0.0;
     484  else          skin = val;
     485}
     486
     487//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     488
     489inline  G4double G4VMultipleScattering::RangeFactor() const
     490{
     491  return facrange;
     492}
     493
     494//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     495
     496inline  void G4VMultipleScattering::SetRangeFactor(G4double val)
     497{
     498  if(val > 0.0) facrange = val;
     499}
     500
     501//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     502
     503inline  G4double G4VMultipleScattering::GeomFactor() const
     504{
     505  return facgeom;
     506}
     507
     508//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     509
     510inline  void G4VMultipleScattering::SetGeomFactor(G4double val)
     511{
     512  if(val > 0.0) facgeom = val;
     513}
     514
     515//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     516
     517inline  G4double G4VMultipleScattering::PolarAngleLimit() const
     518{
     519  return polarAngleLimit;
     520}
     521
     522//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     523
     524inline  void G4VMultipleScattering::SetPolarAngleLimit(G4double val)
     525{
     526  if(val < 0.0)     polarAngleLimit = 0.0;
     527  else if(val > pi) polarAngleLimit = pi;
     528  else              polarAngleLimit = val;
     529}
     530
     531//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     532
     533inline G4MscStepLimitType G4VMultipleScattering::StepLimitType() const
     534{
     535  return stepLimit;
     536}
     537
     538//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     539
     540inline void G4VMultipleScattering::SetStepLimitType(G4MscStepLimitType val)
     541{
     542  stepLimit = val;
     543  if(val == fMinimal) facrange = 0.2;
     544}
     545
     546//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     547
     548inline  void G4VMultipleScattering::SetBuildLambdaTable(G4bool val)
     549{
     550  buildLambdaTable = val;
     551}
     552
     553//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     554
     555inline  const G4ParticleDefinition* G4VMultipleScattering::Particle() const
     556{
     557  return currentParticle;
     558}
     559
     560//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     561
     562inline G4PhysicsTable* G4VMultipleScattering::LambdaTable() const
     563{
     564  return theLambdaTable;
     565}
     566
     567//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     568
     569inline
     570const G4MaterialCutsCouple* G4VMultipleScattering::CurrentMaterialCutsCouple() const
    569571{
    570572  return currentCouple;
     
    573575//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
    574576
    575 inline G4ParticleChangeForMSC* G4VMultipleScattering::GetParticleChange()
    576 {
    577   return &fParticleChange;
     577inline void G4VMultipleScattering::AddEmModel(G4int order, G4VEmModel* p,
     578                                              const G4Region* region)
     579{
     580  G4VEmFluctuationModel* fm = 0;
     581  modelManager->AddEmModel(order, p, fm, region);
     582  if(p) p->SetParticleChange(pParticleChange);
     583}
     584
     585//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
     586
     587inline
     588G4VEmModel* G4VMultipleScattering::GetModelByIndex(G4int idx, G4bool ver)
     589{
     590  return modelManager->GetModel(idx, ver);
    578591}
    579592
Note: See TracChangeset for help on using the changeset viewer.