NewDirectory issue

Hi forum,

My question contains 2 parts,

In my procedure, I am extracting data from waveP1x0 and waveP2x0 and doing some wave analysis. At one stage I need to move waves from folder "rec1" to "tests" such that for each pair (such as NearbyR0x and Nearby R0y) i want to create a folder that contains each point. When I run my code all the previous folders are also created in destination folder "tests" (the one that are highlighted in yellow), and the name strings "NearbyR"+num2str(b)+"x(or y)" are not moved the each corresponding folder.  I also get this error (while executing MoveWave, the following error occurred: expected wave name).

 

Here is the last piece of my code

string recon = "recon"+num2str(b)+"rxy"
            string recon_col0 = "R"+num2str(b)+"recon"
                string recon_col1 = "NearbyR"+num2str(b)+"x"
                string recon_col2 = "NearbyR"+num2str(b)+"y"    //these create each waves


wave    rec0=$recon_col0, rec1=$recon_col1, rec2=$recon_col2
                      rec0=beson[p][0]
                          rec1=beson[p][1] 
                                                           
                rec2=beson[p][2]   



NewDataFolder /o IndividualPoints
            duplicate $wnamex, root:tryFolders:IndividualPoints:$wnamex
            duplicate $wnamey, root:tryFolders:IndividualPoints:$wnamey
               
            NewDataFolder /o R_waves
            NewDataFolder /o R_xy_to_all_other 
            duplicate $Ar, root:tryFolders:R_waves:$Ar
            duplicate $rPx, root:tryFolders:R_xy_to_all_other:$rPx
            duplicate $rPy, root:tryFolders:R_xy_to_all_other:$rPy 
               
            NewDataFolder /o Concatinated  
            duplicate $bol, root:tryFolders:Concatinated:$bol
           
            NewDataFolder /o Sorted_R_waves_between7and12
                duplicate $dataR, root:tryFolders:Sorted_R_waves_between7and12:$dataR

            NewDataFolder /o rec0
                NewDataFolder /o rec1
                NewDataFolder /o rec2
                duplicate $recon_col0, root:tryFolders:rec0:$recon_col0
                duplicate $recon_col1, root:tryFolders:rec1:$recon_col1
                duplicate $recon_col2, root:tryFolders:rec1:$recon_col2         //moved all in one folder
               
               
               
                killwaves /A/Z                         //to kill all other waves in "tryFolders" folder
               
               
                newdatafolder /o root:tryFolders:rec1:tests
                SetDataFolder root:tryFolders:rec1:tests
               
               
               
                string WaveNear = "NearbyR"+num2str(b)+"xy"                  //set string variable name for folders b is defined from 0 to 54
               
                    NewDataFolder root:tryFolders:rec1:tests:$WaveNear
                    MoveWave $recon_col1, root:tryFolders:rec1:tests:$WaveNear
                    MoveWave $recon_col2, root:tryFolders:rec1:tests:$WaveNear


// Part 2:ATTEMPT TO: Use for loop for $WaveNear folders (this part has not been tested yet)

SetDataFolder root:tryFolders:rec1:tests:$WaveNear       //not sure about $ , I here trying to start my loop within each folder

For (c=0; c < numpnts($WaveNear); c+=1)
           
             string wNx = "p"+num2str(b)+"x"
             duplicate/o $WaveNear, $wNameX
             wave wvNxx =$wNx
             wvNxx= $WaveNear[b]             
           
             string wNy = "p"+num2str(b)+"y"
             duplicate/o wwNyy, $wNy
             wave wvNyy =$wNy
             wvNxx= $WaveNear[b]

          //here to do some operation*****

Endfor

Second Part:

I once have each wave in corresponding folder, I then want to do a For loop for each folder (string WaveNear = "NearbyR"+num2str(b)+"xy" ) and do some analysis on each wave in different folder. Since I already have a for loop, can I use another for loop with "c" being a variable for number of wave points in each folder "WaveNear"? I tried to run a for loop within a for loop , it either gave me error took very long time to load and igor crashed.

thanks for your Help

what is outputed

A few thoughts are immediately apparent to me to troubleshoot and/or improve your processing on Step 1:

  • Assure yourself that you are always in the same starting folder each time you enter a function by using a GetDataFolder + SetDataFolder combination at the outset of any code that hops + skips + jumps + weaves itself around in data folders
  • Consider learning about and using DFREF options to lower the possibility of long data paths and the commensurate typos and/or need to hop/skip/jump/weave physically around in data folders.
  • Remember that NewDataFolder/O only creates the data folder, it does not "go" there.
  • When you need to make/duplicate bunches of waves in different locations through repetitive processing, consider making all the waves systematically in a TMP folder at the root level and then MOVING that data folder entirely to the desired location rather than constantly moving into different folders and then duplicating waves in that folder to locations in some other folder that is dynamically generated (many times over) and also is three times or more removed back up and across the directly path tree.

In reply to by jjweimer

Having gone through your comments, I figured how to move the waves to corresponding folders here:

 

newdatafolder /o root:tryFolders:rec1:tests
                DFREF tests = GetDataFolderDFR()
               
                string WaveNear = "NearbyR"+num2str(b)+"xy"
               
                    SetDataFolder tests
               
                NewDataFolder root:tryFolders:rec1:tests:$WaveNear
               
            MoveWave  root:tryFolders:rec1:$recon_col1, root:tryFolders:rec1:tests:$(WaveNear):    // when moving waves to different folders USE : : and Parentheses () instead of just $WaveNear
            MoveWave  root:tryFolders:rec1:$recon_col2, root:tryFolders:rec1:tests:$(WaveNear)

Now I am working to figure out the second part

Thanks,

Is this what you are trying to accomplish?

    string WaveNear1, WaveNear2

    DFREF cdf = GetDataFolderDFR()

    SetDataFolder root:tryFolders:rec1
    wave rc1 = $recon_col1
    wave rc2 = $recon_col2

    NewDataFolder/O tests // generate new folder

    sprintf WaveNear1, "NearbyR%dxy1", b
    sprintf WaveNear2, "NearbyR%dxy2", b
   
    MoveWave rc1, :tests:$(WaveNear1)
    MoveWave rc2, :tests:$(WaveNear2)

 

In reply to by jjweimer

I was able to solve Part 1 of my question, which is moving waves from folder "tests" to each corresponding folder (WaveNear). So no issue about that.

Now that I have 2 waves in each folder; Part 2 of my question is, that I am trying to do a loop for each data folder:

I am using Do/While to go over the number of corresponding folders in main folder "tests", and I use a For Loop for waves in each corresponding folders,

My code does work but only for last folder, "NearbyR54xy". Other folders (such as NearbyR54xy) are empty and have and have no points. (as seen in image attached)

Here is the snippet

 

string recon_col1 = "NearbyR"+num2str(b)+"x"
string recon_col2 = "NearbyR"+num2str(b)+"y"


Variable numDataFolders = CountObjectsDFR(tests, 4)
variable e
           
               
    do
                   
        DFREF tests = GetDataFolderDFR()
     
                   
        SetDataFolder root:tryFolders:rec1:tests:$WaveNear
                   
        numDataFolders = CountObjectsDFR(tests, 4)
       
           For (e=0; e < numpnts($recon_col1); e+=1)
           
           
            wave RC1=$recon_col1
            wave RC2=$recon_col2   
           
             string wNameX1 = "p"+num2str(e)+"x"
             duplicate/o $recon_col1, $wNameX1
             wave waveNx1 =$wnamex1
              WAVENx1= RC1[e]            
             string wNameY1 = "p"+num2str(e)+"y"
             duplicate/o $recon_col2, $wNameY1
                 wave waveNy1 =$wnamey1
             WAVENy1= RC2[e]  
           
           
                               
            string rPx1 = "rr"+num2str(e)+"xToAll"
        string rPy1 = "rr"+num2str(e)+"yToAll"
            string Ar1 = "RR"+num2str(e)
                duplicate/o recon_col1, $rPx1, $rPy1, $Ar1
        wave rPxWave1=$rPx1, rPyWave1=$rPy1, Rwaves1=$Ar1
 
           
            rPxWave1=(RC1-WAVENx1)^2       
            rPyWave1=(RC2-WAVENy1)^2   
            Rwaves1 = sqrt(rPyWave1+rPxWave1)
            EndFor
                               
                               
      While ( numDataFolders < CountObjectsDFR(tests,4) )

Also as you see in code rPxWave1, rPxWave2 and Rwaves1 supposed to give waves with names rr..xToAll, rr..yToAll and RR respectively. I don't know why those waves are not created

 

forloop_folders.png

Where do you update $WaveNear in the do-while loop? Otherwise, the loop stays in one data folder.

You probably should avoid "e" as a counter in a loop.

I must admit that the approach being taken remains too convoluted with naming and duplicating processes for me to follow it easily.

Also, I have to think that some of the processing may be better handled by implicit loops over wave points.

I don't know at this point what else to suggest.