pub fn plotly_spectra(path: &std::path::Path, tof_len: Option<i64>) -> Result<(), Box<dyn Error>> { let base_name = path.file_stem().unwrap().to_str().unwrap(); let spectrum_file = path.with_file_name(base_name.to_owned() + "_report_spectrum.html"); let mut plot = Plot::new(); let layout = Layout::new() .x_axis(Axis::new().title(Title::new("Time (ns)"))) .y_axis(Axis::new().title(Title::new("Pixels activated"))); plot.set_layout(layout); // this is backwards -> TODO: we should pass the data to this function let (time_axis, intensity_axis) = mass::spectrum(path, tof_len)?; let (time_axis, intensity_axis) = mass::zero_pad(&time_axis, &intensity_axis); let trace1 = Scatter::new(time_axis.clone(), intensity_axis.clone()) .name("Full spectrum") .mode(Mode::Lines); plot.add_trace(trace1); let full_csv_file = path.with_file_name(base_name.to_owned() + "_report_full_spectrum.csv"); let csv_strings: Vec<String> = time_axis.iter().zip(&intensity_axis).map(|(t, i)| format!("{},{}", t, i)).collect(); let mut file = std::fs::File::create(full_csv_file).unwrap(); // scope / file dropped at end of fn writeln!(file, "{}", csv_strings.join("\n")).unwrap(); plot.to_html(spectrum_file); Ok(()) }
时间: 2024-04-17 14:23:01 浏览: 141
这段代码定义了一个名为 `plotly_spectra` 的公共函数,用于绘制质谱图。
函数接受一个 `path` 参数,表示文件路径,以及一个可选的 `tof_len` 参数,表示 TOF(飞行时间)的长度。
首先,通过 `path.file_stem()` 获取文件名的 stem(不包含扩展名部分),然后通过 `to_str()` 转换为字符串类型,并使用 `unwrap()` 解包获取字符串值,并将其赋值给 `base_name` 变量。
接下来,通过将 `base_name` 和 "_report_spectrum.html" 拼接起来,创建一个新的文件路径 `spectrum_file`。
然后,创建一个 `Plot` 对象,并创建一个包含 x 轴和 y 轴标题的 `Layout` 对象,***
相关问题
pub fn plotly_spectra(path: &std::path::Path, tof_len: Option<i64>) -> Result<(), Box<dyn Error>> { let base_name = path.file_stem().unwrap().to_str().unwrap(); let spectrum_file = path.with_file_name(base_name.to_owned() + "_report_spectrum.html"); let mut plot = Plot::new(); let layout = Layout::new() .x_axis(Axis::new().title(Title::new("Time (ns)"))) .y_axis(Axis::new().title(Title::new("Pixels activated"))); plot.set_layout(layout);
这段代码定义了一个名为 `plotly_spectra` 的函数,用于绘制质谱图。
函数接受一个 `path` 参数,表示文件路径,以及一个可选的 `tof_len` 参数,表示 TOF(飞行时间)的长度。
首先,通过 `path.file_stem()` 获取文件名的 stem(不包含扩展名部分),然后通过 `unwrap()` 解包获取一个 `OsStr` 类型的值。接着,使用 `to_str()` 将其转换为字符串类型,并再次使用 `unwrap()` 解包获取字符串值,并将其赋值给 `base_name` 变量。
接下来,通过将 `base_name` 和 "_report_spectrum.html" 拼接起来,创建一个新的文件路径 `spectrum_file`。
然后,创建一个 `Plot` 对象,并创建一个包含 x 轴和 y 轴标题的 `Layout` 对象。x 轴标题为 "Time (ns)",y 轴标题为 "Pixels activated"。
最后,使用 `set_layout()` 方法将 `layout` 应用到 `plot` 对象中。
// For quick plotting of the mass spectrum if path.extension() == Some(&std::ffi::OsString::from("tpx3c")) { let now = std::time::Instant::now(); writer::plotly_spectra(&path, Some(tof_pulse_length)); println!("plotly took {} ms", now.elapsed().as_millis()); } let now = std::time::Instant::now();
这段代码包含了一个条件判断语句和两个计时的操作。
首先,使用 `path.extension()` 获取 `path` 的扩展名,并通过 `Some(&std::ffi::OsString::from("tpx3c"))` 创建了一个 `Some` 枚举值,该枚举值包含一个 `OsString` 类型的对象,表示扩展名为 "tpx3c"。
然后,将该扩展名与 `path.extension()` 返回的结果进行比较。如果它们相等,则进入条件语句块。
在条件语句块中,首先使用 `std::time::Instant::now()` 创建一个 `Instant` 类型的对象 `now`,表示当前时间的快照。
接下来,调用 `writer::plotly_spectra(&path, Some(tof_pulse_length))` 方法进行质谱图的绘制,其中 `&path` 是路径参数,`Some(tof_pulse_length)` 是一个可选参数。
然后,使用 `now.elapsed().as_millis()` 获取从 `now` 到当前时间的经过时间,并调用 `println!()` 打印出经过的时间,并附加了一个字符串 "plotly took {} ms"。`now.elapsed().as_millis()` 返回的是一个 `Duration` 类型的值,通过调用 `as_millis()` 方法将其转换为毫秒。
接着,使用 `std::time::Instant::now()` 创建另一个 `Instant` 类型的对象 `now`,表示当前时间的快照。这是为了计算下一个时间间隔的经过时间。
请注意,这段代码中的 `writer::plotly_spectra()` 和 `println!()` 可能是其他地方定义的函数,而且这里也没有提供完整的代码,所以无法提供更详细的解释。如果需要更多信息,请提供完整的代码或更多上下文。
阅读全文