16#include "tkensdf_reader.h"
33 glog.set_class(
"ensdf_ascii_reader");
34 glog.set_method(
tkstring::form(
"open_nuc(%s,%d)", _nuc_name.data(), _ftype));
36 if (TKN_SYS ==
nullptr) {
37 glog <<
error_v <<
" TKN_SYS environment variable not defined, cannot find the repository of the data bases !" <<
do_endl;
47 file_name =
tkstring::Form(
"%s/ENSDF/%s.ens", finput_folder.data(), _nuc_name.data());
49 file_name =
tkstring::Form(
"%s/XUNDL/%s.ens", finput_folder.data(), _nuc_name.data());
51 glog <<
warning_v <<
" database for nucleus " << _nuc_name <<
" not found" <<
do_endl;
60 return open_file(file_name);
63bool tkensdf_reader::open_file(
const tkstring &_file_name)
65 glog.set_class(
"ensdf_ascii_reader");
66 glog.set_method(
tkstring::form(
"open_file(%s)", _file_name.data()));
68 if (fEnsdf_file.is_open()) {
71 fEnsdf_file.open(_file_name);
81 bool new_dataset =
false;
85 getline(fEnsdf_file, record);
87 if (!fEnsdf_file.good())
break;
98 if (!fEnsdf_file && new_dataset) {
99 the_identification_record.
fposition.second = read_record;
100 fDataSets.push_back(the_identification_record);
101 the_identification_record.
clear();
112 if (fVerbose) the_identification_record.
print(std::cout);
117 fDataSets.push_back(the_identification_record);
118 the_identification_record.
clear();
122 if (fVerbose) glog <<
info << fDataSets.size() <<
" datasets have been found in the ENSDF file " << _file_name <<
do_endl;
126 return fEnsdf_file.is_open();
131 if (!fEnsdf_file.is_open()) {
136 if (fdata_type ==
kxundl) data_type =
"XUNDL";
137 glog <<
info <<
"Database type: " << data_type <<
do_endl;
138 glog <<
info << fDataSets.size() <<
" datasets have been found for nucleus " << fNucleus <<
":" <<
do_endl;
139 for (
auto &key : fDataSets) key.print(std::cout);
147 if (_dataset ==
nullptr)
return false;
150 getline(fEnsdf_file, record);
151 return fEnsdf_file.good();
156 if (_dataset ==
nullptr)
return false;
159 getline(fEnsdf_file, record);
160 return fEnsdf_file.good();
163void tkensdf_reader::close_file()
173 std::cout << std::endl;
178 for (
auto i : frecords_counter) {
182 std::cout << left <<
" - Record Type : counts without(with) continuation records" << std::endl;
183 for (
auto i : frecords_counter) {
185 std::cout << left <<
" - identification : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
187 std::cout << left <<
" - History : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
189 std::cout << left <<
" - Q-value : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
191 std::cout << left <<
" - X-ref : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
193 std::cout << left <<
" - Comment : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
195 std::cout << left <<
" - Parent : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
197 std::cout << left <<
" - Normalisation : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
199 std::cout << left <<
" - Production norm : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
201 std::cout << left <<
" - Level : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
203 std::cout << left <<
" - Beta : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
205 std::cout << left <<
" - EC : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
207 std::cout << left <<
" - Alpha : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
209 std::cout << left <<
" - Particle : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
211 std::cout << left <<
" - Gamma : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
213 std::cout << left <<
" - Reference : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
215 std::cout << left <<
" - End : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
217 std::cout << left <<
" - Unknown : " << setw(maxsize1 + 1) << i.second.first <<
" (" << setw(maxsize2) << i.second.second <<
")" << std::endl;
219 std::cout << std::endl;
Decodding of the ENSDF identification record properties.
void print(std::ostream &) const override
virtual bool set_record(const tkstring &_record) override
define the record from a string
std::pair< int, int > fposition
void set_stpop_position(int _pos)
void set_current_position(int _pos)
void set_start_position(int _pos)
int get_current_position()
void print_datasets()
print the list of loaded data sets for the current nucleus and data type
bool open_nuc(const tkstring &_nuc_name, const ensdf_data_type &_ftype=kensdf)
open the file for the slected nucleus and data type, and extract the available data sets
bool first_record(tkensdf_ident_rec *_dataset, tkstring &record)
move in the current file to the first record of the selected data set
void print_record_counters()
print record counters
bool next_record(tkensdf_ident_rec *_dataset, tkstring &record)
get the next record of the selected data set
Decodding of the ENSDF records.
virtual bool set_record(const tkstring &_record)
define the record from a string. Option false only checks if the record is an identification record
bool is_continuation_record()
to now if the record is a continuation record or not
record_type get_record_type()
get record type
std::string with usefull tricks from TString (ROOT) and KVString (KaliVeda) and more....
tkstring copy() const
Returns a copy of this string.
tkstring & to_lower()
Change all letters to lower case.
static const char * form(const char *_format,...)
static tkstring Form(const char *_format,...)
tkstring & capitalize()
Change first letter of string from lower to upper case.
tklog & error_v(tklog &log)
tklog & warning_v(tklog &log)
tklog & error(tklog &log)
tklog & do_endl(tklog &log)