aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/analyze_detector_trace.py444
-rw-r--r--utils/draw_graph_from_json.py145
-rw-r--r--utils/openwave.sh55
-rw-r--r--utils/specs.kicad_sym1986
4 files changed, 2630 insertions, 0 deletions
diff --git a/utils/analyze_detector_trace.py b/utils/analyze_detector_trace.py
new file mode 100644
index 0000000..80099a3
--- /dev/null
+++ b/utils/analyze_detector_trace.py
@@ -0,0 +1,444 @@
+import sys
+import numpy as np
+import pickle
+import matplotlib.pyplot as plt
+import csv
+from queue import PriorityQueue
+import heapq
+from scipy.constants import c, pi, h
+
+
+def waveguide_length_for_phase_shift(phi, wavelength, neff):
+ phi = np.mod(phi, 2*pi)
+ if phi == 0:
+ phi = 2*pi
+
+ length_req = phi * wavelength / (2 * pi * neff)
+
+ return length_req
+
+
+class Pulse():
+ max_id = 0
+ def __init__(self, power, duration, phase, tstart, wavelength=1.55e-6, sig_id=0):
+ self.power = power
+ self.duration = duration
+ self.phase = phase
+ self.tstart = tstart
+ self.wavelength = wavelength
+ if sig_id != 0:
+ self.id = sig_id
+ if self.id >= Pulse.max_id:
+ Pulse.max_id = self.id + 1
+ else:
+ self.id = Pulse.max_id
+ Pulse.max_id += 1
+
+ @property
+ def tend(self):
+ return self.tstart + self.duration
+
+ @property
+ def energy(self):
+ return self.power * self.duration
+
+ def __str__(self):
+ return f't={self.tstart}, P={self.power}, tau={self.duration}, phi={self.phase}, lambda={self.wavelength}, id={self.id}'
+
+ def _cmp_key(self):
+ return (self.tstart, self.id)
+
+ def __lt__(self, rhs):
+ return self._cmp_key() < rhs._cmp_key()
+
+ # def __le__(self, rhs):
+ # return self.tstart <= rhs.tstart
+ #
+ # def __gt__(self, rhs):
+ # return rhs < self
+ #
+ # def __ge__(self, rhs):
+ # return rhs <= self
+
+ def __eq__(self, rhs):
+ #return self.tstart == rhs.tstart
+ return self._cmp_key() == rhs._cmp_key()
+ # return (self.power == rhs.power
+ # and self.duration == rhs.duration
+ # and self.phase == rhs.phase
+ # and self.tstart == rhs.tstart
+ # and self.wavelength == rhs.wavelength
+ # )
+
+ # def __neq__(self, rhs):
+ # return not self == rhs
+
+ def intersects(lhs, rhs):
+ # sort by tstart
+ #pulses = sorted([lhs, rhs], key=lambda x: x.tstart)
+
+ # if they don't interfere
+ if lhs.tstart <= rhs.tstart and lhs.tend - rhs.tstart > 1e-20:
+ return True
+ if rhs.tstart <= lhs.tstart and rhs.tend - lhs.tstart > 1e-20:
+ return True
+
+ return False
+
+ def __add__(lhs, rhs):
+ # sort by tstart
+ pulses = sorted([lhs, rhs])
+
+ assert(pulses[0].tstart <= pulses[1].tstart)
+
+ # if they don't interfere, return both pulses
+ if pulses[0].tend <= pulses[1].tstart:
+ return pulses
+
+ if pulses[0].wavelength != pulses[1].wavelength:
+ raise ValueError('Cannot handle addition of pulses of different frequencies with this class')
+
+ #print(f'Summing pulses with timestamps {pulses[0].tstart} and {pulses[1].tstart}')
+ wavelength = pulses[0].wavelength
+
+ phi1 = pulses[0].phase
+ P1 = pulses[0].power
+ A1 = np.sqrt(P1)
+
+ phi2 = pulses[1].phase
+ P2 = pulses[1].power
+ A2 = np.sqrt(P2)
+
+ dphi = phi2 - phi1
+
+ #print(f'dphi = {np.mod(dphi,2*pi)/pi:.3f}*pi')
+ #print(f'dphi/2 = {np.mod(dphi/2,2*pi)/pi:.3f}*pi')
+ #print(f'cos(dphi/2) = {np.cos(dphi/2)}')
+ A_sum = (A1 + A2) * np.cos(dphi/2) - 1j * (A1 - A2) * np.sin(dphi/2)
+ #P_sum = np.real(A_sum * np.conj(A_sum))
+ P_sum = np.abs(A_sum) ** 2
+ phi_sum = (phi1 + phi2) / 2 + np.angle(A_sum)
+
+ last_pulse = 1
+ if pulses[0].tend > pulses[1].tend:
+ last_pulse = 0
+
+ tstart_pre = pulses[0].tstart
+ tstart_sum = pulses[1].tstart
+ tstart_post = pulses[not last_pulse].tend
+
+ duration_pre = tstart_sum - tstart_pre
+ duration_sum = tstart_post - tstart_sum
+ duration_post = pulses[last_pulse].tend - tstart_post
+
+ P_post = [P1, P2][last_pulse]
+ phi_post = [phi1, phi2][last_pulse]
+
+ assert(duration_pre >= 0)
+ assert(duration_sum >= 0)
+ assert(duration_post >= 0)
+
+ result = []
+ if duration_pre > 0:
+ result.append(Pulse(P1, duration_pre, phi1, tstart_pre, wavelength))
+
+ result.append(Pulse(P_sum, duration_sum, phi_sum, tstart_sum, wavelength))
+
+ if duration_post > 0:
+ result.append(Pulse(P_post, duration_post, phi_post, tstart_post, wavelength))
+
+ return result
+
+ @classmethod
+ def sort_by_tstart(cls, pulses):
+ return sorted(pulses)
+
+
+class PulseAggreg():
+ def __init__(self, pulses):
+ self.reduced = False
+ self.pulses = pulses
+ heapq.heapify(self.pulses)
+ self.sort_pulses_by_tstart()
+ # print(str(self))
+
+ def sort_pulses_by_tstart(self):
+ #heapq.heapify(self.pulses)
+ self.pulses = Pulse.sort_by_tstart(self.pulses)
+ pass
+
+ @property
+ def has_intersections(self):
+ if self.reduced:
+ return False
+
+ heapq.heapify(self.pulses)
+ for i,p in enumerate(self.pulses[:-1]):
+ p2 = self.pulses[i+1]
+ if p.intersects(p2):
+ return True
+ # for i,p in enumerate(self.pulses[:-1]):
+ # for i2,p2 in enumerate(self.pulses[i+1:]):
+ # if p.intersects(p2):
+ # return True
+ return False
+
+ def reduce_pulses_coherent(self):
+ if not self.has_intersections:
+ self.reduced = True
+ return
+
+ pulses = self.pulses
+ pulses_new = []
+
+ n = len(pulses)
+ i = 0
+ print('Reducing to independent pulses...')
+ while len(pulses) > 1:
+ print(f'\r{100*(1-len(pulses)/n):.0f}% ({len(pulses)} pulses left)', end='')
+ #pulses = Pulse.sort_by_tstart(pulses)
+ p0 = heapq.heappop(pulses)
+ p1 = heapq.heappop(pulses)
+
+ if p0.intersects(p1):
+ resulting_pulses = p0 + p1
+ #heapq.heappop(pulses)
+ # print(p0)
+ # print(p1)
+ # print('-->')
+ for px in resulting_pulses:
+ heapq.heappush(pulses, px)
+ #heapq.heappush(pulses_new, resulting_pulses[0])
+ # print(px)
+ # print(' ')
+ else:
+ heapq.heappush(pulses_new, p0)
+ heapq.heappush(pulses, p1)
+
+
+ if len(pulses) == 1:
+ heapq.heappush(pulses_new, heapq.heappop(pulses))
+
+ print(f'\r{100*(1-len(pulses)/n):.0f}% ({len(pulses)} pulses left)')
+ self.pulses = pulses_new
+
+ print('Checking...')
+ if self.has_intersections:
+ raise RuntimeError('Impossible to reduce pulse list')
+
+ with open('NonIntersectingPulses.obj', 'wb') as f:
+ pickle.dump(self, f)
+
+ print('Done')
+ self.reduced = True
+
+ def __str__(self):
+ ret = '\n'.join([str(p) for p in list(self.pulses)])
+ return ret
+
+ @property
+ def energy(self):
+ if self.has_intersections:
+ self.reduce_pulses_coherent()
+ return np.sum([p.energy for p in self.pulses])
+
+
+ def to_waveform(self, dt, coherent=True, tmax=None):
+ if self.has_intersections:
+ self.reduce_pulses_coherent()
+
+ #print(np.min([p.duration for p in self.pulses]))
+ #print(np.max([p.power for p in self.pulses]))
+ #print(np.min([p.power for p in self.pulses]))
+ #print(str(self))
+ #print(self.energy)
+
+ if tmax == None:
+ tmax = self.pulses[-1].tend
+
+ t = np.arange(0, tmax, dt)
+ Pout = np.zeros(len(t))
+
+ for p in self.pulses:
+ # itmin = int(np.ceil(p.tstart / dt))
+ # itmax = int(np.ceil(p.tend / dt) + 1)
+ Pout[np.logical_and(t >= p.tstart, t < p.tend)] = p.power
+ #Pout[itmin:itmax] = p.power
+
+ return t, Pout
+
+ def to_waveform_2(self, coherent=True):
+ if self.has_intersections:
+ self.reduce_pulses_coherent()
+
+ #print(self.energy)
+
+ t = [0]
+ Pout = [0]
+
+ for p in self.pulses:
+ if p.duration < 1e-20:
+ continue
+ if p.tstart - t[-1] > 1e-20:
+ t.append(t[-1])
+ Pout.append(0)
+ t.append(p.tstart)
+ Pout.append(0)
+ t.append(p.tstart)
+ Pout.append(p.power)
+ t.append(p.tend)
+ Pout.append(p.power)
+
+ return np.array(t), np.array(Pout)
+
+ def plot_waveform(self, dt, title=None, tmax=None):
+ print(f'Mapping to timeseries ({len(self.pulses)} pulses to process)')
+ #t, Pout = self.to_waveform(dt, tmax=tmax)
+ t, Pout = self.to_waveform_2()
+ print('Done')
+
+ with open('Pout.obj', 'wb') as f:
+ pickle.dump((t,Pout), f)
+
+ linespec='-'
+ if title is not None and '.bk' in title:
+ linespec='--'
+ plt.plot(1e9*t, 1e3*Pout, linespec, label=title)
+ if tmax is not None:
+ plt.xlim([0, 1e9*tmax])
+ #plt.title(title)
+ plt.xlabel('t (ns)')
+ plt.ylabel('Pout (mW)')
+ plt.savefig('Pout.png', dpi=300)
+ plt.grid('major')
+ plt.grid('minor')
+ plt.legend()
+
+
+def main(filename='detector_trace.txt', override_lambda=None):
+ pulses = []
+ tmax = 0
+ taumin = 1
+
+ with open(filename, 'r') as f:
+ print('Reading trace file...')
+ fieldnames = [h.strip() for h in next(csv.reader(f))]
+
+ reader = csv.DictReader(f, fieldnames=fieldnames)
+ for (i, row) in enumerate(reader):
+ # if i > 470:
+ # break
+ #power = np.round(float(row['P (W)']), 12)
+ power = float(row['P (W)'])
+ #tau = np.round(float(row['tau (s)']), 16)
+ tau = float(row['tau (s)'])
+ phase = float(row['phi (rad)'])
+ #tstart = np.round(float(row['t (s)']), 16)
+ tstart = float(row['t (s)'])
+ wavelength = np.round(float(row['lambda (m)']), 12)
+ if override_lambda is not None:
+ wavelength = override_lambda
+ sig_id = int(row['id'])
+
+ #if tau < 1e-16: continue
+
+ #print(wavelength)
+ p = Pulse(power, tau, phase, tstart, wavelength, sig_id)
+ pulses.append(p)
+ #tmax = max(tmax, p.tend)
+ taumin = min(taumin, tau)
+
+ print(f'Smallest pulse duration: {taumin}')
+ pulses = PulseAggreg(pulses)
+ print(f'Some pulses intersect: {pulses.has_intersections}')
+ pulses.reduce_pulses_coherent()
+
+ #t = np.arange(0, tmax, 10e-12)
+ #dt = 10e-12
+ dt = 20e-12
+ print(f'Total energy: {pulses.energy}')
+ return pulses
+
+def create_bitstream(n):
+ rng = np.random.default_rng()
+ bitstream = rng.integers(low=0, high=2, size=n)
+ return bitstream
+
+def xor_bitstream(bitstream):
+ bitstream_a = bitstream
+ bitstream_b = [0, *bitstream_a]
+ bitstream = [a ^ b for a, b in zip(bitstream_a, bitstream_b)]
+ return bitstream
+
+def bitstream_as_values(bitstream, nbits_per_value=8, pad_with=0):
+ padding_length = nbits_per_value - (len(bitstream) % nbits_per_value)
+ bitstream = [*bitstream, *[pad_with for i in range(padding_length)]]
+
+ values = []
+ for i in range(len(bitstream) // nbits_per_value):
+ values.append(int(''.join([str(b) for b in bitstream[i:i+nbits_per_value]]), 2))
+ return values
+
+def test_bitstreams():
+ bs = create_bitstream(20)
+ bs_xor = xor_bitstream(bs)
+ values_1bit = bitstream_as_values(bs, 1)
+ values_2bit = bitstream_as_values(bs, 2)
+
+ plt.figure()
+ plt.subplot(2,2,1)
+ plt.plot(bs)
+ plt.subplot(2,2,2)
+ plt.plot(bs_xor)
+ plt.subplot(2,2,3)
+ plt.plot(values_1bit)
+ plt.subplot(2,2,4)
+ plt.plot(values_2bit)
+ plt.show()
+
+def create_random_bitstream_file(filename, nbits=3000, nbits_per_value=8):
+ bs = create_bitstream(nbits)
+ #bs_xor = xor_bitstream(bs)
+ values = bitstream_as_values(bs, nbits_per_value)
+ with open(filename, 'w') as f:
+ f.write(' '.join([str(v) for v in values]))
+
+def compare_Pout_vecs():
+ with open('Pout_nosort.obj', 'r') as f:
+ data = pickle.load(f)
+ t_sort, Pout_sort = pickle.load(open('Pout_sort.obj'))
+
+ assert(len(Pout_sort) == len(Pout_nosort))
+ for t, p1, p2 in zip(t_nosort, Pout_nosort, Pout):
+ assert(p1 == p2)
+
+if __name__ == '__main__':
+ print(waveguide_length_for_phase_shift(2*pi, 1550e-9, 2.2111))
+ print(waveguide_length_for_phase_shift(pi, 1550e-9, 2.2111))
+ print(waveguide_length_for_phase_shift(1, 1550e-9, 2.2111))
+
+ a = waveguide_length_for_phase_shift(2*pi, 1551e-9, 2.2111)
+ b = waveguide_length_for_phase_shift(pi, 1551e-9, 2.2111)
+ print(a)
+ print(b)
+ print(500*a+b)
+ #exit(0)
+ # print(700*waveguide_length_for_phase_shift(2*pi, 1550e-9, 2.2111))
+ # compare_Pout_vecs()
+ if len(sys.argv) > 1:
+ P = []
+ for fn in sys.argv[1:]:
+ P.append(main(filename=fn))
+ P[-1].plot_waveform(1e-13,title=fn, tmax=2.5e-9)
+
+ if len(sys.argv) > 2:
+ plt.figure()
+ f0 = P[0].to_waveform(1e-13, tmax=2.5e-9)
+ f1 = P[1].to_waveform(1e-13, tmax=2.5e-9)
+ plt.plot(f0[0], f1[1] - f0[1])
+ plt.show()
+ else:
+ main()
+ plt.show()
+ #test_bitstreams()
+ #create_random_bitstream_file('bitstream.txt', 3000)
diff --git a/utils/draw_graph_from_json.py b/utils/draw_graph_from_json.py
new file mode 100644
index 0000000..78a3c64
--- /dev/null
+++ b/utils/draw_graph_from_json.py
@@ -0,0 +1,145 @@
+import sys
+import json
+import html
+import graphviz
+
+def shorten(s, length=8):
+ if type(s) == list:
+ return "[...]"
+ s = str(s)
+ if len(s) > length:
+ return s[:length-3]
+ else:
+ return s
+
+def edge_label(name, net):
+ bgcolors = {
+ "default": "white",
+ "OANALOG": "turquoise",
+ "EANALOG": "orange",
+ }
+ try:
+ bgcolor = bgcolors[net["type"]]
+ except:
+ bgcolor = bgcolors["default"]
+
+ short_name = name
+ if short_name.startswith('ROOT/'):
+ short_name = short_name[5:]
+
+ attributes = [f'<table style="rounded" border="0" cellborder="1" cellspacing="10" bgcolor="{bgcolor}" cellpadding="4" align="center">']
+ attributes.append(f'<tr><td bgcolor="grey91" port="head"><b>{html.escape(short_name)}</b></td></tr>')
+
+ attributes.append(f'<tr><td bgcolor="{bgcolor}" port="middle" border="0"><table border="0" cellborder="1" cellspacing="0">')
+ # attributes.append(f'<tr><td bgcolor="{bgcolor}"><table border="0" cellborder="1" cellspacing="0" cellpadding="0">')
+ attributes.append(f'<tr><td bgcolor="grey91">Type</td><td bgcolor="white">{net["type"]}</td></tr>')
+ attributes.append(f'<tr><td bgcolor="grey91">Bidirectional</td><td bgcolor="white">{"true" if net["bidirectional"] else "false"}</td></tr>')
+ attributes.append(f'<tr><td bgcolor="grey91">Size</td><td bgcolor="white">{net["size"]}</td></tr>')
+ attributes.append(f'<tr><td bgcolor="grey91">Readers</td><td bgcolor="white">{net["readers"]}</td></tr>')
+ attributes.append(f'<tr><td bgcolor="grey91">Writers</td><td bgcolor="white">{net["writers"]}</td></tr>')
+ attributes.append(f'</table></td></tr>')
+
+ attributes.append('</table>')
+ return f'"{name}" [label=<{"".join(attributes)}> shape=none fillcolor="{bgcolor}" margin="0.05"]'
+
+
+
+def node_label(element):
+ attributes = ['<table border="0" cellborder="1" cellspacing="0" cellpadding="4" align="center">']
+
+ short_name = element["name"]
+ if short_name.startswith('ROOT/'):
+ short_name = short_name[5:]
+ # Header
+ attributes.append(f'<tr><td bgcolor="grey91"><b>{html.escape(short_name)}</b></td></tr>')
+
+ # Nets
+ attributes.append(f'<tr><td bgcolor="darkslategray2"><table border="0" cellborder="1" cellspacing="8">')
+ if 'nets' in element and element['nets']:
+ nets = ''.join(f'<tr><td bgcolor="white" cellpadding="4" port="{html.escape(str(i))}">{str(i)}</td></tr>' for i,net in enumerate(element['nets']))
+ attributes.append(f'{nets}')
+ else:
+ attributes.append('<tr><td border="0" cellpadding="0">&empty;</td></tr>')
+ attributes.append(f'</table></td></tr>')
+
+ # Args
+ attributes.append(f'<tr><td bgcolor="palegreen"><table border="0" cellborder="1" cellpadding="2" cellspacing="0">')
+ if 'args' in element and element['args']:
+ args = ''.join(f'<tr><td bgcolor="white" cellpadding="4">{html.escape(shorten(v["value"]))}</td></tr>' for v in element['args'])
+ attributes.append(f'{args}')
+ else:
+ attributes.append('<tr><td border="0" cellpadding="0">&empty;</td></tr>')
+ attributes.append(f'</table></td></tr>')
+
+ # Kwargs
+ attributes.append(f'<tr><td bgcolor="wheat"><table border="0" cellborder="1" cellpadding="2" cellspacing="0">')
+ if 'kwargs' in element and element['kwargs']:
+ kwargs = ''.join(f'<tr><td bgcolor="grey91">{html.escape(k)}</td><td bgcolor="white">{html.escape(shorten(v["value"]))}</td></tr>' for k, v in element['kwargs'].items())
+ attributes.append(f'{kwargs}')
+ else:
+ attributes.append('<tr><td border="0" cellpadding="0">&empty;</td></tr>')
+ attributes.append(f'</table></td></tr>')
+
+ attributes.append('</table>')
+ return f'"{element["name"]}" [label=<{"".join(attributes)}> shape=none margin="0"]'
+
+def edge(element):
+ if 'nets' in element:
+ for i,net in enumerate(element['nets']):
+ # yield f'"{element["name"]}":"{str(i)}" -- "{net}":"head"'
+ yield f'"{element["name"]}":"{str(i)}" -> "{net}":"middle"[ arrowhead = none ]'
+
+def generate_graph(description):
+ result = []
+ result.append('digraph G {')
+ # result.append(' fontname="Helvetica,Arial,sans-serif"')
+ # result.append(' node [fontname="Helvetica,Arial,sans-serif"]')
+ # result.append(' edge [fontname="Helvetica,Arial,sans-serif"]')
+ result.append(' fontname="Cascadia,Courrier,mono"')
+ result.append(' node [fontname="Cascadia,Courrier,mono"]')
+ result.append(' edge [fontname="Cascadia,Courrier,mono"]')
+ result.append(' layout="sfdp"')
+ result.append(' overlap=false')
+ result.append(' splines=curved')
+
+ for name, net in description["nets"].items():
+ result.append(' ' + edge_label(name, net))
+
+ for element in description["elements"]:
+ result.append(' ' + node_label(element))
+ result.extend(' ' + e for e in edge(element))
+
+ result.append('}')
+ return '\n'.join(result)
+
+def draw_graph(json_file, out_file):
+ with open(json_file) as f:
+ description = json.load(f)
+
+ dot_src = generate_graph(description)
+ # print(dot_src)
+ graph = graphviz.Source(dot_src)
+ graph.render(outfile=out_file)
+ print(f'Results written to {out_file}')
+
+def main():
+ try:
+ json_file = sys.argv[1]
+ except IndexError:
+ print('First and only argument should be a JSON description of the circuit')
+ try:
+ out_file = sys.argv[2]
+ except IndexError:
+ out_file = json_file + ".png"
+
+ with open(json_file) as f:
+ description = json.load(f)
+
+ dot_src = generate_graph(description)
+ # print(dot_src)
+ graph = graphviz.Source(dot_src)
+ graph.render(outfile=out_file)
+ print(f'Results written to {out_file}')
+
+if __name__ == '__main__':
+ main()
diff --git a/utils/openwave.sh b/utils/openwave.sh
new file mode 100644
index 0000000..9c59d1a
--- /dev/null
+++ b/utils/openwave.sh
@@ -0,0 +1,55 @@
+#!/bin/env bash
+
+trace_file=$1
+config_dir=$2
+
+if [[ -d $config_dir && ! -z "$(ls $config_dir)" ]]; then
+ configs=("`find $config_dir -iname '*.gtkw' -printf '%p '`")
+ configs=(${configs[*]})
+
+ # Check number of config file found
+ if [ ${#configs[*]} -eq 1 ]; then
+ # Only one file: run with it
+ echo -e "Going with the only gtkwave config found: ${configs[0]}."
+ echo "gtkwave -a \"${configs[0]}\" \"$1\""
+ gtkwave -a "${configs[0]}" "$1"
+ else
+ # Several configs found, ask which to use
+ echo "Found the following ${#configs[*]} gtkwave configs:"
+ let "i = 1"
+ echo -e "0:\tNone"
+ for config in ${configs[*]}; do
+ echo -e "$i:\t\"$config\""
+ let "i = ++i"
+ done
+
+ echo -n "Your choice ? [0]: "
+
+ # declare the choice variable as an integer
+ declare -i choice
+ declare -i i_config
+ read choice
+ let "i_config = choice - 1"
+
+ while [[ $choice -lt 0 || $i_config -ge ${#configs} ]]; do
+ echo -n "Out of bounds. Your choice ? [0]: "
+ read choice
+ let "i_config = choice - 1"
+ done
+
+ if [[ $choice -eq 0 ]]; then
+ echo "Not using any config file."
+ echo "gtkwave \"$1\""
+ gtkwave "$1"
+ else
+ echo "Going with ${configs[$i_config]} ($choice)."
+ echo "gtkwave -a \"${configs[$i_config]}\" \"$1\""
+ gtkwave -a "${configs[$i_config]}" "$1"
+ fi
+ fi
+else
+ #No config
+ echo "No gtkwave configs found."
+ echo "gtkwave \"$1\""
+ gtkwave "$1"
+fi
diff --git a/utils/specs.kicad_sym b/utils/specs.kicad_sym
new file mode 100644
index 0000000..3b84b6f
--- /dev/null
+++ b/utils/specs.kicad_sym
@@ -0,0 +1,1986 @@
+(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
+ (symbol "ADD_DROP_FILTER" (in_bom yes) (on_board yes)
+ (property "Reference" "ADROP" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at -1.524 6.858 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3 4=4" (at -0.254 6.858 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "neff=1 ng=1 k1=0.5 k2=0.5 radius=10e-6 att=0" (at 0 -5.08 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "ADD_DROP_FILTER_0_0"
+ (text "" (at -3.556 1.524 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ )
+ (symbol "ADD_DROP_FILTER_0_1"
+ (rectangle (start -3.81 -2.286) (end 3.81 -2.794)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -3.81 2.794) (end 3.81 2.286)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 0) (radius 1.016)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 0) (radius 1.524)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "ADD_DROP_FILTER_1_1"
+ (pin input line (at -6.35 2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at -6.35 -2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 -2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "4" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "ALL_PASS_FILTER" (in_bom yes) (on_board yes)
+ (property "Reference" "APASS" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "neff=1 ng=1 k=0.5 radius=10e-6 att=0" (at 0 -5.08 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "ALL_PASS_FILTER_0_1"
+ (rectangle (start -3.81 0.254) (end 3.81 -0.254)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 2.032) (radius 1.016)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 2.032) (radius 1.524)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "ALL_PASS_FILTER_1_1"
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "CROSSING" (in_bom yes) (on_board yes)
+ (property "Reference" "CROSSING" (at 5.334 4.826 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -0.254 6.858 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "att=0 crosstalk=0" (at 9.652 -4.826 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3 4=4" (at -0.762 0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "CROSSING_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "CROSSING_1_1"
+ (polyline
+ (pts
+ (xy -3.81 0.254)
+ (xy -0.254 0.254)
+ (xy -0.254 3.81)
+ (xy 0.254 3.81)
+ (xy 0.254 0.254)
+ (xy 3.81 0.254)
+ (xy 3.81 -0.254)
+ (xy 0.254 -0.254)
+ (xy 0.254 -3.81)
+ (xy -0.254 -3.81)
+ (xy -0.254 -0.254)
+ (xy -3.81 -0.254)
+ (xy -3.81 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 0 -6.35 90) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "4" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "CW_SOURCE" (in_bom yes) (on_board yes)
+ (property "Reference" "CWSRC" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "wl=1550e-9 power=1" (at -0.254 -5.588 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "CW_SOURCE_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.524 -1.27)
+ (xy 1.524 -1.27)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -1.27)
+ (xy 0 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 1.016)
+ (xy 0 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.778 1.524)
+ (xy 2.286 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.778 2.286)
+ (xy 2.286 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.032)
+ (xy 2.032 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.032)
+ (xy 2.286 1.778)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.794)
+ (xy 2.032 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.794)
+ (xy 2.286 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -1.27)
+ (xy -1.524 1.016)
+ (xy 1.524 1.016)
+ (xy 0 -1.27)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "CW_SOURCE_1_1"
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "DETECTOR" (in_bom yes) (on_board yes)
+ (property "Reference" "PDET" (at -6.35 3.048 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -0.508 3.556 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -0.508 3.556 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -0.508 3.556 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "r=1 ts=1e-12" (at 0 -5.334 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (symbol "DETECTOR_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.286 0.254)
+ (xy -1.778 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.159 0.889)
+ (xy -1.651 0.381)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 -0.254)
+ (xy -2.032 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 -0.254)
+ (xy -1.778 0)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.651 0.381)
+ (xy -1.905 0.381)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.651 0.381)
+ (xy -1.651 0.635)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -3.048)
+ (xy 0.254 -3.048)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.127 -3.302)
+ (xy 0.127 -3.302)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -2.794)
+ (xy -0.508 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -2.794)
+ (xy 0.508 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -1.27)
+ (xy 0 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 1.016)
+ (xy 0 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 2.54)
+ (xy 0 3.81)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.524 1.016)
+ (xy -1.524 1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 1.016)
+ (xy 1.524 -1.27)
+ (xy -1.524 -1.27)
+ (xy 0 1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "DETECTOR_1_1"
+ (text "Electric" (at 2.032 6.35 0)
+ (effects (font (face "KiCad Font") (size 0.5 0.5)))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "DIRECTIONAL_COUPLER" (in_bom yes) (on_board yes)
+ (property "Reference" "COUPLER" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3 4=4" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "k=0.5" (at 0 -5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (symbol "DIRECTIONAL_COUPLER_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.81 -2.286)
+ (xy -3.048 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.81 2.286)
+ (xy -3.048 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.81 2.794)
+ (xy -3.048 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 -2.286)
+ (xy 3.048 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 2.286)
+ (xy 3.048 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 2.794)
+ (xy 3.048 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.048 2.286)
+ (xy -1.016 0.254)
+ (xy 1.016 0.254)
+ (xy 3.048 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.048 -2.286)
+ (xy 1.016 -0.254)
+ (xy -1.016 -0.254)
+ (xy -3.048 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.81 2.794)
+ (xy -2.794 2.794)
+ (xy -0.762 0.762)
+ (xy 0 0.762)
+ (xy 0.762 0.762)
+ (xy 2.794 2.794)
+ (xy 3.81 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 -2.794)
+ (xy 2.794 -2.794)
+ (xy 0.762 -0.762)
+ (xy 0 -0.762)
+ (xy -0.762 -0.762)
+ (xy -2.794 -2.794)
+ (xy -3.81 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "DIRECTIONAL_COUPLER_1_1"
+ (pin input line (at -6.35 2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at -6.35 -2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 -2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "4" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "ELECTRIC_V_SOURCE_FILE" (in_bom yes) (on_board yes)
+ (property "Reference" "EVLSRC" (at -7.874 2.032 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "values=\"file.txt\"" (at -12.192 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "ELECTRIC_V_SOURCE_FILE_0_1"
+ (polyline
+ (pts
+ (xy -2.032 -1.524)
+ (xy 1.778 -1.524)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 1.778)
+ (xy -1.778 -1.778)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 -6.35)
+ (xy -0.762 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 -2.54)
+ (xy 0.508 -2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 2.54)
+ (xy 0.508 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.858)
+ (xy 0.254 -6.858)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.604)
+ (xy -0.508 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.604)
+ (xy 0.254 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.127 -6.858)
+ (xy 0.127 -6.858)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy -0.508 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy 0 -3.81)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy 0.508 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 3.048)
+ (xy 0 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0.254 -6.604)
+ (xy 0.508 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0.508 -6.35)
+ (xy 0.762 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 1.27)
+ (xy -1.016 1.27)
+ (xy -1.016 0.254)
+ (xy -0.254 0.254)
+ (xy -0.254 -0.508)
+ (xy 0.508 -0.508)
+ (xy 0.508 1.016)
+ (xy 1.27 1.016)
+ (xy 1.27 -1.016)
+ (xy 1.778 -1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 0) (radius 3.776)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "ELECTRIC_V_SOURCE_FILE_1_1"
+ (text "Electric" (at 2.286 6.35 0)
+ (effects (font (face "KiCad Font") (size 0.5 0.5)))
+ )
+ (pin output line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "ELECTRIC_V_SOURCE_LIST" (in_bom yes) (on_board yes)
+ (property "Reference" "EVLSRC" (at -7.874 2.032 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "values=[[t0,p0,1550e-9],[t1,p1,1550e-9]]" (at -25.146 0 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "ELECTRIC_V_SOURCE_LIST_0_1"
+ (polyline
+ (pts
+ (xy -2.032 -1.524)
+ (xy 1.778 -1.524)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 1.778)
+ (xy -1.778 -1.778)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 -6.35)
+ (xy -0.762 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 -2.54)
+ (xy 0.508 -2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 2.54)
+ (xy 0.508 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.858)
+ (xy 0.254 -6.858)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.604)
+ (xy -0.508 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.254 -6.604)
+ (xy 0.254 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.127 -6.858)
+ (xy 0.127 -6.858)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy -0.508 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy 0 -3.81)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 -6.35)
+ (xy 0.508 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 3.048)
+ (xy 0 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0.254 -6.604)
+ (xy 0.508 -6.604)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0.508 -6.35)
+ (xy 0.762 -6.35)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 1.27)
+ (xy -1.016 1.27)
+ (xy -1.016 0.254)
+ (xy -0.254 0.254)
+ (xy -0.254 -0.508)
+ (xy 0.508 -0.508)
+ (xy 0.508 1.016)
+ (xy 1.27 1.016)
+ (xy 1.27 -1.016)
+ (xy 1.778 -1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (circle (center 0 0) (radius 3.776)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "ELECTRIC_V_SOURCE_LIST_1_1"
+ (text "Electric" (at 2.286 6.35 0)
+ (effects (font (face "KiCad Font") (size 0.5 0.5)))
+ )
+ (pin output line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "MERGER" (in_bom yes) (on_board yes)
+ (property "Reference" "MERGER" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "il=0" (at 0 -5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (symbol "MERGER_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -1.016 0.762) (end 0.762 -0.762)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.81 -2.794)
+ (xy -2.794 -2.794)
+ (xy -0.762 -0.762)
+ (xy 0.762 -0.762)
+ (xy 0.762 -0.254)
+ (xy 3.81 -0.254)
+ (xy 3.81 0.254)
+ (xy 0.762 0.254)
+ (xy 0.762 0.762)
+ (xy -0.762 0.762)
+ (xy -2.794 2.794)
+ (xy -3.81 2.794)
+ (xy -3.81 2.286)
+ (xy -3.048 2.286)
+ (xy -1.016 0.254)
+ (xy -1.016 -0.254)
+ (xy -3.048 -2.286)
+ (xy -3.81 -2.286)
+ (xy -3.81 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "MERGER_1_1"
+ (pin input line (at -6.35 2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at -6.35 -2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "MLPROBE" (in_bom yes) (on_board yes)
+ (property "Reference" "MLPROBE" (at 0 5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "wl=[1550e-9, 1560e-9]" (at -0.508 -5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (symbol "MLPROBE_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "MLPROBE_1_1"
+ (polyline
+ (pts
+ (xy -1.524 0.762)
+ (xy -1.27 1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.27 0.508)
+ (xy -1.016 0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.27 0.508)
+ (xy -2.794 2.032)
+ (xy -2.54 2.286)
+ (xy -1.016 0.762)
+ (xy -1.016 0.508)
+ (xy -1.27 0.508)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (text ".vcd" (at 1.016 0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (text "λ" (at 1.016 2.794 0)
+ (effects (font (size 1.27 1.27) (color 61 166 29 1)))
+ )
+ (text "λ" (at 2.032 2.794 0)
+ (effects (font (size 1.27 1.27) (color 255 87 139 1)))
+ )
+ (text "λ" (at 3.048 2.794 0)
+ (effects (font (size 1.27 1.27) (color 101 111 255 1)))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "MZI" (in_bom yes) (on_board yes)
+ (property "Reference" "MZI" (at 0 -5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3 4=4" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "length=1e-6 length_ref=1e-6 neff=2 ng=2 att=0 il_dc=0 il_phaseshifter=0" (at 0 -7.112 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "MZI_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 2.286)
+ (xy 3.556 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "MZI_1_1"
+ (rectangle (start -0.508 3.048) (end 0.508 2.032)
+ (stroke (width 0) (type default) (color 65 164 59 1))
+ (fill (type outline))
+ )
+ (polyline
+ (pts
+ (xy -3.556 -2.286)
+ (xy -3.81 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.302 -2.794)
+ (xy -3.81 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.302 2.794)
+ (xy -3.81 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.54 -0.254)
+ (xy -3.556 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.54 0.254)
+ (xy -1.778 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.286 0.254)
+ (xy -2.032 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.286 0.762)
+ (xy -3.302 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.032 -0.762)
+ (xy -1.016 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.032 -0.254)
+ (xy -2.286 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 -0.254)
+ (xy -2.54 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 0.254)
+ (xy -0.762 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.016 -2.794)
+ (xy -0.508 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.016 2.794)
+ (xy 1.016 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.508 -2.286)
+ (xy 0.762 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 0 3.048)
+ (xy 0 3.81)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.016 -2.794)
+ (xy -0.508 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.778 -0.254)
+ (xy 0.762 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.778 0.254)
+ (xy 2.54 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.032 0.254)
+ (xy 2.286 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.032 0.254)
+ (xy 2.286 0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.032 0.762)
+ (xy 1.016 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 -0.762)
+ (xy 3.302 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 -0.254)
+ (xy 2.032 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.54 -0.254)
+ (xy 1.778 -0.254)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.54 0.254)
+ (xy 3.556 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.302 -2.794)
+ (xy 3.81 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.302 2.794)
+ (xy 3.81 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -3.302 -2.794)
+ (xy -2.286 -0.762)
+ (xy -2.032 -0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.54 0.254)
+ (xy -3.556 2.286)
+ (xy -3.81 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.778 -0.254)
+ (xy -0.762 -2.286)
+ (xy -0.508 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.016 2.794)
+ (xy -2.032 0.762)
+ (xy -2.286 0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -0.762 2.286)
+ (xy 0.508 2.286)
+ (xy 0.762 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.016 -2.794)
+ (xy 2.032 -0.762)
+ (xy 2.286 -0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 1.778 0.254)
+ (xy 0.762 2.286)
+ (xy 0.508 2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.54 -0.254)
+ (xy 3.556 -2.286)
+ (xy 3.81 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.302 2.794)
+ (xy 2.286 0.762)
+ (xy 2.032 0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (text "Electric" (at 2.032 6.35 0)
+ (effects (font (face "KiCad Font") (size 0.5 0.5)))
+ )
+ (pin input line (at -6.35 2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at -6.35 -2.54 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 -2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "4" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "5" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "PCM" (in_bom yes) (on_board yes)
+ (property "Reference" "PCM" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "levels=63" (at -0.254 -5.334 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "PCM_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "PCM_1_1"
+ (rectangle (start -3.81 0.254) (end 3.81 -0.254)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -1.27 0.508) (end 1.27 -0.508)
+ (stroke (width 0) (type default) (color 132 0 132 1))
+ (fill (type outline))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "PROBE" (in_bom yes) (on_board yes)
+ (property "Reference" "PROBE" (at 0 5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "PROBE" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "PROBE_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "PROBE_1_1"
+ (polyline
+ (pts
+ (xy -1.524 0.762)
+ (xy -1.27 1.016)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.27 0.508)
+ (xy -1.016 0.762)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -1.27 0.508)
+ (xy -2.794 2.032)
+ (xy -2.54 2.286)
+ (xy -1.016 0.762)
+ (xy -1.016 0.508)
+ (xy -1.27 0.508)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (text ".vcd" (at 1.016 0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "PSHIFT" (in_bom yes) (on_board yes)
+ (property "Reference" "PSHIFT" (at 0 -4.826 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0.254 2.286 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at 0.254 2.286 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0.254 2.286 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "gain=1 att=0" (at 0 -6.604 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "PSHIFT_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "PSHIFT_1_1"
+ (rectangle (start -3.81 0.254) (end 3.81 -0.254)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -0.762 0.508) (end 0.762 -0.508)
+ (stroke (width 0) (type default) (color 65 164 59 1))
+ (fill (type outline))
+ )
+ (polyline
+ (pts
+ (xy 0 0.508)
+ (xy 0 3.81)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (text "Electric" (at 2.032 6.35 0)
+ (effects (font (face "KiCad Font") (size 0.5 0.5)))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin input line (at 0 6.35 270) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "SPLITTER" (in_bom yes) (on_board yes)
+ (property "Reference" "SPLITTER" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 6.35 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2 3=3" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "il=0 ratio=0.5" (at 0 -5.08 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (symbol "SPLITTER_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (rectangle (start -0.762 0.762) (end 1.016 -0.762)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 3.81 2.794)
+ (xy 2.794 2.794)
+ (xy 0.762 0.762)
+ (xy -0.762 0.762)
+ (xy -0.762 0.254)
+ (xy -3.81 0.254)
+ (xy -3.81 -0.254)
+ (xy -0.762 -0.254)
+ (xy -0.762 -0.762)
+ (xy 0.762 -0.762)
+ (xy 2.794 -2.794)
+ (xy 3.81 -2.794)
+ (xy 3.81 -2.286)
+ (xy 3.048 -2.286)
+ (xy 1.016 -0.254)
+ (xy 1.016 0.254)
+ (xy 3.048 2.286)
+ (xy 3.81 2.286)
+ (xy 3.81 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "SPLITTER_1_1"
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 -2.54 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "3" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "V_SOURCE_FILE" (in_bom yes) (on_board yes)
+ (property "Reference" "VLSRC" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "values=\"file.txt\"" (at -0.254 -5.588 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "V_SOURCE_FILE_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 1.524)
+ (xy 2.794 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.286)
+ (xy 2.794 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.032)
+ (xy 2.54 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.032)
+ (xy 2.794 1.778)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.794)
+ (xy 2.54 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.794)
+ (xy 2.794 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "V_SOURCE_FILE_1_1"
+ (polyline
+ (pts
+ (xy -3.302 -2.286)
+ (xy 2.794 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.794 2.794)
+ (xy -2.794 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.794 -0.508)
+ (xy -1.524 -0.508)
+ (xy -1.524 1.778)
+ (xy -0.508 1.778)
+ (xy -0.508 0.762)
+ (xy 0.762 0.762)
+ (xy 0.762 -1.524)
+ (xy 1.778 -1.524)
+ (xy 1.778 -0.762)
+ (xy 2.794 -0.762)
+ (xy 2.794 -2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "V_SOURCE_LIST" (in_bom yes) (on_board yes)
+ (property "Reference" "VLSRC" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at -19.812 -0.254 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "values=[[t0,p0,1550e-9],[t1,p1,1550e-9]]" (at -0.254 -5.588 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Pins" "1=1" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "V_SOURCE_LIST_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 1.524)
+ (xy 2.794 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.286 2.286)
+ (xy 2.794 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.032)
+ (xy 2.54 2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.032)
+ (xy 2.794 1.778)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.794)
+ (xy 2.54 2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy 2.794 2.794)
+ (xy 2.794 2.54)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "V_SOURCE_LIST_1_1"
+ (polyline
+ (pts
+ (xy -3.302 -2.286)
+ (xy 2.794 -2.286)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.794 2.794)
+ (xy -2.794 -2.794)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (polyline
+ (pts
+ (xy -2.794 -0.508)
+ (xy -1.524 -0.508)
+ (xy -1.524 1.778)
+ (xy -0.508 1.778)
+ (xy -0.508 0.762)
+ (xy 0.762 0.762)
+ (xy 0.762 -1.524)
+ (xy 1.778 -1.524)
+ (xy 1.778 -0.762)
+ (xy 2.794 -0.762)
+ (xy 2.794 -2.032)
+ )
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+ (symbol "WAVEGUIDE" (in_bom yes) (on_board yes)
+ (property "Reference" "WG" (at 0 5.08 0) (do_not_autoplace)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Value" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Footprint" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Datasheet" "" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Params" "length=1e-6 att=0 neff=2 ng=2 d=0" (at -0.254 -5.334 0)
+ (effects (font (size 1.27 1.27)))
+ )
+ (property "Sim.Device" "SPICE" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (property "Sim.Pins" "1=1 2=2" (at 0 0 0)
+ (effects (font (size 1.27 1.27)) hide)
+ )
+ (symbol "WAVEGUIDE_0_1"
+ (rectangle (start -3.81 3.81) (end 3.81 -3.81)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ )
+ (symbol "WAVEGUIDE_1_1"
+ (rectangle (start -3.81 0.254) (end 3.81 -0.254)
+ (stroke (width 0) (type default))
+ (fill (type none))
+ )
+ (pin input line (at -6.35 0 0) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "1" (effects (font (size 1.27 1.27))))
+ )
+ (pin output line (at 6.35 0 180) (length 2.54)
+ (name "" (effects (font (size 1.27 1.27))))
+ (number "2" (effects (font (size 1.27 1.27))))
+ )
+ )
+ )
+)