// Dominique YVON, CEA/DAPNIA/SPP 02/2000 #include #include #include #include #include #include //#include "machine.h" #include "nbconst.h" #include "cimage.h" #include "cartelobe.h" static NumRecipes NR; // pour avoir acces au librairies NR // Tout cet Objet est programme dans le philosophie des tableaux NR // J'essaye d'etre coherent // Last Index used Value member long lastXIndex, lastYIndex; CarteLobe::CarteLobe(char fileRoot[], double frequence, int_4 NbPixelX, int_4 NbPixelY){ freq=frequence; NbPixX=(long)NbPixelX; NbPixY=(long)NbPixelY; XMin=XMax=YMin=YMax=1.; lastXIndex=lastYIndex=1; pCarte=NR.matrix(1,NbPixX,1,NbPixY); // On Reserve l'espace memoire pour stocker la carte. Librairie NR pAxeX= NR.vector(1,NbPixX); pAxeY= NR.vector(1,NbPixY); // La suite a-t-elle un sens avec les fonction de la NR? if ((pCarte==NULL)||(pAxeX==NULL)||(pAxeY==NULL)) { cerr<<"erreur memoire dans constructeur pCarte"<pAxeX[i]) XMin=pAxeX[i]; if (XMaxpAxeY[i]) YMin=pAxeY[i]; if (YMax=XMax)||(Y<=YMin)||(Y>=YMax)) return 0.; else { unsigned long XIndex=lastXIndex; unsigned long YIndex=lastYIndex; NR.hunt(pAxeX,NbPixX,X,&XIndex); // 0(NbPixX-2)) XIndex=NbPixX-2; if(YIndex>(NbPixY-2)) YIndex=NbPixY-2; float ** ptableau= NR.submatrix(pCarte,XIndex,XIndex+2,YIndex,YIndex+2,1,1); // On interpole sous le soustableau NR.polin2(pAxeX+XIndex-1,pAxeY+YIndex-1,ptableau,3,3,X,Y,&dBValue,&dBError); // On passe en echelle lineaire return pow(10.,(double)(dBValue/10.)); } } void CarteLobe::FitsVisu(char FitsFile[],long nx,long ny) { Image* img; img = new Image(nx,ny,1); double xstep=(XMax-XMin)/nx; double ystep=(YMax-YMin)/ny; double yPos=YMin; double xPos=XMin; for(int i=0; i=0) beta=asin(V/sinalpha); else beta=Pi-asin(V/sinalpha); alpha=asin(sinalpha); } double CarteLobe::halfAngAperture(){ double alCentre=0.; double beCentre=0.; UVToAng(UCentre(),VCentre(),alCentre,beCentre); double alBord=0; double beBord=0; UVToAng(XMin, YMin, alBord,beBord); double CosAng=0.; CosAng+=cos(alCentre)*cos(alBord); CosAng+=sin(alCentre)*sin(beCentre)*sin(alBord)*sin(beBord); CosAng+=sin(alCentre)*cos(beCentre)*sin(alBord)*cos(beBord); return acos(CosAng); } double CarteLobe::CalcResol(){ double halfAng=halfAngAperture(); double NbBin=sqrt(NbPixX*NbPixX+NbPixY*NbPixY); return 2*halfAng/NbBin; // C'est delirament petit // on prend // return 1.e-3; // Debug XXXX }