; PROGRAM TO PERFORM THE WAVELENGTH AND SPATIAL DEPENDENCE CPT PROCEDURE ; WITH THE DYE LASER AS A SOURCE, AND FOR THE 31 OR 27 POSITION DE-TUNE SEQUENCE ; WITH 2 CAMERAS AT THE SAME TIME. ; OBJECTIVE: TO LEARN HOW TO CO-TUNE THE ELEMENTS ; AND THE PHASES AND CONTRASTS OF THE TUNABLE ELEMENTS ; ; THIS PROGRAMS DETECTS THE PRESENCE OF BAD EXPOSURES ; WE ASSUME THE DETUNE SEQUENCE HAS 3 DARK FRAMES (2 AT THE BEGINNING ; ONE AT THE END) ; ; THE PROGRAMS: ; --- TVIM.PRO ; --- COLOR_KEY.PRO ; --- SELECTNAMES.PRO ; --- READIMAGES.PRO ; MUST BE INCLUDED IN THE SAME DIRECTORY AS THIS PROGRAM (OR IN THE ; IDL PATH) ; IDL ASTROLIB MUST BE INSTALLED TOO (FOR THE SXPAR.PRO PROGRAM) ; ; VERSION OF SEPTEMBER 16, 2008 ; FSRs have been changed compared to version of January 25, 2008 ; NOW COMPATIBLE WITH DETUNE27 WITH ONE CAMERA ONLY ; READING OF KEYWORD SHS HAS BEEN CHANGED ; NOW SAVES THE PHASE AND CONTRAST MAPS AFTER PHASES HAVE BEEN ; CORRECTED FOR THE 180 DEGREE UNCERTAINTY ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- ; ; PRODUCE A COTUNE TABLE FOR SPECIFIC PHASES OF THE TUNABLE ELEMENTS ; ;---------------------------------------------------------------------- PRO cotunetable,NBphase,WBphase,E1phase,FSN,camera HCMNB = ROUND(-NBphase/6.0)+60 HCMWB = ROUND(-WBphase/6.0)+60 HCME1 = ROUND( E1phase/6.0)+60 table= FLTARR(4,20) table= [ [-30,0,0,0], $ [-27,-6,0,-12], $ [-24,-12,0,-24], $ [-21,-18,0,24], $ [-18,-24,0,12], $ [-15,-30,0,0], $ [-12,24,0,-12], $ [-9,18,0,-24], $ [-6,12,0,24], $ [-3,6,0,12], $ [0,0,0,0], $ [3,-6,0,-12], $ [6,-12,0,-24], $ [9,-18,0,24], $ [12,-24,0,12], $ [15,-30,0,0], $ [18,24,0,-12], $ [21,18,0,-24], $ [24,12,0,24], $ [27,6,0,12] ] FOR i=0,19 DO table[*,i] = table[*,i] + [HCME1,HCMWB,0,HCMNB] IF camera LT 2 THEN OPENW,1,'cotune_front_'+STRTRIM(STRING(FSN),1)+'.txt' ELSE OPENW,1,'cotune_side_'+STRTRIM(STRING(FSN),1)+'.txt' FOR i=0,19 DO PRINTF,1,table[*,i] CLOSE,1 END ;---------------------------------------------------------------------- ; ; MAIN PROGRAM ; ;---------------------------------------------------------------------- PRO CPT_laser SET_PLOT,'x' !P.MULTI=0 PRINT,'WHICH CAMERA DO YOU WANT TO TEST: FRONT (1) OR SIDE (2) ?' READ,camera IF(camera NE 1 AND camera NE 2) THEN BEGIN PRINT,'You can only enter 1 or 2' STOP ENDIF PRINT,'LASER WAVELENGTH (IN ANGSTROM) ?' lam0=0.d0 ; to make sure it is read and stored as a double READ,lam0 ; lam0 is the laser wavelength in ANGSTROM IF lam0 LT 6000.d0 THEN BEGIN PRINT,'The wavelength you entered is less than 6000 A. This seems wrong (solar wavelength= 6173 A). Please, re-enter the wavelength in Angstrom' READ,lam0 ENDIF time0 = SYSTIME(1) dpi = 2.d0*!dpi lamref = 6173.3433d0 ; solar Fe I 6173 line central wavelength in air ; when phases are at 0, we are centered on this wavelength lam0 = lam0-lamref PRINT,'lam0=',lam0+lamref ; VARIOUS PARAMETERS AND VARIABLES DEFINITION ;-------------------------------------------- nx = 256 ; number of rows ny = nx ; number of columns Bg0 = DBLARR(nx,ny,3) ; contrasts of the tunable elements Phig0 = DBLARR(nx,ny,3) ; phases of the tunable elements nseq = 27 ; number of positions in the de-tune sequence Inten = DBLARR(nx,ny,nseq);measured output intensities (measured on a HMI CCD) tuning = DBLARR(3,nseq) ; tuning positions for the detune sequence anglim = 975. ; angular radius of the image xcenter = nx/2 ; center of the solar disk, depends on the image ! ycenter = nx/2 ; DATA PROVIDED BY LOCKHEED-MARTIN (R. SHINE) ; e-mail 10/25/2005 ; e-mail 11/18/2005 ; FSRs partly "corrected" using calibration data ; of April 2008 (October 2007) ;-------------------------------------------- FSR = DBLARR(7) ; Free Spectral Ranges in Angstrom of the Lyot and Michelson elements ;FSR[0] = 0.1710098d0; 0.172d0-0.001057600d0 ; for the narrow-band Michelson ;FSR[1] = 0.3421506d0; 0.344d0-0.002076830d0 ; for the broad-band Michelson ;FSR[2] = 0.6943613d0; 0.693d0+0.000483467d0 ; for E1 ;FSR[3] = 1.407d0 ; for E2 ;FSR[4] = 2.779d0 ; for E3 ;FSR[5] = 5.682d0 ; for E4 ;FSR[6] = 11.354d0 ; for E5 ; FSRs CHANGED IN JUNE 2009 FSR[0] = 0.17094240d0 ; for the narrow-band Michelson FSR[1] = 0.34192317d0 ; for the broad-band Michelson FSR[2] = 0.69348347d0 ; for E1 FSR[3] = 1.407d0 ; for E2 FSR[4] = 2.779d0 ; for E3 FSR[5] = 5.682d0 ; for E4 FSR[6] = 11.354d0 ; for E5 ; DEFINITION OF THE DETUNE SEQUENCE ; the detune sequence is given in steps for the HCMs ; it is then converted in actual angles ; the NB tuning waveplate rotates in the opposite ; direction to the WB and E1 waveplates ; NB MICHELSON WB MICHELSON E1 LYOT ;----------------------------------------------------------- tuning[*,0] = [ 0.d0, 0.d0, 0.d0] tuning[*,1] = [ 80.d0, 0.d0, 0.d0] tuning[*,2] = [ 160.d0, 0.d0, 0.d0] tuning[*,3] = [ 0.d0, 80.d0, 0.d0] tuning[*,4] = [ 80.d0, 80.d0, 0.d0] tuning[*,5] = [ 160.d0, 80.d0, 0.d0] tuning[*,6] = [ 0.d0, 160.d0, 0.d0] tuning[*,7] = [ 80.d0, 160.d0, 0.d0] tuning[*,8] = [ 160.d0, 160.d0, 0.d0] tuning[*,9] = [ 0.d0, 0.d0, 80.d0] tuning[*,10] = [ 80.d0, 0.d0, 80.d0] tuning[*,11] = [ 160.d0, 0.d0, 80.d0] tuning[*,12] = [ 0.d0, 80.d0, 80.d0] tuning[*,13] = [ 80.d0, 80.d0, 80.d0] tuning[*,14] = [ 160.d0, 80.d0, 80.d0] tuning[*,15] = [ 0.d0, 160.d0, 80.d0] tuning[*,16] = [ 80.d0, 160.d0, 80.d0] tuning[*,17] = [ 160.d0, 160.d0, 80.d0] tuning[*,18] = [ 0.d0, 0.d0, 160.d0] tuning[*,19] = [ 80.d0, 0.d0, 160.d0] tuning[*,20] = [ 160.d0, 0.d0, 160.d0] tuning[*,21] = [ 0.d0, 80.d0, 160.d0] tuning[*,22] = [ 80.d0, 80.d0, 160.d0] tuning[*,23] = [ 160.d0, 80.d0, 160.d0] tuning[*,24] = [ 0.d0, 160.d0, 160.d0] tuning[*,25] = [ 80.d0, 160.d0, 160.d0] tuning[*,26] = [ 160.d0, 160.d0, 160.d0] FOR i=0,nseq-1 DO tuning[*,i] = tuning[*,i] * [6.d0,6.d0,-6.d0]*!dpi/180.d0 ; READING THE FILTERGRAMS AND SUBTRACTING DARK FRAME ;----------------------------------------------------------- READIMAGES,names,images,headers,nbin=nx,getnames=1,iover=iover FSN = SXPAR(*headers[0],'FSN') nimages = N_ELEMENTS(names) jd = DBLARR(nimages) exposures= FLTARR(nimages) jd = getshs(headers) FOR i=0,nimages-1 DO BEGIN ;jd[i] = SXPAR(*headers[i],'SHS') exposures[i] = FLOAT(SXPAR(*headers[i],'HSHIEXP')) ENDFOR ; 2 CAMERAS AND DETUNE31 OR DETUNE27 (FRONT AND SIDE CAMERAS INTERLEAVED) IF(nimages EQ 68) THEN BEGIN IF (camera EQ 1) THEN AA = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66] ELSE AA = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67] wdark = [1,33] ENDIF IF(nimages EQ 60) THEN BEGIN IF (camera EQ 1) THEN AA = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58] ELSE AA = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59] wdark = [1,29] ENDIF IF(nimages EQ 30) THEN BEGIN AA=FINDGEN(30) wdark=[1,29] ENDIF IF(nimages NE 68 AND nimages NE 60 AND nimages NE 30) THEN BEGIN PRINT,'DETUNE SEQUENCE MUST HAVE THE FORMAT DETUNE31 OR DETUNE27 WITH OR WITHOUT 2 CAMERAS' STOP ENDIF imx = images[*,*,AA] images= 0.0 headers=0.0 names = 0.0 ; to free memory IF (nimages NE 30) THEN nelem = nimages/2 ELSE nelem = nimages ; REMOVE THE DARK CURRENT (BASED ON CLEAN.PRO FROM JESPER SCHOU) jdA = jd[AA]-TOTAL(REBIN(jd[AA],1)) dark = REBIN(imx[*,*,wdark],nx,nx,1) c1 = REBIN(imx[0:nx/64-1,0:nx/64-1,*],1,1,nelem) c2 = REBIN(imx[nx-nx/64:nx-1,0:nx/64-1,*],1,1,nelem) c3 = REBIN(imx[0:nx/64-1,nx-nx/64:nx-1,*],1,1,nelem) c4 = REBIN(imx[nx-nx/64:nx-1,nx-nx/64:nx-1,*],1,1,nelem) cav0 = REFORM(c1+c2+c3+c4)/4 ;FOR i=0,nelem-1 DO imx[*,*,i]=imx[*,*,i]-cav0[i] ;FOR i=0,nx-1 DO FOR j=0,nx-1 DO imx[i,j,2:nelem-2]=imx[i,j,2:nelem-2]-INTERPOL([imx[i,j,1],imx[i,j,nelem-1]],[jdA[1],jdA[nelem-1]],jdA[2:nelem-2]) ; Try to separate gain variations and dark current variations pcav = POLY_FIT(jdA,cav0,4) ; fit by a polynomial of order 4 cavfit= POLY(jdA,pcav) cav = cavfit cav = cav/TOTAL(REBIN(cav[wdark],1)) FOR i=0,nelem-1 DO imx[*,*,i]=imx[*,*,i]-cav[i]*dark c1 = REBIN(imx[0:nx/64-1,0:nx/64-1,*],1,1,nelem) c2 = REBIN(imx[nx-nx/64:nx-1,0:nx/64-1,*],1,1,nelem) c3 = REBIN(imx[0:nx/64-1,nx-nx/64:nx-1,*],1,1,nelem) c4 = REBIN(imx[nx-nx/64:nx-1,nx-nx/64:nx-1,*],1,1,nelem) q = [[c1,c2],[c3,c4]] imx = imx - REBIN(q,nx,nx,nelem,/sample) exposures = exposures[AA] ; TEST THAT THE DETUNE SEQUENCE SEEMS CORRECT ;----------------------------------------------------------- a = WHERE(exposures EQ 0.0,na) IF (na LT 3) THEN BEGIN PRINT,'PROBLEM: THE DETUNE SEQUENCE DOES NOT INCLUDE 3 DARK FRAMES AS EXPECTED' STOP ENDIF Inten = DOUBLE(imx[*,*,2:28]) imx = 0.0 exposures = 0.0 IF (na GT 3) THEN BEGIN PRINT,'THERE IS AT LEAST ONE BAD EXPOSURE. THAT MIGHT AFFECT THE RESULT.' bb = WHERE(a NE 0 AND a NE 1 AND a NE nelem-1) FOR i=0,N_ELEMENTS(bb)-1 DO IF (a[bb[i]] LE 28) THEN Inten[*,*,a[bb[i]]-2]=-1.0 ; we tag the bad images ENDIF ELSE PRINT,'NO BAD EXPOSURE FOUND' distance = SHIFT(DIST(nx,ny),xcenter,ycenter)*0.5d0*4096.d0/nx ; distance in arcseconds from the image center ; BEGINNING OF THE ITERATIONS ;--------------------------------------------------- mat = DBLARR(3,2,2) vec = DBLARR(1,2) FOR i=0,2 DO BEGIN mat[i,0,0] = COS(dpi/FSR[i]*lam0) mat[i,1,0] = -SIN(dpi/FSR[i]*lam0) mat[i,0,1] = COS(dpi/FSR[i]*lam0 + dpi/3.d0) mat[i,1,1] = -SIN(dpi/FSR[i]*lam0 + dpi/3.d0) mat[i,*,*] = LA_INVERT(REFORM(mat[i,*,*]),/DOUBLE) ENDFOR ; BEGINNING OF COMPUTATIONS In = DBLARR(nseq) Intenmap = TOTAL(Inten[*,*,*],3) Intenmapmax = MAX(Intenmap) FOR jjj=0,ny-1 DO BEGIN FOR iii=0,nx-1 DO BEGIN ; GUESS OF THE PHASES AND CONTRASTS OF TUNABLE ELEMENTS ; ASSUMING THE LASER LINE PROFILE IS A DELTA FUNCTION ; we use the fact that cos(a)+cos(a+2pi/3)+cos(a+4pi/3) = 0 ; I0 = [ cos(2\pi l0/FSR0) -sin(2\pi l0/FSR0) ] * B cos(\phi) * T/2 + T/2 ; I1 [ cos(2\pi l0/FSR0+2\pi/3) -sin(2\pi l0/FSR0+2\pi/3) ] B sin(\phi) * T/2 + T/2 ; with 3 T/2 = I0+I1+I2 ; USING THE MEASURED INTENSITIES ; THE FOLLOWING PROCEDURE IS WRITTEN FOR [1.5,1.5,-1.5] ; (WHEN ONE OF THE COEFFICIENT IS -1.5, THEN I1=I2 AND I2=I1) ;---------------------------------------------------------- IF(distance[iii,jjj] LE anglim) THEN BEGIN FOR i=0,2 DO BEGIN CASE i OF 0: BEGIN In[*] = Inten[iii,jjj,*] ; TO TAKE CARE OF THE DUBIOUS IMAGES IF(In[0] EQ -1.0 OR In[1] EQ -1.0 OR In[2] EQ -1.0) THEN BEGIN In[0] = 0.0 In[1] = 0.0 In[2] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[3] EQ -1.0 OR In[4] EQ -1.0 OR In[5] EQ -1.0) THEN BEGIN In[3] = 0.0 In[4] = 0.0 In[5] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[6] EQ -1.0 OR In[7] EQ -1.0 OR In[8] EQ -1.0) THEN BEGIN In[6] = 0.0 In[7] = 0.0 In[8] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[9] EQ -1.0 OR In[10] EQ -1.0 OR In[11] EQ -1.0) THEN BEGIN In[9] = 0.0 In[10] = 0.0 In[11] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[12] EQ -1.0 OR In[13] EQ -1.0 OR In[14] EQ -1.0) THEN BEGIN In[12] = 0.0 In[13] = 0.0 In[14] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[15] EQ -1.0 OR In[16] EQ -1.0 OR In[17] EQ -1.0) THEN BEGIN In[15] = 0.0 In[16] = 0.0 In[17] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[18] EQ -1.0 OR In[19] EQ -1.0 OR In[20] EQ -1.0) THEN BEGIN In[18] = 0.0 In[19] = 0.0 In[20] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[21] EQ -1.0 OR In[22] EQ -1.0 OR In[23] EQ -1.0) THEN BEGIN In[21] = 0.0 In[22] = 0.0 In[23] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[24] EQ -1.0 OR In[25] EQ -1.0 OR In[26] EQ -1.0) THEN BEGIN In[24] = 0.0 In[25] = 0.0 In[26] = 0.0 PRINT,'BAD PIXEL' ENDIF I00= (In[0]+In[3]+In[6]+In[9]+In[12]+In[15]+In[18]+In[21]+In[24]) I1 = (In[1]+In[4]+In[7]+In[10]+In[13]+In[16]+In[19]+In[22]+In[25]) I2 = (In[2]+In[5]+In[8]+In[11]+In[14]+In[17]+In[20]+In[23]+In[26]) END 1: BEGIN In[*] = Inten[iii,jjj,*] IF(In[0] EQ -1.0 OR In[3] EQ -1.0 OR In[6] EQ -1.0) THEN BEGIN In[0] = 0.0 In[3] = 0.0 In[6] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[1] EQ -1.0 OR In[4] EQ -1.0 OR In[7] EQ -1.0) THEN BEGIN In[1] = 0.0 In[4] = 0.0 In[7] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[2] EQ -1.0 OR In[5] EQ -1.0 OR In[8] EQ -1.0) THEN BEGIN In[2] = 0.0 In[5] = 0.0 In[8] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[9] EQ -1.0 OR In[12] EQ -1.0 OR In[15] EQ -1.0) THEN BEGIN In[9] = 0.0 In[12] = 0.0 In[15] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[10] EQ -1.0 OR In[13] EQ -1.0 OR In[16] EQ -1.0) THEN BEGIN In[10] = 0.0 In[13] = 0.0 In[16] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[11] EQ -1.0 OR In[14] EQ -1.0 OR In[17] EQ -1.0) THEN BEGIN In[11] = 0.0 In[14] = 0.0 In[17] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[18] EQ -1.0 OR In[21] EQ -1.0 OR In[24] EQ -1.0) THEN BEGIN In[18] = 0.0 In[21] = 0.0 In[24] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[19] EQ -1.0 OR In[22] EQ -1.0 OR In[25] EQ -1.0) THEN BEGIN In[19] = 0.0 In[22] = 0.0 In[25] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[20] EQ -1.0 OR In[23] EQ -1.0 OR In[26] EQ -1.0) THEN BEGIN In[20] = 0.0 In[23] = 0.0 In[26] = 0.0 PRINT,'BAD PIXEL' ENDIF I00= (In[0]+In[1]+In[2]+In[9]+In[10]+In[11]+In[18]+In[19]+In[20]) I1 = (In[3]+In[4]+In[5]+In[12]+In[13]+In[14]+In[21]+In[22]+In[23]) I2 = (In[6]+In[7]+In[8]+In[15]+In[16]+In[17]+In[24]+In[25]+In[26]) END 2: BEGIN In[*] = Inten[iii,jjj,*] IF(In[0] EQ -1.0 OR In[9] EQ -1.0 OR In[18] EQ -1.0) THEN BEGIN In[0] = 0.0 In[9] = 0.0 In[18] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[1] EQ -1.0 OR In[10] EQ -1.0 OR In[19] EQ -1.0) THEN BEGIN In[1] = 0.0 In[10] = 0.0 In[19] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[2] EQ -1.0 OR In[11] EQ -1.0 OR In[20] EQ -1.0) THEN BEGIN In[2] = 0.0 In[11] = 0.0 In[20] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[3] EQ -1.0 OR In[12] EQ -1.0 OR In[21] EQ -1.0) THEN BEGIN In[3] = 0.0 In[12] = 0.0 In[21] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[4] EQ -1.0 OR In[13] EQ -1.0 OR In[22] EQ -1.0) THEN BEGIN In[4] = 0.0 In[13] = 0.0 In[22] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[5] EQ -1.0 OR In[14] EQ -1.0 OR In[23] EQ -1.0) THEN BEGIN In[5] = 0.0 In[14] = 0.0 In[23] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[6] EQ -1.0 OR In[15] EQ -1.0 OR In[24] EQ -1.0) THEN BEGIN In[6] = 0.0 In[15] = 0.0 In[24] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[7] EQ -1.0 OR In[16] EQ -1.0 OR In[25] EQ -1.0) THEN BEGIN In[7] = 0.0 In[16] = 0.0 In[25] = 0.0 PRINT,'BAD PIXEL' ENDIF IF(In[8] EQ -1.0 OR In[17] EQ -1.0 OR In[26] EQ -1.0) THEN BEGIN In[8] = 0.0 In[17] = 0.0 In[26] = 0.0 PRINT,'BAD PIXEL' ENDIF I00= (In[0]+In[1]+In[2]+In[3]+In[4]+In[5]+In[6]+In[7]+In[8]) I2 = (In[9]+In[10]+In[11]+In[12]+In[13]+In[14]+In[15]+In[16]+In[17]) I1 = (In[18]+In[19]+In[20]+In[21]+In[22]+In[23]+In[24]+In[25]+In[26]) END ENDCASE tot = I00+I1+I2 vec[0,0] = I00*3.d0/tot-1.d0 vec[0,1] = I1 *3.d0/tot-1.d0 vec = REFORM(mat[i,*,*])##vec Bg0[iii,jjj,i] = SQRT(vec[0,0]^2.d0+vec[0,1]^2.d0) ;WE CLEAN THE SOLUTION IF(Bg0[iii,jjj,i] GT 1.6d0) THEN Bg0[iii,jjj,i] = 1.6d0 Phig0[iii,jjj,i] = ATAN(vec[0,1],vec[0,0]) ENDFOR ENDIF ELSE BEGIN Bg0[iii,jjj,*] = 0.d0 Phig0[iii,jjj,*]= 0.d0 ENDELSE ENDFOR ENDFOR PRINT,'TOTAL TIME ELAPSED (in seconds)',SYSTIME(1)-time0 ; WE APPLY A MASK TO KEEP ONLY THE PHASES AND CONTRASTS ON THE ELEMENT ; APERTURE a = WHERE(REFORM(Bg0[*,*,0]) EQ 0.0 OR distance GT anglim) FOR i=0,2 DO BEGIN temp=REFORM(Phig0[*,*,i]) temp[a]=-10000.d0 phig0[*,*,i]=temp[*,*] temp=REFORM(Bg0[*,*,i]) temp[a]=-10000.d0 Bg0[*,*,i]=temp[*,*] ENDFOR a = WHERE(FINITE(Phig0) EQ 0) IF(a[0] NE -1) THEN Phig0[a]= -10000.0 a = WHERE(FINITE(Bg0) EQ 0) IF(a[0] NE -1) THEN Bg0[a] = -10000.0 a = WHERE(REFORM(Bg0[*,*,0]) EQ -10000.d0,COMPLEMENT=ba) ; RESOLVE THE 360 DEGREES UNCERTAINTY FOR i=0,2 DO BEGIN temp = REFORM(Phig0[*,*,i]) a= WHERE(temp NE -10000.d0) IF(MEAN(temp[a]) LT 0.0) THEN BEGIN b = WHERE(temp[a] GT 150.*!dpi/180.0) IF(b[0] NE -1) THEN temp[a[b]]=temp[a[b]]-dpi Phig0[*,*,i]=temp ENDIF ELSE BEGIN b = WHERE(temp[a] LT -150.*!dpi/180.0) IF(b[0] NE -1) THEN temp[a[b]]=temp[a[b]]+dpi Phig0[*,*,i]=temp ENDELSE ENDFOR ; I SAVE THE PHASE AND CONTRAST MAPS AFTER THE "360 DEGREE" CORRECTION IF camera LT 2 THEN SAVE,Bg0,Phig0,FILE='CPT_laser_front.BIN' ELSE SAVE,Bg0,Phig0,FILE='CPT_laser_side.BIN'; USED BY CPT_lamp2.pro ; WE COMPUTE THE AVERAGE VALUE moy = DBLARR(3) moyb = moy mini = DBLARR(3) maxi = DBLARR(3) mini2 = DBLARR(3) maxi2 = DBLARR(3) FOR i=0,2 DO BEGIN temp = REFORM(Phig0[*,*,i]) a = WHERE(temp NE -10000.d0,COMPLEMENT=b) moy[i] = MEAN(temp[a]) mini[i] = MIN(temp[a])*180./!dpi maxi[i] = MAX(temp[a])*180./!dpi temp[b] = moy[i] Phig0[*,*,i]=temp temp = REFORM(Bg0[*,*,i]) a = WHERE(temp NE -10000.d0,COMPLEMENT=b) moyb[i] = MEAN(temp[a]) temp[b] = moyb[i] mini2[i]= MIN(temp[a]) maxi2[i]= MAX(temp[a]) Bg0[*,*,i]=temp ENDFOR ; WE PLOT THE RESULT SET_PLOT,'ps' !p.multi=[0,2,3] IF camera LT 2 THEN DEVICE,file='result_laser_front_'+STRTRIM(STRING(FSN),1)+'.ps',bits=24,xoffset=0,yoffset=0,xsize=20,ysize=27,/color ELSE DEVICE,file='result_laser_side_'+STRTRIM(STRING(FSN),1)+'.ps',bits=24,xoffset=0,yoffset=0,xsize=20,ysize=27,/color loadct,4 TVIM,phig0[*,*,0]*180.d0/!dpi,/scale,tit='!17NB Michelson, !7l!17='+STRTRIM(STRING(moy[0]*180./!dpi),1),xtit='!17pixels',ytit='!17pixels',stit='!17Relative Phase (in degrees)',range=[mini[0],maxi[0]],pcharsize=1.5,barwidth=0.5 TVIM,phig0[*,*,1]*180.d0/!dpi,/scale,tit='!17WB Michelson, !7l!17='+STRTRIM(STRING(moy[1]*180./!dpi),1),xtit='!17pixels',ytit='!17pixels',stit='!17Relative Phase (in degrees)',range=[mini[1],maxi[1]],pcharsize=1.5,barwidth=0.5 TVIM,phig0[*,*,2]*180.d0/!dpi,/scale,tit='!17E1, !7l!17='+STRTRIM(STRING(moy[2]*180./!dpi),1),xtit='!17pixels',ytit='!17pixels',stit='!17Relative Phase (in degrees)',range=[mini[2],maxi[2]],pcharsize=1.5,barwidth=0.5 TVIM,Bg0[*,*,0],/scale,tit='!17NB Michelson',xtit='!17pixels',ytit='!17pixels',stit='!17Contrast',pcharsize=1.5,barwidth=0.5,range=[0.85,1.05];,range=[mini2[0],maxi2[0]] temp = Bg0[*,*,0] hist = histogram(temp[ba],binsize=0.001,min=0.7,max=1.05) PLOT,FINDGEN(N_ELEMENTS(hist))*0.001+0.7,hist/FLOAT(N_ELEMENTS(ba)),psym=10,tit='!7r!17='+STRING(SIGMA(temp[ba]))+'/!7l!17='+STRING(MEAN(temp[ba])),ytit='Histogram in percentage',xtit='Relative error',charsize=1.5,xst=1 TVIM,Bg0[*,*,1],/scale,tit='!17WB Michelson',xtit='!17pixels',ytit='!17pixels',stit='!17Contrast',pcharsize=1.5,barwidth=0.5,range=[0.85,1.05];,range=[mini2[1],maxi2[1]] temp = Bg0[*,*,1] hist = histogram(temp[ba],binsize=0.001,min=0.7,max=1.05) PLOT,FINDGEN(N_ELEMENTS(hist))*0.001+0.7,hist/FLOAT(N_ELEMENTS(ba)),psym=10,tit='!7r!17='+STRING(SIGMA(temp[ba]))+'/!7l!17='+STRING(MEAN(temp[ba])),ytit='Histogram in percentage',xtit='Relative error',charsize=1.5,xst=1 TVIM,Bg0[*,*,2],/scale,tit='!17E1',xtit='!17pixels',ytit='!17pixels',stit='!17Contrast',pcharsize=1.5,barwidth=0.5,range=[0.85,1.05];,range=[mini2[2],maxi2[2]] temp = Bg0[*,*,2] hist = histogram(temp[ba],binsize=0.001,min=0.7,max=1.05) PLOT,FINDGEN(N_ELEMENTS(hist))*0.001+0.7,hist/FLOAT(N_ELEMENTS(ba)),psym=10,tit='!7r!17='+STRING(SIGMA(temp[ba]))+'/!7l!17='+STRING(MEAN(temp[ba])),ytit='Histogram in percentage',xtit='Relative error',charsize=1.5,xst=1 TVIM,Intenmap/Intenmapmax,/scale,tit='!17Laser Illumination Estimate',xtit='!17pixels',ytit='!17pixels',barwidth=0.5,pcharsize=1.5,stit='Relative Intensity' DEVICE,/close PRINT,'THE CODE COMPUTED PHASES AND CONTRASTS ONLY FOR THE PIXELS THAT ARE PROPERLY LIT BY THE LASER' PRINT,'THEREFORE, THE PHASE AND CONTRAST MAPS MIGHT NOT SHOW A CLEAN CIRCULAR APERTURE, AND PARTS OF' PRINT,'THE IMAGES MIGHT HAVE BEEN AMPUTATED DUE TO POOR LASER ILLUMINATION' PRINT,'RESULTS:' PRINT,'AVERAGE PHASES (FOR NARROW-BAND MICHELSON, BROAD-BAND MICHELSON, AND E1)' FOR i=0,2 DO PRINT,moy[i]*180.d0/!dpi PRINT,'AVERAGE CONTRASTS' FOR i=0,2 DO PRINT,moyb[i] ; BUILDS THE CO-TUNE TABLE COTUNETABLE,moy[0]*180.d0/!dpi,moy[1]*180.d0/!dpi,moy[2]*180.d0/!dpi,FSN,camera IF camera LT 2 THEN PRINT,'SEE PHASE AND CONTRAST MAPS IN result_laser_front_'+STRTRIM(STRING(FSN),1)+'.ps' ELSE PRINT,'SEE PHASE AND CONTRAST MAPS IN result_laser_side_'+STRTRIM(STRING(FSN),1)+'.ps' IF camera LT 2 THEN PRINT,'SEE COTUNE TABLE IN cotune_front_'+STRTRIM(STRING(FSN),1)+'.txt' ELSE PRINT,'SEE COTUNE TABLE IN cotune_side_'+STRTRIM(STRING(FSN),1)+'.txt' IF camera LT 2 THEN PRINT,'DATA (BINARY FILES FOR idl) ARE SAVED IN CPT_laser_front.BIN' ELSE PRINT,'DATA (BINARY FILES FOR idl) ARE SAVED IN CPT_laser_side.BIN' SET_PLOT,'x' !p.multi=0 END