subroutine read_header (iu, data_or_ref, d2data, u) use cesrv_utils_mod implicit none type (d2_data_struct) d2data type (universe_struct), target :: u type (raw_det_struct) :: h_(0:120), v_(0:120) type (detector_struct) :: orbit_(0:120) type (var_struct), pointer :: vp type (cesr_data_params_struct) cesr_data_param type (shaking_modes_struct) shake(0:120) real(rp) horiz_beta_freq, vert_beta_freq real(rp) rf_freq1, rf_freq2, del_e_e real(rp) mmax, horiz_freq, vert_freq integer, parameter :: n_scir_cam_maxx = 10 integer, parameter :: n_scir_quad_maxx = 4 integer, parameter :: n_scir_tilt_maxx = 8 integer :: data_type, other_data$ = 999, all_data$ = 1000 integer save_set, i, species, data_or_ref, iu, ios integer ios_phase, ios_db, ios_rawdat, ios_raworb integer orbit_num1, orbit_num2, orbit_num integer csr_quad_cur(98), csr_qadd_cur(n_qadd_maxx), csr_sext_cur(98) integer csr_sqewquad(98), csr_sqewsext(n_csr_sqewsext_maxx), csr_horz_cur(98) integer csr_hbnd_cur(n_hbnd_maxx), csr_vert_cur(98), und_vert_cur(n_und_vert_maxx) integer csr_hsp_volt(n_sep_maxx), csr_vsp_volt(n_sep_maxx), csr_hsp_vval(12) integer csr_octu_cur(n_oct_maxx), scir_quadcur(n_scir_quad_maxx) integer scir_skqucur(n_scir_quad_maxx), scir_vertcur(n_scir_quad_maxx) integer ir_sksxcur(1), scir_pos_stp(n_scir_cam_maxx) integer scir_enc_cnt(n_scir_cam_maxx), scir_pos_rd(3*n_scir_cam_maxx) integer nir_shuntcur(n_nir_shuntcur_maxx) integer scwig_contrl(100), scw_cur_read(100) !<---- FIX THIS! integer scsol_contrl(5*n_sc_sol_maxx) integer und_cntg_cur(1), und_cntgtrim(1) character(80) comment character(200) line character(40) route_name character data_date*20, file_type*16, lattice*40 logical horiz_reflection_shake, vert_reflection_shake, err_flag namelist / data_parameters / data_date, lattice, comment, & file_type, save_set, route_name namelist / phase_parameters / species, horiz_beta_freq, vert_beta_freq, & horiz_reflection_shake, vert_reflection_shake, horiz_freq, vert_freq namelist / eta_parameters / rf_freq1, rf_freq2, orbit_num, orbit_num1, & orbit_num2, del_e_e namelist / data_base / & csr_quad_cur, csr_qadd_cur, csr_sext_cur, csr_sqewquad, csr_sqewsext, & csr_horz_cur, csr_hbnd_cur, csr_vert_cur, csr_hsp_volt, csr_vsp_volt, & csr_hsp_vval, csr_octu_cur, scir_quadcur, scir_skqucur, scir_vertcur, & ir_sksxcur, scir_pos_stp, scir_enc_cnt, scir_pos_rd , scwig_contrl, & scw_cur_read, nir_shuntcur, scsol_contrl, und_vert_cur, und_cntg_cur, und_cntgtrim namelist / rawdata / h_, v_ namelist / raworbit / orbit_ namelist / ac_eta_parameters / cesr_data_param namelist / shake_data / shake !--------------------------------------------------------- ! read ios_phase = -1; ios_db = -1; ios_rawdat = -1; ios_raworb = -1 logic%use_old_in_loading = .false. nir_shuntcur = 0 ! In case of old file without this data. save_set = 0 route_name = "" comment = "" data_date = "" file_type = "" lattice = "" read (iu, nml = data_parameters, iostat = ios_db) if (ios_db /= 0) then print *, 'WARNING: ERROR READING "DATA_PARAMETERS" NAMELIST' rewind(iu) endif if (file_type(:5) == 'PHASE') then data_type = phase_data$ elseif (file_type(:6) == 'AC_ETA') then data_type = ac_eta_data$ elseif (file_type(:10) == 'DISPERSION') then data_type = eta_data$ elseif (file_type(:3) == 'ALL') then data_type = all_data$ else data_type = other_data$ endif call kill_fake_data (u) if (data_type == phase_data$ .or. data_type == ac_eta_data$ .or. data_type == all_data$) then horiz_freq = 0 vert_freq = 0 species = u%ring%param%particle read (iu, nml = phase_parameters, iostat = ios_phase) if (ios_phase /= 0) then print *, 'WARNING: ERROR READING "PHASE_PARAMETERS" NAMELIST' rewind(iu) endif if (data_type == all_data$) then horiz_beta_freq = 390.1 * modulo(horiz_freq, 1.0_rp) vert_beta_freq = 390.1 * modulo(vert_freq, 1.0_rp) endif if (data_type == phase_data$) then if (data_or_ref == ref_file$) then u%phase%ref_params%horiz_reflection_shake = horiz_reflection_shake u%phase%ref_params%vert_reflection_shake = vert_reflection_shake else u%phase%data_params%horiz_reflection_shake = horiz_reflection_shake u%phase%data_params%vert_reflection_shake = vert_reflection_shake endif endif endif if (data_type == ac_eta_data$) then read (iu, nml = ac_eta_parameters, iostat = ios) if (ios /= 0) then print *, 'WARNING: ERROR READING "AC_ETA_PARAMETERS" NAMELIST' rewind(iu) endif if (data_or_ref == data_file$) then u%ac_eta%data_params = cesr_data_param else u%ac_eta%ref_params = cesr_data_param endif endif if (data_type == eta_data$) then read (iu, nml = eta_parameters) u%eta_params%rf_freq1 = rf_freq1 u%eta_params%rf_freq2 = rf_freq2 u%eta_params%orbit_num = orbit_num u%eta_params%orbit_num1 = orbit_num1 u%eta_params%orbit_num2 = orbit_num2 u%eta_params%del_e_e = del_e_e endif if (data_type == phase_data$ .or. data_type == eta_data$ .or. & data_type == ac_eta_data$ .or. data_type == all_data$) then read (iu, nml = data_base, iostat = ios_db) if (ios_db /= 0) then print *, 'Warning: Error reading DATA_BASE namelist in data file.' rewind(iu) endif u%db%csr_quad_cur%cu_now = csr_quad_cur u%db%csr_qadd_cur%cu_now = csr_qadd_cur u%db%und_vert_cur%cu_now = und_vert_cur u%db%und_cntg_cur%cu_now = und_cntg_cur u%db%und_cntgtrim%cu_now = und_cntgtrim u%db%csr_sext_cur%cu_now = csr_sext_cur u%db%csr_sqewquad%cu_now = csr_sqewquad u%db%csr_sqewsext%cu_now = csr_sqewsext u%db%csr_horz_cur%cu_now = csr_horz_cur u%db%csr_hbnd_cur%cu_now = csr_hbnd_cur u%db%csr_vert_cur%cu_now = csr_vert_cur call hsp_vval_to_volt (csr_hsp_vval, u%db%csr_hsp_volt%cu_now) u%db%csr_octu_cur%cu_now = csr_octu_cur endif if (data_type == phase_data$ .or. data_type == ac_eta_data$) then read (iu, nml = rawdata, iostat = ios_rawdat) if (ios_rawdat /= 0) then print *, 'Warning: Error reading RAWDATA namelist' rewind (iu) endif read (iu, nml = raworbit, iostat = ios_raworb) if (ios_raworb /= 0) then print *, 'Warning: Error reading RAWORBIT namelist' rewind (iu) endif endif !---------------------------------------------------------- ! if a reference only have to do a little work if (data_or_ref == ref_file$) then if (logic%lattice == 'INIT' .and. lattice /= '') call set_lattice (lattice, u) d2data%ref_date = data_date if (len_trim(comment) == 0) then u%main_title2 = ' ' else u%main_title2 = 'Ref: ' // comment endif if (data_type == other_data$) return call cu_transfer_db_to_cesrv (u%hsteer_kick, u%db%csr_horz_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%hsteer_kick, u%db%csr_hbnd_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%csr_vert_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%hsep_kick, u%db%csr_hsp_volt, 'TO_REF') call cu_transfer_db_to_cesrv (u%quad_k1, u%db%csr_quad_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%quad_k1, u%db%csr_qadd_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_vert_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_cntg_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_cntgtrim, 'TO_REF') call cu_transfer_db_to_cesrv (u%skew_quad_k1, u%db%csr_sqewquad, 'TO_REF') call cu_transfer_db_to_cesrv (u%sex_k2, u%db%csr_sext_cur, 'TO_REF') call cu_transfer_db_to_cesrv (u%skew_sex_k2, u%db%csr_sqewsext, 'TO_REF') call cu_transfer_db_to_cesrv (u%oct_k3, u%db%csr_octu_cur, 'TO_REF') call saved_and_lim_calc (u%var) if (data_type == eta_data$) return if (ios_phase == 0) then logic%ref_particle = species if (data_type == ac_eta_data$) then u%tune%z%d(1)%ref = horiz_beta_freq * twopi / 390.1 u%tune%z%d(1)%good_ref = .true. else u%tune%x%d(1)%ref = horiz_beta_freq * twopi / 390.1 u%tune%y%d(1)%ref = vert_beta_freq * twopi / 390.1 u%tune%x%d(1)%ref = u%tune%x%d(1)%ref + & nint((u%tune%x%d(1)%design - u%tune%x%d(1)%ref)/twopi) * twopi u%tune%y%d(1)%ref = u%tune%y%d(1)%ref + & nint((u%tune%y%d(1)%design - u%tune%y%d(1)%ref)/twopi) * twopi u%tune%x%d(1)%good_ref = .true. u%tune%y%d(1)%good_ref = .true. u%cbar%ref_date = data_date u%cmat_a%ref_date = data_date u%cmat_b%ref_date = data_date endif endif if (ios_rawdat == 0) then u%raw_phase_x%det_ref = h_ u%raw_phase_y%det_ref = v_ endif if (ios_raworb == 0) then u%orbit%x%d(:)%ref = orbit_%x_orb / 1000.0 ! convert to m u%orbit%y%d(:)%ref = orbit_%y_orb / 1000.0 ! convert to m u%orbit%x%d(:)%good_ref = orbit_%amp(1) > 3500 u%orbit%y%d(:)%good_ref = orbit_%amp(1) > 3500 u%orbit%ref_date = data_date endif return endif !---------------------------------------------------------- ! here if a data_file$ (not a reference) logic%last_read = data_type ! "ALL DATA" data files may not specify a lattice. if (lattice /= '') call set_lattice (lattice, u) d2data%date = data_date d2data%csr_set = save_set ! save csr_set number d2data%route_name = route_name logic%csr_set = save_set call get_biggrp_num_from_csr_set () if (len_trim(comment) == 0) then u%main_title1 = ' ' else u%main_title1 = 'Data: ' // comment endif ! read phase parameters logic%csr_set = save_set call get_biggrp_num_from_csr_set () if (data_type == other_data$) return call cu_transfer_db_to_cesrv (u%hsteer_kick, u%db%csr_horz_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%hsteer_kick, u%db%csr_hbnd_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%csr_vert_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%hsep_kick, u%db%csr_hsp_volt, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%quad_k1, u%db%csr_quad_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%quad_k1, u%db%csr_qadd_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_vert_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_cntg_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%vsteer_kick, u%db%und_cntgtrim, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%skew_quad_k1, u%db%csr_sqewquad, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%sex_k2, u%db%csr_sext_cur, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%skew_sex_k2, u%db%csr_sqewsext, 'TO_SAVED') call cu_transfer_db_to_cesrv (u%oct_k3, u%db%csr_octu_cur, 'TO_SAVED') !--------------------------------------------------------------------------- ! if a data file then veto all hardbends that have a command equal zero ! from varying. call check_hardbend_trims (u) if (data_type == eta_data$) return ! For phase and ac_eta data. if (ios_phase == 0) then u%ring%param%particle = species if (data_type == ac_eta_data$) then u%tune%z%d(1)%meas = horiz_beta_freq * twopi / 390.1 u%tune%z%d(1)%good_dat = .true. else u%tune%x%d(1)%meas = horiz_beta_freq * twopi / 390.1 u%tune%y%d(1)%meas = vert_beta_freq * twopi / 390.1 u%tune%x%d(1)%meas = u%tune%x%d(1)%meas + & nint((u%tune%x%d(1)%design - u%tune%x%d(1)%meas)/twopi) * twopi u%tune%y%d(1)%meas = u%tune%y%d(1)%meas + & nint((u%tune%y%d(1)%design - u%tune%y%d(1)%meas)/twopi) * twopi u%tune%x%d(1)%good_dat = .true. u%tune%y%d(1)%good_dat = .true. endif endif ! read raw data if (ios_rawdat == 0) then u%raw_phase_x%det = h_ u%raw_phase_y%det = v_ u%raw_phase_x%y_axis%major_div = 4 u%raw_phase_x%y_axis%places = 0 u%raw_phase_x%y_axis%bounds = 'ZERO_AT_END' u%raw_phase_x%title = 'Raw Horizontal button amplitudes (/10\u3\d)' u%raw_phase_x%y_scale = 1e3 if (data_type == phase_data$) then u%raw_phase_x%y_axis%max = 20000 else u%raw_phase_x%y_axis%max = 100000 endif u%raw_phase_y%y_axis = u%raw_phase_x%y_axis u%raw_phase_y%y_scale = u%raw_phase_x%y_scale u%raw_phase_y%title = 'Raw Vertical button amplitudes (/10\u3\d)' endif ! read raw orbit from a phase file if (ios_raworb == 0) then u%raw_orbit%title = 'Raw Orbit for: ' // d2data%file_name do i = 0, 120 u%raw_orbit%det(i)%amp = orbit_(i)%amp enddo endif u%cbar%date = data_date u%cbar%csr_set = save_set u%cmat_a%date = data_date u%cmat_a%csr_set = save_set u%cmat_b%date = data_date u%cmat_b%csr_set = save_set ! Read raw shake data from a phase file if (data_type == phase_data$) then read (iu, nml = shake_data, iostat = ios) if (ios /= 0) then print *, 'WARNING: ERROR READING "SHAKE_DATA" NAMELIST' return endif u%raw_shake = shake endif end subroutine