0001 function scan = writeFitsMap(fitsFilename,d,batchStartMJD,batchEndMJD,thisScanNumber,totalScans,hdf_mode,varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 optargin = size(varargin,2);
0031 if(optargin>0)
0032 flagsIn=varargin{1};
0033 else
0034 flagsIn=zeros(length(d.index.skydip.fast),1);
0035 end
0036
0037
0038 disp('writeFitsMap:: Starting writeFitsMap')
0039 sunBuffer=0;
0040
0041
0042
0043 lon=d.antenna0.tracker.siteActual(2,1);
0044 lat=d.antenna0.tracker.siteActual(2,2);
0045
0046
0047 startTimeMJD = d.antenna0.receiver.utc(1);
0048 endTimeMJD = d.antenna0.receiver.utc(length(d.antenna0.receiver.utc));
0049
0050 disp('writeFitsMap:: EndTimeMJD writeFitsMap')
0051
0052 relativeTime = d.antenna0.receiver.utc-startTimeMJD;
0053 equatorialPosn = d.antenna0.servo.equa(:,1:2);
0054 horizontalPosn = d.antenna0.servo.apparent(:,1:2);
0055 correctedData = d.antenna0.receiver.data;
0056 flags = logical(flagsIn)|logical(d.index.skydip.fast)|logical(d.index.noise.fast);
0057 sunPos = double(d.flags.dayNight);
0058 disp('writeFitsMap:: Flags writeFitsMap')
0059 try
0060
0061 solarDist = d.antenna0.servo.solarDist;
0062 [galacticPosn,TotRot]=coco(equatorialPosn,'j2000.0','g','r','r');
0063 dataBundle = [relativeTime equatorialPosn horizontalPosn correctedData flags sunPos solarDist];
0064
0065 catch
0066 disp('writeFitsMap:: Failed galacticPosn,databundle in writeFitsMap')
0067 end
0068
0069
0070
0071
0072
0073 datatype = size(d.antenna0.receiver.data,2);
0074 fprintf('datatype = %d\n',datatype)
0075
0076 fits_header = prepareHeader(d);
0077 size_fits_header = size(fits_header);
0078 no_fits_keywords = size_fits_header(2);
0079
0080 if (hdf_mode == 1 )
0081 disp('writeFitsMap:: Calling cbass_write_hdf');
0082 cbass_write_hdf(fitsFilename,dataBundle,0,0,startTimeMJD,endTimeMJD,thisScanNumber,totalScans,batchStartMJD,batchEndMJD,sunBuffer,datatype);
0083 else
0084 disp('writeFitsMap:: Calling cbass_write_data');
0085 cbass_write_data(fitsFilename,dataBundle,0,0,startTimeMJD,endTimeMJD,thisScanNumber,totalScans,batchStartMJD,batchEndMJD,sunBuffer,datatype,fits_header,no_fits_keywords);
0086 end
0087
0088
0089
0090 scan = thisScanNumber;
0091 disp('writeFitsMap:: End writeFitsMap.')
0092 end
0093
0094
0095 function fits_header = prepareHeader(d)
0096
0097
0098
0099
0100
0101 [antenna_no antenna_name] = identifyTelescope(d);
0102 telescope_constants;
0103 epoch_label= d.antenna0.servo.epoch
0104
0105 num_keywords = 18;
0106
0107 fits_header=cell(4,num_keywords);
0108
0109 i=1;
0110 fits_header(:,i)={'TELESCOP' antenna_name 'Name of Telescope' 'String'};
0111 i=i+1;
0112
0113 fits_header(:,i)={'ORIGIN ' char(antenna_observatory(antenna_no)) 'Origin of file' 'String'};
0114 i=i+1;
0115
0116 fits_header(:,i)={'---- x,y,z triplet for CBASS relative to centre of earth ----' 'blah' 'blah' 'Comment'};
0117 i=i+1;
0118
0119 fits_header(:,i)={'ALT-OBS ' antenna_altitude(antenna_no) '[m] Height of observatory above sea level' 'Double'};
0120 i=i+1;
0121
0122
0123 fits_header(:,i)={'LAT-OBS ' antenna_latitude(antenna_no) '[deg] Latitude of observatory' 'Double'};
0124 i=i+1;
0125
0126 fits_header(:,i)={'LONG-OBS' antenna_longitude(antenna_no) '[deg] Longitude of observatory' 'Double'};
0127 i=i+1;
0128
0129 fits_header(:,i)={'RADECSYS' 'FK5 ' 'Reference frame for RA/DEC values' 'String'};
0130 i=i+1;
0131
0132 fits_header(:,i)={'EQUINOX' epoch_label 'Epoch of reference equinox' 'String'};
0133 i=i+1;
0134
0135 fits_header(:,i)={'VERSION ' 2 'CBASS FITS format version No.' 'Int'};
0136 i=i+1;
0137
0138 fits_header(:,i)={'WORKING ' 1 'Is CBASS working?' 'Bool'};
0139 i=i+1;
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158 azmin=min(d.antenna0.servo.apparent(:,1));
0159 azmax=max(d.antenna0.servo.apparent(:,1));
0160 fits_header(:,i)={'AZMIN ' azmin '[deg] Minimum azimuth value in the observation' 'Double'};
0161 i=i+1;
0162 fits_header(:,i)={'AZMAX ' azmax '[deg] Maximum azimuth value in the observation' 'Double'};
0163 i=i+1;
0164
0165
0166
0167
0168 elmin=min(d.antenna0.servo.apparent(:,2));
0169 elmax=max(d.antenna0.servo.apparent(:,2));
0170 fits_header(:,i)={'ELMIN ' elmin '[deg] Minimum elevation value in the observation' 'Double'};
0171 i=i+1;
0172 fits_header(:,i)={'ELMAX ' elmax '[deg] Maximum elevation value in the observation' 'Double'};
0173 i=i+1;
0174
0175 ramin = min(d.antenna0.servo.equa(:,1));
0176 ramax = max(d.antenna0.servo.equa(:,1));
0177 fits_header(:,i)={'RAMIN ' ramin '[rad] Min R.A. value in the obs (J2000)' 'Double'};
0178 i=i+1;
0179 fits_header(:,i)={'RAMAX ' ramax '[rad] Max R.A. value in the obs (J2000)' 'Double'};
0180 i=i+1;
0181
0182 decmin = min(d.antenna0.servo.equa(:,2));
0183 decmax = max(d.antenna0.servo.equa(:,2));
0184 fits_header(:,i)={'DECMIN ' decmin '[rad] Min R.A. value in the obs (J2000)' 'Double'};
0185 i=i+1;
0186 fits_header(:,i)={'DECMAX ' decmax '[rad] Max R.A. value in the obs (J2000)' 'Double'};
0187 i=i+1;
0188
0189
0190
0191
0192 return;
0193 end