source: trunk/source/materials/include/G4MaterialPropertyVector.hh@ 1012

Last change on this file since 1012 was 986, checked in by garnier, 17 years ago

fichiers manquants

File size: 6.0 KB
RevLine 
[822]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//
[850]27// $Id: G4MaterialPropertyVector.hh,v 1.11 2008/06/05 23:37:37 gum Exp $
[986]28// GEANT4 tag $Name: geant4-09-02-ref-02 $
[822]29//
30//
31////////////////////////////////////////////////////////////////////////
32// G4MaterialPropertyVector Class Definition
33////////////////////////////////////////////////////////////////////////
34//
35// File: G4MaterialPropertyVector.hh
36//
[850]37// Description: A one-to-one mapping from Photon Energy to some
[822]38// optical property
39// Version: 1.0
40// Created: 1996-02-08
41// Author: Juliet Armstrong
42// Updated: 1999-10-29 add method and class descriptors
43// 1997-03-25 by Peter Gumplinger
44// > value.h -> templates.hh
45// mail: gum@triumf.ca
46//
47////////////////////////////////////////////////////////////////////////
48
49#ifndef G4MaterialPropertyVector_h
50#define G4MaterialPropertyVector_h 1
51
52/////////////
53// Includes
54/////////////
55
56#include "G4MPVEntry.hh"
57#include <vector>
58#include <functional>
59
60// Class Description:
[850]61// A one-to-one mapping from Photon Energy to some optical property.
[822]62// Class Description - End:
63
64/////////////////////
65// Class Definition
66/////////////////////
67
68class G4MaterialPropertyVector {
69
70 struct MPVEntry_less
71 : public std::binary_function<G4MPVEntry*, G4MPVEntry*, G4bool>
72 {
73 G4bool operator()(G4MPVEntry* x, G4MPVEntry* y) { return *x < *y; }
74 };
75
76public: // Without description
77
78 //////////////
79 // Operators
80 //////////////
81
82 G4bool operator ++();
83 G4MaterialPropertyVector&
84 operator =(const G4MaterialPropertyVector &right);
85
86 /////////////////
87 // Constructors
88 /////////////////
89
90 G4MaterialPropertyVector() : MPV(0)
91 {
92 CurrentEntry = -1;
93 NumEntries = 0;
94 };
95
96public: // With description
97
[850]98 G4MaterialPropertyVector(G4double *PhotonEnergies,
[822]99 G4double *PropertyValues,
100 G4int NumElements);
101 // Constructor of G4MaterialPropertyVector object.
102
103public: // Without description
104
105 G4MaterialPropertyVector(const G4MaterialPropertyVector &right);
106
107 ///////////////
108 // Destructor
109 ///////////////
110
111 ~G4MaterialPropertyVector();
112
113 ////////////
114 // Methods
115 ////////////
116
117public: // With description
118
119 void ResetIterator();
120
[850]121 void AddElement(G4double aPhotonEnergy,
[822]122 G4double aPropertyValue);
123 // Add a new element (pair of numbers) to the G4MaterialPropertyVector.
[850]124 void RemoveElement(G4double aPhotonEnergy);
[822]125 // Remove the element with given x-value.
126
[850]127 G4double GetProperty(G4double aPhotonEnergy) const;
[822]128 // Returns the y-value for given x-value (with interpolation).
[850]129 G4double GetPhotonEnergy(G4double aProperty) const;
[822]130 // Returns the x-value for given y-value (with interpolation).
131 // NOTE: Assumes that the y-value is an increasing function of
132 // the x-value. Returns the x-value corresponding to the
133 // y-value passed in. If several x-values correspond to
134 // the y-value passed in, the method returns the first
135 // x-value in the vector that corresponds to that value.
136 // For use with G4MaterialPropertyVector iterator: return
[850]137 // property (or Photon Energy) at current point of iterator.
[822]138
139 G4double GetProperty() const;
[850]140 G4double GetPhotonEnergy() const;
[822]141
142 G4double GetMaxProperty() const;
143 G4double GetMinProperty() const;
[850]144 G4double GetMaxPhotonEnergy() const;
145 G4double GetMinPhotonEnergy() const;
[822]146
147 //////////
148 // Tests
149 //////////
150
151 void DumpVector();
152
153private:
154
155 /////////////////////
156 // Helper Functions
157 /////////////////////
158
159 G4MPVEntry GetEntry(G4int i) const;
160
[850]161 void GetAdjacentBins(G4double aPhotonEnergy,
[822]162 G4int *left,G4int *right) const;
163
164 /////////////////////////
165 // Private Data Members
166 /////////////////////////
167
168 std::vector<G4MPVEntry*> MPV;
169 G4int NumEntries;
170 G4int CurrentEntry;
171};
172
173///////////////////
174// Inline methods
175///////////////////
176
177inline
178G4double G4MaterialPropertyVector::GetMaxProperty() const
179{
180 return MPV.back()->GetProperty();
181}
182
183inline
184G4double G4MaterialPropertyVector::GetMinProperty() const
185{
186 return MPV.front()->GetProperty();
187}
188
189inline
[850]190G4double G4MaterialPropertyVector::GetMaxPhotonEnergy() const
[822]191{
[850]192 return MPV.back()->GetPhotonEnergy();
[822]193}
194
195inline
[850]196G4double G4MaterialPropertyVector::GetMinPhotonEnergy() const
[822]197{
[850]198 return MPV.front()->GetPhotonEnergy();
[822]199}
200
201#endif /* G4MaterialPropertyVector_h */
Note: See TracBrowser for help on using the repository browser.