source: Sophya/trunk/SigPredictor/makebolotimeline.cc@ 3395

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

cleaned up for maching LevelS upgrade ongoing

D.Y.

File size: 4.2 KB
Line 
1 // Dominique YVON, CEA/DAPNIA/SPP 02/2000
2
3#include <iomanip.h>
4#include <new>
5
6# define ERROR_LABEL -32768
7
8#include "makebolotimeline.h"
9//#include "fitsioserver.h"
10
11
12MakeBoloTimeline::MakeBoloTimeline(char file[], AbsLightSource& LSrc,
13 AbsLobeNoPolar& Lobe, SpectralResponse& Filter, Normalisation Norm)
14{ IsSigCalctool=true;
15 IsPtSrcInBandtool=false;
16 pSigCalcTool=new SigCalcTool(&LSrc,&Lobe,&Filter);
17 MakeBoloTimeline(file,*pSigCalcTool,Norm);
18}
19
20MakeBoloTimeline::MakeBoloTimeline(char file[], LightPtSrcLevSInBand& LSrc,
21 MeanFreqLobe& Lobe, LevSPanckBand band, Normalisation Norm)
22{ IsSigCalctool=false;
23 IsPtSrcInBandtool=true;
24
25 pPtSrcInBandCalTools=new PtSrcInBandCalTools(&LSrc,&Lobe,band);
26 MakeBoloTimeline(file,*pPtSrcInBandCalTools,Norm);
27}
28
29MakeBoloTimeline::MakeBoloTimeline(char file[], AbsCalcTool& Tool, Normalisation Norm)
30 :NormMethode(Norm), ptool(&Tool)
31{
32
33#ifndef __MWERKS__
34 char* PATHResults=getenv("PATHResults");
35#endif
36
37
38 NormRJ=ptool->NormKelvinRayleighJeans();
39 NormTCMB=ptool->NormKelvinCMB();
40 saveReadMe(file);
41
42 char filecur[150];
43 sprintf(filecur,"%s.dat",file);
44
45 pMystr= new ofstream(filecur,ios::out|ios::trunc);
46// pMystr->setf(ios::scientific);
47 (*pMystr)<<setprecision(5);
48
49#ifdef VisuIsActive
50 // Visu de controle
51 try
52 { pSphere=new SphereHEALPix<r_4>(64);
53 pSphereInt=new SphereHEALPix<uint_2>(64);
54 }
55 catch (bad_alloc)
56 { cerr<<"bad alloc in MakeBoloTimeline:"<<file<<endl;
57 }
58
59 sprintf(Name, "%s%s",file,".visu");
60#endif
61}
62
63
64MakeBoloTimeline::~MakeBoloTimeline()
65{
66 (*pMystr)<<flush;
67 pMystr->close();
68 delete pMystr;
69
70 if(IsSigCalctool) delete pSigCalcTool;
71 if(IsPtSrcInBandtool) delete pPtSrcInBandCalTools;
72
73#ifdef VisuIsActive
74 for(long index=0; index<(*pSphere).NbPixels();index++)
75 if ((*pSphereInt).PixVal(index)!=0)
76 (*pSphere).PixVal(index)=(*pSphere).PixVal(index)/(*pSphereInt).PixVal(index);
77
78// FitsIoServer FitsServer;
79 #ifndef __MWERKS__
80 char* PATHResults=getenv("PATHResults");
81 #endif
82
83// FitsServer.Mollweide_picture_projection((*pSphere),Name); // BUGG XXXXXXXXX
84
85 delete pSphere;
86 delete pSphereInt;
87#endif
88}
89
90void MakeBoloTimeline::addToStreamArchTOI(double theta,double phi)
91{ // Theta en heures, Phi en degres, systeme RA Dec
92 if((theta==ERROR_LABEL)||(phi==ERROR_LABEL)) return;
93
94 // On passe en Radian
95 double thetaRad=theta*15./180*M_PI;
96 double phiRad=phi/180.*M_PI;
97
98 // Go to Galactic ccordinates
99 double lgalax=0.;
100 double bgalax=0.;
101 kmg_eulerRad(thetaRad,phiRad,1,&lgalax,&bgalax);
102
103 // Add to time line
104 addToStream(lgalax,bgalax);
105}
106
107void MakeBoloTimeline::addToStream(double lgalax,double bgalax)
108{ // lgalax et bgalax en Radian, Systeme coord Galactique J2000
109
110 double theta=M_PI/2.-bgalax; // Coordonnees Spheriques galactiques
111 double phi=lgalax;
112 double value;
113
114 switch (NormMethode)
115 {
116 case RayleighJeans: // Value en TempeRJ
117 { value= NormRJ*ptool->compPixelQD(theta,phi);
118 break;
119 }
120 case TempeCMB: // Value en tempeCMB
121 { value= NormTCMB*ptool->compPixelQD(theta,phi);
122 break;
123 }
124 default: // Value en power
125 { value =ptool->compPixelQD(theta,phi);
126 break;
127 }
128 }
129 (*pMystr)<<lgalax<<'\t'<<bgalax<<'\t'<<value<<'\n';
130
131 long PixelNumb=(*pSphere).PixIndexSph(theta,phi);
132 (*pSphere).PixVal(PixelNumb)+=value;
133 (*pSphereInt).PixVal(PixelNumb)++;
134
135 return;
136}
137
138void MakeBoloTimeline::saveReadMe(char File[])
139{ char filecur[150];
140 // Fill Header file for ascii output
141 sprintf(filecur,"%s.ReadMe",File);
142 cout<<filecur<<endl;
143 ofstream ReadMe(filecur,ios::out|ios::trunc);
144
145 ReadMe<<" Fichier de timeline pour:"<<endl;
146 ptool->print(ReadMe);
147
148
149 ReadMe<< setprecision(3);
150 ReadMe<<" Constantes de normalisation"<<endl;
151 ReadMe<<" RayleighJeans: "<<NormRJ<< " KelvinRJ/(W/m2)"<<endl;
152 ReadMe<<" TempeCMB: "<<NormTCMB<< " Kelvin CMB/(W/m2)"<<endl;
153
154 ReadMe<<"Cette carte est en unitŽ: ";
155 switch(NormMethode)
156 {
157 case TempeCMB:
158 { ReadMe<< "Kelvin CMB"<<endl;
159 break;
160 }
161 case RayleighJeans:
162 { ReadMe<< "Kelvin RayleighJeans"<<endl;
163 break;
164 }
165 default: ReadMe<< "Watt/m2 effectif de mirroir"<<endl;
166 }
167
168 ReadMe<<"Fichier coordonŽes galactique J2000ecrit selon le format"<<endl;
169 ReadMe<<"l_galax(Radian)\tb_galax(Radian)\tAbove Unit"<<endl;
170
171 // J'espere que c'est assez
172 ReadMe.close();
173
174 return;
175}
176
Note: See TracBrowser for help on using the repository browser.