more id9 stuff including a difference plot with hidable curves
This commit is contained in:
		
							parent
							
								
									57a45da3c1
								
							
						
					
					
						commit
						bde9cf8290
					
				
							
								
								
									
										35
									
								
								xray/azav.py
								
								
								
								
							
							
						
						
									
										35
									
								
								xray/azav.py
								
								
								
								
							| 
						 | 
					@ -128,8 +128,7 @@ def doFolder(folder,files='*.edf*',nQ = 1500,force=False,mask=None,
 | 
				
			||||||
  # which poni file to use:
 | 
					  # which poni file to use:
 | 
				
			||||||
  ai = _getAI(poni,folder)
 | 
					  ai = _getAI(poni,folder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  files = glob.glob("%s/%s"%(folder,files))
 | 
					  files = utils.getFiles(folder,files)
 | 
				
			||||||
  files.sort()
 | 
					 | 
				
			||||||
  if saved is not None:
 | 
					  if saved is not None:
 | 
				
			||||||
    files = [f for f in files if utils.getBasename(f) not in saved["files"]]
 | 
					    files = [f for f in files if utils.getBasename(f) not in saved["files"]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -140,8 +139,8 @@ def doFolder(folder,files='*.edf*',nQ = 1500,force=False,mask=None,
 | 
				
			||||||
    elif mask is not None:
 | 
					    elif mask is not None:
 | 
				
			||||||
      mask = pyFAIread(mask).astype(bool)
 | 
					      mask = pyFAIread(mask).astype(bool)
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
    data   = np.empty( (len(files),nQ),dtype=np.float32 )
 | 
					    data   = np.empty( (len(files),nQ) )
 | 
				
			||||||
    err    = np.empty( (len(files),nQ),dtype=np.float32 )
 | 
					    err    = np.empty( (len(files),nQ) )
 | 
				
			||||||
    for ifname,fname in enumerate(files):
 | 
					    for ifname,fname in enumerate(files):
 | 
				
			||||||
      img = pyFAIread(fname)
 | 
					      img = pyFAIread(fname)
 | 
				
			||||||
      q,i,e = pyFAI1d(ai,img,mask=mask,npt_radial=nQ)
 | 
					      q,i,e = pyFAI1d(ai,img,mask=mask,npt_radial=nQ)
 | 
				
			||||||
| 
						 | 
					@ -149,7 +148,7 @@ def doFolder(folder,files='*.edf*',nQ = 1500,force=False,mask=None,
 | 
				
			||||||
      err[ifname]  = e
 | 
					      err[ifname]  = e
 | 
				
			||||||
      if saveChi:
 | 
					      if saveChi:
 | 
				
			||||||
        chi_fname = utils.removeExt(fname) + ".chi"
 | 
					        chi_fname = utils.removeExt(fname) + ".chi"
 | 
				
			||||||
        utils.saveTxt(chi_fname,q,i,e,info=pyFAI_dict(ai),overwrite=True)
 | 
					        utils.saveTxt(chi_fname,q,i,e,info=pyFAI_info(ai),overwrite=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    files = [ utils.getBasename(f) for f in files ]
 | 
					    files = [ utils.getBasename(f) for f in files ]
 | 
				
			||||||
    files = np.asarray(files)
 | 
					    files = np.asarray(files)
 | 
				
			||||||
| 
						 | 
					@ -223,30 +222,6 @@ def pyFAI_find_center(img,psize=100e-6,dist=0.1,wavelength=0.8e-10,**kwargs):
 | 
				
			||||||
  print("Final values: (in pixels) %.3f %.3f"%(xc,yc))
 | 
					  print("Final values: (in pixels) %.3f %.3f"%(xc,yc))
 | 
				
			||||||
  return ai
 | 
					  return ai
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def plotdata(q,data,plot=True,showTrend=True,title=None,clim='auto'):
 | 
					 | 
				
			||||||
  if not (plot or showTrend): return
 | 
					 | 
				
			||||||
  if clim == 'auto': clim = np.nanpercentile(data,(1.5,98.5))
 | 
					 | 
				
			||||||
  one_plot = showTrend or plot
 | 
					 | 
				
			||||||
  two_plot = showTrend and plot
 | 
					 | 
				
			||||||
  if one_plot and not two_plot:
 | 
					 | 
				
			||||||
    fig,ax = plt.subplots(1,1)
 | 
					 | 
				
			||||||
  if two_plot:
 | 
					 | 
				
			||||||
    fig,ax = plt.subplots(1,2,sharey=True)
 | 
					 | 
				
			||||||
  ax = np.atleast_1d(ax)
 | 
					 | 
				
			||||||
  if showTrend:
 | 
					 | 
				
			||||||
    plt.sca(ax[0])
 | 
					 | 
				
			||||||
    plt.pcolormesh(np.arange(data.shape[0]),q,data.T)
 | 
					 | 
				
			||||||
    plt.xlabel("image number, 0 being older")
 | 
					 | 
				
			||||||
    plt.ylabel(r"q ($\AA^{-1}$)")
 | 
					 | 
				
			||||||
    plt.clim( *clim )
 | 
					 | 
				
			||||||
  if plot:
 | 
					 | 
				
			||||||
    if showTrend:
 | 
					 | 
				
			||||||
      ax[1].plot(data.mean(axis=0),q)
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
      ax[0].plot(q,data.mean(axis=0))
 | 
					 | 
				
			||||||
  if (plot or showTrend) and title is not None:
 | 
					 | 
				
			||||||
    plt.title(title)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def average(fileOrFolder,delays=slice(None),scale=1,norm=None,returnAll=False,plot=False,
 | 
					def average(fileOrFolder,delays=slice(None),scale=1,norm=None,returnAll=False,plot=False,
 | 
				
			||||||
  showTrend=False):
 | 
					  showTrend=False):
 | 
				
			||||||
  data = utils.data_storage(fileOrFolder)
 | 
					  data = utils.data_storage(fileOrFolder)
 | 
				
			||||||
| 
						 | 
					@ -268,7 +243,7 @@ def average(fileOrFolder,delays=slice(None),scale=1,norm=None,returnAll=False,pl
 | 
				
			||||||
  if isinstance(norm,np.ndarray):
 | 
					  if isinstance(norm,np.ndarray):
 | 
				
			||||||
    i = i/norm[:,np.newaxis]
 | 
					    i = i/norm[:,np.newaxis]
 | 
				
			||||||
  title = "%s %s" % (fileOrFolder,str(delays))
 | 
					  title = "%s %s" % (fileOrFolder,str(delays))
 | 
				
			||||||
  plotdata(q,i*scale,showTrend=showTrend,plot=plot,title=title)
 | 
					  utils.plotdata(q,i*scale,showTrend=showTrend,plot=plot,title=title)
 | 
				
			||||||
  if returnAll:
 | 
					  if returnAll:
 | 
				
			||||||
    return q,i.mean(axis=0)*scale,i
 | 
					    return q,i.mean(axis=0)*scale,i
 | 
				
			||||||
  else:
 | 
					  else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ def subtractReferences(i,idx_ref, useRatio = False):
 | 
				
			||||||
      # normal reference for an on chi, the weighted average
 | 
					      # normal reference for an on chi, the weighted average
 | 
				
			||||||
      iref[_i]      = weight_before*ref_before + weight_after*ref_after
 | 
					      iref[_i]      = weight_before*ref_before + weight_after*ref_after
 | 
				
			||||||
    if _i>=idx_ref_after: _ref += 1
 | 
					    if _i>=idx_ref_after: _ref += 1
 | 
				
			||||||
 | 
					    log.debug("For image %d : %d-%d"%(_i,idx_ref_before,idx_ref_after))
 | 
				
			||||||
  if useRatio:
 | 
					  if useRatio:
 | 
				
			||||||
    i /= iref
 | 
					    i /= iref
 | 
				
			||||||
  else:
 | 
					  else:
 | 
				
			||||||
| 
						 | 
					@ -59,9 +60,10 @@ def averageScanPoints(scan,data,isRef=None,lpower=None,useRatio=False,\
 | 
				
			||||||
      funcForEveraging: is usually np.nanmean or np.nanmedian. it can be any 
 | 
					      funcForEveraging: is usually np.nanmean or np.nanmedian. it can be any 
 | 
				
			||||||
         function that support axis=0 as keyword argument
 | 
					         function that support axis=0 as keyword argument
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					  data = data.astype(np.float)
 | 
				
			||||||
  if isRef is None: isRef = np.zeros( data.shape[0], dtype=bool )
 | 
					  if isRef is None: isRef = np.zeros( data.shape[0], dtype=bool )
 | 
				
			||||||
  assert data.shape[0] == isRef.shape[0]
 | 
					  assert data.shape[0] == isRef.shape[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # subtract reference only is there is at least one
 | 
					  # subtract reference only is there is at least one
 | 
				
			||||||
  if isRef.sum()>0:
 | 
					  if isRef.sum()>0:
 | 
				
			||||||
    data = subtractReferences(data,np.argwhere(isRef), useRatio=useRatio)
 | 
					    data = subtractReferences(data,np.argwhere(isRef), useRatio=useRatio)
 | 
				
			||||||
| 
						 | 
					@ -158,7 +160,7 @@ def errorFilter(data,threshold=4):
 | 
				
			||||||
    idx = data.err[iscan] > threshold*median_err
 | 
					    idx = data.err[iscan] > threshold*median_err
 | 
				
			||||||
    data.data[iscan][idx] = \
 | 
					    data.data[iscan][idx] = \
 | 
				
			||||||
      np.nanmedian( data.dataInScanPoint[iscan][:,idx],axis=0 )
 | 
					      np.nanmedian( data.dataInScanPoint[iscan][:,idx],axis=0 )
 | 
				
			||||||
#    data.err[iscan][idx] = median_err
 | 
					    data.err[iscan][idx] = median_err
 | 
				
			||||||
  return data
 | 
					  return data
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
def saveTxt(folder,data,delayToStr=True,info="",**kw):
 | 
					def saveTxt(folder,data,delayToStr=True,info="",**kw):
 | 
				
			||||||
| 
						 | 
					@ -173,7 +175,7 @@ def saveTxt(folder,data,delayToStr=True,info="",**kw):
 | 
				
			||||||
    # try retreiving info on chi2
 | 
					    # try retreiving info on chi2
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
      chi2_0  = data.chi2_0[iscan]
 | 
					      chi2_0  = data.chi2_0[iscan]
 | 
				
			||||||
      info_delay = [ " # rep_num , chi2_0 ", ]
 | 
					      info_delay = [ "# rep_num : chi2_0 ", ]
 | 
				
			||||||
      for irep,value in enumerate(chi2_0):
 | 
					      for irep,value in enumerate(chi2_0):
 | 
				
			||||||
        info_delay.append( "# %d : %.3f" % (irep,value))
 | 
					        info_delay.append( "# %d : %.3f" % (irep,value))
 | 
				
			||||||
      info_delay = "\n".join(info_delay)
 | 
					      info_delay = "\n".join(info_delay)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,9 +4,9 @@ log.basicConfig(level=log.INFO)
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import collections
 | 
					import collections
 | 
				
			||||||
import numpy as np
 | 
					import numpy as np
 | 
				
			||||||
from .xray import azav
 | 
					from . import azav
 | 
				
			||||||
from .xray import dataReduction
 | 
					from . import dataReduction
 | 
				
			||||||
from .xray import utils
 | 
					from . import utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
storage_extension = ".npz"
 | 
					storage_extension = ".npz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,15 +44,25 @@ def doFolder_azav(folder,nQ=1500,force=False,mask=None,saveChi=True,
 | 
				
			||||||
  return azav.doFolder(folder,files="*.edf*",nQ=nQ,force=force,mask=mask,
 | 
					  return azav.doFolder(folder,files="*.edf*",nQ=nQ,force=force,mask=mask,
 | 
				
			||||||
    saveChi=saveChi,poni=poni,storageFile=storageFile,diagnostic=diag)
 | 
					    saveChi=saveChi,poni=poni,storageFile=storageFile,diagnostic=diag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def doFolder_dataRed(folder,monitor=None,funcForEveraging=np.nanmean,errFilter=True):
 | 
					def doFolder_dataRed(folder,storageFile='auto',monitor=None,
 | 
				
			||||||
  data = utils.data_storage(folder)
 | 
					                     funcForEveraging=np.nanmean,errFilter=True):
 | 
				
			||||||
  scan = data.delays
 | 
					
 | 
				
			||||||
  q    = data.q
 | 
					  if storageFile == 'auto' : storageFile = folder +  "/" + "pyfai_1d" + storage_extension
 | 
				
			||||||
  i    = data.data
 | 
					
 | 
				
			||||||
  diffs = dataReduction.calcTimeResolvedSignal(scan,i,q=q,reference="min",
 | 
					  # read azimuthal averaged curves
 | 
				
			||||||
          monitor=monitor,funcForEveraging=funcForEveraging)
 | 
					  data = utils.data_storage(storageFile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  # calculate differences
 | 
				
			||||||
 | 
					  diffs = dataReduction.calcTimeResolvedSignal(data.delays,data.data,q=data.q,\
 | 
				
			||||||
 | 
					          reference="min",monitor=monitor,funcForEveraging=funcForEveraging)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # filter if asked so
 | 
				
			||||||
  if funcForEveraging == np.nanmean and errFilter: 
 | 
					  if funcForEveraging == np.nanmean and errFilter: 
 | 
				
			||||||
    diffs = dataReduction.errorFilter(diffs)
 | 
					    diffs = dataReduction.errorFilter(diffs)
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  # save txt and npz file
 | 
				
			||||||
  dataReduction.saveTxt(folder,diffs,info=data.pyfai_info)
 | 
					  dataReduction.saveTxt(folder,diffs,info=data.pyfai_info)
 | 
				
			||||||
  diffs.save(folder + "/" + "diffs" + storage_extension)
 | 
					  diffs.save(folder + "/" + "diffs" + storage_extension)
 | 
				
			||||||
  return diffs
 | 
					
 | 
				
			||||||
 | 
					  return data,diffs
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,7 @@ def dictToNpz(npzFile,d): np.savez(npzFile,**d)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def read(fname):
 | 
					def read(fname):
 | 
				
			||||||
  extension = os.path.splitext(fname)[1]
 | 
					  extension = os.path.splitext(fname)[1]
 | 
				
			||||||
 | 
					  log.info("Reading storage file %s"%fname)
 | 
				
			||||||
  if extension == ".npz": 
 | 
					  if extension == ".npz": 
 | 
				
			||||||
    return npzToDict(fname)
 | 
					    return npzToDict(fname)
 | 
				
			||||||
  elif extension == ".h5":
 | 
					  elif extension == ".h5":
 | 
				
			||||||
| 
						 | 
					@ -81,6 +82,7 @@ def read(fname):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def save(fname,d):
 | 
					def save(fname,d):
 | 
				
			||||||
  extension = os.path.splitext(fname)[1]
 | 
					  extension = os.path.splitext(fname)[1]
 | 
				
			||||||
 | 
					  log.info("Saving storage file %s"%fname)
 | 
				
			||||||
  if extension == ".npz": 
 | 
					  if extension == ".npz": 
 | 
				
			||||||
    return dictToNpz(fname,d)
 | 
					    return dictToNpz(fname,d)
 | 
				
			||||||
  elif extension == ".h5":
 | 
					  elif extension == ".h5":
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,14 @@ except ImportError:
 | 
				
			||||||
_time_regex =      re.compile( "(-?\d+\.?\d*(?:ps|ns|us|ms)?)")
 | 
					_time_regex =      re.compile( "(-?\d+\.?\d*(?:ps|ns|us|ms)?)")
 | 
				
			||||||
_timeInStr_regex = re.compile("_(-?\d+\.?\d*(?:ps|ns|us|ms)?)")
 | 
					_timeInStr_regex = re.compile("_(-?\d+\.?\d*(?:ps|ns|us|ms)?)")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def getFiles(folder,basename="*.edf*"):
 | 
				
			||||||
 | 
					  files = glob.glob(folder + "/" + basename)
 | 
				
			||||||
 | 
					  files.sort()
 | 
				
			||||||
 | 
					  return files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def getEdfFiles(folder):
 | 
				
			||||||
 | 
					  return getFiles(folder,basename="*.edf*")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getDelayFromString(string) :
 | 
					def getDelayFromString(string) :
 | 
				
			||||||
  match = _timeInStr_regex_regex.search(string)
 | 
					  match = _timeInStr_regex_regex.search(string)
 | 
				
			||||||
  return match and match.group(1) or None
 | 
					  return match and match.group(1) or None
 | 
				
			||||||
| 
						 | 
					@ -51,6 +59,8 @@ def timeToStr(delay,fmt="%+.0f"):
 | 
				
			||||||
    ret = fmt % (delay*1e12) + "fs"
 | 
					    ret = fmt % (delay*1e12) + "fs"
 | 
				
			||||||
  elif 1e-18 <= a_delay < 1e-15: 
 | 
					  elif 1e-18 <= a_delay < 1e-15: 
 | 
				
			||||||
    ret = fmt % (delay*1e12) + "as"
 | 
					    ret = fmt % (delay*1e12) + "as"
 | 
				
			||||||
 | 
					  else:
 | 
				
			||||||
 | 
					    ret = str(delay) +"s"
 | 
				
			||||||
  return ret
 | 
					  return ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def removeExt(fname):
 | 
					def removeExt(fname):
 | 
				
			||||||
| 
						 | 
					@ -61,6 +71,80 @@ def removeExt(fname):
 | 
				
			||||||
def getBasename(fname):
 | 
					def getBasename(fname):
 | 
				
			||||||
  return removeExt(os.path.basename(fname));
 | 
					  return removeExt(os.path.basename(fname));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def plotdata(q,data,t=None,plot=True,showTrend=True,title=None,clim='auto'):
 | 
				
			||||||
 | 
					  if not (plot or showTrend): return
 | 
				
			||||||
 | 
					  if t is None: t = np.arange(data.shape[0])
 | 
				
			||||||
 | 
					  if clim == 'auto': clim = np.nanpercentile(data,(1.5,98.5))
 | 
				
			||||||
 | 
					  one_plot = showTrend or plot
 | 
				
			||||||
 | 
					  two_plot = showTrend and plot
 | 
				
			||||||
 | 
					  if one_plot and not two_plot:
 | 
				
			||||||
 | 
					    fig,ax = plt.subplots(1,1)
 | 
				
			||||||
 | 
					  if two_plot:
 | 
				
			||||||
 | 
					    fig,ax = plt.subplots(1,2,sharey=True)
 | 
				
			||||||
 | 
					  ax = np.atleast_1d(ax)
 | 
				
			||||||
 | 
					  if showTrend:
 | 
				
			||||||
 | 
					    plt.sca(ax[0])
 | 
				
			||||||
 | 
					    plt.pcolormesh(t,q,data.T)
 | 
				
			||||||
 | 
					    plt.xlabel("image number, 0 being older")
 | 
				
			||||||
 | 
					    plt.ylabel(r"q ($\AA^{-1}$)")
 | 
				
			||||||
 | 
					    plt.clim( *clim )
 | 
				
			||||||
 | 
					  if plot:
 | 
				
			||||||
 | 
					    if showTrend:
 | 
				
			||||||
 | 
					      ax[1].plot(data.mean(axis=0),q)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					      ax[0].plot(q,data.mean(axis=0))
 | 
				
			||||||
 | 
					  if (plot or showTrend) and title is not None:
 | 
				
			||||||
 | 
					    plt.title(title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def plotdiffs(q,diffs,t,select=None,err=None,showErr=False,cmap=plt.cm.jet):
 | 
				
			||||||
 | 
					  # this selection trick done in this way allows to keep the same colors when 
 | 
				
			||||||
 | 
					  # subselecting (because I do not change the size of diffs)
 | 
				
			||||||
 | 
					  if select is not None:
 | 
				
			||||||
 | 
					    indices = range(*select.indices(t.shape[0]))
 | 
				
			||||||
 | 
					  else:
 | 
				
			||||||
 | 
					    indices = range(len(t))
 | 
				
			||||||
 | 
					  lines = []
 | 
				
			||||||
 | 
					  for idiff in indices:
 | 
				
			||||||
 | 
					    color = cmap(idiff/(len(diffs)-1))
 | 
				
			||||||
 | 
					    label = timeToStr(t[idiff])
 | 
				
			||||||
 | 
					    kw = dict( color = color, label = label )
 | 
				
			||||||
 | 
					    if err is not None and showErr:
 | 
				
			||||||
 | 
					      line = plt.errorbar(q,diffs[idiff],err[idiff],**kw)[0]
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					      line = plt.plot(q,diffs[idiff],**kw)[0]
 | 
				
			||||||
 | 
					    lines.append(line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fig    = plt.gcf() 
 | 
				
			||||||
 | 
					  legend = plt.legend()
 | 
				
			||||||
 | 
					  plt.grid()
 | 
				
			||||||
 | 
					  plt.xlabel(r"q ($\AA^{-1}$)")
 | 
				
			||||||
 | 
					  # we will set up a dict mapping legend line to orig line, and enable
 | 
				
			||||||
 | 
					  # picking on the legend line
 | 
				
			||||||
 | 
					  lined = dict()
 | 
				
			||||||
 | 
					  for legline, origline in zip(legend.get_lines(), lines):
 | 
				
			||||||
 | 
					    legline.set_picker(5)  # 5 pts tolerance
 | 
				
			||||||
 | 
					    lined[legline] = origline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def onpick(event):
 | 
				
			||||||
 | 
					    # on the pick event, find the orig line corresponding to the
 | 
				
			||||||
 | 
					    # legend proxy line, and toggle the visibility
 | 
				
			||||||
 | 
					    legline = event.artist
 | 
				
			||||||
 | 
					    origline = lined[legline]
 | 
				
			||||||
 | 
					    vis = not origline.get_visible()
 | 
				
			||||||
 | 
					    origline.set_visible(vis)
 | 
				
			||||||
 | 
					    # Change the alpha on the line in the legend so we can see what lines
 | 
				
			||||||
 | 
					    # have been toggled
 | 
				
			||||||
 | 
					    if vis:
 | 
				
			||||||
 | 
					        legline.set_alpha(1.0)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        legline.set_alpha(0.2)
 | 
				
			||||||
 | 
					    fig    = plt.gcf() 
 | 
				
			||||||
 | 
					    fig.canvas.draw()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fig.canvas.mpl_connect('pick_event', onpick)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def saveTxt(fname,q,i,e=None,headerv=None,info=None,overwrite=True):
 | 
					def saveTxt(fname,q,i,e=None,headerv=None,info=None,overwrite=True):
 | 
				
			||||||
  """ Write data to file 'fname' in text format.
 | 
					  """ Write data to file 'fname' in text format.
 | 
				
			||||||
      Inputs:
 | 
					      Inputs:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue