示例#1
0
def geoLoc(site, maxgates, rsep, maxbeams):
    #Things to pass in:
    #site= RadarPos(myBeam.stid)
    # myBeam.prm.nrang =  maxgates
    # myBeam.prm.rsep  = seems to be the same per beam
    # myBeam.cp
    import numpy, math, matplotlib, calendar, datetime, pylab
    from davitpy import pydarn
    from davitpy.utils import plotUtils
    import logging
    import matplotlib.pyplot as plot
    import matplotlib.lines as lines
    from matplotlib.ticker import MultipleLocator
    import matplotlib.patches as patches
    from matplotlib.collections import PolyCollection, LineCollection
    from mpl_toolkits.basemap import Basemap, pyproj
    from matplotlib.figure import Figure
    import matplotlib.cm as cm
    from matplotlib.backends.backend_agg import FigureCanvasAgg

    xmin, ymin, xmax, ymax = 1e16, 1e16, -1e16, -1e16

    fovs, lonFull, latFull = [], [], []
    lonC, latC = [], []

    latFull.append(site.geolat)
    lonFull.append(site.geolon)
    latC.append(site.geolat)  #latC and lonC are used for figuring out
    lonC.append(site.geolon)  #where the map should be centered.
    for i in range(maxbeams):
        myFov = pydarn.radar.radFov.fov(site=site,rsep=rsep,\
            nbeams=maxbeams,ngates= maxgates,coords='geo')
        fovs.append(myFov)
        for b in range(0, maxbeams + 1):
            for k in range(0, maxgates + 1):
                lonFull.append(myFov.lonFull[b][k])
                latFull.append(myFov.latFull[b][k])

        k = maxgates
        b = 0
    latC.append(myFov.latFull[b][k])
    lonC.append(myFov.lonFull[b][k])
    b = maxbeams
    latC.append(myFov.latFull[b][k])
    lonC.append(myFov.lonFull[b][k])

    fEdgeLat = myFov.latFull[0][k]
    fEdgeLon = myFov.lonFull[0][k]
    lEdgeLat = myFov.latFull[b][k]
    lEdgeLon = myFov.lonFull[b][k]
    cEdgeLat = myFov.latFull[int(b / 2)][k]
    cEdgeLon = myFov.lonFull[int(b / 2)][k]

    lat_0 = myFov.latFull[int(b / 2)][int(k / 2)]
    lon_0 = myFov.lonFull[int(b / 2)][int(k / 2)]

    tmpmap = plotUtils.mapObj(coords='geo',
                              projection='stere',
                              width=10.0**3,
                              height=10.0**3,
                              lat_0=lat_0,
                              lon_0=lon_0)

    xsite, ysite = tmpmap(site.geolon, site.geolat)
    fex, fey = tmpmap(fEdgeLon, fEdgeLat)
    lex, ley = tmpmap(lEdgeLon, lEdgeLat)
    cex, cey = tmpmap(cEdgeLon, cEdgeLat)
    bwidth = numpy.sqrt((fex - lex)**2 + (fey - ley)**2)
    leWidth = numpy.sqrt((fex - xsite)**2 + (fey - ysite)**2)
    riWidth = numpy.sqrt((xsite - lex)**2 + (ysite - ley)**2)
    if bwidth < leWidth:
        if leWidth < riWidth:
            width = riWidth
        else:
            width = leWidth
    elif bwidth < riWidth:
        if riWidth < leWidth:
            width = leWidth
        else:
            width = riWidth
    else:
        width = bwidth
    height = numpy.sqrt((cex - xsite)**2 + (cey - ysite)**2)

    dist = width / 50.
    cTime = datetime.datetime.utcnow()

    #draw the actual map we want
    return lon_0, lat_0, fovs, dist, width, height
示例#2
0
def geoLoc(site,maxgates, rsep, maxbeams):
	#Things to pass in:
	#site= RadarPos(myBeam.stid)
	# myBeam.prm.nrang =  maxgates
	# myBeam.prm.rsep  = seems to be the same per beam
	# myBeam.cp
	import numpy,math,matplotlib,calendar,datetime,pylab
	from davitpy import pydarn
	from davitpy.utils import plotUtils
	import logging
	import matplotlib.pyplot as plot
	import matplotlib.lines as lines
	from matplotlib.ticker import MultipleLocator
	import matplotlib.patches as patches
	from matplotlib.collections import PolyCollection,LineCollection
	from mpl_toolkits.basemap import Basemap, pyproj
	from matplotlib.figure import Figure
	import matplotlib.cm as cm
	from matplotlib.backends.backend_agg import FigureCanvasAgg
    

	xmin,ymin,xmax,ymax = 1e16,1e16,-1e16,-1e16
	
	fovs,lonFull,latFull=[],[],[]
	lonC,latC = [],[]
	
	latFull.append(site.geolat)
	lonFull.append(site.geolon)
	latC.append(site.geolat)     #latC and lonC are used for figuring out
	lonC.append(site.geolon)     #where the map should be centered.
	for i in range(maxbeams):
		myFov = pydarn.radar.radFov.fov(site=site,rsep=rsep,\
						nbeams=maxbeams,ngates= maxgates,coords='geo')
		fovs.append(myFov)
		for b in range(0,maxbeams+1):
			for k in range(0,maxgates+1):
				lonFull.append(myFov.lonFull[b][k])
				latFull.append(myFov.latFull[b][k])
		
		k=maxgates
		b=0
	latC.append(myFov.latFull[b][k])
	lonC.append(myFov.lonFull[b][k])
	b=maxbeams
	latC.append(myFov.latFull[b][k])
	lonC.append(myFov.lonFull[b][k])

	fEdgeLat = myFov.latFull[0][k]
	fEdgeLon = myFov.lonFull[0][k]
	lEdgeLat = myFov.latFull[b][k]
	lEdgeLon = myFov.lonFull[b][k]
	cEdgeLat = myFov.latFull[int(b/2)][k]
	cEdgeLon = myFov.lonFull[int(b/2)][k]

	lat_0 = myFov.latFull[int(b/2)][int(k/2)]
	lon_0 = myFov.lonFull[int(b/2)][int(k/2)]

	tmpmap = plotUtils.mapObj(coords='geo',projection='stere', width=10.0**3, 
												height=10.0**3, lat_0=lat_0, lon_0=lon_0)

	xsite,ysite = tmpmap(site.geolon,site.geolat)
	fex,fey = tmpmap(fEdgeLon,fEdgeLat)
	lex,ley = tmpmap(lEdgeLon,lEdgeLat)
	cex,cey = tmpmap(cEdgeLon,cEdgeLat)
	bwidth = numpy.sqrt((fex-lex)**2+(fey-ley)**2)
	leWidth = numpy.sqrt((fex-xsite)**2+(fey-ysite)**2)
	riWidth = numpy.sqrt((xsite-lex)**2+(ysite-ley)**2)
	if bwidth <leWidth:
		if leWidth < riWidth:
			width = riWidth
		else:
			width = leWidth
	elif bwidth <riWidth:
		if riWidth < leWidth:
			width = leWidth
		else:
			width = riWidth
	else:
		width = bwidth
	height = numpy.sqrt((cex-xsite)**2+(cey-ysite)**2)

	dist = width/50.
	cTime = datetime.datetime.utcnow()

	#draw the actual map we want
	return lon_0,lat_0,fovs,dist,width,height
示例#3
0
    overlay_param="AvgEe"
    dmsp_aacgm=False
    if overlay_param == "JEe":
        color_norm = colors.LogNorm(vmin=0.1, vmax=0.5*1.e2)
        guvi_cbar_label = "Energy Flux " + r"(ergs/s/cm$^{2}$)"
    if overlay_param == "AvgEe":
        color_norm = colors.LogNorm(vmin=0.5, vmax=15)
        guvi_cbar_label = "Ave Energy (keV)"
    if overlay_param == "JNEe":
        color_norm = colors.LogNorm(vmin=1.e7, vmax=1.e10)
        guvi_cbar_label = "Number Flux " + "r(#/s/cm$^{2}$)"

    # Plot a map
    fig, ax = plt.subplots(figsize=(15,15))
    mobj = plotUtils.mapObj(ax=ax, datetime=stime, lon_0=0., boundinglat=50.,
                            gridLabels=False, gridLatRes=10., coords=coords,
                            fillContinents='None')
    # Overlay DMSP SSJ Data
    for sat in dmsp_sat_num:
        ssj_mappable = overlay_ssj_JE_E0_JNE(mobj, stime, etime, sat,
                                             color_norm=color_norm, cmap=cmap, 
                                             overlay_param=overlay_param, aacgm=dmsp_aacgm)

    # Overlay TIMED-GUVI data
    guvi_mappable = overlay_guvi_JE_E0_JNE(mobj, stime, etime, guvi_orbit,
                                          color_norm=color_norm, cmap=cmap, 
                                          data_level="L3", overlay_param=overlay_param, 
                                          hemi="north", coords=coords)
    # Add a colorbar
    cbar = fig.colorbar(mappable=guvi_mappable, ax=ax, shrink=0.6)
    cbar.set_label(guvi_cbar_label, size=15.)
示例#4
0
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
import datetime as dt
from davitpy.utils import plotUtils
from davitpy.utils.plotUtils import textHighlighted
from davitpy.pydarn.plotting.mapOverlay import overlayRadar, overlayFov


dateTime = dt.datetime(2015, 1, 1)
fig = plt.figure(figsize=(10,5), dpi=300)
ax = fig.add_subplot(121)
m = plotUtils.mapObj(projection='npstere', lon_0=270, boundinglat=30,
        coords="geo", dateTime=dateTime, ax=ax, fill_alpha=.7, )
codes = ['bks', 'fhe','fhw','cve','cvw',"wal", "ade", "adw", "hok", "hkw"]
overlayFov(m, codes=codes, dateTime=dateTime, fovColor="darkorange", fovAlpha=0.4, maxGate=75, lineWidth=0.5)
codes = ['kap','sas','pgr',"gbr", "ksr","kod","sto","pyk","han"]
overlayFov(m, codes=codes, dateTime=dateTime, fovColor="aqua", fovAlpha=0.4, maxGate=75, lineWidth=0.5)
codes = ["inv","cly","rkn","lyr"]
overlayFov(m, codes=codes, dateTime=dateTime, fovColor="lime", fovAlpha=0.4, maxGate=75, lineWidth=0.5)

codes = ['bks', 'fhe','fhw','cve','cvw',"wal", "ade", "adw", "hok", "hkw"]
overlayRadar(m, fontSize=30, codes=codes, dateTime=dateTime)
codes = ['kap','sas','pgr',"gbr", "ksr","kod","sto","pyk","han"]
overlayRadar(m, fontSize=30, codes=codes, dateTime=dateTime)
codes = ["inv","cly","rkn","lyr"]
overlayRadar(m, fontSize=30, codes=codes, dateTime=dateTime)
ax.set_title("Northern Hemisphere", fontdict={"size":20,})
示例#5
0
    def run(self):
        while not self.data.empty():
            myScan = self.data.get(True, 0.1)
            for mb in myScan:
                myBeam = beamData()
                myBeam = mb
                break
        while not self.stoprequest.isSet():
            time.sleep(1)
            timeNow = datetime.datetime.utcnow()
            myBeam.time = myBeam.time.replace(tzinfo=None)
            tdif = timeNow - myBeam.time
            if tdif.seconds > 360:
                try:
                    reactor.stop()
                except:
                    logging.error('Reactor already stopped')
                self.tq.put(0)
                logging.error('Geo thread stopped')
                for pr in self.parent.fan['param']:
                    silentRemove(self, "fan_%s.png" % (pr))
                    silentRemove(self, "geo_%s.png" % (pr))
                self.stoprequest.set()
                break
            while not self.data.empty():
                myBeam = beamData()
                myBeam = self.data.get()
                if myBeam.cp != self.oldCpid:
                    self.oldCpid = myBeam.cp
                    self.parent.maxbm = self.parent.maxbeam[0]
                #updates if maxgates is changing
                if myBeam.prm.nrang != self.maxgates:
                    logging.info('Changing Gates')
                    self.maxgates = myBeam.prm.nrang
                    self.parent.lon_0,self.parent.lat_0, self.parent.fovs,\
                    self.parent.dist, self.parent.height,self.parent.width = geoLoc(self.parent.site,\
                     self.maxgates,myBeam.prm.rsep,int(self.parent.maxbm))
                    self.parent.myMap = mapObj(coords='geo', projection='stere',\
                     lat_0=self.parent.lat_0, lon_0=self.parent.lon_0,\
                     width= self.parent.width*1.3,height = self.parent.height*1.3,\
                     grid =True)
                #updates myScan size if the beam number is greater then the current myScan size
                elif myBeam.bmnum >= len(myScan):
                    bmnum = len(myScan)
                    while myBeam.bmnum > len(myScan):
                        time.sleep(0.1)
                        tmp_myBeam = beamData()
                        tmp_myBeam.bmnum = bmnum
                        tmp_myBeam.time = timeNow.replace(tzinfo=None)
                        myScan.append(tmp_myBeam)
                        bmnum += 1
                    myScan.append(myBeam)
                    logging.info('Changing Beam number %s' % (myBeam))
                    self.parent.maxbm = myBeam.bmnum + 1
                    self.parent.lon_0,self.parent.lat_0, self.parent.fovs,\
                    self.parent.dist, self.parent.height,self.parent.width = geoLoc(self.parent.site,\
                     self.maxgates,myBeam.prm.rsep,\
                     int(self.parent.maxbm))
                    self.parent.myMap = mapObj(coords='geo', projection='stere',\
                     lat_0=self.parent.lat_0, lon_0=self.parent.lon_0,\
                     width= self.parent.width*1.3,height = self.parent.height*1.3,\
                     anchor = 'N',grid =True,draw=True)
                else:
                    myScan.pop(myBeam.bmnum)
                    myScan.insert(myBeam.bmnum, myBeam)
            #Plot and save geographic figure for each parameter
            try:
                self.parent.geo['figure'] = plotFan(
                    myScan, [self.parent.rad],
                    fovs=self.parent.fovs,
                    params=self.parent.geo['param'],
                    gsct=self.parent.geo['gsct'],
                    maxbeams=int(self.parent.maxbm),
                    maxgates=self.maxgates,
                    scales=self.parent.geo['sc'],
                    drawEdge=self.parent.geo['drawEdge'],
                    myFigs=self.parent.geo['figure'],
                    bmnum=myBeam.bmnum,
                    site=self.parent.site,
                    tfreq=myBeam.prm.tfreq,
                    noise=myBeam.prm.noisesearch,
                    nave=myBeam.prm.nave,
                    inttime=myBeam.prm.inttsc,
                    rTime=myBeam.time,
                    radN=self.parent.names[0],
                    dist=self.parent.dist,
                    merGrid=self.parent.geo['merGrid'],
                    merColor=self.parent.geo['merColor'],
                    continentBorder=self.parent.geo['continentBorder'],
                    waterColor=self.parent.geo['waterColor'],
                    continentColor=self.parent.geo['continentColor'],
                    backgColor=self.parent.geo['backgColor'],
                    gridColor=self.parent.geo['gridColor'],
                    filepath=self.parent.filepath[0],
                    myMap=self.parent.myMap)
            except:
                logging.error('geographic plot missing info')
                logging.error('Geo Figure: %s' % (sys.exc_info()[0]))

            #Plot and save beam number vs gates figure for each parameter
            for i in range(len(self.parent.fan['figure'])):
                time.sleep(1)
                if self.parent.fan['param'][i] == 'velocity':
                    self.parent.fan['gsct'] = True
                else:
                    self.parent.fan['gsct'] = False
                try:
                    self.parent.fan['figure'][i].clf()
                    self.parent.fan['figure'][i] = plotFgpJson(
                        myScan,
                        self.parent.rad,
                        params=[self.parent.fan['param'][i]],
                        gsct=self.parent.fan['gsct'],
                        scales=[self.parent.fan['sc'][i]],
                        bmnum=myBeam.bmnum,
                        figure=self.parent.fan['figure'][i],
                        tfreq=myBeam.prm.tfreq,
                        noise=myBeam.prm.noisesearch,
                        rTime=myBeam.time,
                        radN=self.parent.names[0])
                    self.parent.fan['figure'][i].savefig(
                        "%sfan_%s" %
                        (self.parent.filepath[0], self.parent.fan['param'][i]))
                except:
                    logging.error('fan plot missing info')
                    logging.error('Fan Figure: %s' % (sys.exc_info()[0]))
示例#6
0
	def run(self):
		while not self.data.empty():
			myScan = self.data.get(True, 0.1)
			for mb in myScan:
				myBeam = beamData()
				myBeam = mb
				break
		while not self.stoprequest.isSet():
			time.sleep(1)
			timeNow = datetime.datetime.utcnow()
			myBeam.time = myBeam.time.replace(tzinfo=None)	
			tdif = timeNow - myBeam.time
			if tdif.seconds > 360:
				try:
					reactor.stop()
				except:
					logging.error('Reactor already stopped')
				self.tq.put(0)
				logging.error('Geo thread stopped')
				for pr in self.parent.fan['param']:
					silentRemove(self,"fan_%s.png" % (pr))
					silentRemove(self,"geo_%s.png" % (pr))
				self.stoprequest.set()
				break
			while not self.data.empty():
				myBeam = beamData()
				myBeam = self.data.get()
				if myBeam.cp != self.oldCpid:
					self.oldCpid = myBeam.cp
					self.parent.maxbm = self.parent.maxbeam[0]
				#updates if maxgates is changing
				if myBeam.prm.nrang != self.maxgates:
					logging.info('Changing Gates')
					self.maxgates = myBeam.prm.nrang
					self.parent.lon_0,self.parent.lat_0, self.parent.fovs,\
					self.parent.dist, self.parent.height,self.parent.width = geoLoc(self.parent.site,\
						self.maxgates,myBeam.prm.rsep,int(self.parent.maxbm))
					self.parent.myMap = mapObj(coords='geo', projection='stere',\
						lat_0=self.parent.lat_0, lon_0=self.parent.lon_0,\
						width= self.parent.width*1.3,height = self.parent.height*1.3,\
						grid =True)
				#updates myScan size if the beam number is greater then the current myScan size
				elif myBeam.bmnum >= len(myScan):
					bmnum = len(myScan)
					while myBeam.bmnum > len(myScan):
						time.sleep(0.1)
						tmp_myBeam = beamData()
						tmp_myBeam.bmnum = bmnum
						tmp_myBeam.time = timeNow.replace(tzinfo=None)
						myScan.append(tmp_myBeam)
						bmnum += 1
					myScan.append(myBeam)
					logging.info('Changing Beam number %s'%(myBeam))
					self.parent.maxbm = myBeam.bmnum+1
					self.parent.lon_0,self.parent.lat_0, self.parent.fovs,\
					self.parent.dist, self.parent.height,self.parent.width = geoLoc(self.parent.site,\
						self.maxgates,myBeam.prm.rsep,\
						int(self.parent.maxbm))
					self.parent.myMap = mapObj(coords='geo', projection='stere',\
						lat_0=self.parent.lat_0, lon_0=self.parent.lon_0,\
						width= self.parent.width*1.3,height = self.parent.height*1.3,\
						anchor = 'N',grid =True,draw=True)
				else:
					myScan.pop(myBeam.bmnum)
					myScan.insert(myBeam.bmnum,myBeam)
			#Plot and save geographic figure for each parameter
			try:
				self.parent.geo['figure'] = plotFan(myScan,[self.parent.rad],
					fovs = self.parent.fovs,
					params=self.parent.geo['param'],
					gsct=self.parent.geo['gsct'], 
					maxbeams = int(self.parent.maxbm),
					maxgates=self.maxgates,	
					scales=self.parent.geo['sc'],
					drawEdge = self.parent.geo['drawEdge'], 
					myFigs = self.parent.geo['figure'],
					bmnum = myBeam.bmnum,
					site = self.parent.site,
					tfreq = myBeam.prm.tfreq,
					noise = myBeam.prm.noisesearch,
					nave = myBeam.prm.nave,
					inttime = myBeam.prm.inttsc,
					rTime=myBeam.time,
					radN = self.parent.names[0],
					dist = self.parent.dist,
					merGrid = self.parent.geo['merGrid'],
					merColor = self.parent.geo['merColor'],
					continentBorder = self.parent.geo['continentBorder'],
					waterColor = self.parent.geo['waterColor'],
					continentColor = self.parent.geo['continentColor'],
					backgColor = self.parent.geo['backgColor'],
					gridColor = self.parent.geo['gridColor'],
					filepath = self.parent.filepath[0],
					myMap = self.parent.myMap)
			except:
				logging.error('geographic plot missing info')
				logging.error('Geo Figure: %s'%(sys.exc_info()[0]))
				
			
			#Plot and save beam number vs gates figure for each parameter
			for i in range(len(self.parent.fan['figure'])):
				time.sleep(1)
				if self.parent.fan['param'][i] == 'velocity':
					self.parent.fan['gsct'] = True
				else:
					self.parent.fan['gsct'] = False
				try:
					self.parent.fan['figure'][i].clf()
					self.parent.fan['figure'][i]=plotFgpJson(myScan,self.parent.rad,
						params=[self.parent.fan['param'][i]],
						gsct=self.parent.fan['gsct'],
						scales=[self.parent.fan['sc'][i]],
						bmnum = myBeam.bmnum,
						figure = self.parent.fan['figure'][i],
						tfreq = myBeam.prm.tfreq,
						noise = myBeam.prm.noisesearch,
						rTime=myBeam.time,
						radN = self.parent.names[0])
					self.parent.fan['figure'][i].savefig("%sfan_%s" % (self.parent.filepath[0],self.parent.fan['param'][i]))
				except:
					logging.error('fan plot missing info')
					logging.error('Fan Figure: %s'%(sys.exc_info()[0]))
示例#7
0
def main():

    import datetime as dt
    import matplotlib.pyplot as plt
    from davitpy.utils import plotUtils
    import plotMapGrd
    from imagers.timed import timed_utils
    from overlay_IMAGE import IMAGE_sat
    from overlay_DMSP import DMSP_sat
    from overlay_TIMEDGUVI import TIMEDGUVI_sat
    import matplotlib.cm as cm
    import sys
    sys.path.append("../track_wic_si_spot/")
    from track_max_point import find_filenames

    overlay_TIMEDGUVI_data = False

    overlay_IMAGE_data = True
    IMAGE_datatype = "WIC"
    wic_si_ratio = True
    interpolate_IMAGE_data = True

    overlay_SuperDARN_data = True
    overlay_MapFitVel = True
    overlay_CnvCntrs = False
    overlay_HMB = False

    overlay_magmeter = True

    overlay_DMSP_data = True
    #DMSP_sat_nums=[13]
    #DMSP_sat_nums=[15]
    DMSP_sat_nums = [14, 15]
    coords = "mlt"

    vec_cmap = cm.jet

    # Plot iteratively
    read_wic = False
    read_si = False
    if IMAGE_datatype == "WIC":
        read_wic = True
    if IMAGE_datatype == "SI":
        read_si = True


#################################################################
# Times when DMSP data is available for 03182002 event
#    # Time interval where DMSP F13 is available
#    stm = dt.datetime(2002,3,18,15,2)
#    etm = dt.datetime(2002,3,18,15,20)

#    # Time interval where DMSP F14 and F15 is available
    stm = dt.datetime(2002, 3, 18, 16, 2)
    etm = dt.datetime(2002, 3, 18, 16, 6)

    #    # Time interval where DMSP F15 is available
    #    stm = dt.datetime(2002,3,18,16,8)
    #    etm = dt.datetime(2002,3,18,16,20)

    #    # Time interval where DMSP F13 is available
    #    stm = dt.datetime(2002,3,18,16,44)
    #    etm = dt.datetime(2002,3,18,17,0)

    #################################################################

    #    stm = dt.datetime(2002,3,18,16,20)
    #    etm = dt.datetime(2002,3,18,16,42)

    #    stm = dt.datetime(2002,3,18,15,50)
    #    etm = dt.datetime(2002,3,18,15,52)

    dtms, fnames = find_filenames(stm, etm, read_si=read_si, read_wic=read_wic)
    #dtms = [dt.datetime(2002,3,18,16,41)]
    for dtm in dtms:

        fig, ax = plt.subplots(figsize=(12, 8))
        ax.set_facecolor('black')

        # Plot a map
        mobj = plotUtils.mapObj(ax=ax,
                                datetime=dtm,
                                lon_0=0.,
                                boundinglat=60.,
                                gridLabels=False,
                                gridLatRes=10.,
                                coords=coords,
                                fillContinents='None')

        # Overlay IMAGE data
        if overlay_IMAGE_data:
            if wic_si_ratio:
                IMAGE_wic_si_ratio = IMAGE_sat(dtm, wic_si_ratio=True)
                IMAGE_wic_si_ratio.overlay_wic_si_ratio(
                    mobj,
                    param="image",
                    gauss_filter=False,
                    vmin=100.,
                    vmax=1000.,  # vmax is ignored here
                    vmin_ratio=0.,
                    vmax_ratio=2.,
                    alpha=0.3,
                    zorder=3,
                    cmap='bwr')
                IMAGE_wic_si_ratio.add_cbar(fig,
                                            ax,
                                            shrink=0.6,
                                            label="WIC/SI",
                                            label_fontsize=15)

            else:
                IMAGE_obj = IMAGE_sat(dtm, datatype=IMAGE_datatype)
                IMAGE_obj.overlay_data(mobj,
                                       param="image",
                                       interpolate_data=interpolate_IMAGE_data,
                                       overlay_spot_only=False,
                                       mark_max_intensity_point=True,
                                       max_point_color='b',
                                       max_point_size=30,
                                       gauss_filter=False,
                                       vmin=0,
                                       vmax=1000,
                                       alpha=1.0,
                                       zorder=3,
                                       cmap='gist_gray')
                IMAGE_obj.add_cbar(fig,
                                   ax,
                                   shrink=0.6,
                                   label="Rayleigh (for " + IMAGE_datatype +
                                   " data)",
                                   label_fontsize=15)

                IMAGE_obj = IMAGE_sat(dtm, datatype="SI")
                IMAGE_obj.overlay_data(mobj,
                                       param="image",
                                       interpolate_data=interpolate_IMAGE_data,
                                       overlay_spot_only=True,
                                       mark_max_intensity_point=True,
                                       max_point_color='r',
                                       max_point_size=30,
                                       gauss_filter=False,
                                       vmin=0,
                                       vmax=1000,
                                       alpha=1.0,
                                       zorder=6,
                                       cmap='brg')
    #            IMAGE_obj.add_cbar(fig, ax, shrink=0.6,
    #                               label="Rayleigh (for WIC data)",
    #                               label_fontsize=15)

    # Overlay SuperDARN convection flows
        if overlay_SuperDARN_data:
            mapDatObj = plotMapGrd.MapConv(dtm, mobj, ax, vec_len_factor=3)
            if overlay_MapFitVel:
                mapDatObj.overlayMapFitVel(pltColBar=True,
                                           overlayRadNames=True,
                                           annotateTime=True,
                                           colorBarLabelSize=15.0,
                                           marker_size=10.0,
                                           alpha=0.7,
                                           zorder=5.0,
                                           edgecolor='none',
                                           cbar_shrink=0.6,
                                           colMap=vec_cmap,
                                           label_style="web")
            if overlay_CnvCntrs:
                mapDatObj.overlayCnvCntrs()
            if overlay_HMB:
                mapDatObj.overlayHMB()

        # Overlay DMSP
        if overlay_DMSP_data:
            for DMSP_sat_num in DMSP_sat_nums:
                DMSP_obj = DMSP_sat(dtm, DMSP_sat_num, data_type="ssies")
                DMSP_obj.overlay_ssies_data(mobj,
                                            ax,
                                            interval=2 * 60,
                                            velscl=3 * 111.,
                                            vec_cmap=vec_cmap,
                                            vel_scale=[0, 1000.],
                                            quality_flag=False)
                DMSP_obj = DMSP_sat(dtm, DMSP_sat_num, data_type="ssm")
                DMSP_obj.overlay_ssm_data(mobj,
                                          ax,
                                          interval=2 * 60,
                                          velscl=1.e3,
                                          rot_90_clockwise=True)

        # Overlay TIMED-GUVI
        if overlay_TIMEDGUVI_data:
            currDate = dt.datetime(dtm.year, dtm.month, dtm.day)
            TIMEDGUVI_obj = TIMEDGUVI_sat(currDate)
            TIMEDGUVI_obj.overlay_data(mobj,
                                       ax,
                                       inpTime=dtm,
                                       timeDelta=40,
                                       vmin=0.,
                                       vmax=3000.,
                                       alpha=1.0,
                                       zorder=1,
                                       timeZorder=7.,
                                       timeColor="white",
                                       timeTextColor="r",
                                       timeMarkerSize=2.,
                                       timeFontSize=8.,
                                       plotCBar=True,
                                       autoScale=False,
                                       plotType='d135',
                                       overlayTime=True,
                                       overlayTimeInterval=5,
                                       timeMarker='o',
                                       plotTitle=False,
                                       cbar_shrink=0.6,
                                       titleString=None,
                                       coords=coords,
                                       timedguviCmap='gist_gray')

        # Overlay magnetometer data
        from overlay_magnetometer import overlay_magnetometer_stations
        from overlay_magnetometer import overlay_magnetometer_hvecs
        if overlay_magmeter:
            # Overlay magnetometer stations
            overlay_magnetometer_stations(mobj,
                                          ax,
                                          dtm,
                                          station_label=False,
                                          file_dir="../data/magnetometer/")
            # Overlay magnetometer vectors
            overlay_magnetometer_hvecs(mobj,
                                       ax,
                                       dtm,
                                       rot_90_clockwise=True,
                                       vecscl=2.e3,
                                       zorder=5,
                                       file_dir="../data/magnetometer/")

        #ax.set_title(dtm.strftime("%b %d, %Y    %H:%M"))

        #fdir ="../plots/multiinstrument_data_overlay/" + IMAGE_datatype + "/"
        #        "_with_" + IMAGE_datatype
        #        #"_with_TIMEDGUVI"
        fdir = "../plots/multiinstrument_data_overlay/magnetometer/"
        #fname = "map_overlay_hvecs_current_" + dtm.strftime("%H%M")
        #fname = "magmetorCurrent_sdvel_wicSiRatio_" + dtm.strftime("%H%M")
        fname = "magmetorCurrent_sdvel_wicSiRatio_ssm_ssies_" + dtm.strftime(
            "%H%M")
        #fname = "magmetorCurrent_sdvel_ssm_ssies_" + dtm.strftime("%H%M")
        fig.savefig(fdir + fname, dpi=200)