Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions script-gen-manager/src/instr_metadata/base_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub trait Metadata: Debug + Clone {
fn get_default(&self, key: &str) -> Option<&'static str>;
fn get_name(&self, key: &str) -> Option<&'static str>;
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata>;
fn get_overrange_scale(&self) -> f64;
}

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

impl BaseMetadata {
Expand Down Expand Up @@ -65,6 +67,7 @@ impl BaseMetadata {
let defaults = HashMap::new();
let mut names = HashMap::new();
let region_maps = HashMap::new();
let overrange_scale = 1.0;

//timing: source or measure delay type
options.insert(
Expand All @@ -85,6 +88,7 @@ impl BaseMetadata {
defaults,
names,
region_maps,
overrange_scale,
}
}

Expand All @@ -103,6 +107,10 @@ impl BaseMetadata {
pub fn add_region_map(&mut self, key: &'static str, region_map_metadata: RegionMapMetadata) {
self.region_maps.insert(key, region_map_metadata);
}

pub fn add_overrange_scale(&mut self, scale: f64) {
self.overrange_scale = scale;
}
}

impl Metadata for BaseMetadata {
Expand All @@ -127,6 +135,10 @@ impl Metadata for BaseMetadata {
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
self.region_maps.get(key).cloned()
}

fn get_overrange_scale(&self) -> f64 {
self.overrange_scale
}
}

impl Default for BaseMetadata {
Expand Down
8 changes: 7 additions & 1 deletion script-gen-manager/src/instr_metadata/mpsu50_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ impl Mpsu50Metadata {

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

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

base.add_overrange_scale(1.002);

Mpsu50Metadata {
base,
// Initialize additional properties
Expand Down Expand Up @@ -64,4 +66,8 @@ impl Metadata for Mpsu50Metadata {
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
self.base.get_region_map(key)
}

fn get_overrange_scale(&self) -> f64 {
self.base.get_overrange_scale()
}
}
6 changes: 6 additions & 0 deletions script-gen-manager/src/instr_metadata/msmu60_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ impl Msmu60Metadata {
region_map_metadata.add_region(1, -20.0, -1.5, 20.0, 1.5);
base.add_region_map("smu.region", region_map_metadata);

base.add_overrange_scale(1.01);

Msmu60Metadata {
base,
// Initialize additional properties
Expand Down Expand Up @@ -82,4 +84,8 @@ impl Metadata for Msmu60Metadata {
fn get_region_map(&self, key: &str) -> Option<RegionMapMetadata> {
self.base.get_region_map(key)
}

fn get_overrange_scale(&self) -> f64 {
self.base.get_overrange_scale()
}
}
9 changes: 8 additions & 1 deletion script-gen-manager/src/model/chan_data/channel_range.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ pub struct ChannelRange {
pub min: f64,
#[serde(skip)]
pub max: f64,
#[serde(skip)]
pub overrange_scale: f64,
}

impl ChannelRange {
Expand All @@ -22,6 +24,7 @@ impl ChannelRange {
unit: String::new(),
min: 0.0,
max: 0.0,
overrange_scale: 1.0,
}
}

Expand All @@ -33,6 +36,10 @@ impl ChannelRange {
self.max = max;
}

pub fn set_overrange_scale(&mut self, scale: f64) {
self.overrange_scale = scale;
}

pub fn limit(&mut self, value: f64) -> f64 {
let result = value;
if self.value == "AUTO" {
Expand All @@ -44,7 +51,7 @@ impl ChannelRange {
} else {
let scaled_value = self.get_scaled_value();
if let Some(scaled_value) = scaled_value {
let overrange_scaled_value = scaled_value * 1.01;
let overrange_scaled_value = scaled_value * self.overrange_scale;
if result < -overrange_scaled_value {
return -overrange_scaled_value;
} else if result > overrange_scaled_value {
Expand Down
14 changes: 14 additions & 0 deletions script-gen-manager/src/model/chan_data/default_channel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ impl CommonChanAttributes {
self.set_source_range(&device_metadata);
self.set_source_range_limits(&device_metadata);
self.set_source_range_value();
self.set_overrange_scale(&device_metadata);
self.validate_source_limits(&device_metadata);
}

Expand All @@ -132,6 +133,11 @@ impl CommonChanAttributes {
}
}

fn set_overrange_scale(&mut self, metadata: &MetadataEnum) {
let scale = self.get_overrange_scale(metadata);
self.source_range.set_overrange_scale(scale);
}

fn set_source_range_value(&mut self) {
if !self.source_range.range.contains(&self.source_range.value) {
let key = if self.source_function.value == BaseMetadata::FUNCTION_VOLTAGE.to_string() {
Expand Down Expand Up @@ -214,6 +220,14 @@ impl CommonChanAttributes {
}
}

fn get_overrange_scale(&self, metadata: &MetadataEnum) -> f64 {
match metadata {
MetadataEnum::Base(base_metadata) => base_metadata.get_overrange_scale(),
MetadataEnum::Msmu60(msmu60_metadata) => msmu60_metadata.get_overrange_scale(),
MetadataEnum::Mpsu50(mpsu50_metadata) => mpsu50_metadata.get_overrange_scale(),
}
}

fn get_range_defaults(&self, metadata: &MetadataEnum, key: &str) -> Option<&'static str> {
match metadata {
MetadataEnum::Base(base_metadata) => base_metadata.get_default(key),
Expand Down
Loading