c include file 'out_record.h' c c HG Added common block /record/ and /header/ c Include-file for output data from microscope camera program. c Each image should results in one of these output records. c c This file should be included in the main microscope program. c When making changes to this record structure, then both c block_length, definitions, and equivalence statements must be c changed. c c include 'out_rec_header.h' c c ENTIRE OUTPUT RECORD: real out_buf(out_rec_length) integer out_bufI(out_rec_length) c Entire output record, but expressed as 16-bit integers: integer*2 out_buf_image(out_rec_length*2) c common /record/ out_buf c c HEADER PARAMETERS: real record_length ! Number of 4-byte words in c each image record real first_record ! ==1 real last_record c c SLIDE EXPOSURE PARAMETERS: real yymmdd_slide_exposure ! Date in yymmdd format real begin_hhmmss_slide_exposure ! Time in hhmmss format real end_hhmmss_slide_exposure ! Time in hhmmss format real slide_number ! Number within the day real field_project_number ! ACE-Asia = 1, IDEAS-2 = 2 real begin_altitude_exposure ! See printed manual, Jensen2001 real end_altitude_exposure ! See printed manual, Jensen2001 real control_or_actual ! Control = 0, actual = 1 real ok_handling_field ! Faulty = 0, OK = 1 real operator_field ! Tiv=1, Gran=2, Jen=3, Gras=4, c Gaismaier=5 real true_air_speed_bar ! TAS; Jensen to insert later real true_air_speed_min ! TAS; Jensen to insert later real true_air_speed_max ! TAS; Jensen to insert later real rel_hum_exposure_bar ! Relative humidity, from menu real rel_hum_exposure_min ! Relative humidity, from menu real rel_hum_exposure_max ! Relative humidity, from menu real rel_hum_exposure_bar_edit ! Relative humidity, edited from c examination of flight data. real rho_air_exposure_bar ! Air density, from menu real rho_air_exposure_min ! Air density, from menu real rho_air_exposure_max ! Air density, from menu real temperature_exposure_bar ! Ambient temparture, from menu real temperature_exposure_min ! Ambient temparture, from menu real temperature_exposure_max ! Ambient temparture, from menu real pressure_exposure_bar ! Ambient pressure from menu real pressure_exposure_min ! Ambient pressure from menu real pressure_exposure_max ! Ambient pressure from menu real altitude_exposure_bar ! Ambient altitude from menu real altitude_exposure_min ! Ambient altitude from menu real altitude_exposure_max ! Ambient altitude from menu real sample_area ! Sample area, pixels sq. sum real sample_volume ! Sample volume, tas*pixels real ranz_wong_50_percent ! Cut-off radius (50%) c c c MICROSCOPE ANALYSIS PARAMETERS: real yymmdd_slide_analysis ! Date in yymmdd format real hhmmss_slide_analysis ! Time in hhmmss format real ok_handling_microscope ! Faulty = 0, OK = 1 real operator_microscope ! Tiv=1, Gran=2, Jen=3, Gras=4 real rel_hum_desired ! Desired relative humidity. c c c MICROSCOPE STAGE PARAMETERS: real x_positive_limit ! 0 = diode shaded; i.e. at limit real x_negative_limit ! 1 = diode unshaded; i.e. good real y_positive_limit ! etc. real y_negative_limit real z_positive_limit real z_negative_limit real chamber_number real cassette_number real slide_number_in_cassette real x_global_coordinate real y_global_coordinate real z_global_coordinate real x_local_coordinate real y_local_coordinate real z_local_coordinate real image_number_in_x_dir ! E.g. third image from start real image_number_in_y_dir real image_number_in_z_dir real x_scan_direction c c c Voltage PARAMETERS: real voltage(0:MAX_AD_CHANNELS-1) c c CALIBRATION PARAMETERS: real calibration(0:3,0:MAX_AD_CHANNELS-1) c c DIGITA I/O PARAMETERS: real digital_io(0:MAX_AD_CHANNELS-1) c c THERMODYNAMICS PARAMETERS: real salt_type real t_salt1_1 real t_salt1_2 real t_salt2_1 real t_salt2_2 real t_salt3_1 real t_salt3_2 real t_cabinet_1 ! Timber cabinet temperature real t_cabinet_2 ! Timber cabinet temperature real t_chamber1_inlet real t_chamber1_outlet real t_chamber2_inlet real t_chamber2_outlet real t_chamber_outlet_vaisala real rh_chamber_outlet_vaisala real p_cabinet real p_d_cabinet c real rh_chamber1_inlet ! Vaisala mixing ratio real rh_chamber1_outlet ! Vaisala mixing ratio real rh_chamber2_inlet ! Vaisala mixing ratio real rh_chamber2_outlet ! Vaisala mixing ratio real qv_chamber1_inlet ! Vaisala mixing ratio real qv_chamber1_outlet ! Vaisala mixing ratio real qv_chamber2_inlet ! Vaisala mixing ratio real qv_chamber2_outlet ! Vaisala mixing ratio c based on labyrinth and chamber c temperatures. c c CAMERA STATUS: real camera_register(50) ! Camera status parameters c c IMAGE PARAMETERS: real side_vertical_image real ccd_pixel_size real exposure_setting real exposure_time real electronic_gain real image_number ! Image-number within this slide real magnification ! Microscope objective real number_pixels_x real number_pixels_y real dark_actual ! Dark = 0; Actual = 1 integer*2 image_data(NYMAX*NXMAX)! Pixel values real focus_or_actual ! Focus image = 0; c actual image = 1 real polarizer_in_place c c c IMAGE POST-PROCESSING PARAMETERS: (500 particles max per image): real yymmdd_post_processing ! Date of post-processing real accept_image ! Yes = 0, No = 1 c (quality/scratches/too c many particles, etc.) real focus ! Focus parameter. Sum-sq of c neignboring pixels. real in_focus ! Flag to denote if focus c algorithm found a good focus. c in_focus = 0. : bad focus c in_focus = 1. : good focus real xx_min ! 4 parameters describing good real xx_max ! portion of image; other real yy_min ! regions may be discarded real yy_max ! due to slide edge, etc. real shadow_threshold ! Threshold for shaded pixel. real n_round_particles ! real n_irregular_particles ! real corr_coeff ! Measure of linearity of c position of irregular c particles real x_center_of_gravity(MAX_PARTICLES) ! Pixel number for c each analysed real y_center_of_gravity(MAX_PARTICLES) ! particle real ambient_radius(MAX_PARTICLES) ! Particle ambient c radius real dry_radius(MAX_PARTICLES) ! Particle dry radius, c if spherical cap real particle_habit(MAX_PARTICLES) ! Spherical=0, c irregular=1, etc. c corrected for Ranz c and Wong collision c efficiencies. real particle_perimeter(MAX_PARTICLES) ! length of perimeter c in pixels. real particle_area(MAX_PARTICLES) ! Area of particles c in units of pixels. real particle_median_shading(MAX_PARTICLES) ! Median shade value c of all pixels in c the particle. real count(MAX_BINS,0:10) ! Habit count c spectrum c (MAX_PARTICLES c pixel classes, c 11 habit classes) real count_nacl(MAX_BINS) ! Count spectrum for c dry salt particles c with equivalent c volume radius c (0.5-250 micron c dry radius) real spec(MAX_BINS,0:10) ! Habit conc. spectrum c (MAX_PARTICLES c pixel classes, 11 c habit classes), c corrected for sample c volume and Ranz and c Wong collision c efficiency. real spec_nacl(MAX_BINS) ! Conc. spectrum for c dry salt particles c with equivalent c dry radius, c corrected for sample c volume and Ranz and c Wong collision c efficiency. real count_habit(0:10) ! Total count of sized particles c for each habit. c count_habit(10) is the total c number of sized particles. c INSERT ADDITIONAL VARIABLES RIGHT AFTER THIS LINE: real dewpoint_exposure_bar ! Average dewpoint temperature c during slide exposure real dewpoint_exposure_min ! Minimum dewpoint temperature c during slide exposure real dewpoint_exposure_max ! Maximum dewpoint temperature c during slide exposure real wind_direction_exposure_bar ! Average wind direction during c slide exposure real latitude_exposure_bar ! Latitude at exposure real latitude_exposure_min ! Minimum latitude at exposure real latitude_exposure_max ! Maximum latitude at exposure real longitude_exposure_bar ! Longitude at exposure real longitude_exposure_min ! Minimum longitude at exposure real longitude_exposure_max ! Maximum longitude at exposure real z_focus_height ! Distance above focus c plane; only used for Stuart's c stack of vertical PNG images. real threshold_of_max_pixel_value_change ! Threshold value for c accepting sharpness of c round images. real median_of_max_pixel_value_change ! Median of maximum changes c for round images. real surface_wind_speed ! measured during circle legs. real spec_nacl_is_significant ! 0 = no, there are not 5 c consequtive bins for which c spec_nacl exceeds mean+2.5*control c spectrum. c r = yes, there are 5 c consequtive bins for which c spec_nacl exceeds mean+2.5*control c spectrum. real saturation_ratio ! Calculated salt-bath c saturation ratio real focus_algorithm ! 0 = sum-square of differences. c 1 = sum-quad of dark values real images_with_salt ! Number of images in focus c and with salt detected. real fix_cap_rico ! Flag to denote if module c fix_cap_volume.f has c already been run. c 0 = not yet run c 1 = already run c Only used for RICO data. real sea_salt_mixing_ratio ! Sea salt mixing ratio real wind_speed_exposure_bar ! Mean wind speed c during exposure; only relevant c over the ocean and in the mixed c layer. real wind_speed_exposure_min ! Minimum wind speed c during exposure; only relevant c over the ocean and in the mixed c layer. real wind_speed_exposure_max ! Maximum wind speed c during exposure; only relevant c over the ocean and in the mixed c layer. real image_median_light_level ! Image's median light level; c that is above black image c values. real slide_mean_median_light_level ! Slide's median c light level; c that is above c black image c values. real image_scale_factor ! Multiply image data by this c factor every time it is read, c apart from in find_median. real overall_pixel_average ! Average pixel value for c all good images (apart from c those black or out-of-focus). real yymmdd_merge_thermodynamics ! Date for c which the flight c data was merged. real yymmdd_accept_image ! Date for c which the image c data was c examined c for edge exclusion. c c Control variables: c c Mean count spectrum: real control_mean_count_spectrum_nacl(MAX_BINS) real control_mean_count_spectrum_all(MAX_BINS) c Mean+2.5*sdev count spectrum: real control_exceed_count_spectrum_nacl(MAX_BINS) real control_exceed_count_spectrum_all(MAX_BINS) c Nacl bins for which statistical significant counts are found: real control_good_bins_nacl(MAX_BINS) real control_good_bins_all(MAX_BINS) c NACL spectrum exceeding average contamination: real spec_nacl_significant(MAX_BINS) real spec_all_significant(MAX_BINS) c c ============================================================== c Equivalences: c c Header: equivalence(out_buf(header_offset+1), record_length) equivalence(out_buf(header_offset+2), first_record) equivalence(out_buf(header_offset+3), last_record) c c SLIDE EXPOSURE PARAMETERS: equivalence(out_buf(slide_offset+1), yymmdd_slide_exposure) equivalence(out_buf(slide_offset+2), begin_hhmmss_slide_exposure) equivalence(out_buf(slide_offset+3), end_hhmmss_slide_exposure) equivalence(out_buf(slide_offset+4), slide_number) equivalence(out_buf(slide_offset+5), field_project_number) equivalence(out_buf(slide_offset+6), begin_altitude_exposure) equivalence(out_buf(slide_offset+7), end_altitude_exposure) equivalence(out_buf(slide_offset+8), control_or_actual) equivalence(out_buf(slide_offset+9), ok_handling_field) equivalence(out_buf(slide_offset+10), operator_field) equivalence(out_buf(slide_offset+11), true_air_speed_bar) equivalence(out_buf(slide_offset+12), true_air_speed_min) equivalence(out_buf(slide_offset+13), true_air_speed_max) equivalence(out_buf(slide_offset+14), rel_hum_exposure_bar) equivalence(out_buf(slide_offset+15), rel_hum_exposure_min) equivalence(out_buf(slide_offset+16), rel_hum_exposure_max) equivalence(out_buf(slide_offset+17), rel_hum_exposure_bar_edit) equivalence(out_buf(slide_offset+18), rho_air_exposure_bar) equivalence(out_buf(slide_offset+19), rho_air_exposure_min) equivalence(out_buf(slide_offset+20), rho_air_exposure_max) equivalence(out_buf(slide_offset+21), temperature_exposure_bar) equivalence(out_buf(slide_offset+22), temperature_exposure_min) equivalence(out_buf(slide_offset+23), temperature_exposure_max) equivalence(out_buf(slide_offset+24), pressure_exposure_bar) equivalence(out_buf(slide_offset+25), pressure_exposure_min) equivalence(out_buf(slide_offset+26), pressure_exposure_max) equivalence(out_buf(slide_offset+27), altitude_exposure_bar) equivalence(out_buf(slide_offset+28), altitude_exposure_min) equivalence(out_buf(slide_offset+29), altitude_exposure_max) equivalence(out_buf(slide_offset+30), sample_area) equivalence(out_buf(slide_offset+31), sample_volume) equivalence(out_buf(slide_offset+32), ranz_wong_50_percent) c c MICROSCOPE ANALYSIS PARAMETERS: equivalence(out_buf(analysis_offset+1), yymmdd_slide_analysis) equivalence(out_buf(analysis_offset+2), hhmmss_slide_analysis) equivalence(out_buf(analysis_offset+3), ok_handling_microscope) equivalence(out_buf(analysis_offset+4), operator_microscope) equivalence(out_buf(analysis_offset+5), rel_hum_desired) c c MICROSCOPE STAGE PARAMETERS: equivalence(out_buf(stage_offset+1), x_positive_limit) equivalence(out_buf(stage_offset+2), x_negative_limit) equivalence(out_buf(stage_offset+3), y_positive_limit) equivalence(out_buf(stage_offset+4), y_negative_limit) equivalence(out_buf(stage_offset+5), z_positive_limit) equivalence(out_buf(stage_offset+6), z_negative_limit) equivalence(out_buf(stage_offset+7), chamber_number) equivalence(out_buf(stage_offset+8), cassette_number) equivalence(out_buf(stage_offset+9), slide_number_in_cassette) equivalence(out_buf(stage_offset+10), x_global_coordinate) equivalence(out_buf(stage_offset+11), y_global_coordinate) equivalence(out_buf(stage_offset+12), z_global_coordinate) equivalence(out_buf(stage_offset+13), x_local_coordinate) equivalence(out_buf(stage_offset+14), y_local_coordinate) equivalence(out_buf(stage_offset+15), z_local_coordinate) equivalence(out_buf(stage_offset+16), image_number_in_x_dir) equivalence(out_buf(stage_offset+17), image_number_in_y_dir) equivalence(out_buf(stage_offset+18), image_number_in_z_dir) equivalence(out_buf(stage_offset+19), x_scan_direction) c c RAW VOLTATE PARAMETERS: equivalence(out_buf(voltage_offset+1), voltage(0)) c c CALIBRATION PARAMETERS: equivalence(out_buf(calibration_offset+1), calibration(0,0)) c c DIGITAL IO PARAMETERS: equivalence(out_buf(digital_io_offset+1), digital_io(0)) c c THERMODYNAMICS PARAMETERS: equivalence(out_buf(thermodynamics_offset+1), salt_type) equivalence(out_buf(thermodynamics_offset+2), t_salt1_1) equivalence(out_buf(thermodynamics_offset+3), t_salt1_2) equivalence(out_buf(thermodynamics_offset+4), t_salt2_1) equivalence(out_buf(thermodynamics_offset+5), t_salt2_2) equivalence(out_buf(thermodynamics_offset+6), t_salt3_1) equivalence(out_buf(thermodynamics_offset+7), t_salt3_2) equivalence(out_buf(thermodynamics_offset+8), t_cabinet_1) equivalence(out_buf(thermodynamics_offset+9), t_cabinet_2) equivalence(out_buf(thermodynamics_offset+10), t_chamber1_inlet) equivalence(out_buf(thermodynamics_offset+11), t_chamber1_outlet) equivalence(out_buf(thermodynamics_offset+12), t_chamber2_inlet) equivalence(out_buf(thermodynamics_offset+13), t_chamber2_outlet) equivalence(out_buf(thermodynamics_offset+14), c t_chamber_outlet_vaisala) equivalence(out_buf(thermodynamics_offset+15), c rh_chamber_outlet_vaisala) equivalence(out_buf(thermodynamics_offset+16), p_cabinet) equivalence(out_buf(thermodynamics_offset+17), p_d_cabinet) equivalence(out_buf(thermodynamics_offset+18), c rh_chamber1_inlet) equivalence(out_buf(thermodynamics_offset+19), c rh_chamber1_outlet) equivalence(out_buf(thermodynamics_offset+20), c rh_chamber2_inlet) equivalence(out_buf(thermodynamics_offset+21), c rh_chamber2_outlet) equivalence(out_buf(thermodynamics_offset+22), c qv_chamber1_inlet) equivalence(out_buf(thermodynamics_offset+23), c qv_chamber1_outlet) equivalence(out_buf(thermodynamics_offset+24), c qv_chamber2_inlet) equivalence(out_buf(thermodynamics_offset+25), c qv_chamber2_outlet) c c CAMERA STATUS: equivalence(out_buf(camera_offset+1), camera_register) c c IMAGE PARAMETERS: equivalence(out_buf(image_offset+1), side_vertical_image) equivalence(out_buf(image_offset+2), ccd_pixel_size) equivalence(out_buf(image_offset+3), exposure_setting) equivalence(out_buf(image_offset+4), exposure_time) equivalence(out_buf(image_offset+5), electronic_gain) equivalence(out_buf(image_offset+6), image_number) equivalence(out_buf(image_offset+7), magnification) equivalence(out_buf(image_offset+8), number_pixels_x) equivalence(out_buf(image_offset+9), number_pixels_y) equivalence(out_buf(image_offset+10), dark_actual) equivalence(out_buf(image_offset+11), image_data) equivalence(out_buf(image_offset+NXMAX*NYMAX/2+12), c focus_or_actual) equivalence(out_buf(image_offset+NXMAX*NYMAX/2+13), c polarizer_in_place) c c IMAGE POST-PROCESSING PARAMETERS: (MAX_PARTICLES particles max per image): equivalence(out_buf(post_process_offset+1), c yymmdd_post_processing) equivalence(out_buf(post_process_offset+2), accept_image) equivalence(out_buf(post_process_offset+3), focus) equivalence(out_buf(post_process_offset+4), in_focus) equivalence(out_buf(post_process_offset+5), xx_min) equivalence(out_buf(post_process_offset+6), xx_max) equivalence(out_buf(post_process_offset+7), yy_min) equivalence(out_buf(post_process_offset+8), yy_max) equivalence(out_buf(post_process_offset+9), shadow_threshold) equivalence(out_buf(post_process_offset+10), n_round_particles) equivalence(out_buf(post_process_offset+11), c n_irregular_particles) equivalence(out_buf(post_process_offset+12), corr_coeff) equivalence(out_buf(post_process_offset+13), c x_center_of_gravity) equivalence(out_buf(post_process_offset+13+1*MAX_PARTICLES), c y_center_of_gravity) equivalence(out_buf(post_process_offset+13+2*MAX_PARTICLES), c ambient_radius) equivalence(out_buf(post_process_offset+13+3*MAX_PARTICLES), c dry_radius) equivalence(out_buf(post_process_offset+13+4*MAX_PARTICLES), c particle_habit) equivalence(out_buf(post_process_offset+13+5*MAX_PARTICLES), c particle_perimeter) equivalence(out_buf(post_process_offset+13+6*MAX_PARTICLES), c particle_area) equivalence(out_buf(post_process_offset+13+7*MAX_PARTICLES), c particle_median_shading) equivalence(out_buf(post_process_offset+13+8*MAX_PARTICLES), c count) equivalence(out_buf(post_process_offset+13+8*MAX_PARTICLES+ c 11*MAX_BINS),count_nacl) equivalence(out_buf(post_process_offset+13+8*MAX_PARTICLES+ c 12*MAX_BINS),spec) equivalence(out_buf(post_process_offset+13+8*MAX_PARTICLES+ c 23*MAX_BINS),spec_nacl) equivalence(out_buf(post_process_offset+13+8*MAX_PARTICLES+ c 24*MAX_BINS),count_habit) c c FINAL data block (ancilliary stuff): equivalence(out_buf(final_offset+72), dewpoint_exposure_bar) equivalence(out_buf(final_offset+73), dewpoint_exposure_min) equivalence(out_buf(final_offset+74), dewpoint_exposure_max) equivalence(out_buf(final_offset+75), wind_direction_exposure_bar) equivalence(out_buf(final_offset+76), latitude_exposure_bar) equivalence(out_buf(final_offset+77), latitude_exposure_min) equivalence(out_buf(final_offset+78), latitude_exposure_max) equivalence(out_buf(final_offset+79), longitude_exposure_bar) equivalence(out_buf(final_offset+80), longitude_exposure_min) equivalence(out_buf(final_offset+81), longitude_exposure_max) equivalence(out_buf(final_offset+82), c z_focus_height) equivalence(out_buf(final_offset+83), c threshold_of_max_pixel_value_change) equivalence(out_buf(final_offset+84), c median_of_max_pixel_value_change) equivalence(out_buf(final_offset+85), surface_wind_speed) equivalence(out_buf(final_offset+86), spec_nacl_is_significant) equivalence(out_buf(final_offset+87), saturation_ratio) equivalence(out_buf(final_offset+88), focus_algorithm) equivalence(out_buf(final_offset+89), images_with_salt) equivalence(out_buf(final_offset+90), fix_cap_rico) equivalence(out_buf(final_offset+91), sea_salt_mixing_ratio) equivalence(out_buf(final_offset+92), wind_speed_exposure_bar) equivalence(out_buf(final_offset+93), wind_speed_exposure_min) equivalence(out_buf(final_offset+94), wind_speed_exposure_max) equivalence(out_buf(final_offset+95), image_median_light_level) equivalence(out_buf(final_offset+96), c slide_mean_median_light_level) equivalence(out_buf(final_offset+97), image_scale_factor) equivalence(out_buf(final_offset+98), overall_pixel_average) equivalence(out_buf(final_offset+99), yymmdd_merge_thermodynamics) equivalence(out_buf(final_offset+100), yymmdd_accept_image) c c Control spectra and clean NaCl spectra: equivalence(out_buf(control_offset+1), c control_mean_count_spectrum_nacl) equivalence(out_buf(control_offset+1*MAX_BINS+1), c control_mean_count_spectrum_all) equivalence(out_buf(control_offset+2*MAX_BINS+1), c control_exceed_count_spectrum_nacl) equivalence(out_buf(control_offset+3*MAX_BINS+1), c control_exceed_count_spectrum_all) equivalence(out_buf(control_offset+4*MAX_BINS+1), c control_good_bins_nacl) equivalence(out_buf(control_offset+5*MAX_BINS+1), c control_good_bins_all) equivalence(out_buf(control_offset+6*MAX_BINS+1), c spec_nacl_significant) equivalence(out_buf(control_offset+7*MAX_BINS+1), c spec_all_significant) c c c Equivalence image data: equivalence(out_buf,out_bufi,out_buf_image)