Changeset 943


Ignore:
Timestamp:
May 23, 2020 8:10:28 PM (2 years ago)
Author:
ilavsky
Message:

new version of IN2G_DuplicateGraphAndData and some bug fixes

Location:
trunk/User Procedures
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/User Procedures/Indra 2/IN2_GeneralProcedures.ipf

    r942 r943  
    11IN2G_FindNu#pragma rtGlobals=2          // Use modern global access method.
    2 #pragma version = 2.23
     2#pragma version = 2.24
    33#pragma IgorVersion = 7.05
    44
     
    3535//*************************************************************************/
    3636//
     37//2.24 new version of IN2G_DuplicateGraphAndData which can copy data with same names. Igor 9 fixes and improvements.
    3738//2.23 add IN2G_AddButtonsToBrowser(), which calls IN2G_ExtractInfoFromFldrname(). Use: adds button (via hooks functions) tgo DataBrowser and that will extract info from SampleName strings we are using.
    3839//2.22 minor fix to IN2G_ColorTopGrphRainbow
     
    508509End
    509510
    510 //Does not seem we can modify DataBrowser right clcik menu...
    511 //Menu "DataBrowser"
    512 //              "Samplenames-to-Values", IN2G_ExtractInfoFromFldrname()
    513 //end
    514 
    515 //here is add to Browser button, it will be in after compile hooks.
     511//DataBrowser  right click menu...
     512//here is add to DataBrowser buttons, it will be in after compile hooks.
     513//this is for Igor 8 and 7, in Igro 9 this is in Data browser right click menu...
    516514Function IN2G_AddButtonsToBrowser()
    517 
     515#if(IgorVersion()<9)
    518516        ModifyBrowser appendUserButton={'SampleName-to-Values',"IN2G_ExtractInfoFromFldrname()"}
    519517        ModifyBrowser appendUserButton={'Graph w1 vs w2',"IN2G_PlotBrowserSelectionXY()"}
    520 
    521 end
     518#endif
     519end
     520//this is right click Igor 9+ Data Browser functions, so they do not need to be buttons.
     521#if(IgorVersion()>8.99)
     522
     523
     524Menu "DataBrowserObjectsPopup", dynamic
     525
     526        "--"
     527        IN2G_DisplayYvsXMenuString(),/Q,IN2G_PlotBrowserSelectionXY()
     528        IN2G_ShowTextWaveInfoMenuString(), /Q, IN2G_ExtractInfoFromFldrname()
     529        "--"
     530
     531End
     532//************************************************************************************************
     533Function/S IN2G_ShowTextWaveInfoMenuString()
     534        WAVE/Z w1
     535        String menuText = ""
     536        Variable textWaveSelected = GetSelectedTextWave(w1)
     537        if (textWaveSelected)
     538                sprintf menuText, "%s to Values", NameOfWave(w1)
     539        endif
     540        return menuText
     541End
     542//************************************************************************************************
     543Function/S IN2G_DisplayYvsXMenuString()
     544        WAVE/Z w1, w2
     545        Variable twoNumericWavesSelected = GetWave1AndWave2(w1, w2)
     546        String menuText = ""
     547        if (twoNumericWavesSelected)
     548                sprintf menuText, "Display %s vs %s", NameOfWave(w1), NameOfWave(w2)
     549        endif
     550        return menuText
     551End
     552//************************************************************************************************
     553// Returns the truth that the first two selected objects are two numeric waves.
     554static Function GetWave1AndWave2(WAVE/Z &w1, WAVE/Z &w2)
     555        Variable twoNumericWavesSelected = 0
     556        if (strlen(GetBrowserSelection(-1)) == 0)       // If true, DB is not open
     557                return 0
     558        endif
     559       
     560        // Reverse w1 and w2 if a modifier key is pressed.
     561        Variable keyState = GetKeyState(0)
     562        WAVE/Z w1 = $(GetBrowserSelection((keyState == 0) ? 0 : 1))     // may be null
     563        WAVE/Z w2 = $(GetBrowserSelection((keyState == 0) ? 1 : 0))     // may be null
     564        if (WaveExists(w1) && WaveExists(w2) && (WaveType(w1, 1) == 1) && (WaveType(w2, 1) == 1))
     565                twoNumericWavesSelected = 1
     566        endif
     567       
     568        return twoNumericWavesSelected
     569End
     570
     571#endif
     572
    522573//************************************************************************************************
    523574//************************************************************************************************
     
    535586Function IN2G_PlotBrowserSelectionXY()
    536587
    537         string SelectedWaveNm1=GetBrowserSelection (0, 1)
    538         if(strlen(SelectedWaveNm1)<=3)          //path must contain at least "root:"
    539                         return 0
    540         endif
    541         string SelectedWaveNm2=GetBrowserSelection (1, 1)
    542         if(strlen(SelectedWaveNm2)<=3)          //path must contain at least "root:"
    543                         return 0
    544         endif
    545         //check for wave type, need numerical waves ...
    546         if(WaveType($(SelectedWaveNm1),1)!=1 || WaveType($(SelectedWaveNm2),1)!=1)              //not numerical waves, bail out...
    547                         return 0
    548         endif
    549         Wave/Z Wave1 = $(SelectedWaveNm1)
    550         Wave/Z Wave2 = $(SelectedWaveNm2)
    551         if(WaveExists(Wave1) && WaveExists(Wave2))
    552                 Variable keys = GetKeyState(0)
    553                 if (keys == 0)
    554                         Display/K=1 Wave1 vs Wave2 as NameofWave(Wave1)+" vs "+NameofWave(Wave2)
    555                         Label left (NameofWave(Wave1))
    556                         Label bottom (NameofWave(Wave2))
    557                 else
    558                         Display/K=1 Wave2 vs Wave1 as NameofWave(Wave2)+" vs "+NameofWave(Wave1)
    559                         Label left (NameofWave(Wave2))
    560                         Label bottom (NameofWave(Wave1))
    561                 endif
     588        if (strlen(GetBrowserSelection(-1)) == 0)       // If true, DB is not open
     589                return 0
     590        endif
     591        // Reverse w1 and w2 if a modifier key is pressed.
     592        Variable keyState = GetKeyState(0)
     593        WAVE/Z Wave1 = $(GetBrowserSelection((keyState == 0) ? 0 : 1))  // may be null
     594        WAVE/Z Wave2 = $(GetBrowserSelection((keyState == 0) ? 1 : 0))  // may be null
     595        if (WaveExists(Wave1) && WaveExists(Wave2) && (WaveType(Wave1, 1) == 1) && (WaveType(Wave2, 1) == 1))
     596                Display/K=1 Wave1 vs Wave2 as NameofWave(Wave1)+" vs "+NameofWave(Wave2)
     597                Label left (NameofWave(Wave1))
     598                Label bottom (NameofWave(Wave2))
    562599        else
    563600                return 0
     
    598635        //clean up and leave only thoser who contain some numbers in tehm.
    599636        string ReportExisting=""
    600         if(sum(TimeWave)<=0 || numtype(sum(TimeWave))!=0)
     637        wavestats/Q TimeWave
     638        if(V_npnts<=0 || V_avg<=0)
    601639                KillWaves  TimeWave
    602640        else
    603641                ReportExisting+= " TimeWave;"
    604642        endif
    605         if(sum(TemperatureWave)<=0 || numtype(sum(TemperatureWave))!=0)
     643        wavestats/Q TemperatureWave
     644        if(V_npnts<=0 || V_avg<=0)
    606645                KillWaves  TemperatureWave
    607646        else
    608647                ReportExisting+= " TemperatureWave;"
    609648        endif
    610         if(sum(PercentWave)<=0|| numtype(sum(PercentWave))!=0)
     649        wavestats/Q PercentWave
     650        if(V_npnts<=0 || V_avg<=0)
    611651                KillWaves  PercentWave
    612652        else
    613653                ReportExisting+= " PercentWave;"
    614654        endif
    615         if(sum(OrderWave)<=0|| numtype(sum(OrderWave))!=0)
     655        wavestats/Q OrderWave
     656        if(V_npnts<=0 || V_avg<=0)
    616657                KillWaves  OrderWave
    617658        else
     
    15571598                Execute ("IN2G_MainConfigPanelProc()")
    15581599        else
    1559                 DoWindow/F IN2G_MainConfigPanelProc
     1600                DoWindow/F IN2G_MainConfigPanel
    15601601        endif
    15611602        IN2G_ReadIrenaGUIPackagePrefs(1)
     
    26222663        string topWindow=WinName(0,1)
    26232664        IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
    2624         IN2G_CloneWindow2()
    2625                
     2665        //IN2G_CloneWindow2()
     2666        IN2G_DuplicateGraphAndData()   
    26262667end
    26272668//*****************************************************************************************************************
    26282669//*****************************************************************************************************************
    26292670//this is from IgorExchange: http://www.igorexchange.com/node/1469
    2630 static Function IN2G_CloneWindow2([win,name,times])
    2631         String win
    2632         String name // The new name for the window and data folder.
    2633         Variable times // The number of clones to make.  Clones beyond the first will have _2, _3, etc. appended to their names.   
    2634         IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
     2671//does not work for cases when graph has same name waves and cannot fix it... 
     2672//static Function IN2G_CloneWindow2([win,name,times])
     2673//      String win
     2674//      String name // The new name for the window and data folder.
     2675//      Variable times // The number of clones to make.  Clones beyond the first will have _2, _3, etc. appended to their names.   
     2676//      IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
     2677//      String curr_folder=GetDataFolder(1)
     2678//      setDataFolder root:
     2679//      if(ParamIsDefault(win))
     2680//              win=WinName(0,1)
     2681//      endif
     2682//      if(ParamIsDefault(name))
     2683//              name=UniqueName(win,6,0)
     2684//              name=UniqueName(name,7,0)
     2685//              name=UniqueName(name,11,0)
     2686//      else
     2687//              name=CleanupName(name,0)
     2688//              name=UniqueName(name,6,0)
     2689//              name=UniqueName(name,7,0)
     2690//              name=UniqueName(name,11,0)
     2691//      endif
     2692//      times=ParamIsDefault(times) ? 1 : times
     2693//      NewDataFolder /O/S root:$name
     2694//      String win_rec=WinRecreation(win,0)
     2695//      String traces=TraceNameList(win,";",3)
     2696//      string tempName, trace, AddOn
     2697//      Variable i,j
     2698//      for(i=0;i<ItemsInList(traces);i+=1)
     2699//              trace=StringFromList(i,traces)
     2700//              tempName = trace
     2701//              if(StringMatch(trace, "*#*"))                   //we have wave with multiplier
     2702//                      tempName = ReplaceString("'", trace, "")                //removes ' from liberal names
     2703//                      tempName = ReplaceString("#", trace, "_")               //replaces # for cases when waves of same names are used
     2704//                      tempName = PossiblyQuoteName(tempName )
     2705//              endif
     2706//              Wave TraceWave=TraceNameToWaveRef(win,trace)
     2707//              Duplicate /o TraceWave $(tempName)
     2708//              win_rec = ReplaceString(trace, win_rec, tempName)
     2709//              //main wave dealt with
     2710//              Wave /Z TraceXWave=XWaveRefFromTrace(win,trace)
     2711//              tempName = NameOfWave(TraceXWave)
     2712//              if(waveexists(TraceXWave))
     2713//                      tempName = ReplaceString("'", trace, "")                //remvoes ' from liberal names
     2714//                      tempName = ReplaceString("#", trace, "_")               //replaces # for cases when waves of same names are used
     2715//                      tempName = PossiblyQuoteName(tempName )         
     2716//                      Duplicate /o TraceXWave $NameOfWave(TraceXWave)
     2717//              endif
     2718//      endfor
     2719//
     2720//      // Copy error bars if they exist.  Won't work with subrange display syntax. 
     2721//      for(i=0;i<ItemsInList(win_rec,"\r");i+=1)
     2722//              String line=StringFromList(i,win_rec,"\r")
     2723//              if(StringMatch(line,"*ErrorBars*"))
     2724//                      String errorbar_names
     2725//                      SplitString/E=",.*" line
     2726//                      sscanf S_value,"%*[^=]=(%[^)])",errorbar_names
     2727//                      for(j=0;j<2;j+=1)
     2728//                              String errorbar_path=StringFromList(j,errorbar_names,",")
     2729//                              sscanf errorbar_path,"%[^[])",errorbar_path
     2730//                              String errorbar_name=StringFromList(ItemsInList(errorbar_path,":")-1,errorbar_path,":")
     2731//                              Duplicate /o $("root"+errorbar_path) $errorbar_name
     2732//                      endfor
     2733//              endif
     2734//      endfor
     2735//      print win_rec
     2736//      string NewName=""
     2737//      for(i=1;i<=times;i+=1)
     2738//              Execute /Q win_rec
     2739//              if(i==1)
     2740//                      DoWindow /C $name
     2741//                      NewName = name
     2742//              else
     2743//                      DoWindow /C $(name+"_"+num2str(i))
     2744//                      NewName = name+"_"+num2str(i)
     2745//              endif
     2746//              ReplaceWave allInCDF
     2747//              DoWindow/T $(NewName), "Duplicate of "+win+" data in root:"+NewName
     2748//      endfor
     2749//     
     2750//      SetDataFolder $curr_folder
     2751//End
     2752
     2753//*****************************************************************************************************************
     2754//*****************************************************************************************************************
     2755static Function IN2G_DuplicateGraphAndData()
     2756
    26352757        String curr_folder=GetDataFolder(1)
    2636         setDataFolder root:
    2637         if(ParamIsDefault(win))
    2638                 win=WinName(0,1)
    2639         endif
    2640         if(ParamIsDefault(name))
    2641                 name=UniqueName(win,6,0)
    2642                 name=UniqueName(name,7,0)
    2643                 name=UniqueName(name,11,0)
     2758        string GraphwinNmOld=WinName(0,1)
     2759        string GraphwinNmNew
     2760        if(strlen(GraphwinNmOld)<1)
     2761                print "No top graph"
     2762                abort
     2763        endif
     2764        Variable i,j
     2765        String trace, tempYName, tempXName, nameStr
     2766        String traces
     2767        //create a copy of the current top graph
     2768        DoWIndow/F $(GraphwinNmOld)
     2769        //BuildMenu "Edit"
     2770        DoIgorMenu "Edit", "Duplicate"         
     2771        if(V_Flag)                                                              //success, new graph created.
     2772                GraphwinNmNew=WinName(0,1)
     2773                nameStr=GraphwinNmNew
     2774                if(CheckName(nameStr, 1)!=0)
     2775                        nameStr = uniquename(nameStr,11,0)
     2776                endif
     2777                //name is now unique folder name based on GraphwinNmNew
     2778                NewDataFolder /O/S root:$nameStr
     2779                traces=TraceNameList(GraphwinNmNew,";",3)
     2780                for(i=ItemsInList(traces);i>0;i-=1)
     2781                        trace=StringFromList(i,traces)
     2782                        Wave TraceWave=TraceNameToWaveRef(GraphwinNmNew,trace)
     2783                        Wave /Z TraceXWave=XWaveRefFromTrace(GraphwinNmNew,trace)
     2784                        tempYName = NameOfWave(TraceWave)
     2785                        if(CheckName(tempYName, 1)!=0)
     2786                                tempYName = uniquename(tempYName,1,0)
     2787                        endif
     2788                        Duplicate/O TraceWave $tempYName
     2789                        if(waveexists(TraceXWave))
     2790                                tempXName = NameOfWave(TraceXWave)
     2791                                if(CheckName(tempXName, 1)!=0)
     2792                                        tempXName = uniquename(tempXName,1,0)
     2793                                endif
     2794                                Duplicate /O TraceXWave $tempXName
     2795                                ReplaceWave /X/W=$(GraphwinNmNew) trace=$(trace) , $tempXName
     2796                        endif
     2797                        ReplaceWave /W=$(GraphwinNmNew) trace=$(trace) , $tempYName
     2798                endfor
     2799                //these are main data, now we need to copy error bars also...
     2800                String win_rec=WinRecreation(GraphwinNmNew,0)
     2801                // Copy error bars if they exist.  Won't work with subrange display syntax. 
     2802                String errorbar_names, errorbar_name
     2803                String errorbar_path
     2804                String line
     2805                for(i=0;i<ItemsInList(win_rec,"\r");i+=1)               //assume only symmetric (same one wave) error bars. 
     2806                                line=StringFromList(i,win_rec,"\r")
     2807                        if(StringMatch(line,"*ErrorBars*"))
     2808                                SplitString/E=",.*" line
     2809                                sscanf S_value,"%*[^=]=(%[^)])",errorbar_names
     2810                                for(j=0;j<1;j+=1)
     2811                                        errorbar_path=StringFromList(j,errorbar_names,",")
     2812                                        sscanf errorbar_path,"%[^[])",errorbar_path
     2813                                        errorbar_name=StringFromList(ItemsInList(errorbar_path,":")-1,errorbar_path,":")
     2814                                        if(CheckName(errorbar_name, 1)!=0)
     2815                                                errorbar_name = uniquename(errorbar_name,1,0)
     2816                                        endif
     2817                                        Duplicate /O $("root"+errorbar_path) $errorbar_name
     2818                                endfor
     2819                                line = ReplaceString(errorbar_path, line, errorbar_name)
     2820                        endif
     2821                endfor
     2822                DoWindow/T $(GraphwinNmNew), "Duplicate of "+GraphwinNmOld+", data in root:"+nameStr
    26442823        else
    2645                 name=CleanupName(name,0)
    2646                 name=UniqueName(name,6,0)
    2647                 name=UniqueName(name,7,0)
    2648                 name=UniqueName(name,11,0)
    2649         endif
    2650         times=ParamIsDefault(times) ? 1 : times
    2651         NewDataFolder /O/S root:$name
    2652         String win_rec=WinRecreation(win,0)
    2653         String traces=TraceNameList(win,";",3)
    2654         string tempName, trace, AddOn
    2655         Variable i,j
    2656         for(i=0;i<ItemsInList(traces);i+=1)
    2657                 trace=StringFromList(i,traces)
    2658                 tempName = trace
    2659                 if(StringMatch(trace, "#"))                     //we have wave with multiplier
    2660                         tempName = ReplaceString("'", trace, "")                //removes ' from liberal names
    2661                         tempName = ReplaceString("#", trace, "_")               //replaces # for cases when waves of same names are used
    2662                         tempName = PossiblyQuoteName(tempName )
    2663                 endif
    2664                 Wave TraceWave=TraceNameToWaveRef(win,trace)
    2665                 Duplicate /o TraceWave $(tempName)
    2666                 win_rec = ReplaceString(trace, win_rec, tempName)
    2667                 //main wave dealt with
    2668                 Wave /Z TraceXWave=XWaveRefFromTrace(win,trace)
    2669                 tempName = NameOfWave(TraceXWave)
    2670                 if(waveexists(TraceXWave))
    2671                         tempName = ReplaceString("'", trace, "")                //remvoes ' from liberal names
    2672                         tempName = ReplaceString("#", trace, "_")               //replaces # for cases when waves of same names are used
    2673                         tempName = PossiblyQuoteName(tempName )         
    2674                         Duplicate /o TraceXWave $NameOfWave(TraceXWave)
    2675                 endif
    2676         endfor
     2824                print "Could not clone window, something went wrong or no graph window exists"
     2825        endif
     2826        SetDataFolder $curr_folder
     2827end
    26772828 
    2678         // Copy error bars if they exist.  Won't work with subrange display syntax. 
    2679         for(i=0;i<ItemsInList(win_rec,"\r");i+=1)
    2680                 String line=StringFromList(i,win_rec,"\r")
    2681                 if(StringMatch(line,"*ErrorBars*"))
    2682                         String errorbar_names
    2683                         SplitString/E=",.*" line
    2684                         sscanf S_value,"%*[^=]=(%[^)])",errorbar_names
    2685                         for(j=0;j<2;j+=1)
    2686                                 String errorbar_path=StringFromList(j,errorbar_names,",")
    2687                                 sscanf errorbar_path,"%[^[])",errorbar_path
    2688                                 String errorbar_name=StringFromList(ItemsInList(errorbar_path,":")-1,errorbar_path,":")
    2689                                 Duplicate /o $("root"+errorbar_path) $errorbar_name
    2690                         endfor
    2691                 endif
    2692         endfor
    2693  
    2694         for(i=1;i<=times;i+=1)
    2695                 Execute /Q win_rec
    2696                 if(i==1)
    2697                         DoWindow /C $name
    2698                 else
    2699                         DoWindow /C $(name+"_"+num2str(i))
    2700                 endif
    2701                 ReplaceWave allInCDF
    2702         endfor
    2703         SetDataFolder $curr_folder
    2704 End
    2705 
    27062829
    27072830//*****************************************************************************************************************
  • trunk/User Procedures/Indra 2/IN2_USAXS.ipf

    r942 r943  
    184184        IN2G_AddButtonsToBrowser()              //adds button to DataBrowser.
    185185
    186         //and print in history which version of codeis being used for future reference.
     186        //and print in history which version of code is being used for future reference.
    187187        string file= StringFromList((ItemsInList(FunctionPath("LoadUSAXSMacros"), ":")-1), FunctionPath("LoadUSAXSMacros"), ":")
    188188        String path = RemoveFromList(file, FunctionPath("LoadUSAXSMacros") , ":")
  • trunk/User Procedures/Irena/IR1_Main.ipf

    r942 r943  
    331331        IR2C_CheckIrenaUpdate(0)
    332332        IN2G_CheckPlatformGUIFonts()
    333         IN2G_CheckForGraphicsSetting(0)
    334333        IN2G_ResetSizesForALlPanels(WindowProcNames)
    335334        IN2G_AddButtonsToBrowser()              //adds button to DataBrowser.
    336335
     336        IN2G_CheckForGraphicsSetting(0)
    337337        //and print in history which version of codeis being used for future reference.
    338338        string file= StringFromList((ItemsInList(FunctionPath("LoadIrenaSASMacros"), ":")-1), FunctionPath("LoadIrenaSASMacros"), ":")
     
    342342        KillPath /Z TmpPathToIgorProcs
    343343        print "*** >>>  Irena version: "+num2str(version)+", compiled on "+date()+"  "+time()
    344        
    345344       
    346345end
  • trunk/User Procedures/Nika/NI1_Main.ipf

    r942 r943  
    205205       
    206206        NI1A_CheckWIndowsProcVersions(WindowProcNames)
     207        IN2G_CheckForGraphicsSetting(0)
    207208        IN2G_ResetSizesForALlPanels(WindowProcNames)
     209        IN2G_AddButtonsToBrowser()              //adds button to DataBrowser.
    208210
    209211        NI1_CheckNikaUpdate(0)
    210         IN2G_CheckForGraphicsSetting(0)
    211         IN2G_AddButtonsToBrowser()              //adds button to DataBrowser.
    212        
    213212        //and print in history which version of codeis being used for future reference.
    214213        string file= StringFromList((ItemsInList(FunctionPath("LoadNika2DSASMacros"), ":")-1), FunctionPath("LoadNika2DSASMacros"), ":")
Note: See TracChangeset for help on using the changeset viewer.