-
Notifications
You must be signed in to change notification settings - Fork 2
/
Liniendaten.cpp
127 lines (119 loc) · 4.39 KB
/
Liniendaten.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* Liniendaten.cpp
*
* Copyright (c) 2011-2017 Stefan Bender
* Copyright (c) 2010-2011 Martin Langowski
*
* Initial version created on: 13.04.2010
* Author: Martin Langowski
*
* This file is part of scia_retrieval_2d
*
* scia_retrieval_2d is free software: you can redistribute it or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2.
* See accompanying COPYING.GPL2 file or http://www.gnu.org/licenses/gpl-2.0.html.
*/
// Methoden für die Klasse Liniendaten
#include <string>
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstdio>
#include "Liniendaten.h"
using std::cout;
using std::string;
Liniendaten::Liniendaten()
{
//Alles mit 0 initialisieren
m_Wellenlaenge = 0;
m_rel_Einstein = 0;
m_f_Wert = 0;
m_E1 = 0;
m_E2 = 0;
m_Gamma = 0;
}
/*************************************************************************/
void Liniendaten::Einlesen(string Dateiname, double Wellenlaenge)
{
string zeile;
std::ifstream infile(Dateiname.c_str());
if (!infile.is_open()) {
std::cerr << "Datei " << Dateiname << " fehlt...Programm stürzt ab\n";
exit(1);
}
// erste 8 Zeilen ignorieren
for (int i = 0; i < 8; i++) {
getline(infile, zeile);
}
while (!(infile.eof())) {
double current_WL;
infile >> current_WL;
// cout<<"current_WL: "<<current_WL<<"\t"<<"Wellenlaenge:"<<Wellenlaenge
// <<"\n";
if (current_WL == Wellenlaenge) {
this->m_Wellenlaenge = Wellenlaenge;
infile >> this->m_rel_Einstein;
infile >> this->m_f_Wert;
infile >> this->m_E1;
infile >> this->m_E2;
//this->Auf_Bildschirm_Ausgeben();
break;
} else {
getline(infile, zeile);
}
}//ende while
}
/* Einlesen ende***************************************************************/
/******************************************************************************/
/* Streuwinkel_ermitteln Ende**************************************************/
/******************************************************************************/
void Liniendaten::Emissivitaet_ermitteln()
{
//!!!! ACHTUNG HIER GIBTS NOCH DISKUSSIONSBEDARF!!!!!
//
// In David Cleary, " Daytime High Latitude Rocket Observations of the NO
// gamma, delta, epsilon bands, 1986
//
// Wird angeführt, dass zuerst über die gemessene Intensität Integriert
// werden muss. Dann gibt die Gesamtintensität der Linie in 1/m^2s gleich
// Der wellenlängenspezifische Sonnenintensität in 1/m^2s nm * r_elektron[m]
// mal lamda^2[nm^2] Das ist zwar Konsistent aber nicht so ganz schlüssig...
// eigentlich sollte F die selbe Einheit wie I haben und der Rest des
// Gammafaktors sollte der Wirkungsquerschnitt für Resonanzemission in m^2
//
//Konstanten
const double pi = M_PI; //const pi=3.1415926535897932384626433;
const double r_elektron_klassisch = 2.8179402894e-6; // in nm
//Teilformeln
//double Phasenfunktion=0.75*m_E1*(cos(pi/180*m_theta)*cos(pi/180*m_theta)+1)+m_E2;
//Phasenfunktion kommt später dazu, da Streuwinkel noch nicht bekannt
// diese Korrektur ist aber in etwa ein Faktor 1
//cout<<"Phasenfunktion: "<<Phasenfunktion<<"\n";
double Volumenfaktor =
pi * r_elektron_klassisch * m_f_Wert * (m_Wellenlaenge * 1E-7)
* (m_Wellenlaenge * 1E-7); // in cm^2nm also wellenlängen in cm r in nm
//hier wirds mysteriöser 1E7 =100nm ist in etwa wieder
//....falls das in cm ist ist das eher 1e9...sollte eigentlich
//die Intervalläge sein //des F Intervalls
//Der Wert in m^2 ist zumindest der gleiche wie Marcos für cm^2,
//da warns 1e-7 anderer_Faktor /=1E-7;
// Emmisivität ausrechnen
m_Gamma =/*Phasenfunktion* */Volumenfaktor * m_rel_Einstein;
//-> ist zumindest konsistent
}
/*Emissivitaet_ermitteln ende**************************************************/
/******************************************************************************/
void Liniendaten::Auf_Bildschirm_Ausgeben()
{
cout << "Wellenlaenge: " << m_Wellenlaenge << "\n"; //in nm
cout << "rel Einstein: " << m_rel_Einstein << "\n";
cout << "Oszillatorstaerke: " << m_f_Wert << "\n"; // Oszillatorstärke
cout << "E1: " << m_E1 << "\n";
cout << "E2: " << m_E2 << "\n";
//cout<<"Streuwinkel in Grad: "<<m_theta<<"\n";
cout << "Emissivitaet: " << m_Gamma << "\n"; //Emissivität
}
/* Auf_Bildschirm_Ausgeben ende***********************************************/