source: Sophya/trunk/SophyaLib/SkyT/specrespvector.cc@ 760

Last change on this file since 760 was 669, checked in by ansari, 26 years ago

Adaptation a PPersist de SpectralResponse - Suite 1 , Sophie 29/11/99

File size: 4.0 KB
Line 
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: specrespvector.cc,v 1.5 1999-11-29 16:59:12 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 "machdefs.h"
18#include <iostream.h>
19#include <math.h>
20// #include <typeinfo>
21
22#include "specrespvector.h"
23#include "pexceptions.h"
24//----------------
25// Constructor --
26//----------------
27SpecRespVec::SpecRespVec()
28 : SpectralResponse()
29{
30}
31
32SpecRespVec::SpecRespVec(Vector const & nu, Vector const & fdenu, double numin, double numax)
33 : SpectralResponse(numin, numax)
34{
35 if(nu.NElts() != fdenu.NElts())
36 throw SzMismatchError("SpecRespVec::SpecRespVec() - Non equal vector sizes");
37 _vecOfNu = nu;
38 _vecOfFDeNu = fdenu;
39 _size = nu.NElts();
40 if(_vecOfNu.NElts() != _vecOfFDeNu.NElts()) cout << "vectors are not compatible" << exit;
41}
42
43SpecRespVec::SpecRespVec(Vector const & nu, Vector const & fdenu)
44 : SpectralResponse()
45{
46 if(nu.NElts() != fdenu.NElts())
47 throw SzMismatchError("SpecRespVec::SpecRespVec() - Non equal vector sizes");
48 _vecOfNu = nu;
49 _vecOfFDeNu = fdenu;
50 _numin = nu(0);
51 _numax = nu(nu.NElts()-1);
52 _size = nu.NElts();
53 if(_vecOfNu.NElts() != _vecOfFDeNu.NElts()) cout << "vectors are not compatible" << exit;
54}
55
56
57//--------------
58// Destructor --
59//--------------
60SpecRespVec::~SpecRespVec()
61{
62}
63
64// ---------------------------
65// -- Function Definitions --
66// ---------------------------
67
68
69
70
71double
72SpecRespVec::transmission(double nu) const
73{
74 if ( (nu < _numin) || (nu > _numax) ) return(0.);
75 double value = 0.;
76 int sizeVecOfNu = _vecOfNu.NElts();
77 if(nu <= _vecOfNu(0)) return _vecOfFDeNu(0);
78 if(nu >= _vecOfNu(sizeVecOfNu-1)) return _vecOfFDeNu(sizeVecOfNu-1);
79
80 for (int i=1; i<sizeVecOfNu; i++)
81 {
82 if(nu < _vecOfNu(i))
83 {
84 double up = _vecOfFDeNu(i) ;
85 double down = _vecOfFDeNu(i-1);
86 double xmin = _vecOfNu(i-1);
87 double xmax = _vecOfNu(i);
88 double a = ((up-down)/(xmax-xmin));
89 value = a*nu+(up-a*xmax);
90 return value;
91 }
92 }
93 return value;
94}
95
96
97
98void
99SpecRespVec::Print(ostream& os) const
100{
101
102 // os << "SpecRespVec::Print (" << typeid(*this).name()
103 //<< ") - Fmin,Fmax= " << minFreq() << "," << maxFreq() << endl;
104 os << "SpecRespVec ::Print - Fmin,Fmax= " << minFreq() << "," << maxFreq() << endl;
105 os << "MeanFreq= " << meanFreq() << " Transmission= " << transmission(meanFreq()) << endl;
106 os << "PeakFreq= " << peakFreq() << " Transmission= " << transmission(peakFreq()) << endl;
107
108}
109
110
111void
112ObjFileIO<SpecRespVec>::WriteSelf(POutPersist& s) const
113{
114 if(dobj == NULL)
115 {
116 cout << " ObjFileIO<SpecRespVec>::WriteSelf:: dobj= null " << endl;
117 return;
118 }
119
120 int_4 version, nothing;
121 version = 1;
122 nothing = 0; // Reserved for future use
123 s.PutI4(version);
124 s.PutI4(nothing);
125
126 s.PutR8(dobj->minFreq());
127 s.PutR8(dobj->maxFreq());
128
129 // TVector<T> has Persistence Manager
130 s << dobj->getNuVec();
131 {
132 Vector& xv2 = dobj->getTNuVec();
133 cout << xv2 ;
134 FIO_TVector<double> vio2(&xv2);
135 vio2.Write(s);
136 }
137}
138
139void
140ObjFileIO<SpecRespVec>::ReadSelf(PInPersist& s)
141{
142 int_4 version, nothing;
143 version = 1;
144 nothing = 0; // Reserved for future use
145 s.GetI4(version);
146 s.GetI4(nothing);
147
148 if(dobj == NULL)
149 {
150 dobj= new SpecRespVec();
151 ownobj= true;
152 }
153 r_8 minf, maxf;
154 s.GetR8(minf);
155 s.GetR8(maxf);
156 dobj->setMinMaxFreq(minf, maxf);
157 // TVector<T> has Persistence Manager
158 FIO_TVector<double> vio(&(dobj->getNuVec()));
159 vio.Read(s);
160 FIO_TVector<double> vio2(&(dobj->getTNuVec()));
161 vio2.Read(s);
162}
163
164
165#ifdef __CXX_PRAGMA_TEMPLATES__
166#pragma define_template ObjFileIO<SpecRespVec>
167#endif
168
169#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
170template class ObjFileIO<SpecRespVec>;
171#endif
Note: See TracBrowser for help on using the repository browser.