source: Sophya/trunk/SophyaLib/SkyT/specresp.cc@ 909

Last change on this file since 909 was 909, checked in by ansari, 25 years ago

Sophie: adding documentation for Doxygen in the .cc files:wq

File size: 4.7 KB
Line 
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: specresp.cc,v 1.4 2000-04-13 14:10:45 ansari Exp $
4//
5// Description:
6// Aim of the class: To give the energy density
7// The unity used here is W/m^2/Hz/sr
8//
9// History (add to end):
10// Sophie Oct, 1999 - creation
11//
12//------------------------------------------------------------------------
13
14//---------------
15// C++ Headers --
16//---------------
17#include <typeinfo>
18#include <math.h>
19#include "specresp.h"
20#include "integ.h"
21#include "tvector.h"
22
23/*!
24 * \class SOPHYA::SpectralResponse <BR>
25 SpectralResponse corresponds to a detector filter's
26 response as a function of the frequency.
27 The SpectralResponse class is an abstract class.
28 The virtual constructor takes as arguments the
29 minimum and maximum values of the frequency range on
30 which the detector response is defined
31 */
32//----------------
33// Constructor --
34//----------------
35SpectralResponse::SpectralResponse(double numin, double numax)
36{
37 _numin = numin;
38 _numax = numax;
39}
40
41
42//--------------
43// Destructor --
44//--------------
45SpectralResponse::~SpectralResponse()
46{
47}
48
49// ---------------------------
50// -- Function Definitions --
51// ---------------------------
52
53
54double
55SpectralResponse::minFreq() const
56{
57 return _numin;
58}
59
60double
61SpectralResponse::maxFreq() const
62{
63 return _numax;
64}
65
66double
67SpectralResponse::meanFreq() const
68{
69 return (_numax+_numin)/2.;
70}
71
72
73// To change min-max frequency
74void
75SpectralResponse::setMinMaxFreq(double numin, double numax)
76{
77 _numin = numin;
78 _numax = numax;
79}
80
81
82// peakFreq returns the value of the frequency for the
83// peak of the spectrum.
84double
85SpectralResponse::peakFreq() const
86{
87 double maxAnswer = -1.e99;
88 double maxNu = -10;
89 double nu;
90 for (int i=1; i<1000;i++)
91 {
92 nu=(_numax-_numin)*i/1000.+_numin;
93 double lookForMax =transmission(nu);
94 if(maxAnswer <= lookForMax) {
95 maxAnswer= lookForMax;
96 maxNu = nu;
97 }
98 }
99 return maxNu;
100}
101
102
103double
104SpectralResponse::peakTransmission() const
105{
106 double nuPeak = this->peakFreq();
107 return transmission(nuPeak);
108}
109
110static SpectralResponse* _mySpecResp = NULL;
111
112static double SpectralResponse_transmission(double nu)
113{
114 return(_mySpecResp->transmission(nu));
115}
116
117
118/*!
119 This function performs the integration
120 of the transmission function in its frequency range
121 (defined when instanciating an object of on of the
122 subclasses)
123*/
124double
125SpectralResponse::IntegratedSpect() const
126{
127 double value = this->IntegratedSpect(_numin, _numax);
128 return value;
129}
130
131/*!
132 The IntegratedSpect function performs the integration
133 of the transmission function in a frequency range <BR> defined by
134 numin and numax.
135*/
136double
137SpectralResponse::IntegratedSpect(double numin, double numax) const
138{
139 if(numin < this->minFreq()) numin = this->minFreq();
140 if(numax > this->maxFreq()) numax = this->maxFreq();
141
142
143 _mySpecResp = const_cast<SpectralResponse *>(this);
144 TrpzInteg I(SpectralResponse_transmission , numin, numax);
145 double val = (double)I;
146 _mySpecResp= NULL;
147 return(val);
148}
149
150
151static SpectralResponse* _myLogSpecResp = NULL;
152
153static double SpectralResponse_logTransmission(double tau)
154{
155 double value = _myLogSpecResp->transmission(pow(10,tau))*pow(10,tau);
156 return(value);
157}
158
159/*!
160 The logIntegratedSpect function performs the integration
161 of the logarithm of the transmission function in a frequency range <BR> defined by
162 numin and numax.
163*/
164double
165SpectralResponse::logIntegratedSpect(double numin, double numax) const
166{
167 if(numin <= this->minFreq()) numin = this->minFreq();
168 if(numax >= this->maxFreq()) numax = this->maxFreq();
169 if(numin == 0) numin = 1.e-99;
170 double f1Log = log10(numin);
171 double f2Log = log10(numax);
172 if(f1Log < -1.e99) f1Log = -1.e99;
173 if(f2Log > 1.e99) f2Log = 1.e99;
174 _myLogSpecResp = const_cast<SpectralResponse *>(this);
175 TrpzInteg I(SpectralResponse_logTransmission ,f1Log,f2Log);
176 double val = (double)I;
177 _myLogSpecResp= NULL;
178 return(val*log(10.));
179}
180
181/*!
182 Same than IntegratedSpect(numin,numax) over its
183 frequency range defined at the initialisation
184*/
185double
186SpectralResponse::logIntegratedSpect() const
187{
188 double value = this->logIntegratedSpect(_numin, _numax);
189 return value;
190}
191
192
193void
194SpectralResponse::Print(ostream& os) const
195{
196
197 // os << "SpectralResponse::Print (" << typeid(*this).name()
198 //<< ") - Fmin,Fmax= " << minFreq() << "," << maxFreq() << endl;
199 os << "SpectralResponse::Print - Fmin,Fmax= " << minFreq() << "," << maxFreq() << endl;
200 os << "MeanFreq= " << meanFreq() << " Transmission= " << transmission(meanFreq()) << endl;
201 os << "PeakFreq= " << peakFreq() << " Transmission= " << transmission(peakFreq()) << endl;
202
203}
Note: See TracBrowser for help on using the repository browser.