diff options
Diffstat (limited to 'utils')
| -rw-r--r-- | utils/analyze_detector_trace.py | 444 | ||||
| -rw-r--r-- | utils/draw_graph_from_json.py | 145 | ||||
| -rw-r--r-- | utils/openwave.sh | 55 | ||||
| -rw-r--r-- | utils/specs.kicad_sym | 1986 |
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">∅</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">∅</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">∅</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))))
+ )
+ )
+ )
+)
|
