Skip to content

Commit 69b180a

Browse files
MPSU50-2ST source voltage overrange case (#21)
Allow user to set voltage till 50.1V for MPSU50-2ST. This PR also includes code enhancements to handle overrange scenarios for both SMU and PSU.
1 parent 9c5543b commit 69b180a

File tree

5 files changed

+47
-2
lines changed

5 files changed

+47
-2
lines changed

script-gen-manager/src/instr_metadata/base_metadata.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub trait Metadata: Debug + Clone {
1717
fn get_default(&self, key: &str) -> Option<&'static str>;
1818
fn get_name(&self, key: &str) -> Option<&'static str>;
1919
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata>;
20+
fn get_overrange_scale(&self) -> f64;
2021
}
2122

2223
/// A struct that holds base metadata information common to all Trebuchet instruments.
@@ -27,6 +28,7 @@ pub struct BaseMetadata {
2728
defaults: HashMap<&'static str, &'static str>,
2829
names: HashMap<&'static str, &'static str>,
2930
region_maps: HashMap<&'static str, RegionMapMetadata>,
31+
overrange_scale: f64,
3032
}
3133

3234
impl BaseMetadata {
@@ -65,6 +67,7 @@ impl BaseMetadata {
6567
let defaults = HashMap::new();
6668
let mut names = HashMap::new();
6769
let region_maps = HashMap::new();
70+
let overrange_scale = 1.0;
6871

6972
//timing: source or measure delay type
7073
options.insert(
@@ -85,6 +88,7 @@ impl BaseMetadata {
8588
defaults,
8689
names,
8790
region_maps,
91+
overrange_scale,
8892
}
8993
}
9094

@@ -103,6 +107,10 @@ impl BaseMetadata {
103107
pub fn add_region_map(&mut self, key: &'static str, region_map_metadata: RegionMapMetadata) {
104108
self.region_maps.insert(key, region_map_metadata);
105109
}
110+
111+
pub fn add_overrange_scale(&mut self, scale: f64) {
112+
self.overrange_scale = scale;
113+
}
106114
}
107115

108116
impl Metadata for BaseMetadata {
@@ -127,6 +135,10 @@ impl Metadata for BaseMetadata {
127135
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
128136
self.region_maps.get(key).cloned()
129137
}
138+
139+
fn get_overrange_scale(&self) -> f64 {
140+
self.overrange_scale
141+
}
130142
}
131143

132144
impl Default for BaseMetadata {

script-gen-manager/src/instr_metadata/mpsu50_metadata.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl Mpsu50Metadata {
2222

2323
//TODO: verify for Trebuchet PSU (model: MPSU50-2ST)
2424
// Add ranges
25-
base.add_range("source.levelv".to_string(), -50.0, 50.0);
25+
base.add_range("source.levelv".to_string(), -50.1, 50.1);
2626
base.add_range("source.leveli".to_string(), -5.0, 5.0);
2727

2828
base.add_range("source.limiti".to_string(), 0.01, 5.1);
@@ -37,6 +37,8 @@ impl Mpsu50Metadata {
3737
region_map_metadata.add_region(1, 0.0, 0.0, -50.0, -1.0);
3838
base.add_region_map("psu.region", region_map_metadata);
3939

40+
base.add_overrange_scale(1.002);
41+
4042
Mpsu50Metadata {
4143
base,
4244
// Initialize additional properties
@@ -64,4 +66,8 @@ impl Metadata for Mpsu50Metadata {
6466
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
6567
self.base.get_region_map(key)
6668
}
69+
70+
fn get_overrange_scale(&self) -> f64 {
71+
self.base.get_overrange_scale()
72+
}
6773
}

script-gen-manager/src/instr_metadata/msmu60_metadata.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ impl Msmu60Metadata {
5555
region_map_metadata.add_region(1, -20.0, -1.5, 20.0, 1.5);
5656
base.add_region_map("smu.region", region_map_metadata);
5757

58+
base.add_overrange_scale(1.01);
59+
5860
Msmu60Metadata {
5961
base,
6062
// Initialize additional properties
@@ -82,4 +84,8 @@ impl Metadata for Msmu60Metadata {
8284
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
8385
self.base.get_region_map(key)
8486
}
87+
88+
fn get_overrange_scale(&self) -> f64 {
89+
self.base.get_overrange_scale()
90+
}
8591
}

script-gen-manager/src/model/chan_data/channel_range.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ pub struct ChannelRange {
1212
pub min: f64,
1313
#[serde(skip)]
1414
pub max: f64,
15+
#[serde(skip)]
16+
pub overrange_scale: f64,
1517
}
1618

1719
impl ChannelRange {
@@ -22,6 +24,7 @@ impl ChannelRange {
2224
unit: String::new(),
2325
min: 0.0,
2426
max: 0.0,
27+
overrange_scale: 1.0,
2528
}
2629
}
2730

@@ -33,6 +36,10 @@ impl ChannelRange {
3336
self.max = max;
3437
}
3538

39+
pub fn set_overrange_scale(&mut self, scale: f64) {
40+
self.overrange_scale = scale;
41+
}
42+
3643
pub fn limit(&mut self, value: f64) -> f64 {
3744
let result = value;
3845
if self.value == "AUTO" {
@@ -44,7 +51,7 @@ impl ChannelRange {
4451
} else {
4552
let scaled_value = self.get_scaled_value();
4653
if let Some(scaled_value) = scaled_value {
47-
let overrange_scaled_value = scaled_value * 1.01;
54+
let overrange_scaled_value = scaled_value * self.overrange_scale;
4855
if result < -overrange_scaled_value {
4956
return -overrange_scaled_value;
5057
} else if result > overrange_scaled_value {

script-gen-manager/src/model/chan_data/default_channel.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ impl CommonChanAttributes {
107107
self.set_source_range(&device_metadata);
108108
self.set_source_range_limits(&device_metadata);
109109
self.set_source_range_value();
110+
self.set_overrange_scale(&device_metadata);
110111
self.validate_source_limits(&device_metadata);
111112
}
112113

@@ -132,6 +133,11 @@ impl CommonChanAttributes {
132133
}
133134
}
134135

136+
fn set_overrange_scale(&mut self, metadata: &MetadataEnum) {
137+
let scale = self.get_overrange_scale(metadata);
138+
self.source_range.set_overrange_scale(scale);
139+
}
140+
135141
fn set_source_range_value(&mut self) {
136142
if !self.source_range.range.contains(&self.source_range.value) {
137143
let key = if self.source_function.value == BaseMetadata::FUNCTION_VOLTAGE.to_string() {
@@ -214,6 +220,14 @@ impl CommonChanAttributes {
214220
}
215221
}
216222

223+
fn get_overrange_scale(&self, metadata: &MetadataEnum) -> f64 {
224+
match metadata {
225+
MetadataEnum::Base(base_metadata) => base_metadata.get_overrange_scale(),
226+
MetadataEnum::Msmu60(msmu60_metadata) => msmu60_metadata.get_overrange_scale(),
227+
MetadataEnum::Mpsu50(mpsu50_metadata) => mpsu50_metadata.get_overrange_scale(),
228+
}
229+
}
230+
217231
fn get_range_defaults(&self, metadata: &MetadataEnum, key: &str) -> Option<&'static str> {
218232
match metadata {
219233
MetadataEnum::Base(base_metadata) => base_metadata.get_default(key),

0 commit comments

Comments
 (0)