majoplot 0.1.11__py3-none-any.whl → 0.1.12__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.
@@ -7,8 +7,7 @@ FIGSIZE = (8, 6)
7
7
 
8
8
  T = "Temperature (K)"
9
9
  H = "Magnetic Field (Oe)"
10
- R = "Resistivity (Ω·m)"
11
- _headers = (T,R)
10
+ R = "Resistance (Ohms)"
12
11
  RI ={
13
12
  1: {"R":"Bridge 1 Resistance (Ohms)", "I":"Bridge 1 Excitation (uA)"},
14
13
  2: {"R":"Bridge 2 Resistance (Ohms)", "I":"Bridge 2 Excitation (uA)"},
@@ -53,17 +52,10 @@ class RT:
53
52
  for H_stage, points in split_datas:
54
53
  for i in range(1,4):
55
54
  _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 Resistance points
57
+ # clear null R 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])
67
59
  # record
68
60
  Imin = np.min(s_points[:,2])
69
61
  Imax = np.max(s_points[:,2])
@@ -84,8 +76,8 @@ class RT:
84
76
  datas.append(Data(
85
77
  labels=labels,
86
78
  _headers=_headers,
87
- points=r_points,
88
- ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-8,min_gap_multiple=10),
79
+ points=s_points[:,0:2],
80
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=10),
89
81
  ))
90
82
 
91
83
  return datas
@@ -100,6 +92,8 @@ class RT:
100
92
  major_grid=None,
101
93
  major_tick=TickSpec(),
102
94
  legend=LegendSpec(fontsize=5),
95
+ linewidth=1,
96
+ marker_size=2,
103
97
  )
104
98
 
105
99
 
@@ -112,13 +106,15 @@ class RT:
112
106
  title=None,
113
107
  figsize=FIGSIZE,
114
108
  linestyle_cycle= ("-",),
109
+
115
110
  linecolor_cycle = (
116
- "#2d0b59", "#3b0f6f", "#4a136e", "#5a176e", "#6a1c6e",
117
- "#7a216f", "#8b2770", "#9b2d71", "#ac3372", "#bd3973",
118
- "#ce4074", "#df4775", "#f04f76", "#f86a5a", "#fb8c3c",
119
- "#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",
120
116
  ),
121
- linemarker_cycle = ("o","s","^","v","d","*","x","+"),
117
+ linemarker_cycle = ("o",),
122
118
  alpa_cycle = (1.0,),
123
119
  )
124
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
@@ -13,8 +13,13 @@ RI ={
13
13
  2: {"R":"Bridge 2 Resistance (Ohms)", "I":"Bridge 2 Excitation (uA)"},
14
14
  3: {"R":"Bridge 3 Resistance (Ohms)", "I":"Bridge 3 Excitation (uA)"},
15
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
+ }
16
21
 
17
- class RT_Resistance:
22
+ class RT_normalized:
18
23
  data_summary_label_names = ["H"]
19
24
  axes_label_names = ("date", "raw_data", "bridge", "sample_name")
20
25
  figure_label_names = ("date", "raw_data", "bridge", "sample_name")
@@ -52,7 +57,7 @@ class RT_Resistance:
52
57
  for H_stage, points in split_datas:
53
58
  for i in range(1,4):
54
59
  _headerTRI = (T,RI[i]["R"],RI[i]["I"])
55
- _headers = (T,RI[i]["R"])
60
+ _headers = (T,RI_normalized[i]["R"])
56
61
  s_points = [ [point[headers[x]] for x in _headerTRI] for point in points]
57
62
  # clear null R points
58
63
  s_points = np.array([point for point in s_points if point[1]])
@@ -63,6 +68,7 @@ class RT_Resistance:
63
68
  Irange = f"{np.mean(s_points[:,1]):.1e}"
64
69
  else:
65
70
  Irange = f"{Imin:.1e}~{Imax:.1e}"
71
+
66
72
  labels = LabelDict()
67
73
  labels["instrument"] = raw_labels["instrument"]
68
74
  labels["raw_data"] = raw_labels["raw_data"]
@@ -77,9 +83,22 @@ class RT_Resistance:
77
83
  labels=labels,
78
84
  _headers=_headers,
79
85
  points=s_points[:,0:2],
80
- ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=10),
86
+ ignore_outliers=IgnoreOutlierSpec(min_gap_base=1e-4,min_gap_multiple=5),
81
87
  ))
82
-
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
+
83
102
  return datas
84
103
 
85
104
 
@@ -92,6 +111,8 @@ class RT_Resistance:
92
111
  major_grid=None,
93
112
  major_tick=TickSpec(),
94
113
  legend=LegendSpec(fontsize=5),
114
+ linewidth=1,
115
+ marker_size=2,
95
116
  )
96
117
 
97
118
 
@@ -104,13 +125,15 @@ class RT_Resistance:
104
125
  title=None,
105
126
  figsize=FIGSIZE,
106
127
  linestyle_cycle= ("-",),
128
+
107
129
  linecolor_cycle = (
108
- "#2d0b59", "#3b0f6f", "#4a136e", "#5a176e", "#6a1c6e",
109
- "#7a216f", "#8b2770", "#9b2d71", "#ac3372", "#bd3973",
110
- "#ce4074", "#df4775", "#f04f76", "#f86a5a", "#fb8c3c",
111
- "#fdbb2d", "#fcfdbf",
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",
112
135
  ),
113
- linemarker_cycle = ("o","s","^","v","d","*","x","+"),
136
+ linemarker_cycle = ("o",),
114
137
  alpa_cycle = (1.0,),
115
138
  )
116
139
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: majoplot
3
- Version: 0.1.11
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
@@ -10,8 +10,9 @@ majoplot/domain/utils.py,sha256=X4Wdab6kSBA3eBVuRzpz62Wj-1WTWZp4e9TcYMkGeb8,3332
10
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=7bu2nVYbIGLSmhFkL85vdOzkHixiFlp_C-IpfC35CFo,5027
14
- majoplot/domain/scenarios/PPMS_Resistivity/RT_Resistance.py,sha256=04u09JUWxczWyapaElQ42cEdyLMGSb2HJ4NJ7Tww4T0,4587
13
+ majoplot/domain/scenarios/PPMS_Resistivity/RT.py,sha256=DzIOqy8BlsHWKMLc6a-LF-4lwF3p51Vs3rZcTXRW2UA,4684
14
+ majoplot/domain/scenarios/PPMS_Resistivity/RT_Resistivity.py,sha256=Pq5ANx0_lk6m5trJwxK8lywMzHubrfXEcLysMfhii6U,5462
15
+ majoplot/domain/scenarios/PPMS_Resistivity/RT_normalized.py,sha256=UnJqY3KCPDl66rLWxQ914pmW4s4_Qmv82HQgupO8zxg,5458
15
16
  majoplot/domain/scenarios/VSM/ChiT.py,sha256=NcPxf1-OIFrRNBo1uDaU0LzpaKXU_EUDDo9_78Pk2Vs,6643
16
17
  majoplot/domain/scenarios/VSM/ChiT_onlyZFC.py,sha256=IFhw6kCha0OxDZ5AgWeCb9UwSFJ1JOrjxQ3N2lH4Kis,6568
17
18
  majoplot/domain/scenarios/VSM/MT.py,sha256=lnqEi6sw6pzIOaGoqkC5OWJQzROWXL32-YvtOH__Rvg,4550
@@ -24,8 +25,8 @@ majoplot/gui/main.py,sha256=v5pyi-Gb26o_lmVM4GaM_Tt_-1rTTKVRekgOcBochA0,20291
24
25
  majoplot/infra/plotters/matplot.py,sha256=DE3nCfFjL9FxNbuEgggJyXlolkP1nWKmNwJElt1bgHw,12281
25
26
  majoplot/infra/plotters/origin.py,sha256=xB80d216pmo_mXo5Lx8sGQrjQC6N0NljzzoMNG37w1g,39034
26
27
  majoplot/infra/plotters/origin_utils/originlab_type_library.py,sha256=zxOxF7nB57zwnXSaFSoCUV64ZTHhDBDRv57exatiBoU,37398
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,,
28
+ majoplot-0.1.12.dist-info/METADATA,sha256=YThy-qfUqKVRb5MyaVBgVNo-ySaCV4u1mkdkACo6Gmc,2878
29
+ majoplot-0.1.12.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
30
+ majoplot-0.1.12.dist-info/entry_points.txt,sha256=zEiPXZtNyJQMvVS-Zl9psx8SpTafOcs8F9S8xGtOaBM,52
31
+ majoplot-0.1.12.dist-info/licenses/LICENSE,sha256=fj2NqLupbHWfA5W-8tqCpT5yjO8A4F1HcKnt_maww20,1070
32
+ majoplot-0.1.12.dist-info/RECORD,,