Missing parenthesis

SrNandete
Posts: 2
Joined: 2017-12-28
Location: Spain

Hi everyone,
I´m having a little problem with my procedure. I want to use a window for calculating a normalization factor for a chosen wave, and then apply this normalization factor to a set of waves, selected in another listbox. I managed to do the first part (SelectNormalizationWave part), but when I use a button for duplicating the waves that I want to normalize(Function B_Continue), I obtain the following message: "expected right parenthesis". I have modify the commands, but I still get the same error. Can somebody help me?. I attach the experiment file in case it is necessary, as well as the procedure itself.

Many thanks.

 
#pragma rtGlobals=1
 
Function Panel()
	NewDataFolder/O root:Parameters
	NewDataFolder/O root:Waves
	DFREF Ref=root:Parameters, Refw=root:Waves,Refo=root:Original
	Dowindow/K Normalization_Panel
 
	NewPanel /N=Normalization_Panel /M /W=(15,3,30,12)
 
	SetDataFolder root:Original
	String/G Ref:S_ListOfWaves; SVAR S_ListOfWaves=Ref:S_ListOfWaves
	S_ListOfWaves =WaveList("*",";","")
	Make/T/O/N=(ItemsInList(S_ListOfWaves, ";")) Ref:W_ListOfWaves/WAVE=W_ListOfWaves; 
	W_ListOfWaves = StringFromList(p, S_ListOfWaves, ";")
	Make/O/N=(DimSize(Ref:W_ListOfWaves, 0)) Ref:W_WaveSelection/WAVE=W_WaveSelection
	SetDataFolder root:
 
	Variable/G Ref:V_NumberOfWaves;NVAR V_NumberOfWaves=Ref:V_NumberOfWaves	
	V_NumberOfWaves= (DimSize(Ref:W_ListOfWaves, 0))	
	SetVariable NumberOfWaves title="NumberOfWaves",noedit=1,size={130,20},bodyWidth=60,pos={320,200},limits={-inf,inf,0}, value=V_NumberOfWaves, win=Normalization_Panel
 
	TitleBox Range_Tittle pos={100,200},title="Range",frame=1, win=Normalization_Panel
	TitleBox WavesToNormalize pos={380,20}, title="WavesToNormalize", frame=1, win=Normalization_Panel
	TitleBox WaveBase_Tittle pos={100,20},title="WaveBase",frame=1, win=Normalization_Panel
 
	Variable/G Ref:V_RangeInitial; NVAR V_RangeInitial=Ref:V_RangeInitial 
	SetVariable Range_From title="\\JLFrom",bodyWidth=60,highColor= (0,0,0), value=V_RangeInitial
	SetVariable Range_From lowColor= (0,0,0),frame=2,font="default"
	SetVariable Range_From pos={50,250}
	SetVariable Range_From bodyWidth=40,limits={-inf,inf,0}
 
	Variable/G Ref:V_RangeFinal; 	NVAR V_RangeFinal=Ref:V_RangeFinal; V_RangeFinal=50 
	SetVariable SV_RangeTo title="\\JLTo",bodyWidth=60,highColor= (0,0,0), value=V_RangeFinal
	SetVariable SV_RangeTo lowColor= (0,0,0),frame=2,font="default"
	SetVariable SV_RangeTo pos={150,250}
	SetVariable SV_RangeTo bodyWidth=40, limits={-inf,inf,0}
 
	GroupBox GB_NormSep pos={30,180},size={500,4},frame=0, win=Normalization_Panel
 
	Variable/G ref:V_NormalizationIntensity; NVAR V_NormalizationIntensity=ref:V_NormalizationIntensity
	SetVariable ST_Intensity pos={400,260}, title="Intensity", bodyWidth=60, limits={-inf,inf,0},win=Normalization_Panel, value=V_NormalizationIntensity,noedit=1
 
	ListBox LB_NormalizationWave pos={90,60}, size={80,80}, listWave=W_ListOfWaves, selWave=W_WaveSelection, mode=1, win=Normalization_Panel, proc=SelectNormalizationWave
	ListBox LB_WavesToNormalize pos={390,60},size={80,80}, listWave=W_ListOfWaves, selWave=W_WaveSelection, mode=4, win=Normalization_Panel, noproc
 
	Button B_Continue pos={150,290}, title="Continue", proc = B_Continue, win=Normalization_Panel
end
 
Function SelectNormalizationWave(snw) 
	STRUCT WMListboxAction &snw
	DFREF Ref=root:Parameters, Refw=root:Waves,Refo=root:Original
 
	if (snw.eventCode == 4) // CellSelection
		NVAR V_RangeInitial=Ref:V_RangeInitial, V_RangeFinal=Ref:V_RangeFinal,V_NormalizationIntensity=ref:V_NormalizationIntensity
		SVAR S_ListOfWaves=Ref:S_ListOfWaves
 
		Variable/G Ref:V_NormalizationRow; NVAR V_NormalizationRow=Ref:V_NormalizationRow
		ControlInfo /W=Normalization_Panel  LB_NormalizationWave
		V_NormalizationRow = V_Value
		String/G Ref:S_NormalizationWave; SVAR S_NormalizationWave=Ref:S_NormalizationWave
		S_NormalizationWave=StringFromList(V_NormalizationRow, S_ListOfWaves , ";")
		Duplicate/O refo:$S_NormalizationWave, refw:W_Normalization/WAVE=W_Normalization
		Make/O/N=(DimSize(W_Normalization, 0)) refw:Normalization/WAVE=Normalization
		Normalization=W_Normalization; Integrate Normalization
 
		V_NormalizationIntensity=(Normalization[DimSize(W_Normalization,0)-V_RangeInitial]-Normalization[DimSize(W_Normalization,0)-V_RangeFinal])/(V_RangeFinal-V_RangeInitial)
	Endif
End
 
Function B_Continue() 
	DFREF Ref=root:Parameters, Refw=root:Waves,Refo=root:Original
	NVAR V_RangeInitial=Ref:V_RangeInitial, V_RangeFinal=Ref:V_RangeFinal
	SVAR S_ListOfWaves=Ref:S_ListOfWaves
	WAVE W_WaveSelection=Ref:W_WaveSelection
	WAVE W_ListOfWaves=Ref:W_ListOfWaves
	Variable/G Ref:V_Point; NVAR V_Point=Ref:V_Point; V_Point=0
	Variable/G Ref:V_Number; NVAR V_Number=Ref:V_Number; V_Number=0
	String/G Ref:S_wave; SVAR S_wave=Ref:S_wave; S_Wave="Ups"
 
	if (W_WaveSelection[V_Point] == 1)
		S_wave=StringFromList(V_Point, S_ListOfWaves)
		Duplicate/O Refo:$S_wave, Refw:$("W_Wave" + num2str(V_Number))
		V_Number +=1; V_Point +=1	
	else 
		V_Point+=1
	Endif			
End

AttachmentSize
ProcedureTest.pxp97.38 KB

ChrLie
Posts: 262
Joined: 2009-01-06
Location: Switzerland

I believe your button proc should rather look like this:

Function B_Continue(ctrlName)
     String ctrlName
 
    // your code
end


SrNandete
Posts: 2
Joined: 2017-12-28
Location: Spain

ChrLie wrote:
I believe your button proc should rather look like this:

Function B_Continue(ctrlName)
     String ctrlName
 
    // your code
end

Yep, that was the problem. I changed that and now it works.
Thank you very much.


Posts: 1883
Joined: 2007-06-29
Location: United States

A friendly note on this problem...

This illustrates a very common misunderstanding- the form of a control action procedure must be *exactly* as shown in the documentation. That's because when something happens to a control that requires calling your procedure, Igor must put together a call to the action procedure. If you write a procedure with a different format, Igor doesn't know how to fill out the unknown parameters.

You might think that an action proc that simply has no inputs would be OK. I suppose it could be, but it would have to be written in Igor's source as a special case. That adds complexity and complexity adds the chance for bugs, so we avoid it when we don't think the added complexity adds significant additional functionality.

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com


Back to top