MARLEY (Model of Argon Reaction Low Energy Yields) v2.0.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Loading...
Searching...
No Matches
ResponseTable.hh
1
4//
5// This file is part of MARLEY (Model of Argon Reaction Low Energy Yields)
6//
7// MARLEY is free software: you can redistribute it and/or modify it under the
8// terms of version 3 of the GNU General Public License as published by the
9// Free Software Foundation.
10//
11// For the full text of the license please see COPYING or
12// visit http://opensource.org/licenses/GPL-3.0
13//
14// Please respect the MCnet academic usage guidelines. See GUIDELINES
15// or visit https://www.montecarlonet.org/GUIDELINES for details.
16
17#pragma once
18
19// Standard library includes
20#include <fstream>
21#include <functional>
22#include <memory>
23#include <vector>
24
25// MARLEY includes
26#include "marley/NuclearResponses.hh"
27
28namespace marley {
29
32 class ResponseTable {
33 public:
34
35 ResponseTable() {}
36
37 ResponseTable( std::shared_ptr< std::vector<double> >& wvec,
38 std::shared_ptr< std::vector<double> >& qvec,
39 std::shared_ptr< std::vector<NuclearResponses> >& resp )
40 : wvec_( wvec ), qvec_( qvec ), responses_( resp ) {}
41
43 inline double w_min() const { return wvec_->front(); }
44
46 inline double w_max() const { return wvec_->back(); }
47
49 inline double q_min() const { return qvec_->front(); }
50
52 inline double q_max() const { return qvec_->back(); }
53
55 inline const std::vector<double>& w_grid() const { return *wvec_; }
56
58 inline const std::vector<double>& q_grid() const { return *qvec_; }
59
61 inline const std::vector<NuclearResponses>& get_responses() const
62 { return *responses_; }
63
68 inline size_t response_index( size_t iw, size_t iq ) const {
69 size_t num_q_points = qvec_->size();
70 size_t r_idx = ( num_q_points * iw ) + iq;
71 return r_idx;
72 }
73
76 NuclearResponses interpolate(double w, double q) const;
77
78 protected:
79
81 std::shared_ptr< std::vector<double> > wvec_;
82
84 std::shared_ptr< std::vector<double> > qvec_;
85
87 std::shared_ptr< std::vector<NuclearResponses> > responses_;
88
102 bool get_neighbor_indices( const std::vector<double>& vec,
103 double val, size_t& lower_index, size_t& upper_index ) const;
104 };
105
106}
107
108inline std::ostream& operator<<(std::ostream& out,
109 const marley::ResponseTable& rt)
110{
111 for ( size_t iw = 0u; iw < rt.w_grid().size(); ++iw ) {
112 for ( size_t iq = 0u; iq < rt.q_grid().size(); ++iq ) {
113 out << rt.w_grid().at( iw ) << " " << rt.q_grid().at( iq ) << " ";
114 size_t ir = rt.response_index( iw, iq );
115 out << rt.get_responses().at( ir ) << '\n';
116 }
117 }
118 return out;
119}
A table of nuclear responses for computing inclusive cross sections.
double q_max() const
Retrieve the maximum q value.
double w_max() const
Retrieve the maximum ω value.
const std::vector< double > & q_grid() const
Access the 3-momentum transfer grid points.
std::shared_ptr< std::vector< double > > wvec_
Grid points along the w-axis.
size_t response_index(size_t iw, size_t iq) const
bool get_neighbor_indices(const std::vector< double > &vec, double val, size_t &lower_index, size_t &upper_index) const
std::shared_ptr< std::vector< NuclearResponses > > responses_
Sets of nuclear responses evaluated at each grid point.
const std::vector< double > & w_grid() const
Access the energy transfer grid points.
const std::vector< NuclearResponses > & get_responses() const
Access the nuclear responses.
std::shared_ptr< std::vector< double > > qvec_
Grid points along the q-axis.
double w_min() const
Retrieve the minimum ω value.
NuclearResponses interpolate(double w, double q) const
double q_min() const
Retrieve the minimum q value.