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).