SEVN
Loading...
Searching...
No Matches
kicks.h
Go to the documentation of this file.
1/*
2 Created by iorio on 7/26/22.
3 Base header for Kick models, it includes:
4- Class Kicks: Base class for Kick models
5*/
6
7//TODO Add Documentation
8
9#ifndef SEVN_KICKS_H
10#define SEVN_KICKS_H
11
12#include <string>
13#include <map>
14#include <vector>
15#include <sevnlog.h>
16#include <random>
17#include <utilities.h>
18
19class Star;
21
22//TODO Kicks here should be refactored, Kicks should be general enough to not contain gaussian_265
23//then we can create a son class Maxwellian with methods that can be used by Hobbs Unified etc
24class Kicks {
25
26public:
27
29 }
30
31 virtual ~Kicks(){
32 }
33
34 static Kicks *Instance(std::string const &name);
35 virtual Kicks *instance(){ svlog.critical("This is supposed to be pure virtual, do you have an uninitialized module?", __FILE__, __LINE__); return nullptr; }
36 virtual inline std::string name() { return "Generic SN-kick model"; }
37
42 void apply(_UNUSED Star *s);
43
44 virtual void _apply(_UNUSED Star *s) = 0;
45
46 inline double get_random_kick(){
48 svlog.critical("Trying to get random_kick before it is initiliased",__FILE__,__LINE__);
49
51 }
52
53
54protected:
55
56 void Register(Kicks *ptr, const std::string &_name) {
57 GetStaticMap().insert(std::make_pair(_name, ptr));
58 GetUsed().resize(GetStaticMap().size());
59 GetUsed()[GetUsed().size()-1] = 0;
60 }
61
62 std::normal_distribution<double> standard_gaussian;
63 std::uniform_real_distribution<double> uniformRealDistribution;
64
65
66
67 inline void set_random_kick(const double& a){
69 return;
70 }
74
84 virtual void check_and_correct_vkick(Star* s);
85
86
87 inline double draw_from_gaussian(double std, double mean=0.){
88 return std*standard_gaussian(utilities::mtrand) + mean;
89 }
90
91private:
92
93 static std::map<std::string, Kicks *> & GetStaticMap(){
94 static std::map<std::string, Kicks *> _locmap;
95 return _locmap;
96 }
97 static std::vector<int> & GetUsed(){
98 static std::vector<int> _used;
99 return _used;
100 }
101
102
103};
104
105
106
107#endif //SEVN_KICKS_H
#define _UNUSED
Definition: BinaryProperty.h:20
Definition: kicks.h:24
Kicks()
Definition: kicks.h:28
static Kicks * Instance(std::string const &name)
Definition: kicks.cpp:12
void apply(_UNUSED Star *s)
Definition: kicks.cpp:64
void set_random_kick(const double &a)
Definition: kicks.h:67
virtual ~Kicks()
Definition: kicks.h:31
virtual void _apply(_UNUSED Star *s)=0
void Register(Kicks *ptr, const std::string &_name)
Definition: kicks.h:56
static std::vector< int > & GetUsed()
Definition: kicks.h:97
double get_random_kick()
Definition: kicks.h:46
SevnLogging svlog
Definition: kicks.h:72
double random_velocity_kick
Definition: kicks.h:73
double draw_from_gaussian(double std, double mean=0.)
Definition: kicks.h:87
void kick_initializer()
virtual Kicks * instance()
Definition: kicks.h:35
virtual void check_and_correct_vkick(Star *s)
Definition: kicks.cpp:18
static std::map< std::string, Kicks * > & GetStaticMap()
Definition: kicks.h:93
std::normal_distribution< double > standard_gaussian
Definition: kicks.h:62
virtual std::string name()
Definition: kicks.h:36
std::uniform_real_distribution< double > uniformRealDistribution
Definition: kicks.h:63
Definition: star.h:39
Definition: sevnlog.h:43
void critical(std::string errstate, const char *file_input=nullptr, int line_input=-1) const
Definition: sevnlog.cpp:85
constexpr double NULL_DOUBLE
Definition: utilities.h:89
std::mt19937_64 mtrand
Definition: utilities.cpp:9