File: ts9sim.py

package info (click to toggle)
guitarix 0.36.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 139,468 kB
  • sloc: cpp: 317,557; python: 42,482; ansic: 18,301; fortran: 2,012; sh: 662; makefile: 422; xml: 208; perl: 183; pascal: 74; lisp: 32
file content (72 lines) | stat: -rw-r--r-- 1,757 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# -*- coding: utf-8 -*-
from pylab import *
from scipy.optimize import brentq
import sys

class PlotManager(object):
    def __init__(self, r, c):
        self.r = r
        self.c = c
        self.i = 1

    def __call__(self):
        subplot(self.r,self.c,self.i)
        self.i += 1

def f(D, x, d):
    Is = 10 * 1e-12
    mUt = 30 * 1e-3
    R2 = 51000 + 500000 * d
    return (x+D)/R2 + Is * (exp(D/mUt) - exp(-D/mUt))

def F(x, d):
    ret = brentq(f, -0.6, 0.6, args=(x, d))
    return ret

def xf(v):
    return v / (3.0 + v)

def fx(v):
    return 3.0 * v / (1.0 - v)
    
def show_diff(pm):
    from ts9func import ts9func
    d = 1.0
    pm()
    x = linspace(0, 100, 2000)
    y = vectorize(lambda v: F(v, d))(x)
    y1 = vectorize(lambda v: ts9func(v))(x)
    plot(x, y-y1, "-")
    pm()
    x = linspace(0, 2.5, 200)
    y = vectorize(lambda v: F(v, d))(x)
    y1 = vectorize(ts9func)(x)
    plot(x, y-y1, "-")

def write_ftube_table(Vi, Vp):
    """write C source"""
    sys.stdout.write('\t%g,%g,%g,%d, {' % (Vi[0], Vi[-1], (len(Vi)-1)/(Vi[-1]-Vi[0]), len(Vi)))
    s = ""
    for i, v in enumerate(Vi):
        if i % 5 == 0:
            sys.stdout.write(s+"\n\t")
            s = ""
        sys.stdout.write(s+str(Vp[i]))
        s = ","
    sys.stdout.write("\n\t}")

def make_table():
    Vi = linspace(xf(0.0),xf(100.0),100)
    sys.stdout.write("// file generated by tools/ts9sim.py -- do not modify manually\n")
    sys.stdout.write("\n")
    sys.stdout.write("static table1d_imp<%d> ts9table __rt_data = {\n" % len(Vi))
    Vp = vectorize(lambda v: F(fx(v), 1.0))(Vi)
    write_ftube_table(Vi, Vp)
    sys.stdout.write("\n};\n")

if len(sys.argv) == 2:
    make_table()
else:
    pm = PlotManager(2,1)
    show_diff(pm)
    show()