loop for a+bx using multiple waves and indices??

i am trying to write loop that will perform a simple y = a+bx calculation using several 1D waves.

the loop will calculate y from 12 different x waves. each 1D x wave has multiple values. the x waves are called ion0, ion1, ..., ion11

the coefficients a and b are derived from 12 different coefficient waves in which p=0 defines a and p=1 defines b.
the coefficient waves are called coeff0, coeff1, ... coeff11. so a of coeff0 is coeff0[0] and b of coeff0 is coeff0[1].

the loop will need to cycle through all point values in each ion wave before moving on to the next ion and coefficient.

the name of the destination wave will also need to coordinate with ion values.

i have tried to use a matrixop in a for loop to deal with this problem, but my attempts have been unsuccessful.

the current data i'm using is derived from a larger procedure which can be found at the bottom of this post. pertinent files for loading are attached (open snow.txt first and ionconcentrations.txt second)

my code looks like this:

for(index = 0; index<12; index+=1)
        for(i=0; i<5; i+=1)
        matrixop $("CalcConc"+num2str(index))= $("coeff"+num2str(index))[0] +  $("coeff"+num2str(index))[1] * $("ion"+num2str(index))[i]
        endfor
    endfor


this method doesn't work for reasons that are probably obvious to more experienced igor users than me (1month).
i'd really appreciate some assistance if anyone sees the way through this problem.

thanks in advance!
Ryan

#pragma rtGlobals=3     // Use modern global access method and strict wave access.
Function load(pathName, filePath)
    string pathName, filePath
   
    if (strlen(filePath) == 0)
        Open/D/R/P=$pathName refNum as filePath
        if (strlen(S_fileName) == 0)
            return -1
        endif
        filePath = S_fileName
    endif
   
    LoadWave/J/D/K=2/A/V={""," $",0,0}/L={0,0,0,0,1}/P=$pathName filePath
    wave/T wave0
    Extract4thColumn(wave0)
 
    wave Sig1
   
    make/o/N=(numPnts(Sig1)) PeakArea
    PeakArea = Sig1
    MatrixOp/o PeakArea = replace(PeakArea, NaN, 0)
   
   
    variable index
    string name, name2
    make/o/N=10 tempwave
   
    for(index = 0; index<12; index+=1)
        name = "PA" + num2str(index)
        name2 = "ion" + num2str(index)
        extract/o PeakArea, tempwave, p>=14*index && p<=14*index + 13
        duplicate tempwave, $name
        duplicate tempwave, $name2
       
    endfor
   
    killwaves tempwave
   
    make/o/N=14 ion0, ion1, ion2, ion3, ion4, ion5, ion6, ion7, ion8, ion9, ion10, ion11
    deletepoints 0, 10, ion0, ion1, ion2, ion3, ion4, ion5, ion6, ion7, ion8, ion9, ion10, ion11
    edit ion0, ion1, ion2, ion3, ion4, ion5, ion6, ion7, ion8, ion9, ion10, ion11
   
    make/o/N=10 PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11
    edit PeakArea
    appendtotable PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11
   
    load2("","")
   
    wave conc0, conc1, conc2, conc3, conc4, conc5, conc6, conc7, conc8, conc9, conc10, conc11
    string nom, nom2
   
    for(index = 0; index<12; index+=1)
        nom = "Coeff" + num2str(index)
        nom2 = "SD" + num2str(index)
           
        CurveFit/NTHR=0 line $("Conc"+num2str(index)) /X=$("PA"+num2str(index))
        wave w_coef, w_sigma
        duplicate w_coef, $nom
        duplicate w_sigma $nom2
        appendtotable $nom, $nom2
    endfor
    wave coeff0, coeff1, coeff2, coeff3, coeff4, coeff5, coeff6, coeff7, coeff8, coeff9, coeff10, coeff11
    variable i

    for(index = 0; index<12; index+=1)
        for(i=0; i<5; i+=1)
        matrixop $("CalcConc"+num2str(index))= $("coeff"+num2str(index))[0] +  $("coeff"+num2str(index))[1] * $("ion"+num2str(index))[i]
        endfor
    endfor
   
   
End

Function load2(pathName, filePath)
    string pathName, filePath
   
    if (strlen(filePath) == 0)
        Open/D/R/P=$pathName refNumas filePath
        if (strlen(S_fileName) == 0)
            return -1
        endif
        filePath = S_fileName
    endif
   
    LoadWave/J/D/O/K=1/A/B="N='Concentration';"/P=$pathName filePath
    wave Concentration
   
    variable index
    string name
    make/o/N=10 tempwave
    edit Concentration
    appendtotable
    for(index=0; index<12; index+=1)
        name = "Conc" + num2str(index)
        extract/o Concentration, tempwave, p>=10*index && p<=10*index + 9
        duplicate/o tempwave, $name
        appendtotable $name
    endfor
   
    killwaves tempwave
   
   
End


Function Extract4thColumn(w)
    wave/T w
    w = ReplaceString("\t\t",w[p], "\t")
    make/d/o/n=(DimSize(w,0)) Sig1
    Sig1 = str2num(StringFromList(3, w[p], "\t"))
End
050514snow_0.txt (3.8 KB) ion concentrations.txt (521 bytes)
Looking at your MatrixOP line:
        matrixop $("CalcConc"+num2str(index))= $("coeff"+num2str(index))[0] +  $("coeff"+num2str(index))[1] * $("ion"+num2str(index))[i]


This is not going to work because MatrixOP does not support any strings on the right hand side of the equation.

The packing of your coefficients (a) and (b) leave something to be desired. I'd rearrange them as separate waves wa={a[i]} and wb={b[i]}, then concatenate all the x waves as columns of a matrix, say wavex. The result would be a simple matrix equation:
Variable nrows=dimsize(wavex)
MatrixOP/O yWave=rowRepeat(wa,nrows)+rowRepeat(wb,nrows)*wavex


A.G.
WaveMetrics, Inc.