ftp://ftp.chg.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_6-hourly/p1_bin/ ftp://ftp.chg.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_6-hourly/p1_bin/extra_step/ % gunzip -R * % cp 2*/rfe* __ALL ============================= 2018.06.01 How to read in 6-hourly files? Short answer (in IDL speak) ifile = file_search(indir+'rfe_gdas.bin.2017043018') ingrid = fltarr(751, 801) openr,1, ifile readu,1, ingrid close,1 byteorder,ingrid,/XDRTOF ingrid = SWAP_ENDIAN(ingrid); should also work. print, min(ingrid) ;min value = -1 ingrid(where(ingrid lt 0)) = !values.f_nan temp = image(ingrid, rgb_table=4) Long answer: below is a readme for the CHIRPS 6-hrly with some read-in via IDL tips and notes re: how the data is produced this could be confusing: As is, some of the data is in ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_6-hourly/p1_bin/ and some in ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_6-hourly/p1_bin/extra_step ;; read in the 6 hrly CHIRPS (temporally downscaled w/ CFS) ; gridded binary float, no header min_lat = -40S max_lat = 40N min_lon = -20 W max_lon = 55 E resolution = 0.1 degree nx = 751 ny = 801 ; need to confirm units are mm (kg/m2) ; byte order is BIG ENDIAN (note change order of bytes) indir = datapath+'/6-hrly/201704/' ifile = file_search(indir+'rfe_gdas.bin.2017043018') ingrid = fltarr(751, 801) openr,1, ifile readu,1, ingrid close,1 ;A = SWAP_ENDIAN(A) should also work. byteorder,ingrid,/XDRTOF print, min(ingrid) ;min value = -1 ingrid(where(ingrid lt 0)) = !values.f_nan temp = image(ingrid, rgb_table=4) there was an update the the CHIRPS on Nov3. The previous version had, in some locations, some large discrepancies between the monthly totals (which are computed initially in the CHRIPRS process...) and the daily values summed to month. the files from 1981-2015 July come from here: ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/experimental/africa_6-hourly.p1_bin.01mm/ and then it switches to the files in here in Aug 2015: ftp://chg-ftpout.geog.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/africa_6-hourly/p1_bin/extra_step/ *******temporal downscaling explanation from pete Aug 21, 2014********** The downscaling to daily, and later 6-hry has become a multi-step marvel.... ; Overview of downscaling procedure 1st, start with CHIRPS pentads, downscale to daily based on CCD%. Wherever CCD% is zero, rainfall becomes zero. (This was done wrong last time) Where there are missing CCD% values, downscaled rainfall becomes a missing value (-1) This removes rainfall from the total. 2nd, use FCP (CHPclim * %anom CFS) to fill in missing data from step 1. In this step used our CCD% (1981-1999) histogram to make 12 monthly FCP cutoff maps. (last time made the cutoff maps based on Sheffield daily histograms) For this step clip cutoff maps to 3.5 mm/day (places where cutoff > 3.5 set to 3.5) This should prevent the introduction of FCP from disrupting the number of rain events. This step insures data exists everywhere in Africa. 3rd, rescale daily values from step 2 to match CHIRPS pentad totals. This sometimes produces significant residuals when all days in the pentad = zero. 4th step rescale the daily data from step 3 by month to match CHIRPS monthly data. Then only get residuals where every day in the month = zero (still happens) That's how we come up with our, daily_downscaled_by_monthly_full_rescale which we refer to as daily. You can see the latest IDL code used to top these off here, /home/source/cscd/mqb_v1.8/runem.post_mqb_61_make_final_dailies.pro Now, to get 6-hry, start with the above daily CHIRPS and repartition into four 6-hourly time steps using the ratio of the 6-hourly to daily in the CFS reanalysis ds093/ds094 data while preserving the daily total. matlab isn’t my usual software….but this should work. The “b” argument in fopen is for big-endian. ncol=801; nrow=751; fname='rfe_gdas.bin.2017052300' fid = fopen(fname, 'r','b'); %data1 = fread(fid, [nrow, ncol], 'int'); data1 = fread(fid, [nrow, ncol], 'float'); fclose(fid) % mask the ocean data2=data1; data2(data2==-1)=NaN; figure; pcolor(data2'); shading flat; colorbar; If you are still having trouble getting the 4- 6hrly totals to equal daily it could be units. The data 6hrly is in kg/m2/s, multiply by 86400 (seconds in a day) to get mm which is the units of the daily files.