majoplot 0.1.9__py3-none-any.whl → 0.1.11__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.
@@ -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":
@@ -7,7 +7,8 @@ FIGSIZE = (8, 6)
7
7
 
8
8
  T = "Temperature (K)"
9
9
  H = "Magnetic Field (Oe)"
10
- R = "Resistance (Ohms)"
10
+ R = "Resistivity (Ω·m)"
11
+ _headers = (T,R)
11
12
  RI ={
12
13
  1: {"R":"Bridge 1 Resistance (Ohms)", "I":"Bridge 1 Excitation (uA)"},
13
14
  2: {"R":"Bridge 2 Resistance (Ohms)", "I":"Bridge 2 Excitation (uA)"},
@@ -52,13 +53,20 @@ class RT:
52
53
  for H_stage, points in split_datas:
53
54
  for i in range(1,4):
54
55
  _headerTRI = (T,RI[i]["R"],RI[i]["I"])
55
- _headers = (T,RI[i]["R"])
56
56
  s_points = [ [point[headers[x]] for x in _headerTRI] for point in points]
57
- # clear null R points
57
+ # clear null Resistance points
58
58
  s_points = np.array([point for point in s_points if point[1]])
59
+ # calculate resistivity
60
+ cross_section = raw_labels[f"sample{i}_cross_section"].value * 1e-6
61
+ if cross_section <= 0:
62
+ cross_section = np.nan
63
+ length = raw_labels[f"sample{i}_length"].value * 1e-3
64
+ if length <= 0:
65
+ length = np.nan
66
+ r_points = np.column_stack([s_points[:,0], s_points[:,1] * cross_section / length])
59
67
  # record
60
- Imin = np.min(s_points[:,1])
61
- Imax = np.max(s_points[:,1])
68
+ Imin = np.min(s_points[:,2])
69
+ Imax = np.max(s_points[:,2])
62
70
  if (Imax - Imin) / Imax < 0.03:
63
71
  Irange = f"{np.mean(s_points[:,1]):.1e}"
64
72
  else:
@@ -76,8 +84,8 @@ class RT:
76
84
  datas.append(Data(
77
85
  labels=labels,
78
86
  _headers=_headers,
79
- points=s_points[:,0:2],
80
- ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=10),
87
+ points=r_points,
88
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-8,min_gap_multiple=10),
81
89
  ))
82
90
 
83
91
  return datas
@@ -0,0 +1,119 @@
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
+
17
+ class RT_Resistance:
18
+ data_summary_label_names = ["H"]
19
+ axes_label_names = ("date", "raw_data", "bridge", "sample_name")
20
+ figure_label_names = ("date", "raw_data", "bridge", "sample_name")
21
+ figure_summary_label_names = ("raw_data","bridge","sample_name")
22
+ max_axes_in_one_figure = 1
23
+ project_to_child_folder_label_names = {"date":"sample_name"}
24
+ parent_folder_name = "RT"
25
+
26
+ @classmethod
27
+ def preprocess(cls, raw_datas:list[Data])->list[Data]:
28
+ datas = []
29
+ for raw_data in raw_datas:
30
+ raw_labels = raw_data.labels
31
+ headers = raw_data.headers
32
+ raw_points = raw_data.points
33
+
34
+ # Split by H
35
+ split_datas = []
36
+
37
+ last_H_stage = round(raw_points[0][headers[H]])
38
+ current_points = [ last_H_stage, [ raw_points[0] ] ]
39
+
40
+ for point in raw_points[1:]:
41
+ cur_H_stage = round(point[headers[H]])
42
+ if cur_H_stage != last_H_stage:
43
+ split_datas.append(current_points)
44
+ last_H_stage = cur_H_stage
45
+ current_points = [ last_H_stage, [ point ] ]
46
+ else:
47
+ current_points[1].append(point)
48
+ else:
49
+ split_datas.append(current_points)
50
+
51
+ # 3 bridges
52
+ for H_stage, points in split_datas:
53
+ for i in range(1,4):
54
+ _headerTRI = (T,RI[i]["R"],RI[i]["I"])
55
+ _headers = (T,RI[i]["R"])
56
+ s_points = [ [point[headers[x]] for x in _headerTRI] for point in points]
57
+ # clear null R points
58
+ s_points = np.array([point for point in s_points if point[1]])
59
+ # record
60
+ Imin = np.min(s_points[:,2])
61
+ Imax = np.max(s_points[:,2])
62
+ if (Imax - Imin) / Imax < 0.03:
63
+ Irange = f"{np.mean(s_points[:,1]):.1e}"
64
+ else:
65
+ Irange = f"{Imin:.1e}~{Imax:.1e}"
66
+ labels = LabelDict()
67
+ labels["instrument"] = raw_labels["instrument"]
68
+ labels["raw_data"] = raw_labels["raw_data"]
69
+ labels["date"] = raw_labels["date"]
70
+ labels["bridge"] = LabelValue(i,unit="Bridge",unit_as_postfix=False)
71
+ labels["sample_name"] = raw_labels[f"sample{i}_name"]
72
+ labels["sample_units"] = raw_labels[f"sample{i}_units"]
73
+ labels["H"] = LabelValue(H_stage, unit="Oe")
74
+ labels["I_range"] = LabelValue(Irange,unit="μA")
75
+ labels.summary_names = cls.data_summary_label_names
76
+ datas.append(Data(
77
+ labels=labels,
78
+ _headers=_headers,
79
+ points=s_points[:,0:2],
80
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=10),
81
+ ))
82
+
83
+ return datas
84
+
85
+
86
+
87
+ @classmethod
88
+ def make_axes_spec(cls, axes_labels, data_pool)->AxesSpec:
89
+ return AxesSpec(
90
+ x_axis_title=T,
91
+ y_axis_title=R,
92
+ major_grid=None,
93
+ major_tick=TickSpec(),
94
+ legend=LegendSpec(fontsize=5),
95
+ )
96
+
97
+
98
+ @classmethod
99
+ def make_figure_spec(cls,figure_labels, axes_pool:Iterable[Axes])->FigureSpec:
100
+ figure_name = figure_labels.brief_summary
101
+
102
+ return FigureSpec(
103
+ name=figure_name,
104
+ title=None,
105
+ figsize=FIGSIZE,
106
+ linestyle_cycle= ("-",),
107
+ linecolor_cycle = (
108
+ "#2d0b59", "#3b0f6f", "#4a136e", "#5a176e", "#6a1c6e",
109
+ "#7a216f", "#8b2770", "#9b2d71", "#ac3372", "#bd3973",
110
+ "#ce4074", "#df4775", "#f04f76", "#f86a5a", "#fb8c3c",
111
+ "#fdbb2d", "#fcfdbf",
112
+ ),
113
+ linemarker_cycle = ("o","s","^","v","d","*","x","+"),
114
+ alpa_cycle = (1.0,),
115
+ )
116
+
117
+ @classmethod
118
+ def make_muti_axes_spec(cls, axes_pool:list[Axes])->MutiAxesSpec|FAIL|None:
119
+ return None
@@ -9,7 +9,7 @@ FIGSIZE = (8, 6)
9
9
  T = "Temperature (K)"
10
10
  M = "DC Moment Free Ctr (emu)"
11
11
  H = "Magnetic Field (Oe)"
12
- chi = "χ ( m³ / kg )"
12
+ chi = "χ ( cm³ / g )"
13
13
 
14
14
 
15
15
  class ChiT:
@@ -69,7 +69,7 @@ class ChiT:
69
69
  if mass == 0:
70
70
  mass = np.nan
71
71
  safe_H_stage = np.nan if H_stage == 0 else H_stage
72
- chi_points = np.column_stack([a_points[:,0], a_points[:,1] / safe_H_stage * 1e6 / mass])
72
+ chi_points = np.column_stack([a_points[:,0], a_points[:,1] / safe_H_stage * 1e3 / mass])
73
73
  datas.append(
74
74
  Data(
75
75
  labels=labels,
@@ -9,7 +9,7 @@ FIGSIZE = (8, 6)
9
9
  T = "Temperature (K)"
10
10
  M = "DC Moment Free Ctr (emu)"
11
11
  H = "Magnetic Field (Oe)"
12
- chi = "χ ( m³ / kg )"
12
+ chi = "χ ( cm³ / g )"
13
13
 
14
14
 
15
15
  class ChiT_onlyZFC:
@@ -70,7 +70,7 @@ class ChiT_onlyZFC:
70
70
  if mass == 0:
71
71
  mass = np.nan
72
72
  safe_H_stage = np.nan if H_stage == 0 else H_stage
73
- chi_points = np.column_stack([a_points[:,0], a_points[:,1] / safe_H_stage * 1e6 / mass])
73
+ chi_points = np.column_stack([a_points[:,0], a_points[:,1] / safe_H_stage * 1e3 / mass])
74
74
  datas.append(
75
75
  Data(
76
76
  labels=labels,
@@ -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")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: majoplot
3
- Version: 0.1.9
3
+ Version: 0.1.11
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
@@ -7,15 +7,16 @@ majoplot/app/gui.py,sha256=CpRg6LRI3dM2ALswnwz89KSKjONHRlfs69eO8P2VWYE,142
7
7
  majoplot/domain/base.py,sha256=JlkzZHSnXkh_C_l-ZxHrV7TbFcCEShD0mFnlu3lMUlc,14391
8
8
  majoplot/domain/muti_axes_spec.py,sha256=pF4Yy2x12QSFny5x18gave-f-ZYuJMW-czwwsJ-6Ths,6313
9
9
  majoplot/domain/utils.py,sha256=X4Wdab6kSBA3eBVuRzpz62Wj-1WTWZp4e9TcYMkGeb8,3332
10
- majoplot/domain/importers/PPMS_Resistivity.py,sha256=-1JbI93VQXK3vab89dmMX8NACtidjIUd9a2aNQH3G4M,4513
10
+ majoplot/domain/importers/PPMS_Resistivity.py,sha256=ME58Thg_N4tFQYPfnP1ZkiOP_vzYAevF-qSuxqWoAoc,7867
11
11
  majoplot/domain/importers/VSM.py,sha256=sEZsz_3n67jtPLy1-grP9A8K1RPVnwuQLMUSrLOtZUk,3576
12
12
  majoplot/domain/importers/XRD.py,sha256=_CN3jKLn4vZ3Oa2cm3IcH05R_mrao2so3VTVKVEND98,2840
13
- majoplot/domain/scenarios/PPMS_Resistivity/RT.py,sha256=ezP1savHiwKBSOTPq2rJrcxu5IwINvZnEgIVva5gkEE,4576
14
- majoplot/domain/scenarios/VSM/ChiT.py,sha256=RNpO4xInT0mRr90v4DEZt4K0m6p9cmJNNm7f6F-RN34,6643
15
- majoplot/domain/scenarios/VSM/ChiT_onlyZFC.py,sha256=gcnzmUn_B8EFEZigIUaqNz0deTM2KjtUgaak9kqdlKA,6568
13
+ majoplot/domain/scenarios/PPMS_Resistivity/RT.py,sha256=7bu2nVYbIGLSmhFkL85vdOzkHixiFlp_C-IpfC35CFo,5027
14
+ majoplot/domain/scenarios/PPMS_Resistivity/RT_Resistance.py,sha256=04u09JUWxczWyapaElQ42cEdyLMGSb2HJ4NJ7Tww4T0,4587
15
+ majoplot/domain/scenarios/VSM/ChiT.py,sha256=NcPxf1-OIFrRNBo1uDaU0LzpaKXU_EUDDo9_78Pk2Vs,6643
16
+ majoplot/domain/scenarios/VSM/ChiT_onlyZFC.py,sha256=IFhw6kCha0OxDZ5AgWeCb9UwSFJ1JOrjxQ3N2lH4Kis,6568
16
17
  majoplot/domain/scenarios/VSM/MT.py,sha256=lnqEi6sw6pzIOaGoqkC5OWJQzROWXL32-YvtOH__Rvg,4550
17
18
  majoplot/domain/scenarios/VSM/MT_insert.py,sha256=goaB0Y3dUaerBv3Z4DX8S2ixerGBIz4D1e5k6jpAnJc,4711
18
- majoplot/domain/scenarios/VSM/MT_origin.py,sha256=6uxvv1YWurHMI8nVspwqqasXd_4pyOxwTLpqOzCwe3Q,4313
19
+ majoplot/domain/scenarios/VSM/MT_original.py,sha256=JiGXVyfM7plmp5TSRm7gyTnXJxeO33o0zYsbwID3A8A,4315
19
20
  majoplot/domain/scenarios/VSM/MT_reliability_analysis.py,sha256=eACa4Z5Q5Uew_m_kGSmsQ4jLy5CIpTrASx7VV-a7nBY,5109
20
21
  majoplot/domain/scenarios/XRD/Compare.py,sha256=YvyrnYyFzzlp5DK6Unv75AFuf5fbRgbCumy3_zy6XNQ,3870
21
22
  majoplot/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -23,8 +24,8 @@ majoplot/gui/main.py,sha256=v5pyi-Gb26o_lmVM4GaM_Tt_-1rTTKVRekgOcBochA0,20291
23
24
  majoplot/infra/plotters/matplot.py,sha256=DE3nCfFjL9FxNbuEgggJyXlolkP1nWKmNwJElt1bgHw,12281
24
25
  majoplot/infra/plotters/origin.py,sha256=xB80d216pmo_mXo5Lx8sGQrjQC6N0NljzzoMNG37w1g,39034
25
26
  majoplot/infra/plotters/origin_utils/originlab_type_library.py,sha256=zxOxF7nB57zwnXSaFSoCUV64ZTHhDBDRv57exatiBoU,37398
26
- majoplot-0.1.9.dist-info/METADATA,sha256=R6i7A7vNOszXycQVcT0u6mkdeE1_SyhxxJj0sKTUWkY,2877
27
- majoplot-0.1.9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
28
- majoplot-0.1.9.dist-info/entry_points.txt,sha256=zEiPXZtNyJQMvVS-Zl9psx8SpTafOcs8F9S8xGtOaBM,52
29
- majoplot-0.1.9.dist-info/licenses/LICENSE,sha256=fj2NqLupbHWfA5W-8tqCpT5yjO8A4F1HcKnt_maww20,1070
30
- majoplot-0.1.9.dist-info/RECORD,,
27
+ majoplot-0.1.11.dist-info/METADATA,sha256=t37ChgeAnwgtB4EIiSIGchpk5ZFivgwoiZfJJ-vbL_8,2878
28
+ majoplot-0.1.11.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
29
+ majoplot-0.1.11.dist-info/entry_points.txt,sha256=zEiPXZtNyJQMvVS-Zl9psx8SpTafOcs8F9S8xGtOaBM,52
30
+ majoplot-0.1.11.dist-info/licenses/LICENSE,sha256=fj2NqLupbHWfA5W-8tqCpT5yjO8A4F1HcKnt_maww20,1070
31
+ majoplot-0.1.11.dist-info/RECORD,,