source: trunk/source/processes/cuts/include/G4VRangeToEnergyConverter.hh @ 961

Last change on this file since 961 was 961, checked in by garnier, 15 years ago

update processes

File size: 6.4 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// $Id: G4VRangeToEnergyConverter.hh,v 1.4 2006/06/29 19:30:06 gunter Exp $
28// GEANT4 tag $Name: geant4-09-02-ref-02 $
29//
30//
31// ------------------------------------------------------------
32//      GEANT 4 class header file
33//
34//
35// Class Description
36//  This class is base class for Range to Energy Converters.
37//  Cut in energy corresponding to given cut value in range
38//  is calculated for a material by using Convert method
39// 
40// ------------------------------------------------------------
41//   First Implementation          5 Oct. 2002  H.Kurahige
42// ------------------------------------------------------------
43
44#ifndef G4VRangeToEnergyConverter_h
45#define G4VRangeToEnergyConverter_h 1
46
47#include "globals.hh"
48#include <cmath>
49#include "G4ios.hh"
50#include <vector>
51
52#include "G4ParticleDefinition.hh"
53
54#include "G4PhysicsTable.hh"
55#include "G4Element.hh"
56#include "G4Material.hh"
57class G4PhysicsLogVector;
58
59class G4VRangeToEnergyConverter
60{
61  public: // with description
62  //  constructor
63  G4VRangeToEnergyConverter();
64
65  //  copy constructor
66  G4VRangeToEnergyConverter(const G4VRangeToEnergyConverter &right);
67
68  G4VRangeToEnergyConverter & operator=(const G4VRangeToEnergyConverter &right);
69
70  public:
71  //  destructor
72  virtual ~G4VRangeToEnergyConverter();
73
74  // equal opperators
75  G4int operator==(const G4VRangeToEnergyConverter &right) const;
76  G4int operator!=(const G4VRangeToEnergyConverter &right) const;
77
78  public: // with description
79  // calculate energy cut from given range cut for the material
80  virtual G4double Convert(G4double rangeCut, const G4Material* material);
81
82  //  set energy range for all particle type
83  static void SetEnergyRange(G4double lowedge, G4double highedge);
84
85  //  get energy range for all particle type
86  static G4double GetLowEdgeEnergy();
87  static G4double GetHighEdgeEnergy();
88 
89  // return pointer to the particle type which this converter takes care
90  const G4ParticleDefinition* GetParticleType() const;
91
92  // return the Loss Table
93  const  G4PhysicsTable* GetLossTable() const;   
94   //-------------- Loss Table ------------------------------------------
95   // theLossTable is a collection of loss vectors for all elements.
96   // Each loss vector has energy loss values (cross section values
97   // for neutral particles) which are calculated by
98   // ComputeLoss(G4double AtomicNumber,G4double KineticEnergy).
99 
100 protected:
101    static G4double               LowestEnergy, HighestEnergy;
102
103    const G4ParticleDefinition*   theParticle;
104    typedef G4PhysicsTable        G4LossTable;
105    G4LossTable*                  theLossTable;
106    G4int                         NumberOfElements;
107
108    typedef G4PhysicsLogVector    G4LossVector;
109    G4int                         TotBin;
110
111  protected:// with description 
112   virtual void BuildLossTable();
113
114    virtual G4double ComputeLoss(G4double AtomicNumber,
115                                 G4double KineticEnergy
116                                ) const;
117
118  //-------------- Range Table ------------------------------------------
119  protected:
120    typedef G4PhysicsLogVector G4RangeVector;
121    virtual void BuildRangeVector(const G4Material* aMaterial,
122                                  G4double       maxEnergy,
123                                  G4double       aMass,
124                                  G4RangeVector* rangeVector);
125
126  protected:
127    G4double ConvertCutToKineticEnergy(
128                                       G4RangeVector* theRangeVector,
129                                       G4double       theCutInLength, 
130                                       size_t         materialIndex
131                                      ) const;
132
133    G4double RangeLinSimpson(
134                            G4int  numberOfElements,
135                            const G4ElementVector* elementVector,
136                            const G4double* atomicNumDensityVector,
137                            G4double aMass,
138                            G4double taulow, G4double tauhigh,
139                            G4int nbin
140                          ); 
141
142    G4double RangeLogSimpson(
143                            G4int  numberOfElements,
144                            const G4ElementVector* elementVector,
145                            const G4double* atomicNumDensityVector,
146                            G4double aMass,
147                            G4double ltaulow, G4double ltauhigh,
148                            G4int nbin
149                          );
150
151  public: // with description 
152      void  SetVerboseLevel(G4int value);
153      G4int GetVerboseLevel() const;
154      // controle flag for output message
155      //  0: Silent
156      //  1: Warning message
157      //  2: More
158
159 private:
160   G4int verboseLevel;
161
162};
163
164inline 
165 void G4VRangeToEnergyConverter::SetVerboseLevel(G4int value)
166{
167   verboseLevel = value;
168}
169
170inline 
171 G4int G4VRangeToEnergyConverter::GetVerboseLevel() const
172{
173   return verboseLevel;
174}
175
176
177#endif
178
179
180
181
182
183
184
185
Note: See TracBrowser for help on using the repository browser.