ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4NucLevel.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4NucLevel.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 //
29 // GEANT4 header file
30 //
31 // File name: G4NucLevel
32 //
33 // Author: V.Ivanchenko
34 //
35 // Creation date: 4 January 2012
36 //
37 // Modifications:
38 // 13.02.2015 Design change for gamma de-excitation
39 //
40 // -------------------------------------------------------------------
41 
42 #include "G4NucLevel.hh"
43 #include "G4HadronicException.hh"
44 #include <iomanip>
45 
46 G4NucLevel::G4NucLevel(size_t ntrans, G4double tgamma,
47  const std::vector<G4int>& vTrans,
48  const std::vector<G4float>& wLevelGamma,
49  const std::vector<G4float>& wGamma,
50  const std::vector<G4float>& vRatio,
51  const std::vector<const std::vector<G4float>*>& wShell)
52  : length(ntrans), fTimeGamma(tgamma)
53 {
54  if(0 < length) {
55  fTrans.reserve(length);
57  fGammaProbability.reserve(length);
58  fMpRatio.reserve(length);
59  fShellProbability.reserve(length);
60  for(size_t i=0; i<length; ++i) {
61  fTrans.push_back(vTrans[i]);
62  fGammaCumProbability.push_back(wLevelGamma[i]);
63  fGammaProbability.push_back(wGamma[i]);
64  fMpRatio.push_back(vRatio[i]);
65  fShellProbability.push_back(wShell[i]);
66  }
67  }
68 }
69 
71 {
72  for(size_t i=0; i<length; ++i) {
73  delete fShellProbability[i];
74  }
75 }
76 
77 #ifdef G4VERBOSE
78 void G4NucLevel::PrintError(size_t idx, const G4String& ss) const
79 {
80  G4cout << "G4NucLevel::PrintError: length= " << length << G4endl;
81  for(size_t i=0; i<length; ++i) {
82  G4cout << i << ". " /*<< fFinalIndex[i] << " "*/ << fTrans[i]
83  << fGammaCumProbability[i] << " " << fTimeGamma << " "
84  << fGammaProbability[i] << " "
85  << fMpRatio[i] << G4endl;
86  }
87  G4String sss = "G4NucLevel::"+ss+"()";
89  ed << "Index of a level " << idx << " >= "
90  << length << " (number of transitions)";
91  G4Exception(sss,"had061",JustWarning,ed,"");
92  throw G4HadronicException(__FILE__, __LINE__,"FATAL Hadronic Exception");
93 }
94 #endif
95 
96 void G4NucLevel::StreamInfo(std::ostream& out) const
97 {
98  G4int prec = out.precision(4);
99  for(size_t i=0; i<length; ++i) {
100  out << std::setw(12) << FinalExcitationIndex(i)
101  << std::setw(4) << TransitionType(i)
102  << std::setw(7) << fMpRatio[i]
103  << std::setw(7) << fGammaCumProbability[i]
104  << std::setw(7) << fGammaProbability[i]
105  << "\n";
106  const std::vector<G4float>* vec = fShellProbability[i];
107  if(vec) {
108  size_t len = vec->size();
109  out << " ";
110  for(size_t j=0; j<len; ++j) { out << std::setw(7) << (*vec)[j]; }
111  out << "\n";
112  }
113  }
114  out.precision(prec);
115 }