/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/TrkExtAlg/TrkExtAlg-00-00-64/TrkExtAlg/ExtMuIonisation.h

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * DISCLAIMER                                                       *
00004 // *                                                                  *
00005 // * The following disclaimer summarizes all the specific disclaimers *
00006 // * of contributors to this software. The specific disclaimers,which *
00007 // * govern, are listed with their locations in:                      *
00008 // *   http://cern.ch/geant4/license                                  *
00009 // *                                                                  *
00010 // * Neither the authors of this software system, nor their employing *
00011 // * institutes,nor the agencies providing financial support for this *
00012 // * work  make  any representation or  warranty, express or implied, *
00013 // * regarding  this  software system or assume any liability for its *
00014 // * use.                                                             *
00015 // *                                                                  *
00016 // * This  code  implementation is the  intellectual property  of the *
00017 // * GEANT4 collaboration.                                            *
00018 // * By copying,  distributing  or modifying the Program (or any work *
00019 // * based  on  the Program)  you indicate  your  acceptance of  this *
00020 // * statement, and all its terms.                                    *
00021 // ********************************************************************
00022 //
00023 // $Id: ExtMuIonisation.h,v 1.6 2015/10/27 11:02:53 sunss Exp $
00024 // GEANT4 tag $Name: TrkExtAlg-00-00-64 $
00025 //
00026 // -------------------------------------------------------------------
00027 //
00028 // GEANT4 Class header file
00029 //
00030 //
00031 // File name:     ExtMuIonisation
00032 //
00033 // Author:        Laszlo Urban
00034 //
00035 // Creation date: 30.05.1997
00036 //
00037 // Modifications:
00038 //
00039 // corrected by L.Urban on 24/09/97
00040 // corrected by L.Urban on 13/01/98
00041 // bugs fixed by L.Urban on 02/02/99
00042 // 10/02/00 modifications , new e.m. structure, L.Urban
00043 // 10-08-01 new methods Store/Retrieve PhysicsTable (mma)
00044 // 14-08-01 new function ComputeRestrictedMeandEdx() + 'cleanup' (mma)
00045 // 19-09-01 come back to previous process name "hIoni"
00046 // 29-10-01 all static functions no more inlined
00047 // 10-05-02 V.Ivanchenko update to new design
00048 // 09-12-02 V.Ivanchenko remove warning
00049 // 26-12-02 Secondary production moved to derived classes (VI)
00050 // 24-01-03 Make models region aware (V.Ivanchenko)
00051 // 05-02-03 Fix compilation warnings (V.Ivanchenko)
00052 // 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko)
00053 // 23-05-03 Add fluctuation model as a member function (V.Ivanchenko)
00054 // 03-06-03 Add SetIntegral method to choose fluctuation model (V.Ivanchenko)
00055 // 03-06-03 Fix initialisation problem for STD ionisation (V.Ivanchenko)
00056 // 08-08-03 STD substitute standard  (V.Ivanchenko)
00057 // 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko)
00058 // 21-01-04 Migrade to G4ParticleChangeForLoss (V.Ivanchenko)
00059 // ------------------------------------------------------------------------------------
00060 // 15-04-05 Omit the correction of momentum direction due to production of secenderies.
00061 //          This is needed for my Track Extrapotation. (L.L.Wang)
00062 // ------------------------------------------------------------------------------------
00063 //17-08-04 Rename the process "Mu" -> "mu" (V.Ivanchenko)
00064 // 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
00065 // 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
00066 
00067 // Class Description:
00068 //
00069 // This class manages the ionisation process for muons.
00070 // it inherites from G4VContinuousDiscreteProcess via G4VEnergyLossProcess.
00071 //
00072 
00073 // -------------------------------------------------------------------
00074 //
00075 
00076 #ifndef ExtMuIonisation_h
00077 #define ExtMuIonisation_h 1
00078 
00079 #include "G4VEnergyLossProcess.hh"
00080 #include "G4Electron.hh"
00081 #include "G4Positron.hh"
00082 #include "globals.hh"
00083 #include "G4VEmModel.hh"
00084 
00085 class G4Material;
00086 class G4VEmFluctuationModel;
00087 class G4ParticleChangeForLoss;
00088 
00089 class ExtMuIonisation : public G4VEnergyLossProcess
00090 {
00091 
00092 public:
00093 
00094   ExtMuIonisation(const G4String& name = "ExtmuIoni");
00095 
00096   virtual ~ExtMuIonisation();
00097 
00098   G4bool IsApplicable(const G4ParticleDefinition& p)
00099     {return (p.GetPDGCharge() != 0.0 && p.GetPDGMass() > 10.0*MeV);};
00100 
00101   G4double MinPrimaryEnergy(const G4ParticleDefinition* p,
00102                             const G4Material*, G4double cut);
00103 
00104 /*  virtual std::vector<G4Track*>* SecondariesAlongStep(
00105                              const G4Step&,
00106                                    G4double&,
00107                                    G4double&,
00108                                    G4double&);
00109 */
00110 
00111   std::vector<G4DynamicParticle*>* SecondariesPostStep(
00112                                    G4VEmModel*,
00113                              const G4MaterialCutsCouple*,
00114                              const G4DynamicParticle*,
00115                                    G4double& tcut);
00116 
00117   // Print out of the class parameters
00118   void PrintInfo();
00119 
00120 protected:
00121 
00122   virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
00123                                            const G4ParticleDefinition*);
00124 
00125 //  virtual G4double MaxSecondaryEnergy(const G4DynamicParticle* dynParticle);
00126 
00127 private:
00128 
00129   // hide assignment operator
00130   ExtMuIonisation & operator=(const ExtMuIonisation &right);
00131   ExtMuIonisation(const ExtMuIonisation&);
00132 
00133   G4double    mass;
00134   G4double    ratio;
00135 
00136   const G4ParticleDefinition* theParticle;
00137   const G4ParticleDefinition* theBaseParticle;
00138   G4VEmFluctuationModel*      flucModel;
00139 
00140   G4ParticleChangeForLoss*    fParticleChange;
00141 //  G4bool                 subCutoff;
00142   G4bool                 isInitialised;
00143 };
00144 
00145 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00147 
00148 inline G4double ExtMuIonisation::MinPrimaryEnergy(const G4ParticleDefinition*,
00149                                                     const G4Material*,
00150                                                           G4double cut)
00151 {
00152   G4double x = 0.5*cut/electron_mass_c2;
00153   G4double g = x*ratio + sqrt((1. + x)*(1. + x*ratio*ratio));
00154   return mass*(g - 1.0);
00155 }
00156 
00157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00158 
00159 /*inline G4double ExtMuIonisation::MaxSecondaryEnergy(const G4DynamicParticle* dynParticle)
00160 {
00161   G4double tau  = dynParticle->GetKineticEnergy()/mass;
00162   G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.0)/
00163                   (1. + 2.0*(tau + 1.0)*ratio + ratio*ratio);
00164 
00165   return tmax;
00166 }
00167 
00168 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00169 
00170 #include "G4VSubCutoffProcessor.hh"
00171 */
00172 
00173 /*inline std::vector<G4DynamicParticle*>*  ExtMuIonisation::SecondariesAlongStep(
00174                            const G4Step&   step,
00175                                  G4double& tmax,
00176                                  G4double& eloss,
00177                                  G4double& kinEnergy)
00178 {
00179   std::vector<G4Track*>* newp = 0;
00180   if(subCutoff) {
00181     G4VSubCutoffProcessor* sp = SubCutoffProcessor(CurrentMaterialCutsCoupleIndex());
00182     if (sp) {
00183       G4VEmModel* model = SelectModel(kinEnergy);
00184       newp = sp->SampleSecondaries(step,tmax,eloss,model);
00185     }
00186   }
00187   return newp;
00188 }
00189 */
00190 
00191 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00192 
00193 //#include "G4VEmModel.hh"
00194 
00195 inline std::vector<G4DynamicParticle*>* ExtMuIonisation::SecondariesPostStep(
00196                                                    G4VEmModel* model,
00197                                              const G4MaterialCutsCouple* couple,
00198                                              const G4DynamicParticle* dp,
00199                                                    G4double& tcut)
00200 {
00201 //  return model->SampleSecondaries(couple, dp, tcut);
00202   return NULL;//No secondaries, for Track Extrapolation.(Wang L.L.)
00203 }
00204 
00205 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00206 
00207 #endif

Generated on Tue Nov 29 23:14:12 2016 for BOSS_7.0.2 by  doxygen 1.4.7