triplot 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dscpanel/__init__.py +4 -0
- dscpanel/__main__.py +155 -0
- dscpanel/branding.py +142 -0
- dscpanel/core/__init__.py +0 -0
- dscpanel/core/arrange.py +143 -0
- dscpanel/core/chem.py +252 -0
- dscpanel/core/dtg.py +135 -0
- dscpanel/core/export.py +649 -0
- dscpanel/core/figure.py +171 -0
- dscpanel/core/labels.py +430 -0
- dscpanel/core/loader.py +202 -0
- dscpanel/core/log.py +147 -0
- dscpanel/core/measure.py +636 -0
- dscpanel/core/model.py +1993 -0
- dscpanel/core/molar.py +344 -0
- dscpanel/core/numbers.py +208 -0
- dscpanel/core/ops.py +161 -0
- dscpanel/core/presets.py +312 -0
- dscpanel/core/profile.py +15 -0
- dscpanel/core/session.py +667 -0
- dscpanel/core/shades.py +54 -0
- dscpanel/core/style.py +528 -0
- dscpanel/core/trios_analysis.py +636 -0
- dscpanel/core/trios_io.py +1311 -0
- dscpanel/core/undo.py +230 -0
- dscpanel/core/units.py +220 -0
- dscpanel/register.py +284 -0
- dscpanel/ui/__init__.py +0 -0
- dscpanel/ui/appearance.py +146 -0
- dscpanel/ui/colour.py +629 -0
- dscpanel/ui/dialogs.py +3639 -0
- dscpanel/ui/loading.py +95 -0
- dscpanel/ui/numbox.py +103 -0
- dscpanel/ui/outliner.py +818 -0
- dscpanel/ui/palette.py +193 -0
- dscpanel/ui/plot.py +8349 -0
- dscpanel/ui/settings.py +256 -0
- dscpanel/ui/window.py +4129 -0
- triplot-1.1.0.dist-info/METADATA +315 -0
- triplot-1.1.0.dist-info/RECORD +44 -0
- triplot-1.1.0.dist-info/WHEEL +5 -0
- triplot-1.1.0.dist-info/entry_points.txt +5 -0
- triplot-1.1.0.dist-info/licenses/LICENSE +22 -0
- triplot-1.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: triplot
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: An interactive panel for stacked DSC scans from TA Instruments TRIOS files.
|
|
5
|
+
Author: Christian Nelle
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: dsc,calorimetry,trios,ta instruments,thermal analysis,plotting
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
9
|
+
Classifier: Intended Audience :: Science/Research
|
|
10
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
14
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: numpy
|
|
19
|
+
Requires-Dist: PySide6-Essentials
|
|
20
|
+
Requires-Dist: rdkit
|
|
21
|
+
Provides-Extra: test
|
|
22
|
+
Requires-Dist: pytest; extra == "test"
|
|
23
|
+
Provides-Extra: structures
|
|
24
|
+
Requires-Dist: rdkit; extra == "structures"
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# Triplot
|
|
28
|
+
|
|
29
|
+
An interactive panel for stacked DSC scans from TA Instruments **TRIOS**
|
|
30
|
+
files. Drop `.tri` files on it, stack the scans into the arrangement you want,
|
|
31
|
+
mark an interval on a curve to analyse it, and hand the result to a figure: a
|
|
32
|
+
PNG or SVG, a CSV, or a `DSC_Plotter.py` script that redraws it in matplotlib.
|
|
33
|
+
|
|
34
|
+
It reads TRIOS `.tri` files and `.txt` exports from DSC and SDT (TGA + DSC)
|
|
35
|
+
instruments with its own reader, validated against TRIOS's exports value by
|
|
36
|
+
value (`tests/test_reader.py`).
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install triplot
|
|
40
|
+
triplot # start it
|
|
41
|
+
triplot my-sample.tri # straight into a file
|
|
42
|
+
triplot register # put it in the Start Menu (optional)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Python 3.10 or newer; PySide6 (the Essentials only), numpy and RDKit come
|
|
46
|
+
with it. From a checkout, `pip install -e <checkout>` installs it editable.
|
|
47
|
+
Version 1.1.0; what changed is in `CHANGELOG.md`.
|
|
48
|
+
|
|
49
|
+
It was called **DSC-Panel** until 1.0.0 and installed from the repository
|
|
50
|
+
as `ach-dsc-panel`. To move over, uninstall that first (both install the
|
|
51
|
+
same `dscpanel` package), then clean up the old name's Start Menu entry:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip uninstall ach-dsc-panel
|
|
55
|
+
pip install triplot
|
|
56
|
+
triplot register --clean-legacy
|
|
57
|
+
triplot register
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Its preferences, presets and window place come across by themselves the
|
|
61
|
+
first time Triplot starts, and saved figures keep their `.dscpanel`
|
|
62
|
+
extension.
|
|
63
|
+
|
|
64
|
+
## What it does differently from a plotting script
|
|
65
|
+
|
|
66
|
+
- **Every segment is an object.** A `.tri` holds a heating ramp, a cooling
|
|
67
|
+
ramp and usually five more; each one is a scan you can select, move, hide,
|
|
68
|
+
colour and right-click. A file opens with its first heating scan on the
|
|
69
|
+
plot and every other segment listed in the outliner, one tick away - so
|
|
70
|
+
comparing the second and third up-scans of four samples is four ticks.
|
|
71
|
+
- **Three themes.** `blender-default` is the dark screen one, `light` is
|
|
72
|
+
the same figure on white, `boombox` a brushed-metal dark one. Exports are
|
|
73
|
+
always light, whichever is on screen.
|
|
74
|
+
- **Analyses are objects, and they start off.** A run carries a dozen stored
|
|
75
|
+
analyses; each is a row in the outliner with its own box, its own colour
|
|
76
|
+
and its own settings. Where the file could not say for certain which scan
|
|
77
|
+
an analysis belongs to (a `.txt` export names only the step), it is drawn
|
|
78
|
+
with a dashed tick and a question mark, and it can be moved to the right
|
|
79
|
+
scan by hand.
|
|
80
|
+
- **The stack is continuous.** Scans go wherever you put them (`G`, or just
|
|
81
|
+
type a number), and the offset each one carries is drawn beside it as a
|
|
82
|
+
number with an arrow. No mouse gesture moves a scan by accident.
|
|
83
|
+
- **Nothing is normalised.** The y axis is mW, W/g or W/mol, with real
|
|
84
|
+
numbers on it. A DSC baseline depends on the mass, the pan and the heating
|
|
85
|
+
rate, and scaling each trace to its own extremum would hide exactly the
|
|
86
|
+
differences a stack is for.
|
|
87
|
+
- **Per mole is opt-in.** W/mol needs a molar mass, there is no default, and
|
|
88
|
+
a scan that has not been given one is drawn as a dashed placeholder with a
|
|
89
|
+
blinking red label instead of being plotted wrong. An export of a figure
|
|
90
|
+
with one in it carries a `NO MOLAR MASS` notice on the image and on the
|
|
91
|
+
console.
|
|
92
|
+
- **A legend when you want one** (tick it in the outliner): a colour sample and a name per
|
|
93
|
+
drawn scan, taking each scan's own label. It is an artist, so it is dragged
|
|
94
|
+
and anchored like the rest, and it starts off.
|
|
95
|
+
- **Labels can belong to a line.** Right-click a curve and add one: it
|
|
96
|
+
takes that line's colour, is listed under it in the outliner, and is
|
|
97
|
+
removed with it. Free-standing captions (`Ctrl+T`) work the same way
|
|
98
|
+
otherwise.
|
|
99
|
+
- **Artists carry a transform.** Everything that augments the figure rather
|
|
100
|
+
than coming from the data - the heat-flow arrow, a caption, whatever comes
|
|
101
|
+
next - derives from one base class with a position, an anchor and per-kind
|
|
102
|
+
capability flags. A position can be given as a fraction of the plot or in
|
|
103
|
+
the axes' own units, and switching between them does not move anything.
|
|
104
|
+
- **The heat-flow arrow is an object too.** Label it "exo down", "exo up",
|
|
105
|
+
"endo up" or "endo down"; the curves and the y axis follow the label, so
|
|
106
|
+
the arrow and the data cannot contradict each other.
|
|
107
|
+
- **The exotherm direction is read from the file** where the file says it (a
|
|
108
|
+
`.txt` export states it in the header; a `.tri` carries TRIOS's audit line),
|
|
109
|
+
and reported as assumed where it does not.
|
|
110
|
+
|
|
111
|
+
## Keys
|
|
112
|
+
|
|
113
|
+
| Key | What it does |
|
|
114
|
+
| :-- | :-- |
|
|
115
|
+
| click | select what is under the pointer (`Shift` adds) |
|
|
116
|
+
| drag from a curve | **mark an interval**; let go and pick the analysis |
|
|
117
|
+
| drag from an artist | move it: the arrow, the legend, a label, an analysis label, an axis caption |
|
|
118
|
+
| drag from empty space | **box select** (with `Shift`, a box from anywhere, adding) |
|
|
119
|
+
| double-click | settings: a curve, an analysis, an axis spine, a caption |
|
|
120
|
+
| two-finger swipe, mouse wheel, or middle-button drag | scale the y axis about y = 0 (drag up: taller) |
|
|
121
|
+
| `Shift` + swipe or middle drag | pan the view, in whichever direction the hand goes |
|
|
122
|
+
| pinch, `Ctrl` + wheel or middle drag | zoom both axes about the pointer (Windows sends a pinch as `Ctrl+wheel`) |
|
|
123
|
+
| `Alt` + swipe or middle drag | zoom the page, like a document; with `Shift`, move it (`Alt+F` fits it again) |
|
|
124
|
+
| `Z` | cycle zoom: box, horizontal, vertical (`Esc` leaves) |
|
|
125
|
+
| `P` | cycle pan: horizontal, vertical, free |
|
|
126
|
+
| `F` / `Home` | fit the view, with room for every analysis label shown |
|
|
127
|
+
| `Esc` | back to plain select |
|
|
128
|
+
| `G` | grab the selection: move, or type a number, `Enter` to confirm - the only way a scan moves |
|
|
129
|
+
| `X` / `Y` while moving | lock a direction (a scan only moves in y) |
|
|
130
|
+
| `Shift` / `Ctrl` while moving | precision / snap to round numbers |
|
|
131
|
+
| `R` | reset the selected offsets to zero (or all of them) |
|
|
132
|
+
| a number | move the selected scans by it; `Enter` confirms, `Esc` cancels |
|
|
133
|
+
| `Ctrl+T` | add a caption where the cursor is |
|
|
134
|
+
| `Ctrl+Shift+T` | add a note: a caption with an arrow to the point under the cursor (on a curve, it belongs to that scan); drag the ring at its tip to re-aim it |
|
|
135
|
+
| `S` with only scans selected | spread them evenly about y = 0; type the step, `Ctrl` for a round one |
|
|
136
|
+
| `Ctrl+P` / `Alt+P` | give the selected labels to the selected scan (they then move with it) / free them; or drag a label onto a scan in the outliner |
|
|
137
|
+
| double-click a page handle | type the figure's size in cm or inches, the aspect ratio kept |
|
|
138
|
+
| `Ctrl+L` / `Ctrl+R` / `Ctrl+M` | align analysis labels left / right / centred on their arrows |
|
|
139
|
+
| `C` | measure by typing: two temperatures, then `Enter` |
|
|
140
|
+
| `Delete` | remove the selection: an analysis, a caption, or scans |
|
|
141
|
+
| `Ctrl+A` / `Alt+A` | select everything / nothing; `Shift+click` adds |
|
|
142
|
+
| `H` / `Alt+H` | hide the selection / show everything |
|
|
143
|
+
| `Shift+M` | set the molar mass |
|
|
144
|
+
| `N` | show or hide the outliner |
|
|
145
|
+
| `F3` | **operator search**: everything, filtered by what is selected |
|
|
146
|
+
| `Ctrl+Z` / `Ctrl+Y` | undo / redo, including a file you removed - and zoom, pan and fit, one gesture at a time |
|
|
147
|
+
| `Ctrl+S` / `Ctrl+E` | save the session / export the figure |
|
|
148
|
+
| `Ctrl+,` | settings: the house style, for every figure and for this one |
|
|
149
|
+
| `Ctrl+W` | close the pop-up in front; the window only when no pop-up is open |
|
|
150
|
+
|
|
151
|
+
The rule is short on purpose: **a drag acts on what it starts near.**
|
|
152
|
+
"Near" is the pick distance (Settings > Handling, 14 px unless you change
|
|
153
|
+
it): start within it of a curve and the drag marks an interval; of a label,
|
|
154
|
+
the arrow or the legend and it moves that; anywhere else it draws a box. A
|
|
155
|
+
click selects, a double-click opens settings. A scan moves with `G` and
|
|
156
|
+
nothing else, and an analysis label moves up or down only, with its leader
|
|
157
|
+
arrow stretching to follow.
|
|
158
|
+
|
|
159
|
+
The menu bar is File, Edit, **Search** (the same as `F3`) and Help (About).
|
|
160
|
+
Everything else lives in the search, filtered by what is selected.
|
|
161
|
+
|
|
162
|
+
Right-click a curve for its settings, its molar mass, a label or a note;
|
|
163
|
+
right-click an axis's number to hide it (its tick stays).
|
|
164
|
+
|
|
165
|
+
The figure follows the DSC_Plotter template: no grid, ticks pointing inward
|
|
166
|
+
with minor ticks, an italic `T` against an upright unit, and integrations
|
|
167
|
+
shaded between the curve and their baseline. All of it is editable per object,
|
|
168
|
+
and the x axis can be drawn in degrees Celsius, Kelvin or Fahrenheit.
|
|
169
|
+
|
|
170
|
+
## Measuring
|
|
171
|
+
|
|
172
|
+
Press on a curve and drag along it (a double-click-drag works too): the
|
|
173
|
+
stretch between the two crosshairs is the interval. Let go, and a short list opens under the pointer -
|
|
174
|
+
Onset, Integration, Glass transition and the rest; one click, or type and
|
|
175
|
+
`Enter`. The analysis is computed, drawn and added to the outliner at once,
|
|
176
|
+
and it is one undo step. `Esc` on the list drops the interval.
|
|
177
|
+
|
|
178
|
+
To give the temperatures as numbers instead, select one scan and press `C`,
|
|
179
|
+
then type a temperature for each crosshair (in whatever unit the axis is
|
|
180
|
+
showing) and `Enter`; `Esc` steps back one stage at a time.
|
|
181
|
+
|
|
182
|
+
Double-clicking an analysis made here brings its cursors back as gizmos,
|
|
183
|
+
with its settings opened beside them rather than over them. Drag a gizmo
|
|
184
|
+
and the analysis is recomputed as you let go; close the settings - OK,
|
|
185
|
+
Cancel or the window's X - and the interval is confirmed and the gizmos go.
|
|
186
|
+
|
|
187
|
+
The arithmetic is `trios_analysis`, the same code the reader uses for the
|
|
188
|
+
analyses TRIOS stored, so a measurement made here and one read out of a `.tri`
|
|
189
|
+
are the same kind of thing. Against a stored integration in a reference run
|
|
190
|
+
the panel computes 13.3 J/g where the file says 13.2611.
|
|
191
|
+
|
|
192
|
+
Each analysis marks its interval with a dash on the curve at each end, in
|
|
193
|
+
the axis colour; an onset, endset or glass transition also gets straight
|
|
194
|
+
lines from those dashes to its result point, the template's construction
|
|
195
|
+
(one tickbox hides them). A cursor can be picked up and dragged rather than
|
|
196
|
+
replaced. Adjusting an existing analysis keeps the model it already has.
|
|
197
|
+
Analyses made here are saved with the session and recomputed from the file
|
|
198
|
+
when it is reopened.
|
|
199
|
+
|
|
200
|
+
A finished analysis arrives with its own caption - `\Delta*H* = 13.247 J/g`,
|
|
201
|
+
`*T*_{g} = 78.9 degC` - which is editable text in its settings. Captions
|
|
202
|
+
anywhere in the figure take the same small markup: `*T*` for italic, `_{g}`
|
|
203
|
+
for a subscript, and a backslash name for a Greek letter.
|
|
204
|
+
|
|
205
|
+
**Hiding the ends of a curve** (Scan settings > Hide) is the plotter's
|
|
206
|
+
`x_truncate`: the first and last N % of the POINTS, never a temperature
|
|
207
|
+
window - a DSC curve doubles back at its start and runs backwards when
|
|
208
|
+
cooling. The hidden ends show dashed while the scan is hovered or selected,
|
|
209
|
+
and are left out of the fit, the analyses and the exports. For the same
|
|
210
|
+
reason an interval dragged along a curve is the stretch of points between
|
|
211
|
+
where the drag began and ended, not every point between two temperatures.
|
|
212
|
+
|
|
213
|
+
The caption's **alignment** is the plotter's `flush`: which edge of the text
|
|
214
|
+
sits on the leader arrow. Left reads away to the right of the feature, right
|
|
215
|
+
to the left, centred hangs over it. By default it follows the analysis kind
|
|
216
|
+
as the template does - tangent constructions (onset, endset, glass
|
|
217
|
+
transition) flush left, integrals centre.
|
|
218
|
+
|
|
219
|
+
## House style
|
|
220
|
+
|
|
221
|
+
`Ctrl+,` (Edit > Settings) sets the sizes and the label alignment, in two
|
|
222
|
+
columns:
|
|
223
|
+
|
|
224
|
+
- **Default** is yours: kept on this computer, used by every figure, and
|
|
225
|
+
there the next time the program starts. The **pick distance** lives here
|
|
226
|
+
too, under Handling: it is about your hand, not about a figure.
|
|
227
|
+
- **This figure** is saved in the session file and wins over the default,
|
|
228
|
+
for this figure only. Left on "default", it follows the column beside it.
|
|
229
|
+
|
|
230
|
+
A size chosen in an object's own settings (double-click it) wins over both,
|
|
231
|
+
and its **Default** button hands it back. The **caption distance** is the
|
|
232
|
+
space between an axis's numbers and its caption.
|
|
233
|
+
|
|
234
|
+
Every settings window applies as you touch it and keeps the changes however
|
|
235
|
+
it is closed; its **Revert** button is the one way back. Closing the program
|
|
236
|
+
with unsaved changes asks first.
|
|
237
|
+
|
|
238
|
+
## Figure size
|
|
239
|
+
|
|
240
|
+
Edit > **Figure size and margins** (saved with the session) gives the figure
|
|
241
|
+
one of three sizes: whatever the window is, a fixed aspect ratio, or an
|
|
242
|
+
**exact size** in centimetres or inches with four margins. At an exact size
|
|
243
|
+
the margins decide the axes box - the numbers and captions live inside them,
|
|
244
|
+
and the dialog says when one does not fit - so two figures with the same
|
|
245
|
+
settings have identical axes boxes whatever their numbers say, and sit side
|
|
246
|
+
by side in Word without adjusting. On screen the figure is shown as its page,
|
|
247
|
+
scaled to fit. **Use for new figures** makes a layout the default.
|
|
248
|
+
|
|
249
|
+
Each axis can sit on either side (x bottom or top, y left or right) and hide
|
|
250
|
+
its numbers, single numbers or its caption (double-click the axis line or
|
|
251
|
+
its numbers). On an exact figure an axis moved to its other side takes its
|
|
252
|
+
margin with it, and no margin can be cut into the numbers it holds - the
|
|
253
|
+
one at the corner of the box included.
|
|
254
|
+
|
|
255
|
+
## Exports
|
|
256
|
+
|
|
257
|
+
| Export | What it is for |
|
|
258
|
+
| :-- | :-- |
|
|
259
|
+
| PNG / SVG | the figure, drawn in the light palette, warnings stamped on; at an exact size, exactly that size (the PNG carries its dpi, the SVG its millimetres) |
|
|
260
|
+
| CSV | the curves as numbers, one x/y column pair per scan |
|
|
261
|
+
| `DSC_Plotter.py` | the arrangement as a driver script for the DSC_Plotter matplotlib template |
|
|
262
|
+
|
|
263
|
+
The driver needs that template's `achdsc` package, which is not on PyPI.
|
|
264
|
+
With it installed the export is a complete, runnable `DSC_Plotter.py` with
|
|
265
|
+
your paths, segments, colours and offsets already in it; without it, the
|
|
266
|
+
driver section alone, to paste into a copy made by `dsc -c .`.
|
|
267
|
+
|
|
268
|
+
## The Start Menu, aliases, and the name
|
|
269
|
+
|
|
270
|
+
The name lives in exactly one module (`src/dscpanel/branding.py`) and a test
|
|
271
|
+
fails if it is hard-coded anywhere else; that is how DSC-Panel became
|
|
272
|
+
Triplot. Putting the program in the Start Menu is opt-in and reversible,
|
|
273
|
+
and it writes down what it created, so a rename can take the old name away:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
triplot register # Start Menu entry (add --desktop for one there too)
|
|
277
|
+
triplot register --list # what is registered
|
|
278
|
+
triplot register --remove # take it away again
|
|
279
|
+
triplot register --clean-legacy # after a rename: remove the old name's entries
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Your own name for it, on any platform (a `.cmd` shim on Windows, a symlink in
|
|
283
|
+
`~/.local/bin` elsewhere):
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
triplot alias tp
|
|
287
|
+
triplot alias tp --remove
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Project layout
|
|
291
|
+
|
|
292
|
+
```
|
|
293
|
+
src/dscpanel/
|
|
294
|
+
branding.py every place the program says its own name
|
|
295
|
+
register.py Start Menu entry, aliases, and the manifest of both
|
|
296
|
+
core/ UI-free: model, units, arranging, undo, session, export
|
|
297
|
+
trios_io.py the TRIOS reader (docs/TRI-FORMAT.md)
|
|
298
|
+
trios_analysis.py the TRIOS analyses, recomputed
|
|
299
|
+
ui/ the painted plot, the outliner, the F3 palette, dialogs
|
|
300
|
+
docs/PLAN.md what is built, what is next, what is still undecided
|
|
301
|
+
docs/TRI-FORMAT.md the binary .tri format, and how it was decoded
|
|
302
|
+
docs/OPERATORS.md every operator, its key and when it lights up
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Development
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
python -m pytest -q
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Measurements are not committed. The tests that need a real `.tri` look for
|
|
312
|
+
paths in `TRIOS_TESTDATA` or in an uncommitted `tests/local_testdata.txt`,
|
|
313
|
+
and skip when there are none. They name a real file by a hash of its file
|
|
314
|
+
name (`tests/conftest.py`, `hashed_name`), so no sample id is in the
|
|
315
|
+
source.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
dscpanel/__init__.py,sha256=IFYBvDE2taAT71MEtbAi3Axvwjbm4t_ttA-TD0fHK9M,123
|
|
2
|
+
dscpanel/__main__.py,sha256=7URpkErPnLotLTgQXZcC4Va8DaqG7IJbDjWgwf3tXKw,6245
|
|
3
|
+
dscpanel/branding.py,sha256=cCuBgolO2LUo_Hlz4Dj5fUbaqJAxs1p4RRldht0kd2M,6085
|
|
4
|
+
dscpanel/register.py,sha256=jAUF6Ms_IsCtsKiA8llI1CXOYjOdc0hUR6vOSTscrLk,10845
|
|
5
|
+
dscpanel/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
dscpanel/core/arrange.py,sha256=LQeePJQRBuJeOFwcKdEFX5JEA3zL9EflOXU0N_Sm898,5271
|
|
7
|
+
dscpanel/core/chem.py,sha256=aP5oAbDq1TW45CGkZOX3ojbBo5VJuamA409BP54fW1M,10268
|
|
8
|
+
dscpanel/core/dtg.py,sha256=AY_HCbAuwowZxdDOLI-c0TiKW4yUKrI06WnxIDRbVMI,5185
|
|
9
|
+
dscpanel/core/export.py,sha256=zZ7GN8mk9PYm5_ffiSmGhxLF15ARJiT4olx8a-dvE7k,30535
|
|
10
|
+
dscpanel/core/figure.py,sha256=mgOW6dw4ezQHM8n5pUlOhwKtVUPkuouXtPDJFfVBAuw,6900
|
|
11
|
+
dscpanel/core/labels.py,sha256=36g9v2XLOi7u8RrRFg4PPEJeLkyNFb5JDTFQdD-1jAU,18085
|
|
12
|
+
dscpanel/core/loader.py,sha256=Eopazh3xMG_WqUi63T98GyUS1fKNrSj7sIer-FZWadY,8361
|
|
13
|
+
dscpanel/core/log.py,sha256=UXkKACcfhQTpBG00Oub6hR1sK0iD1NTx9lwxxBz163A,5577
|
|
14
|
+
dscpanel/core/measure.py,sha256=Afydsuc-CfA95w6ZHVxKngkOA-3165pf1gT3e8_SPBE,26295
|
|
15
|
+
dscpanel/core/model.py,sha256=5IbxsxkKmIxe6Uq14xqBpTB7WkSWZaqVSxdKCvCJ3uY,90038
|
|
16
|
+
dscpanel/core/molar.py,sha256=FhhswyT3Q_4ea2Ohiw8a5_AvPG7uSDgqT_tWPJ3GPv8,12192
|
|
17
|
+
dscpanel/core/numbers.py,sha256=VTBIMJzArqTlYNCm2vWywRqDND-EvB_qrvBHT6_nrHg,7965
|
|
18
|
+
dscpanel/core/ops.py,sha256=vAfeogn3etAHJi0C1y6sXypWkF5zndaqeTb538itas4,6970
|
|
19
|
+
dscpanel/core/presets.py,sha256=mEmadm4JsgzgPxORz4bK_OdBSOsovh_zthu-nIDQuDM,12632
|
|
20
|
+
dscpanel/core/profile.py,sha256=wKNuLV7wO9KcexIcZnSCguZF5e8-zU9WOkN6TQxXNWM,576
|
|
21
|
+
dscpanel/core/session.py,sha256=gTbWFGWLN_0s-MtvcRwg4y_gJ1qR88lhBc7DraiLcc8,31981
|
|
22
|
+
dscpanel/core/shades.py,sha256=0KJtUFrOxTE57c2AWvoCYxzgdy2rDiKttyY4Q4SSZkE,1884
|
|
23
|
+
dscpanel/core/style.py,sha256=1uaI8Gh_j3FmDdJMyLZltB3Fg9F2CLRS1jvUV87OjIU,22270
|
|
24
|
+
dscpanel/core/trios_analysis.py,sha256=RQG1X3tvVvdAIC8JMHX9y-oFfpgrJClB2loO6XxBrF8,26863
|
|
25
|
+
dscpanel/core/trios_io.py,sha256=S3cyIvt9iQ9nGQbM3GsPb-RyWDyF35r23ZdS6bc4Ci4,59793
|
|
26
|
+
dscpanel/core/undo.py,sha256=ieQYNMsX3ijHsOeZ2MGec3ttn51LQxYxX8vinJZCD34,7612
|
|
27
|
+
dscpanel/core/units.py,sha256=BhHOIITrY3w5qW7lr7rmaclwMprh-3mk2FoijX5A2Xs,8449
|
|
28
|
+
dscpanel/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
dscpanel/ui/appearance.py,sha256=80ftnhtiHJwX_apoMf4VQ9AAoQOcM3oFZupLGSmOkXU,6140
|
|
30
|
+
dscpanel/ui/colour.py,sha256=18LtiT-4VxGsL_O6rBwFV9kbsWDxFMn83aXTRp3ACOo,24051
|
|
31
|
+
dscpanel/ui/dialogs.py,sha256=hfU_Uuwc5Tx8McJuUQ00WHvhXEDB9YlTos_cyC6HDQg,150689
|
|
32
|
+
dscpanel/ui/loading.py,sha256=4sckQ7KOJdjA_vvJEjP4GlF3Zgb3n54MqjxlFOFA2CY,3484
|
|
33
|
+
dscpanel/ui/numbox.py,sha256=-FR02Q7dChCt7troP8iOLmC9U-dmOIgfNKAWKB6CLMg,3260
|
|
34
|
+
dscpanel/ui/outliner.py,sha256=zNot_7IHFmt79tqPff6-cPQeRz7adWOR3M2UEALzfdc,35515
|
|
35
|
+
dscpanel/ui/palette.py,sha256=2lzQ486t08eHoIDkh6RO54704onugrKvG9kjlUeA5-Y,8540
|
|
36
|
+
dscpanel/ui/plot.py,sha256=5F1qcTbYoCqtAD4SOKMzAFM1L8qkfedrSEqiwwj3FAg,369989
|
|
37
|
+
dscpanel/ui/settings.py,sha256=Veoe0YJdvIEwhYB93gBpw0mIKu3ITYULamT0nWvcwY0,11215
|
|
38
|
+
dscpanel/ui/window.py,sha256=83f-OTzmPXh0kj0W9dBWAILWxzyNoRaq1PMSR0mcirM,188231
|
|
39
|
+
triplot-1.1.0.dist-info/licenses/LICENSE,sha256=ZghEH4BJPT8D2JXs-NCJJUBBMENIvZ04bBXAJxzcoRA,1189
|
|
40
|
+
triplot-1.1.0.dist-info/METADATA,sha256=1r3YAhllZo9Op7OwUCjZzYqXP77xE5M_98v0_x_fcVk,16631
|
|
41
|
+
triplot-1.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
42
|
+
triplot-1.1.0.dist-info/entry_points.txt,sha256=rtfmuSZonHvrHpbvd93brsS3NkJKclwhOQ6iuOfg-Zg,103
|
|
43
|
+
triplot-1.1.0.dist-info/top_level.txt,sha256=vNWML-M3YKOaR4ofunR0wSnJcfMHAYQw63CFNLRI7jg,9
|
|
44
|
+
triplot-1.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christian Nelle, Arbeitsgruppe Prof. Sebastian Henke,
|
|
4
|
+
Fakultät für Chemie und Chemische Biologie, Technische Universität Dortmund
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dscpanel
|