SOLARPROP  1.0
 All Classes Functions Variables
spectrum.h
1 /*
2  * spectrum.h
3  *
4  * Author: kappl
5  */
6 
7 #ifndef SPECTRUM_H_
8 #define SPECTRUM_H_
9 
10 #include <map>
11 #include <vector>
12 #include <string>
13 #include <CCfits/CCfits>
14 #include "density.h"
15 #include "distribution.h"
16 #include "fileHelper.h"
17 
21 class Spectrum
22 {
23  private:
24  std::vector<double> ekin;
25  std::vector<std::vector<double>> flux;
26  std::vector<Tproperties> spec;
27 
28  std::map<std::pair<int,int>,double> massDict = {{{1,1}, 0.938}, {{-1,1}, 0.938},
29  {{1,0}, 0.000511}, {{-1,0}, 0.000511},
30  {{1,2}, 2.*0.938}, {{-1,2}, 2.*0.938},
31  {{1,3}, 3.*0.938}, {{-1,3}, 3.*0.938},
32  {{2,3}, 3.*0.938}, {{-2,3}, 3.*0.938},
33  {{2,4}, 4.*0.938}, {{-2,4}, 4.*0.938},
34  {{3,6}, 6.*0.938}, {{3,7}, 7.*0.938},
35  {{4,7}, 7.*0.938}, {{4,9}, 9.*0.938},
36  {{4,10}, 10.*0.938}, {{5,10}, 10.*0.938},
37  {{5,11}, 11.*0.938}, {{6,12}, 12.*0.938},
38  {{6,13}, 13.*0.938}, {{6,14}, 14.*0.938},
39  {{7,14}, 14.*0.938},
40  {{7,15}, 15.*0.938}, {{8,16}, 16.*0.938},
41  {{8,17}, 17.*0.938}, {{8,18}, 18.*0.938},
42  {{9,19}, 19.*0.938}, {{10,20}, 20.*0.938},
43  {{10,21}, 21.*0.938}, {{10,22}, 22.*0.938},
44  {{11,22}, 22.*0.938},
45  {{11,23}, 23.*0.938}, {{12,24}, 24.*0.938},
46  {{12,25}, 25.*0.938}, {{12,26}, 26.*0.938},
47  {{13,26}, 26.*0.938}, {{13,27}, 27.*0.938},
48  {{14,28}, 28.*0.938}, {{14,29}, 29.*0.938},
49  {{14,30}, 30.*0.938}, {{14,32}, 32.*0.938},
50  {{15,31}, 31.*0.938},
51  {{16,32}, 32.*0.938}, {{16,33}, 33.*0.938},
52  {{16,34}, 34.*0.938}, {{16,36}, 36.*0.938},
53  {{17,35}, 35.*0.938}, {{17,36}, 36.*0.938},
54  {{17,37}, 37.*0.938}, {{18,36}, 36.*0.938},
55  {{18,37}, 37.*0.938}, {{18,38}, 38.*0.938},
56  {{18,40}, 40.*0.938}, {{19,39}, 39.*0.938},
57  {{19,40}, 40.*0.938}, {{19,41}, 41.*0.938},
58  {{20,40}, 40.*0.938}, {{20,41}, 41.*0.938},
59  {{20,42}, 42.*0.938}, {{20,43}, 43.*0.938},
60  {{20,44}, 44.*0.938}, {{20,46}, 46.*0.938},
61  {{20,48}, 48.*0.938}, {{21,45}, 45.*0.938},
62  {{22,44}, 44.*0.938}, {{22,46}, 46.*0.938},
63  {{22,47}, 47.*0.938}, {{22,48}, 48.*0.938},
64  {{22,49}, 49.*0.938}, {{22,50}, 50.*0.938},
65  {{23,49}, 49.*0.938}, {{23,50}, 50.*0.938},
66  {{23,51}, 51.*0.938}, {{24,50}, 50.*0.938},
67  {{24,51}, 51.*0.938}, {{24,52}, 52.*0.938},
68  {{24,53}, 53.*0.938}, {{24,54}, 54.*0.938},
69  {{25,53}, 53.*0.938}, {{25,54}, 54.*0.938},
70  {{25,55}, 55.*0.938}, {{26,54}, 54.*0.938},
71  {{26,55}, 55.*0.938}, {{26,56}, 56.*0.938},
72  {{26,57}, 57.*0.938}, {{26,58}, 58.*0.938},
73  {{26,60}, 60.*0.938}, {{27,57}, 57.*0.938},
74  {{27,59}, 59.*0.938}, {{28,56}, 56.*0.938},
75  {{28,58}, 58.*0.938}, {{28,59}, 59.*0.938},
76  {{28,60}, 60.*0.938}, {{28,61}, 61.*0.938},
77  {{28,62}, 62.*0.938}, {{28,64}, 64.*0.938}
78  };
79  void readFITS(std::string);
80  void readGALPROP(CCfits::FITS*);
81  void readDRAGON(CCfits::FITS*);
82  Tproperties checkSpecies(int, int);
83  void readText(std::string, Tproperties);
84  void rescaleWithP2(int);
85  void modulate(const Spectrum&, const std::vector<Distribution>&, int);
86  void modulate(const TmodelInformation&, const Spectrum&, int);
87  void modulate(const TmodelInformation&, const Spectrum&);
88  void forceField(const Spectrum&, double, int);
89  void forceField(const Spectrum&, double);
90  void output(std::string, std::string);
91  void output(std::string, int i);
92  void output(std::string);
93  void rescaleFlux(double);
94 
95  double getP2(const Tproperties&) const;
96 
97  public:
98  Spectrum(const std::vector<Tproperties>&, const std::vector<double>&);
99  Spectrum(const TmodelInformation&, std::string, std::string, Tproperties);
100  ~Spectrum();
101 
102  void output(std::string, std::string, std::string, std::string, int, double);
103 
104  std::vector<double> getEkin() const;
105  std::vector<Tproperties> getSpec() const;
106 
107  void quality(int);
108  void reduceData(const std::vector<double>&);
109 
110  void forceField(int, const Spectrum&, double);
111 
112  void modulate(int, const TmodelInformation&, const Spectrum&);
113 };
114 
115 #endif /* SPECTRUM_H_ */