majoplot 0.1.10__tar.gz → 0.1.12__tar.gz

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.
Files changed (45) hide show
  1. {majoplot-0.1.10 → majoplot-0.1.12}/PKG-INFO +1 -1
  2. {majoplot-0.1.10 → majoplot-0.1.12}/pyproject.toml +1 -1
  3. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/importers/PPMS_Resistivity.py +94 -3
  4. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/PPMS_Resistivity/RT.py +11 -7
  5. majoplot-0.1.12/src/majoplot/domain/scenarios/PPMS_Resistivity/RT_Resistivity.py +136 -0
  6. majoplot-0.1.12/src/majoplot/domain/scenarios/PPMS_Resistivity/RT_normalized.py +142 -0
  7. majoplot-0.1.10/src/majoplot/domain/scenarios/VSM/MT_origin.py → majoplot-0.1.12/src/majoplot/domain/scenarios/VSM/MT_original.py +1 -1
  8. {majoplot-0.1.10 → majoplot-0.1.12}/uv.lock +1 -1
  9. {majoplot-0.1.10 → majoplot-0.1.12}/.gitignore +0 -0
  10. {majoplot-0.1.10 → majoplot-0.1.12}/LICENSE +0 -0
  11. {majoplot-0.1.10 → majoplot-0.1.12}/README.md +0 -0
  12. {majoplot-0.1.10 → majoplot-0.1.12}/README.zh-CN.md +0 -0
  13. {majoplot-0.1.10 → majoplot-0.1.12}/TODO.md +0 -0
  14. {majoplot-0.1.10 → majoplot-0.1.12}/doc.zh-CN/Label.md +0 -0
  15. {majoplot-0.1.10 → majoplot-0.1.12}/doc.zh-CN/interactive_steps.md +0 -0
  16. {majoplot-0.1.10 → majoplot-0.1.12}/doc.zh-CN/main_design.md +0 -0
  17. {majoplot-0.1.10 → majoplot-0.1.12}/doc.zh-CN/note_of_labtalk.md +0 -0
  18. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/__init__.py +0 -0
  19. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/__main__.py +0 -0
  20. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/app/__init__.py +0 -0
  21. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/app/cli.py +0 -0
  22. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/app/gui.py +0 -0
  23. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/config.json +0 -0
  24. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/base.py +0 -0
  25. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/importers/VSM.py +0 -0
  26. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/importers/XRD.py +0 -0
  27. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/muti_axes_spec.py +0 -0
  28. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/VSM/ChiT.py +0 -0
  29. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/VSM/ChiT_onlyZFC.py +0 -0
  30. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/VSM/MT.py +0 -0
  31. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/VSM/MT_insert.py +0 -0
  32. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/VSM/MT_reliability_analysis.py +0 -0
  33. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/scenarios/XRD/Compare.py +0 -0
  34. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/domain/utils.py +0 -0
  35. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/gui/__init__.py +0 -0
  36. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/gui/main.py +0 -0
  37. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/infra/plotters/matplot.py +0 -0
  38. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/infra/plotters/origin.py +0 -0
  39. {majoplot-0.1.10 → majoplot-0.1.12}/src/majoplot/infra/plotters/origin_utils/originlab_type_library.py +0 -0
  40. {majoplot-0.1.10 → majoplot-0.1.12}/tests/README.md +0 -0
  41. {majoplot-0.1.10 → majoplot-0.1.12}/tests/conftest.py +0 -0
  42. {majoplot-0.1.10 → majoplot-0.1.12}/tests/domain/test_data_ignore_outliers.py +0 -0
  43. {majoplot-0.1.10 → majoplot-0.1.12}/tests/domain/test_insert_axes_spec.py +0 -0
  44. {majoplot-0.1.10 → majoplot-0.1.12}/tests/domain/test_labeldict_group.py +0 -0
  45. {majoplot-0.1.10 → majoplot-0.1.12}/tests/domain/test_labelvalue.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: majoplot
3
- Version: 0.1.10
3
+ Version: 0.1.12
4
4
  Summary: Automates scenario-specific data preprocessing and plotting workflows for condensed-matter physics labs (OriginLab COM backend + Matplotlib for preview).
5
5
  Project-URL: Homepage, https://github.com/ponyofshadows/majoplot
6
6
  Project-URL: Source, https://github.com/ponyofshadows/majoplot
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "majoplot"
3
- version = "0.1.10"
3
+ version = "0.1.12"
4
4
  description = "Automates scenario-specific data preprocessing and plotting workflows for condensed-matter physics labs (OriginLab COM backend + Matplotlib for preview)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -6,10 +6,16 @@ from ..utils import skip_lines_then_readline
6
6
 
7
7
  ROW_FILEOPENTIME = 3
8
8
  ROW_SAMPLE1_NAME = 6
9
+ ROW_SAMPLE1_CROSS_SECTION = 7
10
+ ROW_SAMPLE1_LENGTH = 8
9
11
  ROW_SAMPLE1_UNITS = 9
10
12
  ROW_SAMPLE2_NAME = 10
13
+ ROW_SAMPLE2_CROSS_SECTION = 11
14
+ ROW_SAMPLE2_LENGTH = 12
11
15
  ROW_SAMPLE2_UNITS = 13
12
16
  ROW_SAMPLE3_NAME = 14
17
+ ROW_SAMPLE3_CROSS_SECTION = 15
18
+ ROW_SAMPLE3_LENGTH = 16
13
19
  ROW_SAMPLE3_UNITS = 17
14
20
  ROW_HEADERS = 32
15
21
 
@@ -52,8 +58,36 @@ class PPMS_Resistivity:
52
58
  return fail_signal
53
59
  labels["sample1_name"] = LabelValue(s1_name)
54
60
 
61
+ # S1 Cross Section
62
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE1_CROSS_SECTION - ROW_SAMPLE1_NAME -1)
63
+ info = line.split(",")
64
+ try:
65
+ if info[-1].strip() != "Sample1 Cross Section":
66
+ return fail_signal
67
+ s1_cross_section = info[1]
68
+ except IndexError:
69
+ return fail_signal
70
+ try:
71
+ labels["sample1_cross_section"] = LabelValue(float(s1_cross_section),unit="mm²")
72
+ except ValueError:
73
+ return fail_signal
74
+
75
+ # S1 Length
76
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE1_LENGTH - ROW_SAMPLE1_CROSS_SECTION -1)
77
+ info = line.split(",")
78
+ try:
79
+ if info[-1].strip() != "Sample1 Length":
80
+ return fail_signal
81
+ s1_length = info[1]
82
+ except IndexError:
83
+ return fail_signal
84
+ try:
85
+ labels["sample1_length"] = LabelValue(float(s1_length),unit="mm")
86
+ except ValueError:
87
+ return fail_signal
88
+
55
89
  # S1 Units
56
- line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE1_UNITS - ROW_SAMPLE1_NAME -1)
90
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE1_UNITS - ROW_SAMPLE1_LENGTH -1)
57
91
  info = line.split(",")
58
92
  try:
59
93
  if info[-1].strip() != "Sample1 Units":
@@ -74,8 +108,37 @@ class PPMS_Resistivity:
74
108
  return fail_signal
75
109
  labels["sample2_name"] = LabelValue(s2_name)
76
110
 
111
+ # S2 Cross Section
112
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE2_CROSS_SECTION - ROW_SAMPLE2_NAME -1)
113
+ info = line.split(",")
114
+ try:
115
+ if info[-1].strip() != "Sample2 Cross Section":
116
+ return fail_signal
117
+ s2_cross_section = info[1]
118
+ except IndexError:
119
+ return fail_signal
120
+ try:
121
+ labels["sample2_cross_section"] = LabelValue(float(s2_cross_section),unit="mm²")
122
+ except ValueError:
123
+ return fail_signal
124
+
125
+ # S1 Length
126
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE2_LENGTH - ROW_SAMPLE2_CROSS_SECTION -1)
127
+ info = line.split(",")
128
+ try:
129
+ if info[-1].strip() != "Sample2 Length":
130
+ return fail_signal
131
+ s2_length = info[1]
132
+ except IndexError:
133
+ return fail_signal
134
+ try:
135
+ labels["sample2_length"] = LabelValue(float(s2_length),unit="mm")
136
+ except ValueError:
137
+ return fail_signal
138
+
139
+
77
140
  # S2 Units
78
- line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE2_UNITS - ROW_SAMPLE2_NAME -1)
141
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE2_UNITS - ROW_SAMPLE2_LENGTH -1)
79
142
  info = line.split(",")
80
143
  try:
81
144
  if info[-1].strip() != "Sample2 Units":
@@ -96,8 +159,36 @@ class PPMS_Resistivity:
96
159
  return fail_signal
97
160
  labels["sample3_name"] = LabelValue(s3_name)
98
161
 
162
+ # S3 Cross Section
163
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE3_CROSS_SECTION - ROW_SAMPLE3_NAME -1)
164
+ info = line.split(",")
165
+ try:
166
+ if info[-1].strip() != "Sample3 Cross Section":
167
+ return fail_signal
168
+ s3_cross_section = info[1]
169
+ except IndexError:
170
+ return fail_signal
171
+ try:
172
+ labels["sample3_cross_section"] = LabelValue(float(s3_cross_section),unit="mm²")
173
+ except ValueError:
174
+ return fail_signal
175
+
176
+ # S1 Length
177
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE3_LENGTH - ROW_SAMPLE3_CROSS_SECTION -1)
178
+ info = line.split(",")
179
+ try:
180
+ if info[-1].strip() != "Sample3 Length":
181
+ return fail_signal
182
+ s3_length = info[1]
183
+ except IndexError:
184
+ return fail_signal
185
+ try:
186
+ labels["sample3_length"] = LabelValue(float(s3_length),unit="mm")
187
+ except ValueError:
188
+ return fail_signal
189
+
99
190
  # S3 Units
100
- line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE3_UNITS - ROW_SAMPLE3_NAME -1)
191
+ line = skip_lines_then_readline(raw_data_file, ROW_SAMPLE3_UNITS - ROW_SAMPLE3_LENGTH -1)
101
192
  info = line.split(",")
102
193
  try:
103
194
  if info[-1].strip() != "Sample3 Units":
@@ -57,8 +57,8 @@ class RT:
57
57
  # clear null R points
58
58
  s_points = np.array([point for point in s_points if point[1]])
59
59
  # record
60
- Imin = np.min(s_points[:,1])
61
- Imax = np.max(s_points[:,1])
60
+ Imin = np.min(s_points[:,2])
61
+ Imax = np.max(s_points[:,2])
62
62
  if (Imax - Imin) / Imax < 0.03:
63
63
  Irange = f"{np.mean(s_points[:,1]):.1e}"
64
64
  else:
@@ -92,6 +92,8 @@ class RT:
92
92
  major_grid=None,
93
93
  major_tick=TickSpec(),
94
94
  legend=LegendSpec(fontsize=5),
95
+ linewidth=1,
96
+ marker_size=2,
95
97
  )
96
98
 
97
99
 
@@ -104,13 +106,15 @@ class RT:
104
106
  title=None,
105
107
  figsize=FIGSIZE,
106
108
  linestyle_cycle= ("-",),
109
+
107
110
  linecolor_cycle = (
108
- "#2d0b59", "#3b0f6f", "#4a136e", "#5a176e", "#6a1c6e",
109
- "#7a216f", "#8b2770", "#9b2d71", "#ac3372", "#bd3973",
110
- "#ce4074", "#df4775", "#f04f76", "#f86a5a", "#fb8c3c",
111
- "#fdbb2d", "#fcfdbf",
111
+ "#515151", "#F14040", "#1A6FDF", "#37AD6B", "#B177DE",
112
+ "#CC9900", "#00CBCC", "#7D4E4E", "#8E8E00", "#FB6501",
113
+ "#6699CC", "#6FB802", "#f04f76", "#f86a5a", "#fb8c3c",
114
+ "#fdbb2d", "#fcfdbf","#2B2E83", "#E6007A", "#005F5F",
115
+ "#1F3D2B", "#E8C6E8","#FAB3d1",
112
116
  ),
113
- linemarker_cycle = ("o","s","^","v","d","*","x","+"),
117
+ linemarker_cycle = ("o",),
114
118
  alpa_cycle = (1.0,),
115
119
  )
116
120
 
@@ -0,0 +1,136 @@
1
+ from __future__ import annotations
2
+
3
+ from ...base import *
4
+
5
+
6
+ FIGSIZE = (8, 6)
7
+
8
+ T = "Temperature (K)"
9
+ H = "Magnetic Field (Oe)"
10
+ R = "Resistivity (Ω·m)"
11
+ RI ={
12
+ 1: {"R":"Bridge 1 Resistance (Ohms)", "I":"Bridge 1 Excitation (uA)"},
13
+ 2: {"R":"Bridge 2 Resistance (Ohms)", "I":"Bridge 2 Excitation (uA)"},
14
+ 3: {"R":"Bridge 3 Resistance (Ohms)", "I":"Bridge 3 Excitation (uA)"},
15
+ }
16
+
17
+ ResistivityI ={
18
+ 1: {"R":"Bridge 1 Resistivity (Ω·m)", "I":"Bridge 1 Excitation (uA)"},
19
+ 2: {"R":"Bridge 2 Resistivity (Ω·m)", "I":"Bridge 2 Excitation (uA)"},
20
+ 3: {"R":"Bridge 3 Resistivity (Ω·m)", "I":"Bridge 3 Excitation (uA)"},
21
+ }
22
+
23
+ class RT_Resistivity:
24
+ data_summary_label_names = ["H"]
25
+ axes_label_names = ("date", "raw_data", "bridge", "sample_name")
26
+ figure_label_names = ("date", "raw_data", "bridge", "sample_name")
27
+ figure_summary_label_names = ("raw_data","bridge","sample_name")
28
+ max_axes_in_one_figure = 1
29
+ project_to_child_folder_label_names = {"date":"sample_name"}
30
+ parent_folder_name = "RT"
31
+
32
+ @classmethod
33
+ def preprocess(cls, raw_datas:list[Data])->list[Data]:
34
+ datas = []
35
+ for raw_data in raw_datas:
36
+ raw_labels = raw_data.labels
37
+ headers = raw_data.headers
38
+ raw_points = raw_data.points
39
+
40
+ # Split by H
41
+ split_datas = []
42
+
43
+ last_H_stage = round(raw_points[0][headers[H]])
44
+ current_points = [ last_H_stage, [ raw_points[0] ] ]
45
+
46
+ for point in raw_points[1:]:
47
+ cur_H_stage = round(point[headers[H]])
48
+ if cur_H_stage != last_H_stage:
49
+ split_datas.append(current_points)
50
+ last_H_stage = cur_H_stage
51
+ current_points = [ last_H_stage, [ point ] ]
52
+ else:
53
+ current_points[1].append(point)
54
+ else:
55
+ split_datas.append(current_points)
56
+
57
+ # 3 bridges
58
+ for H_stage, points in split_datas:
59
+ for i in range(1,4):
60
+ _headerTRI = (T,RI[i]["R"],RI[i]["I"])
61
+ _headers = (T,ResistivityI[i]["R"])
62
+ s_points = [ [point[headers[x]] for x in _headerTRI] for point in points]
63
+ # clear null Resistance points
64
+ s_points = np.array([point for point in s_points if point[1]])
65
+ # calculate resistivity
66
+ cross_section = raw_labels[f"sample{i}_cross_section"].value * 1e-6
67
+ if cross_section <= 0:
68
+ cross_section = np.nan
69
+ length = raw_labels[f"sample{i}_length"].value * 1e-3
70
+ if length <= 0:
71
+ length = np.nan
72
+ r_points = np.column_stack([s_points[:,0], s_points[:,1] * cross_section / length])
73
+ # record
74
+ Imin = np.min(s_points[:,2])
75
+ Imax = np.max(s_points[:,2])
76
+ if (Imax - Imin) / Imax < 0.03:
77
+ Irange = f"{np.mean(s_points[:,1]):.1e}"
78
+ else:
79
+ Irange = f"{Imin:.1e}~{Imax:.1e}"
80
+ labels = LabelDict()
81
+ labels["instrument"] = raw_labels["instrument"]
82
+ labels["raw_data"] = raw_labels["raw_data"]
83
+ labels["date"] = raw_labels["date"]
84
+ labels["bridge"] = LabelValue(i,unit="Bridge",unit_as_postfix=False)
85
+ labels["sample_name"] = raw_labels[f"sample{i}_name"]
86
+ labels["sample_units"] = raw_labels[f"sample{i}_units"]
87
+ labels["H"] = LabelValue(H_stage, unit="Oe")
88
+ labels["I_range"] = LabelValue(Irange,unit="μA")
89
+ labels.summary_names = cls.data_summary_label_names
90
+ datas.append(Data(
91
+ labels=labels,
92
+ _headers=_headers,
93
+ points=r_points,
94
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-8,min_gap_multiple=10),
95
+ ))
96
+
97
+ return datas
98
+
99
+
100
+
101
+ @classmethod
102
+ def make_axes_spec(cls, axes_labels, data_pool)->AxesSpec:
103
+ return AxesSpec(
104
+ x_axis_title=T,
105
+ y_axis_title=R,
106
+ major_grid=None,
107
+ major_tick=TickSpec(),
108
+ legend=LegendSpec(fontsize=5),
109
+ linewidth=1,
110
+ marker_size=2,
111
+ )
112
+
113
+
114
+ @classmethod
115
+ def make_figure_spec(cls,figure_labels, axes_pool:Iterable[Axes])->FigureSpec:
116
+ figure_name = figure_labels.brief_summary
117
+
118
+ return FigureSpec(
119
+ name=figure_name,
120
+ title=None,
121
+ figsize=FIGSIZE,
122
+ linestyle_cycle= ("-",),
123
+ linecolor_cycle = (
124
+ "#515151", "#F14040", "#1A6FDF", "#37AD6B", "#B177DE",
125
+ "#CC9900", "#00CBCC", "#7D4E4E", "#8E8E00", "#FB6501",
126
+ "#6699CC", "#6FB802", "#f04f76", "#f86a5a", "#fb8c3c",
127
+ "#fdbb2d", "#fcfdbf","#2B2E83", "#E6007A", "#005F5F",
128
+ "#1F3D2B", "#E8C6E8","#FAB3d1",
129
+ ),
130
+ linemarker_cycle = ("o","s","^","v","d","*","x","+"),
131
+ alpa_cycle = (1.0,),
132
+ )
133
+
134
+ @classmethod
135
+ def make_muti_axes_spec(cls, axes_pool:list[Axes])->MutiAxesSpec|FAIL|None:
136
+ return None
@@ -0,0 +1,142 @@
1
+ from __future__ import annotations
2
+
3
+ from ...base import *
4
+
5
+
6
+ FIGSIZE = (8, 6)
7
+
8
+ T = "Temperature (K)"
9
+ H = "Magnetic Field (Oe)"
10
+ R = "Resistance (Ohms)"
11
+ RI ={
12
+ 1: {"R":"Bridge 1 Resistance (Ohms)", "I":"Bridge 1 Excitation (uA)"},
13
+ 2: {"R":"Bridge 2 Resistance (Ohms)", "I":"Bridge 2 Excitation (uA)"},
14
+ 3: {"R":"Bridge 3 Resistance (Ohms)", "I":"Bridge 3 Excitation (uA)"},
15
+ }
16
+ RI_normalized ={
17
+ 1: {"R":"Bridge 1 Normalized Resistance", "I":"Bridge 1 Excitation (uA)"},
18
+ 2: {"R":"Bridge 2 Normalied Resistance", "I":"Bridge 2 Excitation (uA)"},
19
+ 3: {"R":"Bridge 3 Normalized Resistance", "I":"Bridge 3 Excitation (uA)"},
20
+ }
21
+
22
+ class RT_normalized:
23
+ data_summary_label_names = ["H"]
24
+ axes_label_names = ("date", "raw_data", "bridge", "sample_name")
25
+ figure_label_names = ("date", "raw_data", "bridge", "sample_name")
26
+ figure_summary_label_names = ("raw_data","bridge","sample_name")
27
+ max_axes_in_one_figure = 1
28
+ project_to_child_folder_label_names = {"date":"sample_name"}
29
+ parent_folder_name = "RT"
30
+
31
+ @classmethod
32
+ def preprocess(cls, raw_datas:list[Data])->list[Data]:
33
+ datas = []
34
+ for raw_data in raw_datas:
35
+ raw_labels = raw_data.labels
36
+ headers = raw_data.headers
37
+ raw_points = raw_data.points
38
+
39
+ # Split by H
40
+ split_datas = []
41
+
42
+ last_H_stage = round(raw_points[0][headers[H]])
43
+ current_points = [ last_H_stage, [ raw_points[0] ] ]
44
+
45
+ for point in raw_points[1:]:
46
+ cur_H_stage = round(point[headers[H]])
47
+ if cur_H_stage != last_H_stage:
48
+ split_datas.append(current_points)
49
+ last_H_stage = cur_H_stage
50
+ current_points = [ last_H_stage, [ point ] ]
51
+ else:
52
+ current_points[1].append(point)
53
+ else:
54
+ split_datas.append(current_points)
55
+
56
+ # 3 bridges
57
+ for H_stage, points in split_datas:
58
+ for i in range(1,4):
59
+ _headerTRI = (T,RI[i]["R"],RI[i]["I"])
60
+ _headers = (T,RI_normalized[i]["R"])
61
+ s_points = [ [point[headers[x]] for x in _headerTRI] for point in points]
62
+ # clear null R points
63
+ s_points = np.array([point for point in s_points if point[1]])
64
+ # record
65
+ Imin = np.min(s_points[:,2])
66
+ Imax = np.max(s_points[:,2])
67
+ if (Imax - Imin) / Imax < 0.03:
68
+ Irange = f"{np.mean(s_points[:,1]):.1e}"
69
+ else:
70
+ Irange = f"{Imin:.1e}~{Imax:.1e}"
71
+
72
+ labels = LabelDict()
73
+ labels["instrument"] = raw_labels["instrument"]
74
+ labels["raw_data"] = raw_labels["raw_data"]
75
+ labels["date"] = raw_labels["date"]
76
+ labels["bridge"] = LabelValue(i,unit="Bridge",unit_as_postfix=False)
77
+ labels["sample_name"] = raw_labels[f"sample{i}_name"]
78
+ labels["sample_units"] = raw_labels[f"sample{i}_units"]
79
+ labels["H"] = LabelValue(H_stage, unit="Oe")
80
+ labels["I_range"] = LabelValue(Irange,unit="μA")
81
+ labels.summary_names = cls.data_summary_label_names
82
+ datas.append(Data(
83
+ labels=labels,
84
+ _headers=_headers,
85
+ points=s_points[:,0:2],
86
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=5),
87
+ ))
88
+
89
+ # normalize
90
+ for data in datas:
91
+ data: Data
92
+ ymax = np.max(np.abs(data.ylim))
93
+ data.points = np.column_stack( [data.points[:,0], np.asarray(data.points[:,1] / ymax)])
94
+ data.ignore_outliers = None
95
+ data._ignore_outliers_spec_cache = None
96
+ data._points_for_plot = None
97
+ data._x_for_plot = None
98
+ data._y_for_plot = None
99
+ data._xlim = None
100
+ data._ylim = None
101
+
102
+ return datas
103
+
104
+
105
+
106
+ @classmethod
107
+ def make_axes_spec(cls, axes_labels, data_pool)->AxesSpec:
108
+ return AxesSpec(
109
+ x_axis_title=T,
110
+ y_axis_title=R,
111
+ major_grid=None,
112
+ major_tick=TickSpec(),
113
+ legend=LegendSpec(fontsize=5),
114
+ linewidth=1,
115
+ marker_size=2,
116
+ )
117
+
118
+
119
+ @classmethod
120
+ def make_figure_spec(cls,figure_labels, axes_pool:Iterable[Axes])->FigureSpec:
121
+ figure_name = figure_labels.brief_summary
122
+
123
+ return FigureSpec(
124
+ name=figure_name,
125
+ title=None,
126
+ figsize=FIGSIZE,
127
+ linestyle_cycle= ("-",),
128
+
129
+ linecolor_cycle = (
130
+ "#515151", "#F14040", "#1A6FDF", "#37AD6B", "#B177DE",
131
+ "#CC9900", "#00CBCC", "#7D4E4E", "#8E8E00", "#FB6501",
132
+ "#6699CC", "#6FB802", "#f04f76", "#f86a5a", "#fb8c3c",
133
+ "#fdbb2d", "#fcfdbf","#2B2E83", "#E6007A", "#005F5F",
134
+ "#1F3D2B", "#E8C6E8","#FAB3d1",
135
+ ),
136
+ linemarker_cycle = ("o",),
137
+ alpa_cycle = (1.0,),
138
+ )
139
+
140
+ @classmethod
141
+ def make_muti_axes_spec(cls, axes_pool:list[Axes])->MutiAxesSpec|FAIL|None:
142
+ return None
@@ -11,7 +11,7 @@ M = "DC Moment Free Ctr (emu)"
11
11
  H = "Magnetic Field (Oe)"
12
12
 
13
13
 
14
- class MT_origin:
14
+ class MT_original:
15
15
  data_summary_label_names = ["mass","H","cooling_type"]
16
16
  axes_label_names = ("material","date","raw_data", "H")
17
17
  figure_label_names = ("material","date", "raw_data","H")
@@ -252,7 +252,7 @@ wheels = [
252
252
 
253
253
  [[package]]
254
254
  name = "majoplot"
255
- version = "0.1.9"
255
+ version = "0.1.11"
256
256
  source = { editable = "." }
257
257
  dependencies = [
258
258
  { name = "matplotlib" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes