| 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 | 
 | 
|---|
| 12 | MakeBoloTimeline::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 | 
 | 
|---|
| 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 | 
 | 
|---|
| 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 | 
 | 
|---|
| 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
 | 
|---|
| 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 coordones 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 | 
 | 
|---|