├── .bump.cfg.nt ├── .coveragerc ├── .github └── workflows │ └── build.yaml ├── .gitignore ├── README.rst ├── clean ├── list-psf ├── psf_utils ├── __init__.py ├── list.py ├── parse.py ├── psf.py └── show.py ├── pyproject.toml ├── pytest.ini ├── samples ├── .psf_file ├── .psf_plot_args ├── TFM201610ALM.sp ├── asereq.dcop ├── dan-zilla.psfascii ├── dcOpInfo.info.psfascii ├── dcswp.dc ├── empty.pnoise ├── escaped-strings.dc ├── fracpole.ac ├── fracpole.dc ├── header.psf ├── joop-banaan.dc ├── joop-banaan.tran ├── phaseMargin.stb ├── pnoise.raw │ ├── aclin.ac │ ├── aclog.ac │ ├── logFile │ ├── noiref.noise │ ├── noiva.noise │ ├── pnoiref.pnoise │ ├── pnoiva.pnoise │ └── pss.td.pss ├── presized_OTA_tb_v2.pz ├── presized_OTA_tb_v2.stb └── rushikesh-dhanaji-phadtare.tran ├── show-psf ├── tests ├── .psf_file ├── .psf_plot_args ├── __init__.py ├── test_psf.nt └── test_psf.py └── tox.ini /.bump.cfg.nt: -------------------------------------------------------------------------------- 1 | major: 1 2 | minor: 9 3 | patch: 0 4 | revision: 0 5 | type: release 6 | files: 7 | pyproject.toml: 8 | version: version 9 | psf_utils/__init__.py: 10 | version: __version__ 11 | date: __released__ 12 | README.rst: 13 | version: Version 14 | date: Released 15 | style: python 16 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [report] 2 | exclude_lines = 3 | pragma: no cover 4 | raise NotImplementedError 5 | 6 | [run] 7 | source = psf_utils 8 | omit = */.tox/* test_psf_utils.py 9 | -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: PSF Utilities 2 | on: [push, pull_request] 3 | jobs: 4 | check-bats-version: 5 | runs-on: ${{ matrix.os }} 6 | strategy: 7 | matrix: 8 | os: [ubuntu-latest] 9 | python-version: ["3.6", "3.x"] 10 | max-parallel: 6 11 | 12 | steps: 13 | - uses: actions/checkout@v2 14 | with: 15 | submodules: true 16 | - name: Set up Python ${{ matrix.python-version }} 17 | uses: actions/setup-node@v2 18 | with: 19 | python-version: ${{ matrix.python-version }} 20 | - name: Install packages 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install . 24 | pip install tox 25 | pip install coveralls 26 | - name: Run tests 27 | run: tox 28 | - name: Report test coverage 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 31 | COVERALLS_SERVICE_NAME: github 32 | run: coveralls 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | psf_utils/parser.out 2 | psf_utils/parsetab.py 3 | psf_utils/lextab.py 4 | samples/*.cache 5 | samples/*/*.cache 6 | .psf_file 7 | .psf_show_args 8 | 9 | # Byte-compiled / optimized / DLL files 10 | __pycache__/ 11 | *.py[cod] 12 | *$py.class 13 | 14 | # Distribution / packaging 15 | .Python 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | lib/ 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | .*.swp 33 | doc/.build 34 | 35 | # PyInstaller 36 | # Usually these files are written by a python script from a template 37 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 38 | *.manifest 39 | *.spec 40 | 41 | # Installer logs 42 | pip-log.txt 43 | pip-delete-this-directory.txt 44 | 45 | # Unit test / coverage reports 46 | htmlcov/ 47 | .tox/ 48 | .coverage 49 | .coverage.* 50 | .cache 51 | nosetests.xml 52 | coverage.xml 53 | *.cover 54 | .hypothesis/ 55 | .pytest_cache/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # pyenv 83 | .python-version 84 | 85 | # celery beat schedule file 86 | celerybeat-schedule 87 | 88 | # SageMath parsed files 89 | *.sage.py 90 | 91 | # Environments 92 | .env 93 | .venv 94 | env/ 95 | venv/ 96 | ENV/ 97 | env.bak/ 98 | venv.bak/ 99 | 100 | # Spyder project settings 101 | .spyderproject 102 | .spyproject 103 | 104 | # Rope project settings 105 | .ropeproject 106 | 107 | # mkdocs documentation 108 | /site 109 | 110 | # mypy 111 | .mypy_cache/ 112 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | PSF Utilities — Read Spectre Data Files 2 | ======================================= 3 | 4 | .. image:: 5 | https://github.com/KenKundert/psf_utils/actions/workflows/build.yaml/badge.svg 6 | :target: https://github.com/KenKundert/psf_utils/actions/workflows/build.yaml 7 | 8 | .. image:: https://pepy.tech/badge/psf_utils/month 9 | :target: https://pepy.tech/project/psf_utils 10 | 11 | .. image:: https://img.shields.io/pypi/v/psf_utils.svg 12 | :target: https://pypi.python.org/pypi/psf_utils 13 | 14 | .. image:: https://img.shields.io/pypi/pyversions/psf_utils.svg 15 | :target: https://pypi.python.org/pypi/psf_utils/ 16 | 17 | :Author: Ken Kundert 18 | :Version: 1.9 19 | :Released: 2025-04-08 20 | 21 | 22 | What? 23 | ----- 24 | 25 | *psf_utils* is a library that allows you to read data from a Spectre PSF ASCII 26 | file. Spectre is a commercial circuit simulator produced by Cadence Design 27 | Systems. PSF files contain signals generated by Spectre. This package also 28 | contains two programs that are useful in their own right, but also act as 29 | demonstrators as to how to use the library. They are *list-psf* and *show-psf*. 30 | The first lists the available signals in a file, and the other displays them. 31 | 32 | 33 | Accessing the Results 34 | --------------------- 35 | 36 | You can use the PSF class to read ASCII Parameter Storage Format files. When 37 | instantiating the class you pass in the path to the file and then the resulting 38 | PSF object contains the signals. For example, the following lists the signals 39 | present in a ASCII PSF file:: 40 | 41 | from psf_utils import PSF 42 | from inform import Error, display 43 | 44 | kinds = { 45 | 'float double': 'real', 46 | 'float complex': 'complex', 47 | } 48 | 49 | try: 50 | psf = PSF('adc.raw/tran.tran') 51 | 52 | for signal in psf.all_signals(): 53 | kind = signal.type.kind 54 | kind = kinds.get(kind, kind) 55 | display(f'{signal.name:<15} {signal.units:<12} {kind}') 56 | except Error as e: 57 | e.terminate() 58 | 59 | This example plots the output signal:: 60 | 61 | from psf_utils import PSF 62 | from inform import Error, display 63 | import matplotlib.pyplot as plt 64 | 65 | try: 66 | psf = PSF('adc.raw/tran.tran') 67 | sweep = psf.get_sweep() 68 | out = psf.get_signal('out') 69 | 70 | figure = plt.figure() 71 | axes = figure.add_subplot(1,1,1) 72 | axes.plot(sweep.abscissa, out.ordinate, linewidth=2, label=out.name) 73 | axes.set_title('ADC Output') 74 | axes.set_xlabel(f'{sweep.name} ({PSF.units_to_unicode(sweep.units)})') 75 | axes.set_ylabel(f'{out.name} ({PSF.units_to_unicode(out.units)})') 76 | plt.show() 77 | except Error as e: 78 | e.terminate() 79 | 80 | *abscissa* and *ordinate* are NumPy arrays. As such, you can perform 81 | computation with them:: 82 | 83 | out = out_p.ordinate - out_n.ordinate 84 | 85 | from numpy import sin 86 | sine = sin(sweep.abscissa) 87 | 88 | Reading large ASCII data files is slow, so *psf_utils* reads the PSF file once, 89 | then pickles the data and writes it to disk. On subsequent runs the pickled data 90 | is used if the pickle file is newer that the corresponding PSF file. 91 | 92 | Things are a bit different for DC operating point results. In this case, *sweep* 93 | is None and the results are scalar `quantities 94 | `_:: 95 | 96 | from psf_utils import PSF, Quantity 97 | 98 | psf = PSF('opamp.raw/op.dc') 99 | with Quantity.prefs(map_sf=Quantity.map_sf_to_greek): 100 | for signal in sorted(psf.all_signals(), key=lambda s: s.name): 101 | name = f'{signal.access}({signal.name})' 102 | print(f'{name:>20} = {signal.ordinate}') 103 | 104 | 105 | Utility Programs 106 | ---------------- 107 | 108 | Two utility programs are installed along with the *psf_utils* library: 109 | *list-psf* and *show-psf*. The first lists the signals available from a PSF 110 | file, and the second displays them. They both employ caching to speed up access 111 | to the data. They also cache the name of the PSF file so that it need not be 112 | given every time. *show-psf* also caches its arguments, so if you run it again 113 | with no arguments it will simply repeat what it did last time. For example, here 114 | is a typical session:: 115 | 116 | # list the signals in noise PSF file 117 | > list-psf -f resistor.raw/pnoise.pnoise 118 | Using resistor.raw/pnoise.pnoise. 119 | R1:flicker R1:total R2:fn out 120 | R1:thermal R2:rn R2:total 121 | 122 | # list them again, this time in long form 123 | > list-psf -l 124 | Using resistor.raw/pnoise.pnoise. 125 | R1:flicker A²/Hz real (12042 points) 126 | R1:thermal A²/Hz real (12042 points) 127 | R1:total A²/Hz real (12042 points) 128 | R2:fn A²/Hz real (12042 points) 129 | R2:rn A²/Hz real (12042 points) 130 | R2:total A²/Hz real (12042 points) 131 | out A/√Hz real (12042 points) 132 | 133 | # list only those that match R1:* (assumes nonomatch variable is set in shell) 134 | > list-psf -l R1:* 135 | Using resistor.raw/pnoise.pnoise. 136 | R1:flicker A²/Hz real (12042 points) 137 | R1:thermal A²/Hz real (12042 points) 138 | R1:total A²/Hz real (12042 points) 139 | 140 | # show a graph containing signals that start with R1: 141 | > show-psf R1:* 142 | 143 | # show the thermal noise of R1, and then the total noise minus the flicker noise 144 | > show-psf R1:thermal R1:total-R1:flicker 145 | 146 | > show-psf out # show a graph containing only out 147 | 148 | > show-psf # show out again, exactly as in previous run 149 | 150 | > show-psf -M out # show out again, this time include point markers 151 | 152 | > show-psf -P out # show out again, this time only show point markers 153 | 154 | > show-psf -s out.svg out # send graph of out to svg file 155 | 156 | # list signals in a PSF file from a DC operating point file: 157 | > list-psf -f diffamp.raw/tran.dc 158 | Using diffamp.raw/pnoise.pnoise. 159 | in_n in_p out_n out_p Vdd Vdd:p 160 | 161 | # show the DC voltages 162 | > show-psf \* 163 | V(in_n) = 47.678 µV 164 | V(in_p) = 47.623 µV 165 | V(out_n) = 876.16 µV 166 | V(out_p) = 876.16 µV 167 | V(Vdd) = 2.5 V 168 | I(Vdd:p) = −10.05 µA 169 | 170 | # list signals in transient PSF file 171 | > list-psf -f diffamp.raw/tran.tran 172 | Using diffamp.raw/pnoise.pnoise. 173 | in_n in_p out_n out_p Vdd Vdd:p 174 | 175 | # display differential output and differential input 176 | > show-psf out_p-out_n in_p-in_n 177 | 178 | 179 | Converting to PSF ASCII 180 | ----------------------- 181 | 182 | *psf_utils* only supports PSF ASCII files. As an alternative, `libpsf 183 | `_ is a Python package that can read both ASCII 184 | and binary PSF files. Or, you can use the Cadence *psf* program to convert 185 | various types of simulation results files into PSF ASCII format. To use it, 186 | simply specify the input and output files:: 187 | 188 | > psf -i adc.raw/tran.tran -o adc.raw/tran.psfascii 189 | > list-psf -f adc.raw/tran.psfascii 190 | 191 | In this example there is nothing special about the 'psfascii' suffix, it is 192 | simply mnemonic. Rather, the output is in ASCII format because the ``-b`` 193 | (binary) option is not specified. 194 | 195 | *psf_utils* does not support SST files, which are generated by AMS Designer, 196 | Cadence's mixed-signal simulator. You can recognize SST files in that they come 197 | in pairs, and the two files have ``.dsn`` and ``.trn`` suffixes. In this case, 198 | Cadence's PSF utility cannot help you either. However, you can use the 199 | *simvisdbutil* to convert the data to a CSV file, which would allow you to 200 | access the data, though not with *psf_utils*. For example, the following 201 | converts all waveforms contained in ldo.trn into CSV data:: 202 | 203 | simvisdbutil ldo.trn -csv -timeunits s -output ldo.csv 204 | 205 | 206 | Examples 207 | -------- 208 | 209 | `Flicker Noise `_ is a simulation 210 | script that shows how to write simple Python scripts that run Spectre and use 211 | *psf_utils* to extract and display the desired results. 212 | 213 | 214 | Releases 215 | -------- 216 | 217 | Latest development release 218 | '''''''''''''''''''''''''' 219 | 220 | | Version: 1.9 221 | | Released: 2025-04-08 222 | 223 | 224 | 1.9 (2025-04-08) 225 | '''''''''''''''' 226 | 227 | - Added ``--major-grid`` and ``--minor-grid`` options to show command 228 | - Fixed units on unitless numbers 229 | - Other minor bug fixes 230 | 231 | 232 | 1.8 (2024-01-15) 233 | '''''''''''''''' 234 | 235 | - Fixed issue with *NaN* 236 | 237 | 238 | 1.7 (2023-12-13) 239 | '''''''''''''''' 240 | 241 | - fixed units on terminal currents 242 | - add support for *inf* 243 | - add support for *PZ* and *STB* files 244 | 245 | 246 | 1.6 (2022-09-18) 247 | '''''''''''''''' 248 | 249 | - changed ``--no-cache`` command line option to ``--refresh-cache``. 250 | 251 | 252 | 1.5 (2021-11-11) 253 | '''''''''''''''' 254 | 255 | - Renamed *plot-psf* to *show-psf*. 256 | - Improved support of DC operating points. 257 | - Suppress access function names when printing members of PSF structures. 258 | - Correct invalid units produced by Spectre on oppoint files (I, R, C). 259 | 260 | 261 | 1.4 (2021-10-21) 262 | '''''''''''''''' 263 | 264 | - Allow signal names to contain backslashes. 265 | 266 | 267 | 1.3 (2021-03-21) 268 | 269 | - Improve support for DC operating points. 270 | 271 | 272 | 1.2 (2021-01-07) 273 | '''''''''''''''' 274 | 275 | - Support PSF files that contain DC operating points. 276 | - Support PSF files where values are given in a group. 277 | 278 | 279 | 1.1 (2021-01-30) 280 | '''''''''''''''' 281 | 282 | - Allow, but ignore, properties on traces. 283 | 284 | 285 | 1.0 (2020-11-03) 286 | '''''''''''''''' 287 | 288 | - Production release 289 | 290 | 291 | .. hide the pre-production releases 292 | 293 | **0.7 (2020-09-23)**: 294 | - Add ability to show individual points 295 | - Improve the cursor values display 296 | - Increase precision of both cursor values and axis labels 297 | 298 | **0.6 (2020-04-16)**: 299 | - modest refinements 300 | 301 | **0.5 (2020-01-08)**: 302 | - beta release 303 | 304 | **0.4 (2019-09-26)**: 305 | - Allow glob patterns to be passed to both *list-psf* and *show-psf*. 306 | 307 | **0.3 (2019-09-25)**: 308 | - Fix import errors in *show-psf* command. 309 | 310 | **0.2 (2019-09-25)**: 311 | - Fix dependencies. 312 | 313 | **0.1 (2019-09-25)**: 314 | - Initial version 315 | -------------------------------------------------------------------------------- /clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf build dist psf_utils.egg-info __pycache__ */__pycache__ .tox 4 | rm -f samples/*.cache samples/**/*.cache psf_utils/parser.out 5 | rm -f psf_utils/{lextab.py,parsetab.py} 6 | rm -rf .hypothesis .tox .pytest_cache .coverage htmlcov 7 | rm -rf tests/.hypothesis tests/.pytest_cache tests/.coverage tests/htmlcov 8 | rm -f .psf_file .psf_show_args .test.sum .test.clones.sum 9 | -------------------------------------------------------------------------------- /list-psf: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # local version of list-psf used for debugging and testing purposes. 3 | # this version does not get installed. 4 | 5 | from psf_utils.list import list_signals 6 | list_signals() 7 | -------------------------------------------------------------------------------- /psf_utils/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = '1.9' 2 | __released__ = '2025-04-08' 3 | 4 | from .psf import PSF, UnknownSignal, Quantity 5 | -------------------------------------------------------------------------------- /psf_utils/list.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Usage {{{1 3 | """ 4 | List Signals 5 | 6 | Usage: 7 | list-psf [options] [...] 8 | 9 | Options: 10 | -c, --refresh-cache refresh the cache 11 | -f , --psf-file the path of the ASCII PSF file 12 | -l, --long include signal meta data 13 | -V, --version show version number and exit 14 | 15 | The PSF file need only be given if it differs from the one used previously. 16 | 17 | Reading large ASCII data files is slow, so list-psf reads the PSF file once, 18 | then pickles the data and writes it to disk. On subsequent runs the pickled data 19 | is used if the pickle file is newer that the corresponding PSF file. 20 | """ 21 | 22 | # License {{{1 23 | # Copyright (C) 2018-2023 Kenneth S. Kundert 24 | # 25 | # This program is free software: you can redistribute it and/or modify 26 | # it under the terms of the GNU General Public License as published by 27 | # the Free Software Foundation, either version 3 of the License, or 28 | # (at your option) any later version. 29 | # 30 | # This program is distributed in the hope that it will be useful, 31 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 32 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 33 | # GNU General Public License for more details. 34 | # 35 | # You should have received a copy of the GNU General Public License 36 | # along with this program. If not, see [http://www.gnu.org/licenses/]. 37 | 38 | 39 | # Imports {{{1 40 | from .show import expand_args, get_psf_filename 41 | from .psf import PSF 42 | from . import __version__, __released__ 43 | from docopt import docopt 44 | from inform import Error, columns, display, plural, warn 45 | import warnings 46 | 47 | # Globals {{{1 48 | warnings.filterwarnings('ignore', category=FutureWarning) 49 | saved_psf_file_filename = '.psf_file' 50 | kinds = { 51 | 'float double': 'real', 52 | 'complex double': 'complex', 53 | 'int byte': 'integer', 54 | 'int long': 'integer', 55 | 'int': 'integer', 56 | 'string *': 'string', 57 | } 58 | 59 | 60 | # list_signals() {{{1 61 | def list_signals(): 62 | # Read command line {{{2 63 | cmdline = docopt(__doc__, version=f"{__version__} ({__released__})") 64 | args = cmdline[''] 65 | if not args: 66 | args = ['*'] 67 | psf_file = get_psf_filename(cmdline['--psf-file']) 68 | show_meta = cmdline['--long'] 69 | use_cache = not cmdline['--refresh-cache'] 70 | 71 | # List signals {{{2 72 | try: 73 | psf = PSF(psf_file, sep=':', use_cache=use_cache) 74 | 75 | if show_meta: 76 | nw = uw = kw = 0 # name width, units width, kind width 77 | data = [] 78 | for name in expand_args(psf.signals.keys(), args, allow_diff=False): 79 | if name not in psf.signals: 80 | warn('not found.', culprit=name) 81 | signal = psf.get_signal(name) 82 | if len(signal.name) > nw: 83 | nw = len(signal.name) 84 | units = psf.units_to_unicode(signal.units) 85 | if len(units) > uw: 86 | uw = len(units) 87 | kind = signal.type.kind 88 | kind = kinds.get(kind, kind) 89 | if len(kind) > kw: 90 | kw = len(kind) 91 | 92 | points = None 93 | if kind != 'string': 94 | try: 95 | points = len(signal.ordinate) 96 | except TypeError: 97 | pass 98 | data.append((signal.name, units, kind, points)) 99 | if not data: 100 | raise Error(f'{plural(args):no match/es}.', culprit=args) 101 | for name, units, kind, points in data: 102 | if points is None: 103 | display(f' {name:<{nw}} {units:<{uw}} {kind}') 104 | else: 105 | display(f' {name:<{nw}} {units:<{uw}} {kind:<{kw}} ({points} points)') 106 | else: 107 | signals = expand_args(psf.signals.keys(), args, allow_diff=False) 108 | if not signals: 109 | raise Error(f'{plural(args):no match/es}.', culprit=args) 110 | display(columns(signals)) 111 | except Error as e: 112 | e.terminate() 113 | -------------------------------------------------------------------------------- /psf_utils/parse.py: -------------------------------------------------------------------------------- 1 | """ 2 | Parse ASCII PSF Files 3 | """ 4 | 5 | # License {{{1 6 | # Copyright (C) 2016-2023 Kenneth S. Kundert 7 | # 8 | # This program is free software: you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation, either version 3 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License 19 | # along with this program. If not, see http://www.gnu.org/licenses/. 20 | 21 | 22 | # Imports {{{1 23 | import ply.lex 24 | import ply.yacc 25 | from inform import Info, is_str, is_mapping 26 | 27 | 28 | # Globals {{{1 29 | Filename = None 30 | 31 | 32 | # Utility classes {{{1 33 | class Type(Info): 34 | pass 35 | 36 | 37 | class Struct(Info): 38 | pass 39 | 40 | 41 | class Sweep(Info): 42 | pass 43 | 44 | 45 | class Trace(Info): 46 | pass 47 | 48 | 49 | class Traces(Info): 50 | pass 51 | 52 | 53 | class Value(Info): 54 | pass 55 | 56 | 57 | class Array(Info): 58 | pass 59 | 60 | 61 | # Exceptions {{{1 62 | # ParseError {{{2 63 | class ParseError(Exception): 64 | def __init__(self, text, loc=None): 65 | self.text = text 66 | self.loc = loc 67 | 68 | def __str__(self): 69 | "Return a formatted error message." 70 | if self.loc: 71 | return self.loc.message(Filename, self.text) 72 | if Filename: 73 | return "%s: %s" % (Filename, self.text) 74 | return self.text 75 | 76 | 77 | # Record the location of a token {{{2 78 | class TokenLocation(object): 79 | def __init__(self, token, index=None): 80 | "Records information about the location of a token." 81 | lexdata = token.lexer.lexdata 82 | if index: 83 | lexpos = token.lexpos(index) 84 | else: 85 | lexpos = token.lexpos 86 | bol = lexdata.rfind('\n', 0, lexpos) + 1 87 | if bol < 0: 88 | bol = 0 89 | eol = lexdata.find('\n', lexpos) 90 | if eol < 0: 91 | eol = len(lexdata) 92 | self.line = lexdata[bol:eol] 93 | self.col = (lexpos - bol) 94 | self.row = lexdata[0:lexpos].count('\n') + 1 95 | 96 | def annotateLine(self, prefix=None): 97 | """ 98 | Produces a two or three line result, possibly a prefix, then the line 99 | that contains the token, and then a pointer to the token. If a prefix 100 | is given, it will be printed before the line and will be separated from 101 | the line by ': '. Generally the prefix contains the filename and line 102 | number. 103 | """ 104 | if prefix: 105 | return "%s\n %s\n %s^" % ( 106 | prefix, 107 | self.line, 108 | self.col*' ' 109 | ) 110 | return "%s\n%s^" % (self.line, (self.col-1)*' ') 111 | 112 | def message(self, filename, msg): 113 | """ 114 | Produces a message about the token. The line containing the token is 115 | shown, along with a pointer to the token. Finally the message is 116 | returned. 117 | """ 118 | # if self.row: 119 | # loc = "%s.%s" % (self.row, self.col) 120 | if self.row: 121 | loc = "%s" % (self.row) 122 | else: 123 | loc = "" 124 | if filename: 125 | loc = "%s(%s)" % (filename, loc) 126 | if loc: 127 | return self.annotateLine("%s: %s" % (loc, msg)) 128 | return self.annotateLine(msg) 129 | 130 | 131 | # Lexer {{{1 132 | # Reserved name tokens {{{2 133 | reserved = {rw: rw for rw in [ 134 | 'ARRAY', 135 | 'BYTE', 136 | 'COMPLEX', 137 | 'DOUBLE', 138 | 'END', 139 | 'FLOAT', 140 | 'GROUP', 141 | 'HEADER', 142 | 'INT', 143 | 'LONG', 144 | 'NAN', 145 | 'PROP', 146 | 'STRING', 147 | 'STRUCT', 148 | 'SWEEP', 149 | 'TRACE', 150 | 'TYPE', 151 | 'VALUE', 152 | ]} 153 | tokens = [ 154 | 'INTEGER', 155 | 'REAL', 156 | 'QUOTED_STRING', 157 | ] + list(reserved.values()) 158 | 159 | # Literal tokens {{{2 160 | literals = r'()*' 161 | 162 | # Number tokens {{{2 163 | t_INTEGER = r"-?[0-9]+" 164 | t_REAL = r"[+-]?[0-9]+\.[0-9]*([eE][+-][0-9]+)?" 165 | 166 | 167 | # NaN must be given as a function rather than a simple string. 168 | # Doing so causes Ply to give it priority over keyword recognition 169 | # because it is defined first. 170 | def t_NAN(t): 171 | r"nan|NaN|inf" 172 | t.value = float(t.value) 173 | return t 174 | 175 | 176 | # String tokens {{{2 177 | t_QUOTED_STRING = r'"([^\\\n"]|(\\.))*"' 178 | # The complexity is because of the case "He yelled \"You are a fool!\".". 179 | # The first part says string cannot contain a backslash, newline, or a 180 | # quote. The second case allows backslashes when combined with any other 181 | # character, which allows \" and \\. 182 | 183 | 184 | # Identifier tokens {{{2 185 | def t_ID(t): 186 | r'[A-Z]+' 187 | t.type = reserved.get(t.value) 188 | if t.type is None: 189 | loc = TokenLocation(t) 190 | t.lexer.skip(1) 191 | raise ParseError(f"unknown keyword '{t.value}'.", loc) 192 | return t 193 | 194 | 195 | # Whitespace {{{2 196 | # ignore whitespace 197 | t_ignore = ' \t\n' 198 | 199 | 200 | # Error {{{2 201 | def t_error(t): 202 | c = t.value[0] 203 | loc = TokenLocation(t) 204 | t.lexer.skip(1) 205 | raise ParseError("illegal character '%s'." % c, loc) 206 | 207 | 208 | # Parser rules {{{1 209 | def p_contents(p): 210 | "contents : header_section type_section sweep_section trace_section value_section end" 211 | p[0] = (p[1], p[2], p[3], p[4], p[5]) 212 | 213 | 214 | def p_contents_without_sweep(p): 215 | "contents : header_section type_section value_section end" 216 | p[0] = (p[1], p[2], None, None, p[3]) 217 | 218 | 219 | def p_contents_only_header(p): 220 | "contents : header_section end" 221 | p[0] = (p[1], {}, None, None, {}) 222 | 223 | 224 | def p_header_section(p): 225 | "header_section : HEADER named_values" 226 | p[0] = dict(p[2]) 227 | 228 | 229 | def p_named_values(p): 230 | "named_values : named_values named_value" 231 | p[1].append(p[2]) 232 | p[0] = p[1] 233 | 234 | 235 | def p_named_values_last(p): 236 | "named_values : named_value" 237 | p[0] = [p[1]] 238 | 239 | 240 | def p_named_value(p): 241 | "named_value : string value" 242 | p[0] = (p[1], p[2]) 243 | 244 | 245 | def p_string_value(p): 246 | "value : string" 247 | p[0] = p[1] 248 | 249 | 250 | def p_integer_value(p): 251 | "value : INTEGER" 252 | p[0] = int(p[1]) 253 | 254 | 255 | def p_real_value(p): 256 | """ 257 | value : REAL 258 | | NAN 259 | """ 260 | p[0] = float(p[1]) 261 | 262 | 263 | def p_string(p): 264 | "string : QUOTED_STRING" 265 | p[0] = (p[1][1:-1]).replace('\\', '') 266 | 267 | 268 | def p_star(p): 269 | "star : '*'" 270 | p[0] = p[1] 271 | 272 | 273 | def p_type_section(p): 274 | "type_section : TYPE types" 275 | p[0] = dict(p[2]) 276 | 277 | 278 | def p_types(p): 279 | "types : types type" 280 | p[1].append(p[2]) 281 | p[0] = p[1] 282 | 283 | 284 | def p_types_last(p): 285 | "types : type" 286 | p[0] = [p[1]] 287 | 288 | 289 | def p_type(p): 290 | "type : string kinds" 291 | n = p[1] 292 | meta = {} 293 | kind = ' '.join(s for s in p[2] if is_str(s)).lower() 294 | if kind: 295 | meta['kind'] = kind 296 | for each in p[2]: 297 | if is_mapping(each): 298 | meta.update(each) 299 | elif isinstance(each, Struct): 300 | meta['struct'] = each 301 | p[0] = (n, Type(name=n, **meta)) 302 | 303 | 304 | def p_kinds(p): 305 | "kinds : kinds kind" 306 | p[1].append(p[2]) 307 | p[0] = p[1] 308 | 309 | 310 | def p_kinds_last(p): 311 | "kinds : kind" 312 | p[0] = [p[1]] 313 | 314 | 315 | def p_kind(p): 316 | """ 317 | kind : FLOAT 318 | | DOUBLE 319 | | COMPLEX 320 | | INT 321 | | BYTE 322 | | LONG 323 | | STRING 324 | | array 325 | | struct 326 | | prop 327 | | star 328 | """ 329 | p[0] = p[1] 330 | 331 | 332 | def p_struct(p): 333 | "struct : STRUCT '(' types ')'" 334 | p[0] = Struct(types=dict(p[3])) 335 | 336 | 337 | def p_array(p): 338 | "array : ARRAY '(' star ')'" 339 | p[0] = Array(members=p[3]) 340 | 341 | 342 | def p_prop(p): 343 | "prop : PROP '(' named_values ')'" 344 | p[0] = dict(p[3]) 345 | 346 | 347 | def p_sweep_section(p): 348 | "sweep_section : SWEEP sweeps" 349 | p[0] = p[2] 350 | 351 | 352 | def p_sweeps(p): 353 | "sweeps : sweeps sweep" 354 | p[1].append(p[2]) 355 | p[0] = p[1] 356 | 357 | 358 | def p_sweeps_last(p): 359 | "sweeps : sweep" 360 | p[0] = [p[1]] 361 | 362 | 363 | def p_sweep(p): 364 | "sweep : string string kinds" 365 | p[0] = Sweep(name=p[1], type=p[2], **p[3][0]) 366 | 367 | 368 | def p_trace_section(p): 369 | "trace_section : TRACE traces" 370 | # Partition out the groups from the traces. 371 | # A group will have one entry in the list of traces, and it will have a 372 | # corresponding entry in the groups directory. The entry is also a 373 | # dictionary that maps the member name to the member type. 374 | traces = [] 375 | groups = {} 376 | index = None 377 | for trace in p[2]: 378 | name = trace.name 379 | try: 380 | count = int(trace.type) 381 | index = 0 382 | group_name = name 383 | groups[group_name] = {} 384 | trace.type = 'GROUP' 385 | traces.append(trace) 386 | continue 387 | except ValueError: 388 | pass 389 | if index is None: 390 | traces.append(trace) 391 | else: 392 | groups[group_name][trace.name] = trace.type 393 | index += 1 394 | if index == count: 395 | index = None 396 | p[0] = (traces, groups) 397 | 398 | 399 | def p_traces(p): 400 | "traces : traces trace" 401 | p[1].append(p[2]) 402 | p[0] = p[1] 403 | 404 | 405 | def p_traces_last(p): 406 | "traces : trace" 407 | p[0] = [p[1]] 408 | 409 | 410 | def p_traces_empty(p): 411 | "traces : " 412 | p[0] = [] 413 | 414 | 415 | def p_trace(p): 416 | "trace : named_value" 417 | name, type = p[1] 418 | p[0] = Trace(name=name, type=type) 419 | 420 | 421 | def p_group_trace(p): 422 | "trace : string GROUP INTEGER" 423 | name = p[1] 424 | count = p[3] 425 | p[0] = Trace(name=name, type=count) 426 | 427 | 428 | def p_trace_with_props(p): 429 | "trace : named_value prop" 430 | # some psf files place a units property on terminal current traces, 431 | # but the information seems redundant and can be ignored. 432 | name, type = p[1] 433 | p[0] = Trace(name=name, type=type) 434 | 435 | 436 | def p_value_section(p): 437 | "value_section : VALUE values" 438 | p[0] = p[2] 439 | 440 | 441 | def p_values(p): 442 | "values : values signal_value" 443 | if p[2][0] not in p[1]: 444 | p[1][p[2][0]] = Value(type=p[2][1], values=[p[2][2]]) 445 | else: 446 | p[1][p[2][0]].values.append(p[2][2]) 447 | p[0] = p[1] 448 | 449 | 450 | def p_values_last(p): 451 | "values : signal_value" 452 | p[0] = {p[1][0]: Value(type=p[1][1], values=[p[1][2]])} 453 | 454 | 455 | def p_named_signal_scalar(p): 456 | """ 457 | signal_value : string numbers 458 | """ 459 | p[0] = (p[1], None, p[2]) 460 | 461 | 462 | def p_named_signal_with_type(p): 463 | """ 464 | signal_value : string string numbers 465 | """ 466 | p[0] = (p[1], p[2], p[3]) 467 | 468 | 469 | def p_named_string_signal_with_type(p): 470 | """ 471 | signal_value : string string string 472 | """ 473 | p[0] = (p[1], p[2], p[3]) 474 | 475 | 476 | def p_numbers(p): 477 | "numbers : numbers number" 478 | p[1].append(p[2]) 479 | p[0] = p[1] 480 | 481 | 482 | def p_last_number(p): 483 | "numbers : number" 484 | p[0] = [p[1]] 485 | 486 | 487 | def p_number(p): 488 | """ 489 | number : simple_number 490 | | composite_number 491 | """ 492 | p[0] = p[1] 493 | 494 | 495 | def p_integer_number(p): 496 | "simple_number : INTEGER" 497 | p[0] = int(p[1]) 498 | 499 | 500 | def p_real_number(p): 501 | # props are redundant, so ignore them 502 | """ 503 | simple_number : REAL 504 | | REAL prop 505 | | NAN 506 | | NAN prop 507 | """ 508 | p[0] = float(p[1]) 509 | 510 | 511 | def p_composite_number(p): 512 | """ 513 | composite_number : '(' numbers ')' 514 | | '(' numbers ')' prop 515 | """ 516 | p[0] = tuple(p[2]) 517 | 518 | 519 | def p_end(p): 520 | "end : END" 521 | 522 | 523 | # Error rule for syntax errors 524 | def p_error(p): 525 | if p: 526 | loc = TokenLocation(p) 527 | raise ParseError("syntax error at '%s'." % (p.value), loc) 528 | else: 529 | raise ParseError("premature end of content.") 530 | 531 | 532 | # ParsePSF class {{{1 533 | class ParsePSF: 534 | def __init__(self): 535 | self.lexer = ply.lex.lex() 536 | self.parser = ply.yacc.yacc(write_tables=False, debug=False) 537 | 538 | def parse(self, filename, content): 539 | global Filename 540 | Filename = filename 541 | 542 | result = self.parser.parse(content, tracking=False, lexer=self.lexer) 543 | return result 544 | -------------------------------------------------------------------------------- /psf_utils/psf.py: -------------------------------------------------------------------------------- 1 | """ 2 | Read PSF File 3 | """ 4 | 5 | # License {{{1 6 | # Copyright (C) 2018-2023 Kenneth S. Kundert 7 | # 8 | # This program is free software: you can redistribute it and/or modify 9 | # it under the terms of the GNU General Public License as published by 10 | # the Free Software Foundation, either version 3 of the License, or 11 | # (at your option) any later version. 12 | # 13 | # This program is distributed in the hope that it will be useful, 14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | # GNU General Public License for more details. 17 | # 18 | # You should have received a copy of the GNU General Public License 19 | # along with this program. If not, see [http://www.gnu.org/licenses/]. 20 | 21 | 22 | # Imports {{{1 23 | from .parse import ParsePSF, ParseError 24 | from inform import Error, Info, join, log, os_error 25 | from pathlib import Path 26 | import numpy as np 27 | from quantiphy import Quantity 28 | try: 29 | import cPickle as pickle 30 | except ImportError: 31 | import pickle 32 | import re 33 | 34 | 35 | # Utilities {{{1 36 | class Signal(Info): 37 | pass 38 | 39 | 40 | class UnknownSignal(Error): 41 | template = 'unknown signal: {}.' 42 | 43 | 44 | unicode_unit_maps = { 45 | r'sqrt\(([^)]+)\)': r'√\1', 46 | r'\^2': '²', 47 | r'\bOhm\b': 'Ω', 48 | 49 | # the following are not unicode units, however Spectre often messes these 50 | # up in the oppoint files. 51 | r'\bR\b': 'Ω', 52 | r'\bI\b': 'A', 53 | r'\bC\b': 'F', 54 | r'\bDeg\b': '°', 55 | } 56 | 57 | 58 | def unicode_units(u): 59 | if u: 60 | for s, r in unicode_unit_maps.items(): 61 | u = re.sub(s, r, u) 62 | else: 63 | u = '' 64 | return u 65 | 66 | 67 | # PSF class {{{1 68 | class PSF: 69 | """ 70 | Read an ASCII PSF file 71 | 72 | filename (str or Path): 73 | Path to ASCII PSF file. 74 | sep (str): 75 | Join string to use when converting composite names into a single name. 76 | use_cache (bool): 77 | If True, a cached version of the data is used if it exists rather than 78 | the original PSF file, but only if the cache is newer than the PSF file. 79 | This can substantially reduced the time required to access the data. 80 | update_cache (bool): 81 | If True, a cached version of the data is updated if it does not exist or 82 | is out-of-date. 83 | """ 84 | 85 | def __init__(self, filename, sep=':', use_cache=True, update_cache=True): 86 | psf_filepath = Path(filename) 87 | cache_filepath = psf_filepath.with_suffix(psf_filepath.suffix + '.cache') 88 | 89 | # read cache if desired and current 90 | if use_cache: 91 | try: 92 | if cache_filepath.stat().st_mtime > psf_filepath.stat().st_mtime: 93 | self._read_cache(cache_filepath) 94 | return 95 | except OSError as e: 96 | log(os_error(e)) 97 | except Exception as e: 98 | log(e) 99 | 100 | # open and parse PSF file 101 | parser = ParsePSF() 102 | try: 103 | content = psf_filepath.read_text() 104 | sections = parser.parse(filename, content) 105 | except ParseError as e: 106 | raise Error(str(e)) 107 | except OSError as e: 108 | raise Error(os_error(e)) 109 | except UnicodeError as e: 110 | raise Error( 111 | e, 112 | culprit = psf_filepath, 113 | codicil = join( 114 | 'This is likely a binary PSF file,', 115 | 'psf_utils only supports ASCII PSF files.', 116 | '\nUse `psf {0!s} {0!s}.ascii` to convert.'.format(psf_filepath), 117 | ) 118 | ) 119 | meta, types, sweeps, traces, values = sections 120 | self.meta = meta 121 | self.types = types 122 | self.sweeps = sweeps 123 | self.traces = traces 124 | 125 | # add values to sweeps 126 | if sweeps: 127 | for sweep in sweeps: 128 | n = sweep.name 129 | sweep.abscissa = np.array([v[0] for v in values[n].values]) 130 | 131 | # process signals 132 | # 1. convert to numpy and delete the original list 133 | # 2. convert to Signal class 134 | # 3. create signals dictionary 135 | signals = {} 136 | if traces: 137 | traces, groups = traces 138 | for trace in traces: 139 | name = trace.name 140 | type = types.get(trace.type, trace.type) 141 | vals = values[name].values 142 | if type == 'GROUP': 143 | group = {k: types.get(v, v) for k, v in groups[name].items()} 144 | prefix = '' 145 | get_value = lambda v, i: v[i] 146 | elif type.struct: 147 | group = type.struct.types 148 | prefix = name + ':' 149 | get_value = lambda v, i: v[0][i] 150 | else: 151 | group = {name: type} 152 | prefix = '' 153 | get_value = lambda v, i: v[i] 154 | for i, v in enumerate(group.items()): 155 | n, t = v 156 | joined_name = prefix + n 157 | if 'complex' in t.kind: 158 | ordinate = np.array([complex(*get_value(v, i)) for v in vals]) 159 | else: 160 | ordinate = np.array([get_value(v, i) for v in vals]) 161 | signal = Signal( 162 | name = joined_name, 163 | ordinate = ordinate, 164 | type = t, 165 | access = t.name, 166 | units = t.units, 167 | # units = t.units if t.units else t.name, 168 | # I think that terminal currents are misnamed 169 | # they should be named "I" but they are named "A" 170 | # and "A" is a type where no units are specified, 171 | # so as a hack, use the name rather than 172 | # go without units 173 | meta = meta, 174 | ) 175 | signals[joined_name] = signal 176 | del values[name] 177 | else: 178 | # no traces, this should be a DC op-point analysis dataset 179 | for name, value in values.items(): 180 | assert len(value.values) == 1 181 | type = types[value.type] 182 | if type.struct: 183 | for t, v in zip(type.struct.types.values(), value.values[0][0]): 184 | n = f'{name}.{t.name}' 185 | if 'float' in t.kind: 186 | v = Quantity(v, unicode_units(t.units)) 187 | elif 'complex' in t.kind: 188 | v = complex(v[0], v[1]) 189 | signal = Signal( 190 | name = n, 191 | ordinate = v, 192 | type = t, 193 | units = t.units, 194 | meta = meta, 195 | ) 196 | signals[n] = signal 197 | else: 198 | if 'float' in type.kind: 199 | v = Quantity(value.values[0][0], unicode_units(type.units)) 200 | elif 'complex' in type.kind: 201 | v = complex(value.values[0][0], value.values[0][1]) 202 | else: 203 | v = value.values[0] 204 | 205 | signal = Signal( 206 | name = name, 207 | ordinate = v, 208 | type = type, 209 | access = type.name, 210 | units = type.units, 211 | meta = meta, 212 | ) 213 | signals[name] = signal 214 | self.signals = signals 215 | 216 | if update_cache: 217 | self._write_cache(cache_filepath) 218 | 219 | def get_sweep(self, index=0): 220 | """ 221 | Get Sweep 222 | 223 | index (int): 224 | PSF allows multiple sweeps (abscissas). You can use this argument to 225 | select the one you want. The default is 0. 226 | """ 227 | if self.sweeps: 228 | return self.sweeps[index] 229 | 230 | def get_signal(self, name): 231 | """ 232 | Get Signal 233 | 234 | name (string): 235 | Name of signal return. 236 | 237 | Raises UnknownSignal (subclass of Error) if the name given does not 238 | correspond to a known signal. 239 | """ 240 | try: 241 | return self.signals[name] 242 | except KeyError: 243 | raise UnknownSignal(name, choices=self.signals.keys()) 244 | 245 | def all_signals(self): 246 | """ 247 | All Signals 248 | 249 | Iterates through all signals. 250 | """ 251 | for signal in self.signals.values(): 252 | yield signal 253 | 254 | def log_x(self, sweep=None): 255 | """ 256 | Log X 257 | 258 | True if PSF is recommending a logarithmic x-axis. 259 | """ 260 | if not sweep: 261 | sweep = self.get_sweep() 262 | return sweep.grid == 3 263 | 264 | def log_y(self, sweep=None): 265 | """ 266 | Log Y 267 | 268 | True if PSF is recommending a logarithmic y-axis. 269 | """ 270 | if not sweep: 271 | sweep = self.get_sweep() 272 | return sweep.grid == 3 273 | 274 | @staticmethod 275 | def units_to_unicode(units): 276 | """ 277 | Transform ASCII units to Unicode 278 | 279 | units (str): 280 | The units to transform. 281 | """ 282 | return unicode_units(units) 283 | 284 | @staticmethod 285 | def units_to_latex(units): 286 | """ 287 | Transform ASCII units to Latex 288 | 289 | Note: this function is not yet implemented. 290 | 291 | units (str): 292 | The units to transform. 293 | """ 294 | return units 295 | 296 | def _read_cache(self, cache_filepath): 297 | with open(cache_filepath, 'rb') as f: 298 | self.__dict__ = pickle.load(f) 299 | 300 | def _write_cache(self, cache_filepath): 301 | with open(cache_filepath, 'wb') as f: 302 | pickle.dump(self.__dict__, f, pickle.HIGHEST_PROTOCOL) 303 | -------------------------------------------------------------------------------- /psf_utils/show.py: -------------------------------------------------------------------------------- 1 | # Usage {{{1 2 | """ 3 | Show Signals 4 | 5 | Signals may either be waveforms or single points. 6 | Waveforms are plotted and single points are printed. 7 | 8 | Usage: 9 | show-psf [options] ... 10 | 11 | Options: 12 | -c, --refresh-cache refresh the cache 13 | -f , --psf-file PSF file 14 | -d, --db show the magnitude of the signals in dB 15 | -m, --mag show the magnitude of the signals 16 | -p, --ph show the phase of the signals 17 | -g, --major-grid show major grid lines 18 | -G, --minor-grid show major and minor grid lines 19 | -s , --svg produce graph as SVG file rather than display it 20 | -t , --title <title> title 21 | -M, --mark-points place marker on each point 22 | -P, --just-points do not connect points with lines (implies -M) 23 | -V, --version show version number and exit 24 | 25 | The PSF file need only be given if it differs from the one used previously. 26 | 27 | Reading large ASCII data files is slow, so show-psf reads the PSF file once, 28 | then pickles the data and writes it to disk. On subsequent runs the pickled data 29 | is used if the pickle file is newer that the corresponding PSF file. 30 | 31 | A signal may contain glob characters. For examples, R1:* shows all signals that 32 | start with R1:. 33 | 34 | If a signal as specified on the command line contains a dash, it is split into 35 | two pieces, each of which are considered signals that are components of a 36 | differential signal. The two are accessed individually and the difference is 37 | shown. So for example, out_p-out_n results in V(out_p, ount_n) being shown. 38 | There may only be one dash in a signal, and signals with dashes must not contain 39 | glob characters. 40 | """ 41 | 42 | 43 | # License {{{1 44 | # Copyright (C) 2018-2023 Kenneth S. Kundert 45 | # 46 | # This program is free software: you can redistribute it and/or modify 47 | # it under the terms of the GNU General Public License as published by 48 | # the Free Software Foundation, either version 3 of the License, or 49 | # (at your option) any later version. 50 | # 51 | # This program is distributed in the hope that it will be useful, 52 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 53 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 54 | # GNU General Public License for more details. 55 | # 56 | # You should have received a copy of the GNU General Public License 57 | # along with this program. If not, see [http://www.gnu.org/licenses/]. 58 | 59 | 60 | # Imports {{{1 61 | from .psf import PSF, Quantity 62 | from . import __version__, __released__ 63 | from docopt import docopt 64 | import fnmatch 65 | from inform import Error, display, done, fatal, full_stop, os_error, plural, warn 66 | import matplotlib 67 | import matplotlib.pyplot as plt 68 | from matplotlib.ticker import FuncFormatter 69 | import numpy as np 70 | import warnings 71 | import sys 72 | 73 | # Globals {{{1 74 | axis_prec = 9 # can request many digits as unneeded digits are not shown 75 | cursor_prec = 3 76 | print_prec = 4 77 | Quantity.set_prefs( 78 | map_sf = Quantity.map_sf_to_sci_notation, 79 | minus = Quantity.minus_sign, 80 | # include small scale factors for noise power results 81 | output_sf = 'TGMkmunpfazy', 82 | prec = axis_prec, 83 | ) 84 | warnings.filterwarnings('ignore', category=FutureWarning) 85 | saved_psf_file_filename = '.psf_file' 86 | saved_arguments_filename = '.psf_show_args' 87 | operators = '+ - * /'.split() 88 | 89 | 90 | # Utilities {{{1 91 | # get_argv() {{{3 92 | def get_argv(): 93 | argv = sys.argv[1:] 94 | if argv: 95 | # save the command line arguments for next time 96 | try: 97 | with open(saved_arguments_filename, 'w') as f: 98 | args = [a for a in argv if a not in ['-c', '--refresh-cache']] 99 | f.write('\n'.join(args)) 100 | except OSError as e: 101 | warn(os_error(e)) 102 | else: 103 | # command line arguments not give, reuse previous ones 104 | try: 105 | with open(saved_arguments_filename) as f: 106 | argv = f.read().split('\n') 107 | display('Using command:', ' '.join(argv)) 108 | except OSError: 109 | done() 110 | return argv 111 | 112 | 113 | # get_psf_filename() {{{2 114 | def get_psf_filename(psf_file): 115 | if not psf_file: 116 | try: 117 | with open(saved_psf_file_filename) as f: 118 | psf_file = f.read().strip() 119 | display('Using PSF file:', psf_file) 120 | except OSError: 121 | fatal('missing PSF file name.') 122 | try: 123 | with open(saved_psf_file_filename, 'w') as f: 124 | f.write(psf_file) 125 | except OSError as e: 126 | warn(os_error(e)) 127 | return psf_file 128 | 129 | 130 | # in_args() {{{2 131 | def expand_args(signals, args, allow_diff=True): 132 | # special case args that contain -, they are considered differential signals 133 | # they should not include glob chars (*, ?) 134 | selected = set(a for a in args if '-' in a) if allow_diff else set() 135 | for arg in args: 136 | selected.update(fnmatch.filter(signals, arg)) 137 | return sorted(selected) 138 | 139 | 140 | # show_signals() {{{1 141 | def show_signals(): 142 | try: 143 | # process command line {{{2 144 | cmdline = docopt( 145 | __doc__, 146 | argv = get_argv(), 147 | version = f"{__version__} ({__released__})" 148 | ) 149 | psf_file = get_psf_filename(cmdline['--psf-file']) 150 | args = cmdline['<signal>'] 151 | title = cmdline['--title'] 152 | svg_file = cmdline['--svg'] 153 | dB = cmdline['--db'] 154 | mag = cmdline['--mag'] 155 | phase = cmdline['--ph'] 156 | use_cache = not cmdline['--refresh-cache'] 157 | linestyle = '' if cmdline['--just-points'] else '-' 158 | marker = '.' if cmdline['--mark-points'] or cmdline['--just-points'] else '' 159 | 160 | # Open PSF file {{{2 161 | psf = PSF(psf_file, sep=':', use_cache=use_cache) 162 | sweep = psf.get_sweep() 163 | to_show = expand_args(psf.signals.keys(), args) 164 | 165 | # Print scalars {{{2 166 | if not sweep: 167 | with Quantity.prefs(map_sf=Quantity.map_sf_to_greek, prec=print_prec): 168 | to_print = [] 169 | width = 0 170 | for arg in to_show: 171 | pair = arg.split('-') 172 | if len(pair) == 2: 173 | psig = psf.get_signal(pair[0]) 174 | nsig = psf.get_signal(pair[1]) 175 | if psig.units != nsig.units: 176 | warn( 177 | f'incompatible units ({psig.units} != {nsig.units}', 178 | culprit=arg 179 | ) 180 | units = psig.units 181 | access = psig.access 182 | y_data = Quantity( 183 | psig.ordinate - nsig.ordinate, 184 | psf.units_to_unicode(units) 185 | ) 186 | if access: 187 | name = f'{access}({psig.name},{nsig.name})' 188 | else: 189 | name = f'({psig.name} − {nsig.name})' 190 | else: 191 | sig = psf.get_signal(arg) 192 | access = sig.access 193 | name = f'{access}({sig.name})' if access else sig.name 194 | y_data = sig.ordinate 195 | if hasattr(y_data, 'units'): 196 | y_data.units = psf.units_to_unicode(y_data.units) 197 | to_print.append((name, y_data)) 198 | width = max(width, len(name)) 199 | for name, y_data in to_print: 200 | display(f'{name:>{width+4}} = {y_data}') 201 | return 202 | 203 | # Process arguments for graphs {{{2 204 | waves = [] 205 | y_units = set() 206 | for arg in to_show: 207 | use_log_scale = psf.log_y(sweep) 208 | pair = arg.split('-') 209 | if len(pair) == 2: 210 | psig = psf.get_signal(pair[0]) 211 | nsig = psf.get_signal(pair[1]) 212 | name = arg 213 | if psig.units != nsig.units: 214 | warn( 215 | f'incompatible units ({psig.units} != {nsig.units}', 216 | culprit=arg 217 | ) 218 | units = psig.units 219 | y_data = psig.ordinate - nsig.ordinate 220 | else: 221 | sig = psf.get_signal(arg) 222 | name = arg 223 | units = sig.units 224 | y_data = sig.ordinate 225 | if units == 'Unitless': 226 | units = '' 227 | if dB: 228 | y_data = 20*np.log10(np.absolute(y_data)) 229 | units = 'dB' + (units or '') 230 | use_log_scale = False 231 | elif mag: 232 | y_data = np.absolute(y_data) 233 | elif phase: 234 | y_data = np.angle(y_data, deg=True) 235 | units = '°' 236 | use_log_scale = False 237 | elif np.iscomplexobj(y_data): 238 | y_data = np.absolute(y_data) 239 | waves.append((name, y_data, units, use_log_scale)) 240 | y_units.add(units) 241 | if not y_units: 242 | raise Error(f'{plural(args):no match/es}.', culprit=args) 243 | 244 | # Formatters {{{2 245 | # create formatter for x-axis values {{{3 246 | x_units = sweep.units 247 | x_data = sweep.abscissa 248 | x_formatter = FuncFormatter( 249 | lambda v, p: Quantity(v, x_units).render() 250 | ) 251 | 252 | # create formatter for y-axis values {{{3 253 | y_formatters = { 254 | u: FuncFormatter( 255 | lambda v, p, u=u: str(Quantity(v, psf.units_to_unicode(u))) 256 | ) 257 | for u in y_units 258 | } 259 | 260 | # create formatter for cursor readout values {{{3 261 | xy_formatters = {} 262 | for u in y_units: 263 | xy_label = "{x}, {y}" 264 | units = psf.units_to_unicode(u) 265 | xy_formatters[u] = lambda x, y: xy_label.format( 266 | x = Quantity(x, x_units).render(prec=cursor_prec), 267 | y = Quantity(y, units).render(prec=cursor_prec) 268 | ) 269 | 270 | # Generate the graph {{{2 271 | if svg_file: 272 | matplotlib.use('SVG') 273 | figure, axes = plt.subplots(len(y_units), 1, sharex=True, squeeze=False) 274 | for i, units in enumerate(y_units): 275 | for sig_name, y_data, sig_units, use_log_scale in waves: 276 | if sig_units == units: 277 | axes[i, 0].plot( 278 | x_data, y_data, 279 | label = sig_name, 280 | marker = marker, 281 | linestyle = linestyle, 282 | linewidth = 2, 283 | ) 284 | axes[i, 0].legend(frameon=False, loc='best') 285 | axes[i, 0].set_xscale('log' if psf.log_x(sweep) else 'linear') 286 | axes[i, 0].set_yscale('log' if use_log_scale else 'linear') 287 | axes[i, 0].xaxis.set_major_formatter(x_formatter) 288 | axes[i, 0].yaxis.set_major_formatter(y_formatters[units]) 289 | axes[i, 0].format_coord = xy_formatters[units] 290 | if cmdline['--minor-grid']: 291 | axes[i, 0].grid(which="both") 292 | elif cmdline['--major-grid']: 293 | axes[i, 0].grid(which="major") 294 | else: 295 | axes[i, 0].grid(visible=False) 296 | if title: 297 | plt.suptitle(title) 298 | if svg_file: 299 | plt.savefig(svg_file) 300 | else: 301 | plt.show() 302 | except ValueError as e: 303 | fatal(full_stop(e)) 304 | except Error as e: 305 | e.terminate() 306 | except OSError as e: 307 | fatal(os_error(e)) 308 | except KeyboardInterrupt: 309 | done() 310 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "psf_utils" 3 | version = "1.9" 4 | description = "Cadence PSF file utilities" 5 | readme = "README.rst" 6 | keywords = ["cadence", "spectre", "PSF", "simulation"] 7 | authors = [ 8 | {name = "Ken Kundert"}, 9 | {email = "psf_utils@nurdletech.com"} 10 | ] 11 | classifiers = [ 12 | 'Development Status :: 5 - Production/Stable', 13 | 'Intended Audience :: Developers', 14 | 'Intended Audience :: Science/Research', 15 | 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', 16 | 'Natural Language :: English', 17 | 'Operating System :: POSIX :: Linux', 18 | 'Programming Language :: Python :: 3', 19 | 'Topic :: Utilities', 20 | 'Topic :: Scientific/Engineering', 21 | ] 22 | requires-python = ">=3.6" 23 | dependencies = [ 24 | 'docopt', 25 | 'inform', 26 | 'matplotlib', 27 | 'numpy', 28 | 'ply==3.10', 29 | 'quantiphy', 30 | ] 31 | 32 | [project.scripts] 33 | list-psf = "psf_utils.list:list_signals" 34 | show-psf = "psf_utils.show:show_signals" 35 | 36 | [project.urls] 37 | repository = "https://github.com/kenkundert/psf_utils" 38 | 39 | [build-system] 40 | requires = ["flit_core >=2,<4"] 41 | build-backend = "flit_core.buildapi" 42 | 43 | [tool.ruff] 44 | exclude = [".tox", "doc", "tests", "Diffs"] 45 | 46 | [tool.ruff.lint] 47 | select = ["F"] 48 | ignore = [] 49 | 50 | [tool.ruff.lint.per-file-ignores] 51 | "psf_utils/__init__.py" = ["F401"] # imported but unused 52 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | python_files=test_*.py 3 | addopts = --doctest-glob='*.rst' 4 | norecursedirs=Diffs 5 | -------------------------------------------------------------------------------- /samples/.psf_file: -------------------------------------------------------------------------------- 1 | aclin.ac -------------------------------------------------------------------------------- /samples/.psf_plot_args: -------------------------------------------------------------------------------- 1 | topva -------------------------------------------------------------------------------- /samples/dcOpInfo.info.psfascii: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "BINPSF creation time" "1616262461" 4 | "simulator" "spectre" 5 | "version" "19.1.0.063" 6 | "date" "6:47:41 PM, Sat Mar 20, 2021" 7 | "design" "// Point Netlist Generated on: Mar 20 18:39:35 2021" 8 | "analysis type" "info" 9 | "analysis name" "dcOpInfo" 10 | "analysis description" "Circuit Information" 11 | "xVecSorted" "unknown" 12 | "tolerance.relative" 0.00100000 13 | "AnalysisName" "DC" 14 | "AnalysisType" "dcOp" 15 | "OpPointTemp.Value" 27.0000 16 | "OpPointTemp.Units" "C" 17 | TYPE 18 | "bsim3v3" STRUCT( 19 | "ids" FLOAT DOUBLE PROP( 20 | "units" "A" 21 | "description" "Resistive drain-to-source current (alias=lx4)" 22 | ) 23 | "isub" FLOAT DOUBLE PROP( 24 | "units" "A" 25 | "description" "substrate current (alias=lx50)" 26 | ) 27 | "vgs" FLOAT DOUBLE PROP( 28 | "units" "V" 29 | "description" "Gate-source voltage" 30 | ) 31 | "vds" FLOAT DOUBLE PROP( 32 | "units" "V" 33 | "description" "Drain-source voltage (alias=lx3)" 34 | ) 35 | "vbs" FLOAT DOUBLE PROP( 36 | "units" "V" 37 | "description" "Bulk-source voltage" 38 | ) 39 | "vgb" FLOAT DOUBLE PROP( 40 | "units" "V" 41 | "description" "gate-bulk voltage" 42 | ) 43 | "vdb" FLOAT DOUBLE PROP( 44 | "units" "V" 45 | "description" "Drain-bulk voltage" 46 | ) 47 | "vgd" FLOAT DOUBLE PROP( 48 | "units" "V" 49 | "description" "Gate-Drain voltage" 50 | ) 51 | "vth" FLOAT DOUBLE PROP( 52 | "units" "V" 53 | "description" "Threshold voltage (alias=lv9)" 54 | ) 55 | "vdsat" FLOAT DOUBLE PROP( 56 | "units" "V" 57 | "description" "Drain-source saturation voltage (alias=lv10)" 58 | ) 59 | "vfbeff" FLOAT DOUBLE PROP( 60 | "units" "V" 61 | "description" "Vfb effective (alias=lv26)" 62 | ) 63 | "gm" FLOAT DOUBLE PROP( 64 | "units" "S" 65 | "description" "Common-source transconductance (alias=lx7)" 66 | ) 67 | "gds" FLOAT DOUBLE PROP( 68 | "units" "S" 69 | "description" "Common-source output conductance (alias=lx8)" 70 | ) 71 | "gmbs" FLOAT DOUBLE PROP( 72 | "units" "S" 73 | "description" "Body-transconductance (alias=lx9)" 74 | ) 75 | "betaeff" FLOAT DOUBLE PROP( 76 | "units" "A/V^2" 77 | "description" "Effective `beta'" 78 | ) 79 | "cjd" FLOAT DOUBLE PROP( 80 | "units" "F" 81 | "description" "Drain-bulk junction capacitance (alias=lx29)" 82 | ) 83 | "cjs" FLOAT DOUBLE PROP( 84 | "units" "F" 85 | "description" "Source-bulk junction capacitance (alias=lx28)" 86 | ) 87 | "qb" FLOAT DOUBLE PROP( 88 | "units" "Coul" 89 | "description" "total bulk charge (alias=lx12)" 90 | ) 91 | "qg" FLOAT DOUBLE PROP( 92 | "units" "Coul" 93 | "description" "Total gate charge (alias=lx14)" 94 | ) 95 | "qd" FLOAT DOUBLE PROP( 96 | "units" "Coul" 97 | "description" "Total drain charge (alias=lx16)" 98 | ) 99 | "qbd" FLOAT DOUBLE PROP( 100 | "units" "Coul" 101 | "description" "Drain-bulk charge (alias=lx24)" 102 | ) 103 | "qbs" FLOAT DOUBLE PROP( 104 | "units" "Coul" 105 | "description" "Source-bulk charge (alias=lx26)" 106 | ) 107 | "cgg" FLOAT DOUBLE PROP( 108 | "units" "F" 109 | "description" "dQg_dVg (alias=lx18)" 110 | ) 111 | "cgd" FLOAT DOUBLE PROP( 112 | "units" "F" 113 | "description" "dQg_dVd (alias=lx19)" 114 | ) 115 | "cgs" FLOAT DOUBLE PROP( 116 | "units" "F" 117 | "description" "dQg_dVs (alias=lx20)" 118 | ) 119 | "cgb" FLOAT DOUBLE PROP( 120 | "units" "F" 121 | "description" "dQg_dVbk" 122 | ) 123 | "cdg" FLOAT DOUBLE PROP( 124 | "units" "F" 125 | "description" "dQd_dVg (alias=lx32)" 126 | ) 127 | "cdd" FLOAT DOUBLE PROP( 128 | "units" "F" 129 | "description" "Total drain capacitance (including intrinsic, overlap and fringing components, and junction capacitance) (alias=lx33)" 130 | ) 131 | "cds" FLOAT DOUBLE PROP( 132 | "units" "F" 133 | "description" "dQd_dVs (alias=lx34)" 134 | ) 135 | "cdb" FLOAT DOUBLE PROP( 136 | "units" "F" 137 | "description" "dQd_dVb" 138 | ) 139 | "csg" FLOAT DOUBLE PROP( 140 | "units" "F" 141 | "description" "dQs_dVg" 142 | ) 143 | "csd" FLOAT DOUBLE PROP( 144 | "units" "F" 145 | "description" "dQs_dVd" 146 | ) 147 | "css" FLOAT DOUBLE PROP( 148 | "units" "F" 149 | "description" "dQs_dVs" 150 | ) 151 | "csb" FLOAT DOUBLE PROP( 152 | "units" "F" 153 | "description" "dQs_dVb" 154 | ) 155 | "cbg" FLOAT DOUBLE PROP( 156 | "units" "F" 157 | "description" "dQb_dVg (alias=lx21)" 158 | ) 159 | "cbd" FLOAT DOUBLE PROP( 160 | "units" "F" 161 | "description" "dQb_dVd (alias=lx22)" 162 | ) 163 | "cbs" FLOAT DOUBLE PROP( 164 | "units" "F" 165 | "description" "dQb_dVs (alias=lx23)" 166 | ) 167 | "cbb" FLOAT DOUBLE PROP( 168 | "units" "F" 169 | "description" "dQb_dVb" 170 | ) 171 | "ron" FLOAT DOUBLE PROP( 172 | "units" "Ohm" 173 | "description" "On-resistance" 174 | ) 175 | "id" FLOAT DOUBLE PROP( 176 | "units" "A" 177 | "description" "Resistive drain current (alias=i1)" 178 | ) 179 | "is" FLOAT DOUBLE PROP( 180 | "units" "A" 181 | "description" "Resistive source current (alias=i3)" 182 | ) 183 | "ibulk" FLOAT DOUBLE PROP( 184 | "units" "A" 185 | "description" "Resistive bulk current (alias=i4)" 186 | ) 187 | "ibs" FLOAT DOUBLE PROP( 188 | "units" "A" 189 | "description" "Source-bulk diode current (alias=lx5)" 190 | ) 191 | "ibd" FLOAT DOUBLE PROP( 192 | "units" "A" 193 | "description" "Drain-bulk diode current (alias=lx6)" 194 | ) 195 | "pwr" FLOAT DOUBLE PROP( 196 | "units" "W" 197 | "description" "Power at op point" 198 | ) 199 | "gmoverid" FLOAT DOUBLE PROP( 200 | "units" "1/V" 201 | "description" "Gm/Ids" 202 | ) 203 | "ueff" FLOAT DOUBLE PROP( 204 | "description" "ueff" 205 | ) 206 | "cgsovl" FLOAT DOUBLE PROP( 207 | "units" "F" 208 | "description" "Gate-source overlap and fringing capacitance (alias=lv36)" 209 | ) 210 | "cgdovl" FLOAT DOUBLE PROP( 211 | "units" "F" 212 | "description" "Gate-drain overlap and fringing capacitance (alias=lv37)" 213 | ) 214 | "cgbovl" FLOAT DOUBLE PROP( 215 | "units" "F" 216 | "description" "Gate-bulk overlap capacitance (alias=lv38)" 217 | ) 218 | "i1" FLOAT DOUBLE PROP( 219 | "units" "A" 220 | "description" "Alias for id" 221 | ) 222 | "i3" FLOAT DOUBLE PROP( 223 | "units" "A" 224 | "description" "Alias of Resistive source current" 225 | ) 226 | "i4" FLOAT DOUBLE PROP( 227 | "units" "A" 228 | "description" "Alias of Resistive bulk current" 229 | ) 230 | "gbd" FLOAT DOUBLE PROP( 231 | "units" "S" 232 | "description" "Conductance of the drain diode (alias=lx10)" 233 | ) 234 | "gbs" FLOAT DOUBLE PROP( 235 | "units" "S" 236 | "description" "Conductance of the source diode (alias=lx11)" 237 | ) 238 | "vgsteff" FLOAT DOUBLE PROP( 239 | "units" "V" 240 | "description" "effective vgs" 241 | ) 242 | "qinv" FLOAT DOUBLE PROP( 243 | "units" "Coul" 244 | "description" "inversion charge" 245 | ) 246 | "igd" FLOAT DOUBLE PROP( 247 | "units" "A" 248 | "description" "Gate-to-drain leakage current" 249 | ) 250 | "igs" FLOAT DOUBLE PROP( 251 | "units" "A" 252 | "description" "Gate-to-source leakage current" 253 | ) 254 | "igb" FLOAT DOUBLE PROP( 255 | "units" "A" 256 | "description" "Gate-to-bulk tunneling current" 257 | ) 258 | "igcs" FLOAT DOUBLE PROP( 259 | "units" "A" 260 | "description" "Gate-to-channel (source side) tunneling current" 261 | ) 262 | "igcd" FLOAT DOUBLE PROP( 263 | "units" "A" 264 | "description" "Gate-to-channel (drain side) tunneling current" 265 | ) 266 | "igidl" FLOAT DOUBLE PROP( 267 | "units" "A" 268 | "description" "Gate-induced drain leakage current" 269 | ) 270 | "igisl" FLOAT DOUBLE PROP( 271 | "units" "A" 272 | "description" "Gate-induced source leakage current" 273 | ) 274 | "qgi" FLOAT DOUBLE PROP( 275 | "units" "Coul" 276 | "description" "Intrinsic Gate charge" 277 | ) 278 | "qsi" FLOAT DOUBLE PROP( 279 | "units" "Coul" 280 | "description" "Intrinsic Source charge" 281 | ) 282 | "qdi" FLOAT DOUBLE PROP( 283 | "units" "Coul" 284 | "description" "Intrinsic Drain charge" 285 | ) 286 | "qbi" FLOAT DOUBLE PROP( 287 | "units" "Coul" 288 | "description" "Intrinsic Bulk charge" 289 | ) 290 | "cddbi" FLOAT DOUBLE PROP( 291 | "units" "F" 292 | "description" "Intrinsic drain capacitance" 293 | ) 294 | "cssbi" FLOAT DOUBLE PROP( 295 | "units" "F" 296 | "description" "Intrinsic source capacitance" 297 | ) 298 | "cggbi" FLOAT DOUBLE PROP( 299 | "units" "F" 300 | "description" "Intrinsic gate capacitance" 301 | ) 302 | "cgsbi" FLOAT DOUBLE PROP( 303 | "units" "F" 304 | "description" "Intrinsic gate-to-source capacitance" 305 | ) 306 | "cgdbi" FLOAT DOUBLE PROP( 307 | "units" "F" 308 | "description" "Intrinsic gate-to-drain capacitance" 309 | ) 310 | "cbdbi" FLOAT DOUBLE PROP( 311 | "units" "F" 312 | "description" "Intrinsic bulk-to-drain capacitance" 313 | ) 314 | "cbsbi" FLOAT DOUBLE PROP( 315 | "units" "F" 316 | "description" "Intrinsic bulk-to-source capacitance" 317 | ) 318 | "qsrco" FLOAT DOUBLE PROP( 319 | "units" "Coul" 320 | "description" "Total Source charge (Charge Conservation: QS=-(QG+QD+QB))" 321 | ) 322 | "ide" FLOAT DOUBLE PROP( 323 | "units" "A" 324 | "description" "Total DC drain current " 325 | ) 326 | "ige" FLOAT DOUBLE PROP( 327 | "units" "A" 328 | "description" "Total DC gate current " 329 | ) 330 | "ise" FLOAT DOUBLE PROP( 331 | "units" "A" 332 | "description" "Total DC source current " 333 | ) 334 | "ibe" FLOAT DOUBLE PROP( 335 | "units" "A" 336 | "description" "Total DC bulk current " 337 | ) 338 | "idb" FLOAT DOUBLE PROP( 339 | "units" "A" 340 | "description" "DC drain-bulk current " 341 | ) 342 | "isb" FLOAT DOUBLE PROP( 343 | "units" "A" 344 | "description" "DC source-bulk current " 345 | ) 346 | "vsb" FLOAT DOUBLE PROP( 347 | "units" "V" 348 | "description" "Source-Bulk DC voltage " 349 | ) 350 | "gmb" FLOAT DOUBLE PROP( 351 | "units" "S" 352 | "description" "DC bulk transconductance " 353 | ) 354 | "vgt" FLOAT DOUBLE PROP( 355 | "units" "V" 356 | "description" "Effective gate drive voltage including back bias drain bias effects " 357 | ) 358 | "vdss" FLOAT DOUBLE PROP( 359 | "units" "V" 360 | "description" " Drain saturation voltage at actual bias " 361 | ) 362 | "vsat_marg" FLOAT DOUBLE PROP( 363 | "units" "V" 364 | "description" " Vds margin " 365 | ) 366 | "self_gain" FLOAT DOUBLE PROP( 367 | "description" "Transistor self gain " 368 | ) 369 | "rout" FLOAT DOUBLE PROP( 370 | "units" "Ohm" 371 | "description" "AC output resistor " 372 | ) 373 | "beff" FLOAT DOUBLE PROP( 374 | "units" "A/V^2" 375 | "description" "Gain factor in saturation " 376 | ) 377 | "fug" FLOAT DOUBLE PROP( 378 | "units" "Hz" 379 | "description" "Unity current gain frequency at actual bias " 380 | ) 381 | "vearly" FLOAT DOUBLE PROP( 382 | "units" "V" 383 | "description" " Equivalent early voltage " 384 | ) 385 | "ft" FLOAT DOUBLE PROP( 386 | "units" "Hz" 387 | "description" "Unity current gain frequency at actual bias" 388 | ) 389 | "vth_drive" FLOAT DOUBLE PROP( 390 | "units" "V" 391 | "description" "Effective gate drive voltage including back bias drain bias effects" 392 | ) 393 | "vdsat_marg" FLOAT DOUBLE PROP( 394 | "units" "V" 395 | "description" "Vds margin" 396 | ) 397 | "tk" FLOAT DOUBLE PROP( 398 | "units" "K" 399 | "description" "Effective temperature for a single device" 400 | ) 401 | "ib" FLOAT DOUBLE PROP( 402 | "units" "A" 403 | "description" "Total DC bulk current " 404 | ) 405 | "ig" FLOAT DOUBLE PROP( 406 | "units" "A" 407 | "description" "Total DC gate current" 408 | ) 409 | "region" INT BYTE PROP( 410 | "description" "Estimated operating region. Spectre outputs number (0-4) in a rawfile" 411 | ) 412 | "reversed" INT BYTE PROP( 413 | "description" "Reverse mode indicator" 414 | ) 415 | "type" INT BYTE PROP( 416 | "description" "Transistor type" 417 | ) 418 | ) PROP( 419 | "key" "inst" 420 | ) 421 | "vsource" STRUCT( 422 | "v" FLOAT DOUBLE PROP( 423 | "units" "V" 424 | "description" "Voltage across the source" 425 | ) 426 | "i" FLOAT DOUBLE PROP( 427 | "units" "A" 428 | "description" "Current through the source" 429 | ) 430 | "pwr" FLOAT DOUBLE PROP( 431 | "units" "W" 432 | "description" "Power dissipation" 433 | ) 434 | ) PROP( 435 | "key" "inst" 436 | ) 437 | VALUE 438 | "NM0" "bsim3v3" ( 439 | 1.50477e-07 440 | 1.31518e-11 441 | 0.00000 442 | 1.20000 443 | 0.00000 444 | 0.00000 445 | 1.20000 446 | -1.20000 447 | 0.141953 448 | 0.0421929 449 | -0.908859 450 | 3.73378e-06 451 | 4.78994e-07 452 | 1.43988e-07 453 | 0.00433613 454 | 2.73096e-16 455 | 3.19120e-16 456 | -2.25151e-16 457 | -3.32143e-16 458 | 5.65421e-16 459 | -3.50222e-16 460 | -6.72280e-23 461 | 1.23208e-15 462 | -4.42661e-16 463 | -6.19800e-16 464 | -1.69624e-16 465 | -4.55709e-16 466 | 7.28764e-16 467 | 4.23290e-20 468 | -2.73098e-16 469 | -5.92705e-16 470 | -1.18472e-17 471 | 9.27709e-16 472 | -3.23157e-16 473 | -1.83671e-16 474 | -2.74256e-16 475 | -3.07951e-16 476 | 7.65878e-16 477 | 7.97463e+06 478 | 1.50493e-07 479 | -1.50477e-07 480 | -1.31531e-11 481 | -6.63237e-17 482 | -1.31530e-11 483 | 1.80591e-07 484 | 24.8129 485 | 0.0207294 486 | 4.90787e-16 487 | 4.55668e-16 488 | 9.03131e-19 489 | 1.50493e-07 490 | -1.50477e-07 491 | -1.31531e-11 492 | 1.15030e-10 493 | 3.14827e-10 494 | 0.000963917 495 | 4.86598e-05 496 | -2.27176e-12 497 | -6.99298e-34 498 | 0.00000 499 | 0.00000 500 | 0.00000 501 | 0.00000 502 | 0.00000 503 | 1.05170e-16 504 | -8.12734e-18 505 | 1.28108e-16 506 | -2.25151e-16 507 | 2.32548e-22 508 | 1.17802e-16 509 | 2.84727e-16 510 | -1.29013e-16 511 | 1.30069e-17 512 | 9.00800e-17 513 | 1.37528e-16 514 | -8.12726e-18 515 | 1.50495e-07 516 | -2.27176e-12 517 | 1.50493e-07 518 | -1.43531e-11 519 | 1.20193e-15 520 | 6.63237e-17 521 | -0.00000 522 | 1.43988e-07 523 | -0.141953 524 | 0.0421929 525 | 1.15781 526 | 7.79505 527 | 2.08771e+06 528 | 1.49370e-05 529 | 4.82313e+08 530 | 0.314190 531 | nan 532 | nan 533 | inf 534 | nan 535 | nan 536 | nan 537 | 3 538 | 0 539 | 0 540 | ) PROP( 541 | "model" "NM0.gpdk090_nmos1v_x" 542 | ) 543 | "V0" "vsource" ( 544 | 0.00000 545 | 2.27129e-12 546 | 0.00000 547 | ) PROP( 548 | "model" "vsource" 549 | ) 550 | "V1" "vsource" ( 551 | 1.20000 552 | -1.50492e-07 553 | -1.80590e-07 554 | ) PROP( 555 | "model" "vsource" 556 | ) 557 | END 558 | -------------------------------------------------------------------------------- /samples/empty.pnoise: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "21.1.0.303.isr5" 5 | "date" "4:36:33 PM, Thur Feb 29, 2024" 6 | "design" "(no title)" 7 | "analysis type" "sample.pnoise" 8 | "analysis name" "pnoiseMpm0" 9 | "analysis description" "jitter results for each measurement parent" 10 | "xVecSorted" "ascending" 11 | "tolerance.relative" 0.00100000 12 | TYPE 13 | "sweep" FLOAT DOUBLE PROP( 14 | "key" "sweep" 15 | ) 16 | "Tau" FLOAT DOUBLE PROP( 17 | "units" "N*m" 18 | "key" "node" 19 | "tolerance" 1.00000e-06 20 | ) 21 | "Alpha" FLOAT DOUBLE PROP( 22 | "units" "rads/s^2" 23 | "key" "node" 24 | "tolerance" 1.00000e-06 25 | ) 26 | "Omega" FLOAT DOUBLE PROP( 27 | "units" "rads/s" 28 | "key" "node" 29 | "tolerance" 1.00000e-06 30 | ) 31 | "Theta" FLOAT DOUBLE PROP( 32 | "units" "rads" 33 | "key" "node" 34 | "tolerance" 1.00000e-06 35 | ) 36 | "F" FLOAT DOUBLE PROP( 37 | "units" "N" 38 | "key" "node" 39 | "tolerance" 1.00000e-06 40 | ) 41 | "Imp" FLOAT DOUBLE PROP( 42 | "units" "m/s^3" 43 | "key" "node" 44 | "tolerance" 1.00000e-06 45 | ) 46 | "Acc" FLOAT DOUBLE PROP( 47 | "units" "m/s^2" 48 | "key" "node" 49 | "tolerance" 1.00000e-06 50 | ) 51 | "Vel" FLOAT DOUBLE PROP( 52 | "units" "m/s" 53 | "key" "node" 54 | "tolerance" 1.00000e-06 55 | ) 56 | "Pos" FLOAT DOUBLE PROP( 57 | "units" "m" 58 | "key" "node" 59 | "tolerance" 1.00000e-06 60 | ) 61 | "Phi" FLOAT DOUBLE PROP( 62 | "units" "Wb" 63 | "key" "node" 64 | "tolerance" 1.00000e-09 65 | ) 66 | "V" FLOAT DOUBLE PROP( 67 | "units" "V" 68 | "key" "node" 69 | "tolerance" 1.00000e-06 70 | ) 71 | "I" FLOAT DOUBLE PROP( 72 | "units" "A" 73 | "key" "branch" 74 | "tolerance" 1.00000e-12 75 | ) 76 | "MMF" FLOAT DOUBLE PROP( 77 | "units" "A*turn" 78 | "key" "node" 79 | "tolerance" 1.00000e-12 80 | ) 81 | "Wb" FLOAT DOUBLE PROP( 82 | "units" "Wb" 83 | "key" "node" 84 | "tolerance" 1.00000e-09 85 | ) 86 | "Temp" FLOAT DOUBLE PROP( 87 | "units" "C" 88 | "key" "node" 89 | "tolerance" 0.000100000 90 | ) 91 | "Pwr" FLOAT DOUBLE PROP( 92 | "units" "W" 93 | "key" "node" 94 | "tolerance" 1.00000e-09 95 | ) 96 | "U" FLOAT DOUBLE PROP( 97 | "units" "" 98 | "key" "node" 99 | "tolerance" 1.00000e-06 100 | ) 101 | "V/Sec" FLOAT DOUBLE PROP( 102 | "units" "V/s" 103 | "key" "node" 104 | "tolerance" 0.000100000 105 | ) 106 | "I/Sec" FLOAT DOUBLE PROP( 107 | "units" "A/s" 108 | "key" "node" 109 | "tolerance" 1.00000e-06 110 | ) 111 | "1/Sec" FLOAT DOUBLE PROP( 112 | "units" "1/s" 113 | "key" "node" 114 | "tolerance" 0.000100000 115 | ) 116 | "HOD" FLOAT DOUBLE PROP( 117 | "units" "" 118 | "key" "node" 119 | "tolerance" 0.0100000 120 | ) 121 | "Q" FLOAT DOUBLE PROP( 122 | "units" "coul" 123 | "key" "node" 124 | "tolerance" 1.00000e-14 125 | ) 126 | SWEEP 127 | "jittereventtime" "sweep" PROP( 128 | "sweep_direction" 0 129 | "units" "real" 130 | "plot" 0 131 | "grid" 3 132 | ) 133 | TRACE 134 | VALUE 135 | "jittereventtime" 0.000000000000000e+00 136 | "jittereventtime" 3.999999999999970e-10 137 | "jittereventtime" 6.999999999999997e-10 138 | "jittereventtime" 1.000000000000002e-09 139 | "jittereventtime" 1.000799999999999e-09 140 | "jittereventtime" 1.001589560469495e-09 141 | "jittereventtime" 1.002394780234749e-09 142 | "jittereventtime" 1.002797390117373e-09 143 | "jittereventtime" 1.003199999999997e-09 144 | "jittereventtime" 1.003278122949077e-09 145 | "jittereventtime" 1.003429954690233e-09 146 | "jittereventtime" 1.003565792639685e-09 147 | "jittereventtime" 1.003800187977392e-09 148 | "jittereventtime" 1.003973613398730e-09 149 | "jittereventtime" 1.004320464241404e-09 150 | "jittereventtime" 1.005014165926752e-09 151 | "jittereventtime" 1.006401569297443e-09 152 | "jittereventtime" 1.009176376038837e-09 153 | "jittereventtime" 1.012660673231694e-09 154 | "jittereventtime" 1.015537101916766e-09 155 | "jittereventtime" 1.017941000200046e-09 156 | "jittereventtime" 1.019069610491919e-09 157 | "jittereventtime" 1.021301008377685e-09 158 | "jittereventtime" 1.023596312675608e-09 159 | "jittereventtime" 1.026446997985364e-09 160 | "jittereventtime" 1.029716230004238e-09 161 | "jittereventtime" 1.033978800467510e-09 162 | "jittereventtime" 1.039920295759840e-09 163 | "jittereventtime" 1.049172208931443e-09 164 | "jittereventtime" 1.064915340335263e-09 165 | "jittereventtime" 1.096401603142897e-09 166 | "jittereventtime" 1.159374128758164e-09 167 | "jittereventtime" 1.285319179988705e-09 168 | "jittereventtime" 1.537209282449780e-09 169 | "jittereventtime" 1.937209282449783e-09 170 | "jittereventtime" 1.999999999999998e-09 171 | "jittereventtime" 2.337209282449780e-09 172 | "jittereventtime" 2.737209282449784e-09 173 | "jittereventtime" 3.000000000000000e-09 174 | "jittereventtime" 3.137209282449781e-09 175 | "jittereventtime" 3.537209282449784e-09 176 | "jittereventtime" 3.937209282449781e-09 177 | "jittereventtime" 4.000000000000003e-09 178 | "jittereventtime" 4.337209282449785e-09 179 | "jittereventtime" 4.737209282449782e-09 180 | "jittereventtime" 4.999999999999998e-09 181 | "jittereventtime" 5.137209282449786e-09 182 | "jittereventtime" 5.537209282449782e-09 183 | "jittereventtime" 5.768604641224888e-09 184 | "jittereventtime" 6.000000000000001e-09 185 | "jittereventtime" 6.000800000000004e-09 186 | "jittereventtime" 6.001608000368437e-09 187 | "jittereventtime" 6.002395563382385e-09 188 | "jittereventtime" 6.003200000000002e-09 189 | "jittereventtime" 6.003336066011394e-09 190 | "jittereventtime" 6.003573563114887e-09 191 | "jittereventtime" 6.003782582533802e-09 192 | "jittereventtime" 6.004070806305526e-09 193 | "jittereventtime" 6.004298758279513e-09 194 | "jittereventtime" 6.004714368092846e-09 195 | "jittereventtime" 6.005366193257235e-09 196 | "jittereventtime" 6.006390878409032e-09 197 | "jittereventtime" 6.008356433990887e-09 198 | "jittereventtime" 6.011876032175574e-09 199 | "jittereventtime" 6.018383120560086e-09 200 | "jittereventtime" 6.024273429088123e-09 201 | "jittereventtime" 6.029704553809702e-09 202 | "jittereventtime" 6.033371982041133e-09 203 | "jittereventtime" 6.037636384776900e-09 204 | "jittereventtime" 6.042323706542874e-09 205 | "jittereventtime" 6.048295675458516e-09 206 | "jittereventtime" 6.055462154901870e-09 207 | "jittereventtime" 6.064681920845968e-09 208 | "jittereventtime" 6.076815993544639e-09 209 | "jittereventtime" 6.094538342730668e-09 210 | "jittereventtime" 6.122869935710470e-09 211 | "jittereventtime" 6.179396614781297e-09 212 | "jittereventtime" 6.292449972922950e-09 213 | "jittereventtime" 6.509082316041057e-09 214 | "jittereventtime" 6.909082316041054e-09 215 | "jittereventtime" 7.000000000000003e-09 216 | "jittereventtime" 7.309082316041058e-09 217 | "jittereventtime" 7.709082316041055e-09 218 | "jittereventtime" 7.999999999999999e-09 219 | "jittereventtime" 8.109082316041058e-09 220 | "jittereventtime" 8.509082316041055e-09 221 | "jittereventtime" 8.909082316041059e-09 222 | "jittereventtime" 9.000000000000001e-09 223 | "jittereventtime" 9.309082316041056e-09 224 | "jittereventtime" 9.709082316041060e-09 225 | END 226 | -------------------------------------------------------------------------------- /samples/escaped-strings.dc: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "19.1.0.373.isr7" 5 | "date" "1:07:28 PM, Tue Feb 2, 2021" 6 | "design" "(\"test\" \"sweep\" \"schematic\" \"\")" 7 | "analysis type" "dc" 8 | "analysis name" "dc" 9 | "analysis description" "DC Analysis `dc'" 10 | "xVecSorted" "unsorted" 11 | "tolerance.relative" 0.00100000 12 | "reltol" 0.00100000 13 | "abstol(V)" 1.00000e-06 14 | "abstol(I)" 1.00000e-12 15 | "temp" 25.0000 16 | "tnom" 25.0000 17 | "tempeffects" "all" 18 | "gmindc" 1.00000e-12 19 | "rabsshort" 0.00100000 20 | TYPE 21 | "LogicV" FLOAT DOUBLE PROP( 22 | "key" "node" 23 | ) 24 | "V" FLOAT DOUBLE PROP( 25 | "units" "V" 26 | "key" "node" 27 | "tolerance" 1.00000e-06 28 | ) 29 | "I" FLOAT DOUBLE PROP( 30 | "units" "A" 31 | "key" "branch" 32 | "tolerance" 1.00000e-12 33 | ) 34 | "MMF" FLOAT DOUBLE PROP( 35 | "units" "A*turn" 36 | "key" "node" 37 | "tolerance" 1.00000e-12 38 | ) 39 | "Wb" FLOAT DOUBLE PROP( 40 | "units" "Wb" 41 | "key" "node" 42 | "tolerance" 1.00000e-09 43 | ) 44 | "Temp" FLOAT DOUBLE PROP( 45 | "units" "C" 46 | "key" "node" 47 | "tolerance" 0.000100000 48 | ) 49 | "Pwr" FLOAT DOUBLE PROP( 50 | "units" "W" 51 | "key" "node" 52 | "tolerance" 1.00000e-09 53 | ) 54 | "U" FLOAT DOUBLE PROP( 55 | "units" "" 56 | "key" "node" 57 | "tolerance" 1.00000e-06 58 | ) 59 | "V/Sec" FLOAT DOUBLE PROP( 60 | "units" "V/s" 61 | "key" "node" 62 | "tolerance" 0.000100000 63 | ) 64 | "I/Sec" FLOAT DOUBLE PROP( 65 | "units" "A/s" 66 | "key" "node" 67 | "tolerance" 1.00000e-06 68 | ) 69 | "1/Sec" FLOAT DOUBLE PROP( 70 | "units" "1/s" 71 | "key" "node" 72 | "tolerance" 0.000100000 73 | ) 74 | "HOD" FLOAT DOUBLE PROP( 75 | "units" "" 76 | "key" "node" 77 | "tolerance" 0.0100000 78 | ) 79 | "Q" FLOAT DOUBLE PROP( 80 | "units" "Coul" 81 | "key" "node" 82 | "tolerance" 1.00000e-15 83 | ) 84 | VALUE 85 | "Vsupply800m:p" "I" -1.050027794352513e-06 PROP( 86 | "units" "A" 87 | ) 88 | "I2.Idiffpair:in" "I" 4.767791259200037e-08 PROP( 89 | "units" "A" 90 | ) 91 | "vref_o" "V" 2.000000000000000e-01 92 | "I2.pup2" "V" 2.795768876173348e-07 93 | "I2.pup_b" "V" 7.999982644672001e-01 94 | "I2.diff_cm" "V" 8.761644386176266e-04 95 | "I2.comp_out_pre" "V" 1.106383385957654e-06 96 | "I2.diff_out_right" "V" 7.998743518480765e-01 97 | "I2.diff_out_left" "V" 7.998743518479743e-01 98 | "out" "V" 1.737370212928399e-07 99 | "ibias" "V" 3.588155366237979e-01 100 | "vinp" "V" 2.000000000000000e-01 101 | "pup" "V" 0.000000000000000e+00 102 | END 103 | -------------------------------------------------------------------------------- /samples/fracpole.ac: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "BINPSF creation time" "1612603409" 4 | "BINPSF creation time" "1612603161" 5 | "simulator" "spectre" 6 | "version" "20.1.0.068" 7 | "date" "1:19:20 AM, Sat Feb 6, 2021" 8 | "design" "" 9 | "analysis type" "ac" 10 | "analysis name" "impedance" 11 | "analysis description" "AC Analysis `impedance': freq = (100 uHz -> 100 Hz)" 12 | "xVecSorted" "ascending" 13 | "tolerance.relative" 0.00100000 14 | "start" 0.000100000 15 | "stop" 100.000 16 | "operating point producer" "impedance" 17 | TYPE 18 | "sweep" FLOAT DOUBLE PROP( 19 | "key" "sweep" 20 | ) 21 | "V" COMPLEX DOUBLE PROP( 22 | "units" "V" 23 | "key" "node" 24 | "tolerance" 1.00000e-06 25 | ) 26 | "I" COMPLEX DOUBLE PROP( 27 | "units" "A" 28 | "key" "branch" 29 | "tolerance" 1.00000e-12 30 | ) 31 | "MMF" COMPLEX DOUBLE PROP( 32 | "units" "A*turn" 33 | "key" "node" 34 | "tolerance" 1.00000e-12 35 | ) 36 | "Wb" COMPLEX DOUBLE PROP( 37 | "units" "Wb" 38 | "key" "node" 39 | "tolerance" 1.00000e-09 40 | ) 41 | "Temp" COMPLEX DOUBLE PROP( 42 | "units" "C" 43 | "key" "node" 44 | "tolerance" 0.000100000 45 | ) 46 | "Pwr" COMPLEX DOUBLE PROP( 47 | "units" "W" 48 | "key" "node" 49 | "tolerance" 1.00000e-09 50 | ) 51 | "U" COMPLEX DOUBLE PROP( 52 | "units" "" 53 | "key" "node" 54 | "tolerance" 1.00000e-06 55 | ) 56 | "V/Sec" COMPLEX DOUBLE PROP( 57 | "units" "V/s" 58 | "key" "node" 59 | "tolerance" 0.000100000 60 | ) 61 | "I/Sec" COMPLEX DOUBLE PROP( 62 | "units" "A/s" 63 | "key" "node" 64 | "tolerance" 1.00000e-06 65 | ) 66 | "1/Sec" COMPLEX DOUBLE PROP( 67 | "units" "1/s" 68 | "key" "node" 69 | "tolerance" 0.000100000 70 | ) 71 | "HOD" COMPLEX DOUBLE PROP( 72 | "units" "" 73 | "key" "node" 74 | "tolerance" 0.0100000 75 | ) 76 | "Q" COMPLEX DOUBLE PROP( 77 | "units" "Coul" 78 | "key" "node" 79 | "tolerance" 1.00000e-15 80 | ) 81 | SWEEP 82 | "freq" "sweep" PROP( 83 | "sweep_direction" 0 84 | "units" "Hz" 85 | "plot" 0 86 | "grid" 3 87 | ) 88 | TRACE 89 | "group" GROUP 9 90 | "z6" "V" 91 | "z2" "V" 92 | "FP6.1" "V" 93 | "FP6.2" "V" 94 | "FP6.3" "V" 95 | "FP6.4" "V" 96 | "FP6.5" "V" 97 | "FP2.1" "V" 98 | "FP2.2" "V" 99 | VALUE 100 | "freq" 0.000100000 101 | "group" (-2.83116e+07 1.29854e+06) 102 | (-4.60626e+06 8.78149e+08) 103 | (-2.82517e+07 2.10316e+06) 104 | (-2.83039e+07 1.44959e+06) 105 | (-2.83103e+07 1.32685e+06) 106 | (-2.83114e+07 1.30385e+06) 107 | (-2.83116e+07 1.29954e+06) 108 | (778810. 8.78137e+08) 109 | (-3.84468e+06 8.78152e+08) 110 | "freq" 0.000112202 111 | "group" (-2.82907e+07 1.45546e+06) 112 | (-4.44765e+06 7.82653e+08) 113 | (-2.82154e+07 2.35709e+06) 114 | (-2.82810e+07 1.62480e+06) 115 | (-2.82890e+07 1.48720e+06) 116 | (-2.82904e+07 1.46141e+06) 117 | (-2.82906e+07 1.45657e+06) 118 | (937408. 7.82640e+08) 119 | (-3.68607e+06 7.82656e+08) 120 | "freq" 0.000125893 121 | "group" (-2.82644e+07 1.63089e+06) 122 | (-4.32167e+06 6.97542e+08) 123 | (-2.81697e+07 2.64090e+06) 124 | (-2.82521e+07 1.82070e+06) 125 | (-2.82623e+07 1.66647e+06) 126 | (-2.82640e+07 1.63756e+06) 127 | (-2.82643e+07 1.63214e+06) 128 | (1.06339e+06 6.97528e+08) 129 | (-3.56009e+06 6.97545e+08) 130 | "freq" 0.000141254 131 | "group" (-2.82314e+07 1.82685e+06) 132 | (-4.22159e+06 6.21686e+08) 133 | (-2.81124e+07 2.95779e+06) 134 | (-2.82160e+07 2.03955e+06) 135 | (-2.82287e+07 1.86672e+06) 136 | (-2.82309e+07 1.83432e+06) 137 | (-2.82313e+07 1.82825e+06) 138 | (1.16345e+06 6.21671e+08) 139 | (-3.46001e+06 6.21691e+08) 140 | "freq" 0.000158489 141 | "group" (-2.81900e+07 2.04548e+06) 142 | (-4.14210e+06 5.54081e+08) 143 | (-2.80405e+07 3.31118e+06) 144 | (-2.81706e+07 2.28375e+06) 145 | (-2.81867e+07 2.09015e+06) 146 | (-2.81894e+07 2.05385e+06) 147 | (-2.81899e+07 2.04705e+06) 148 | (1.24294e+06 5.54064e+08) 149 | (-3.38051e+06 5.54085e+08) 150 | "freq" 0.000177828 151 | "group" (-2.81381e+07 2.28905e+06) 152 | (-4.07895e+06 4.93827e+08) 153 | (-2.79505e+07 3.70463e+06) 154 | (-2.81138e+07 2.55585e+06) 155 | (-2.81339e+07 2.33908e+06) 156 | (-2.81373e+07 2.29843e+06) 157 | (-2.81380e+07 2.29081e+06) 158 | (1.30607e+06 4.93809e+08) 159 | (-3.31736e+06 4.93832e+08) 160 | "freq" 0.000199526 161 | "group" (-2.80732e+07 2.55991e+06) 162 | (-4.02879e+06 4.40126e+08) 163 | (-2.78379e+07 4.14182e+06) 164 | (-2.80428e+07 2.85852e+06) 165 | (-2.80680e+07 2.61592e+06) 166 | (-2.80723e+07 2.57041e+06) 167 | (-2.80730e+07 2.56188e+06) 168 | (1.35622e+06 4.40106e+08) 169 | (-3.26719e+06 4.40132e+08) 170 | "freq" 0.000223872 171 | "group" (-2.79922e+07 2.86044e+06) 172 | (-3.98893e+06 3.92266e+08) 173 | (-2.76972e+07 4.62640e+06) 174 | (-2.79540e+07 3.19442e+06) 175 | (-2.79856e+07 2.92309e+06) 176 | (-2.79910e+07 2.87218e+06) 177 | (-2.79919e+07 2.86264e+06) 178 | (1.39605e+06 3.92244e+08) 179 | (-3.22733e+06 3.92272e+08) 180 | "freq" 0.000251189 181 | "group" (-2.78911e+07 3.19292e+06) 182 | (-3.95727e+06 3.49610e+08) 183 | (-2.75218e+07 5.16181e+06) 184 | (-2.78433e+07 3.56616e+06) 185 | (-2.78829e+07 3.26295e+06) 186 | (-2.78896e+07 3.20604e+06) 187 | (-2.78908e+07 3.19538e+06) 188 | (1.42768e+06 3.49586e+08) 189 | (-3.19565e+06 3.49617e+08) 190 | "freq" 0.000281838 191 | "group" (-2.77654e+07 3.55942e+06) 192 | (-3.93211e+06 3.11594e+08) 193 | (-2.73038e+07 5.75105e+06) 194 | (-2.77056e+07 3.97614e+06) 195 | (-2.77552e+07 3.63765e+06) 196 | (-2.77635e+07 3.57408e+06) 197 | (-2.77651e+07 3.56217e+06) 198 | (1.45281e+06 3.11567e+08) 199 | (-3.17048e+06 3.11602e+08) 200 | "freq" 0.000316228 201 | "group" (-2.76096e+07 3.96162e+06) 202 | (-3.91212e+06 2.77713e+08) 203 | (-2.70335e+07 6.39633e+06) 204 | (-2.75349e+07 4.42630e+06) 205 | (-2.75968e+07 4.04889e+06) 206 | (-2.76072e+07 3.97798e+06) 207 | (-2.76092e+07 3.96468e+06) 208 | (1.47276e+06 2.77682e+08) 209 | (-3.15047e+06 2.77721e+08) 210 | "freq" 0.000354813 211 | "group" (-2.74171e+07 4.40051e+06) 212 | (-3.89623e+06 2.47516e+08) 213 | (-2.66998e+07 7.09858e+06) 214 | (-2.73240e+07 4.91790e+06) 215 | (-2.74012e+07 4.49773e+06) 216 | (-2.74142e+07 4.41873e+06) 217 | (-2.74166e+07 4.40392e+06) 218 | (1.48860e+06 2.47482e+08) 219 | (-3.13456e+06 2.47526e+08) 220 | "freq" 0.000398107 221 | "group" (-2.71805e+07 4.87607e+06) 222 | (-3.88359e+06 2.20604e+08) 223 | (-2.62897e+07 7.85686e+06) 224 | (-2.70647e+07 5.45108e+06) 225 | (-2.71607e+07 4.98420e+06) 226 | (-2.71769e+07 4.89635e+06) 227 | (-2.71798e+07 4.87987e+06) 228 | (1.50117e+06 2.20566e+08) 229 | (-3.12189e+06 2.20615e+08) 230 | "freq" 0.000446684 231 | "group" (-2.68913e+07 5.38689e+06) 232 | (-3.87352e+06 1.96619e+08) 233 | (-2.57886e+07 8.66763e+06) 234 | (-2.67477e+07 6.02450e+06) 235 | (-2.68667e+07 5.50690e+06) 236 | (-2.68867e+07 5.40939e+06) 237 | (-2.68904e+07 5.39111e+06) 238 | (1.51114e+06 1.96576e+08) 239 | (-3.11180e+06 1.96631e+08) 240 | "freq" 0.000501187 241 | "group" (-2.65401e+07 5.92961e+06) 242 | (-3.86551e+06 1.75243e+08) 243 | (-2.51807e+07 9.52389e+06) 244 | (-2.63627e+07 6.63472e+06) 245 | (-2.65098e+07 6.06247e+06) 246 | (-2.65345e+07 5.95453e+06) 247 | (-2.65391e+07 5.93428e+06) 248 | (1.51905e+06 1.75195e+08) 249 | (-3.10375e+06 1.75257e+08) 250 | "freq" 0.000562341 251 | "group" (-2.61175e+07 6.49845e+06) 252 | (-3.85911e+06 1.56193e+08) 253 | (-2.44496e+07 1.04142e+07) 254 | (-2.58992e+07 7.27570e+06) 255 | (-2.60801e+07 6.64511e+06) 256 | (-2.61106e+07 6.52596e+06) 257 | (-2.61162e+07 6.50361e+06) 258 | (1.52532e+06 1.56139e+08) 259 | (-3.09730e+06 1.56208e+08) 260 | "freq" 0.000630957 261 | "group" (-2.56139e+07 7.08472e+06) 262 | (-3.85399e+06 1.39215e+08) 263 | (-2.35794e+07 1.13219e+07) 264 | (-2.53466e+07 7.93820e+06) 265 | (-2.55682e+07 7.24604e+06) 266 | (-2.56055e+07 7.11499e+06) 267 | (-2.56124e+07 7.09039e+06) 268 | (1.53027e+06 1.39154e+08) 269 | (-3.09211e+06 1.39232e+08) 270 | "freq" 0.000707946 271 | "group" (-2.50211e+07 7.67643e+06) 272 | (-3.84987e+06 1.24084e+08) 273 | (-2.25564e+07 1.22244e+07) 274 | (-2.46958e+07 8.60946e+06) 275 | (-2.49655e+07 7.85317e+06) 276 | (-2.50109e+07 7.70961e+06) 277 | (-2.50192e+07 7.68265e+06) 278 | (1.53417e+06 1.24017e+08) 279 | (-3.08792e+06 1.24103e+08) 280 | "freq" 0.000794328 281 | "group" (-2.43331e+07 8.25823e+06) 282 | (-3.84653e+06 1.10600e+08) 283 | (-2.13711e+07 1.30930e+07) 284 | (-2.39400e+07 9.27307e+06) 285 | (-2.42659e+07 8.45098e+06) 286 | (-2.43207e+07 8.29443e+06) 287 | (-2.43308e+07 8.26502e+06) 288 | (1.53723e+06 1.10524e+08) 289 | (-3.08448e+06 1.10621e+08) 290 | "freq" 0.000891251 291 | "group" (-2.35474e+07 8.81183e+06) 292 | (-3.84380e+06 9.85835e+07) 293 | (-2.00207e+07 1.38937e+07) 294 | (-2.30761e+07 9.90940e+06) 295 | (-2.34670e+07 9.02098e+06) 296 | (-2.35326e+07 8.85113e+06) 297 | (-2.35446e+07 8.81919e+06) 298 | (1.53962e+06 9.84986e+07) 299 | (-3.08163e+06 9.86074e+07) 300 | "freq" 0.00100000 301 | "group" (-2.26667e+07 9.31693e+06) 302 | (-3.84154e+06 8.78752e+07) 303 | (-1.85117e+07 1.45891e+07) 304 | (-2.21065e+07 1.04967e+07) 305 | (-2.25713e+07 9.54265e+06) 306 | (-2.26491e+07 9.35937e+06) 307 | (-2.26634e+07 9.32489e+06) 308 | (1.54145e+06 8.77800e+07) 309 | (-3.07921e+06 8.79019e+07) 310 | "freq" 0.00112202 311 | "group" (-2.16996e+07 9.75294e+06) 312 | (-3.83961e+06 7.83329e+07) 313 | (-1.68612e+07 1.51410e+07) 314 | (-2.10401e+07 1.10128e+07) 315 | (-2.15874e+07 9.99516e+06) 316 | (-2.16790e+07 9.79852e+06) 317 | (-2.16957e+07 9.76149e+06) 318 | (1.54284e+06 7.82261e+07) 319 | (-3.07709e+06 7.83628e+07) 320 | "freq" 0.00125893 321 | "group" (-2.06610e+07 1.01011e+07) 322 | (-3.83792e+06 6.98300e+07) 323 | (-1.50983e+07 1.55145e+07) 324 | (-1.98926e+07 1.14376e+07) 325 | (-2.05306e+07 1.03596e+07) 326 | (-2.06370e+07 1.01498e+07) 327 | (-2.06565e+07 1.01102e+07) 328 | (1.54384e+06 6.97102e+07) 329 | (-3.07515e+06 6.98635e+07) 330 | "freq" 0.00141254 331 | "group" (-1.95716e+07 1.03469e+07) 332 | (-3.83639e+06 6.22537e+07) 333 | (-1.32627e+07 1.56824e+07) 334 | (-1.86855e+07 1.17554e+07) 335 | (-1.94216e+07 1.06212e+07) 336 | (-1.95441e+07 1.03986e+07) 337 | (-1.95665e+07 1.03566e+07) 338 | (1.54452e+06 6.21194e+07) 339 | (-3.07330e+06 6.22913e+07) 340 | "freq" 0.00158489 341 | "group" (-1.84562e+07 1.04820e+07) 342 | (-3.83491e+06 5.55034e+07) 343 | (-1.14017e+07 1.56286e+07) 344 | (-1.74448e+07 1.19575e+07) 345 | (-1.82855e+07 1.07718e+07) 346 | (-1.84249e+07 1.05367e+07) 347 | (-1.84504e+07 1.04923e+07) 348 | (1.54491e+06 5.53529e+07) 349 | (-3.07144e+06 5.55457e+07) 350 | "freq" 0.00177828 351 | "group" (-1.73410e+07 1.05059e+07) 352 | (-3.83343e+06 4.94897e+07) 353 | (-9.56640e+06 1.53509e+07) 354 | (-1.61981e+07 1.20432e+07) 355 | (-1.71488e+07 1.08109e+07) 356 | (-1.73058e+07 1.05636e+07) 357 | (-1.73345e+07 1.05168e+07) 358 | (1.54504e+06 4.93208e+07) 359 | (-3.06946e+06 4.95370e+07) 360 | "freq" 0.00199526 361 | "group" (-1.62510e+07 1.04256e+07) 362 | (-3.83186e+06 4.41326e+07) 363 | (-7.80591e+06 1.48614e+07) 364 | (-1.49711e+07 1.20198e+07) 365 | (-1.60366e+07 1.07456e+07) 366 | (-1.62118e+07 1.04863e+07) 367 | (-1.62437e+07 1.04370e+07) 368 | (1.54490e+06 4.39432e+07) 369 | (-3.06727e+06 4.41857e+07) 370 | "freq" 0.00223872 371 | "group" (-1.52071e+07 1.02547e+07) 372 | (-3.83011e+06 3.93611e+07) 373 | (-6.16323e+06 1.41843e+07) 374 | (-1.37851e+07 1.19016e+07) 375 | (-1.49700e+07 1.05898e+07) 376 | (-1.51638e+07 1.03183e+07) 377 | (-1.51990e+07 1.02666e+07) 378 | (1.54449e+06 3.91488e+07) 379 | (-3.06475e+06 3.94206e+07) 380 | "freq" 0.00251189 381 | "group" (-1.42242e+07 1.00109e+07) 382 | (-3.82810e+06 3.51119e+07) 383 | (-4.67160e+06 1.33529e+07) 384 | (-1.26548e+07 1.17073e+07) 385 | (-1.39639e+07 1.03617e+07) 386 | (-1.41768e+07 1.00776e+07) 387 | (-1.42154e+07 1.00235e+07) 388 | (1.54380e+06 3.48738e+07) 389 | (-3.06176e+06 3.51786e+07) 390 | "freq" 0.00281838 391 | "group" (-1.33108e+07 9.71423e+06) 392 | (-3.82572e+06 3.13286e+07) 393 | (-3.35299e+06 1.24056e+07) 394 | (-1.15876e+07 1.14571e+07) 395 | (-1.30267e+07 1.00814e+07) 396 | (-1.32591e+07 9.78426e+06) 397 | (-1.33012e+07 9.72740e+06) 398 | (1.54278e+06 3.10617e+07) 399 | (-3.05815e+06 3.14033e+07) 400 | "freq" 0.00316228 401 | "group" (-1.24688e+07 9.38382e+06) 402 | (-3.82284e+06 2.79608e+07) 403 | (-2.21821e+06 1.13816e+07) 404 | (-1.05837e+07 1.11699e+07) 405 | (-1.21599e+07 9.76835e+06) 406 | (-1.24127e+07 9.45738e+06) 407 | (-1.24584e+07 9.39766e+06) 408 | (1.54138e+06 2.76617e+07) 409 | (-3.05373e+06 2.80446e+07) 410 | "freq" 0.00354813 411 | "group" (-1.16949e+07 9.03634e+06) 412 | (-3.81932e+06 2.49640e+07) 413 | (-1.26831e+06 1.03180e+07) 414 | (-9.63822e+06 1.08614e+07) 415 | (-1.13599e+07 9.43941e+06) 416 | (-1.16343e+07 9.11369e+06) 417 | (-1.16836e+07 9.05090e+06) 418 | (1.53954e+06 2.46289e+07) 419 | (-3.04827e+06 2.50578e+07) 420 | "freq" 0.00398107 421 | "group" (-1.09821e+07 8.68464e+06) 422 | (-3.81498e+06 2.22984e+07) 423 | (-496694. 9.24780e+06) 424 | (-8.74232e+06 1.05420e+07) 425 | (-1.06195e+07 9.10740e+06) 426 | (-1.09167e+07 8.76607e+06) 427 | (-1.09699e+07 8.69997e+06) 428 | (1.53715e+06 2.19229e+07) 429 | (-3.04149e+06 2.24034e+07) 430 | "freq" 0.00446684 431 | "group" (-1.03215e+07 8.33723e+06) 432 | (-3.80959e+06 1.99284e+07) 433 | (108786. 8.19884e+06) 434 | (-7.88596e+06 1.02171e+07) 435 | (-9.92930e+06 8.78076e+06) 436 | (-1.02510e+07 8.42303e+06) 437 | (-1.03084e+07 8.35340e+06) 438 | (1.53409e+06 1.95080e+07) 439 | (-3.03304e+06 2.00459e+07) 440 | "freq" 0.00501187 441 | "group" (-9.70422e+06 7.99849e+06) 442 | (-3.80288e+06 1.78225e+07) 443 | (563894. 7.19359e+06) 444 | (-7.05982e+06 9.88677e+06) 445 | (-9.28003e+06 8.46359e+06) 446 | (-9.62825e+06 8.08891e+06) 447 | (-9.69011e+06 8.01554e+06) 448 | (1.53022e+06 1.73521e+07) 449 | (-3.02251e+06 1.79539e+07) 450 | "freq" 0.00562341 451 | "group" (-9.12222e+06 7.66928e+06) 452 | (-3.79453e+06 1.59528e+07) 453 | (886574. 6.24938e+06) 454 | (-6.25710e+06 9.54707e+06) 455 | (-8.66355e+06 8.15647e+06) 456 | (-9.04040e+06 7.76454e+06) 457 | (-9.10704e+06 7.68727e+06) 458 | (1.52534e+06 1.54267e+07) 459 | (-3.00937e+06 1.60996e+07) 460 | "freq" 0.00630957 461 | "group" (-8.56970e+06 7.34806e+06) 462 | (-3.78412e+06 1.42942e+07) 463 | (1.09588e+06 5.37877e+06) 464 | (-5.47471e+06 9.19152e+06) 465 | (-8.07393e+06 7.85749e+06) 466 | (-8.48164e+06 7.44834e+06) 467 | (-8.55338e+06 7.36701e+06) 468 | (1.51921e+06 1.37063e+07) 469 | (-2.99298e+06 1.44580e+07) 470 | "freq" 0.00707946 471 | "group" (-8.04334e+06 7.03205e+06) 472 | (-3.77116e+06 1.28246e+07) 473 | (1.21120e+06 4.58997e+06) 474 | (-4.71374e+06 8.81294e+06) 475 | (-7.50788e+06 7.56356e+06) 476 | (-7.94866e+06 7.13749e+06) 477 | (-8.02581e+06 7.05200e+06) 478 | (1.51154e+06 1.21682e+07) 479 | (-2.97257e+06 1.30071e+07) 480 | "freq" 0.00794328 481 | "group" (-7.54221e+06 6.71846e+06) 482 | (-3.75505e+06 1.15240e+07) 483 | (1.25154e+06 3.88713e+06) 484 | (-3.97915e+06 8.40526e+06) 485 | (-6.96460e+06 7.27168e+06) 486 | (-7.44056e+06 6.82921e+06) 487 | (-7.52342e+06 6.73945e+06) 488 | (1.50199e+06 1.07923e+07) 489 | (-2.94720e+06 1.17270e+07) 490 | "freq" 0.00891251 491 | "group" (-7.06724e+06 6.40549e+06) 492 | (-3.73509e+06 1.03749e+07) 493 | (1.23497e+06 3.27076e+06) 494 | (-3.27882e+06 7.96501e+06) 495 | (-6.44516e+06 6.97992e+06) 496 | (-6.95833e+06 6.52170e+06) 497 | (-7.04713e+06 6.42754e+06) 498 | (1.49013e+06 9.56041e+06) 499 | (-2.91575e+06 1.06003e+07) 500 | "freq" 0.0100000 501 | "group" (-6.62039e+06 6.09285e+06) 502 | (-3.71043e+06 9.36149e+06) 503 | (1.17791e+06 2.73813e+06) 504 | (-2.62205e+06 7.49215e+06) 505 | (-5.95159e+06 6.68800e+06) 506 | (-6.50393e+06 6.21472e+06) 507 | (-6.59891e+06 6.11602e+06) 508 | (1.47547e+06 8.45661e+06) 509 | (-2.87692e+06 9.61100e+06) 510 | "freq" 0.0112202 511 | "group" (-6.20366e+06 5.78191e+06) 512 | (-3.68011e+06 8.46954e+06) 513 | (1.09465e+06 2.28390e+06) 514 | (-2.01799e+06 6.99025e+06) 515 | (-5.48585e+06 6.39743e+06) 516 | (-6.07941e+06 5.90973e+06) 517 | (-6.18078e+06 5.80626e+06) 518 | (1.45743e+06 7.46668e+06) 519 | (-2.82918e+06 8.74484e+06) 520 | "freq" 0.0125893 521 | "group" (-5.81835e+06 5.47543e+06) 522 | (-3.64303e+06 7.68625e+06) 523 | (996973. 1.90082e+06) 524 | (-1.47424e+06 6.46590e+06) 525 | (-5.04902e+06 6.11106e+06) 526 | (-5.68602e+06 5.60956e+06) 527 | (-5.79403e+06 5.50104e+06) 528 | (1.43536e+06 6.57806e+06) 529 | (-2.77081e+06 7.98877e+06) 530 | "freq" 0.0141254 531 | "group" (-5.46451e+06 5.17695e+06) 532 | (-3.59798e+06 6.99993e+06) 533 | (893969. 1.58055e+06) 534 | (-995999. 5.92776e+06) 535 | (-4.64066e+06 5.83246e+06) 536 | (-5.32376e+06 5.31786e+06) 537 | (-5.43870e+06 5.20392e+06) 538 | (1.40856e+06 5.77976e+06) 539 | (-2.69996e+06 7.33068e+06) 540 | "freq" 0.0158489 541 | "group" (-5.14075e+06 4.89011e+06) 542 | (-3.54371e+06 6.39982e+06) 543 | (792172. 1.31439e+06) 544 | (-585664. 5.38548e+06) 545 | (-4.25874e+06 5.56508e+06) 546 | (-4.99112e+06 5.03834e+06) 547 | (-5.11338e+06 4.91857e+06) 548 | (1.37628e+06 5.06215e+06) 549 | (-2.61466e+06 6.75921e+06) 550 | "freq" 0.0177828 551 | "group" (-4.84438e+06 4.61806e+06) 552 | (-3.47896e+06 5.87589e+06) 553 | (695840. 1.09391e+06) 554 | (-242962. 4.84863e+06) 555 | (-3.89984e+06 5.31156e+06) 556 | (-4.68529e+06 4.77418e+06) 557 | (-4.81536e+06 4.64812e+06) 558 | (1.33779e+06 4.41699e+06) 559 | (-2.51301e+06 6.26345e+06) 560 | "freq" 0.0199526 561 | "group" (-4.57178e+06 4.36292e+06) 562 | (-3.40264e+06 5.41865e+06) 563 | (607384. 911413.) 564 | (34630.5 4.32604e+06) 565 | (-3.55956e+06 5.07314e+06) 566 | (-4.40251e+06 4.52752e+06) 567 | (-4.54100e+06 4.39473e+06) 568 | (1.29245e+06 3.83721e+06) 569 | (-2.39334e+06 5.83279e+06) 570 | "freq" 0.0223872 571 | "group" (-4.31890e+06 4.12559e+06) 572 | (-3.31390e+06 5.01904e+06) 573 | (527832. 760159.) 574 | (251337. 3.82531e+06) 575 | (-3.23325e+06 4.84942e+06) 576 | (-4.13855e+06 4.29920e+06) 577 | (-4.28621e+06 4.15928e+06) 578 | (1.23980e+06 3.31693e+06) 579 | (-2.25446e+06 5.45675e+06) 580 | "freq" 0.0251189 581 | "group" (-4.08173e+06 3.90571e+06) 582 | (-3.21237e+06 4.66840e+06) 583 | (457264. 634475.) 584 | (412566. 3.35266e+06) 585 | (-2.91663e+06 4.63833e+06) 586 | (-3.88928e+06 4.08877e+06) 587 | (-4.04697e+06 3.94140e+06) 588 | (1.17965e+06 2.85126e+06) 589 | (-2.09593e+06 5.12498e+06) 590 | "freq" 0.0281838 591 | "group" (-3.85679e+06 3.70179e+06) 592 | (-3.09831e+06 4.35848e+06) 593 | (395183. 529719.) 594 | (524488. 2.91292e+06) 595 | (-2.60645e+06 4.43639e+06) 596 | (-3.65111e+06 3.89461e+06) 597 | (-3.81978e+06 3.73959e+06) 598 | (1.11221e+06 2.43617e+06) 599 | (-1.91839e+06 4.82738e+06) 600 | "freq" 0.0316228 601 | "group" (-3.64148e+06 3.51157e+06) 602 | (-2.97275e+06 4.08158e+06) 603 | (340807. 442168.) 604 | (593728. 2.50959e+06) 605 | (-2.30093e+06 4.23918e+06) 606 | (-3.42138e+06 3.71430e+06) 607 | (-3.60204e+06 3.55156e+06) 608 | (1.03817e+06 2.06831e+06) 609 | (-1.72374e+06 4.55431e+06) 610 | "freq" 0.0354813 611 | "group" (-3.43424e+06 3.33238e+06) 612 | (-2.83752e+06 3.83077e+06) 613 | (293265. 368870.) 614 | (627138. 2.14487e+06) 615 | (-2.00007e+06 4.04203e+06) 616 | (-3.19854e+06 3.54503e+06) 617 | (-3.39220e+06 3.37464e+06) 618 | (958720. 1.74472e+06) 619 | (-1.51528e+06 4.29703e+06) 620 | "freq" 0.0398107 621 | "group" (-3.23460e+06 3.16163e+06) 622 | (-2.69526e+06 3.60013e+06) 623 | (251728. 307485.) 624 | (631598. 1.81975e+06) 625 | (-1.70561e+06 3.84064e+06) 626 | (-2.98215e+06 3.38409e+06) 627 | (-3.18978e+06 3.20622e+06) 628 | (875536. 1.46264e+06) 629 | (-1.29760e+06 4.04814e+06) 630 | "freq" 0.0446684 631 | "group" (-3.04298e+06 2.99720e+06) 632 | (-2.54911e+06 3.38502e+06) 633 | (215464. 256133.) 634 | (613804. 1.53401e+06) 635 | (-1.42072e+06 3.63181e+06) 636 | (-2.77269e+06 3.22928e+06) 637 | (-2.99524e+06 3.04418e+06) 638 | (790651. 1.21923e+06) 639 | (-1.07628e+06 3.80196e+06) 640 | "freq" 0.0501187 641 | "group" (-2.86039e+06 2.83772e+06) 642 | (-2.40246e+06 3.18214e+06) 643 | (183862. 213273.) 644 | (580040. 1.28629e+06) 645 | (-1.14944e+06 3.41380e+06) 646 | (-2.57121e+06 3.07919e+06) 647 | (-2.80958e+06 2.88716e+06) 648 | (706257. 1.01147e+06) 649 | (-857355. 3.55479e+06) 650 | "freq" 0.0562341 651 | "group" (-2.68802e+06 2.68266e+06) 652 | (-2.25855e+06 2.98957e+06) 653 | (156413. 177603.) 654 | (535939. 1.07428e+06) 655 | (-896085. 3.18656e+06) 656 | (-2.37892e+06 2.93333e+06) 657 | (-2.63402e+06 2.73466e+06) 658 | (624486. 836030.) 659 | (-646745. 3.30498e+06) 660 | "freq" 0.0630957 661 | "group" (-2.52688e+06 2.53227e+06) 662 | (-2.12010e+06 2.80661e+06) 663 | (132681. 148001.) 664 | (486282. 894849.) 665 | (-664560. 2.95158e+06) 666 | (-2.19678e+06 2.79200e+06) 667 | (-2.46957e+06 2.58698e+06) 668 | (547195. 689354.) 669 | (-449686. 3.05267e+06) 670 | "freq" 0.0707946 671 | "group" (-2.37752e+06 2.38739e+06) 672 | (-1.98903e+06 2.63341e+06) 673 | (112283. 123487.) 674 | (434875. 744397.) 675 | (-457892. 2.71156e+06) 676 | (-2.02518e+06 2.65605e+06) 677 | (-2.31675e+06 2.44498e+06) 678 | (475805. 567754.) 679 | (-270313. 2.79938e+06) 680 | "freq" 0.0794328 681 | "group" (-2.23989e+06 2.24914e+06) 682 | (-1.86637e+06 2.47071e+06) 683 | (94857.4 103204.) 684 | (384526. 619100.) 685 | (-277961. 2.46993e+06) 686 | (-1.86383e+06 2.52655e+06) 687 | (-2.17547e+06 2.30981e+06) 688 | (411225. 467572.) 689 | (-111457. 2.54749e+06) 690 | "freq" 0.0891251 691 | "group" (-2.11331e+06 2.11859e+06) 692 | (-1.75222e+06 2.31936e+06) 693 | (80060.3 86410.4) 694 | (337108. 515190.) 695 | (-125458. 2.23040e+06) 696 | (-1.71175e+06 2.40446e+06) 697 | (-2.04500e+06 2.18258e+06) 698 | (353859. 385341.) 699 | (25353.3 2.29976e+06) 700 | "freq" 0.100000 701 | "group" (-1.99658e+06 1.99657e+06) 702 | (-1.64590e+06 2.18011e+06) 703 | (67558.9 72475.8) 704 | (293706. 429157.) 705 | (-1.65315 1.99658e+06) 706 | (-1.56742e+06 2.29028e+06) 707 | (-1.92410e+06 2.06413e+06) 708 | (303666. 317914.) 709 | (139717. 2.05895e+06) 710 | "freq" 0.112202 711 | "group" (-1.88820e+06 1.88348e+06) 712 | (-1.54616e+06 2.05335e+06) 713 | (57036.0 60873.2) 714 | (254781. 357886.) 715 | (99652.1 1.77167e+06) 716 | (-1.42903e+06 2.18393e+06) 717 | (-1.81118e+06 1.95484e+06) 718 | (260268. 262538.) 719 | (232114. 1.82749e+06) 720 | "freq" 0.125893 721 | "group" (-1.78655e+06 1.77921e+06) 722 | (-1.45136e+06 1.93895e+06) 723 | (48195.7 51171.9) 724 | (220361. 298715.) 725 | (175379. 1.55842e+06) 726 | (-1.29478e+06 2.08465e+06) 727 | (-1.70458e+06 1.85456e+06) 728 | (223058. 216888.) 729 | (303639. 1.60743e+06) 730 | "freq" 0.141254 731 | "group" (-1.69015e+06 1.68316e+06) 732 | (-1.35975e+06 1.83623e+06) 733 | (40769.3 43026.0) 734 | (190192. 249438.) 735 | (229487. 1.35900e+06) 736 | (-1.16315e+06 1.99103e+06) 737 | (-1.60272e+06 1.76265e+06) 738 | (191310. 179060.) 739 | (355772. 1.40040e+06) 740 | "freq" 0.158489 741 | "group" (-1.59775e+06 1.59435e+06) 742 | (-1.26967e+06 1.74398e+06) 743 | (34520.4 36161.7) 744 | (163876. 208278.) 745 | (264564. 1.17505e+06) 746 | (-1.03314e+06 1.90117e+06) 747 | (-1.50437e+06 1.67807e+06) 748 | (164258. 147536.) 749 | (390219. 1.20763e+06) 750 | "freq" 0.177828 751 | "group" (-1.50857e+06 1.51158e+06) 752 | (-1.17973e+06 1.66053e+06) 753 | (29246.5 30364.0) 754 | (140964. 173815.) 755 | (283366. 1.00768e+06) 756 | (-904457. 1.81296e+06) 757 | (-1.40870e+06 1.59954e+06) 758 | (141163. 121126.) 759 | (408817. 1.03004e+06) 760 | "freq" 0.199526 761 | "group" (-1.42223e+06 1.43359e+06) 762 | (-1.08902e+06 1.58383e+06) 763 | (24779.7 25464.0) 764 | (121022. 144932.) 765 | (288725. 857510.) 766 | (-777555. 1.72430e+06) 767 | (-1.31534e+06 1.52574e+06) 768 | (121359. 98921.9) 769 | (413502. 868314.) 770 | "freq" 0.223872 771 | "group" (-1.33880e+06 1.35925e+06) 772 | (-997182. 1.51170e+06) 773 | (20983.9 21326.8) 774 | (103664. 120735.) 775 | (283469. 724643.) 776 | (-653586. 1.63343e+06) 777 | (-1.22439e+06 1.45549e+06) 778 | (104269. 80229.9) 779 | (406295. 722872.) 780 | "freq" 0.251189 781 | "group" (-1.25867e+06 1.28772e+06) 782 | (-904476. 1.44199e+06) 783 | (17750.7 17842.2) 784 | (88564.0 100501.) 785 | (270321. 608702.) 786 | (-534212. 1.53916e+06) 787 | (-1.13626e+06 1.38793e+06) 788 | (89423.6 64522.9) 789 | (389309. 593907.) 790 | "freq" 0.281838 791 | "group" (-1.18237e+06 1.21851e+06) 792 | (-811742. 1.37280e+06) 793 | (14994.6 14917.0) 794 | (75453.6 83627.3) 795 | (251794. 508862.) 796 | (-421344. 1.44103e+06) 797 | (-1.05149e+06 1.32257e+06) 798 | (76455.5 51390.2) 799 | (364727. 481323.) 800 | "freq" 0.316228 801 | "group" (-1.11046e+06 1.15154e+06) 802 | (-720278. 1.30271e+06) 803 | (12647.5 12470.2) 804 | (64110.5 69599.4) 805 | (230093. 423919.) 806 | (-316856. 1.33929e+06) 807 | (-970632. 1.25931e+06) 808 | (65088.1 40498.9) 809 | (334738. 384694.) 810 | "freq" 0.354813 811 | "group" (-1.04331e+06 1.08699e+06) 812 | (-631644. 1.23086e+06) 813 | (10653.5 10429.9) 814 | (54344.1 57968.6) 815 | (207037. 352396.) 816 | (-222336. 1.23481e+06) 817 | (-894014. 1.19837e+06) 818 | (55118.4 31562.9) 819 | (301457. 303239.) 820 | "freq" 0.398107 821 | "group" (-981071. 1.02528e+06) 822 | (-547438. 1.15703e+06) 823 | (8965.71 8731.85) 824 | (45982.9 48341.6) 825 | (184027. 292660.) 826 | (-138921. 1.12892e+06) 827 | (-821699. 1.14014e+06) 828 | (46396.7 24324.1) 829 | (266812. 235838.) 830 | "freq" 0.446684 831 | "group" (-923606. 966881.) 832 | (-469075. 1.08156e+06) 833 | (7542.72 7319.38) 834 | (38866.5 40375.3) 835 | (162046. 243048.) 836 | (-67225.5 1.02315e+06) 837 | (-753429. 1.08505e+06) 838 | (38807.0 18541.0) 839 | (232446. 181091.) 840 | "freq" 0.501187 841 | "group" (-870518. 912191.) 842 | (-397632. 1.00520e+06) 843 | (6347.55 6143.10) 844 | (32841.9 33774.4) 845 | (141709. 201966.) 846 | (-7358.26 919101.) 847 | (-688668. 1.03338e+06) 848 | (32250.6 13986.9) 849 | (199649. 137415.) 850 | "freq" 0.562341 851 | "group" (-821221. 861466.) 852 | (-333759. 928976.) 853 | (5346.67 5161.00) 854 | (27762.9 28289.6) 855 | (123324. 167967.) 856 | (41001.8 818261.) 857 | (-626694. 985205.) 858 | (26635.6 10450.8) 859 | (169333. 103158.) 860 | "freq" 0.630957 861 | "group" (-775032. 814754.) 862 | (-277675. 853973.) 863 | (4509.86 4338.05) 864 | (23492.3 23714.6) 865 | (106975. 139789.) 866 | (78508.8 721933.) 867 | (-566717. 940304.) 868 | (21870.6 7741.66) 869 | (142045. 76703.7) 870 | "freq" 0.707946 871 | "group" (-731265. 771883.) 872 | (-229222. 781215.) 873 | (3810.22 3645.75) 874 | (19904.3 19882.2) 875 | (92593.3 116373.) 876 | (106055. 631195.) 877 | (-508007. 898159.) 878 | (17863.5 5691.39) 879 | (118029. 56558.7) 880 | "freq" 0.794328 881 | "group" (-689317. 732487.) 882 | (-187953. 711569.) 883 | (3224.31 3061.26) 884 | (16886.4 16659.3) 885 | (80021.6 96854.1) 886 | (124692. 546892.) 887 | (-450019. 857999.) 888 | (14522.6 4156.66) 889 | (97282.9 41405.8) 890 | "freq" 0.891251 891 | "group" (-648742. 696062.) 892 | (-153233. 645691.) 893 | (2732.11 2566.56) 894 | (14341.3 13941.1) 895 | (69062.9 80539.1) 896 | (135578. 469641.) 897 | (-392486. 818884.) 898 | (11758.7 3018.80) 899 | (79639.5 30128.3) 900 | "freq" 1.00000 901 | "group" (-609286. 662039.) 902 | (-124326. 584025.) 903 | (2317.01 2147.46) 904 | (12187.2 11645.3) 905 | (59516.0 66880.3) 906 | (139931. 399834.) 907 | (-335474. 779830.) 908 | (9488.04 2182.09) 909 | (64827.3 21810.7) 910 | "freq" 1.12202 911 | "group" (-570891. 629869.) 912 | (-100469. 526812.) 913 | (1965.48 1792.67) 914 | (10357.0 9707.09) 915 | (51195.8 55443.6) 916 | (138992. 337644.) 917 | (-279386. 739936.) 918 | (7633.59 1571.11) 919 | (52523.3 15722.6) 920 | "freq" 1.25893 921 | "group" (-533668. 599100.) 922 | (-80921.2 474126.) 923 | (1666.75 1493.07) 924 | (8796.99 8074.19) 925 | (43943.8 45881.4) 926 | (133987. 283025.) 927 | (-224903. 698514.) 928 | (6126.75 1127.53) 929 | (42391.5 11294.4) 930 | "freq" 1.41254 931 | "group" (-497832. 569426.) 932 | (-65000.7 425910.) 933 | (1412.36 1240.99) 934 | (7464.87 6703.07) 935 | (37628.6 37907.7) 936 | (126078. 235719.) 937 | (-172888. 655172.) 938 | (4907.55 807.048) 939 | (34107.1 8090.28) 940 | "freq" 1.58489 941 | "group" (-463632. 540712.) 942 | (-52097.5 382011.) 943 | (1195.62 1029.79) 944 | (6327.15 5556.33) 945 | (32143.0 31281.3) 946 | (116315. 195281.) 947 | (-124256. 609859.) 948 | (3924.55 576.408) 949 | (27372.1 5781.72) 950 | "freq" 1.77828 951 | "group" (-431276. 512981.) 952 | (-41681.2 342208.) 953 | (1011.19 853.547) 954 | (5356.93 4600.92) 955 | (27396.6 25793.1) 956 | (105596. 161118.) 957 | (-79849.0 562837.) 958 | (3134.29 410.960) 959 | (21922.0 4124.16) 960 | "freq" 1.99526 961 | "group" (-400875. 486364.) 962 | (-33299.6 306242.) 963 | (854.642 706.950) 964 | (4531.85 3807.31) 965 | (23310.4 21259.6) 966 | (94638.2 132534.) 967 | (-40342.2 514626.) 968 | (2500.46 292.587) 969 | (17528.1 2937.35) 970 | "freq" 2.23872 971 | "group" (-372411. 461046.) 972 | (-26572.7 273832.) 973 | (722.184 585.219) 974 | (3832.62 3149.17) 975 | (19811.6 17520.0) 976 | (83970.6 108793.) 977 | (-6183.19 465906.) 978 | (1993.08 208.073) 979 | (13996.3 2089.53) 980 | "freq" 2.51189 981 | "group" (-345742. 437204.) 982 | (-21184.9 244691.) 983 | (610.461 484.142) 984 | (3242.04 2603.35) 985 | (16830.8 14434.3) 986 | (73943.4 89165.3) 987 | (22418.8 417431.) 988 | (1587.54 147.836) 989 | (11164.2 1484.98) 990 | "freq" 2.81838 991 | "group" (-320622. 414950.) 992 | (-16877.0 218535.) 993 | (516.454 400.080) 994 | (2744.52 2149.92) 995 | (14301.3 11883.5) 996 | (64754.5 72972.2) 997 | (45474.0 369949.) 998 | (1263.82 104.961) 999 | (8897.69 1054.51) 1000 | "freq" 3.16228 1001 | "group" (-296743. 394298.) 1002 | (-13437.2 195094.) 1003 | (437.438 329.970) 1004 | (2325.93 1772.14) 1005 | (12159.9 9768.37) 1006 | (56482.2 59610.6) 1007 | (63174.6 324153.) 1008 | (1005.65 74.4771) 1009 | (7086.47 748.359) 1010 | "freq" 3.54813 1011 | "group" (-273784. 375150.) 1012 | (-10693.3 174107.) 1013 | (370.976 271.301) 1014 | (1973.53 1456.32) 1015 | (10347.5 8007.94) 1016 | (49120.7 48567.7) 1017 | (75853.4 280651.) 1018 | (799.938 52.8219) 1019 | (5640.88 530.828) 1020 | "freq" 3.98107 1021 | "group" (-251463. 357296.) 1022 | (-8506.54 155337.) 1023 | (314.930 222.061) 1024 | (1676.12 1191.48) 1025 | (8810.67 6537.79) 1026 | (42611.7 39421.2) 1027 | (83947.8 239952.) 1028 | (636.122 37.4493) 1029 | (4488.25 376.379) 1030 | "freq" 4.46684 1031 | "group" (-229573. 340444.) 1032 | (-6764.91 138560.) 1033 | (267.467 180.668) 1034 | (1424.08 969.024) 1035 | (7502.78 5307.48) 1036 | (36870.9 31833.1) 1037 | (87973.7 202468.) 1038 | (505.738 26.5427) 1039 | (3569.91 266.784) 1040 | "freq" 5.01187 1041 | "group" (-208019. 324251.) 1042 | (-5378.58 123574.) 1043 | (227.060 145.892) 1044 | (1209.37 782.255) 1045 | (6384.30 4277.92) 1046 | (31807.3 25537.0) 1047 | (88505.2 168503.) 1048 | (402.006 18.8080) 1049 | (2838.70 189.053) 1050 | "freq" 5.62341 1051 | "group" (-186825. 308372.) 1052 | (-4275.53 110194.) 1053 | (192.471 116.772) 1054 | (1025.46 625.951) 1055 | (5422.93 3418.71) 1056 | (27336.1 20324.2) 1057 | (86157.7 138256.) 1058 | (319.504 13.3248) 1059 | (2256.76 133.943) 1060 | "freq" 6.30957 1061 | "group" (-166129. 292511.) 1062 | (-3398.17 98251.9) 1063 | (162.727 92.5393) 1064 | (867.228 495.946) 1065 | (4593.12 2705.77) 1066 | (23385.1 16029.3) 1067 | (81567.5 111807.) 1068 | (253.904 9.43868) 1069 | (1793.81 94.8833) 1070 | "freq" 7.07946 1071 | "group" (-146154. 276457.) 1072 | (-2700.53 87596.4) 1073 | (137.078 72.5557) 1074 | (730.707 388.779) 1075 | (3875.12 2119.21) 1076 | (19896.5 12517.3) 1077 | (75366.3 89117.0) 1078 | (201.755 6.68515) 1079 | (1425.64 67.2052) 1080 | "freq" 7.94328 1081 | "group" (-127166. 260107.) 1082 | (-2145.91 78091.2) 1083 | (114.951 56.2622) 1084 | (612.880 301.429) 1085 | (3253.88 1641.89) 1086 | (16825.3 9674.03) 1087 | (68151.4 70030.6) 1088 | (160.305 4.73446) 1089 | (1132.90 47.5962) 1090 | "freq" 8.91251 1091 | "group" (-109430. 243473.) 1092 | (-1705.06 69613.6) 1093 | (95.9024 43.1492) 1094 | (511.407 231.148) 1095 | (2717.70 1258.32) 1096 | (14135.8 7398.97) 1097 | (60455.4 54288.0) 1098 | (127.363 3.35271) 1099 | (900.201 33.7060) 1100 | "freq" 10.0000 1101 | "group" (-93169.6 226667.) 1102 | (-1354.69 62053.6) 1103 | (79.5757 32.7416) 1104 | (424.404 175.378) 1105 | (2257.13 954.269) 1106 | (11797.6 5601.78) 1107 | (52722.0 41550.7) 1108 | (101.186 2.37409) 1109 | (715.247 23.8679) 1110 | "freq" 11.2202 1111 | "group" (-78535.7 209866.) 1112 | (-1076.27 55312.7) 1113 | (65.6670 24.5972) 1114 | (350.266 131.743) 1115 | (1864.05 716.565) 1116 | (9782.15 4200.69) 1117 | (45292.6 31431.7) 1118 | (80.3864 1.68103) 1119 | (568.261 16.9005) 1120 | "freq" 12.5893 1121 | "group" (-65597.7 193285.) 1122 | (-855.041 49302.7) 1123 | (53.9028 18.3105) 1124 | (287.544 98.0654) 1125 | (1531.08 533.224) 1126 | (8061.14 3122.46) 1127 | (38403.8 23528.1) 1128 | (63.8603 1.19025) 1129 | (451.462 11.9665) 1130 | "freq" 14.1254 1131 | "group" (-54345.2 177136.) 1132 | (-679.263 43944.8) 1133 | (44.0280 13.5197) 1134 | (234.886 72.4038) 1135 | (1251.24 393.593) 1136 | (6605.36 2302.77) 1137 | (32197.1 17449.2) 1138 | (50.7306 0.842734) 1139 | (358.657 8.47267) 1140 | "freq" 15.8489 1141 | "group" (-44701.7 161613.) 1142 | (-539.609 39168.5) 1143 | (35.8018 9.91122) 1144 | (191.013 53.0767) 1145 | (1017.89 288.472) 1146 | (5385.09 1686.54) 1147 | (26735.0 12837.2) 1148 | (40.2996 0.596665) 1149 | (284.922 5.99878) 1150 | "freq" 17.7828 1151 | "group" (-36543.6 146870.) 1152 | (-428.658 34910.8) 1153 | (28.9979 7.22123) 1154 | (154.720 38.6700) 1155 | (824.729 210.138) 1156 | (4370.78 1227.86) 1157 | (22020.1 9379.43) 1158 | (32.0129 0.422437) 1159 | (226.341 4.24714) 1160 | "freq" 19.9526 1161 | "group" (-29718.6 133016.) 1162 | (-340.515 31115.6) 1163 | (23.4068 5.23389) 1164 | (124.894 28.0270) 1165 | (665.897 152.283) 1166 | (3533.97 889.400) 1167 | (18014.2 6813.41) 1168 | (25.4299 0.299080) 1169 | (179.801 3.00693) 1170 | "freq" 22.3872 1171 | "group" (-24062.5 120119.) 1172 | (-270.494 27732.7) 1173 | (18.8388 3.77690) 1174 | (100.523 20.2245) 1175 | (536.062 109.878) 1176 | (2848.12 641.498) 1177 | (14654.7 4925.50) 1178 | (20.2004 0.211742) 1179 | (142.829 2.12885) 1180 | "freq" 25.1189 1181 | "group" (-19412.1 108208.) 1182 | (-214.869 24717.5) 1183 | (15.1253 2.71560) 1184 | (80.7101 14.5413) 1185 | (430.469 78.9948) 1186 | (2289.16 461.060) 1187 | (11866.8 3546.49) 1188 | (16.0462 0.149907) 1189 | (113.458 1.50717) 1190 | "freq" 28.1838 1191 | "group" (-15613.7 97279.9) 1192 | (-170.681 22029.9) 1193 | (12.1191 1.94669) 1194 | (64.6702 10.4238) 1195 | (344.962 56.6234) 1196 | (1835.77 330.410) 1197 | (9573.19 2545.20) 1198 | (12.7462 0.106129) 1199 | (90.1257 1.06703) 1200 | "freq" 31.6228 1201 | "group" (-12527.8 87309.4) 1202 | (-135.580 19634.5) 1203 | (9.69414 1.39209) 1204 | (51.7311 7.45405) 1205 | (275.969 40.4891) 1206 | (1469.46 236.219) 1207 | (7699.30 1821.72) 1208 | (10.1249 0.0751356) 1209 | (71.5913 0.755416) 1210 | "freq" 35.4813 1211 | "group" (-10031.9 78253.7) 1212 | (-107.697 17499.5) 1213 | (7.74381 0.993509) 1214 | (41.3241 5.31979) 1215 | (220.468 28.8950) 1216 | (1174.47 168.553) 1217 | (6176.91 1301.06) 1218 | (8.04259 0.0531929) 1219 | (56.8682 0.534804) 1220 | "freq" 39.8107 1221 | "group" (-8020.28 70059.4) 1222 | (-85.5482 15596.6) 1223 | (6.17899 0.707912) 1224 | (32.9739 3.79052) 1225 | (175.930 20.5880) 1226 | (937.549 120.081) 1227 | (4945.68 927.582) 1228 | (6.38853 0.0376583) 1229 | (45.1728 0.378618) 1230 | "freq" 44.6684 1231 | "group" (-6403.76 62666.7) 1232 | (-67.9542 13900.6) 1233 | (4.92594 0.503760) 1234 | (26.2873 2.69738) 1235 | (140.261 14.6503) 1236 | (747.682 85.4409) 1237 | (3953.52 660.379) 1238 | (5.07464 0.0266603) 1239 | (35.8825 0.268044) 1240 | "freq" 50.1187 1241 | "group" (-5107.72 56013.5) 1242 | (-53.9784 12389.0) 1243 | (3.92415 0.358110) 1244 | (20.9414 1.91749) 1245 | (111.741 10.4142) 1246 | (595.791 60.7316) 1247 | (3156.34 469.614) 1248 | (4.03095 0.0188742) 1249 | (28.5028 0.189763) 1250 | "freq" 56.2341 1251 | "group" (-4070.59 50037.5) 1252 | (-42.8769 11041.8) 1253 | (3.12427 0.254358) 1254 | (16.6729 1.36195) 1255 | (88.9676 7.39687) 1256 | (474.453 43.1331) 1257 | (2517.32 333.653) 1258 | (3.20192 0.0133620) 1259 | (22.6407 0.134343) 1260 | "freq" 63.0957 1261 | "group" (-3241.88 44678.2) 1262 | (-34.0585 9841.06) 1263 | (2.48627 0.180545) 1264 | (13.2683 0.966715) 1265 | (70.8019 5.25025) 1266 | (377.633 30.6142) 1267 | (2006.02 236.882) 1268 | (2.54339 0.00945965) 1269 | (17.9843 0.0951080) 1270 | "freq" 70.7946 1271 | "group" (-2580.50 39877.9) 1272 | (-27.0538 8770.89) 1273 | (1.97782 0.128083) 1274 | (10.5549 0.685812) 1275 | (56.3239 3.72462) 1276 | (300.447 21.7174) 1277 | (1597.52 168.081) 1278 | (2.02029 0.00669695) 1279 | (14.2855 0.0673316) 1280 | "freq" 79.4328 1281 | "group" (-2053.18 35582.8) 1282 | (-21.4897 7817.08) 1283 | (1.57288 0.0908269) 1284 | (8.39387 0.486325) 1285 | (44.7929 2.64119) 1286 | (238.960 15.3997) 1287 | (1271.54 119.207) 1288 | (1.60478 0.00474109) 1289 | (11.3474 0.0476673) 1290 | "freq" 89.1251 1291 | "group" (-1633.06 31742.7) 1292 | (-17.0699 6966.99) 1293 | (1.25054 0.0643857) 1294 | (6.67371 0.344747) 1295 | (35.6139 1.87228) 1296 | (190.006 10.9163) 1297 | (1011.66 84.5136) 1298 | (1.27472 0.00335645) 1299 | (9.01362 0.0337460) 1300 | "freq" 100.000 1301 | "group" (-1298.55 28311.7) 1302 | (-13.5591 6209.35) 1303 | (0.994077 0.0456296) 1304 | (5.30505 0.244319) 1305 | (28.3104 1.32686) 1306 | (151.050 7.73607) 1307 | (804.625 59.8995) 1308 | (1.01255 0.00237619) 1309 | (7.15979 0.0238904) 1310 | END 1311 | -------------------------------------------------------------------------------- /samples/fracpole.dc: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "20.1.0.068" 5 | "date" "11:50:23 AM, Tue Feb 2, 2021" 6 | "design" "" 7 | "analysis type" "dc" 8 | "analysis name" "op" 9 | "analysis description" "DC Analysis `op'" 10 | "xVecSorted" "unsorted" 11 | "tolerance.relative" 0.00100000 12 | "reltol" 0.00100000 13 | "abstol(V)" 1.00000e-06 14 | "abstol(I)" 1.00000e-12 15 | "temp" 27.0000 16 | "tnom" 27.0000 17 | "tempeffects" "all" 18 | "gmindc" 1.00000e-12 19 | TYPE 20 | "LogicV" FLOAT DOUBLE PROP( 21 | "key" "node" 22 | ) 23 | "V" FLOAT DOUBLE PROP( 24 | "units" "V" 25 | "key" "node" 26 | "tolerance" 1.00000e-06 27 | ) 28 | "I" FLOAT DOUBLE PROP( 29 | "units" "A" 30 | "key" "branch" 31 | "tolerance" 1.00000e-12 32 | ) 33 | "MMF" FLOAT DOUBLE PROP( 34 | "units" "A*turn" 35 | "key" "node" 36 | "tolerance" 1.00000e-12 37 | ) 38 | "Wb" FLOAT DOUBLE PROP( 39 | "units" "Wb" 40 | "key" "node" 41 | "tolerance" 1.00000e-09 42 | ) 43 | "Temp" FLOAT DOUBLE PROP( 44 | "units" "C" 45 | "key" "node" 46 | "tolerance" 0.000100000 47 | ) 48 | "Pwr" FLOAT DOUBLE PROP( 49 | "units" "W" 50 | "key" "node" 51 | "tolerance" 1.00000e-09 52 | ) 53 | "U" FLOAT DOUBLE PROP( 54 | "units" "" 55 | "key" "node" 56 | "tolerance" 1.00000e-06 57 | ) 58 | "V/Sec" FLOAT DOUBLE PROP( 59 | "units" "V/s" 60 | "key" "node" 61 | "tolerance" 0.000100000 62 | ) 63 | "I/Sec" FLOAT DOUBLE PROP( 64 | "units" "A/s" 65 | "key" "node" 66 | "tolerance" 1.00000e-06 67 | ) 68 | "1/Sec" FLOAT DOUBLE PROP( 69 | "units" "1/s" 70 | "key" "node" 71 | "tolerance" 0.000100000 72 | ) 73 | "HOD" FLOAT DOUBLE PROP( 74 | "units" "" 75 | "key" "node" 76 | "tolerance" 0.0100000 77 | ) 78 | "Q" FLOAT DOUBLE PROP( 79 | "units" "Coul" 80 | "key" "node" 81 | "tolerance" 1.00000e-15 82 | ) 83 | VALUE 84 | "z6" "V" 0.000000000000000e+00 85 | "z2" "V" 0.000000000000000e+00 86 | "FP6.1" "V" 0.000000000000000e+00 87 | "FP6.2" "V" 0.000000000000000e+00 88 | "FP6.3" "V" 0.000000000000000e+00 89 | "FP6.4" "V" 0.000000000000000e+00 90 | "FP6.5" "V" 0.000000000000000e+00 91 | "FP2.1" "V" 0.000000000000000e+00 92 | "FP2.2" "V" 0.000000000000000e+00 93 | END 94 | -------------------------------------------------------------------------------- /samples/header.psf: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "21.1.0.303.isr5" 5 | "date" "4:45:29 PM, Fri May 27, 2022" 6 | "design" "// Point Netlist Generated on: May 27 16:45:27 2022" 7 | "analysis type" "info" 8 | "analysis name" "modelParameter" 9 | "analysis description" "Circuit Information" 10 | "xVecSorted" "unknown" 11 | "tolerance.relative" 0.00100000 12 | END 13 | 14 | -------------------------------------------------------------------------------- /samples/joop-banaan.dc: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "19.1.0.373.isr7" 5 | "date" "1:07:28 PM, Tue Feb 2, 2021" 6 | "design" "// Point Netlist Generated on: Feb 2 13:07:18 2021" 7 | "analysis type" "dc" 8 | "analysis name" "dc" 9 | "analysis description" "DC Analysis `dc'" 10 | "xVecSorted" "unsorted" 11 | "tolerance.relative" 0.00100000 12 | "reltol" 0.00100000 13 | "abstol(V)" 1.00000e-06 14 | "abstol(I)" 1.00000e-12 15 | "temp" 25.0000 16 | "tnom" 25.0000 17 | "tempeffects" "all" 18 | "gmindc" 1.00000e-12 19 | "rabsshort" 0.00100000 20 | TYPE 21 | "LogicV" FLOAT DOUBLE PROP( 22 | "key" "node" 23 | ) 24 | "V" FLOAT DOUBLE PROP( 25 | "units" "V" 26 | "key" "node" 27 | "tolerance" 1.00000e-06 28 | ) 29 | "I" FLOAT DOUBLE PROP( 30 | "units" "A" 31 | "key" "branch" 32 | "tolerance" 1.00000e-12 33 | ) 34 | "MMF" FLOAT DOUBLE PROP( 35 | "units" "A*turn" 36 | "key" "node" 37 | "tolerance" 1.00000e-12 38 | ) 39 | "Wb" FLOAT DOUBLE PROP( 40 | "units" "Wb" 41 | "key" "node" 42 | "tolerance" 1.00000e-09 43 | ) 44 | "Temp" FLOAT DOUBLE PROP( 45 | "units" "C" 46 | "key" "node" 47 | "tolerance" 0.000100000 48 | ) 49 | "Pwr" FLOAT DOUBLE PROP( 50 | "units" "W" 51 | "key" "node" 52 | "tolerance" 1.00000e-09 53 | ) 54 | "U" FLOAT DOUBLE PROP( 55 | "units" "" 56 | "key" "node" 57 | "tolerance" 1.00000e-06 58 | ) 59 | "V/Sec" FLOAT DOUBLE PROP( 60 | "units" "V/s" 61 | "key" "node" 62 | "tolerance" 0.000100000 63 | ) 64 | "I/Sec" FLOAT DOUBLE PROP( 65 | "units" "A/s" 66 | "key" "node" 67 | "tolerance" 1.00000e-06 68 | ) 69 | "1/Sec" FLOAT DOUBLE PROP( 70 | "units" "1/s" 71 | "key" "node" 72 | "tolerance" 0.000100000 73 | ) 74 | "HOD" FLOAT DOUBLE PROP( 75 | "units" "" 76 | "key" "node" 77 | "tolerance" 0.0100000 78 | ) 79 | "Q" FLOAT DOUBLE PROP( 80 | "units" "Coul" 81 | "key" "node" 82 | "tolerance" 1.00000e-15 83 | ) 84 | VALUE 85 | "Vsupply800m:p" "I" -1.050027794352513e-06 PROP( 86 | "units" "A" 87 | ) 88 | "I2.Idiffpair:in" "I" 4.767791259200037e-08 PROP( 89 | "units" "A" 90 | ) 91 | "vref_o" "V" 2.000000000000000e-01 92 | "I2.pup2" "V" 2.795768876173348e-07 93 | "I2.pup_b" "V" 7.999982644672001e-01 94 | "I2.diff_cm" "V" 8.761644386176266e-04 95 | "I2.comp_out_pre" "V" 1.106383385957654e-06 96 | "I2.diff_out_right" "V" 7.998743518480765e-01 97 | "I2.diff_out_left" "V" 7.998743518479743e-01 98 | "out" "V" 1.737370212928399e-07 99 | "ibias" "V" 3.588155366237979e-01 100 | "vinp" "V" 2.000000000000000e-01 101 | "pup" "V" 0.000000000000000e+00 102 | END 103 | -------------------------------------------------------------------------------- /samples/joop-banaan.tran: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "19.1.0.373.isr7" 5 | "date" "10:57:11 PM, Fri Jan 29, 2021" 6 | "design" "// Point Netlist Generated on: Jan 29 22:57:00 2021" 7 | "analysis type" "tran" 8 | "analysis name" "tran" 9 | "analysis description" "Transient Analysis `tran': time = (0 s -> 1 ns)" 10 | "xVecSorted" "ascending" 11 | "tolerance.relative" 0.00100000 12 | "start" 0.00000 13 | "outputstart" 0.00000 14 | "stop" 1.00000e-09 15 | "step" 1.00000e-12 16 | "istep" 0.00100000 17 | "maxstep" 2.00000e-11 18 | "ic" "all" 19 | "useprevic" "no" 20 | "skipdc" "no" 21 | "reltol" 0.0100000 22 | "abstol(V)" 1.00000e-06 23 | "abstol(I)" 1.00000e-12 24 | "temp" 25.0000 25 | "tnom" 25.0000 26 | "tempeffects" "all" 27 | "errpreset" "liberal" 28 | "method" "trapgear2" 29 | "lteratio" 3.50000 30 | "relref" "sigglobal" 31 | "cmin" 0.00000 32 | "gmin" 1.00000e-12 33 | "rabsshort" 0.00100000 34 | TYPE 35 | "sweep" FLOAT DOUBLE PROP( 36 | "key" "sweep" 37 | ) 38 | "LogicV" FLOAT DOUBLE PROP( 39 | "key" "node" 40 | ) 41 | "V" FLOAT DOUBLE PROP( 42 | "units" "V" 43 | "key" "node" 44 | "tolerance" 1.00000e-06 45 | ) 46 | "I" FLOAT DOUBLE PROP( 47 | "units" "A" 48 | "key" "branch" 49 | "tolerance" 1.00000e-12 50 | ) 51 | "MMF" FLOAT DOUBLE PROP( 52 | "units" "A*turn" 53 | "key" "node" 54 | "tolerance" 1.00000e-12 55 | ) 56 | "Wb" FLOAT DOUBLE PROP( 57 | "units" "Wb" 58 | "key" "node" 59 | "tolerance" 1.00000e-09 60 | ) 61 | "Temp" FLOAT DOUBLE PROP( 62 | "units" "C" 63 | "key" "node" 64 | "tolerance" 0.000100000 65 | ) 66 | "Pwr" FLOAT DOUBLE PROP( 67 | "units" "W" 68 | "key" "node" 69 | "tolerance" 1.00000e-09 70 | ) 71 | "U" FLOAT DOUBLE PROP( 72 | "units" "" 73 | "key" "node" 74 | "tolerance" 1.00000e-06 75 | ) 76 | "V/Sec" FLOAT DOUBLE PROP( 77 | "units" "V/s" 78 | "key" "node" 79 | "tolerance" 0.000100000 80 | ) 81 | "I/Sec" FLOAT DOUBLE PROP( 82 | "units" "A/s" 83 | "key" "node" 84 | "tolerance" 1.00000e-06 85 | ) 86 | "1/Sec" FLOAT DOUBLE PROP( 87 | "units" "1/s" 88 | "key" "node" 89 | "tolerance" 0.000100000 90 | ) 91 | "HOD" FLOAT DOUBLE PROP( 92 | "units" "" 93 | "key" "node" 94 | "tolerance" 0.0100000 95 | ) 96 | "Q" FLOAT DOUBLE PROP( 97 | "units" "Coul" 98 | "key" "node" 99 | "tolerance" 1.00000e-15 100 | ) 101 | SWEEP 102 | "time" "sweep" PROP( 103 | "sweep_direction" 0 104 | "units" "s" 105 | "plot" 0 106 | "grid" 1 107 | ) 108 | TRACE 109 | "V1:p" "I" PROP( 110 | "units" "A" 111 | ) 112 | "vinp" "V" 113 | "vref_o" "V" 114 | "I2.pup2" "V" 115 | "I2.pup_b" "V" 116 | "I2.diff_cm" "V" 117 | "I2.comp_out_pre" "V" 118 | "I2.diff_out_right" "V" 119 | "I2.diff_out_left" "V" 120 | "out" "V" 121 | "ibias" "V" 122 | "pup" "V" 123 | VALUE 124 | "time" 0.000000000000000e+00 125 | "V1:p" -3.007559162967161e-06 126 | "vinp" 8.000000000000000e-01 127 | "vref_o" 3.500000000000000e-01 128 | "I2.pup2" 2.790117820016992e-07 129 | "I2.pup_b" 7.999982644672642e-01 130 | "I2.diff_cm" 4.119402523790938e-01 131 | "I2.comp_out_pre" 1.106214731567540e-06 132 | "I2.diff_out_right" 7.999989229820369e-01 133 | "I2.diff_out_left" 7.893988859975006e-01 134 | "out" 1.737370212405093e-07 135 | "ibias" 3.588168430726093e-01 136 | "pup" 0.000000000000000e+00 137 | "time" 1.000000000000000e-12 138 | "V1:p" -2.995896372588501e-06 139 | "vinp" 7.999999914285715e-01 140 | "vref_o" 3.500000000000000e-01 141 | "I2.pup2" 3.302317898165104e-07 142 | "I2.pup_b" 8.000002359931908e-01 143 | "I2.diff_cm" 4.119402485625495e-01 144 | "I2.comp_out_pre" 1.367417611650917e-06 145 | "I2.diff_out_right" 7.999989404237282e-01 146 | "I2.diff_out_left" 7.893989076458865e-01 147 | "out" 2.102781849486853e-07 148 | "ibias" 3.588168428871089e-01 149 | "pup" 8.000000000000002e-05 150 | "time" 3.000000000000001e-12 151 | "V1:p" -2.994999037394074e-06 152 | "vinp" 7.999999742857143e-01 153 | "vref_o" 3.500000000000000e-01 154 | "I2.pup2" 4.033099960178708e-07 155 | "I2.pup_b" 8.000036619630670e-01 156 | "I2.diff_cm" 4.119402405733947e-01 157 | "I2.comp_out_pre" 1.793606368800629e-06 158 | "I2.diff_out_right" 7.999989680186174e-01 159 | "I2.diff_out_left" 7.893989430188518e-01 160 | "out" 2.315496543574617e-07 161 | "ibias" 3.588168424993596e-01 162 | "pup" 2.400000000000001e-04 163 | "time" 7.000000000000002e-12 164 | "V1:p" -2.993940241333499e-06 165 | "vinp" 7.999999400000001e-01 166 | "vref_o" 3.500000000000000e-01 167 | "I2.pup2" 5.260969714217216e-07 168 | "I2.pup_b" 8.000100227252789e-01 169 | "I2.diff_cm" 4.119402244129336e-01 170 | "I2.comp_out_pre" 2.530171005694903e-06 171 | "I2.diff_out_right" 7.999990131195379e-01 172 | "I2.diff_out_left" 7.893989998900429e-01 173 | "out" 2.274692022062638e-07 174 | "ibias" 3.588168417174085e-01 175 | "pup" 5.600000000000002e-04 176 | "time" 1.500000000000000e-11 177 | "V1:p" -2.992204372104659e-06 178 | "vinp" 7.999998714285714e-01 179 | "vref_o" 3.500000000000000e-01 180 | "I2.pup2" 6.667075396150828e-07 181 | "I2.pup_b" 8.000203365999393e-01 182 | "I2.diff_cm" 4.119401910568125e-01 183 | "I2.comp_out_pre" 3.502658632576924e-06 184 | "I2.diff_out_right" 7.999990601850696e-01 185 | "I2.diff_out_left" 7.893990533542040e-01 186 | "out" 1.814393527171785e-07 187 | "ibias" 3.588168401180107e-01 188 | "pup" 1.200000000000000e-03 189 | "time" 3.100000000000001e-11 190 | "V1:p" -2.989923742949445e-06 191 | "vinp" 7.999997342857144e-01 192 | "vref_o" 3.500000000000000e-01 193 | "I2.pup2" 7.008481953670342e-07 194 | "I2.pup_b" 8.000339066477380e-01 195 | "I2.diff_cm" 4.119401203884564e-01 196 | "I2.comp_out_pre" 4.171451221731301e-06 197 | "I2.diff_out_right" 7.999990554878018e-01 198 | "I2.diff_out_left" 7.893990265499938e-01 199 | "out" 1.453854040118941e-07 200 | "ibias" 3.588168367880629e-01 201 | "pup" 2.480000000000001e-03 202 | "time" 5.100000000000001e-11 203 | "V1:p" -2.988238012886558e-06 204 | "vinp" 7.999995628571429e-01 205 | "vref_o" 3.500000000000000e-01 206 | "I2.pup2" 6.102463477345238e-07 207 | "I2.pup_b" 8.000435791760876e-01 208 | "I2.diff_cm" 4.119400253532018e-01 209 | "I2.comp_out_pre" 4.043076003502723e-06 210 | "I2.diff_out_right" 7.999990018340720e-01 211 | "I2.diff_out_left" 7.893989419550604e-01 212 | "out" 1.536226806085434e-07 213 | "ibias" 3.588168324205675e-01 214 | "pup" 4.080000000000001e-03 215 | "time" 7.100000000000001e-11 216 | "V1:p" -2.987559147215372e-06 217 | "vinp" 7.999993914285715e-01 218 | "vref_o" 3.500000000000000e-01 219 | "I2.pup2" 4.799346340975491e-07 220 | "I2.pup_b" 8.000480522903995e-01 221 | "I2.diff_cm" 4.119399234488363e-01 222 | "I2.comp_out_pre" 3.404567105498012e-06 223 | "I2.diff_out_right" 7.999989393097995e-01 224 | "I2.diff_out_left" 7.893988610063138e-01 225 | "out" 1.705288810138976e-07 226 | "ibias" 3.588168278572609e-01 227 | "pup" 5.680000000000001e-03 228 | "time" 9.100000000000002e-11 229 | "V1:p" -2.986934351540108e-06 230 | "vinp" 7.999992200000000e-01 231 | "vref_o" 3.500000000000000e-01 232 | "I2.pup2" 4.010223969599905e-07 233 | "I2.pup_b" 8.000508603310520e-01 234 | "I2.diff_cm" 4.119398157785564e-01 235 | "I2.comp_out_pre" 2.850778887379252e-06 236 | "I2.diff_out_right" 7.999989041501747e-01 237 | "I2.diff_out_left" 7.893988272987015e-01 238 | "out" 1.754151077286183e-07 239 | "ibias" 3.588168231587534e-01 240 | "pup" 7.280000000000002e-03 241 | "time" 1.110000000000000e-10 242 | "V1:p" -2.986585554956575e-06 243 | "vinp" 7.999990485714286e-01 244 | "vref_o" 3.500000000000000e-01 245 | "I2.pup2" 3.586167569918175e-07 246 | "I2.pup_b" 8.000524495752934e-01 247 | "I2.diff_cm" 4.119397028338276e-01 248 | "I2.comp_out_pre" 2.393606449354735e-06 249 | "I2.diff_out_right" 7.999988891662619e-01 250 | "I2.diff_out_left" 7.893988265084901e-01 251 | "out" 1.753978615838903e-07 252 | "ibias" 3.588168183514232e-01 253 | "pup" 8.880000000000002e-03 254 | "time" 1.310000000000000e-10 255 | "V1:p" -2.986344588612535e-06 256 | "vinp" 7.999988771428572e-01 257 | "vref_o" 3.500000000000000e-01 258 | "I2.pup2" 3.327992448340102e-07 259 | "I2.pup_b" 8.000535072219029e-01 260 | "I2.diff_cm" 4.119395854970311e-01 261 | "I2.comp_out_pre" 2.041806291138995e-06 262 | "I2.diff_out_right" 7.999988839336964e-01 263 | "I2.diff_out_left" 7.893988384860200e-01 264 | "out" 1.754531697093643e-07 265 | "ibias" 3.588168134820083e-01 266 | "pup" 1.048000000000000e-02 267 | "time" 1.510000000000000e-10 268 | "V1:p" -2.986327816277236e-06 269 | "vinp" 7.999987057142858e-01 270 | "vref_o" 3.500000000000000e-01 271 | "I2.pup2" 3.180518799679741e-07 272 | "I2.pup_b" 8.000541480080998e-01 273 | "I2.diff_cm" 4.119394641322469e-01 274 | "I2.comp_out_pre" 1.780175912583922e-06 275 | "I2.diff_out_right" 7.999988852379691e-01 276 | "I2.diff_out_left" 7.893988579563345e-01 277 | "out" 1.751330042109140e-07 278 | "ibias" 3.588168085692661e-01 279 | "pup" 1.208000000000000e-02 280 | "time" 1.710000000000001e-10 281 | "V1:p" -2.986159502906833e-06 282 | "vinp" 7.999985342857143e-01 283 | "vref_o" 3.500000000000000e-01 284 | "I2.pup2" 3.105646978703561e-07 285 | "I2.pup_b" 8.000547430371622e-01 286 | "I2.diff_cm" 4.119393393975745e-01 287 | "I2.comp_out_pre" 1.601900580995399e-06 288 | "I2.diff_out_right" 7.999988897566955e-01 289 | "I2.diff_out_left" 7.893988795264790e-01 290 | "out" 1.750872489594563e-07 291 | "ibias" 3.588168036465001e-01 292 | "pup" 1.368000000000001e-02 293 | "time" 1.910000000000001e-10 294 | "V1:p" -2.986118618049848e-06 295 | "vinp" 7.999983628571429e-01 296 | "vref_o" 3.500000000000000e-01 297 | "I2.pup2" 3.062241084695336e-07 298 | "I2.pup_b" 8.000552416026504e-01 299 | "I2.diff_cm" 4.119392115666131e-01 300 | "I2.comp_out_pre" 1.480837308675184e-06 301 | "I2.diff_out_right" 7.999988954208460e-01 302 | "I2.diff_out_left" 7.893989005512688e-01 303 | "out" 1.745365347125458e-07 304 | "ibias" 3.588167987270523e-01 305 | "pup" 1.528000000000001e-02 306 | "time" 2.110000000000001e-10 307 | "V1:p" -2.986066963045054e-06 308 | "vinp" 7.999981914285714e-01 309 | "vref_o" 3.500000000000000e-01 310 | "I2.pup2" 3.026992453024125e-07 311 | "I2.pup_b" 8.000556794295732e-01 312 | "I2.diff_cm" 4.119390811360472e-01 313 | "I2.comp_out_pre" 1.393316574380667e-06 314 | "I2.diff_out_right" 7.999989006458380e-01 315 | "I2.diff_out_left" 7.893989193171953e-01 316 | "out" 1.742825607210741e-07 317 | "ibias" 3.588167938345779e-01 318 | "pup" 1.688000000000001e-02 319 | "time" 2.310000000000001e-10 320 | "V1:p" -2.986040716053055e-06 321 | "vinp" 7.999980200000001e-01 322 | "vref_o" 3.500000000000000e-01 323 | "I2.pup2" 2.999507812586889e-07 324 | "I2.pup_b" 8.000560737161529e-01 325 | "I2.diff_cm" 4.119389483137376e-01 326 | "I2.comp_out_pre" 1.333437726389834e-06 327 | "I2.diff_out_right" 7.999989053262340e-01 328 | "I2.diff_out_left" 7.893989359427168e-01 329 | "out" 1.741486423050842e-07 330 | "ibias" 3.588167889785008e-01 331 | "pup" 1.848000000000001e-02 332 | "time" 2.510000000000001e-10 333 | "V1:p" -2.986152510995578e-06 334 | "vinp" 7.999978485714286e-01 335 | "vref_o" 3.500000000000000e-01 336 | "I2.pup2" 2.958279924163902e-07 337 | "I2.pup_b" 8.000563200168089e-01 338 | "I2.diff_cm" 4.119388134766784e-01 339 | "I2.comp_out_pre" 1.278438118416096e-06 340 | "I2.diff_out_right" 7.999989086480126e-01 341 | "I2.diff_out_left" 7.893989497789157e-01 342 | "out" 1.738397653768289e-07 343 | "ibias" 3.588167841753846e-01 344 | "pup" 2.008000000000001e-02 345 | "time" 2.710000000000000e-10 346 | "V1:p" -2.985988742090701e-06 347 | "vinp" 7.999976771428572e-01 348 | "vref_o" 3.500000000000000e-01 349 | "I2.pup2" 2.959777763910758e-07 350 | "I2.pup_b" 8.000567077836893e-01 351 | "I2.diff_cm" 4.119386767847328e-01 352 | "I2.comp_out_pre" 1.258385007570086e-06 353 | "I2.diff_out_right" 7.999989126879428e-01 354 | "I2.diff_out_left" 7.893989637035260e-01 355 | "out" 1.744428854735159e-07 356 | "ibias" 3.588167794318139e-01 357 | "pup" 2.168000000000000e-02 358 | "time" 2.910000000000000e-10 359 | "V1:p" -2.986057795440556e-06 360 | "vinp" 7.999975057142857e-01 361 | "vref_o" 3.500000000000000e-01 362 | "I2.pup2" 2.953433506504968e-07 363 | "I2.pup_b" 8.000570860353409e-01 364 | "I2.diff_cm" 4.119385385249854e-01 365 | "I2.comp_out_pre" 1.243088727759099e-06 366 | "I2.diff_out_right" 7.999989156443799e-01 367 | "I2.diff_out_left" 7.893989754409941e-01 368 | "out" 1.738957615479294e-07 369 | "ibias" 3.588167747590952e-01 370 | "pup" 2.328000000000000e-02 371 | "time" 3.110000000000000e-10 372 | "V1:p" -2.986054208373236e-06 373 | "vinp" 7.999973342857143e-01 374 | "vref_o" 3.500000000000000e-01 375 | "I2.pup2" 2.944827592199696e-07 376 | "I2.pup_b" 8.000574603111651e-01 377 | "I2.diff_cm" 4.119383988195495e-01 378 | "I2.comp_out_pre" 1.232583218374600e-06 379 | "I2.diff_out_right" 7.999989177869429e-01 380 | "I2.diff_out_left" 7.893989854240671e-01 381 | "out" 1.737465819756863e-07 382 | "ibias" 3.588167701616320e-01 383 | "pup" 2.488000000000000e-02 384 | "time" 3.310000000000000e-10 385 | "V1:p" -2.986134940541146e-06 386 | "vinp" 7.999971628571430e-01 387 | "vref_o" 3.500000000000000e-01 388 | "I2.pup2" 2.922764669967343e-07 389 | "I2.pup_b" 8.000577388955156e-01 390 | "I2.diff_cm" 4.119382578879676e-01 391 | "I2.comp_out_pre" 1.216000233398895e-06 392 | "I2.diff_out_right" 7.999989189345846e-01 393 | "I2.diff_out_left" 7.893989935931522e-01 394 | "out" 1.736420100050046e-07 395 | "ibias" 3.588167656468507e-01 396 | "pup" 2.648000000000000e-02 397 | "time" 3.510000000000000e-10 398 | "V1:p" -2.986043202145272e-06 399 | "vinp" 7.999969914285715e-01 400 | "vref_o" 3.500000000000000e-01 401 | "I2.pup2" 2.925982556019798e-07 402 | "I2.pup_b" 8.000581101297681e-01 403 | "I2.diff_cm" 4.119381158238536e-01 404 | "I2.comp_out_pre" 1.215077305053668e-06 405 | "I2.diff_out_right" 7.999989205590626e-01 406 | "I2.diff_out_left" 7.893990019373019e-01 407 | "out" 1.741021447801476e-07 408 | "ibias" 3.588167612175427e-01 409 | "pup" 2.808000000000000e-02 410 | "time" 3.710000000000000e-10 411 | "V1:p" -2.986090716904194e-06 412 | "vinp" 7.999968200000001e-01 413 | "vref_o" 3.500000000000000e-01 414 | "I2.pup2" 2.925596070659807e-07 415 | "I2.pup_b" 8.000584879932490e-01 416 | "I2.diff_cm" 4.119379727953348e-01 417 | "I2.comp_out_pre" 1.214631470187330e-06 418 | "I2.diff_out_right" 7.999989216857626e-01 419 | "I2.diff_out_left" 7.893990091599349e-01 420 | "out" 1.737958562623309e-07 421 | "ibias" 3.588167568782515e-01 422 | "pup" 2.968000000000000e-02 423 | "time" 3.909999999999999e-10 424 | "V1:p" -2.986091856267752e-06 425 | "vinp" 7.999966485714286e-01 426 | "vref_o" 3.500000000000000e-01 427 | "I2.pup2" 2.923808380662203e-07 428 | "I2.pup_b" 8.000588719708847e-01 429 | "I2.diff_cm" 4.119378288741428e-01 430 | "I2.comp_out_pre" 1.214784951377300e-06 431 | "I2.diff_out_right" 7.999989224331795e-01 432 | "I2.diff_out_left" 7.893990154389861e-01 433 | "out" 1.737056049232500e-07 434 | "ibias" 3.588167526305675e-01 435 | "pup" 3.128000000000000e-02 436 | "time" 4.109999999999999e-10 437 | "V1:p" -2.986092192389132e-06 438 | "vinp" 7.999964771428572e-01 439 | "vref_o" 3.500000000000000e-01 440 | "I2.pup2" 2.921754027125254e-07 441 | "I2.pup_b" 8.000592584667907e-01 442 | "I2.diff_cm" 4.119376841895053e-01 443 | "I2.comp_out_pre" 1.215096162108225e-06 444 | "I2.diff_out_right" 7.999989229525873e-01 445 | "I2.diff_out_left" 7.893990210467688e-01 446 | "out" 1.737335357903441e-07 447 | "ibias" 3.588167484769186e-01 448 | "pup" 3.287999999999999e-02 449 | "time" 4.309999999999999e-10 450 | "V1:p" -2.986271331557316e-06 451 | "vinp" 7.999963057142857e-01 452 | "vref_o" 3.500000000000000e-01 453 | "I2.pup2" 2.891430062029470e-07 454 | "I2.pup_b" 8.000594830446633e-01 455 | "I2.diff_cm" 4.119375387955281e-01 456 | "I2.comp_out_pre" 1.198095892353796e-06 457 | "I2.diff_out_right" 7.999989223023184e-01 458 | "I2.diff_out_left" 7.893990247803032e-01 459 | "out" 1.733655830518974e-07 460 | "ibias" 3.588167444179665e-01 461 | "pup" 3.447999999999999e-02 462 | "time" 4.509999999999999e-10 463 | "V1:p" -2.986129625481493e-06 464 | "vinp" 7.999961342857144e-01 465 | "vref_o" 3.500000000000000e-01 466 | "I2.pup2" 2.905035991088588e-07 467 | "I2.pup_b" 8.000598833825172e-01 468 | "I2.diff_cm" 4.119373927931630e-01 469 | "I2.comp_out_pre" 1.205065000371203e-06 470 | "I2.diff_out_right" 7.999989231697389e-01 471 | "I2.diff_out_left" 7.893990302503076e-01 472 | "out" 1.740463342672107e-07 473 | "ibias" 3.588167404546568e-01 474 | "pup" 3.607999999999999e-02 475 | "time" 4.709999999999999e-10 476 | "V1:p" -2.986175544545954e-06 477 | "vinp" 7.999959628571429e-01 478 | "vref_o" 3.500000000000000e-01 479 | "I2.pup2" 2.915981875153817e-07 480 | "I2.pup_b" 8.000603013033156e-01 481 | "I2.diff_cm" 4.119372462234095e-01 482 | "I2.comp_out_pre" 1.212331906988058e-06 483 | "I2.diff_out_right" 7.999989238234225e-01 484 | "I2.diff_out_left" 7.893990351031974e-01 485 | "out" 1.736900293423091e-07 486 | "ibias" 3.588167365869891e-01 487 | "pup" 3.768000000000000e-02 488 | "time" 4.910000000000000e-10 489 | "V1:p" -2.986154628674594e-06 490 | "vinp" 7.999957914285715e-01 491 | "vref_o" 3.500000000000000e-01 492 | "I2.pup2" 2.919741101707939e-07 493 | "I2.pup_b" 8.000607180141633e-01 494 | "I2.diff_cm" 4.119370991638707e-01 495 | "I2.comp_out_pre" 1.216707605054446e-06 496 | "I2.diff_out_right" 7.999989240801436e-01 497 | "I2.diff_out_left" 7.893990390984349e-01 498 | "out" 1.736729982383190e-07 499 | "ibias" 3.588167328147521e-01 500 | "pup" 3.928000000000000e-02 501 | "time" 5.110000000000000e-10 502 | "V1:p" -2.986274412924794e-06 503 | "vinp" 7.999956200000000e-01 504 | "vref_o" 3.500000000000000e-01 505 | "I2.pup2" 2.899902857618312e-07 506 | "I2.pup_b" 8.000610211687686e-01 507 | "I2.diff_cm" 4.119369516462291e-01 508 | "I2.comp_out_pre" 1.207168624748528e-06 509 | "I2.diff_out_right" 7.999989234213287e-01 510 | "I2.diff_out_left" 7.893990416249907e-01 511 | "out" 1.734605483032548e-07 512 | "ibias" 3.588167291375018e-01 513 | "pup" 4.088000000000000e-02 514 | "time" 5.310000000000000e-10 515 | "V1:p" -2.986190440053732e-06 516 | "vinp" 7.999954485714286e-01 517 | "vref_o" 3.500000000000000e-01 518 | "I2.pup2" 2.907996102684719e-07 519 | "I2.pup_b" 8.000614328156720e-01 520 | "I2.diff_cm" 4.119368037306860e-01 521 | "I2.comp_out_pre" 1.212212100659187e-06 522 | "I2.diff_out_right" 7.999989237714722e-01 523 | "I2.diff_out_left" 7.893990453086076e-01 524 | "out" 1.739212203753300e-07 525 | "ibias" 3.588167255542205e-01 526 | "pup" 4.248000000000000e-02 527 | "time" 5.510000000000001e-10 528 | "V1:p" -2.986218531861000e-06 529 | "vinp" 7.999952771428572e-01 530 | "vref_o" 3.500000000000000e-01 531 | "I2.pup2" 2.916082266810925e-07 532 | "I2.pup_b" 8.000618624205990e-01 533 | "I2.diff_cm" 4.119366554417721e-01 534 | "I2.comp_out_pre" 1.217972477178969e-06 535 | "I2.diff_out_right" 7.999989240860085e-01 536 | "I2.diff_out_left" 7.893990487258370e-01 537 | "out" 1.737242035610797e-07 538 | "ibias" 3.588167220641511e-01 539 | "pup" 4.408000000000001e-02 540 | "time" 5.710000000000001e-10 541 | "V1:p" -2.986208667719791e-06 542 | "vinp" 7.999951057142858e-01 543 | "vref_o" 3.500000000000000e-01 544 | "I2.pup2" 2.919778353709065e-07 545 | "I2.pup_b" 8.000622959915703e-01 546 | "I2.diff_cm" 4.119365068261241e-01 547 | "I2.comp_out_pre" 1.221957371866181e-06 548 | "I2.diff_out_right" 7.999989241794058e-01 549 | "I2.diff_out_left" 7.893990516240694e-01 550 | "out" 1.736999838321478e-07 551 | "ibias" 3.588167186656991e-01 552 | "pup" 4.568000000000001e-02 553 | "time" 5.910000000000001e-10 554 | "V1:p" -2.986210632840976e-06 555 | "vinp" 7.999949342857143e-01 556 | "vref_o" 3.500000000000000e-01 557 | "I2.pup2" 2.920695012949599e-07 558 | "I2.pup_b" 8.000627324194240e-01 559 | "I2.diff_cm" 4.119363579031202e-01 560 | "I2.comp_out_pre" 1.224602788952438e-06 561 | "I2.diff_out_right" 7.999989241373554e-01 562 | "I2.diff_out_left" 7.893990541546640e-01 563 | "out" 1.737215351724154e-07 564 | "ibias" 3.588167153579083e-01 565 | "pup" 4.728000000000002e-02 566 | "time" 6.110000000000002e-10 567 | "V1:p" -2.986363937922105e-06 568 | "vinp" 7.999947628571429e-01 569 | "vref_o" 3.500000000000000e-01 570 | "I2.pup2" 2.895136082231925e-07 571 | "I2.pup_b" 8.000630038071859e-01 572 | "I2.diff_cm" 4.119362087080716e-01 573 | "I2.comp_out_pre" 1.209996622197480e-06 574 | "I2.diff_out_right" 7.999989231810549e-01 575 | "I2.diff_out_left" 7.893990553637190e-01 576 | "out" 1.734792432172859e-07 577 | "ibias" 3.588167121387468e-01 578 | "pup" 4.888000000000001e-02 579 | "time" 6.310000000000002e-10 580 | "V1:p" -2.986183718792517e-06 581 | "vinp" 7.999945914285714e-01 582 | "vref_o" 3.500000000000000e-01 583 | "I2.pup2" 2.915075258198382e-07 584 | "I2.pup_b" 8.000634611011869e-01 585 | "I2.diff_cm" 4.119360592577504e-01 586 | "I2.comp_out_pre" 1.220035662837179e-06 587 | "I2.diff_out_right" 7.999989239158926e-01 588 | "I2.diff_out_left" 7.893990587134613e-01 589 | "out" 1.743398770164396e-07 590 | "ibias" 3.588167090071950e-01 591 | "pup" 5.048000000000002e-02 592 | "time" 6.510000000000002e-10 593 | "V1:p" -2.986279143403154e-06 594 | "vinp" 7.999944200000001e-01 595 | "vref_o" 3.500000000000000e-01 596 | "I2.pup2" 2.923026566253719e-07 597 | "I2.pup_b" 8.000639206594861e-01 598 | "I2.diff_cm" 4.119359095790651e-01 599 | "I2.comp_out_pre" 1.226111925701153e-06 600 | "I2.diff_out_right" 7.999989241642029e-01 601 | "I2.diff_out_left" 7.893990612228727e-01 602 | "out" 1.737679428893667e-07 603 | "ibias" 3.588167059609441e-01 604 | "pup" 5.208000000000002e-02 605 | "time" 6.710000000000003e-10 606 | "V1:p" -2.986283156268388e-06 607 | "vinp" 7.999942485714286e-01 608 | "vref_o" 3.500000000000000e-01 609 | "I2.pup2" 2.925500270704711e-07 610 | "I2.pup_b" 8.000643854455007e-01 611 | "I2.diff_cm" 4.119357596851019e-01 612 | "I2.comp_out_pre" 1.230063493540889e-06 613 | "I2.diff_out_right" 7.999989241494495e-01 614 | "I2.diff_out_left" 7.893990632047316e-01 615 | "out" 1.736337112048205e-07 616 | "ibias" 3.588167029988660e-01 617 | "pup" 5.368000000000003e-02 618 | "time" 6.910000000000003e-10 619 | "V1:p" -2.986385790450438e-06 620 | "vinp" 7.999940771428572e-01 621 | "vref_o" 3.500000000000000e-01 622 | "I2.pup2" 2.908876945379534e-07 623 | "I2.pup_b" 8.000647375998399e-01 624 | "I2.diff_cm" 4.119356095971405e-01 625 | "I2.comp_out_pre" 1.221565141802250e-06 626 | "I2.diff_out_right" 7.999989234711754e-01 627 | "I2.diff_out_left" 7.893990642341274e-01 628 | "out" 1.735380227753864e-07 629 | "ibias" 3.588167001185235e-01 630 | "pup" 5.528000000000003e-02 631 | "time" 7.110000000000003e-10 632 | "V1:p" -2.986280079182346e-06 633 | "vinp" 7.999939057142857e-01 634 | "vref_o" 3.500000000000000e-01 635 | "I2.pup2" 2.920560684034334e-07 636 | "I2.pup_b" 8.000652040806915e-01 637 | "I2.diff_cm" 4.119354593256708e-01 638 | "I2.comp_out_pre" 1.228002559255696e-06 639 | "I2.diff_out_right" 7.999989238501433e-01 640 | "I2.diff_out_left" 7.893990666057115e-01 641 | "out" 1.741207340036533e-07 642 | "ibias" 3.588166973187372e-01 643 | "pup" 5.688000000000003e-02 644 | "time" 7.310000000000004e-10 645 | "V1:p" -2.986341231778286e-06 646 | "vinp" 7.999937342857143e-01 647 | "vref_o" 3.500000000000000e-01 648 | "I2.pup2" 2.926707612050398e-07 649 | "I2.pup_b" 8.000656815483941e-01 650 | "I2.diff_cm" 4.119353088875791e-01 651 | "I2.comp_out_pre" 1.232883852707651e-06 652 | "I2.diff_out_right" 7.999989240032435e-01 653 | "I2.diff_out_left" 7.893990685569136e-01 654 | "out" 1.737724567717996e-07 655 | "ibias" 3.588166945970079e-01 656 | "pup" 5.848000000000003e-02 657 | "time" 7.510000000000004e-10 658 | "V1:p" -2.986345708765280e-06 659 | "vinp" 7.999935628571428e-01 660 | "vref_o" 3.500000000000000e-01 661 | "I2.pup2" 2.930043923487508e-07 662 | "I2.pup_b" 8.000661689293108e-01 663 | "I2.diff_cm" 4.119351582911530e-01 664 | "I2.comp_out_pre" 1.236785151907288e-06 665 | "I2.diff_out_right" 7.999989240165140e-01 666 | "I2.diff_out_left" 7.893990702044253e-01 667 | "out" 1.736748359331446e-07 668 | "ibias" 3.588166919521262e-01 669 | "pup" 6.008000000000004e-02 670 | "time" 7.710000000000004e-10 671 | "V1:p" -2.986348695269397e-06 672 | "vinp" 7.999933914285715e-01 673 | "vref_o" 3.500000000000000e-01 674 | "I2.pup2" 2.932111125765230e-07 675 | "I2.pup_b" 8.000666610394691e-01 676 | "I2.diff_cm" 4.119350075502197e-01 677 | "I2.comp_out_pre" 1.239838994919331e-06 678 | "I2.diff_out_right" 7.999989239761075e-01 679 | "I2.diff_out_left" 7.893990717081401e-01 680 | "out" 1.737156987422697e-07 681 | "ibias" 3.588166893815987e-01 682 | "pup" 6.168000000000004e-02 683 | "time" 7.910000000000005e-10 684 | "V1:p" -2.986565050038027e-06 685 | "vinp" 7.999932200000001e-01 686 | "vref_o" 3.500000000000000e-01 687 | "I2.pup2" 2.898755764773028e-07 688 | "I2.pup_b" 8.000669564192949e-01 689 | "I2.diff_cm" 4.119348566702060e-01 690 | "I2.comp_out_pre" 1.220880957918647e-06 691 | "I2.diff_out_right" 7.999989226945173e-01 692 | "I2.diff_out_left" 7.893990715311933e-01 693 | "out" 1.732704001398323e-07 694 | "ibias" 3.588166868841547e-01 695 | "pup" 6.328000000000004e-02 696 | "time" 8.110000000000005e-10 697 | "V1:p" -2.986396951389550e-06 698 | "vinp" 7.999930485714286e-01 699 | "vref_o" 3.500000000000000e-01 700 | "I2.pup2" 2.917830014662185e-07 701 | "I2.pup_b" 8.000674633963448e-01 702 | "I2.diff_cm" 4.119347056642176e-01 703 | "I2.comp_out_pre" 1.230309679544053e-06 704 | "I2.diff_out_right" 7.999989233769563e-01 705 | "I2.diff_out_left" 7.893990739475091e-01 706 | "out" 1.741005979324516e-07 707 | "ibias" 3.588166844574201e-01 708 | "pup" 6.488000000000005e-02 709 | "time" 8.310000000000005e-10 710 | "V1:p" -2.986454936109231e-06 711 | "vinp" 7.999928771428572e-01 712 | "vref_o" 3.500000000000000e-01 713 | "I2.pup2" 2.933622066233897e-07 714 | "I2.pup_b" 8.000679936037766e-01 715 | "I2.diff_cm" 4.119345545359038e-01 716 | "I2.comp_out_pre" 1.239944572862810e-06 717 | "I2.diff_out_right" 7.999989239280968e-01 718 | "I2.diff_out_left" 7.893990760919456e-01 719 | "out" 1.736807230078708e-07 720 | "ibias" 3.588166821001144e-01 721 | "pup" 6.648000000000004e-02 722 | "time" 8.510000000000006e-10 723 | "V1:p" -2.986431881182206e-06 724 | "vinp" 7.999927057142857e-01 725 | "vref_o" 3.500000000000000e-01 726 | "I2.pup2" 2.940635071923424e-07 727 | "I2.pup_b" 8.000685251521482e-01 728 | "I2.diff_cm" 4.119344032956215e-01 729 | "I2.comp_out_pre" 1.246080280802828e-06 730 | "I2.diff_out_right" 7.999989240825813e-01 731 | "I2.diff_out_left" 7.893990775809625e-01 732 | "out" 1.736600629420463e-07 733 | "ibias" 3.588166798098816e-01 734 | "pup" 6.808000000000004e-02 735 | "time" 8.710000000000006e-10 736 | "V1:p" -2.986577106032331e-06 737 | "vinp" 7.999925342857144e-01 738 | "vref_o" 3.500000000000000e-01 739 | "I2.pup2" 2.918589734981981e-07 740 | "I2.pup_b" 8.000689200589757e-01 741 | "I2.diff_cm" 4.119342519464496e-01 742 | "I2.comp_out_pre" 1.235155685346993e-06 743 | "I2.diff_out_right" 7.999989231822545e-01 744 | "I2.diff_out_left" 7.893990776187489e-01 745 | "out" 1.733973310099650e-07 746 | "ibias" 3.588166775854884e-01 747 | "pup" 6.968000000000005e-02 748 | "time" 8.910000000000006e-10 749 | "V1:p" -2.986477837267214e-06 750 | "vinp" 7.999923628571429e-01 751 | "vref_o" 3.500000000000000e-01 752 | "I2.pup2" 2.929761721488190e-07 753 | "I2.pup_b" 8.000694453613459e-01 754 | "I2.diff_cm" 4.119341004971027e-01 755 | "I2.comp_out_pre" 1.241582069944945e-06 756 | "I2.diff_out_right" 7.999989235297366e-01 757 | "I2.diff_out_left" 7.893990793199517e-01 758 | "out" 1.739548288330314e-07 759 | "ibias" 3.588166754246478e-01 760 | "pup" 7.128000000000005e-02 761 | "time" 9.110000000000007e-10 762 | "V1:p" -2.986513810574925e-06 763 | "vinp" 7.999921914285715e-01 764 | "vref_o" 3.500000000000000e-01 765 | "I2.pup2" 2.940852646620282e-07 766 | "I2.pup_b" 8.000699934601875e-01 767 | "I2.diff_cm" 4.119339489501662e-01 768 | "I2.comp_out_pre" 1.248863530791174e-06 769 | "I2.diff_out_right" 7.999989238717579e-01 770 | "I2.diff_out_left" 7.893990809634698e-01 771 | "out" 1.737229696403460e-07 772 | "ibias" 3.588166733261757e-01 773 | "pup" 7.288000000000006e-02 774 | "time" 9.310000000000007e-10 775 | "V1:p" -2.986503845990053e-06 776 | "vinp" 7.999920200000000e-01 777 | "vref_o" 3.500000000000000e-01 778 | "I2.pup2" 2.946680874605525e-07 779 | "I2.pup_b" 8.000705483196846e-01 780 | "I2.diff_cm" 4.119337973127387e-01 781 | "I2.comp_out_pre" 1.254086129274078e-06 782 | "I2.diff_out_right" 7.999989239738723e-01 783 | "I2.diff_out_left" 7.893990822039912e-01 784 | "out" 1.736939423913294e-07 785 | "ibias" 3.588166712878500e-01 786 | "pup" 7.448000000000006e-02 787 | "time" 9.510000000000007e-10 788 | "V1:p" -2.986507973079097e-06 789 | "vinp" 7.999918485714286e-01 790 | "vref_o" 3.500000000000000e-01 791 | "I2.pup2" 2.949056669611920e-07 792 | "I2.pup_b" 8.000711081974474e-01 793 | "I2.diff_cm" 4.119336455873893e-01 794 | "I2.comp_out_pre" 1.257709197954411e-06 795 | "I2.diff_out_right" 7.999989239292518e-01 796 | "I2.diff_out_left" 7.893990831982746e-01 797 | "out" 1.737181052309121e-07 798 | "ibias" 3.588166693085556e-01 799 | "pup" 7.608000000000006e-02 800 | "time" 9.710000000000007e-10 801 | "V1:p" -2.986692876770535e-06 802 | "vinp" 7.999916771428572e-01 803 | "vref_o" 3.500000000000000e-01 804 | "I2.pup2" 2.918657067778164e-07 805 | "I2.pup_b" 8.000714659064773e-01 806 | "I2.diff_cm" 4.119334937787786e-01 807 | "I2.comp_out_pre" 1.240063895485094e-06 808 | "I2.diff_out_right" 7.999989227650202e-01 809 | "I2.diff_out_left" 7.893990827301636e-01 810 | "out" 1.734191334598295e-07 811 | "ibias" 3.588166673860914e-01 812 | "pup" 7.768000000000005e-02 813 | "time" 9.855000000000004e-10 814 | "V1:p" -2.986476605831062e-06 815 | "vinp" 7.999915528571429e-01 816 | "vref_o" 3.500000000000000e-01 817 | "I2.pup2" 2.938157486387235e-07 818 | "I2.pup_b" 8.000718871171082e-01 819 | "I2.diff_cm" 4.119333836679367e-01 820 | "I2.comp_out_pre" 1.249339928656933e-06 821 | "I2.diff_out_right" 7.999989234761662e-01 822 | "I2.diff_out_left" 7.893990844801438e-01 823 | "out" 1.744863777229323e-07 824 | "ibias" 3.588166660274065e-01 825 | "pup" 7.884000000000002e-02 826 | "time" 1.000000000000000e-09 827 | "V1:p" -2.986591782955467e-06 828 | "vinp" 7.999914285714286e-01 829 | "vref_o" 3.500000000000000e-01 830 | "I2.pup2" 2.948060305729915e-07 831 | "I2.pup_b" 8.000723102267925e-01 832 | "I2.diff_cm" 4.119332735161667e-01 833 | "I2.comp_out_pre" 1.255649449632475e-06 834 | "I2.diff_out_right" 7.999989238202968e-01 835 | "I2.diff_out_left" 7.893990856870535e-01 836 | "out" 1.738710535003728e-07 837 | "ibias" 3.588166646971891e-01 838 | "pup" 8.000000000000002e-02 839 | END 840 | -------------------------------------------------------------------------------- /samples/phaseMargin.stb: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "18.1.0.077" 5 | "date" "11:40:59 AM, Mon Jan 15, 2024" 6 | "design" "" 7 | "analysis type" "margin.stb" 8 | "analysis name" "stb" 9 | "analysis description" "Stability Analysis `stb': freq = (1 uHz -> 1 GHz)" 10 | "xVecSorted" "ascending" 11 | "tolerance.relative" 0.00100000 12 | "operating point producer" "stb" 13 | "probe" "IPRB0" 14 | "gainMarginInfo" "Gain(dB)is always less than zero. The loop is always stable. No gain margin or phase margin." 15 | TYPE 16 | "dB" FLOAT DOUBLE PROP( 17 | "key" "gain" 18 | "units" "dB" 19 | ) 20 | "Deg" FLOAT DOUBLE PROP( 21 | "key" "gain" 22 | "units" "Deg" 23 | ) 24 | "Hz" FLOAT DOUBLE PROP( 25 | "key" "gain" 26 | "units" "Hz" 27 | ) 28 | "stbstate" STRING * 29 | VALUE 30 | "gainMargin" "dB" NaN PROP( 31 | "gainMarginInfo" "Gain(dB)is always less than zero. The loop is always stable. No gain margin or phase margin." 32 | ) 33 | "gainMarginFreq" "Hz" NaN 34 | "phaseMargin" "Deg" NaN PROP( 35 | "phaseMarginInfo" "" 36 | ) 37 | "phaseMarginFreq" "Hz" NaN 38 | "stb_state" "stbstate" "Gain(dB)is always less than zero. The circuit is always stable. No gain margin or phase margin." 39 | END 40 | -------------------------------------------------------------------------------- /samples/pnoise.raw/aclog.ac: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "simulator" "spectre" 4 | "version" "15.1.0.284.isr1" 5 | "date" "9:11:11 AM, Sat Sep 14, 2019" 6 | "design" "" 7 | "analysis type" "ac" 8 | "analysis name" "aclog" 9 | "analysis description" "AC Analysis `aclog': freq = (1 Hz -> 1 MHz)" 10 | "xVecSorted" "ascending" 11 | "tolerance.relative" 0.00100000 12 | "start" 1.00000 13 | "stop" 1.00000e+06 14 | "operating point producer" "aclin" 15 | TYPE 16 | "sweep" FLOAT DOUBLE PROP( 17 | "key" "sweep" 18 | ) 19 | "Real" COMPLEX DOUBLE PROP( 20 | "units" "" 21 | "key" "node" 22 | "tolerance" 1.00000e-06 23 | ) 24 | "Tau" COMPLEX DOUBLE PROP( 25 | "units" "N*m" 26 | "key" "node" 27 | "tolerance" 1.00000e-06 28 | ) 29 | "Alpha" COMPLEX DOUBLE PROP( 30 | "units" "rads/s^2" 31 | "key" "node" 32 | "tolerance" 1.00000e-06 33 | ) 34 | "Omega" COMPLEX DOUBLE PROP( 35 | "units" "rads/s" 36 | "key" "node" 37 | "tolerance" 1.00000e-06 38 | ) 39 | "Theta" COMPLEX DOUBLE PROP( 40 | "units" "rads" 41 | "key" "node" 42 | "tolerance" 1.00000e-06 43 | ) 44 | "F" COMPLEX DOUBLE PROP( 45 | "units" "N" 46 | "key" "node" 47 | "tolerance" 1.00000e-06 48 | ) 49 | "Imp" COMPLEX DOUBLE PROP( 50 | "units" "m/s^3" 51 | "key" "node" 52 | "tolerance" 1.00000e-06 53 | ) 54 | "Acc" COMPLEX DOUBLE PROP( 55 | "units" "m/s^2" 56 | "key" "node" 57 | "tolerance" 1.00000e-06 58 | ) 59 | "Vel" COMPLEX DOUBLE PROP( 60 | "units" "m/s" 61 | "key" "node" 62 | "tolerance" 1.00000e-06 63 | ) 64 | "Pos" COMPLEX DOUBLE PROP( 65 | "units" "m" 66 | "key" "node" 67 | "tolerance" 1.00000e-06 68 | ) 69 | "Phi" COMPLEX DOUBLE PROP( 70 | "units" "Wb" 71 | "key" "node" 72 | "tolerance" 1.00000e-09 73 | ) 74 | "V" COMPLEX DOUBLE PROP( 75 | "units" "V" 76 | "key" "node" 77 | "tolerance" 1.00000e-06 78 | ) 79 | "I" COMPLEX DOUBLE PROP( 80 | "units" "A" 81 | "key" "branch" 82 | "tolerance" 1.00000e-12 83 | ) 84 | "MMF" COMPLEX DOUBLE PROP( 85 | "units" "A*turn" 86 | "key" "node" 87 | "tolerance" 1.00000e-12 88 | ) 89 | "Wb" COMPLEX DOUBLE PROP( 90 | "units" "Wb" 91 | "key" "node" 92 | "tolerance" 1.00000e-09 93 | ) 94 | "Temp" COMPLEX DOUBLE PROP( 95 | "units" "C" 96 | "key" "node" 97 | "tolerance" 0.000100000 98 | ) 99 | "Pwr" COMPLEX DOUBLE PROP( 100 | "units" "W" 101 | "key" "node" 102 | "tolerance" 1.00000e-09 103 | ) 104 | "U" COMPLEX DOUBLE PROP( 105 | "units" "" 106 | "key" "node" 107 | "tolerance" 1.00000e-06 108 | ) 109 | "V/Sec" COMPLEX DOUBLE PROP( 110 | "units" "V/s" 111 | "key" "node" 112 | "tolerance" 0.000100000 113 | ) 114 | "I/Sec" COMPLEX DOUBLE PROP( 115 | "units" "A/s" 116 | "key" "node" 117 | "tolerance" 1.00000e-06 118 | ) 119 | "1/Sec" COMPLEX DOUBLE PROP( 120 | "units" "1/s" 121 | "key" "node" 122 | "tolerance" 0.000100000 123 | ) 124 | "HOD" COMPLEX DOUBLE PROP( 125 | "units" "" 126 | "key" "node" 127 | "tolerance" 0.0100000 128 | ) 129 | "Q" COMPLEX DOUBLE PROP( 130 | "units" "coul" 131 | "key" "node" 132 | "tolerance" 1.00000e-14 133 | ) 134 | SWEEP 135 | "freq" "sweep" PROP( 136 | "sweep_direction" 0 137 | "units" "Hz" 138 | "plot" 0 139 | "grid" 3 140 | ) 141 | TRACE 142 | "iRESref:p" "I" 143 | "iRESva:p" "I" 144 | "noiref" "V" 145 | "noiva" "V" 146 | "top" "V" 147 | "topref" "V" 148 | "topva" "V" 149 | "VTOP:p" "I" 150 | VALUE 151 | "freq" 1.000000000000000e+00 152 | "iRESref:p" (0.0100000 0.00000) 153 | "iRESva:p" (0.0100000 0.00000) 154 | "noiref" (0.0100000 0.00000) 155 | "noiva" (0.0100000 0.00000) 156 | "top" (1.00000 0.00000) 157 | "topref" (1.00000 0.00000) 158 | "topva" (1.00000 0.00000) 159 | "VTOP:p" (-0.0200000 0.00000) 160 | "freq" 1.258925411794167e+00 161 | "iRESref:p" (0.0100000 0.00000) 162 | "iRESva:p" (0.0100000 0.00000) 163 | "noiref" (0.0100000 0.00000) 164 | "noiva" (0.0100000 0.00000) 165 | "top" (1.00000 0.00000) 166 | "topref" (1.00000 0.00000) 167 | "topva" (1.00000 0.00000) 168 | "VTOP:p" (-0.0200000 0.00000) 169 | "freq" 1.584893192461114e+00 170 | "iRESref:p" (0.0100000 0.00000) 171 | "iRESva:p" (0.0100000 0.00000) 172 | "noiref" (0.0100000 0.00000) 173 | "noiva" (0.0100000 0.00000) 174 | "top" (1.00000 0.00000) 175 | "topref" (1.00000 0.00000) 176 | "topva" (1.00000 0.00000) 177 | "VTOP:p" (-0.0200000 0.00000) 178 | "freq" 1.995262314968880e+00 179 | "iRESref:p" (0.0100000 0.00000) 180 | "iRESva:p" (0.0100000 0.00000) 181 | "noiref" (0.0100000 0.00000) 182 | "noiva" (0.0100000 0.00000) 183 | "top" (1.00000 0.00000) 184 | "topref" (1.00000 0.00000) 185 | "topva" (1.00000 0.00000) 186 | "VTOP:p" (-0.0200000 0.00000) 187 | "freq" 2.511886431509581e+00 188 | "iRESref:p" (0.0100000 0.00000) 189 | "iRESva:p" (0.0100000 0.00000) 190 | "noiref" (0.0100000 0.00000) 191 | "noiva" (0.0100000 0.00000) 192 | "top" (1.00000 0.00000) 193 | "topref" (1.00000 0.00000) 194 | "topva" (1.00000 0.00000) 195 | "VTOP:p" (-0.0200000 0.00000) 196 | "freq" 3.162277660168380e+00 197 | "iRESref:p" (0.0100000 0.00000) 198 | "iRESva:p" (0.0100000 0.00000) 199 | "noiref" (0.0100000 0.00000) 200 | "noiva" (0.0100000 0.00000) 201 | "top" (1.00000 0.00000) 202 | "topref" (1.00000 0.00000) 203 | "topva" (1.00000 0.00000) 204 | "VTOP:p" (-0.0200000 0.00000) 205 | "freq" 3.981071705534974e+00 206 | "iRESref:p" (0.0100000 0.00000) 207 | "iRESva:p" (0.0100000 0.00000) 208 | "noiref" (0.0100000 0.00000) 209 | "noiva" (0.0100000 0.00000) 210 | "top" (1.00000 0.00000) 211 | "topref" (1.00000 0.00000) 212 | "topva" (1.00000 0.00000) 213 | "VTOP:p" (-0.0200000 0.00000) 214 | "freq" 5.011872336272725e+00 215 | "iRESref:p" (0.0100000 0.00000) 216 | "iRESva:p" (0.0100000 0.00000) 217 | "noiref" (0.0100000 0.00000) 218 | "noiva" (0.0100000 0.00000) 219 | "top" (1.00000 0.00000) 220 | "topref" (1.00000 0.00000) 221 | "topva" (1.00000 0.00000) 222 | "VTOP:p" (-0.0200000 0.00000) 223 | "freq" 6.309573444801935e+00 224 | "iRESref:p" (0.0100000 0.00000) 225 | "iRESva:p" (0.0100000 0.00000) 226 | "noiref" (0.0100000 0.00000) 227 | "noiva" (0.0100000 0.00000) 228 | "top" (1.00000 0.00000) 229 | "topref" (1.00000 0.00000) 230 | "topva" (1.00000 0.00000) 231 | "VTOP:p" (-0.0200000 0.00000) 232 | "freq" 7.943282347242818e+00 233 | "iRESref:p" (0.0100000 0.00000) 234 | "iRESva:p" (0.0100000 0.00000) 235 | "noiref" (0.0100000 0.00000) 236 | "noiva" (0.0100000 0.00000) 237 | "top" (1.00000 0.00000) 238 | "topref" (1.00000 0.00000) 239 | "topva" (1.00000 0.00000) 240 | "VTOP:p" (-0.0200000 0.00000) 241 | "freq" 1.000000000000001e+01 242 | "iRESref:p" (0.0100000 0.00000) 243 | "iRESva:p" (0.0100000 0.00000) 244 | "noiref" (0.0100000 0.00000) 245 | "noiva" (0.0100000 0.00000) 246 | "top" (1.00000 0.00000) 247 | "topref" (1.00000 0.00000) 248 | "topva" (1.00000 0.00000) 249 | "VTOP:p" (-0.0200000 0.00000) 250 | "freq" 1.258925411794168e+01 251 | "iRESref:p" (0.0100000 0.00000) 252 | "iRESva:p" (0.0100000 0.00000) 253 | "noiref" (0.0100000 0.00000) 254 | "noiva" (0.0100000 0.00000) 255 | "top" (1.00000 0.00000) 256 | "topref" (1.00000 0.00000) 257 | "topva" (1.00000 0.00000) 258 | "VTOP:p" (-0.0200000 0.00000) 259 | "freq" 1.584893192461115e+01 260 | "iRESref:p" (0.0100000 0.00000) 261 | "iRESva:p" (0.0100000 0.00000) 262 | "noiref" (0.0100000 0.00000) 263 | "noiva" (0.0100000 0.00000) 264 | "top" (1.00000 0.00000) 265 | "topref" (1.00000 0.00000) 266 | "topva" (1.00000 0.00000) 267 | "VTOP:p" (-0.0200000 0.00000) 268 | "freq" 1.995262314968881e+01 269 | "iRESref:p" (0.0100000 0.00000) 270 | "iRESva:p" (0.0100000 0.00000) 271 | "noiref" (0.0100000 0.00000) 272 | "noiva" (0.0100000 0.00000) 273 | "top" (1.00000 0.00000) 274 | "topref" (1.00000 0.00000) 275 | "topva" (1.00000 0.00000) 276 | "VTOP:p" (-0.0200000 0.00000) 277 | "freq" 2.511886431509582e+01 278 | "iRESref:p" (0.0100000 0.00000) 279 | "iRESva:p" (0.0100000 0.00000) 280 | "noiref" (0.0100000 0.00000) 281 | "noiva" (0.0100000 0.00000) 282 | "top" (1.00000 0.00000) 283 | "topref" (1.00000 0.00000) 284 | "topva" (1.00000 0.00000) 285 | "VTOP:p" (-0.0200000 0.00000) 286 | "freq" 3.162277660168382e+01 287 | "iRESref:p" (0.0100000 0.00000) 288 | "iRESva:p" (0.0100000 0.00000) 289 | "noiref" (0.0100000 0.00000) 290 | "noiva" (0.0100000 0.00000) 291 | "top" (1.00000 0.00000) 292 | "topref" (1.00000 0.00000) 293 | "topva" (1.00000 0.00000) 294 | "VTOP:p" (-0.0200000 0.00000) 295 | "freq" 3.981071705534977e+01 296 | "iRESref:p" (0.0100000 0.00000) 297 | "iRESva:p" (0.0100000 0.00000) 298 | "noiref" (0.0100000 0.00000) 299 | "noiva" (0.0100000 0.00000) 300 | "top" (1.00000 0.00000) 301 | "topref" (1.00000 0.00000) 302 | "topva" (1.00000 0.00000) 303 | "VTOP:p" (-0.0200000 0.00000) 304 | "freq" 5.011872336272729e+01 305 | "iRESref:p" (0.0100000 0.00000) 306 | "iRESva:p" (0.0100000 0.00000) 307 | "noiref" (0.0100000 0.00000) 308 | "noiva" (0.0100000 0.00000) 309 | "top" (1.00000 0.00000) 310 | "topref" (1.00000 0.00000) 311 | "topva" (1.00000 0.00000) 312 | "VTOP:p" (-0.0200000 0.00000) 313 | "freq" 6.309573444801940e+01 314 | "iRESref:p" (0.0100000 0.00000) 315 | "iRESva:p" (0.0100000 0.00000) 316 | "noiref" (0.0100000 0.00000) 317 | "noiva" (0.0100000 0.00000) 318 | "top" (1.00000 0.00000) 319 | "topref" (1.00000 0.00000) 320 | "topva" (1.00000 0.00000) 321 | "VTOP:p" (-0.0200000 0.00000) 322 | "freq" 7.943282347242825e+01 323 | "iRESref:p" (0.0100000 0.00000) 324 | "iRESva:p" (0.0100000 0.00000) 325 | "noiref" (0.0100000 0.00000) 326 | "noiva" (0.0100000 0.00000) 327 | "top" (1.00000 0.00000) 328 | "topref" (1.00000 0.00000) 329 | "topva" (1.00000 0.00000) 330 | "VTOP:p" (-0.0200000 0.00000) 331 | "freq" 1.000000000000001e+02 332 | "iRESref:p" (0.0100000 0.00000) 333 | "iRESva:p" (0.0100000 0.00000) 334 | "noiref" (0.0100000 0.00000) 335 | "noiva" (0.0100000 0.00000) 336 | "top" (1.00000 0.00000) 337 | "topref" (1.00000 0.00000) 338 | "topva" (1.00000 0.00000) 339 | "VTOP:p" (-0.0200000 0.00000) 340 | "freq" 1.258925411794169e+02 341 | "iRESref:p" (0.0100000 0.00000) 342 | "iRESva:p" (0.0100000 0.00000) 343 | "noiref" (0.0100000 0.00000) 344 | "noiva" (0.0100000 0.00000) 345 | "top" (1.00000 0.00000) 346 | "topref" (1.00000 0.00000) 347 | "topva" (1.00000 0.00000) 348 | "VTOP:p" (-0.0200000 0.00000) 349 | "freq" 1.584893192461116e+02 350 | "iRESref:p" (0.0100000 0.00000) 351 | "iRESva:p" (0.0100000 0.00000) 352 | "noiref" (0.0100000 0.00000) 353 | "noiva" (0.0100000 0.00000) 354 | "top" (1.00000 0.00000) 355 | "topref" (1.00000 0.00000) 356 | "topva" (1.00000 0.00000) 357 | "VTOP:p" (-0.0200000 0.00000) 358 | "freq" 1.995262314968883e+02 359 | "iRESref:p" (0.0100000 0.00000) 360 | "iRESva:p" (0.0100000 0.00000) 361 | "noiref" (0.0100000 0.00000) 362 | "noiva" (0.0100000 0.00000) 363 | "top" (1.00000 0.00000) 364 | "topref" (1.00000 0.00000) 365 | "topva" (1.00000 0.00000) 366 | "VTOP:p" (-0.0200000 0.00000) 367 | "freq" 2.511886431509584e+02 368 | "iRESref:p" (0.0100000 0.00000) 369 | "iRESva:p" (0.0100000 0.00000) 370 | "noiref" (0.0100000 0.00000) 371 | "noiva" (0.0100000 0.00000) 372 | "top" (1.00000 0.00000) 373 | "topref" (1.00000 0.00000) 374 | "topva" (1.00000 0.00000) 375 | "VTOP:p" (-0.0200000 0.00000) 376 | "freq" 3.162277660168385e+02 377 | "iRESref:p" (0.0100000 0.00000) 378 | "iRESva:p" (0.0100000 0.00000) 379 | "noiref" (0.0100000 0.00000) 380 | "noiva" (0.0100000 0.00000) 381 | "top" (1.00000 0.00000) 382 | "topref" (1.00000 0.00000) 383 | "topva" (1.00000 0.00000) 384 | "VTOP:p" (-0.0200000 0.00000) 385 | "freq" 3.981071705534980e+02 386 | "iRESref:p" (0.0100000 0.00000) 387 | "iRESva:p" (0.0100000 0.00000) 388 | "noiref" (0.0100000 0.00000) 389 | "noiva" (0.0100000 0.00000) 390 | "top" (1.00000 0.00000) 391 | "topref" (1.00000 0.00000) 392 | "topva" (1.00000 0.00000) 393 | "VTOP:p" (-0.0200000 0.00000) 394 | "freq" 5.011872336272732e+02 395 | "iRESref:p" (0.0100000 0.00000) 396 | "iRESva:p" (0.0100000 0.00000) 397 | "noiref" (0.0100000 0.00000) 398 | "noiva" (0.0100000 0.00000) 399 | "top" (1.00000 0.00000) 400 | "topref" (1.00000 0.00000) 401 | "topva" (1.00000 0.00000) 402 | "VTOP:p" (-0.0200000 0.00000) 403 | "freq" 6.309573444801945e+02 404 | "iRESref:p" (0.0100000 0.00000) 405 | "iRESva:p" (0.0100000 0.00000) 406 | "noiref" (0.0100000 0.00000) 407 | "noiva" (0.0100000 0.00000) 408 | "top" (1.00000 0.00000) 409 | "topref" (1.00000 0.00000) 410 | "topva" (1.00000 0.00000) 411 | "VTOP:p" (-0.0200000 0.00000) 412 | "freq" 7.943282347242831e+02 413 | "iRESref:p" (0.0100000 0.00000) 414 | "iRESva:p" (0.0100000 0.00000) 415 | "noiref" (0.0100000 0.00000) 416 | "noiva" (0.0100000 0.00000) 417 | "top" (1.00000 0.00000) 418 | "topref" (1.00000 0.00000) 419 | "topva" (1.00000 0.00000) 420 | "VTOP:p" (-0.0200000 0.00000) 421 | "freq" 1.000000000000002e+03 422 | "iRESref:p" (0.0100000 0.00000) 423 | "iRESva:p" (0.0100000 0.00000) 424 | "noiref" (0.0100000 0.00000) 425 | "noiva" (0.0100000 0.00000) 426 | "top" (1.00000 0.00000) 427 | "topref" (1.00000 0.00000) 428 | "topva" (1.00000 0.00000) 429 | "VTOP:p" (-0.0200000 0.00000) 430 | "freq" 1.258925411794170e+03 431 | "iRESref:p" (0.0100000 0.00000) 432 | "iRESva:p" (0.0100000 0.00000) 433 | "noiref" (0.0100000 0.00000) 434 | "noiva" (0.0100000 0.00000) 435 | "top" (1.00000 0.00000) 436 | "topref" (1.00000 0.00000) 437 | "topva" (1.00000 0.00000) 438 | "VTOP:p" (-0.0200000 0.00000) 439 | "freq" 1.584893192461117e+03 440 | "iRESref:p" (0.0100000 0.00000) 441 | "iRESva:p" (0.0100000 0.00000) 442 | "noiref" (0.0100000 0.00000) 443 | "noiva" (0.0100000 0.00000) 444 | "top" (1.00000 0.00000) 445 | "topref" (1.00000 0.00000) 446 | "topva" (1.00000 0.00000) 447 | "VTOP:p" (-0.0200000 0.00000) 448 | "freq" 1.995262314968884e+03 449 | "iRESref:p" (0.0100000 0.00000) 450 | "iRESva:p" (0.0100000 0.00000) 451 | "noiref" (0.0100000 0.00000) 452 | "noiva" (0.0100000 0.00000) 453 | "top" (1.00000 0.00000) 454 | "topref" (1.00000 0.00000) 455 | "topva" (1.00000 0.00000) 456 | "VTOP:p" (-0.0200000 0.00000) 457 | "freq" 2.511886431509586e+03 458 | "iRESref:p" (0.0100000 0.00000) 459 | "iRESva:p" (0.0100000 0.00000) 460 | "noiref" (0.0100000 0.00000) 461 | "noiva" (0.0100000 0.00000) 462 | "top" (1.00000 0.00000) 463 | "topref" (1.00000 0.00000) 464 | "topva" (1.00000 0.00000) 465 | "VTOP:p" (-0.0200000 0.00000) 466 | "freq" 3.162277660168386e+03 467 | "iRESref:p" (0.0100000 0.00000) 468 | "iRESva:p" (0.0100000 0.00000) 469 | "noiref" (0.0100000 0.00000) 470 | "noiva" (0.0100000 0.00000) 471 | "top" (1.00000 0.00000) 472 | "topref" (1.00000 0.00000) 473 | "topva" (1.00000 0.00000) 474 | "VTOP:p" (-0.0200000 0.00000) 475 | "freq" 3.981071705534981e+03 476 | "iRESref:p" (0.0100000 0.00000) 477 | "iRESva:p" (0.0100000 0.00000) 478 | "noiref" (0.0100000 0.00000) 479 | "noiva" (0.0100000 0.00000) 480 | "top" (1.00000 0.00000) 481 | "topref" (1.00000 0.00000) 482 | "topva" (1.00000 0.00000) 483 | "VTOP:p" (-0.0200000 0.00000) 484 | "freq" 5.011872336272734e+03 485 | "iRESref:p" (0.0100000 0.00000) 486 | "iRESva:p" (0.0100000 0.00000) 487 | "noiref" (0.0100000 0.00000) 488 | "noiva" (0.0100000 0.00000) 489 | "top" (1.00000 0.00000) 490 | "topref" (1.00000 0.00000) 491 | "topva" (1.00000 0.00000) 492 | "VTOP:p" (-0.0200000 0.00000) 493 | "freq" 6.309573444801948e+03 494 | "iRESref:p" (0.0100000 0.00000) 495 | "iRESva:p" (0.0100000 0.00000) 496 | "noiref" (0.0100000 0.00000) 497 | "noiva" (0.0100000 0.00000) 498 | "top" (1.00000 0.00000) 499 | "topref" (1.00000 0.00000) 500 | "topva" (1.00000 0.00000) 501 | "VTOP:p" (-0.0200000 0.00000) 502 | "freq" 7.943282347242834e+03 503 | "iRESref:p" (0.0100000 0.00000) 504 | "iRESva:p" (0.0100000 0.00000) 505 | "noiref" (0.0100000 0.00000) 506 | "noiva" (0.0100000 0.00000) 507 | "top" (1.00000 0.00000) 508 | "topref" (1.00000 0.00000) 509 | "topva" (1.00000 0.00000) 510 | "VTOP:p" (-0.0200000 0.00000) 511 | "freq" 1.000000000000003e+04 512 | "iRESref:p" (0.0100000 0.00000) 513 | "iRESva:p" (0.0100000 0.00000) 514 | "noiref" (0.0100000 0.00000) 515 | "noiva" (0.0100000 0.00000) 516 | "top" (1.00000 0.00000) 517 | "topref" (1.00000 0.00000) 518 | "topva" (1.00000 0.00000) 519 | "VTOP:p" (-0.0200000 0.00000) 520 | "freq" 1.258925411794171e+04 521 | "iRESref:p" (0.0100000 0.00000) 522 | "iRESva:p" (0.0100000 0.00000) 523 | "noiref" (0.0100000 0.00000) 524 | "noiva" (0.0100000 0.00000) 525 | "top" (1.00000 0.00000) 526 | "topref" (1.00000 0.00000) 527 | "topva" (1.00000 0.00000) 528 | "VTOP:p" (-0.0200000 0.00000) 529 | "freq" 1.584893192461118e+04 530 | "iRESref:p" (0.0100000 0.00000) 531 | "iRESva:p" (0.0100000 0.00000) 532 | "noiref" (0.0100000 0.00000) 533 | "noiva" (0.0100000 0.00000) 534 | "top" (1.00000 0.00000) 535 | "topref" (1.00000 0.00000) 536 | "topva" (1.00000 0.00000) 537 | "VTOP:p" (-0.0200000 0.00000) 538 | "freq" 1.995262314968885e+04 539 | "iRESref:p" (0.0100000 0.00000) 540 | "iRESva:p" (0.0100000 0.00000) 541 | "noiref" (0.0100000 0.00000) 542 | "noiva" (0.0100000 0.00000) 543 | "top" (1.00000 0.00000) 544 | "topref" (1.00000 0.00000) 545 | "topva" (1.00000 0.00000) 546 | "VTOP:p" (-0.0200000 0.00000) 547 | "freq" 2.511886431509587e+04 548 | "iRESref:p" (0.0100000 0.00000) 549 | "iRESva:p" (0.0100000 0.00000) 550 | "noiref" (0.0100000 0.00000) 551 | "noiva" (0.0100000 0.00000) 552 | "top" (1.00000 0.00000) 553 | "topref" (1.00000 0.00000) 554 | "topva" (1.00000 0.00000) 555 | "VTOP:p" (-0.0200000 0.00000) 556 | "freq" 3.162277660168388e+04 557 | "iRESref:p" (0.0100000 0.00000) 558 | "iRESva:p" (0.0100000 0.00000) 559 | "noiref" (0.0100000 0.00000) 560 | "noiva" (0.0100000 0.00000) 561 | "top" (1.00000 0.00000) 562 | "topref" (1.00000 0.00000) 563 | "topva" (1.00000 0.00000) 564 | "VTOP:p" (-0.0200000 0.00000) 565 | "freq" 3.981071705534984e+04 566 | "iRESref:p" (0.0100000 0.00000) 567 | "iRESva:p" (0.0100000 0.00000) 568 | "noiref" (0.0100000 0.00000) 569 | "noiva" (0.0100000 0.00000) 570 | "top" (1.00000 0.00000) 571 | "topref" (1.00000 0.00000) 572 | "topva" (1.00000 0.00000) 573 | "VTOP:p" (-0.0200000 0.00000) 574 | "freq" 5.011872336272738e+04 575 | "iRESref:p" (0.0100000 0.00000) 576 | "iRESva:p" (0.0100000 0.00000) 577 | "noiref" (0.0100000 0.00000) 578 | "noiva" (0.0100000 0.00000) 579 | "top" (1.00000 0.00000) 580 | "topref" (1.00000 0.00000) 581 | "topva" (1.00000 0.00000) 582 | "VTOP:p" (-0.0200000 0.00000) 583 | "freq" 6.309573444801952e+04 584 | "iRESref:p" (0.0100000 0.00000) 585 | "iRESva:p" (0.0100000 0.00000) 586 | "noiref" (0.0100000 0.00000) 587 | "noiva" (0.0100000 0.00000) 588 | "top" (1.00000 0.00000) 589 | "topref" (1.00000 0.00000) 590 | "topva" (1.00000 0.00000) 591 | "VTOP:p" (-0.0200000 0.00000) 592 | "freq" 7.943282347242841e+04 593 | "iRESref:p" (0.0100000 0.00000) 594 | "iRESva:p" (0.0100000 0.00000) 595 | "noiref" (0.0100000 0.00000) 596 | "noiva" (0.0100000 0.00000) 597 | "top" (1.00000 0.00000) 598 | "topref" (1.00000 0.00000) 599 | "topva" (1.00000 0.00000) 600 | "VTOP:p" (-0.0200000 0.00000) 601 | "freq" 1.000000000000003e+05 602 | "iRESref:p" (0.0100000 0.00000) 603 | "iRESva:p" (0.0100000 0.00000) 604 | "noiref" (0.0100000 0.00000) 605 | "noiva" (0.0100000 0.00000) 606 | "top" (1.00000 0.00000) 607 | "topref" (1.00000 0.00000) 608 | "topva" (1.00000 0.00000) 609 | "VTOP:p" (-0.0200000 0.00000) 610 | "freq" 1.258925411794172e+05 611 | "iRESref:p" (0.0100000 0.00000) 612 | "iRESva:p" (0.0100000 0.00000) 613 | "noiref" (0.0100000 0.00000) 614 | "noiva" (0.0100000 0.00000) 615 | "top" (1.00000 0.00000) 616 | "topref" (1.00000 0.00000) 617 | "topva" (1.00000 0.00000) 618 | "VTOP:p" (-0.0200000 0.00000) 619 | "freq" 1.584893192461119e+05 620 | "iRESref:p" (0.0100000 0.00000) 621 | "iRESva:p" (0.0100000 0.00000) 622 | "noiref" (0.0100000 0.00000) 623 | "noiva" (0.0100000 0.00000) 624 | "top" (1.00000 0.00000) 625 | "topref" (1.00000 0.00000) 626 | "topva" (1.00000 0.00000) 627 | "VTOP:p" (-0.0200000 0.00000) 628 | "freq" 1.995262314968887e+05 629 | "iRESref:p" (0.0100000 0.00000) 630 | "iRESva:p" (0.0100000 0.00000) 631 | "noiref" (0.0100000 0.00000) 632 | "noiva" (0.0100000 0.00000) 633 | "top" (1.00000 0.00000) 634 | "topref" (1.00000 0.00000) 635 | "topva" (1.00000 0.00000) 636 | "VTOP:p" (-0.0200000 0.00000) 637 | "freq" 2.511886431509589e+05 638 | "iRESref:p" (0.0100000 0.00000) 639 | "iRESva:p" (0.0100000 0.00000) 640 | "noiref" (0.0100000 0.00000) 641 | "noiva" (0.0100000 0.00000) 642 | "top" (1.00000 0.00000) 643 | "topref" (1.00000 0.00000) 644 | "topva" (1.00000 0.00000) 645 | "VTOP:p" (-0.0200000 0.00000) 646 | "freq" 3.162277660168391e+05 647 | "iRESref:p" (0.0100000 0.00000) 648 | "iRESva:p" (0.0100000 0.00000) 649 | "noiref" (0.0100000 0.00000) 650 | "noiva" (0.0100000 0.00000) 651 | "top" (1.00000 0.00000) 652 | "topref" (1.00000 0.00000) 653 | "topva" (1.00000 0.00000) 654 | "VTOP:p" (-0.0200000 0.00000) 655 | "freq" 3.981071705534988e+05 656 | "iRESref:p" (0.0100000 0.00000) 657 | "iRESva:p" (0.0100000 0.00000) 658 | "noiref" (0.0100000 0.00000) 659 | "noiva" (0.0100000 0.00000) 660 | "top" (1.00000 0.00000) 661 | "topref" (1.00000 0.00000) 662 | "topva" (1.00000 0.00000) 663 | "VTOP:p" (-0.0200000 0.00000) 664 | "freq" 5.011872336272742e+05 665 | "iRESref:p" (0.0100000 0.00000) 666 | "iRESva:p" (0.0100000 0.00000) 667 | "noiref" (0.0100000 0.00000) 668 | "noiva" (0.0100000 0.00000) 669 | "top" (1.00000 0.00000) 670 | "topref" (1.00000 0.00000) 671 | "topva" (1.00000 0.00000) 672 | "VTOP:p" (-0.0200000 0.00000) 673 | "freq" 6.309573444801958e+05 674 | "iRESref:p" (0.0100000 0.00000) 675 | "iRESva:p" (0.0100000 0.00000) 676 | "noiref" (0.0100000 0.00000) 677 | "noiva" (0.0100000 0.00000) 678 | "top" (1.00000 0.00000) 679 | "topref" (1.00000 0.00000) 680 | "topva" (1.00000 0.00000) 681 | "VTOP:p" (-0.0200000 0.00000) 682 | "freq" 7.943282347242847e+05 683 | "iRESref:p" (0.0100000 0.00000) 684 | "iRESva:p" (0.0100000 0.00000) 685 | "noiref" (0.0100000 0.00000) 686 | "noiva" (0.0100000 0.00000) 687 | "top" (1.00000 0.00000) 688 | "topref" (1.00000 0.00000) 689 | "topva" (1.00000 0.00000) 690 | "VTOP:p" (-0.0200000 0.00000) 691 | "freq" 1.000000000000000e+06 692 | "iRESref:p" (0.0100000 0.00000) 693 | "iRESva:p" (0.0100000 0.00000) 694 | "noiref" (0.0100000 0.00000) 695 | "noiva" (0.0100000 0.00000) 696 | "top" (1.00000 0.00000) 697 | "topref" (1.00000 0.00000) 698 | "topva" (1.00000 0.00000) 699 | "VTOP:p" (-0.0200000 0.00000) 700 | END 701 | -------------------------------------------------------------------------------- /samples/pnoise.raw/logFile: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "Log Generator" "drlLog rev. 1.0" 4 | "Log Time Stamp" "Sat Sep 14 09:11:11 2019" 5 | "simulator" "spectre" 6 | "version" "15.1.0.284.isr1" 7 | "date" "9:11:11 AM, Sat Sep 14, 2019" 8 | "design" "" 9 | "signalNameType" "spectre" 10 | "simMode" "Spectre" 11 | "measdgt" 0 12 | "ingold" 2 13 | "sst2usecolon" 0 14 | TYPE 15 | "analysisInst" STRUCT( 16 | "analysisType" STRING * 17 | "dataFile" STRING * 18 | "format" STRING * 19 | "parent" STRING * 20 | "sweepVariable" ARRAY ( * ) STRING * 21 | "description" STRING * 22 | ) 23 | VALUE 24 | "noiva-noise" "analysisInst" ( 25 | "noise" 26 | "noiva.noise" 27 | "PSF" 28 | "" 29 | ("freq") 30 | "Noise Analysis `noiva': freq = (4 Hz -> 4.19 MHz)" 31 | ) PROP( 32 | "data_type" "swept_struct" 33 | ) 34 | 35 | "noiref-noise" "analysisInst" ( 36 | "noise" 37 | "noiref.noise" 38 | "PSF" 39 | "" 40 | ("freq") 41 | "Noise Analysis `noiref': freq = (4 Hz -> 4.19 MHz)" 42 | ) PROP( 43 | "data_type" "swept_struct" 44 | ) 45 | 46 | "pss-td.pss" "analysisInst" ( 47 | "td.pss" 48 | "pss.td.pss" 49 | "PSF" 50 | "" 51 | ("time") 52 | "Periodic Steady-State Analysis `pss': time = (0 s -> 7.63359 us)" 53 | ) PROP( 54 | "data_type" "swept_scalar" 55 | ) 56 | 57 | "pnoiva-pnoise" "analysisInst" ( 58 | "pnoise" 59 | "pnoiva.pnoise" 60 | "PSF" 61 | "" 62 | ("freq") 63 | "Periodic Noise Analysis `pnoiva': freq = (4 Hz -> 4.19 MHz)" 64 | ) PROP( 65 | "data_type" "swept_struct" 66 | ) 67 | 68 | "pnoiref-pnoise" "analysisInst" ( 69 | "pnoise" 70 | "pnoiref.pnoise" 71 | "PSF" 72 | "" 73 | ("freq") 74 | "Periodic Noise Analysis `pnoiref': freq = (4 Hz -> 4.19 MHz)" 75 | ) PROP( 76 | "data_type" "swept_struct" 77 | ) 78 | 79 | "aclin-ac" "analysisInst" ( 80 | "ac" 81 | "aclin.ac" 82 | "PSF" 83 | "" 84 | ("freq") 85 | "AC Analysis `aclin': freq = (0 Hz -> 1 MHz)" 86 | ) PROP( 87 | "data_type" "swept_scalar" 88 | ) 89 | 90 | "aclog-ac" "analysisInst" ( 91 | "ac" 92 | "aclog.ac" 93 | "PSF" 94 | "" 95 | ("freq") 96 | "AC Analysis `aclog': freq = (1 Hz -> 1 MHz)" 97 | ) PROP( 98 | "data_type" "swept_scalar" 99 | ) 100 | 101 | END 102 | -------------------------------------------------------------------------------- /samples/presized_OTA_tb_v2.pz: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "BINPSF creation time" "1702140172" 4 | "simulator" "spectre" 5 | "version" "21.1.0.460.isr10" 6 | "date" "11:42:51 AM, Sat Dec 9, 2023" 7 | "design" "// Generated for: spectre" 8 | "analysis type" "pz" 9 | "analysis name" "pz" 10 | "analysis description" "PZ Analysis `pz'" 11 | "xVecSorted" "unknown" 12 | "tolerance.relative" 0.00100000 13 | "fmax" 1.00000e+12 14 | "zeroonly" 0.00000 15 | TYPE 16 | "transferGain" STRUCT( 17 | "gain" FLOAT DOUBLE PROP( 18 | "description" "V(out_2,0)/V2" 19 | ) 20 | ) PROP( 21 | "key" "inst" 22 | ) 23 | "dcGain" STRUCT( 24 | "dcgain" FLOAT DOUBLE PROP( 25 | "description" "V(out_2,0)/V2" 26 | ) 27 | ) PROP( 28 | "key" "inst" 29 | ) 30 | "PoleAndQ" STRUCT( 31 | "pole" COMPLEX DOUBLE PROP( 32 | "units" "Hz" 33 | "description" "pole" 34 | ) 35 | "qfactor" FLOAT DOUBLE PROP( 36 | "description" "qfactor" 37 | ) 38 | ) PROP( 39 | "key" "inst" 40 | ) 41 | "ZeroAndQ" STRUCT( 42 | "zero" COMPLEX DOUBLE PROP( 43 | "units" "Hz" 44 | "description" "zero" 45 | ) 46 | "qfactor" FLOAT DOUBLE PROP( 47 | "description" "qfactor" 48 | ) 49 | ) PROP( 50 | "key" "inst" 51 | ) 52 | VALUE 53 | "transferGain" "transferGain" ( 54 | 1.05590e-05 55 | ) 56 | "dcGain" "dcGain" ( 57 | 0.999784 58 | ) 59 | "Pole_1" "PoleAndQ" ( 60 | (0.0322188 4.86899) 61 | -75.5630 62 | ) 63 | "Pole_2" "PoleAndQ" ( 64 | (0.0322188 -4.86899) 65 | -75.5630 66 | ) 67 | "Pole_3" "PoleAndQ" ( 68 | (-367.857 0.00000) 69 | 0.500000 70 | ) 71 | "Pole_4" "PoleAndQ" ( 72 | (-580077. 0.00000) 73 | 0.500000 74 | ) 75 | "Pole_5" "PoleAndQ" ( 76 | (-6.95704e+08 0.00000) 77 | 0.500000 78 | ) 79 | "Pole_6" "PoleAndQ" ( 80 | (-8.50732e+08 0.00000) 81 | 0.500000 82 | ) 83 | "Pole_7" "PoleAndQ" ( 84 | (-5.75365e+09 0.00000) 85 | 0.500000 86 | ) 87 | "Zero_1" "ZeroAndQ" ( 88 | (-7.83770e-23 0.159155) 89 | 1.01532e+21 90 | ) 91 | "Zero_2" "ZeroAndQ" ( 92 | (-7.83770e-23 -0.159155) 93 | 1.01532e+21 94 | ) 95 | "Zero_3" "ZeroAndQ" ( 96 | (1.45746e+06 0.00000) 97 | -0.500000 98 | ) 99 | "Zero_4" "ZeroAndQ" ( 100 | (-7.03749e+08 0.00000) 101 | 0.500000 102 | ) 103 | "Zero_5" "ZeroAndQ" ( 104 | (-2.26470e+09 0.00000) 105 | 0.500000 106 | ) 107 | "Zero_6" "ZeroAndQ" ( 108 | (-3.01880e+09 0.00000) 109 | 0.500000 110 | ) 111 | "Zero_7" "ZeroAndQ" ( 112 | (9.18342e+09 0.00000) 113 | -0.500000 114 | ) 115 | END 116 | -------------------------------------------------------------------------------- /samples/presized_OTA_tb_v2.stb: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "BINPSF creation time" "1702140172" 4 | "simulator" "spectre" 5 | "version" "21.1.0.460.isr10" 6 | "date" "11:42:51 AM, Sat Dec 9, 2023" 7 | "design" "// Generated for: spectre" 8 | "analysis type" "margin.stb" 9 | "analysis name" "stb" 10 | "analysis description" "Stability Analysis `stb': freq = (1 Hz -> 1 GHz)" 11 | "xVecSorted" "ascending" 12 | "tolerance.relative" 0.00100000 13 | "operating point producer" "stb" 14 | "probe" "IPRB1" 15 | "gainMargin" "1.253865e+01 dB" 16 | "gainMarginFrequency" "9.191272e+05 Hz" 17 | "phaseMargin" "4.991486e+01 Deg" 18 | "phaseMarginFrequency" "3.100952e+05 Hz" 19 | TYPE 20 | "dB" FLOAT DOUBLE PROP( 21 | "key" "gain" 22 | "units" "dB" 23 | ) 24 | "Deg" FLOAT DOUBLE PROP( 25 | "key" "gain" 26 | "units" "Deg" 27 | ) 28 | "Hz" FLOAT DOUBLE PROP( 29 | "key" "gain" 30 | "units" "Hz" 31 | ) 32 | "stbstate" STRING * 33 | VALUE 34 | "gainMargin" "dB" 12.5387 PROP( 35 | "gainMarginInfo" "Gain margin = 1.253865e+01 dB at frequency = 9.191272e+05 Hz" 36 | ) 37 | "gainMarginFreq" "Hz" 919127. 38 | "phaseMargin" "Deg" 49.9149 PROP( 39 | "phaseMarginInfo" "Phase margin = 4.991486e+01 Deg at frequency = 3.100952e+05 Hz" 40 | ) 41 | "phaseMarginFreq" "Hz" 310095. 42 | "stb_state" "stbstate" "The circuit is stable. Gain and phase margin are both found." 43 | END 44 | -------------------------------------------------------------------------------- /samples/rushikesh-dhanaji-phadtare.tran: -------------------------------------------------------------------------------- 1 | HEADER 2 | "PSFversion" "1.00" 3 | "BINPSF creation time" "1612260501" 4 | "simulator" "spectre" 5 | "version" "19.1.0.063" 6 | "date" "11:08:21 AM, Tue Feb 2, 2021" 7 | "design" "// Generated for: spectre" 8 | "analysis type" "tran" 9 | "analysis name" "tran" 10 | "analysis description" "Transient Analysis `tran': time = (0 s -> 33 us)" 11 | "xVecSorted" "ascending" 12 | "tolerance.relative" 0.00100000 13 | "start" 0.00000 14 | "outputstart" 0.00000 15 | "stop" 3.30000e-05 16 | "step" 3.30000e-08 17 | "istep" 0.00100000 18 | "maxstep" 6.60000e-07 19 | "ic" "all" 20 | "useprevic" "no" 21 | "skipdc" "no" 22 | "reltol" 0.00100000 23 | "abstol(V)" 1.00000e-06 24 | "abstol(I)" 1.00000e-12 25 | "temp" 27.0000 26 | "tnom" 27.0000 27 | "tempeffects" "all" 28 | "errpreset" "moderate" 29 | "method" "traponly" 30 | "lteratio" 3.50000 31 | "relref" "sigglobal" 32 | "cmin" 0.00000 33 | "gmin" 1.00000e-12 34 | TYPE 35 | "sweep" FLOAT DOUBLE PROP( 36 | "key" "sweep" 37 | ) 38 | "LogicV" FLOAT DOUBLE PROP( 39 | "key" "node" 40 | ) 41 | "Tau" FLOAT DOUBLE PROP( 42 | "units" "N*m" 43 | "key" "node" 44 | "tolerance" 1.00000e-06 45 | ) 46 | "Alpha" FLOAT DOUBLE PROP( 47 | "units" "rads/s^2" 48 | "key" "node" 49 | "tolerance" 1.00000e-06 50 | ) 51 | "Omega" FLOAT DOUBLE PROP( 52 | "units" "rads/s" 53 | "key" "node" 54 | "tolerance" 1.00000e-06 55 | ) 56 | "Theta" FLOAT DOUBLE PROP( 57 | "units" "rads" 58 | "key" "node" 59 | "tolerance" 1.00000e-06 60 | ) 61 | "F" FLOAT DOUBLE PROP( 62 | "units" "N" 63 | "key" "node" 64 | "tolerance" 1.00000e-06 65 | ) 66 | "Imp" FLOAT DOUBLE PROP( 67 | "units" "m/s^3" 68 | "key" "node" 69 | "tolerance" 1.00000e-06 70 | ) 71 | "Acc" FLOAT DOUBLE PROP( 72 | "units" "m/s^2" 73 | "key" "node" 74 | "tolerance" 1.00000e-06 75 | ) 76 | "Vel" FLOAT DOUBLE PROP( 77 | "units" "m/s" 78 | "key" "node" 79 | "tolerance" 1.00000e-06 80 | ) 81 | "Pos" FLOAT DOUBLE PROP( 82 | "units" "m" 83 | "key" "node" 84 | "tolerance" 1.00000e-06 85 | ) 86 | "Phi" FLOAT DOUBLE PROP( 87 | "units" "Wb" 88 | "key" "node" 89 | "tolerance" 1.00000e-09 90 | ) 91 | "V" FLOAT DOUBLE PROP( 92 | "units" "V" 93 | "key" "node" 94 | "tolerance" 1.00000e-06 95 | ) 96 | "I" FLOAT DOUBLE PROP( 97 | "units" "A" 98 | "key" "branch" 99 | "tolerance" 1.00000e-12 100 | ) 101 | "MMF" FLOAT DOUBLE PROP( 102 | "units" "A*turn" 103 | "key" "node" 104 | "tolerance" 1.00000e-12 105 | ) 106 | "Wb" FLOAT DOUBLE PROP( 107 | "units" "Wb" 108 | "key" "node" 109 | "tolerance" 1.00000e-09 110 | ) 111 | "Temp" FLOAT DOUBLE PROP( 112 | "units" "C" 113 | "key" "node" 114 | "tolerance" 0.000100000 115 | ) 116 | "Pwr" FLOAT DOUBLE PROP( 117 | "units" "W" 118 | "key" "node" 119 | "tolerance" 1.00000e-09 120 | ) 121 | "U" FLOAT DOUBLE PROP( 122 | "units" "" 123 | "key" "node" 124 | "tolerance" 1.00000e-06 125 | ) 126 | "V/Sec" FLOAT DOUBLE PROP( 127 | "units" "V/s" 128 | "key" "node" 129 | "tolerance" 0.000100000 130 | ) 131 | "I/Sec" FLOAT DOUBLE PROP( 132 | "units" "A/s" 133 | "key" "node" 134 | "tolerance" 1.00000e-06 135 | ) 136 | "1/Sec" FLOAT DOUBLE PROP( 137 | "units" "1/s" 138 | "key" "node" 139 | "tolerance" 0.000100000 140 | ) 141 | "HOD" FLOAT DOUBLE PROP( 142 | "units" "" 143 | "key" "node" 144 | "tolerance" 0.0100000 145 | ) 146 | "Q" FLOAT DOUBLE PROP( 147 | "units" "coul" 148 | "key" "node" 149 | "tolerance" 1.00000e-14 150 | ) 151 | SWEEP 152 | "time" "sweep" PROP( 153 | "sweep_direction" 0 154 | "units" "s" 155 | "plot" 0 156 | "grid" 1 157 | ) 158 | TRACE 159 | "group" GROUP 5 160 | "net1" "V" 161 | "net2" "V" 162 | "V0:p" "I" 163 | "V1:p" "I" 164 | "vdd!" "V" 165 | VALUE 166 | "time" 0.00000 167 | "group" 0.371200 168 | 3.29982 169 | -1.36789e-07 170 | 0.00000 171 | 3.30000 172 | "time" 3.30000e-08 173 | "group" 0.379648 174 | 3.29978 175 | -1.64383e-07 176 | -1.73753e-09 177 | 3.30000 178 | "time" 8.70284e-08 179 | "group" 0.393479 180 | 3.29970 181 | -2.26812e-07 182 | -1.73805e-09 183 | 3.30000 184 | "time" 1.49624e-07 185 | "group" 0.409504 186 | 3.29956 187 | -3.25723e-07 188 | -1.73993e-09 189 | 3.30000 190 | "time" 2.74814e-07 191 | "group" 0.441553 192 | 3.29913 193 | -6.54317e-07 194 | -1.74519e-09 195 | 3.30000 196 | "time" 5.25196e-07 197 | "group" 0.505650 198 | 3.29687 199 | -2.34197e-06 200 | -1.78178e-09 201 | 3.30000 202 | "time" 8.34694e-07 203 | "group" 0.584882 204 | 3.28757 205 | -9.25175e-06 206 | -1.96885e-09 207 | 3.30000 208 | "time" 1.00000e-06 209 | "group" 0.627200 210 | 3.27654 211 | -1.73521e-05 212 | -2.21158e-09 213 | 3.30000 214 | "time" 1.04628e-06 215 | "group" 0.627200 216 | 3.27643 217 | -1.74363e-05 218 | -6.74975e-12 219 | 3.30000 220 | "time" 1.11681e-06 221 | "group" 0.627200 222 | 3.27642 223 | -1.74408e-05 224 | 5.87827e-12 225 | 3.30000 226 | "time" 1.23953e-06 227 | "group" 0.627200 228 | 3.27643 229 | -1.74368e-05 230 | -5.53994e-12 231 | 3.30000 232 | "time" 1.48497e-06 233 | "group" 0.627201 234 | 3.27642 235 | -1.74407e-05 236 | 5.35033e-12 237 | 3.30000 238 | "time" 1.97584e-06 239 | "group" 0.627201 240 | 3.27643 241 | -1.74370e-05 242 | -5.28140e-12 243 | 3.30000 244 | "time" 2.00000e-06 245 | "group" 0.627201 246 | 3.27642 247 | -1.74388e-05 248 | -4.16205e-13 249 | 3.30000 250 | "time" 2.03428e-06 251 | "group" 0.639049 252 | 3.27242 253 | -2.03656e-05 254 | -2.97404e-09 255 | 3.30000 256 | "time" 2.06857e-06 257 | "group" 0.650898 258 | 3.26778 259 | -2.37368e-05 260 | -3.13422e-09 261 | 3.30000 262 | "time" 2.11847e-06 263 | "group" 0.668145 264 | 3.26000 265 | -2.93590e-05 266 | -3.14500e-09 267 | 3.30000 268 | "time" 2.21828e-06 269 | "group" 0.702639 270 | 3.24102 271 | -4.29041e-05 272 | -3.39532e-09 273 | 3.30000 274 | "time" 2.41790e-06 275 | "group" 0.771628 276 | 3.18960 277 | -7.83779e-05 278 | -3.57905e-09 279 | 3.30000 280 | "time" 2.81714e-06 281 | "group" 0.909605 282 | 3.04280 283 | -0.000169213 284 | -3.96911e-09 285 | 3.30000 286 | "time" 3.00000e-06 287 | "group" 0.972799 288 | 2.95729 289 | -0.000214543 290 | -3.96598e-09 291 | 3.30000 292 | "time" 3.01322e-06 293 | "group" 0.965521 294 | 2.96614 295 | -0.000210248 296 | 6.06972e-09 297 | 3.30000 298 | "time" 3.03967e-06 299 | "group" 0.950964 300 | 2.98613 301 | -0.000199901 302 | 6.56112e-09 303 | 3.30000 304 | "time" 3.09257e-06 305 | "group" 0.921851 306 | 3.02566 307 | -0.000178851 308 | 6.10456e-09 309 | 3.30000 310 | "time" 3.16094e-06 311 | "group" 0.884219 312 | 3.07195 313 | -0.000152396 314 | 6.29950e-09 315 | 3.30000 316 | "time" 3.29645e-06 317 | "group" 0.809633 318 | 3.15351 319 | -0.000102262 320 | 5.80946e-09 321 | 3.30000 322 | "time" 3.50885e-06 323 | "group" 0.692726 324 | 3.24605 325 | -3.92721e-05 326 | 5.43545e-09 327 | 3.30000 328 | "time" 3.81978e-06 329 | "group" 0.521593 330 | 3.29596 331 | -3.09075e-06 332 | 3.64267e-09 333 | 3.30000 334 | "time" 3.97731e-06 335 | "group" 0.434889 336 | 3.29898 337 | -6.90256e-07 338 | 3.94942e-09 339 | 3.30000 340 | "time" 4.03131e-06 341 | "group" 0.415186 342 | 3.29971 343 | -2.87663e-07 344 | 1.06626e-09 345 | 3.30000 346 | "time" 4.13931e-06 347 | "group" 0.390302 348 | 3.29951 349 | -2.98331e-07 350 | 2.04222e-09 351 | 3.30000 352 | "time" 4.20540e-06 353 | "group" 0.375076 354 | 3.29999 355 | -8.20607e-08 356 | 1.12032e-09 357 | 3.30000 358 | "time" 4.33502e-06 359 | "group" 0.345211 360 | 3.29972 361 | -1.39203e-07 362 | 1.99134e-09 363 | 3.30000 364 | "time" 4.59427e-06 365 | "group" 0.285481 366 | 3.30016 367 | 4.39874e-08 368 | 1.14789e-09 369 | 3.30000 370 | "time" 4.99123e-06 371 | "group" 0.194020 372 | 3.29982 373 | -6.23803e-08 374 | 1.98852e-09 375 | 3.30000 376 | "time" 5.00000e-06 377 | "group" 0.192000 378 | 3.29997 379 | -2.01545e-08 380 | 1.62438e-09 381 | 3.30000 382 | "time" 5.01754e-06 383 | "group" 0.200306 384 | 3.30000 385 | -7.07077e-10 386 | -3.23185e-09 387 | 3.30000 388 | "time" 5.03016e-06 389 | "group" 0.206284 390 | 3.30000 391 | 1.31518e-09 392 | -3.23601e-09 393 | 3.30000 394 | "time" 5.05275e-06 395 | "group" 0.216983 396 | 3.30000 397 | -9.63094e-10 398 | -3.23104e-09 399 | 3.30000 400 | "time" 5.09793e-06 401 | "group" 0.238381 402 | 3.30000 403 | -1.64837e-09 404 | -3.22995e-09 405 | 3.30000 406 | "time" 5.18829e-06 407 | "group" 0.281176 408 | 3.29998 409 | -1.25434e-08 410 | -3.22133e-09 411 | 3.30000 412 | "time" 5.36902e-06 413 | "group" 0.366768 414 | 3.29984 415 | -1.18781e-07 416 | -3.21383e-09 417 | 3.30000 418 | "time" 5.73047e-06 419 | "group" 0.537952 420 | 3.29437 421 | -4.20853e-06 422 | -3.31011e-09 423 | 3.30000 424 | "time" 6.00000e-06 425 | "group" 0.665600 426 | 3.26130 427 | -2.84207e-05 428 | -4.38348e-09 429 | 3.30000 430 | "time" 6.01446e-06 431 | "group" 0.660601 432 | 3.26316 433 | -2.70819e-05 434 | 3.07048e-09 435 | 3.30000 436 | "time" 6.04339e-06 437 | "group" 0.650604 438 | 3.26746 439 | -2.39650e-05 440 | 3.15417e-09 441 | 3.30000 442 | "time" 6.10124e-06 443 | "group" 0.630610 444 | 3.27515 445 | -1.83750e-05 446 | 2.91961e-09 447 | 3.30000 448 | "time" 6.20956e-06 449 | "group" 0.593176 450 | 3.28562 451 | -1.06826e-05 452 | 2.79549e-09 453 | 3.30000 454 | "time" 6.42620e-06 455 | "group" 0.518307 456 | 3.29603 457 | -2.98115e-06 458 | 2.34949e-09 459 | 3.30000 460 | "time" 6.77861e-06 461 | "group" 0.396514 462 | 3.29963 463 | -2.68236e-07 464 | 2.39960e-09 465 | 3.30000 466 | "time" 7.00000e-06 467 | "group" 0.320000 468 | 3.29998 469 | -2.38192e-08 470 | 2.29545e-09 471 | 3.30000 472 | "time" 7.02436e-06 473 | "group" 0.323430 474 | 3.29995 475 | -4.03966e-08 476 | -9.60472e-10 477 | 3.30000 478 | "time" 7.07308e-06 479 | "group" 0.330289 480 | 3.29993 481 | -5.09848e-08 482 | -9.52661e-10 483 | 3.30000 484 | "time" 7.17052e-06 485 | "group" 0.344008 486 | 3.29991 487 | -6.88609e-08 488 | -9.59306e-10 489 | 3.30000 490 | "time" 7.36539e-06 491 | "group" 0.371446 492 | 3.29982 493 | -1.37440e-07 494 | -9.52335e-10 495 | 3.30000 496 | "time" 7.75514e-06 497 | "group" 0.426322 498 | 3.29937 499 | -4.73307e-07 500 | -9.60724e-10 501 | 3.30000 502 | "time" 7.92014e-06 503 | "group" 0.449554 504 | 3.29896 505 | -7.77239e-07 506 | -9.59295e-10 507 | 3.30000 508 | "time" 8.00264e-06 509 | "group" 0.462082 510 | 3.29866 511 | -1.00235e-06 512 | -1.11852e-09 513 | 3.30000 514 | "time" 8.03885e-06 515 | "group" 0.479697 516 | 3.29812 517 | -1.40426e-06 518 | -5.56342e-09 519 | 3.30000 520 | "time" 8.07755e-06 521 | "group" 0.498520 522 | 3.29727 523 | -2.04036e-06 524 | -1.17700e-09 525 | 3.30000 526 | "time" 8.15377e-06 527 | "group" 0.535592 528 | 3.29462 529 | -4.01217e-06 530 | -5.69451e-09 531 | 3.30000 532 | "time" 8.30620e-06 533 | "group" 0.609736 534 | 3.28184 535 | -1.34716e-05 536 | -1.74849e-09 537 | 3.30000 538 | "time" 8.57945e-06 539 | "group" 0.742642 540 | 3.21358 541 | -6.21572e-05 542 | -7.27981e-09 543 | 3.30000 544 | "time" 8.86275e-06 545 | "group" 0.880440 546 | 3.07824 547 | -0.000148639 548 | -3.15473e-09 549 | 3.30000 550 | "time" 9.00000e-06 551 | "group" 0.947200 552 | 2.99394 553 | -0.000195898 554 | -7.86525e-09 555 | 3.30000 556 | "time" 9.02258e-06 557 | "group" 0.946333 558 | 2.99402 559 | -0.000195833 560 | 3.14334e-10 561 | 3.30000 562 | "time" 9.06773e-06 563 | "group" 0.944599 564 | 2.99611 565 | -0.000194669 566 | 5.34415e-10 567 | 3.30000 568 | "time" 9.14682e-06 569 | "group" 0.941562 570 | 3.00045 571 | -0.000192420 572 | 3.61446e-10 573 | 3.30000 574 | "time" 9.27501e-06 575 | "group" 0.936640 576 | 3.00685 577 | -0.000188945 578 | 5.10998e-10 579 | 3.30000 580 | "time" 9.53138e-06 581 | "group" 0.926795 582 | 3.02008 583 | -0.000181844 584 | 3.71387e-10 585 | 3.30000 586 | "time" 1.00000e-05 587 | "group" 0.908800 588 | 3.04294 589 | -0.000169099 590 | 4.99503e-10 591 | 3.30000 592 | "time" 1.00926e-05 593 | "group" 0.893397 594 | 3.06191 595 | -0.000158351 596 | 1.87560e-09 597 | 3.30000 598 | "time" 1.02777e-05 599 | "group" 0.862591 600 | 3.09791 601 | -0.000137004 602 | 1.83651e-09 603 | 3.30000 604 | "time" 1.05432e-05 605 | "group" 0.818419 606 | 3.14506 607 | -0.000107602 608 | 1.80487e-09 609 | 3.30000 610 | "time" 1.10000e-05 611 | "group" 0.742400 612 | 3.21295 613 | -6.25159e-05 614 | 1.69162e-09 615 | 3.30000 616 | "time" 1.10250e-05 617 | "group" 0.750085 618 | 3.20742 619 | -6.63097e-05 620 | -3.08179e-09 621 | 3.30000 622 | "time" 1.10751e-05 623 | "group" 0.765456 624 | 3.19484 625 | -7.48298e-05 626 | -3.25181e-09 627 | 3.30000 628 | "time" 1.11751e-05 629 | "group" 0.796197 630 | 3.16738 631 | -9.31585e-05 632 | -3.20591e-09 633 | 3.30000 634 | "time" 1.13497e-05 635 | "group" 0.849829 636 | 3.11279 637 | -0.000127861 638 | -3.44558e-09 639 | 3.30000 640 | "time" 1.16989e-05 641 | "group" 0.957093 642 | 2.97969 643 | -0.000203249 644 | -3.48901e-09 645 | 3.30000 646 | "time" 1.20000e-05 647 | "group" 1.04960 648 | 2.83293 649 | -0.000270495 650 | -3.73001e-09 651 | 3.30000 652 | "time" 1.20122e-05 653 | "group" 1.04149 654 | 2.84488 655 | -0.000265849 656 | 7.43945e-09 657 | 3.30000 658 | "time" 1.20365e-05 659 | "group" 1.02528 660 | 2.87206 661 | -0.000254242 662 | 8.21297e-09 663 | 3.30000 664 | "time" 1.20853e-05 665 | "group" 0.992853 666 | 2.92531 667 | -0.000230299 668 | 7.56709e-09 669 | 3.30000 670 | "time" 1.21406e-05 671 | "group" 0.956040 672 | 2.97867 673 | -0.000203702 674 | 7.86226e-09 675 | 3.30000 676 | "time" 1.22437e-05 677 | "group" 0.887372 678 | 3.06858 679 | -0.000154593 680 | 7.34111e-09 681 | 3.30000 682 | "time" 1.23802e-05 683 | "group" 0.796524 684 | 3.16546 685 | -9.42547e-05 686 | 7.21114e-09 687 | 3.30000 688 | "time" 1.26532e-05 689 | "group" 0.614828 690 | 3.28031 691 | -1.47556e-05 692 | 5.66258e-09 693 | 3.30000 694 | "time" 1.27399e-05 695 | "group" 0.557121 696 | 3.29167 697 | -6.05102e-06 698 | 4.74454e-09 699 | 3.30000 700 | "time" 1.28700e-05 701 | "group" 0.470561 702 | 3.29866 703 | -1.15997e-06 704 | 4.70397e-09 705 | 3.30000 706 | "time" 1.29350e-05 707 | "group" 0.427280 708 | 3.29907 709 | -5.42348e-07 710 | 4.34620e-09 711 | 3.30000 712 | "time" 1.30000e-05 713 | "group" 0.384000 714 | 3.29999 715 | -1.64292e-07 716 | 4.74585e-09 717 | 3.30000 718 | "time" 1.30091e-05 719 | "group" 0.389808 720 | 3.29976 721 | -1.81778e-07 722 | -4.40766e-09 723 | 3.30000 724 | "time" 1.30272e-05 725 | "group" 0.401424 726 | 3.29962 727 | -2.82965e-07 728 | -4.30088e-09 729 | 3.30000 730 | "time" 1.30618e-05 731 | "group" 0.423582 732 | 3.29943 733 | -4.24096e-07 734 | -4.39289e-09 735 | 3.30000 736 | "time" 1.31311e-05 737 | "group" 0.467897 738 | 3.29850 739 | -1.12550e-06 740 | -4.35096e-09 741 | 3.30000 742 | "time" 1.32696e-05 743 | "group" 0.556527 744 | 3.29228 745 | -5.75612e-06 746 | -4.69076e-09 747 | 3.30000 748 | "time" 1.35465e-05 749 | "group" 0.733788 750 | 3.22018 751 | -5.75125e-05 752 | -6.56342e-09 753 | 3.30000 754 | "time" 1.37651e-05 755 | "group" 0.873677 756 | 3.08677 757 | -0.000143749 758 | -7.07497e-09 759 | 3.30000 760 | "time" 1.40000e-05 761 | "group" 1.02400 762 | 2.87818 763 | -0.000251424 764 | -7.65631e-09 765 | 3.30000 766 | "time" 1.40226e-05 767 | "group" 1.02660 768 | 2.87278 769 | -0.000253942 770 | -1.47762e-09 771 | 3.30000 772 | "time" 1.40677e-05 773 | "group" 1.03180 774 | 2.86355 775 | -0.000257817 776 | -1.29404e-09 777 | 3.30000 778 | "time" 1.41580e-05 779 | "group" 1.04221 780 | 2.84574 781 | -0.000265367 782 | -1.42949e-09 783 | 3.30000 784 | "time" 1.42975e-05 785 | "group" 1.05827 786 | 2.81613 787 | -0.000277160 788 | -1.33025e-09 789 | 3.30000 790 | "time" 1.45613e-05 791 | "group" 1.08866 792 | 2.75611 793 | -0.000299363 794 | -1.42743e-09 795 | 3.30000 796 | "time" 1.50782e-05 797 | "group" 1.14721 798 | 2.61223 799 | -0.000342134 800 | -1.30680e-09 801 | 3.30000 802 | "time" 1.57196e-05 803 | "group" 1.21289 804 | 2.34757 805 | -0.000388805 806 | -1.39152e-09 807 | 3.30000 808 | "time" 1.59768e-05 809 | "group" 1.23922 810 | 2.11106 811 | -0.000404557 812 | -2.52832e-09 813 | 3.30000 814 | "time" 1.61107e-05 815 | "group" 1.26001 816 | 1.79245 817 | -0.000413189 818 | -5.89013e-09 819 | 3.30000 820 | "time" 1.62478e-05 821 | "group" 1.28284 822 | 1.25535 823 | -0.000418659 824 | -6.57512e-09 825 | 3.30000 826 | "time" 1.63217e-05 827 | "group" 1.29513 828 | 0.959964 829 | -0.000420337 830 | -6.10133e-09 831 | 3.30000 832 | "time" 1.64020e-05 833 | "group" 1.30850 834 | 0.696880 835 | -0.000419719 836 | -4.74725e-09 837 | 3.30000 838 | "time" 1.64788e-05 839 | "group" 1.32128 840 | 0.537766 841 | -0.000418077 842 | -3.07958e-09 843 | 3.30000 844 | "time" 1.65642e-05 845 | "group" 1.33548 846 | 0.436817 847 | -0.000413734 848 | -2.52374e-09 849 | 3.30000 850 | "time" 1.66604e-05 851 | "group" 1.35149 852 | 0.374313 853 | -0.000408704 854 | -1.76440e-09 855 | 3.30000 856 | "time" 1.67533e-05 857 | "group" 1.36695 858 | 0.335260 859 | -0.000402502 860 | -1.98529e-09 861 | 3.30000 862 | "time" 1.68615e-05 863 | "group" 1.38495 864 | 0.300784 865 | -0.000395995 866 | -1.54484e-09 867 | 3.30000 868 | "time" 1.70000e-05 869 | "group" 1.40800 870 | 0.271193 871 | -0.000386316 872 | -1.75442e-09 873 | 3.30000 874 | "time" 1.70182e-05 875 | "group" 1.39917 876 | 0.280071 877 | -0.000390128 878 | 4.65738e-09 879 | 3.30000 880 | "time" 1.70545e-05 881 | "group" 1.38151 882 | 0.305946 883 | -0.000397129 884 | 5.20926e-09 885 | 3.30000 886 | "time" 1.71261e-05 887 | "group" 1.34668 888 | 0.383759 889 | -0.000410318 890 | 5.41554e-09 891 | 3.30000 892 | "time" 1.71656e-05 893 | "group" 1.32747 894 | 0.466119 895 | -0.000416727 896 | 7.55740e-09 897 | 3.30000 898 | "time" 1.72252e-05 899 | "group" 1.29847 900 | 0.747079 901 | -0.000423074 902 | 1.19308e-08 903 | 3.30000 904 | "time" 1.72678e-05 905 | "group" 1.27776 906 | 1.11153 907 | -0.000424040 908 | 1.72148e-08 909 | 3.30000 910 | "time" 1.73143e-05 911 | "group" 1.25512 912 | 1.63729 913 | -0.000420039 914 | 1.88380e-08 915 | 3.30000 916 | "time" 1.73392e-05 917 | "group" 1.24300 918 | 1.91622 919 | -0.000414296 920 | 1.69906e-08 921 | 3.30000 922 | "time" 1.73697e-05 923 | "group" 1.22819 924 | 2.17211 925 | -0.000403826 926 | 1.18035e-08 927 | 3.30000 928 | "time" 1.73951e-05 929 | "group" 1.21583 930 | 2.30196 931 | -0.000394092 932 | 8.69843e-09 933 | 3.30000 934 | "time" 1.74373e-05 935 | "group" 1.19527 936 | 2.42719 937 | -0.000378716 938 | 6.44029e-09 939 | 3.30000 940 | "time" 1.74679e-05 941 | "group" 1.18042 942 | 2.49654 943 | -0.000368380 944 | 7.02052e-09 945 | 3.30000 946 | "time" 1.75006e-05 947 | "group" 1.16449 948 | 2.55135 949 | -0.000355706 950 | 5.07837e-09 951 | 3.30000 952 | "time" 1.75661e-05 953 | "group" 1.13264 954 | 2.64959 955 | -0.000333444 956 | 6.96674e-09 957 | 3.30000 958 | "time" 1.76172e-05 959 | "group" 1.10780 960 | 2.71001 961 | -0.000313859 962 | 4.68384e-09 963 | 3.30000 964 | "time" 1.77193e-05 965 | "group" 1.05814 966 | 2.81539 967 | -0.000278653 968 | 7.06216e-09 969 | 3.30000 970 | "time" 1.78194e-05 971 | "group" 1.00944 972 | 2.89833 973 | -0.000241584 974 | 4.42303e-09 975 | 3.30000 976 | "time" 1.80196e-05 977 | "group" 0.918835 978 | 3.03066 979 | -0.000177275 980 | 6.11444e-09 981 | 3.30000 982 | "time" 1.80622e-05 983 | "group" 0.912840 984 | 3.03737 985 | -0.000171036 986 | -3.03503e-09 987 | 3.30000 988 | "time" 1.81474e-05 989 | "group" 0.900851 990 | 3.05339 991 | -0.000164579 992 | 6.27394e-09 993 | 3.30000 994 | "time" 1.82513e-05 995 | "group" 0.886210 996 | 3.06992 997 | -0.000152271 998 | -3.16826e-09 999 | 3.30000 1000 | "time" 1.84187e-05 1001 | "group" 0.862652 1002 | 3.09843 1003 | -0.000138060 1004 | 6.34236e-09 1005 | 3.30000 1006 | "time" 1.86624e-05 1007 | "group" 0.828338 1008 | 3.13447 1009 | -0.000112983 1010 | -3.27563e-09 1011 | 3.30000 1012 | "time" 1.90107e-05 1013 | "group" 0.779148 1014 | 3.18295 1015 | -8.42229e-05 1016 | 6.31155e-09 1017 | 3.30000 1018 | "time" 1.95427e-05 1019 | "group" 0.697433 1020 | 3.24326 1021 | -3.99415e-05 1022 | -3.21866e-09 1023 | 3.30000 1024 | "time" 1.99326e-05 1025 | "group" 0.637551 1026 | 3.27324 1027 | -2.11445e-05 1028 | 6.06009e-09 1029 | 3.30000 1030 | "time" 2.00630e-05 1031 | "group" 0.607844 1032 | 3.28158 1033 | -1.22782e-05 1034 | -2.25048e-09 1035 | 3.30000 1036 | "time" 2.03238e-05 1037 | "group" 0.527729 1038 | 3.29573 1039 | -4.57635e-06 1040 | 6.93889e-09 1041 | 3.30000 1042 | "time" 2.04418e-05 1043 | "group" 0.491490 1044 | 3.29710 1045 | -7.86928e-07 1046 | -2.66910e-09 1047 | 3.30000 1048 | "time" 2.06777e-05 1049 | "group" 0.419012 1050 | 3.29991 1051 | -1.44785e-06 1052 | 6.90062e-09 1053 | 3.30000 1054 | "time" 2.10000e-05 1055 | "group" 0.320000 1056 | 3.29949 1057 | 1.00119e-06 1058 | -2.74436e-09 1059 | 3.30000 1060 | "time" 2.10114e-05 1061 | "group" 0.328337 1062 | 3.29989 1063 | -7.96826e-08 1064 | -4.85350e-09 1065 | 3.30000 1066 | "time" 2.10343e-05 1067 | "group" 0.345013 1068 | 3.29995 1069 | -3.88663e-08 1070 | -5.03354e-09 1071 | 3.30000 1072 | "time" 2.10800e-05 1073 | "group" 0.378364 1074 | 3.29976 1075 | -1.80167e-07 1076 | -4.88058e-09 1077 | 3.30000 1078 | "time" 2.11704e-05 1079 | "group" 0.444356 1080 | 3.29912 1081 | -6.60084e-07 1082 | -5.03755e-09 1083 | 3.30000 1084 | "time" 2.13513e-05 1085 | "group" 0.576339 1086 | 3.28922 1087 | -8.03540e-06 1088 | -5.31834e-09 1089 | 3.30000 1090 | "time" 2.16050e-05 1091 | "group" 0.761430 1092 | 3.19877 1093 | -7.22044e-05 1094 | -8.01037e-09 1095 | 3.30000 1096 | "time" 2.18051e-05 1097 | "group" 0.907426 1098 | 3.04626 1099 | -0.000167280 1100 | -7.85879e-09 1101 | 3.30000 1102 | "time" 2.19518e-05 1103 | "group" 1.01445 1104 | 2.89430 1105 | -0.000244282 1106 | -9.01385e-09 1107 | 3.30000 1108 | "time" 2.20252e-05 1109 | "group" 1.05894 1110 | 2.81661 1111 | -0.000277027 1112 | -5.41903e-09 1113 | 3.30000 1114 | "time" 2.21126e-05 1115 | "group" 1.09138 1116 | 2.75119 1117 | -0.000301091 1118 | -3.54246e-09 1119 | 3.30000 1120 | "time" 2.21656e-05 1121 | "group" 1.11108 1122 | 2.70783 1123 | -0.000315114 1124 | -5.36761e-09 1125 | 3.30000 1126 | "time" 2.22544e-05 1127 | "group" 1.14404 1128 | 2.62298 1129 | -0.000339379 1130 | -3.60741e-09 1131 | 3.30000 1132 | "time" 2.24093e-05 1133 | "group" 1.20154 1134 | 2.41535 1135 | -0.000379925 1136 | -5.83683e-09 1137 | 3.30000 1138 | "time" 2.24782e-05 1139 | "group" 1.22711 1140 | 2.25665 1141 | -0.000396404 1142 | -5.79713e-09 1143 | 3.30000 1144 | "time" 2.25352e-05 1145 | "group" 1.24827 1146 | 2.02785 1147 | -0.000406665 1148 | -1.01109e-08 1149 | 3.30000 1150 | "time" 2.25973e-05 1151 | "group" 1.27133 1152 | 1.61372 1153 | -0.000414516 1154 | -1.24736e-08 1155 | 3.30000 1156 | "time" 2.26529e-05 1157 | "group" 1.29196 1158 | 1.12863 1159 | -0.000417877 1160 | -1.53103e-08 1161 | 3.30000 1162 | "time" 2.26873e-05 1163 | "group" 1.30472 1164 | 0.829922 1165 | -0.000418861 1166 | -1.23902e-08 1167 | 3.30000 1168 | "time" 2.27280e-05 1169 | "group" 1.31982 1170 | 0.572649 1171 | -0.000417706 1172 | -9.35919e-09 1173 | 3.30000 1174 | "time" 2.27601e-05 1175 | "group" 1.33176 1176 | 0.465270 1177 | -0.000414988 1178 | -4.90371e-09 1179 | 3.30000 1180 | "time" 2.28049e-05 1181 | "group" 1.34839 1182 | 0.386244 1183 | -0.000409500 1184 | -5.44797e-09 1185 | 3.30000 1186 | "time" 2.28406e-05 1187 | "group" 1.36164 1188 | 0.348542 1189 | -0.000404754 1190 | -3.19680e-09 1191 | 3.30000 1192 | "time" 2.28831e-05 1193 | "group" 1.37739 1194 | 0.313553 1195 | -0.000398679 1196 | -4.92869e-09 1197 | 3.30000 1198 | "time" 2.29382e-05 1199 | "group" 1.39785 1200 | 0.284579 1201 | -0.000390646 1202 | -2.50984e-09 1203 | 3.30000 1204 | "time" 2.30000e-05 1205 | "group" 1.42080 1206 | 0.254772 1207 | -0.000381350 1208 | -4.94971e-09 1209 | 3.30000 1210 | "time" 2.30231e-05 1211 | "group" 1.41754 1212 | 0.258683 1213 | -0.000382713 1214 | 1.43446e-09 1215 | 3.30000 1216 | "time" 2.30515e-05 1217 | "group" 1.41355 1218 | 0.263822 1219 | -0.000384315 1220 | 1.43953e-09 1221 | 3.30000 1222 | "time" 2.31009e-05 1223 | "group" 1.40659 1224 | 0.271402 1225 | -0.000387136 1226 | 1.30358e-09 1227 | 3.30000 1228 | "time" 2.31998e-05 1229 | "group" 1.39267 1230 | 0.289743 1231 | -0.000392707 1232 | 1.51856e-09 1233 | 3.30000 1234 | "time" 2.33340e-05 1235 | "group" 1.37377 1236 | 0.319951 1237 | -0.000400137 1238 | 1.36895e-09 1239 | 3.30000 1240 | "time" 2.36024e-05 1241 | "group" 1.33599 1242 | 0.427402 1243 | -0.000413938 1244 | 1.90744e-09 1245 | 3.30000 1246 | "time" 2.37472e-05 1247 | "group" 1.31560 1248 | 0.575219 1249 | -0.000419463 1250 | 2.88537e-09 1251 | 3.30000 1252 | "time" 2.39068e-05 1253 | "group" 1.29313 1254 | 0.892241 1255 | -0.000422318 1256 | 4.31696e-09 1257 | 3.30000 1258 | "time" 2.40464e-05 1259 | "group" 1.27584 1260 | 1.30400 1261 | -0.000420586 1262 | 5.04909e-09 1263 | 3.30000 1264 | "time" 2.41162e-05 1265 | "group" 1.26959 1266 | 1.47047 1267 | -0.000419146 1268 | 2.36204e-09 1269 | 3.30000 1270 | "time" 2.41953e-05 1271 | "group" 1.26250 1272 | 1.63877 1273 | -0.000417047 1274 | 4.40034e-09 1275 | 3.30000 1276 | "time" 2.43282e-05 1277 | "group" 1.25059 1278 | 1.89696 1279 | -0.000412356 1280 | 1.89187e-09 1281 | 3.30000 1282 | "time" 2.44666e-05 1283 | "group" 1.23819 1284 | 2.10092 1285 | -0.000405713 1286 | 3.22203e-09 1287 | 3.30000 1288 | "time" 2.46155e-05 1289 | "group" 1.22485 1290 | 2.24894 1291 | -0.000397673 1292 | 6.84070e-10 1293 | 3.30000 1294 | "time" 2.47867e-05 1295 | "group" 1.20951 1296 | 2.36243 1297 | -0.000387295 1298 | 2.39015e-09 1299 | 3.30000 1300 | "time" 2.49656e-05 1301 | "group" 1.19348 1302 | 2.44395 1303 | -0.000376068 1304 | 1.71022e-10 1305 | 3.30000 1306 | "time" 2.51728e-05 1307 | "group" 1.18155 1308 | 2.49628 1309 | -0.000367294 1310 | 1.38610e-09 1311 | 3.30000 1312 | "time" 2.54548e-05 1313 | "group" 1.16712 1314 | 2.54747 1315 | -0.000357064 1316 | -9.77176e-11 1317 | 3.30000 1318 | "time" 2.56952e-05 1319 | "group" 1.15481 1320 | 2.58940 1321 | -0.000347956 1322 | 1.38689e-09 1323 | 3.30000 1324 | "time" 2.60000e-05 1325 | "group" 1.13920 1326 | 2.63291 1327 | -0.000336727 1328 | -1.59724e-10 1329 | 3.30000 1330 | "time" 2.60463e-05 1331 | "group" 1.12498 1332 | 2.67053 1333 | -0.000326814 1334 | 3.68753e-09 1335 | 3.30000 1336 | "time" 2.61388e-05 1337 | "group" 1.09655 1338 | 2.73727 1339 | -0.000305860 1340 | 3.67434e-09 1341 | 3.30000 1342 | "time" 2.62499e-05 1343 | "group" 1.06244 1344 | 2.80669 1345 | -0.000280909 1346 | 3.69352e-09 1347 | 3.30000 1348 | "time" 2.64678e-05 1349 | "group" 0.995496 1350 | 2.92194 1351 | -0.000231799 1352 | 3.60391e-09 1353 | 3.30000 1354 | "time" 2.67343e-05 1355 | "group" 0.913631 1356 | 3.03628 1357 | -0.000172840 1358 | 3.48207e-09 1359 | 3.30000 1360 | "time" 2.71123e-05 1361 | "group" 0.810447 1362 | 3.15309 1363 | -0.000102496 1364 | 2.56654e-09 1365 | 3.30000 1366 | "time" 2.73911e-05 1367 | "group" 0.756903 1368 | 3.20130 1369 | -7.04314e-05 1370 | 1.47610e-09 1371 | 3.30000 1372 | "time" 2.75780e-05 1373 | "group" 0.721020 1374 | 3.22865 1375 | -5.16934e-05 1376 | 2.41790e-09 1377 | 3.30000 1378 | "time" 2.79322e-05 1379 | "group" 0.653008 1380 | 3.26642 1381 | -2.46351e-05 1382 | 1.21952e-09 1383 | 3.30000 1384 | "time" 2.80000e-05 1385 | "group" 0.639999 1386 | 3.27193 1387 | -2.08001e-05 1388 | 2.21143e-09 1389 | 3.30000 1390 | "time" 2.80661e-05 1391 | "group" 0.639153 1392 | 3.27222 1393 | -2.05139e-05 1394 | 1.10638e-10 1395 | 3.30000 1396 | "time" 2.81322e-05 1397 | "group" 0.638307 1398 | 3.27252 1399 | -2.02852e-05 1400 | 1.12046e-10 1401 | 3.30000 1402 | "time" 2.82380e-05 1403 | "group" 0.636953 1404 | 3.27302 1405 | -1.99215e-05 1406 | 1.11272e-10 1407 | 3.30000 1408 | "time" 2.84496e-05 1409 | "group" 0.634244 1410 | 3.27400 1411 | -1.92091e-05 1412 | 1.11088e-10 1413 | 3.30000 1414 | "time" 2.88728e-05 1415 | "group" 0.628828 1416 | 3.27588 1417 | -1.78397e-05 1418 | 1.09485e-10 1419 | 3.30000 1420 | "time" 2.90000e-05 1421 | "group" 0.627200 1422 | 3.27642 1423 | -1.74430e-05 1424 | 1.09465e-10 1425 | 3.30000 1426 | "time" 2.90514e-05 1427 | "group" 0.638390 1428 | 3.27261 1429 | -2.02292e-05 1430 | -1.87363e-09 1431 | 3.30000 1432 | "time" 2.91110e-05 1433 | "group" 0.651345 1434 | 3.26751 1435 | -2.39289e-05 1436 | -1.97395e-09 1437 | 3.30000 1438 | "time" 2.92245e-05 1439 | "group" 0.676050 1440 | 3.25598 1441 | -3.22529e-05 1442 | -2.00721e-09 1443 | 3.30000 1444 | "time" 2.94516e-05 1445 | "group" 0.725458 1446 | 3.22579 1447 | -5.35970e-05 1448 | -2.20068e-09 1449 | 3.30000 1450 | "time" 2.99057e-05 1451 | "group" 0.824274 1452 | 3.13969 1453 | -0.000111041 1454 | -2.34485e-09 1455 | 3.30000 1456 | "time" 3.00257e-05 1457 | "group" 0.856330 1458 | 3.10565 1459 | -0.000132267 1460 | -3.49069e-09 1461 | 3.30000 1462 | "time" 3.00996e-05 1463 | "group" 0.889431 1464 | 3.06796 1465 | -0.000154807 1466 | -6.44896e-09 1467 | 3.30000 1468 | "time" 3.01735e-05 1469 | "group" 0.922532 1470 | 3.02623 1471 | -0.000178395 1472 | -3.71739e-09 1473 | 3.30000 1474 | "time" 3.03050e-05 1475 | "group" 0.981450 1476 | 2.94512 1477 | -0.000220576 1478 | -6.58983e-09 1479 | 3.30000 1480 | "time" 3.05680e-05 1481 | "group" 1.09929 1482 | 2.73450 1483 | -0.000306667 1484 | -4.05990e-09 1485 | 3.30000 1486 | "time" 3.07466e-05 1487 | "group" 1.17929 1488 | 2.51210 1489 | -0.000364254 1490 | -6.83680e-09 1491 | 3.30000 1492 | "time" 3.08166e-05 1493 | "group" 1.21066 1494 | 2.36840 1495 | -0.000385765 1496 | -5.46511e-09 1497 | 3.30000 1498 | "time" 3.08690e-05 1499 | "group" 1.23410 1500 | 2.19992 1501 | -0.000399772 1502 | -9.65852e-09 1503 | 3.30000 1504 | "time" 3.09120e-05 1505 | "group" 1.25340 1506 | 1.96361 1507 | -0.000408047 1508 | -1.11526e-08 1509 | 3.30000 1510 | "time" 3.09572e-05 1511 | "group" 1.27363 1512 | 1.58873 1513 | -0.000414401 1514 | -1.67464e-08 1515 | 3.30000 1516 | "time" 3.10000e-05 1517 | "group" 1.29280 1518 | 1.14110 1519 | -0.000417215 1520 | -1.66086e-08 1521 | 3.30000 1522 | "time" 3.10118e-05 1523 | "group" 1.29280 1524 | 1.06178 1525 | -0.000418980 1526 | -8.48010e-09 1527 | 3.30000 1528 | "time" 3.10322e-05 1529 | "group" 1.29280 1530 | 0.977019 1531 | -0.000420718 1532 | -2.04610e-09 1533 | 3.30000 1534 | "time" 3.10711e-05 1535 | "group" 1.29280 1536 | 0.947321 1537 | -0.000421333 1538 | 1.13772e-10 1539 | 3.30000 1540 | "time" 3.11008e-05 1541 | "group" 1.29280 1542 | 0.948789 1543 | -0.000421303 1544 | 1.23675e-11 1545 | 3.30000 1546 | "time" 3.11257e-05 1547 | "group" 1.29280 1548 | 0.949970 1549 | -0.000421269 1550 | 1.07575e-10 1551 | 3.30000 1552 | "time" 3.11653e-05 1553 | "group" 1.29280 1554 | 0.950215 1555 | -0.000421274 1556 | -9.19490e-11 1557 | 3.30000 1558 | "time" 3.12446e-05 1559 | "group" 1.29280 1560 | 0.950174 1561 | -0.000421265 1562 | 9.06384e-11 1563 | 3.30000 1564 | "time" 3.13697e-05 1565 | "group" 1.29280 1566 | 0.950202 1567 | -0.000421274 1568 | -9.00590e-11 1569 | 3.30000 1570 | "time" 3.16200e-05 1571 | "group" 1.29280 1572 | 0.950184 1573 | -0.000421264 1574 | 8.98756e-11 1575 | 3.30000 1576 | "time" 3.21205e-05 1577 | "group" 1.29280 1578 | 0.950199 1579 | -0.000421274 1580 | -8.98002e-11 1581 | 3.30000 1582 | "time" 3.25602e-05 1583 | "group" 1.29280 1584 | 0.950186 1585 | -0.000421264 1586 | 8.97255e-11 1587 | 3.30000 1588 | "time" 3.30000e-05 1589 | "group" 1.29280 1590 | 0.950197 1591 | -0.000421274 1592 | -8.96609e-11 1593 | 3.30000 1594 | END 1595 | -------------------------------------------------------------------------------- /show-psf: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # local version of show-psf used for debugging and testing purposes. 3 | # this version does not get installed. 4 | 5 | from psf_utils.show import show_signals 6 | show_signals() 7 | -------------------------------------------------------------------------------- /tests/.psf_file: -------------------------------------------------------------------------------- 1 | ../samples/rushikesh-dhanaji-phadtare.tran -------------------------------------------------------------------------------- /tests/.psf_plot_args: -------------------------------------------------------------------------------- 1 | -f 2 | ../samples/dan-zilla.psfascii 3 | * -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | # needed to get coverage information 2 | -------------------------------------------------------------------------------- /tests/test_psf.py: -------------------------------------------------------------------------------- 1 | # encoding: utf8 2 | 3 | # Imports {{{1 4 | from parametrize_from_file import parametrize, Namespace 5 | import pytest 6 | from functools import partial 7 | from voluptuous import Schema, Optional, Required 8 | from psf_utils import PSF 9 | from pathlib import Path 10 | from shlib import Run, rm 11 | import math 12 | 13 | 14 | # Utilities {{{1 15 | def name_from_dict_keys(cases): 16 | return [{**v, 'name': k} for k,v in cases.items()] 17 | 18 | # Globals {{{1 19 | type_maps = { 20 | 'float double': float, 21 | 'complex double': complex, 22 | 'int byte': int, 23 | 'int long': int, 24 | 'string *': str, 25 | } 26 | parametrize_from_file = partial(parametrize, preprocess=name_from_dict_keys) 27 | with_quantiphy = Namespace('from quantiphy import Quantity') 28 | 29 | # Schemas {{{1 30 | # Schema for API test cases 31 | api_test_schema = Schema({ 32 | Required('name'): str, 33 | Required('path'): str, 34 | Required('expected'): dict(sweep={str:str}, signals={str:{str:str}}), 35 | }) 36 | 37 | # Schema for utilities test cases 38 | utils_test_schema = Schema({ 39 | Required('name'): str, 40 | Required('command'): str, 41 | Required('psf_file'): str, 42 | Optional('arguments', default=''): str, 43 | Optional('expected', default=''): str, 44 | }) 45 | 46 | # run_api_test {{{1 47 | def run_api_test(test_name, psf_file, expected): 48 | # open the PSF file 49 | psf = PSF(psf_file) 50 | sweep = psf.get_sweep() 51 | test_desc = f'in {test_name}' 52 | 53 | # check sweep 54 | if 'sweep' in expected: 55 | 56 | # check sweep name 57 | assert sweep.name == expected['sweep']['name'], test_desc 58 | 59 | # check sweep units 60 | assert sweep.units == expected['sweep']['units'], test_desc 61 | 62 | # check sweep length 63 | num_points = int(expected['sweep']['length']) 64 | assert len(sweep.abscissa) == num_points, test_desc 65 | 66 | # check sweep type 67 | assert psf.types['sweep'].kind == expected['sweep']['type'], test_desc 68 | assert isinstance(sweep.abscissa[0], type_maps[expected['sweep']['type']]), test_desc 69 | 70 | # check grid 71 | expected_grid = expected['sweep']['grid'] 72 | if expected_grid == 'linear': 73 | assert sweep.grid == 1, test_desc 74 | is_log = False 75 | elif expected_grid == 'logarithmic': 76 | assert sweep.grid == 3, test_desc 77 | is_log = True 78 | elif expected_grid == 'n/a': 79 | assert sweep.grid is None, test_desc 80 | is_log = None 81 | else: 82 | raise NotImplementedError 83 | if is_log is not None: 84 | assert psf.log_x() == is_log, test_desc 85 | assert psf.log_y() == is_log, test_desc 86 | assert psf.log_x(sweep) == is_log, test_desc 87 | assert psf.log_y(sweep) == is_log, test_desc 88 | else: 89 | assert sweep is None, test_desc 90 | 91 | remaining = expected['signals'].copy() 92 | for signal in psf.all_signals(): 93 | name = signal.name 94 | test_desc = f'in {test_name} on {name}' 95 | print(f"NAME: {test_desc}") 96 | 97 | # check that this is a known signal 98 | assert name in remaining, test_desc 99 | 100 | # check get_signal() 101 | sig = psf.get_signal(name) 102 | assert signal == sig, test_desc 103 | 104 | # check signal units 105 | signal_attributes = remaining.pop(name) 106 | if 'units' in signal_attributes: 107 | assert signal.units == signal_attributes['units'], test_desc 108 | else: 109 | assert not signal.units 110 | 111 | # check signal type 112 | assert signal.type.kind == signal_attributes['type'], test_desc 113 | expected_type = type_maps[signal_attributes['type']] 114 | 115 | # check signal length 116 | if sweep: 117 | assert len(signal.ordinate) == num_points 118 | assert isinstance(signal.ordinate[0], expected_type), test_desc 119 | 120 | # check signal values 121 | if 'max' in signal_attributes: 122 | expected_max = expected_type(signal_attributes['max'].replace(' ','')) 123 | assert max(signal.ordinate) <= expected_max, test_desc 124 | if 'min' in signal_attributes: 125 | expected_min = expected_type(signal_attributes['min'].replace(' ','')) 126 | assert min(signal.ordinate) >= expected_min, test_desc 127 | if 'value' in signal_attributes: 128 | expected_value = expected_type(signal_attributes['value']) 129 | if isinstance(signal.ordinate, float) and math.isnan(expected_value): 130 | assert math.isnan(signal.ordinate) 131 | else: 132 | assert signal.ordinate == pytest.approx(expected_value, abs=1e-12) 133 | if 'units' in signal_attributes: 134 | assert signal.units == signal_attributes['units'] 135 | 136 | # assure that all signals were checked 137 | assert not remaining 138 | 139 | # test_api {{{1 140 | @parametrize_from_file(schema=api_test_schema) 141 | def test_api(name, path, expected): 142 | # fix up the path 143 | test_dir = Path(__file__).parent 144 | psf_file = test_dir/path 145 | 146 | # clean any existing cache 147 | cache_file = Path(str(psf_file) + '.cache') 148 | rm(cache_file) 149 | 150 | # run test without cache 151 | assert not cache_file.exists() 152 | run_api_test(name, psf_file, expected) 153 | 154 | # run test again, this time the data should be cached 155 | print(str(cache_file)) 156 | assert cache_file.exists() 157 | run_api_test(name, psf_file, expected) 158 | 159 | # test_utils {{{1 160 | @parametrize_from_file(schema=utils_test_schema) 161 | def test_utils(name, command, psf_file, arguments, expected): 162 | # fix up the paths 163 | test_dir = Path(__file__).parent 164 | root_dir = test_dir.parent 165 | psf_file = root_dir/psf_file 166 | command = root_dir/command 167 | svg_file = test_dir/'test_psf.svg' 168 | 169 | # replace @ with svg_file in arguments 170 | arguments = arguments.replace('@', str(svg_file)) 171 | 172 | # run test 173 | cmd = [command, '-f', psf_file] + arguments.split() 174 | process = Run(cmd, modes='sOEW') 175 | assert process.stdout.rstrip() == expected.rstrip(), name 176 | assert process.stderr == '', name 177 | 178 | # remove svg_file if it was created 179 | rm(svg_file) 180 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = lint,pytest 3 | 4 | [testenv:lint] 5 | deps = 6 | setuptools 7 | ruff 8 | commands = ruff check 9 | 10 | # Test environment 11 | [testenv:pytest] 12 | deps = 13 | pytest 14 | pytest-cov 15 | parametrize_from_file>=0.7 16 | shlib 17 | voluptuous 18 | commands = py.test --cov {posargs} 19 | --------------------------------------------------------------------------------