| [801] | 1 | // Dominique YVON, CEA/DAPNIA/SPP 02/2000 | 
|---|
|  | 2 |  | 
|---|
|  | 3 | #include <iomanip.h> | 
|---|
| [1148] | 4 | #include <new> | 
|---|
| [801] | 5 |  | 
|---|
| [1191] | 6 | # define ERROR_LABEL -32768 | 
|---|
|  | 7 |  | 
|---|
| [801] | 8 | #include "makebolotimeline.h" | 
|---|
| [1148] | 9 | //#include "fitsioserver.h" | 
|---|
| [801] | 10 |  | 
|---|
|  | 11 |  | 
|---|
|  | 12 | MakeBoloTimeline::MakeBoloTimeline(char file[], AbsLightSource& LSrc, | 
|---|
| [1148] | 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 |  | 
|---|
|  | 20 | MakeBoloTimeline::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 |  | 
|---|
|  | 29 | MakeBoloTimeline::MakeBoloTimeline(char file[], AbsCalcTool& Tool, Normalisation Norm) | 
|---|
|  | 30 | :NormMethode(Norm), ptool(&Tool) | 
|---|
|  | 31 | { | 
|---|
|  | 32 |  | 
|---|
| [801] | 33 | #ifndef __MWERKS__ | 
|---|
|  | 34 | char* PATHResults=getenv("PATHResults"); | 
|---|
|  | 35 | #endif | 
|---|
| [1148] | 36 |  | 
|---|
| [1191] | 37 |  | 
|---|
|  | 38 | NormRJ=ptool->NormKelvinRayleighJeans(); | 
|---|
|  | 39 | NormTCMB=ptool->NormKelvinCMB(); | 
|---|
| [1148] | 40 | saveReadMe(file); | 
|---|
|  | 41 |  | 
|---|
| [801] | 42 | char filecur[150]; | 
|---|
| [1191] | 43 | sprintf(filecur,"%s.dat",file); | 
|---|
| [1148] | 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 |  | 
|---|
| [1191] | 59 | sprintf(Name, "%s%s",file,".visu"); | 
|---|
| [1148] | 60 | #endif | 
|---|
|  | 61 | } | 
|---|
|  | 62 |  | 
|---|
|  | 63 |  | 
|---|
|  | 64 | MakeBoloTimeline::~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 |  | 
|---|
|  | 90 | void 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 |  | 
|---|
|  | 107 | void 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 |  | 
|---|
|  | 138 | void  MakeBoloTimeline::saveReadMe(char File[]) | 
|---|
|  | 139 | {       char filecur[150]; | 
|---|
|  | 140 | // Fill Header file for ascii output | 
|---|
| [1191] | 141 | sprintf(filecur,"%s.ReadMe",File); | 
|---|
| [801] | 142 | cout<<filecur<<endl; | 
|---|
|  | 143 | ofstream ReadMe(filecur,ios::out|ios::trunc); | 
|---|
|  | 144 |  | 
|---|
|  | 145 | ReadMe<<" Fichier de timeline pour:"<<endl; | 
|---|
| [1148] | 146 | ptool->print(ReadMe); | 
|---|
| [1191] | 147 |  | 
|---|
| [801] | 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 |  | 
|---|
| [1148] | 168 | ReadMe<<"Fichier coordones galactique J2000ecrit selon le format"<<endl; | 
|---|
|  | 169 | ReadMe<<"l_galax(Radian)\tb_galax(Radian)\tAbove Unit"<<endl; | 
|---|
|  | 170 |  | 
|---|
| [801] | 171 | // J'espere que c'est assez | 
|---|
|  | 172 | ReadMe.close(); | 
|---|
|  | 173 |  | 
|---|
| [1148] | 174 | return; | 
|---|
| [801] | 175 | } | 
|---|
|  | 176 |  | 
|---|