# Determine wave type for reference

I am stuck on what must be a very simple problem. I have some code where the user selects a wave in a dialog using WaveSelectorWidget. They could pick a numeric or a text wave - either are fine - but each case needs to be handled later in the code.

Currently, the choice from the widget is stored in a global text wave as a wave name.

I then call a function to check its type and then attempt to process:

// excerpt from longer code
// replicate wave - this can be numeric or text - convert to numeric 0-based
Variable wtVar = numericOrText(waveNameWave[0])
if(wtVar == 2)
// replicate wave is text
Wave/T/Z repW = \$(waveNameWave[0])
FindDuplicates/RT=uRepW repW
elseif(wtVar == 1)
// replicate wave is numeric
Wave/Z repW = \$(waveNameWave[0])
FindDuplicates/RN=uRepW repW
else
return -1
endif
// do the conversion...
// similar routine done several times

//function is....
STATIC Function numericOrText(wName)
String wName
Wave w = \$wName

return WaveType(w,1)
End

The compiler complains about mixing wave references. Adding the /Z flag changes where it complains in the code but I get the feeling that I'm not going about this the right way. I'd like to keep the wave reference name the same but feel free to tell me that a different reference for each type is the way to go.

Is there a more simple way to do what I am doing?

You can make a numeric wave reference for either wave type, but you can't use that reference for a text wave in places where you use it. Use WaveType(w, 1) to find out if it is numeric or text. If it is text, you will then need to make a new wave reference using Wave/T. Use that new wave reference to get the strings out of the wave.

Thanks John. That makes sense but if I do:

Function test()
Wave/Z w = \$"possibleTextWaveName"
if(WaveType(w,1) == 2)
Wave/T/Z w = \$"possibleTextWaveName"
// do something with textwave
else
// do something with numericwave
endif
End

I get the "inconsistent type for a wave reference" error; even if I do WaveClear before the new wave reference (with text flag). I guess the only solution is to use a distinct name for the new wave reference.

You need to use a different local name for the text wave reference, such as "tw".

Yes, hrodstein is correct. That's what I meant by "new wave reference". I should have been more explicit.