ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4RDCompositeEMDataSet.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4RDCompositeEMDataSet.cc
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 //
28 // Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
29 //
30 // History:
31 // -----------
32 // 1 Aug 2001 MGP Created
33 //
34 // -------------------------------------------------------------------
35 
37 #include "G4RDEMDataSet.hh"
38 #include "G4RDVDataSetAlgorithm.hh"
39 #include <fstream>
40 #include <sstream>
41 
43  G4double argUnitEnergies,
44  G4double argUnitData,
45  G4int argMinZ,
46  G4int argMaxZ)
47  :
48  algorithm(argAlgorithm),
49  unitEnergies(argUnitEnergies),
50  unitData(argUnitData),
51  minZ(argMinZ),
52  maxZ(argMaxZ)
53 {
54  if (algorithm == 0)
55  G4Exception("G4RDCompositeEMDataSet::G4RDCompositeEMDataSet()",
56  "InvalidSetup", FatalException, "Interpolation == 0!");
57 }
58 
59 
60 
62 {
64  if (algorithm) delete algorithm;
65 }
66 
67 
68 G4double G4RDCompositeEMDataSet::FindValue(G4double argEnergy, G4int argComponentId) const
69 {
70  const G4RDVEMDataSet* component(GetComponent(argComponentId));
71 
72  if (component) return component->FindValue(argEnergy);
73 
74  std::ostringstream message;
75  message << "Component " << argComponentId << " not found";
76 
77  G4Exception("G4RDCompositeEMDataSet::FindValue()",
78  "DataNotFound", FatalException, message.str().c_str());
79 
80  return 0.;
81 }
82 
84 {
85  const size_t n(NumberOfComponents());
86 
87  G4cout << "The data set has " << n << " components" << G4endl;
88  G4cout << G4endl;
89 
90  size_t i(0);
91 
92  while (i<n)
93  {
94  G4cout << "--- Component " << i << " ---" << G4endl;
95  GetComponent(i)->PrintData();
96  i++;
97  }
98 }
99 
100 void G4RDCompositeEMDataSet::SetEnergiesData(G4DataVector* argEnergies, G4DataVector* argData, G4int argComponentId)
101 {
102  G4RDVEMDataSet * component(components[argComponentId]);
103 
104  if (component)
105  {
106  component->SetEnergiesData(argEnergies, argData, 0);
107  return;
108  }
109 
110  std::ostringstream message;
111  message << "Component " << argComponentId << " not found";
112 
113  G4Exception("G4RDCompositeEMDataSet::SetEnergiesData()",
114  "DataNotFound", FatalException, message.str().c_str());
115 }
116 
118 {
120 
121  for (G4int z(minZ); z<maxZ; z++)
122  {
124  if (!component->LoadData(argFileName))
125  {
126  delete component;
127  return false;
128  }
129  AddComponent(component);
130  }
131  return true;
132 }
133 
134 
135 
137 {
138  for (G4int z=minZ; z<maxZ; z++)
139  {
140  const G4RDVEMDataSet* component(GetComponent(z-minZ));
141 
142  if (!component)
143  {
144  std::ostringstream message;
145  message << "Component " << (z-minZ) << " not found";
146  G4Exception("G4RDCompositeEMDataSet::SaveData()",
147  "DataNotFound", FatalException, message.str().c_str());
148  }
149 
150  if (!component->SaveData(argFileName))
151  return false;
152  }
153 
154  return true;
155 }
156 
158 {
159  while (!components.empty())
160  {
161  if (components.back())
162  delete components.back();
163  components.pop_back();
164  }
165 }
166 
167 
169 {
170  G4double value = 0.;
171  if (componentId >= 0 && componentId < (G4int)components.size())
172  {
173  const G4RDVEMDataSet* dataSet = GetComponent(componentId);
174  value = dataSet->RandomSelect();
175  }
176  return value;
177 }