Help!!!

Hi all,

I have a loop procedure (Function loop_test()) to do the function of “perform_auto_analysis()”. When I run loop_test() in the command, there will appear a dialog box asking the pathway (see the attached picture). Then I input the numbers (such as 9 and 9), the procedure will get the results. But when the procedure dose the second loop run, there still appear the dialog box asking the pathway. I need the data from the function of "perform_auto_analysis()" when I use different input values (such as the value in Function loop_test()).Thus, my question is how to use the rename code to fix this or other methods. Thank you very much.

function loop_test()
    variable BC_n=27, Scat_n=700, lim_BC=28.1, lim_Scat=801
    variable/g BC_MASS_CAL
    variable/g Scat_cal
   
    do
        Scat_n = 600
        BC_MASS_CAL = BC_n
        do
            Scat_cal = Scat_n
            perform_auto_analysis()
            Scat_n += 25
        while (Scat_n < lim_scat)
        BC_n += 0.5
    while (BC_n < lim_BC)
end



function perform_auto_analysis()
    variable/g HUMID_INSTRUMENT,LOW_GAIN_SCATTER_CHANNEL

    variable startx,endx
    // do it all:
    // assumes user has set up the path already, and .sp2  converted to  simple-name ibws

    // first get variables:

    variable tm,t2, file_process_number = 0
    variable fnum
    prompt tm, "Starting file x#:"
    prompt t2, "Ending file x#:"
    doprompt   "input file info:",tm,t2
    startx = tm
    endx = t2
    if (tm == 0 && t2 == 0)
        // then expect a list of file numbers hard coded here:
        make/n=(5) File_Number_List = {2,3,5,6,7}
        variable/g NonSequentialFiles = 1
        startx = File_number_list[0]
        endx = File_Number_list[numpnts(file_number_list)-1]
        fnum = File_number_list[0]
    else
        variable/g NonSequentialFiles = 0
        fnum = startx
    endif

    //now for each file:
    variable tmr,tmr2
    tmr = startMStimer
    make/n=0 file_start_stop_times,USED_MIN_PS_SIGNAL

    do


        if(HUMID_INSTRUMENT ==1)
            IF(LOW_GAIN_SCATTER_CHANNEL) // YES:
                load_Hsp2_data_with_LGSCAT(fnum)
            else // NO:
                load_Hsp2_data(fnum)
            endif
        else
            if(LOW_GAIN_SCATTER_CHANNEL) // yes
                load_sp2_data_with_LGSCAT(fnum)
            else
                load_sp2_data(fnum)
            endif
        endif
        //PRINT "1"
        full_initialize_workspace()
        //PRINT "2"

        generate_results()   // THIS IS WHERE MOST OF IT HAPPENS.
        //PRINT "POST GEN"
        Distill_results()
        //PRINT "POST DISTILL"
        // record breaks between file
        wavestats/q time_dat
        make/o/n=2 st = {v_min,v_max}
        concatenate/np {st}, file_start_stop_times

        make/o/n=1 st
        variable/G  THIS_FILE_MIN_PS_SIGNAL
        st = THIS_FILE_MIN_PS_SIGNAL
        concatenate/np {st}, used_min_ps_signal
        killwaves st
        // clear old data:
        if(file_process_number == 0)
            make/o/n=1 hist_c2c_delay,hist_scat_width
            //histogram/b={0,.5,100} cross_to_center_delay_all,hist_c2c_delay
            wavestats/q hist_c2c_delay
           
            wavestats/q hist_scat_width
           
            doupdate
        else
            doupdate
        endif

        wavestats/q hist_c2c_delay
       
        wavestats/q hist_scat_width
       
        if(fnum<= endx && startx != endx)
            clear_old_dataset()
        endif
        tmr2 = stopmstimer(tmr)
        tmr = startmstimer
        print "Time for file #", num2str(fnum)," was", tmr2/1e6, " seconds"
        if (NonSequentialFiles == 0)
            // Not non-sequential:
           
            fnum+=1
            file_process_number+=1
        else
            if (file_process_number < numpnts(file_number_list)-1)
                file_process_number +=1
                fnum = File_number_list[file_process_number]
            else
                fnum = inf
            endif
        endif
           
    while(fnum<=endx)
    fraction_bc_with_front_fit()
      duplicate file_start_stop_times file_num;file_num = floor((p)/2)+startx
    make/o/n=51 psl_diams,psl_sigs // psl signals for 620 counts off 220s.

    PSL_diams[0,9] = {0.0166667,0.0333333,0.05,0.0666667,0.0833333,0.1,0.116667,0.133333,0.15,0.166667}
    PSL_diams[10,19] = {0.183333,0.2,0.216667,0.233333,0.25,0.266667,0.283333,0.3,0.316667,0.333333}
    PSL_diams[20,29] = {0.35,0.366667,0.383333,0.4,0.416667,0.433333,0.45,0.466667,0.483333,0.5}
    psl_diams[30,39] = {0.516667,0.533333,0.55,0.566667,0.583333,0.6,0.616667,0.633333,0.65,0.666667}
    PSL_diams[40,50] ={0.683333,0.7,0.716667,0.733333,0.75,0.766667,0.783333,0.8,0.816667,0.833333,0.85}
 
    psl_sigs[0,9] = {0.000111487,0.00714235,0.0814905,0.458905,1.75552,5.25922,13.3105,29.7747,60.6046,114.486}
    psl_sigs[10,19] = {203.549,344.115,557.428,870.288,1315.5,1932.02,2764.64,3863.18,5281.16,7074.06}
    psl_sigs[20,29] ={9297.55,12006.4,15254.8,19099.2,23604.8,28856.1,34971.9,42122.3,50545.1,60552.9}
    psl_sigs[30,39] = {72518.8,86823.9,103753,123347,145261,168730,192719,216228,238614,259756}
    psl_sigs[40,50] = {280029,300160,321075,343796,369396,398971,433577,474050,520653,572596,627681}
    // now, rename "_all" waves


    rename_results()

    variable/g binning_time_step
    bin_scat_data(binning_time_step)
    wave bscatter_amplitudes,bscatter_count,scatbin_times
    wave bc_mass
    duplicate/o bc_mass bc_ved
    bc_ved = (bc_mass*6/pi/2/1000)^(1/3)
    variable/G KO =0
    variable/g FIX_PS2SCAT_GAIN
    if(!FIX_PS2SCAT_GAIN)
        wave w_coef
        if(HUMID_INSTRUMENT)
            variable/g PS_to_Scat_GAIN_wet = round(w_coef[1]*100)/100
        else
            variable/g PS_to_SCAT_GAIN = round(w_coef[1]*100)/100
        endif
    endif
   
   
   
   
    variable/g SPLICE_CHECKED
    if(SPLICE_CHECKED)
    splice_detectors() // knit together all the scaled detector measures of scattering of total bc to give a wider range of bc_scatter
    else
    dont_splice_detectors() // scale only bc_psfit_amplitudes to bc_scatter
    endif
    generate_mie_outputs()
   
    variable/g binning_time_step
    bin_bc_data2(binning_time_step)
    makedistrib("bc_ved",50)
    variable/g K0
    K0=0
    duplicate/o scatter_amplitudes scatter_diams
    variable/g scat_cal
    wave scatter_amplitudes
    scatter_diams = interp(scatter_amplitudes*620/scat_cal,psl_sigs,psl_diams)
    makedistrib("scatter_diams",100)
    calc_frac_bcpsfit(30,5,8,bc_mass,bc_times,bc_scatter)
    duplicate bc_ved bc_optd
    wave bc_scatter
    bc_optd = interp(bc_scatter, bcs,diams_large_volume)
    makedistrib("bc_optd", 50)
    duplicate bc_ved bc_ved18
    bc_ved18 = (bc_mass*6/pi/1.8/1000)^(1/3)
    makedistrib("bc_ved18", 50)
    Get_sensitivity_to_non_bc()

    if(HUMID_INSTRUMENT ==1)
        rename_Hresults()
    endif

    //   splice_leos()
//  bc_leo_source()


    if(HUMID_INSTRUMENT ==1)
        wave bc_hscatter
        if(SPLICE_CHECKED)
        wave s_source
        else
        endif
    else
        wave bc_scatter
        if(SPLICE_CHECKED)
        wave s_source
        else
                endif
    endif
    // for PSLs etc
    make_scatter_amplitude_image(60,200)
    // for bc:
    make_bc_massdist_image(60)
    make_bc_scatter_image(120,300,3,6)
    // for PSLs etc
    //  make_scatter_amplitude_image(60,200)
end
First, please choose a more descriptive title than just "help" for your post (or rather continue in your old thread).

About the problem: The input variables (startx or tm, endx or t2) don't get saved anywhere and only exist for the time the function perform_auto_analysis() actually runs. So the program has to ask for the numbers every time the function executes in your do-loop.

There are at least two solutions. One would be to save the values, e.g., as global variables, and then recall the values from within the function on consecutive runs. This is rather convoluted and I would not recommend this approach unless you want to preserve the functionality of perform_auto_analysis() as is. Another approach would be to move the prompt for variables part out into your main function (which then gets only called once at start) and then use your numbers as input variables, i.e., perform_auto_analysis(tm, t2).