24 #include "cheetah/tdas/AccListGenConfig.h" 31 static const double default_acc_lo = -5.0;
32 static const double default_acc_hi = 5.0;
33 static const double default_tol= 1.10;
34 static const double default_pulse_width = 0.000064;
35 static const double default_cfreq = 1400.0;
36 static const double default_bw = 700.0/4960.0;
38 AccListGenConfig::AccListGenConfig()
39 : cheetah::utils::Config(
"acceleration_list_generator")
40 , _acc_lo(default_acc_lo)
41 , _acc_hi(default_acc_hi)
43 , _pulse_width(default_pulse_width)
44 , _cfreq(default_cfreq)
49 AccListGenConfig::~AccListGenConfig()
53 void AccListGenConfig::add_options(OptionsDescriptionEasyInit& add_options)
56 (
"acc_lo", boost::program_options::value<double>(&_acc_lo)->default_value(default_acc_lo),
57 "acceleration start m/s/s")
59 (
"acc_hi", boost::program_options::value<double>(&_acc_hi)->default_value(default_acc_hi),
60 "acceleration end m/s/s/")
62 (
"tol", boost::program_options::value<double>(&_tol)->default_value(default_tol),
63 "acceleration smearing tolerance (1.11=10%)")
65 (
"pulse_width", boost::program_options::value<double>(&_pulse_width)->default_value(default_pulse_width),
66 "minimum pulse width for which acc_tol is valid (in seconds)")
68 (
"cfreq", boost::program_options::value<double>(&_cfreq)->default_value(default_cfreq),
69 "centre frequency of the data block (in MHz)")
71 (
"bw", boost::program_options::value<double>(&_bw)->default_value(default_bw),
72 "channel bandwidth (in MHz)");
75 double AccListGenConfig::acc_lo()
const 80 void AccListGenConfig::acc_lo(
double acc_lo)
85 double AccListGenConfig::acc_hi()
const 90 void AccListGenConfig::acc_hi(
double acc_hi)
95 double AccListGenConfig::tolerance()
const 100 void AccListGenConfig::tolerance(
double tol)
105 double AccListGenConfig::pulse_width()
const 110 void AccListGenConfig::pulse_width(
double pulse_width)
112 _pulse_width = pulse_width;
115 double AccListGenConfig::cfreq()
const 120 void AccListGenConfig::cfreq(
double cfreq)
125 double AccListGenConfig::bw()
const 130 void AccListGenConfig::bw(
double bw)
135 data::AccelerationType AccListGenConfig::magnitude()
const 137 return std::max(std::abs(_acc_lo),std::abs(_acc_hi)) * data::meters_per_second_squared;
140 std::vector<data::AccelerationType> AccListGenConfig::acceleration_list(
141 data::DedispersionMeasureType<float> dm,
142 std::size_t number_of_samples,
143 double sampling_interval)
const 145 std::vector<data::AccelerationType> acc_list;
146 double _tobs = number_of_samples*sampling_interval;
148 if (_acc_hi == _acc_lo) {
149 acc_list.push_back(_acc_lo * data::meters_per_second_squared);
152 double tdm = (8.3 * std::abs(_bw) / std::pow(_cfreq,3.0) * dm.value());
153 double c = boost::units::si::constants::codata::c.value().value();
154 double ttdm = tdm*tdm;
155 double tpulse = _pulse_width*_pulse_width;
156 double ttsamp = sampling_interval*sampling_interval;
157 double ttobs = _tobs * _tobs;
158 double width = std::sqrt(ttdm+tpulse+ttsamp);
159 double alt_a = 2.0 * width * 24.0 * c/ttobs * std::sqrt((_tol*_tol)-1.0);
160 std::size_t naccels = std::size_t(((_acc_hi-_acc_lo)/alt_a));
161 acc_list.reserve(naccels+3);
162 acc_list.push_back(0.0 * data::meters_per_second_squared);
163 for (
auto acc=_acc_lo; acc <= _acc_hi; acc+=alt_a)
165 acc_list.push_back(acc * data::meters_per_second_squared);
Some limits and constants for FLDO.