Changeset 945

May 23, 2020 8:44:55 PM (2 years ago)

add comments and minor fixes

1 edited


  • trunk/User Procedures/Indra 2/IN2_GeneralProcedures.ipf

    r944 r945  
    27682768static Function IN2G_DuplicateGraphAndData()
     2769        //this will duplicate top X-Y graph and copy all data (including optional error bars) to new folder.
     2770        //Only X-Y graphs supported.
    27702771        String curr_folder=GetDataFolder(1)
    27712772        string GraphwinNmOld=WinName(0,1)
    27802781        //create a copy of the current top graph
    27812782        DoWIndow/F $(GraphwinNmOld)
    2782         //BuildMenu "Edit"
    27832783        DoIgorMenu "Edit", "Duplicate"         
    2784         if(V_Flag)                                                              //success, new graph created.
    2785                 GraphwinNmNew=WinName(0,1)
     2784        if(V_Flag)                                                                                                                                              //success, new graph created
     2785                GraphwinNmNew=WinName(0,1)                                                                                              //name which Duplicate Graph command created
    27862786                nameStr=GraphwinNmNew
     2787                setDataFolder root:                                                                                                             //need to be in root to be able to check for name
    27872788                if(CheckName(nameStr, 1)!=0)
    2788                         nameStr = uniquename(nameStr,11,0)
    2789                 endif
    2790                 //name is now unique folder name based on GraphwinNmNew
    2791                 NewDataFolder /O/S root:$nameStr
    2792                 traces=TraceNameList(GraphwinNmNew,";",3)
    2793                 for(i=ItemsInList(traces)-1;i>=0;i-=1)
    2794                         trace=StringFromList(i,traces)
    2795                         Wave TraceWave=TraceNameToWaveRef(GraphwinNmNew,trace)
    2796                         Wave /Z TraceXWave=XWaveRefFromTrace(GraphwinNmNew,trace)
    2797                         tempYName = NameOfWave(TraceWave)
     2789                        nameStr = uniquename(nameStr,11,0)                                                                      //if needed, modified folder name to be unique in root folder
     2790                endif
     2791                //nameStr is now unique folder name based on GraphwinNmNew
     2792                NewDataFolder /S root:$nameStr                                                                                  //new folder for data.
     2793                traces=TraceNameList(GraphwinNmNew,";",3)                                                       //all traces in the new graph
     2794                for(i=ItemsInList(traces)-1;i>=0;i-=1)                                                          //iterate from back or #N will keep being reordered
     2795                        trace=StringFromList(i,traces)                                                                          //a trace
     2796                        Wave TraceWave=TraceNameToWaveRef(GraphwinNmNew,trace)          //waveY
     2797                        Wave /Z TraceXWave=XWaveRefFromTrace(GraphwinNmNew,trace)       //waveX if exists
     2798                        tempYName = NameOfWave(TraceWave)                                                                       //waveY name
    27982799                        if(CheckName(tempYName, 1)!=0)
    2799                                 tempYName = uniquename(tempYName,1,0)
     2800                                tempYName = uniquename(tempYName,1,0)                                                   //if needed modified waveY name to be unique in current folder
    28002801                        endif
    2801                         Duplicate/O TraceWave $tempYName
    2802                         if(waveexists(TraceXWave))
     2802                        Duplicate/O TraceWave $tempYName                                                                        //copy of waveY in current folder. 
     2803                        if(waveexists(TraceXWave))                                                                                      //same treatment for X wave, if exists
    28032804                                tempXName = NameOfWave(TraceXWave)
    28042805                                if(CheckName(tempXName, 1)!=0)
    2805                                         tempXName = uniquename(tempXName,1,0)
     2806                                        tempXName = uniquename(tempXName,1,0)                                           //if needed modified waveX name to be unique in current folder
    28062807                                endif
    2807                                 Duplicate /O TraceXWave $tempXName
    2808                                 ReplaceWave /X/W=$(GraphwinNmNew) trace=$(trace) , $tempXName
     2808                                Duplicate /O TraceXWave $tempXName                                                              //copy of waveX in current folder. 
     2809                                ReplaceWave /X/W=$(GraphwinNmNew) trace=$(trace) , $tempXName           //this swaps the old X wave with the new copy
    28092810                        endif
    2810                         ReplaceWave /W=$(GraphwinNmNew) trace=$(trace) , $tempYName
     2811                        ReplaceWave /W=$(GraphwinNmNew) trace=$(trace) , $tempYName                             //this swaps the old Y wave with the new copy
    28112812                endfor
    2812                 //these are main data, now we need to copy error bars also...
    2813                 String win_rec=WinRecreation(GraphwinNmNew,0)
    2814                 // Copy error bars if they exist.  Won't work with subrange display syntax. 
     2813                //these are X-Y data, now we need to copy error bars also...
     2814                String win_rec=WinRecreation(GraphwinNmNew,0)                                                                   //recreation macro for current updated graph.
    28152815                String errorbar_names, errorbar_name
    28162816                String errorbar_path
    28172817                String line
    2818                 for(i=0;i<ItemsInList(win_rec,"\r");i+=1)               //assume only symmetric (same one wave) error bars. 
    2819                                 line=StringFromList(i,win_rec,"\r")
    2820                         if(StringMatch(line,"*ErrorBars*"))
    2821                                 SplitString/E=",.*" line
    2822                                 sscanf S_value,"%*[^=]=(%[^)])",errorbar_names
     2818                // Copy error bars if they exist. Assume only symmetric (+/- error wave) error bars   
     2819                for(i=0;i<ItemsInList(win_rec,"\r");i+=1)                 
     2820                        line=StringFromList(i,win_rec,"\r")
     2821                        if(StringMatch(line,"*ErrorBars*"))                                                             //line with "ErrorBars command"
     2822                                SplitString/E=",.*" line                                                                                        //ugly way of pulling out errorbar_path
     2823                                sscanf S_value,"%*[^=]=(%[^)])",errorbar_names                          //ugly way of pulling out errorbar_path
    28232824                                for(j=0;j<1;j+=1)
    2824                                         errorbar_path=StringFromList(j,errorbar_names,",")
    2825                                         sscanf errorbar_path,"%[^[])",errorbar_path
    2826                                         errorbar_name=StringFromList(ItemsInList(errorbar_path,":")-1,errorbar_path,":")
     2825                                        errorbar_path=StringFromList(j,errorbar_names,",")      //errorbar_path now is path to wave for error bars, again, assuming same up/down.       
     2826                                        sscanf errorbar_path,"%[^[])",errorbar_path                             //ugly way of pulling out errorbar_path
     2827                                        errorbar_name=StringFromList(ItemsInList(errorbar_path,":")-1,errorbar_path,":")                //get error wave name
    28272828                                        if(CheckName(errorbar_name, 1)!=0)
    2828                                                 errorbar_name = uniquename(errorbar_name,1,0)
     2829                                                errorbar_name = uniquename(errorbar_name,1,0)                   //make the new error wave name unique, if necessary...
    28292830                                        endif
    2830                                         Duplicate /O $("root"+errorbar_path) $errorbar_name
     2831                                        Duplicate /O $("root"+errorbar_path) $errorbar_name             //duplicate to new wave
    28312832                                endfor
    2832                                 line = ReplaceString(errorbar_path, line, errorbar_name)
     2833                                line = ReplaceString(errorbar_path, line, errorbar_name)                //create a new ErrorBar command line for error bars
     2834                                Execute(line)                                                                                                                   //and run it on the graph.
    28332835                        endif
    28342836                endfor
    2835                 DoWindow/T $(GraphwinNmNew), "Duplicate of "+GraphwinNmOld+", data in root:"+nameStr
     2837                //done with error bars now...
     2838                DoWindow/T $(GraphwinNmNew), "Duplicate of "+GraphwinNmOld+", data in root:"+nameStr            //append user friendly name.
    28362839        else
    28372840                print "Could not clone window, something went wrong or no graph window exists"
Note: See TracChangeset for help on using the changeset viewer.