; PROGRAM TO GENERATE THE HMI FILTER PROFILES ; ASSUME 6 FILTERS WITH THE FOLLOWING NAMES AND CENTRAL LOCATIONS: ; I0 is centered at +170 mA ; I1 is centered at +102 mA ; I2 is centered at +34 mA ; I3 is centered at -34 mA ; I4 is centered at -102 mA ; I5 is centered at -170 mA ;-------------------------------------------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------------------------------------------------------- ; ; MAIN PROGRAM ; ; nx2 is the number of columns and rows for which the user ; wants to produce filter profiles. ; The actual calibration data used to produce the filter profiles are ; currently in 256x256 (the gradient across these data are relatively ; small, so there is no need for the full 4096x4096) ; So if nx2>256, the code will do a bilinear interpolation from a ; 256*256 grid to a nx2*nx2 one ; ;------------------------------------------------------------------------------------------------------------------------- PRO HMIfilters,nx2 ; Hollow Core Motors steps for the 3 tunable elements ; we assume the tuning polarizaer is fixed at 0 ;---------------------------------------------------- HCME1=37 HCMWB=59 HCMNB=82 ; Free Spectral Ranges of the 7 optical-filter elements ; these FSRs are ESTIMATES only, and more accurate values will be ; derived once SDO is launched ;----------------------------------- FSR = DBLARR(7) ; Free Spectral Ranges in Angstrom of the Lyot and Michelson elements FSR[0] = 0.172d0-0.0010576d0;0.1710098d0 ; for the narrow-band Michelson in Angstrom FSR[1] = 0.344d0-0.00207683d0;0.3421506d0 ; for the broad-band Michelson FSR[2] = 0.693d0+0.000483467d0;0.6943613d0 ; for the Lyot element 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 lam0 = 6173.3433d0 ;target wavelength ntune = 6 ; number of tuning positions (NUMBER OF FILTERS) inttune = 5.d0/2.d0 ; number of tuning position in each wing contrast = FLTARR(7)+1.0 dtune = FSR[0]/inttune ; interval between two tuning positions tune = DBLARR(3,ntune) FOR i = 0,2 DO tune[i,*]=(-(ntune-1)/2.d0+dindgen(ntune))*dtune ; GRID WE WANT IN WAVELENGTH nlam = 501 ; number of wavelength points dlam = 0.008 ; sampling rate in Angstroms lam = (DINDGEN(nlam)-(nlam-1.d0)/2.d0)*dlam ; TUNING POSITIONS OF THE NB AND WB MICHELSONS AND OF THE LYOT ELEMENT ; E1 ;--------------------------------------------------------------------- HCME1phase = FLTARR(6) HCMWBphase = FLTARR(6) HCMNBphase = FLTARR(6) HCME1phase[0]= float( (HCME1+15)*6 MOD 360)*!pi/180.0 ; //I0 HCME1phase[1]= float( (HCME1+9 )*6 MOD 360)*!pi/180.0 ; //I1 HCME1phase[2]= float( (HCME1+3 )*6 MOD 360)*!pi/180.0 ; //I2 HCME1phase[3]= float( (HCME1-3 )*6 MOD 360)*!pi/180.0 ; //I3 HCME1phase[4]= float( (HCME1-9 )*6 MOD 360)*!pi/180.0 ; //I4 HCME1phase[5]= float( (HCME1-15)*6 MOD 360)*!pi/180.0 ; //I5 HCMWBphase[0]= float( (HCMWB-30)*6 MOD 360)*!pi/180.0 ; HCMWBphase[1]= float( (HCMWB-18)*6 MOD 360)*!pi/180.0 ; HCMWBphase[2]= float( (HCMWB-6 )*6 MOD 360)*!pi/180.0 ; HCMWBphase[3]= float( (HCMWB+6 )*6 MOD 360)*!pi/180.0 ; HCMWBphase[4]= float( (HCMWB+18)*6 MOD 360)*!pi/180.0 ; HCMWBphase[5]= float( (HCMWB-30)*6 MOD 360)*!pi/180.0 ; HCMNBphase[0]= float( (HCMNB+0 )*6 MOD 360)*!pi/180.0 ; HCMNBphase[1]= float( (HCMNB+24)*6 MOD 360)*!pi/180.0 ; HCMNBphase[2]= float( (HCMNB-12)*6 MOD 360)*!pi/180.0 ; HCMNBphase[3]= float( (HCMNB+12)*6 MOD 360)*!pi/180.0 ; HCMNBphase[4]= float( (HCMNB-24)*6 MOD 360)*!pi/180.0 ; HCMNBphase[5]= float( (HCMNB+0 )*6 MOD 360)*!pi/180.0 ; ; PHASE AND CONTRAST MAPS OF THE 4 NON-TUNABLE ELEMENTS (LYOT E2 TO ; E5), in 256x256 ;------------------------------------------------------------------ nx=256 ; the phase and contrast maps are in 256x256 (ONLY TEMPORARY, WILL BE UPDATED LATER) RESTORE,'RESULTS_June09_710660_CAL_'+STRTRIM(STRING(LONG(nx)),1)+'_SIDE.BIN' ; data from 2007/10/15 taken in vacuum with the dye laser (side camera) ; we want PHIG: the phases (in degrees), and BG: the contrasts I0g=0.0 ; to save some memory lateconv=0.0 threshold=0.0 ; PHASE MAPS OF THE TUNABLE ELEMENTS (MICHELSONS NB, WB, AND LYOT E1) ; in 256x256 ;------------------------------------------------------------------- phases=READFITS("PHASE_MAPS_707119.fits") ; data from 2007/10/14, taken in vacuum and sunlight FOR i=0,2 DO PHIG[*,*,i]=phases[i,*,*] phases=0.0 ; CONTRAST MAPS OF THE TUNABLE ELEMENTS (MICHELSONS NB, WB, AND LYOT E1) ; in 256x256 ;------------------------------------------------------------------- contrasts=READFITS("CONTRAST_MAPS_710660.fits") ; data from 2007/10/15 taken in vacuum with the dye laser FOR i=0,2 DO BG[*,*,i]=contrasts[*,*,i] contrasts=0.0 ; BILINEAR INTERPOLATION OF THE PHASE AND CONTRAST MAPS ; FROM 256*256 to nx2*nx2 ;------------------------------------------------------ PHIG=REBIN(PHIG,nx2,nx2,7) BG =REBIN(BG,nx2,nx2,7) ; BLOCKER FILTER + FRONT WINDOW AVERAGED PROFILE ; PROVIDED BY LOCKHEED-MARTIN (R. SHINE) ; from R. Shine's website (http://www.lmsal.com/~shine/Public/hmi/) ;----------------------------------------------- ; ACTUAL SPATIALLY-AVERAGED FRONT WINDOW FOR HMI ; THIS IS THE FRONT WINDOW S/N 3? ; IN OCTOBER 2007 THE FRONT WINDOW WAS CHANGED FROM S/N 1 TO S/N 3: transmission = DBLARR(2,401) OPENR,1,'frontwindow3.txt' READF,1,transmission CLOSE,1 wavelength = REFORM(transmission[0,*]) transmission = REFORM(transmission[1,*]) blocker = INTERPOL(transmission/100.d0,wavelength*10.d0-lam0,lam) q = READFITS('blocker11.fits') blocker = blocker * INTERPOL(q[*,1]/100.d0,q[*,0]+2.6d0-lam0,lam) ; I center the profile (VALUE OF CENTER AS OF JUNE 2009) ;filters = FLTARR(nlam,ntune,nx2,nx2) ;lyot = FLTARR(nlam,nx2,nx2) filters = FLTARR(nlam,ntune) lyot = FLTARR(nlam) openw,lun1,'HMIfilter.'+strtrim(nx2,2)+'.out',/get_lun FOR iii=0,nx2-1 DO BEGIN PRINT,iii FOR jjj=0,nx2-1 DO BEGIN ;lyot[*,iii,jjj] = blocker lyot = blocker ;NON-TUNABLE ELEMENTS FOR i = 0,3 DO BEGIN ;lyot[*,iii,jjj] = lyot[*,iii,jjj]*(1.d0+BG[iii,jjj,i+3]*COS(2.d0*!pi/FSR[i+3]*lam+PHIG[iii,jjj,i+3]*!pi/180.d0))/2.d0 lyot = lyot*(1.d0+BG[iii,jjj,i+3]*COS(2.d0*!pi/FSR[i+3]*lam+PHIG[iii,jjj,i+3]*!pi/180.d0))/2.d0 ENDFOR ;TUNABLE ELEMENTS FOR itune = 0,ntune-1 DO BEGIN ;filters[*,itune,iii,jjj] = lyot[*,iii,jjj]*(1.d0+contrast[0]*COS(2.d0*!pi/FSR[0]*lam[*]+PHIG[iii,jjj,0]*!pi/180.d0+HCMNBphase[itune]))/2.d0*(1.d0+contrast[1]*COS(2.d0*!dpi/FSR[1]*lam[*]+PHIG[iii,jjj,1]*!dpi/180.d0+HCMWBphase[itune]))/2.d0*(1.d0+contrast[2]*COS(2.d0*!pi/FSR[2]*lam[*]+PHIG[iii,jjj,2]*!pi/180.d0-HCME1phase[itune]))/2.d0 filters[*,itune] = lyot*(1.d0+contrast[0]*COS(2.d0*!pi/FSR[0]*lam[*]+PHIG[iii,jjj,0]*!pi/180.d0+HCMNBphase[itune]))/2.d0*(1.d0+contrast[1]*COS(2.d0*!dpi/FSR[1]*lam[*]+PHIG[iii,jjj,1]*!dpi/180.d0+HCMWBphase[itune]))/2.d0*(1.d0+contrast[2]*COS(2.d0*!pi/FSR[2]*lam[*]+PHIG[iii,jjj,2]*!pi/180.d0-HCME1phase[itune]))/2.d0 ENDFOR writeu,lun1,filters ENDFOR ENDFOR close,lun1 & free_lun,lun1 ;example: ;plot,lam,filters[*,0,nx2/2,nx2/2],xst=1,tit='FILTER PROFILE I0 AT PIXEL LOCATION (nx2/2,nx2/2)',charsize=1.5,xtit='Wavelength (A)',ytit='Normalized intensity' ;stop END