1use crate::prelude::*;
4use crate::sirius_config::SiriusConfig;
5use crate::traits::IntoDefault;
6
7#[derive(Default)]
9pub struct SiriusBuilder<V: Version> {
10 config: SiriusConfig<V>,
11}
12
13impl SiriusBuilder<Version5> {
16 pub fn maximal_mz(mut self, maximal_mz: f64) -> Result<Self, String> {
38 if maximal_mz < 0.0 {
39 return Err(format!(
40 concat!("Maximal m/z ratio must be positive. ", "You provided {}."),
41 maximal_mz
42 ));
43 }
44 if maximal_mz == 0.0 {
45 return Err("Maximal m/z ratio cannot be 0".to_string());
46 }
47 if maximal_mz.is_nan() {
48 return Err("Maximal m/z ratio cannot be NaN".to_string());
49 }
50 if maximal_mz.is_infinite() {
51 return Err("Maximal m/z ratio cannot be infinite".to_string());
52 }
53
54 self.config
55 .add_core_parameter(CoreV5::MaximalMz(maximal_mz))?;
56 Ok(self)
57 }
58
59 pub fn max_cpus(mut self, n_cores: usize) -> Result<Self, String> {
70 self.config.add_core_parameter(CoreV5::NCpus(n_cores))?;
71 Ok(self)
72 }
73
74 pub fn isotope_settings_filter(
86 mut self,
87 isotope_settings_filter: bool,
88 ) -> Result<Self, String> {
89 self.config
90 .add_config_parameter(ConfigV5::IsotopeSettingsFilter(isotope_settings_filter))?;
91 Ok(self)
92 }
93
94 pub fn formula_search_db(
107 mut self,
108 formula_search_db: crate::sirius_types::DBVector,
109 ) -> Result<Self, String> {
110 self.config
111 .add_config_parameter(ConfigV5::FormulaSearchDB(formula_search_db))?;
112 Ok(self)
113 }
114
115 pub fn structure_search_db(
126 mut self,
127 structure_search_db: crate::sirius_types::DBVector,
128 ) -> Result<Self, String> {
129 self.config
130 .add_config_parameter(ConfigV5::StructureSearchDB(structure_search_db))?;
131 Ok(self)
132 }
133
134 pub fn timeout_seconds_per_tree(
145 mut self,
146 timeout_seconds_per_tree: u32,
147 ) -> Result<Self, String> {
148 self.config
149 .add_config_parameter(ConfigV5::TimeoutSecondsPerTree(timeout_seconds_per_tree))?;
150 Ok(self)
151 }
152
153 pub fn number_of_candidates(mut self, number_of_candidates: u32) -> Result<Self, String> {
157 self.config
158 .add_config_parameter(ConfigV5::NumberOfCandidates(number_of_candidates))?;
159 Ok(self)
160 }
161
162 pub fn number_of_candidates_per_ion(
166 mut self,
167 number_of_candidates_per_ion: u32,
168 ) -> Result<Self, String> {
169 self.config
170 .add_config_parameter(ConfigV5::NumberOfCandidatesPerIon(
171 number_of_candidates_per_ion,
172 ))?;
173 Ok(self)
174 }
175
176 pub fn number_of_structure_candidates(
180 mut self,
181 number_of_structure_candidates: u32,
182 ) -> Result<Self, String> {
183 self.config
184 .add_config_parameter(ConfigV5::NumberOfStructureCandidates(
185 number_of_structure_candidates,
186 ))?;
187 Ok(self)
188 }
189
190 pub fn recompute_results(mut self, recompute_results: bool) -> Result<Self, String> {
194 self.config
195 .add_config_parameter(ConfigV5::RecomputeResults(recompute_results))?;
196 Ok(self)
197 }
198
199 pub fn print_citations(mut self, print_citations: bool) -> Result<Self, String> {
203 self.config
204 .add_config_parameter(ConfigV5::PrintCitations(print_citations))?;
205 Ok(self)
206 }
207
208 pub fn timeout_seconds_per_instance(
216 mut self,
217 timeout_seconds_per_instance: u32,
218 ) -> Result<Self, String> {
219 self.config
220 .add_config_parameter(ConfigV5::TimeoutSecondsPerInstance(
221 timeout_seconds_per_instance,
222 ))?;
223 Ok(self)
224 }
225
226 pub fn formula_result_threshold(
231 mut self,
232 formula_result_threshold: bool,
233 ) -> Result<Self, String> {
234 self.config
235 .add_config_parameter(ConfigV5::FormulaResultThreshold(formula_result_threshold))?;
236 Ok(self)
237 }
238
239 pub fn inject_el_gordo_compounds(
246 mut self,
247 inject_el_gordo_compounds: bool,
248 ) -> Result<Self, String> {
249 self.config
250 .add_config_parameter(ConfigV5::InjectElGordoCompounds(inject_el_gordo_compounds))?;
251 Ok(self)
252 }
253
254 pub fn median_noise_intensity(mut self, median_noise_intensity: f32) -> Result<Self, String> {
258 if median_noise_intensity < 0.0 {
259 return Err(format!(
260 concat!(
261 "Median noise intensity must be positive. ",
262 "You provided {}."
263 ),
264 median_noise_intensity
265 ));
266 }
267 self.config
268 .add_config_parameter(ConfigV5::MedianNoiseIntensity(median_noise_intensity))?;
269 Ok(self)
270 }
271
272 pub fn ms1_absolute_intensity_error(
280 mut self,
281 ms1_absolute_intensity_error: f32,
282 ) -> Result<Self, String> {
283 if ms1_absolute_intensity_error < 0.0 {
284 return Err(format!(
285 concat!(
286 "MS1 absolute intensity error must be positive. ",
287 "You provided {}."
288 ),
289 ms1_absolute_intensity_error
290 ));
291 }
292 self.config
293 .add_config_parameter(ConfigV5::MS1AbsoluteIntensityError(
294 ms1_absolute_intensity_error,
295 ))?;
296 Ok(self)
297 }
298
299 pub fn ms1_minimal_intensity_to_consider(
306 mut self,
307 ms1_minimal_intensity_to_consider: f32,
308 ) -> Result<Self, String> {
309 if ms1_minimal_intensity_to_consider < 0.0 {
310 return Err(format!(
311 concat!(
312 "MS1 minimal intensity to consider must be positive. ",
313 "You provided {}."
314 ),
315 ms1_minimal_intensity_to_consider
316 ));
317 }
318 self.config
319 .add_config_parameter(ConfigV5::MS1MinimalIntensityToConsider(
320 ms1_minimal_intensity_to_consider,
321 ))?;
322 Ok(self)
323 }
324
325 pub fn ms1_relative_intensity_error(
333 mut self,
334 ms1_relative_intensity_error: f32,
335 ) -> Result<Self, String> {
336 if ms1_relative_intensity_error < 0.0 {
337 return Err(format!(
338 concat!(
339 "MS1 relative intensity error must be positive. ",
340 "You provided {}."
341 ),
342 ms1_relative_intensity_error
343 ));
344 }
345 self.config
346 .add_config_parameter(ConfigV5::MS1RelativeIntensityError(
347 ms1_relative_intensity_error,
348 ))?;
349 Ok(self)
350 }
351
352 pub fn noise_threshold_settings_intensity_threshold(
356 mut self,
357 noise_threshold_settings_intensity_threshold: f32,
358 ) -> Result<Self, String> {
359 if noise_threshold_settings_intensity_threshold < 0.0 {
360 return Err(format!(
361 concat!(
362 "Noise threshold settings intensity threshold must be positive. ",
363 "You provided {}."
364 ),
365 noise_threshold_settings_intensity_threshold
366 ));
367 }
368 self.config
369 .add_config_parameter(ConfigV5::NoiseThresholdSettingsIntensityThreshold(
370 noise_threshold_settings_intensity_threshold,
371 ))?;
372 Ok(self)
373 }
374
375 pub fn noise_threshold_settings_maximal_number_of_peaks(
379 mut self,
380 noise_threshold_settings_maximal_number_of_peaks: u32,
381 ) -> Result<Self, String> {
382 self.config
383 .add_config_parameter(ConfigV5::NoiseThresholdSettingsMaximalNumberOfPeaks(
384 noise_threshold_settings_maximal_number_of_peaks,
385 ))?;
386 Ok(self)
387 }
388
389 pub fn zodiac_cluster_compounds(
393 mut self,
394 zodiac_cluster_compounds: bool,
395 ) -> Result<Self, String> {
396 self.config
397 .add_config_parameter(ConfigV5::ZodiacClusterCompounds(zodiac_cluster_compounds))?;
398 Ok(self)
399 }
400
401 pub fn zodiac_edge_filter_thresholds_min_local_candidates(
406 mut self,
407 zodiac_edge_filter_thresholds_min_local_candidates: u32,
408 ) -> Result<Self, String> {
409 self.config.add_config_parameter(
410 ConfigV5::ZodiacEdgeFilterThresholdsMinLocalCandidates(
411 zodiac_edge_filter_thresholds_min_local_candidates,
412 ),
413 )?;
414 Ok(self)
415 }
416
417 pub fn zodiac_edge_filter_thresholds_min_local_connections(
422 mut self,
423 zodiac_edge_filter_thresholds_min_local_connections: u32,
424 ) -> Result<Self, String> {
425 self.config.add_config_parameter(
426 ConfigV5::ZodiacEdgeFilterThresholdsMinLocalConnections(
427 zodiac_edge_filter_thresholds_min_local_connections,
428 ),
429 )?;
430 Ok(self)
431 }
432
433 pub fn zodiac_edge_filter_thresholds_threshold_filter(
437 mut self,
438 zodiac_edge_filter_thresholds_threshold_filter: f32,
439 ) -> Result<Self, String> {
440 if zodiac_edge_filter_thresholds_threshold_filter < 0.0 {
441 return Err(format!(
442 concat!(
443 "Zodiac edge filter thresholds threshold filter must be positive. ",
444 "You provided {}."
445 ),
446 zodiac_edge_filter_thresholds_threshold_filter
447 ));
448 }
449 self.config
450 .add_config_parameter(ConfigV5::ZodiacEdgeFilterThresholdsThresholdFilter(
451 zodiac_edge_filter_thresholds_threshold_filter,
452 ))?;
453 Ok(self)
454 }
455
456 pub fn zodiac_epochs_burn_in_period(
461 mut self,
462 zodiac_epochs_burn_in_period: u32,
463 ) -> Result<Self, String> {
464 self.config
465 .add_config_parameter(ConfigV5::ZodiacEpochsBurnInPeriod(
466 zodiac_epochs_burn_in_period,
467 ))?;
468 Ok(self)
469 }
470
471 pub fn zodiac_epochs_iterations(
475 mut self,
476 zodiac_epochs_number_of_epochs: u32,
477 ) -> Result<Self, String> {
478 self.config
479 .add_config_parameter(ConfigV5::ZodiacEpochsIterations(
480 zodiac_epochs_number_of_epochs,
481 ))?;
482 Ok(self)
483 }
484
485 pub fn zodiac_epochs_number_of_markov_chains(
489 mut self,
490 zodiac_epochs_number_of_markov_chains: u32,
491 ) -> Result<Self, String> {
492 self.config
493 .add_config_parameter(ConfigV5::ZodiacEpochsNumberOfMarkovChains(
494 zodiac_epochs_number_of_markov_chains,
495 ))?;
496 Ok(self)
497 }
498
499 pub fn zodiac_library_scoring_lambda(
503 mut self,
504 zodiac_library_scoring_lambda: u32,
505 ) -> Result<Self, String> {
506 self.config
507 .add_config_parameter(ConfigV5::ZodiacLibraryScoringLambda(
508 zodiac_library_scoring_lambda,
509 ))?;
510 Ok(self)
511 }
512
513 pub fn zodiac_library_scoring_min_cosine(
532 mut self,
533 zodiac_library_scoring_min_cosine: f32,
534 ) -> Result<Self, String> {
535 if !(0.0..=1.0).contains(&zodiac_library_scoring_min_cosine) {
537 return Err(format!(
539 concat!(
540 "Zodiac library scoring min cosine must be in [0,1]. ",
541 "You provided {}."
542 ),
543 zodiac_library_scoring_min_cosine
544 ));
545 }
546 self.config
547 .add_config_parameter(ConfigV5::ZodiacLibraryScoringMinCosine(
548 zodiac_library_scoring_min_cosine,
549 ))?;
550 Ok(self)
551 }
552
553 pub fn zodiac_number_of_considered_candidates_at_300_mz(
559 mut self,
560 zodiac_number_of_considered_candidates_at_300_mz: i32,
561 ) -> Result<Self, String> {
562 self.config
563 .add_config_parameter(ConfigV5::ZodiacNumberOfConsideredCandidatesAt300Mz(
564 zodiac_number_of_considered_candidates_at_300_mz,
565 ))?;
566 Ok(self)
567 }
568
569 pub fn zodiac_number_of_considered_candidates_at_800_mz(
575 mut self,
576 zodiac_number_of_considered_candidates_at_800_mz: i32,
577 ) -> Result<Self, String> {
578 self.config
579 .add_config_parameter(ConfigV5::ZodiacNumberOfConsideredCandidatesAt800Mz(
580 zodiac_number_of_considered_candidates_at_800_mz,
581 ))?;
582 Ok(self)
583 }
584
585 pub fn zodiac_ratio_of_considered_candidates_per_ionization(
592 mut self,
593 zodiac_ratio_of_considered_candidates_per_ionization: f32,
594 ) -> Result<Self, String> {
595 if !(0.0..=1.0).contains(&zodiac_ratio_of_considered_candidates_per_ionization) {
596 return Err(format!(
597 concat!(
598 "Zodiac ratio of considered candidates per ionization must be in [0,1]. ",
599 "You provided {}."
600 ),
601 zodiac_ratio_of_considered_candidates_per_ionization
602 ));
603 }
604 self.config.add_config_parameter(
605 ConfigV5::ZodiacRatioOfConsideredCandidatesPerIonization(
606 zodiac_ratio_of_considered_candidates_per_ionization,
607 ),
608 )?;
609 Ok(self)
610 }
611
612 pub fn zodiac_run_in_two_steps(
616 mut self,
617 zodiac_run_in_two_steps: bool,
618 ) -> Result<Self, String> {
619 self.config
620 .add_config_parameter(ConfigV5::ZodiacRunInTwoSteps(zodiac_run_in_two_steps))?;
621 Ok(self)
622 }
623
624 pub fn ms1_mass_deviation_allowed_mass_deviation(
631 mut self,
632 ms1_mass_deviation_allowed_mass_deviation: MassDeviation,
633 ) -> Result<Self, String> {
634 self.config
635 .add_config_parameter(ConfigV5::MS1MassDeviationAllowedMassDeviation(
636 ms1_mass_deviation_allowed_mass_deviation.must_be_positive()?,
637 ))?;
638 Ok(self)
639 }
640
641 pub fn ms1_mass_deviation_mass_difference_deviation(
645 mut self,
646 ms1_mass_deviation_mass_difference_deviation: MassDeviation,
647 ) -> Result<Self, String> {
648 self.config
649 .add_config_parameter(ConfigV5::MS1MassDeviationMassDifferenceDeviation(
650 ms1_mass_deviation_mass_difference_deviation.must_be_positive()?,
651 ))?;
652 Ok(self)
653 }
654
655 pub fn ms1_mass_deviation_standard_mass_deviation(
659 mut self,
660 ms1_mass_deviation_standard_mass_deviation: MassDeviation,
661 ) -> Result<Self, String> {
662 self.config
663 .add_config_parameter(ConfigV5::MS1MassDeviationStandardMassDeviation(
664 ms1_mass_deviation_standard_mass_deviation.must_be_positive()?,
665 ))?;
666 Ok(self)
667 }
668
669 pub fn ms2_mass_deviation_standard_mass_deviation(
673 mut self,
674 ms2_mass_deviation_standard_mass_deviation: MassDeviation,
675 ) -> Result<Self, String> {
676 self.config
677 .add_config_parameter(ConfigV5::MS2MassDeviationStandardMassDeviation(
678 ms2_mass_deviation_standard_mass_deviation.must_be_positive()?,
679 ))?;
680 Ok(self)
681 }
682
683 pub fn ms2_mass_deviation_allowed_mass_deviation(
690 mut self,
691 ms2_mass_deviation_allowed_mass_deviation: MassDeviation,
692 ) -> Result<Self, String> {
693 self.config
694 .add_config_parameter(ConfigV5::MS2MassDeviationAllowedMassDeviation(
695 ms2_mass_deviation_allowed_mass_deviation.must_be_positive()?,
696 ))?;
697 Ok(self)
698 }
699
700 pub fn formula_settings_detectable(
704 mut self,
705 formula_settings_detectable: AtomVector,
706 ) -> Result<Self, String> {
707 self.config
708 .add_config_parameter(ConfigV5::FormulaSettingsDetectable(
709 formula_settings_detectable,
710 ))?;
711 Ok(self)
712 }
713
714 pub fn formula_settings_enforced(
722 mut self,
723 formula_settings_enforced: AtomVector,
724 ) -> Result<Self, String> {
725 self.config
726 .add_config_parameter(ConfigV5::FormulaSettingsEnforced(formula_settings_enforced))?;
727 Ok(self)
728 }
729
730 pub fn formula_settings_fallback(
734 mut self,
735 formula_settings_fallback: AtomVector,
736 ) -> Result<Self, String> {
737 self.config
738 .add_config_parameter(ConfigV5::FormulaSettingsFallback(formula_settings_fallback))?;
739 Ok(self)
740 }
741
742 pub fn forbid_recalibration(
747 mut self,
748 forbid_recalibration: ForbidRecalibration,
749 ) -> Result<Self, String> {
750 self.config
751 .add_config_parameter(ConfigV5::ForbidRecalibration(forbid_recalibration))?;
752 Ok(self)
753 }
754
755 pub fn use_heuristic_mz_to_use_heuristic(
760 mut self,
761 use_heuristic_mz_to_use_heuristic: u32,
762 ) -> Result<Self, String> {
763 self.config
764 .add_config_parameter(ConfigV5::UseHeuristicMZToUseHeuristic(
765 use_heuristic_mz_to_use_heuristic,
766 ))?;
767 Ok(self)
768 }
769
770 pub fn use_heuristic_mz_to_use_heuristic_only(
774 mut self,
775 use_heuristic_mz_to_use_heuristic: u32,
776 ) -> Result<Self, String> {
777 self.config
778 .add_config_parameter(ConfigV5::UseHeuristicMZToUseHeuristicOnly(
779 use_heuristic_mz_to_use_heuristic,
780 ))?;
781 Ok(self)
782 }
783
784 pub fn adduct_settings_detectable(
786 mut self,
787 adduct_settings_detectable: AdductsVector,
788 ) -> Result<Self, String> {
789 self.config
790 .add_config_parameter(ConfigV5::AdductSettingsDetectable(
791 adduct_settings_detectable,
792 ))?;
793 Ok(self)
794 }
795
796 pub fn adduct_settings_fallback(
800 mut self,
801 adduct_settings_fallback: AdductsVector,
802 ) -> Result<Self, String> {
803 self.config
804 .add_config_parameter(ConfigV5::AdductSettingsFallback(adduct_settings_fallback))?;
805 Ok(self)
806 }
807
808 pub fn algorithm_profile(mut self, algorithm_profile: Instruments) -> Result<Self, String> {
812 self.config
813 .add_config_parameter(ConfigV5::AlgorithmProfile(algorithm_profile))?;
814 Ok(self)
815 }
816
817 pub fn compound_quality(mut self, compound_quality: CompoundQuality) -> Result<Self, String> {
822 self.config
823 .add_config_parameter(ConfigV5::CompoundQuality(compound_quality))?;
824 Ok(self)
825 }
826
827 pub fn adduct_settings_enforced(
831 mut self,
832 adduct_settings_enforced: AdductSettingsEnforced,
833 ) -> Result<Self, String> {
834 self.config
835 .add_config_parameter(ConfigV5::AdductSettingsEnforced(adduct_settings_enforced))?;
836 Ok(self)
837 }
838
839 pub fn candidate_formulas(
845 mut self,
846 candidate_formulas: CandidateFormulas,
847 ) -> Result<Self, String> {
848 self.config
849 .add_config_parameter(ConfigV5::CandidateFormulas(candidate_formulas))?;
850 Ok(self)
851 }
852
853 pub fn formula_result_ranking_score(
858 mut self,
859 formula_result_ranking_score: FormulaResultRankingScore,
860 ) -> Result<Self, String> {
861 self.config
862 .add_config_parameter(ConfigV5::FormulaResultRankingScore(
863 formula_result_ranking_score,
864 ))?;
865 Ok(self)
866 }
867
868 pub fn isotope_ms2_settings(
870 mut self,
871 isotope_ms2_settings: IsotopeMS2Settings,
872 ) -> Result<Self, String> {
873 self.config
874 .add_config_parameter(ConfigV5::IsotopeMS2Settings(isotope_ms2_settings))?;
875 Ok(self)
876 }
877
878 pub fn isotope_settings_multiplier(
883 mut self,
884 isotope_settings_multiplier: u32,
885 ) -> Result<Self, String> {
886 self.config
887 .add_config_parameter(ConfigV5::IsotopeSettingsMultiplier(
888 isotope_settings_multiplier,
889 ))?;
890 Ok(self)
891 }
892
893 pub fn noise_threshold_settings_absolute_threshold(
897 mut self,
898 noise_threshold_settings_absolute_threshold: u32,
899 ) -> Result<Self, String> {
900 self.config
901 .add_config_parameter(ConfigV5::NoiseThresholdSettingsAbsoluteThreshold(
902 noise_threshold_settings_absolute_threshold,
903 ))?;
904 Ok(self)
905 }
906
907 pub fn noise_threshold_settings_base_peak(
911 mut self,
912 noise_threshold_settings_base_peak: BasePeak,
913 ) -> Result<Self, String> {
914 self.config
915 .add_config_parameter(ConfigV5::NoiseThresholdSettingsBasePeak(
916 noise_threshold_settings_base_peak,
917 ))?;
918 Ok(self)
919 }
920
921 pub fn structure_predictors(
925 mut self,
926 structure_predictors: StructurePredictors,
927 ) -> Result<Self, String> {
928 self.config
929 .add_config_parameter(ConfigV5::StructurePredictors(structure_predictors))?;
930 Ok(self)
931 }
932
933 pub fn possible_adduct_switches(
941 mut self,
942 possible_adduct_switches: PossibleAdductSwitches,
943 ) -> Result<Self, String> {
944 self.config
945 .add_config_parameter(ConfigV5::PossibleAdductSwitches(possible_adduct_switches))?;
946 Ok(self)
947 }
948
949 pub fn enable_formula(mut self) -> Result<Self, String> {
957 self.config.add_formula_parameter(FormulaV5::Enabled)?;
958 Ok(self)
959 }
960
961 pub fn formula_help(mut self) -> Result<Self, String> {
963 self.config.add_formula_parameter(FormulaV5::Help)?;
964 Ok(self)
965 }
966
967 pub fn formula_version(mut self) -> Result<Self, String> {
969 self.config.add_formula_parameter(FormulaV5::Version)?;
970 Ok(self)
971 }
972
973 pub fn enable_zodiac(mut self) -> Result<Self, String> {
975 self.config.add_zodiac_parameter(ZodiacV5::Enabled)?;
976 Ok(self)
977 }
978
979 pub fn zodiac_help(mut self) -> Result<Self, String> {
981 self.config.add_zodiac_parameter(ZodiacV5::Help)?;
982 Ok(self)
983 }
984
985 pub fn zodiac_version(mut self) -> Result<Self, String> {
987 self.config.add_zodiac_parameter(ZodiacV5::Version)?;
988 Ok(self)
989 }
990
991 pub fn enable_fingerprint(mut self) -> Result<Self, String> {
993 self.config
994 .add_fingerprint_parameter(FingerprintV5::Enabled)?;
995 Ok(self)
996 }
997
998 pub fn fingerprint_help(mut self) -> Result<Self, String> {
1000 self.config.add_fingerprint_parameter(FingerprintV5::Help)?;
1001 Ok(self)
1002 }
1003
1004 pub fn fingerprint_version(mut self) -> Result<Self, String> {
1006 self.config
1007 .add_fingerprint_parameter(FingerprintV5::Version)?;
1008 Ok(self)
1009 }
1010
1011 pub fn enable_structure(mut self) -> Result<Self, String> {
1013 self.config.add_structure_parameter(StructureV5::Enabled)?;
1014 Ok(self)
1015 }
1016
1017 pub fn structure_help(mut self) -> Result<Self, String> {
1019 self.config.add_structure_parameter(StructureV5::Help)?;
1020 Ok(self)
1021 }
1022
1023 pub fn structure_version(mut self) -> Result<Self, String> {
1025 self.config.add_structure_parameter(StructureV5::Version)?;
1026 Ok(self)
1027 }
1028
1029 pub fn enable_canopus(mut self) -> Result<Self, String> {
1031 self.config.add_canopus_parameter(CanopusV5::Enabled)?;
1032 Ok(self)
1033 }
1034
1035 pub fn canopus_help(mut self) -> Result<Self, String> {
1037 self.config.add_canopus_parameter(CanopusV5::Help)?;
1038 Ok(self)
1039 }
1040
1041 pub fn canopus_version(mut self) -> Result<Self, String> {
1043 self.config.add_canopus_parameter(CanopusV5::Version)?;
1044 Ok(self)
1045 }
1046
1047 pub fn enable_write_summaries(mut self) -> Result<Self, String> {
1049 self.config
1050 .add_write_summaries_parameter(WriteSummariesV5::Enabled)?;
1051 Ok(self)
1052 }
1053
1054 pub fn write_summaries_help(mut self) -> Result<Self, String> {
1056 self.config
1057 .add_write_summaries_parameter(WriteSummariesV5::Help)?;
1058 Ok(self)
1059 }
1060
1061 pub fn write_summaries_version(mut self) -> Result<Self, String> {
1063 self.config
1064 .add_write_summaries_parameter(WriteSummariesV5::Version)?;
1065 Ok(self)
1066 }
1067}
1068
1069impl<V: Version> SiriusBuilder<V> {
1070 pub fn build(self) -> Sirius<V> {
1077 Sirius::from(self.config)
1078 }
1079}
1080
1081impl SiriusBuilder<Version5> {
1082 pub fn maximal_mz_default(mut self) -> Result<Self, String> {
1100 self.config
1101 .add_core_parameter(CoreV5::MaximalMz(f64::default()).into_default())?;
1102 Ok(self)
1103 }
1104
1105 pub fn max_cpus_default(mut self) -> Result<Self, String> {
1107 self.config
1108 .add_core_parameter(CoreV5::NCpus(usize::default()).into_default())?;
1109 Ok(self)
1110 }
1111
1112 pub fn isotope_settings_filter_default(mut self) -> Result<Self, String> {
1114 self.config.add_config_parameter(
1115 ConfigV5::IsotopeSettingsFilter(bool::default()).into_default(),
1116 )?;
1117 Ok(self)
1118 }
1119
1120 pub fn formula_search_db_default(mut self) -> Result<Self, String> {
1122 self.config.add_config_parameter(
1123 ConfigV5::FormulaSearchDB(crate::sirius_types::DBVector::default()).into_default(),
1124 )?;
1125 Ok(self)
1126 }
1127
1128 pub fn structure_search_db_default(mut self) -> Result<Self, String> {
1130 self.config.add_config_parameter(
1131 ConfigV5::StructureSearchDB(crate::sirius_types::DBVector::default()).into_default(),
1132 )?;
1133 Ok(self)
1134 }
1135
1136 pub fn timeout_seconds_per_tree_default(mut self) -> Result<Self, String> {
1138 self.config
1139 .add_config_parameter(ConfigV5::TimeoutSecondsPerTree(u32::default()).into_default())?;
1140 Ok(self)
1141 }
1142
1143 pub fn number_of_candidates_default(mut self) -> Result<Self, String> {
1145 self.config
1146 .add_config_parameter(ConfigV5::NumberOfCandidates(u32::default()).into_default())?;
1147 Ok(self)
1148 }
1149
1150 pub fn number_of_candidates_per_ion_default(mut self) -> Result<Self, String> {
1152 self.config.add_config_parameter(
1153 ConfigV5::NumberOfCandidatesPerIon(u32::default()).into_default(),
1154 )?;
1155 Ok(self)
1156 }
1157
1158 pub fn number_of_structure_candidates_default(mut self) -> Result<Self, String> {
1160 self.config.add_config_parameter(
1161 ConfigV5::NumberOfStructureCandidates(u32::default()).into_default(),
1162 )?;
1163 Ok(self)
1164 }
1165
1166 pub fn recompute_results_default(mut self) -> Result<Self, String> {
1168 self.config
1169 .add_config_parameter(ConfigV5::RecomputeResults(bool::default()).into_default())?;
1170 Ok(self)
1171 }
1172
1173 pub fn print_citations_default(mut self) -> Result<Self, String> {
1175 self.config
1176 .add_config_parameter(ConfigV5::PrintCitations(bool::default()).into_default())?;
1177 Ok(self)
1178 }
1179
1180 pub fn timeout_seconds_per_instance_default(mut self) -> Result<Self, String> {
1182 self.config.add_config_parameter(
1183 ConfigV5::TimeoutSecondsPerInstance(u32::default()).into_default(),
1184 )?;
1185 Ok(self)
1186 }
1187
1188 pub fn formula_result_threshold_default(mut self) -> Result<Self, String> {
1190 self.config.add_config_parameter(
1191 ConfigV5::FormulaResultThreshold(bool::default()).into_default(),
1192 )?;
1193 Ok(self)
1194 }
1195
1196 pub fn inject_el_gordo_compounds_default(mut self) -> Result<Self, String> {
1198 self.config.add_config_parameter(
1199 ConfigV5::InjectElGordoCompounds(bool::default()).into_default(),
1200 )?;
1201 Ok(self)
1202 }
1203
1204 pub fn median_noise_intensity_default(mut self) -> Result<Self, String> {
1206 self.config
1207 .add_config_parameter(ConfigV5::MedianNoiseIntensity(f32::default()).into_default())?;
1208 Ok(self)
1209 }
1210
1211 pub fn ms1_absolute_intensity_error_default(mut self) -> Result<Self, String> {
1213 self.config.add_config_parameter(
1214 ConfigV5::MS1AbsoluteIntensityError(f32::default()).into_default(),
1215 )?;
1216 Ok(self)
1217 }
1218
1219 pub fn ms1_minimal_intensity_to_consider_default(mut self) -> Result<Self, String> {
1221 self.config.add_config_parameter(
1222 ConfigV5::MS1MinimalIntensityToConsider(f32::default()).into_default(),
1223 )?;
1224 Ok(self)
1225 }
1226
1227 pub fn ms1_relative_intensity_error_default(mut self) -> Result<Self, String> {
1229 self.config.add_config_parameter(
1230 ConfigV5::MS1RelativeIntensityError(f32::default()).into_default(),
1231 )?;
1232 Ok(self)
1233 }
1234
1235 pub fn noise_threshold_settings_intensity_threshold_default(mut self) -> Result<Self, String> {
1237 self.config.add_config_parameter(
1238 ConfigV5::NoiseThresholdSettingsIntensityThreshold(f32::default()).into_default(),
1239 )?;
1240 Ok(self)
1241 }
1242
1243 pub fn noise_threshold_settings_maximal_number_of_peaks_default(
1245 mut self,
1246 ) -> Result<Self, String> {
1247 self.config.add_config_parameter(
1248 ConfigV5::NoiseThresholdSettingsMaximalNumberOfPeaks(u32::default()).into_default(),
1249 )?;
1250 Ok(self)
1251 }
1252
1253 pub fn zodiac_cluster_compounds_default(mut self) -> Result<Self, String> {
1255 self.config.add_config_parameter(
1256 ConfigV5::ZodiacClusterCompounds(bool::default()).into_default(),
1257 )?;
1258 Ok(self)
1259 }
1260
1261 pub fn zodiac_edge_filter_thresholds_min_local_candidates_default(
1263 mut self,
1264 ) -> Result<Self, String> {
1265 self.config.add_config_parameter(
1266 ConfigV5::ZodiacEdgeFilterThresholdsMinLocalCandidates(u32::default()).into_default(),
1267 )?;
1268 Ok(self)
1269 }
1270
1271 pub fn zodiac_edge_filter_thresholds_min_local_connections_default(
1273 mut self,
1274 ) -> Result<Self, String> {
1275 self.config.add_config_parameter(
1276 ConfigV5::ZodiacEdgeFilterThresholdsMinLocalConnections(u32::default()).into_default(),
1277 )?;
1278 Ok(self)
1279 }
1280
1281 pub fn zodiac_edge_filter_thresholds_threshold_filter_default(
1283 mut self,
1284 ) -> Result<Self, String> {
1285 self.config.add_config_parameter(
1286 ConfigV5::ZodiacEdgeFilterThresholdsThresholdFilter(f32::default()).into_default(),
1287 )?;
1288 Ok(self)
1289 }
1290
1291 pub fn zodiac_epochs_burn_in_period_default(mut self) -> Result<Self, String> {
1293 self.config.add_config_parameter(
1294 ConfigV5::ZodiacEpochsBurnInPeriod(u32::default()).into_default(),
1295 )?;
1296 Ok(self)
1297 }
1298
1299 pub fn zodiac_epochs_iterations_default(mut self) -> Result<Self, String> {
1301 self.config.add_config_parameter(
1302 ConfigV5::ZodiacEpochsIterations(u32::default()).into_default(),
1303 )?;
1304 Ok(self)
1305 }
1306
1307 pub fn zodiac_epochs_number_of_markov_chains_default(mut self) -> Result<Self, String> {
1309 self.config.add_config_parameter(
1310 ConfigV5::ZodiacEpochsNumberOfMarkovChains(u32::default()).into_default(),
1311 )?;
1312 Ok(self)
1313 }
1314
1315 pub fn zodiac_library_scoring_lambda_default(mut self) -> Result<Self, String> {
1317 self.config.add_config_parameter(
1318 ConfigV5::ZodiacLibraryScoringLambda(u32::default()).into_default(),
1319 )?;
1320 Ok(self)
1321 }
1322
1323 pub fn zodiac_library_scoring_min_cosine_default(mut self) -> Result<Self, String> {
1325 self.config.add_config_parameter(
1326 ConfigV5::ZodiacLibraryScoringMinCosine(f32::default()).into_default(),
1327 )?;
1328 Ok(self)
1329 }
1330
1331 pub fn zodiac_number_of_considered_candidates_at_300_mz_default(
1333 mut self,
1334 ) -> Result<Self, String> {
1335 self.config.add_config_parameter(
1336 ConfigV5::ZodiacNumberOfConsideredCandidatesAt300Mz(i32::default()).into_default(),
1337 )?;
1338 Ok(self)
1339 }
1340
1341 pub fn zodiac_number_of_considered_candidates_at_800_mz_default(
1343 mut self,
1344 ) -> Result<Self, String> {
1345 self.config.add_config_parameter(
1346 ConfigV5::ZodiacNumberOfConsideredCandidatesAt800Mz(i32::default()).into_default(),
1347 )?;
1348 Ok(self)
1349 }
1350
1351 pub fn zodiac_ratio_of_considered_candidates_per_ionization_default(
1353 mut self,
1354 ) -> Result<Self, String> {
1355 self.config.add_config_parameter(
1356 ConfigV5::ZodiacRatioOfConsideredCandidatesPerIonization(f32::default()).into_default(),
1357 )?;
1358 Ok(self)
1359 }
1360
1361 pub fn zodiac_run_in_two_steps_default(mut self) -> Result<Self, String> {
1363 self.config
1364 .add_config_parameter(ConfigV5::ZodiacRunInTwoSteps(bool::default()).into_default())?;
1365 Ok(self)
1366 }
1367
1368 pub fn ms1_mass_deviation_allowed_mass_deviation_default(mut self) -> Result<Self, String> {
1370 self.config.add_config_parameter(
1371 ConfigV5::MS1MassDeviationAllowedMassDeviation(
1372 MassDeviation::Ppm(f32::default()).must_be_positive()?,
1373 )
1374 .into_default(),
1375 )?;
1376 Ok(self)
1377 }
1378
1379 pub fn ms1_mass_deviation_mass_difference_deviation_default(mut self) -> Result<Self, String> {
1381 self.config.add_config_parameter(
1382 ConfigV5::MS1MassDeviationMassDifferenceDeviation(
1383 MassDeviation::Ppm(f32::default()).must_be_positive()?,
1384 )
1385 .into_default(),
1386 )?;
1387 Ok(self)
1388 }
1389
1390 pub fn ms1_mass_deviation_standard_mass_deviation_default(mut self) -> Result<Self, String> {
1392 self.config.add_config_parameter(
1393 ConfigV5::MS1MassDeviationStandardMassDeviation(
1394 MassDeviation::Ppm(f32::default()).must_be_positive()?,
1395 )
1396 .into_default(),
1397 )?;
1398 Ok(self)
1399 }
1400
1401 pub fn ms2_mass_deviation_standard_mass_deviation_default(mut self) -> Result<Self, String> {
1403 self.config.add_config_parameter(
1404 ConfigV5::MS2MassDeviationStandardMassDeviation(
1405 MassDeviation::Ppm(f32::default()).must_be_positive()?,
1406 )
1407 .into_default(),
1408 )?;
1409 Ok(self)
1410 }
1411
1412 pub fn ms2_mass_deviation_allowed_mass_deviation_default(mut self) -> Result<Self, String> {
1414 self.config.add_config_parameter(
1415 ConfigV5::MS2MassDeviationAllowedMassDeviation(
1416 MassDeviation::Ppm(f32::default()).must_be_positive()?,
1417 )
1418 .into_default(),
1419 )?;
1420 Ok(self)
1421 }
1422
1423 pub fn formula_settings_detectable_default(mut self) -> Result<Self, String> {
1425 self.config.add_config_parameter(
1426 ConfigV5::FormulaSettingsDetectable(AtomVector::default()).into_default(),
1427 )?;
1428 Ok(self)
1429 }
1430
1431 pub fn formula_settings_enforced_default(mut self) -> Result<Self, String> {
1433 self.config.add_config_parameter(
1434 ConfigV5::FormulaSettingsEnforced(AtomVector::default()).into_default(),
1435 )?;
1436 Ok(self)
1437 }
1438
1439 pub fn formula_settings_fallback_default(mut self) -> Result<Self, String> {
1441 self.config.add_config_parameter(
1442 ConfigV5::FormulaSettingsFallback(AtomVector::default()).into_default(),
1443 )?;
1444 Ok(self)
1445 }
1446
1447 pub fn forbid_recalibration_default(mut self) -> Result<Self, String> {
1449 self.config.add_config_parameter(
1450 ConfigV5::ForbidRecalibration(ForbidRecalibration::default()).into_default(),
1451 )?;
1452 Ok(self)
1453 }
1454
1455 pub fn use_heuristic_mz_to_use_heuristic_default(mut self) -> Result<Self, String> {
1457 self.config.add_config_parameter(
1458 ConfigV5::UseHeuristicMZToUseHeuristic(u32::default()).into_default(),
1459 )?;
1460 Ok(self)
1461 }
1462
1463 pub fn use_heuristic_mz_to_use_heuristic_only_default(mut self) -> Result<Self, String> {
1465 self.config.add_config_parameter(
1466 ConfigV5::UseHeuristicMZToUseHeuristicOnly(u32::default()).into_default(),
1467 )?;
1468 Ok(self)
1469 }
1470
1471 pub fn adduct_settings_detectable_default(mut self) -> Result<Self, String> {
1473 self.config.add_config_parameter(
1474 ConfigV5::AdductSettingsDetectable(AdductsVector::default()).into_default(),
1475 )?;
1476 Ok(self)
1477 }
1478
1479 pub fn adduct_settings_fallback_default(mut self) -> Result<Self, String> {
1481 self.config.add_config_parameter(
1482 ConfigV5::AdductSettingsFallback(AdductsVector::default()).into_default(),
1483 )?;
1484 Ok(self)
1485 }
1486
1487 pub fn algorithm_profile_default(mut self) -> Result<Self, String> {
1489 self.config.add_config_parameter(
1490 ConfigV5::AlgorithmProfile(Instruments::default()).into_default(),
1491 )?;
1492 Ok(self)
1493 }
1494
1495 pub fn compound_quality_default(mut self) -> Result<Self, String> {
1497 self.config.add_config_parameter(
1498 ConfigV5::CompoundQuality(CompoundQuality::default()).into_default(),
1499 )?;
1500 Ok(self)
1501 }
1502
1503 pub fn adduct_settings_enforced_default(mut self) -> Result<Self, String> {
1505 self.config.add_config_parameter(
1506 ConfigV5::AdductSettingsEnforced(AdductSettingsEnforced::default()).into_default(),
1507 )?;
1508 Ok(self)
1509 }
1510
1511 pub fn candidate_formulas_default(mut self) -> Result<Self, String> {
1513 self.config.add_config_parameter(
1514 ConfigV5::CandidateFormulas(CandidateFormulas::default()).into_default(),
1515 )?;
1516 Ok(self)
1517 }
1518
1519 pub fn formula_result_ranking_score_default(mut self) -> Result<Self, String> {
1521 self.config.add_config_parameter(
1522 ConfigV5::FormulaResultRankingScore(FormulaResultRankingScore::default())
1523 .into_default(),
1524 )?;
1525 Ok(self)
1526 }
1527
1528 pub fn isotope_ms2_settings_default(mut self) -> Result<Self, String> {
1530 self.config.add_config_parameter(
1531 ConfigV5::IsotopeMS2Settings(IsotopeMS2Settings::default()).into_default(),
1532 )?;
1533 Ok(self)
1534 }
1535
1536 pub fn isotope_settings_multiplier_default(mut self) -> Result<Self, String> {
1538 self.config.add_config_parameter(
1539 ConfigV5::IsotopeSettingsMultiplier(u32::default()).into_default(),
1540 )?;
1541 Ok(self)
1542 }
1543
1544 pub fn noise_threshold_settings_absolute_threshold_default(mut self) -> Result<Self, String> {
1546 self.config.add_config_parameter(
1547 ConfigV5::NoiseThresholdSettingsAbsoluteThreshold(u32::default()).into_default(),
1548 )?;
1549 Ok(self)
1550 }
1551
1552 pub fn noise_threshold_settings_base_peak_default(mut self) -> Result<Self, String> {
1554 self.config.add_config_parameter(
1555 ConfigV5::NoiseThresholdSettingsBasePeak(BasePeak::default()).into_default(),
1556 )?;
1557 Ok(self)
1558 }
1559
1560 pub fn structure_predictors_default(mut self) -> Result<Self, String> {
1562 self.config.add_config_parameter(
1563 ConfigV5::StructurePredictors(StructurePredictors::default()).into_default(),
1564 )?;
1565 Ok(self)
1566 }
1567
1568 pub fn possible_adduct_switches_default(mut self) -> Result<Self, String> {
1570 self.config.add_config_parameter(
1571 ConfigV5::PossibleAdductSwitches(PossibleAdductSwitches::default()).into_default(),
1572 )?;
1573 Ok(self)
1574 }
1575}