Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PhysicsFreeVector.hh
Go to the documentation of this file.
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// G4PhysicsFreeVector
27//
28// Class description:
29//
30// A physics vector which has values of energy-loss, cross-section,
31// and other physics values of a particle in matter in a given
32// range of the energy, momentum, etc. The scale of energy/momentum
33// bins is in free, i.e. it is NOT need to be linear or log. Only
34// restriction is that bin values alway have to increase from
35// a lower bin to a higher bin. This is necessary for the binary
36// search to work correctly.
37
38// Authors:
39// - 02 Dec. 1995, G.Cosmo: Structure created based on object model
40// - 06 Jun. 1996, K.Amako: Implemented the 1st version
41// Revisions:
42// - 11 Nov. 2000, H.Kurashige: Use STL vector for dataVector and binVector
43// - 04 Feb. 2021, V.Ivanchenko moved implementation of all free vectors
44// to this class
45// --------------------------------------------------------------------
46#ifndef G4PhysicsFreeVector_hh
47#define G4PhysicsFreeVector_hh 1
48
49#include "G4PhysicsVector.hh"
50#include "globals.hh"
51#include <vector>
52
54{
55public:
56
57 // Constructors of a free vector without filling of data.
58 // The vector will be filled using PutValues(..), Retrieve(..), or
59 // InsertValues(..) methods.
60 // If length > 0 energy and data vectors are initialized with zeros
61 explicit G4PhysicsFreeVector(G4bool spline = false);
62 explicit G4PhysicsFreeVector(G4int length);
63 explicit G4PhysicsFreeVector(std::size_t length, G4bool spline = false);
64
65 // Obsolete constructor - emin and emax are not used
66 explicit G4PhysicsFreeVector(std::size_t length, G4double emin,
67 G4double emax, G4bool spline = false);
68
69 // The vector is filled in these constructor;
70 // 'energies' and 'values' need to have the same vector length;
71 // 'energies' assumed to increase, it is allowed to have consequtive
72 // equal energies
73 explicit G4PhysicsFreeVector(const std::vector<G4double>& energies,
74 const std::vector<G4double>& values,
75 G4bool spline = false);
76 explicit G4PhysicsFreeVector(const G4double* energies, const G4double* values,
77 std::size_t length, G4bool spline = false);
78
79 ~G4PhysicsFreeVector() override = default;
80
81 // Filling of the vector with the check on index and energy
82 void PutValues(const std::size_t index,
83 const G4double energy, const G4double value);
84
85 // Insert extra pair of energy and value
86 // If energy coincide with previously added energy then
87 // this new pair is added after
88 void InsertValues(const G4double energy, const G4double value);
89
90 // Obsolete method
91 inline void PutValue(const std::size_t index,
92 const G4double e, const G4double value);
93};
94
95inline void G4PhysicsFreeVector::PutValue(const std::size_t index,
96 const G4double e,
97 const G4double value)
98{
99 PutValues(index, e, value);
100}
101
102#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
void PutValue(const std::size_t index, const G4double e, const G4double value)
void InsertValues(const G4double energy, const G4double value)
void PutValues(const std::size_t index, const G4double energy, const G4double value)
~G4PhysicsFreeVector() override=default