Gyoto
GyotoPlasmoid.h
Go to the documentation of this file.
1
9/*
10 Copyright 2019 Frederic Vincent, Thibaut Paumard, Nicolas Aimar
11
12 This file is part of Gyoto.
13
14 Gyoto is free software: you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 Gyoto is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
26 */
27
28
29#ifndef __GyotoPlasmoid_H_
30#define __GyotoPlasmoid_H_
31
32namespace Gyoto{
33 namespace Astrobj { class Plasmoid; }
34}
35
36#include <iostream>
37#include <fstream>
38#include <iomanip>
39#include <GyotoMetric.h>
40#include <GyotoUniformSphere.h>
41#include <GyotoFitsRW.h>
43//#include <GyotoThermalSynchrotronSpectrum.h>
44#ifdef GYOTO_USE_CFITSIO
45#include <fitsio.h>
46#endif
47
48#ifdef GYOTO_USE_XERCES
49#include <GyotoRegister.h>
50#endif
51
52#include <string>
53
61 public FitsRW,
64
65 // Data :
66 // -----
67 private:
68 double* posIni_; // 4-position of the plasmoid in spherical coordinates
69 double* fourveldt_; // 4-velocity of the plasmoid in spherical coordinates (dxi/dt, not dtau)
70 std::string flag_; // type of motion "helical" or "equatorial"
71 bool posSet_;
72 double t_inj_;
73 double radiusMax_; // Maximun radius of the Plasmoid in geometrical units
74 std::string varyRadius_;
75 // FITS FILE Quantities
76 std::string filename_;
77 double* freq_array_;
78 double* jnu_array_;
79 double* anu_array_;
80
81 // Constructors - Destructor
82 // -------------------------
83 public:
84 GYOTO_OBJECT; // This object has a (non-inherited) Property list
85
93
94 Plasmoid(const Plasmoid& orig);
95 virtual Plasmoid * clone() const ;
96
97 virtual ~Plasmoid() ;
98
99 public:
100 virtual std::string className() const ;
101 virtual std::string className_l() const ;
102
103 public:
104 void motionType(std::string const type);
105 SmartPointer<Metric::Generic> metric() const;
106 void metric(SmartPointer<Metric::Generic> gg);
107 void initPosition(std::vector<double> const &v);
108 std::vector<double> initPosition() const;
109 void initVelocity(std::vector<double> const &v);
110 std::vector<double> initVelocity() const;
111 void initCoord(std::vector<double> const &v);
112 std::vector<double> initCoord() const;
113 void radiusMax(double rr);
114 double radiusMax() const;
115 void Radius(std::string vary);
116
117 virtual void radiativeQ(double Inu[], double Taunu[],
118 double const nu_em[], size_t nbnu,
119 double dsem, state_t const &coord_ph,
120 double const coord_obj[8]=NULL) const;
121
122 void getCartesian(double const * const dates, size_t const n_dates,
123 double * const x, double * const y,
124 double * const z, double * const xprime=NULL,
125 double * const yprime=NULL,
126 double * const zprime=NULL);
127
128 void getVelocity(double const pos[4], double vel[4]);
129
130 int Impact(Gyoto::Photon* ph, size_t index,
131 Astrobj::Properties *data=NULL);
132
133 void file(std::string const &f);
134
135 std::vector<size_t> fitsRead(std::string filename);
136
137};
138
139
140#endif
Class to read/write jnu and anu in FITS File.
Powerlaw synchrotron spectrum.
Base class for metric description.
#define GYOTO_OBJECT
Declare class::properties and class::getProperties()
Definition GyotoObject.h:84
Gyoto registers.
Optically thick or thin, spherical objects.
Plasmoid Shere of plasma emitting synchrotron, following a trajectory specified in getVelocity (non-g...
Definition GyotoPlasmoid.h:62
void getCartesian(double const *const dates, size_t const n_dates, double *const x, double *const y, double *const z, double *const xprime=NULL, double *const yprime=NULL, double *const zprime=NULL)
Yield the Cartesian coordinates of the center of the sphere.
virtual void radiativeQ(double Inu[], double Taunu[], double const nu_em[], size_t nbnu, double dsem, state_t const &coord_ph, double const coord_obj[8]=NULL) const
emission and transmission together
virtual std::string className_l() const
"inflate_star"
virtual std::string className() const
"Plasmoid"
int Impact(Gyoto::Photon *ph, size_t index, Astrobj::Properties *data=NULL)
Does a photon at these coordinates impact the object?
void getVelocity(double const pos[4], double vel[4])
Yield velocity of the center of the sphere.
SmartPointer< Metric::Generic > metric() const
Get the Metric gg_.
Optically thick or thin, spherical objects.
Definition GyotoUniformSphere.h:90
Definition GyotoFitsRW.h:51
Pointers performing reference counting.
Definition GyotoSmartPointer.h:135
Namespace for the Gyoto library.
Definition GyotoAstrobj.h:44