@@ -187,25 +187,6 @@ class Particle {
187187
188188 Particle ();
189189
190- // ==========================================================================
191- // Methods and accessors
192-
193- // Accessors for position in global coordinates
194- Position& r () { return coord_[0 ].r ; }
195- const Position& r () const { return coord_[0 ].r ; }
196-
197- // Accessors for position in local coordinates
198- Position& r_local () { return coord_[n_coord_ - 1 ].r ; }
199- const Position& r_local () const { return coord_[n_coord_ - 1 ].r ; }
200-
201- // Accessors for direction in global coordinates
202- Direction& u () { return coord_[0 ].u ; }
203- const Direction& u () const { return coord_[0 ].u ; }
204-
205- // Accessors for direction in local coordinates
206- Direction& u_local () { return coord_[n_coord_ - 1 ].u ; }
207- const Direction& u_local () const { return coord_[n_coord_ - 1 ].u ; }
208-
209190 // ! resets all coordinate levels for the particle
210191 void clear ();
211192
@@ -279,8 +260,16 @@ class Particle {
279260 uint64_t * current_seed () {return seeds_ + stream_;}
280261 const uint64_t * current_seed () const {return seeds_ + stream_;}
281262
263+ // ! Force recalculation of neutron xs by setting last energy to zero
264+ void invalidate_neutron_xs ()
265+ {
266+ for (auto & micro : neutron_xs_)
267+ micro.last_E = 0.0 ;
268+ }
269+
270+ private:
282271 // ==========================================================================
283- // Data members
272+ // Data members (accessor methods are below)
284273
285274 // Cross section caches
286275 std::vector<NuclideMicroXS> neutron_xs_; // !< Microscopic neutron cross sections
@@ -387,6 +376,138 @@ class Particle {
387376 #endif
388377
389378 int64_t n_progeny_ {0 }; // Number of progeny produced by this particle
379+
380+ public:
381+ // ==========================================================================
382+ // Methods and accessors
383+
384+ NuclideMicroXS& neutron_xs (const int & i) { return neutron_xs_[i]; }
385+ const NuclideMicroXS& neutron_xs (const int & i) const
386+ {
387+ return neutron_xs_[i];
388+ }
389+ ElementMicroXS& photon_xs (const int & i) { return photon_xs_[i]; }
390+ MacroXS& macro_xs () { return macro_xs_; }
391+ const MacroXS& macro_xs () const { return macro_xs_; }
392+
393+ int64_t & id () { return id_; }
394+ Type& type () { return type_; }
395+ const Type& type () const { return type_; }
396+
397+ int & n_coord () { return n_coord_; }
398+ const int & n_coord () const { return n_coord_; }
399+ int & cell_instance () { return cell_instance_; }
400+ const int & cell_instance () const { return cell_instance_; }
401+ LocalCoord& coord (const int & i) { return coord_[i]; }
402+ const LocalCoord& coord (const int & i) const { return coord_[i]; }
403+
404+ int & n_coord_last () { return n_coord_last_; }
405+ const int & n_coord_last () const { return n_coord_last_; }
406+ int & cell_last (const int & i) { return cell_last_[i]; }
407+ const int & cell_last (const int & i) const { return cell_last_[i]; }
408+
409+ double & E () { return E_ ; }
410+ const double & E () const { return E_ ; }
411+ double & E_last () { return E_last_; }
412+ const double & E_last () const { return E_last_; }
413+ int & g () { return g_; }
414+ const int & g () const { return g_; }
415+ int & g_last () { return g_last_; }
416+ const int & g_last () const { return g_last_; }
417+
418+ double & wgt () { return wgt_; }
419+ double & mu () { return mu_; }
420+ const double & mu () const { return mu_; }
421+ bool & alive () { return alive_; }
422+
423+ Position& r_last_current () { return r_last_current_; }
424+ const Position& r_last_current () const { return r_last_current_; }
425+ Position& r_last () { return r_last_; }
426+ const Position& r_last () const { return r_last_; }
427+ Position& u_last () { return u_last_; }
428+ const Position& u_last () const { return u_last_; }
429+ double & wgt_last () { return wgt_last_; }
430+ const double & wgt_last () const { return wgt_last_; }
431+ double & wgt_absorb () { return wgt_absorb_; }
432+ const double & wgt_absorb () const { return wgt_absorb_; }
433+
434+ bool & fission () { return fission_; }
435+ TallyEvent& event () { return event_; }
436+ const TallyEvent& event () const { return event_; }
437+ int & event_nuclide () { return event_nuclide_; }
438+ const int & event_nuclide () const { return event_nuclide_; }
439+ int & event_mt () { return event_mt_; }
440+ int & delayed_group () { return delayed_group_; }
441+
442+ int & n_bank () { return n_bank_; }
443+ int & n_bank_second () { return n_bank_second_; }
444+ double & wgt_bank () { return wgt_bank_; }
445+ int * n_delayed_bank () { return n_delayed_bank_; }
446+ int & n_delayed_bank (const int & i) { return n_delayed_bank_[i]; }
447+
448+ int & surface () { return surface_; }
449+ const int & surface () const { return surface_; }
450+ int & cell_born () { return cell_born_; }
451+ const int & cell_born () const { return cell_born_; }
452+ int & material () { return material_; }
453+ const int & material () const { return material_; }
454+ int & material_last () { return material_last_; }
455+
456+ BoundaryInfo& boundary () { return boundary_; }
457+
458+ double & sqrtkT () { return sqrtkT_; }
459+ const double & sqrtkT () const { return sqrtkT_; }
460+ double & sqrtkT_last () { return sqrtkT_last_; }
461+
462+ int & n_collision () { return n_collision_; }
463+
464+ bool & write_track () { return write_track_; }
465+ uint64_t & seeds (const int & i) { return seeds_[i]; }
466+ uint64_t * seeds () { return seeds_; }
467+ int & stream () { return stream_; }
468+
469+ Particle::Bank& secondary_bank (const int & i) { return secondary_bank_[i]; }
470+ decltype (secondary_bank_)& secondary_bank () { return secondary_bank_; }
471+ int64_t & current_work () { return current_work_; }
472+ decltype (flux_derivs_)& flux_derivs () { return flux_derivs_; }
473+ const decltype (flux_derivs_)& flux_derivs() const { return flux_derivs_; }
474+ decltype (filter_matches_)& filter_matches () { return filter_matches_; }
475+ FilterMatch& filter_matches (const int & i) { return filter_matches_[i]; }
476+ decltype (tracks_)& tracks () { return tracks_; }
477+ decltype (nu_bank_)& nu_bank () { return nu_bank_; }
478+ NuBank& nu_bank (const int & i) { return nu_bank_[i]; }
479+
480+ double & keff_tally_absorption () { return keff_tally_absorption_; }
481+ double & keff_tally_collision () { return keff_tally_collision_; }
482+ double & keff_tally_tracklength () { return keff_tally_tracklength_; }
483+ double & keff_tally_leakage () { return keff_tally_leakage_; }
484+
485+ bool & trace () { return trace_; }
486+ double & collision_distance () { return collision_distance_; }
487+ int & n_event () { return n_event_; }
488+
489+ #ifdef DAGMC
490+ moab::DagMC::RayHistory& rayhistory () { return history_; }
491+ Direction& last_dir () { return last_dir_; }
492+ #endif
493+
494+ int64_t & n_progeny () { return n_progeny_; }
495+
496+ // Accessors for position in global coordinates
497+ Position& r () { return coord_[0 ].r ; }
498+ const Position& r () const { return coord_[0 ].r ; }
499+
500+ // Accessors for position in local coordinates
501+ Position& r_local () { return coord_[n_coord_ - 1 ].r ; }
502+ const Position& r_local () const { return coord_[n_coord_ - 1 ].r ; }
503+
504+ // Accessors for direction in global coordinates
505+ Direction& u () { return coord_[0 ].u ; }
506+ const Direction& u () const { return coord_[0 ].u ; }
507+
508+ // Accessors for direction in local coordinates
509+ Direction& u_local () { return coord_[n_coord_ - 1 ].u ; }
510+ const Direction& u_local () const { return coord_[n_coord_ - 1 ].u ; }
390511};
391512
392513// ============================================================================
0 commit comments