quantrs2_circuit/scirs2_pulse_control_enhanced/
pulses.rs1use scirs2_core::Complex64;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
9pub struct PulseLibrary {
10 pub gaussian: GaussianPulse,
11 pub drag: DRAGPulse,
12 pub cosine: CosinePulse,
13 pub erf: ErfPulse,
14 pub sech: SechPulse,
15 pub custom_shapes: HashMap<String, CustomPulseShape>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct GaussianPulse {
21 pub sigma: f64,
22 pub truncation: f64,
23}
24
25impl Default for GaussianPulse {
26 fn default() -> Self {
27 Self {
28 sigma: 10e-9,
29 truncation: 4.0,
30 }
31 }
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct DRAGPulse {
37 pub gaussian_params: GaussianPulse,
38 pub beta: f64,
39 pub anharmonicity: f64,
40}
41
42impl Default for DRAGPulse {
43 fn default() -> Self {
44 Self {
45 gaussian_params: GaussianPulse::default(),
46 beta: 0.1,
47 anharmonicity: -300e6,
48 }
49 }
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct CosinePulse {
55 pub rise_time_fraction: f64,
56}
57
58impl Default for CosinePulse {
59 fn default() -> Self {
60 Self {
61 rise_time_fraction: 0.1,
62 }
63 }
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct ErfPulse {
69 pub rise_time: f64,
70 pub fall_time: f64,
71}
72
73impl Default for ErfPulse {
74 fn default() -> Self {
75 Self {
76 rise_time: 2e-9,
77 fall_time: 2e-9,
78 }
79 }
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct SechPulse {
85 pub bandwidth: f64,
86 pub truncation: f64,
87}
88
89impl Default for SechPulse {
90 fn default() -> Self {
91 Self {
92 bandwidth: 100e6,
93 truncation: 4.0,
94 }
95 }
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct CustomPulseShape {
101 pub name: String,
102 pub samples: Vec<Complex64>,
103 pub parametric_form: Option<String>,
104}