Defines an image model based on the RIAF models employed in Broderick, Fish, Doeleman and Loeb (2011) and Broderick et al. (2016), permitting greater freedom to modify the underlying semi-analytic accretion flow structure. More...
#include "model/model_image_riaf.h"
Public Member Functions | |
model_image_riaf (double frequency=230e9, double M=VRT2::VRT2_Constants::M_SgrA_cm, double D=VRT2::VRT2_Constants::D_SgrA_cm) | |
Constructor to make a RIAF model. Takes a frequency (Hz), mass (cm), distance (cm). | |
virtual size_t | size () const |
Returns the number of the parameters the model expects. | |
virtual std::string | model_tag () const |
Return a string that contains a unique identifying tag for use with the ThemisPy plotting features. | |
void | set_image_resolution (int Nray) |
double | frequency () const |
Returns the frequency at which this model is created. | |
double | generate_flux_estimate (double accuracy, std::vector< double > parameters) |
Returns an estimate of the total flux, computed over a dynamically adjusted region, at the frequency at which this model is created. An accuracy parameter (in Jy) is passed that defines the absolute accuracy at which the flux estimate must be computed. | |
virtual void | set_mpi_communicator (MPI_Comm comm) |
Defines a set of processors provided to the model for parallel computation via an MPI communicator. Only facilates code parallelization if the model computation is parallelized via MPI. | |
Public Member Functions inherited from model_image | |
virtual void | generate_model (std::vector< double > parameters) |
A one-time generate function that permits model construction prior to calling the visibility_amplitude, closure_phase, etc. for each datum. Takes a vector of parameters. | |
virtual void | generate_complex_visibilities () |
A one-time generate function that will generate the complex visibilities and store them. This must be called after generate_model has been called. | |
virtual std::complex< double > | visibility (datum_visibility &d, double accuracy) |
Returns complex visibility in Jy computed from the image given a datum_visibility_amplitude object, containing all of the accoutrements. While this provides access to the actual data value, the two could be separated if necessary. Also takes an accuracy parameter with the same units as the data, indicating the accuracy with which the model must generate a comparison value. Note that this can be redefined in child classes. | |
virtual double | visibility_amplitude (datum_visibility_amplitude &d, double accuracy) |
Returns visibility ampitudes in Jy computed from the image given a datum_visibility_amplitude object, containing all of the accoutrements. While this provides access to the actual data value, the two could be separated if necessary. Also takes an accuracy parameter with the same units as the data, indicating the accuracy with which the model must generate a comparison value. Note that this can be redefined in child classes. | |
virtual double | closure_phase (datum_closure_phase &d, double accuracy) |
Returns closure phase in degrees computed from the image given a datum_closure_phase object, containing all of the accoutrements. While this provides access to the actual data value, the two could be separated if necessary. Also takes an accuracy parameter with the same units as the data, indicating the accuracy with which the model must generate a comparison value. Note that this can be redefined in child classes. | |
virtual double | closure_amplitude (datum_closure_amplitude &d, double accuracy) |
Returns closure amplitude computed from the image given a datum_closure_phase object, containing all of the accoutrements. While this provides access to the actual data value, the two could be separated if necessary. Also takes an accuracy parameter with the same units as the data, indicating the accuracy with which the model must generate a comparison value. Note that this can be redefined in child classes. | |
void | output_image (std::string fname, bool rotate=false) |
void | get_image (std::vector< std::vector< double > > &alpha, std::vector< std::vector< double > > &beta, std::vector< std::vector< double > > &I) const |
Provides direct access to the constructed image. Sets a 2D grid of angles (alpha, beta) in radians and intensities in Jy per steradian. | |
void | get_visibilities (std::vector< std::vector< double > > &u, std::vector< std::vector< double > > &v, std::vector< std::vector< std::complex< double > > > &V) const |
Provides direct access to the complex visibilities. Sets a 2D grid of baselines (u,v) in lambda, and visibilites in Jy. | |
void | get_visibility_amplitudes (std::vector< std::vector< double > > &u, std::vector< std::vector< double > > &v, std::vector< std::vector< double > > &V) const |
Provides direct access to the visibility amplitudes. Sets a 2D grid of baselines (u,v) in lambda, and visibilites in Jy. | |
void | use_spline_interp (bool use_spline) |
Provides ability to use bicubic spline interpolator (true) instead of regular bicubic. Code defaults to false. | |
void | write_model_tag_file (std::string tagfilename="model_image.tag") const |
Write a unique identifying tag for use with the ThemisPy plotting features. This calls the overloaded version with the outstream, which is the only function that need be rewritten in child classes. | |
virtual void | write_model_tag_file (std::ofstream &tagout) const |
Write a unique identifying tag for use with the ThemisPy plotting features. For most child classes, the default implementation is suffcient. However, should that not be the case, this is the only function that need be rewritten in child classes. | |
Protected Attributes | |
MPI_Comm | _comm |
Protected Attributes inherited from model_image | |
MPI_Comm | _comm |
bool | _generated_model |
True when a model is generated with generate_model. | |
bool | _generated_visibilities |
True when model visibilities have been computed. | |
bool | _use_spline |
True when want to use bicubic spline interpolator. | |
double | _position_angle |
Position angle of the image, assumed to be the last element of the parameter list passed to generate_model. Assumed to be in radians and defined E of N. | |
std::vector< double > | _current_parameters |
Last set of parameters passed to generate_image, useful to determine if it is necessary to recompute the model. Useful, e.g., if we are varying only position angle, or if recomputing for a number of different data sets at the same set of parameters. | |
std::vector< std::vector< double > > | _alpha |
2D grid of horizonal pixel locations in radians, relative to the fiducial direction of the image (i.e., unrotated by the position angle). | |
std::vector< std::vector< double > > | _beta |
2D grid of vertical pixel locations in radians, relative to the fiducial direction of the image (i.e., unrotated by the position angle). | |
std::vector< std::vector< double > > | _I |
2D grid of intensities at pixel locations in Jy/str. | |
Protected Attributes inherited from model_visibility | |
MPI_Comm | _comm |
Protected Attributes inherited from model_visibility_amplitude | |
MPI_Comm | _comm |
Protected Attributes inherited from model_closure_phase | |
MPI_Comm | _comm |
Protected Attributes inherited from model_closure_amplitude | |
MPI_Comm | _comm |
Private Member Functions | |
virtual void | generate_image (std::vector< double > parameters, std::vector< std::vector< double > > &I, std::vector< std::vector< double > > &alpha, std::vector< std::vector< double > > &beta) |
Generates and returns rectalinear grid of intensities associated with the RIAF image model in Jy/str located at pixels centered on angular positions alpha and beta, both specified in radians and aligned with a fiducial direction. Note that the parameter vector has had the position removed. | |
double | generate_renormalized_image (double density_factor, int Nrays, double Rmax, std::vector< double > parameters, std::vector< std::vector< double > > &I, std::vector< std::vector< double > > &alpha, std::vector< std::vector< double > > &beta) |
Generates an image with all of the electron densities renormalized by density_factor, modeling a variation in the accretion rate. Returns the integrated intensity. Optionally returns I, alpha, beta. | |
double | estimate_image_size_log_spiral (VRT2::PolarizationMap &pmap, double initial_r, double theta_step, double percent_from_max_I, unsigned int max_iter, double safety_factor) |
Generates accuracy-assured flux estimate. Note that there is some code duplication with generate_renormalized_image. | |
void | open_error_streams () |
Opens model-communicator-specific error streams for debugging output. | |
Private Attributes | |
const double | _M |
Internal mass in cm for the current model. | |
const double | _D |
Internal distance in cm for the current model. | |
const double | _frequency |
Internal frequency in Hz for the current model. | |
const double | _default_Rmax |
Default image sizes in M (note, not applied to flux estimates) | |
int | _Nray |
Image resolution. | |
std::ofstream | _merr |
Model-specific error stream. | |
Detailed Description
Provides explicit implementation of the model_image object for the semi-analytic RIAF models. There are additional tuning parameters that may impact accuracy, e.g., distance to the image screen, number of rays to produce, etc. See the appropriate parts of model_image_riaf.cpp for more. It also provides a flux estimate for inclusion in later flux_model extensions (model_riaf).
Parameter list:
- parameters[0] ... Black hole spin parameter (-1 to 1).
- parameters[1] ... Cosine of the spin inclination relative to line of sight.
- parameters[2] ... "Thermal" electron population density normalization in \({\rm cm}^{-3}\).
- parameters[3] ... "Thermal" electron population density radial power law.
- parameters[4] ... "Thermal" electron population density \(h/r\).
- parameters[5] ... "Thermal" electron population temperature normalization in K.
- parameters[6] ... "Thermal" electron population temperature radial power law.
- parameters[7] ... Power-law electron population density normalization in \({\rm cm}^{-3}\).
- parameters[8] ... Power-law electron population density radial power law.
- parameters[9] ... Power-law electron population density \(h/r\).
- parameters[10] .. Power-law electron population density spectral index.
- parameters[11] .. Power-law electron population density minimum Lorentz factor.
- parameters[12] .. Plasma beta.
- parameters[13] .. Sub-keplerian parameter, i.e., sets \(u_\phi/u_t =\) parameters[13] \(\times\)<keplerian value>.
- parameters[14] .. Position angle (in model_image) in radians.
- Warning
- This defines a model_image object associated with a RIAF observed at single frequency. Requires the VRT2 library to be installed.
Member Function Documentation
void set_image_resolution | ( | int | Nray | ) |
Sets model_image_sed_fitted_riaf to generate production images with resolution Nray x Nray. The default is 128x128, which is probably larger than required in practice.
The documentation for this class was generated from the following files:
- model/model_image_riaf.h
- model/model_image_riaf.cpp