class multiplot: """ docstring should be added ... """ def __init__(self, panels, setformat=0): self.panel = [] for i in range(panels): self.panel.append(plotdata()) self.xrange = [0., 100.] self.xlabel = "DoY" self.xaxis_flag = 0 self.title = "" self.gv = 1 self.format = setformat #0 Querformat, 1 Hochformat self.outname = "multiplot" self.plotmarks = [] def addplotmark(self, style, lt=5): self.plotmarks.append(plotmark(style, lt)) def addpanel(self, data): self.panel.append(plotdata()) def setxrange(self, a, b): self.xrange[0] = a self.xrange[1] = b def settitle(self, a): self.title = a def setgv(self, a): self.gv = a def setxaxis2(self, a): """ This routine plots a seconds xaxis on top of the screen. Input must be a list of lists containing the x2label and xposition of that label: e.g: [["Jan",30],["Feb",58]...] """ self.xaxis_flag = 1 try: b = a[0][0] b = a[0][1] except: print "Wrong input for SELF.SETXAXIS2()" print "Input must be of the form of [['label',xpos],['label',xpos],[],[],...,[]]" print "Second x axis is omitted. Hit ENTER to proceed" blub = raw_input() self.xaxis2 = a def setxlabel(self, a): self.xlabel = str(a) def setname(self, a): self.outname = str(a) def build_xaxis2(self): """ This routine builds the seconds xaxis from self.xaxis2 """ for label in self.xaxis2: if label[1] > self.xrange[0] and label[1] < self.xrange[1]: self.gp( "set label center'{/Helvetica=5 %s}' at first %f, screen 1.00" % (label[0], label[1])) self.xaxis_flag = 0 def plot(self): self.gp = Gnuplot() self.generatebox() for panel in range(len(self.panel)): self.plotpanel(panel) #self.gp("unset tmargin") #self.gp("unset title") #self.gp("unset multiplot") #self.gp("set size 1,1") #self.gp("set xtics") self.gp("set autoscale") self.gp.sync() os.system("ps2eps -f -B -l %s.ps" % (self.outname)) os.system("rm %s.ps" % (self.outname)) if (self.gv): os.system("okular %s.eps" % (self.outname)) del self.gp def generatebox(self): self.gp("set term postscript solid enhanced color") self.gp("set output '%s.ps'" % (self.outname)) self.gp("set border front") self.gp("unset key") self.gp("unset colorbox") self.gp( "set palette model RGB functions gray<1.e-20 ? 1 : gray<0.5 ? gray*2 : 1 , gray<1.e-20 ? 1 : gray<0.5 ? gray*2 : 2-gray*2, gray <1.e-20 ? 1 : gray<0.5 ? 1-sqrt(gray*2) : 0" ) if (self.format): self.gp("set xtics nomirror font 'Helvetica,9'") else: self.gp("set xtics nomirror") self.gp("set multiplot") self.gp("set xlabel 0,0.1") if (self.format): self.gp("set xlabel '%s' font 'Helvetica,9'" % (self.xlabel)) else: self.gp("set xlabel '%s' font 'Helvetica,12'" % (self.xlabel)) self.gp("set xrange[%e:%e]" % (float(self.xrange[0]), float(self.xrange[1]))) if (self.format): self.gp("set ytics font 'Helvetica,9'") else: self.gp("set ytics") #self.gp("set autoscale") self.gp("set key right samplen 0.5") self.gp("set key spacing 0.8") self.gp("unset xtics") self.gp("unset xlabel") self.gp("set border front") if self.xaxis_flag == 1: self.build_xaxis2() def plotpanel(self, panel): self.buildplotmarks(panel) first = 1 self.gp("unset key") self.gp( "set label center'{/Helvetica=9 %s}' at screen 0.3, screen 1.02" % (self.title)) self.gp("set border front") #self.gp("unset label") if (self.panel[panel].grid): self.gp("set grid xtics front") else: self.gp("set grid xtics front") self.gp("unset grid") size = (.86 / (float(len(self.panel)))) + 0.06 size2 = .86 self.gp("unset xlabel") self.gp("set format x ''") self.buildytics(panel) if (panel == 0): size = (.86 / float((len(self.panel)))) + 0.1 self.gp("set xlabel 0,0.2") if (self.format): self.gp("set xlabel '%s' font 'Helvetica,9'" % (self.xlabel)) else: self.gp("set xlabel '%s' font 'Helvetica,12'" % (self.xlabel)) self.gp("set format x") if (self.format): self.gp("set xtics font 'Helvetica,9'") else: self.gp("set xtics") self.gp("set mxtics 10") if (self.panel[panel].type == "plot"): self.gp("set size 1.,%f" % (size)) if (self.format): self.gp("set size 0.6,%f" % (size)) elif (self.panel[panel].type == "splot"): self.gp("set size 1.2935,%f" % (size * 1.65)) if (panel == 0): self.gp("set origin 0,%f" % (0.05)) else: if (self.panel[panel].type == "plot"): self.gp("set origin 0,%f" % (0.09 + float(panel) * (size - 0.06))) elif (self.panel[panel].type == "splot"): self.gp("set origin -.147,%f" % ((0.09 + float(panel) * (size - 0.06)) - .1315)) self.gp("set lmargin 8") if (self.format): self.gp( "set label '%s' at screen 0.05,%f center rotate by 90 font 'Helvetica,9'" % ((self.panel[panel].ylabel), (0.09 + float(panel) * (size - 0.06) + size / 2.))) else: self.gp( "set label '%s' at screen 0.03,%f center rotate by 90 font 'Helvetica,12'" % ((self.panel[panel].ylabel), (0.09 + float(panel) * (size - 0.06) + size / 2.))) self.gp("set yrange[%e:%e]" % (self.panel[panel].yrange[0], self.panel[panel].yrange[1])) if self.panel[panel].xrange[0] != "NAN": self.gp("set xrange[%e:%e]" % (self.panel[panel].xrange[0], self.panel[panel].xrange[1])) # plot marks for mark in self.plotmarks: doplotmark = 0 for i in mark.panels: if (i == -1 or i == panel and self.panel[panel].type == "plot"): doplotmark = 1 if (doplotmark): doplotlabel = 0 if (mark.label != ""): for i in mark.labelpanels: if (i == -1 or i == panel): doplotlabel = 1 if (mark.style == "vline"): head = "" if (mark.arrowhead == 0): head = "nohead" elif (mark.arrowhead == 1): head = "head filled" mark.plot[panel].set_option_colonsep( "with", "vectors %s lt %i lw %i" % (head, mark.linetype, mark.linewidth)) #self.gp("plot 'testvector.dat' with vectors") if (doplotlabel): if (self.format): self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,9' front" % ((mark.label, mark.pos[0][0] / (self.xrange[1] - self.xrange[0]) + 0.01, 0.8, mark.linetype))) else: self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,12' front" % ((mark.label, mark.pos[0][0] / (self.xrange[1] - self.xrange[0]) + 0.01, 0.8, mark.linetype))) if (first): self.gp.plot(mark.plot[panel]) first = 0 else: self.gp.replot(mark.plot[panel]) if (mark.style == "box"): mark.plot[panel].set_option_colonsep("using", "1:2:3") mark.plot[panel].set_option_colonsep( "with", "filledcurves lt %i" % (mark.linetype)) if (doplotlabel): if (self.format): self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,9' center front" % (mark.label, (mark.pos[0][0] + (mark.pos[0][2] - mark.pos[0][0]) / 2.) / (self.xrange[1] - self.xrange[0]), 0.8, 0)) else: self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,12' center front" % (mark.label, (mark.pos[0][0] + (mark.pos[0][2] - mark.pos[0][0]) / 2.) / (self.xrange[1] - self.xrange[0]), 0.8, 0)) if (first): self.gp.plot(mark.plot[panel]) first = 0 else: self.gp.replot(mark.plot[panel]) if (mark.style == "hline"): head = "" if (mark.arrowhead == 0): head = "nohead" elif (mark.arrowhead == 1): head = "head filled" mark.plot[panel].set_option_colonsep( "with", "vectors %s lt %i lw %i" % (head, mark.linetype, mark.linewidth)) #self.gp("plot 'testvector.dat' with vectors") if (doplotlabel): if (self.format): self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,9' front" % ((mark.label, mark.pos[0][0] / (self.xrange[1] - self.xrange[0]) + 0.01, 0.8, mark.linetype))) else: self.gp( "set label '%s' at graph %f,%f tc lt %i font 'Helvetica,12' front" % ((mark.label, mark.pos[0][0] / (self.xrange[1] - self.xrange[0]) + 0.01, 0.8, mark.linetype))) if (first): self.gp.plot(mark.plot[panel]) first = 0 else: self.gp.replot(mark.plot[panel]) if (mark.style == "function"): if (first): self.gp.plot(mark.plot[panel]) else: self.gp.replot(mark.plot[panel]) if (first and self.panel[panel].type == "plot"): if len(self.panel[panel].data) == 1: self.gp("%s" % (self.panel[panel].key)) self.gp.plot(self.panel[panel].data[0]) first = 0 elif (first and self.panel[panel].type == "splot"): self.gp("set pm3d map") self.gp.splot(self.panel[panel].data[0]) first = 0 else: self.gp.replot(self.panel[panel].data[0]) for i in range(len(self.panel[panel].data) - 1): if i == len(self.panel[panel].data) - 2: self.gp("%s" % (self.panel[panel].key)) self.gp.replot(self.panel[panel].data[i + 1]) self.gp("unset pm3d") def buildplotmarks(self, panel): for mark in self.plotmarks: tmpmark = [] if (mark.style == "vline"): tmppos = mark.pos tmppos[0][1] = self.panel[panel].yrange[0] * 1.01 tmppos[0][3] = (self.panel[panel].yrange[1] - self.panel[panel].yrange[0]) * 0.99 tmpmark = Data(tmppos) if (mark.style == "hline"): tmppos = mark.pos tmppos[0][0] = self.xrange[0] * 1.01 tmppos[0][2] = (self.xrange[1] - self.xrange[0]) * 0.99 tmpmark = Data(tmppos) if (mark.style == "box"): if mark.pos[0][2] == 1e-20: ymin = self.panel[panel].yrange[0] else: ymin = mark.pos[0][2] if mark.pos[0][3] == 1e20: ymax = self.panel[panel].yrange[1] else: ymax = mark.pos[0][3] tmppos = [[mark.pos[0][0], ymin, ymax], [mark.pos[0][1], ymin, ymax]] #tmppos=[[mark.pos[0][0],self.panel[panel].yrange[1],self.panel[panel].yrange[0]],[mark.pos[0][2],self.panel[panel].yrange[1],self.panel[panel].yrange[0]]] tmpmark = Data(tmppos) if (mark.style == "function"): tmpmark = mark.function if (tmpmark != []): mark.addplot(tmpmark) def buildytics(self, panel): # the tics for panel=panel are set. The cases logscale and linear scale are handled. In the first panel (panel==0) all tics are labeled set # in all other panels the first tic is unlabeled to avoid overlapp with the tics from the panel below. # logscale tics are set ---> if yrange is smaller than 7 orders of magnitude the tics are set each order of magnitude and 8 minor tics # corresponding to 2*,3*,...,9* are set (will fail if yrange is smaller than one order of magnitude # if yrange is greater than # linearscale tics are set ---> if (self.panel[panel].ytics != ""): if (self.format): self.gp("set ytics %s font 'Helvetica,9'" % (self.panel[panel].ytics)) else: self.gp("set ytics %s" % (self.panel[panel].ytics)) if (self.panel[panel].logscale): self.gp("set logscale y") return # begin if logscale if (self.panel[panel].logscale): self.gp("unset ytics") self.gp("set logscale y") self.gp("set format y '10^{%2T}'") adjust = 0 i = 1.e0 while (not adjust): i = i * 10. tmp = self.panel[panel].yrange[0] tmp = tmp * i**6 if (tmp >= self.panel[panel].yrange[1]): adjust = 1 if (self.panel[panel].minor < 0): if (i <= 10.): minor = 8 else: minor = int(log(i, 10.) + .01) minor2 = 2 if (self.panel[panel].minor == 0): if (i <= 10.): minor = 0 else: minor = int(log(i, 10.) + .01) minor2 = 1 if (self.panel[panel].minor > 0): if (i <= 10.): minor = self.panel[panel].minor else: minor = int(log(i, 10.) + .01) minor2 = 2 tic = self.panel[panel].yrange[0] utic = tic if (i <= 10.): j = -1 while (utic <= self.panel[panel].yrange[1]): j += 1 utic = tic * i**j if (j == 0): if (panel == 0): if (self.format): self.gp("set ytics (%e) font 'Helvetica,9'" % (utic)) else: self.gp("set ytics (%e)" % (utic)) else: if (self.format): self.gp( "set ytics (' ' %e) font 'Helvetica,9'" % (float(utic))) else: self.gp("set ytics (' ' %e)" % (float(utic))) else: self.gp("set ytics add (%e)" % (utic)) for l in range(minor): self.gp( "set ytics add ('' %e 1)" % (utic + (utic * 9. / float(minor + 1) * float(l + 1)))) else: j = -1 while (utic <= self.panel[panel].yrange[1]): j += 1 utic = tic * i**j if (j == 0): if (panel == 0): if (self.format): self.gp("set ytics (%e) font 'Helvetica,9'" % (utic)) else: self.gp("set ytics (%e)" % (utic)) else: if (self.format): self.gp( "set ytics (' ' %e) font 'Helvetica,9'" % (float(utic))) else: self.gp("set ytics (' ' %e)" % (float(utic))) else: self.gp("set ytics add (%e)" % (utic)) for k in range(minor): for l in range(minor2): if (not (k == minor - 1 and l == minor2 - 1)): if (l == minor2 - 1): self.gp( "set ytics add ('' %e)" % (float(utic) * float(10**k) * float( (l + 1) * 10. / float(minor2)))) else: self.gp( "set ytics add ('' %e 1)" % (float(utic) * float(10**k) * float( (l + 1) * 10. / float(minor2)))) # begin if linear scale else: self.gp("unset ytics") self.gp("unset logscale y") self.gp("set format y '%6g'") i = .1 while (self.panel[panel].yrange[1] - self.panel[panel].yrange[0] > i): i = i * 10. minor = 9 if (i / 4. >= self.panel[panel].yrange[1] - self.panel[panel].yrange[0]): i = i / 4. minor = 4 elif (i / 2. >= self.panel[panel].yrange[1] - self.panel[panel].yrange[0]): i = i / 2. minor = 9 if (self.panel[panel].minor == 0): minor = 0 elif (self.panel[panel].minor > 0): minor = self.panel[panel].minor if (i > 10.): for j in range(6): if (j == 0): if (panel == 0): if (self.format): self.gp("set ytics (%i) font 'Helvetica,9'" % (int(self.panel[panel].yrange[0]))) else: self.gp("set ytics (%i)" % (int(self.panel[panel].yrange[0]))) else: if (self.format): self.gp( "set ytics (' ' %i) font 'Helvetica,9'" % (int(self.panel[panel].yrange[0]))) else: self.gp("set ytics (' ' %i)" % (int(self.panel[panel].yrange[0]))) else: self.gp( "set ytics add (%i)" % (int(self.panel[panel].yrange[0] + i / 5. * j))) print "minor = ", minor for k in range(minor): if ((minor + 1) % 5 == 0 and (k + 1) % 5 == 0): self.gp( "set ytics add (' ' %i)" % (int(self.panel[panel].yrange[0] + j * i / 5. + (i / 5. / float(minor + 1) * float(k + 1))))) else: self.gp( "set ytics add (' ' %i 1)" % (int(self.panel[panel].yrange[0] + j * i / 5. + (i / 5. / float(minor + 1) * float(k + 1))))) else: for j in range(6): if (j == 0): if (panel == 0): if (self.format): self.gp("set ytics (%f) font 'Helvetica,9'" % (self.panel[panel].yrange[0])) else: self.gp("set ytics (%f)" % (self.panel[panel].yrange[0])) else: if (self.format): self.gp( "set ytics (' ' %f) font 'Helvetica,9'" % (self.panel[panel].yrange[0])) else: self.gp("set ytics (' ' %f)" % (self.panel[panel].yrange[0])) else: self.gp("set ytics add (%f)" % (self.panel[panel].yrange[0] + i / 5. * j)) for k in range(minor): if ((minor + 1) % 5 == 0 and (k + 1) % 5 == 0): self.gp( "set ytics add (' ' %f)" % (self.panel[panel].yrange[0] + j * i / 5. + (i / 5. / float(minor + 1) * float(k + 1)))) else: self.gp( "set ytics add (' ' %f 1)" % (self.panel[panel].yrange[0] + j * i / 5. + (i / 5. / float(minor + 1) * float(k + 1))))
class vspec: def __init__(self, year, timeframe): self.year = year self.timeframe = timeframe self.hedata = loadswicsiondata("He2+", 720., self.year, self.timeframe, "/data/etph/ace/") self.odata = loadswicsiondata("O6+", 720., self.year, self.timeframe, "/data/etph/ace/") self.hdata = swicsdcrtcr("H1+", self.year, self.timeframe, "/data/etph/ace/pui/12mdata/") self.swedata = swepamdata(64., self.year, self.timeframe, "/data/etph/ace/swepam/") self.swedata.sync_h(self.hedata) self.mag = magdata(1., self.year, self.timeframe, "/data/etph/ace/mag/") self.mag.sync_mag(self.hedata) self.theta = arccos(cos(self.mag.phi) * cos(self.mag.theta)) self.valf = 21.8 / sqrt(self.swedata.dens) * (self.mag.magb) self.valf[isinf(self.valf)] = -1. self.valf[isnan(self.valf)] = -2. self.effh = zeros([58]) self.effhe = zeros([58]) self.effo = zeros([58]) self.gp = Gnuplot() self.gp("set xr [-2:3]") self.gp("set yr [0:1]") self.gp("set xlabel '(v-v_{sw})/C_{A}'") self.stdhe = [] self.stdo = [] self.stdh = [] self.skewhe = [] self.skewo = [] self.skewh = [] self.kurthe = [] self.kurto = [] self.kurth = [] self.meanvhe = [] self.meanvo = [] self.meanvh = [] self.maxvhe = [] self.maxvo = [] self.maxvh = [] self.time = [] self.years = [] self.valfs = [] self.magb = [] self.thetas = [] self.sigtheta = [] self.vsw = [] self.dsw = [] self.tsw = [] self.load_eff() def load_eff(self): effh = loadtxt(open("/data/etph/ace/efficencies/H1+.eff", "r")) effhe = loadtxt(open("/data/etph/ace/efficencies/He2+.eff", "r")) effo = loadtxt(open("/data/etph/ace/efficencies/O6+.eff", "r")) self.effh = effh[:, 1] self.effhe = effhe[:, 1] self.effo = effo[:, 1] def moments(self, thetalist=[[0., pi / 18.], [pi - pi / 18., pi]]): thetamask = (self.theta >= thetalist[0][0]) * (self.theta <= thetalist[0][1]) if len(thetalist) > 1: for val in thetalist[1:]: thetamask += (self.theta >= val[0]) * (self.theta <= val[1]) for step in where(thetamask)[0]: if self.valf[step] > 0.: self.years.append(self.hedata.year) self.time.append(self.hedata.time[step]) self.valfs.append(self.valf[step]) self.magb.append(self.mag.magb[step]) self.thetas.append(self.mag.THETA[step]) self.sigtheta.append(self.mag.sigTHETA[step]) self.vsw.append(self.swedata.vel[step]) self.dsw.append(self.swedata.dens[step]) self.tsw.append(self.swedata.temp[step]) # Protons il = where(self.hdata.time == self.hedata.time[step])[0] if il.shape[0] > 0 and amax(self.hdata.tcrspec[il[0], :] + self.hdata.dcrspec[il[0], :]) > 0.: tmpspec = zeros([self.hdata.velspec.shape[0], 2]) tmpspec[:, 0] = self.hdata.velspec tmpspec[:, 1] = 1. * self.hdata.tcrspec[ il[0]] + 1. * self.hdata.dcrspec[il[0]] tmpspec[:, 1] = tmpspec[:, 1] / ( tmpspec[:, 0] * 0.03) / self.effh / tmpspec[:, 0] il2 = where(tmpspec[:, 1] == amax(tmpspec[:, 1]))[0] if (il2[0] > 0 and il2[0] < tmpspec[:, 1].shape[0] - 1): maxvh = sum( tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 0] * tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1] ) / sum(tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1]) else: maxvh = tmpspec[il2[0], 0] meanvh = sum(tmpspec[:, 0] * tmpspec[:, 1]) / sum( tmpspec[:, 1]) if maxvh > 390.: tmphvel = (tmpspec[:, 0] - maxvh) / self.valf[step] tmphcts = (tmpspec[:, 1]) / sum(tmpspec[:, 1]) maskh = (tmphvel >= -3.) * (tmphvel <= 3.) stdh = sqrt(sum((tmphvel[maskh]**2) * tmphcts[maskh])) skewh = (sum( (tmphvel[maskh]**3) * tmphcts[maskh])) / stdh**3. kurth = (sum( (tmphvel[maskh]**4) * tmphcts[maskh])) / stdh**4. self.stdh.append(stdh) self.skewh.append(skewh) self.kurth.append(kurth) self.meanvh.append(meanvh) self.maxvh.append(maxvh) else: self.stdh.append(-999.) self.skewh.append(-999.) self.kurth.append(-999.) self.meanvh.append(-999.) self.maxvh.append(-999.) else: self.stdh.append(-999.) self.skewh.append(-999.) self.kurth.append(-999.) self.meanvh.append(-999.) self.maxvh.append(-999.) # Alphas if (where(self.hedata.countspec[step, :, 1] > 0.)[0].shape[0] >= 3): tmpspec = 1. * self.hedata.countspec[step] tmpspec[:, 1] = tmpspec[:, 1] / ( tmpspec[:, 0] * 0.03) / self.effhe / tmpspec[:, 0] il2 = where(tmpspec[:, 1] == amax(tmpspec[:, 1]))[0] if (il2[0] > 0 and il2[0] < tmpspec[:, 1].shape[0] - 1): maxvhe = sum( tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 0] * tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1] ) / sum(tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1]) else: maxvhe = tmpspec[il2[0], 0] meanvhe = sum(tmpspec[:, 0] * tmpspec[:, 1]) / sum( tmpspec[:, 1]) tmphevel = (tmpspec[:, 0] - maxvhe) / self.valf[step] tmphects = (tmpspec[:, 1]) / sum(tmpspec[:, 1]) maskhe = (tmphevel >= -3.) * (tmphevel <= 3.) stdhe = sqrt(sum((tmphevel[maskhe]**2) * tmphects[maskhe])) skewhe = (sum( (tmphevel[maskhe]**3) * tmphects[maskhe])) / stdhe**3. kurthe = (sum( (tmphevel[maskhe]**4) * tmphects[maskhe])) / stdhe**4. self.stdhe.append(stdhe) self.skewhe.append(skewhe) self.kurthe.append(kurthe) self.meanvhe.append(meanvhe) self.maxvhe.append(maxvhe) else: self.stdhe.append(-999.) self.skewhe.append(-999.) self.kurthe.append(-999.) self.meanvhe.append(-999.) self.maxvhe.append(-999.) # O6+ if (where(self.odata.countspec[step, :, 1] > 0.)[0].shape[0] >= 3): tmpspec = 1. * self.odata.countspec[step] tmpspec[:, 1] = tmpspec[:, 1] / ( tmpspec[:, 0] * 0.03) / self.effo / tmpspec[:, 0] il2 = where(tmpspec[:, 1] == amax(tmpspec[:, 1]))[0] if (il2[0] > 0 and il2[0] < tmpspec[:, 1].shape[0] - 1): maxvo = sum( tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 0] * tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1] ) / sum(tmpspec[[il2[0] - 1, il2[0], il2[0] + 1], 1]) else: maxvo = tmpspec[il2[0], 0] meanvo = sum(tmpspec[:, 0] * tmpspec[:, 1]) / sum( tmpspec[:, 1]) tmpovel = (tmpspec[:, 0] - maxvo) / self.valf[step] tmpocts = (tmpspec[:, 1]) / sum(tmpspec[:, 1]) masko = (tmpovel >= -3.) * (tmpovel <= 3.) stdo = sqrt(sum((tmpovel[masko]**2) * tmpocts[masko])) skewo = (sum( (tmpovel[masko]**3) * tmpocts[masko])) / stdo**3. kurto = (sum( (tmpovel[masko]**4) * tmpocts[masko])) / stdo**4. self.stdo.append(stdo) self.skewo.append(skewo) self.kurto.append(kurto) self.meanvo.append(meanvo) self.maxvo.append(maxvo) else: self.stdo.append(-999.) self.skewo.append(-999.) self.kurto.append(-999.) self.meanvo.append(-999.) self.maxvo.append(-999.) self.stdhe = array(self.stdhe) self.stdh = array(self.stdh) self.stdo = array(self.stdo) self.skewhe = array(self.skewhe) self.skewh = array(self.skewh) self.skewo = array(self.skewo) self.kurthe = array(self.kurthe) self.kurth = array(self.kurth) self.kurto = array(self.kurto) self.meanvhe = array(self.meanvhe) self.meanvh = array(self.meanvh) self.meanvo = array(self.meanvo) self.maxvhe = array(self.maxvhe) self.maxvh = array(self.maxvh) self.maxvo = array(self.maxvo) self.time = array(self.time) self.years = array(self.years) self.valfs = array(self.valfs) self.magb = array(self.magb) self.thetas = array(self.thetas) self.sigtheta = array(self.sigtheta) self.vsw = array(self.vsw) self.dsw = array(self.dsw) self.tsw = array(self.tsw) return def plot_vdist(self, thetalist=[[0., pi / 18.], [pi - pi / 18., pi]]): thetamask = (self.theta >= thetalist[0][0]) * (self.theta <= thetalist[0][1]) if len(thetalist) > 1: for val in thetalist[1:]: thetamask += (self.theta >= val[0]) * (self.theta <= val[1]) print where(thetamask) for i in where(thetamask)[0]: self.plot_step(i) def plot_step(self, step): if self.valf[step] > 0.: self.gp("unset label") self.gp("set label 'v_{sw}=%f' at -1.5,0.95" % (self.swedata.vel[step])) self.gp("set label 'C_{A}=%f' at -1.5,0.90" % (self.valf[step])) self.gp("set label '{/Symbol= Q}=%f' at -1.5,0.85" % (self.theta[step] / pi * 180.)) self.gp("set label '{/Symbol= dQ}=%f' at -1.5,0.8" % (self.mag.sigTHETA[step] / pi * 180.)) self.gp("set title '%.4i DoY %f'" % (self.year, self.hedata.time[step])) if amax(self.hedata.countspec[step, :, 1]) > 0.: self.gp.plot( Data((self.hedata.countspec[step, :, 0] - self.swedata.vel[step]) / self.valf[step], self.hedata.countspec[step, :, 1] / amax(self.hedata.countspec[step, :, 1]), with_="lp lt 3 lw 3", title="He^{2+}")) if amax(self.odata.countspec[step, :, 1]) > 0.: self.gp.replot( Data((self.odata.countspec[step, :, 0] - self.swedata.vel[step]) / self.valf[step], self.odata.countspec[step, :, 1] / amax(self.odata.countspec[step, :, 1]), with_="lp lt 4 lw 3", title="O^{6+}")) il = where(self.hdata.time == self.hedata.time[step])[0] if il.shape[0] > 0 and amax(self.hdata.tcrspec[il[0], :] + self.hdata.dcrspec[il[0], :]) > 0.: self.gp.replot( Data((self.hdata.velspec - self.swedata.vel[step]) / self.valf[step], (self.hdata.tcrspec[il[0], :] + self.hdata.dcrspec[il[0], :]) / amax(self.hdata.tcrspec[il[0], :] + self.hdata.dcrspec[il[0], :]), with_="lp lt 1 lw 3", title="H^{1+}")) self.gp.hardcopy("vdistperp_%.4i_%.3i.%.6i.ps" % (self.year, int(self.hedata.time[step]), int((self.hedata.time[step] % 1) * 1e6)), color=True) self.gp.sync()