@@ -49,38 +49,51 @@ namespace lrf7 {
4949 for ( unsigned int i = 0 ; i < channels.size (); ++i ) {
5050
5151 // get the energies and amplitudes
52- auto energies = format::createVector ( endfSpinGroup.parameters ().resonanceEnergies () );
53- auto amplitudes = format::createVector ( endfSpinGroup.parameters ().GAM (i) );
54-
55- // remove zero widths
56- auto is_zero= [] ( auto && value ) { return value == 0 .; };
57- auto amplitude = std::find_if ( amplitudes.begin (), amplitudes.end (), is_zero );
58- while ( amplitude != amplitudes.end () ) {
59-
60- auto index = std::distance ( amplitudes.begin (), amplitude );
61- amplitude = amplitudes.erase ( amplitude );
62- energies.erase ( energies.begin () + index );
63- amplitude = std::find_if ( amplitude, amplitudes.end (), is_zero );
64- }
52+ std::vector< double > energies;
53+ std::vector< double > amplitudes;
54+ if ( endfSpinGroup.parameters ().numberResonances () != 0 ) {
55+
56+ // get the data
57+ energies = format::createVector ( endfSpinGroup.parameters ().resonanceEnergies () );
58+ amplitudes = format::createVector ( endfSpinGroup.parameters ().GAM (i) );
59+
60+ // remove zero widths
61+ auto is_zero= [] ( auto && value ) { return value == 0 .; };
62+ auto amplitude = std::find_if ( amplitudes.begin (), amplitudes.end (), is_zero );
63+ while ( amplitude != amplitudes.end () ) {
64+
65+ auto index = std::distance ( amplitudes.begin (), amplitude );
66+ amplitude = amplitudes.erase ( amplitude );
67+ energies.erase ( energies.begin () + index );
68+ amplitude = std::find_if ( amplitude, amplitudes.end (), is_zero );
69+ }
6570
66- // if there are non-zero widths
67- if ( amplitudes.size () != 0 ) {
71+ // if there are non-zero widths left
72+ if ( amplitudes.size () != 0 ) {
6873
69- // transform into reduced width if required
70- if ( ! reduced_amplitudes ) {
74+ // transform into reduced width if required
75+ if ( ! reduced_amplitudes ) {
7176
72- auto to_reduced_width = [&] ( auto && width, auto && energy ) {
77+ auto to_reduced_width = [&] ( auto && width, auto && energy ) {
7378
74- double penetrability = channels[i].penetrability ( energy );
75- return ( width < 0 . ? -1 . : +1 . ) *
76- std::sqrt ( 0.5 * std::abs ( width ) / penetrability );
77- };
79+ double penetrability = channels[i].penetrability ( energy );
80+ return ( width < 0 . ? -1 . : +1 . ) *
81+ std::sqrt ( 0.5 * std::abs ( width ) / penetrability );
82+ };
7883
79- std::transform ( amplitudes.begin (), amplitudes.end (),
80- energies.begin (), amplitudes.begin (), to_reduced_width );
84+ std::transform ( amplitudes.begin (), amplitudes.end (),
85+ energies.begin (), amplitudes.begin (), to_reduced_width );
86+ }
8187 }
88+ }
89+
90+ auto id = channels[i].identifier ();
91+ auto reaction_id = id.reaction ();
92+ auto is_elastic = id.reaction ().target () == id.reaction ().residual ();
93+ auto is_capture = id.reaction ().reactionType () == id::ReactionType ( " capture" );
94+
95+ if ( amplitudes.size () > 0 || is_elastic || is_capture ) {
8296
83- auto id = channels[i].identifier ();
8497 dryad::resonances::ResonanceTable table ( id, std::move ( energies ), std::move ( amplitudes ) );
8598 channel_data.emplace_back ( std::move ( channels[i] ), std::move ( table ) );
8699 }
0 commit comments