public void RunExperiment(ScienceInstance s, bool runSingleUse = true) { //_logger.Trace( "Finding Module for Science Report: " + s.ScienceExperiment.id ); ModuleScienceExperiment m = null; // If possible run with DMagic new API IEnumerable <ModuleScienceExperiment> lm = FindDMAnimateGenericsForExperiment(s.ScienceExperiment.id); if (lm != null && lm.Any()) { DMModuleScienceAnimateGeneric NewDMagicInstance = _parent.DMagic.GetDMModuleScienceAnimateGeneric( ); m = lm.FirstOrDefault(x => (int)x.Fields.GetValue("experimentsLimit") > 1 ? NewDMagicInstance.canConduct(x) : NewDMagicInstance.canConduct(x) && (x.rerunnable || runSingleUse)); if (m != null) { _logger.Debug("Running DMModuleScienceAnimateGenerics Experiment " + m.experimentID + " on part " + m.part.partInfo.name); NewDMagicInstance.gatherScienceData(m, !_parent.Config.ShowResultsWindow); } return; } // If possible run with DMagic DMAPI if (_DMModuleScienceAnimates != null && _DMModuleScienceAnimates.Count > 0) { DMAPI DMAPIInstance = _parent.DMagic.GetDMAPI( ); if (DMAPIInstance != null) { IEnumerable <ModuleScienceExperiment> lm2 = _DMModuleScienceAnimates.Where(x => x.experimentID == s.ScienceExperiment.id); if (lm2.Any()) { m = lm2.FirstOrDefault(x => { return(!x.Inoperable && ((int)x.Fields.GetValue("experimentLimit") > 1 ? DMAPIInstance.experimentCanConduct(x) : DMAPIInstance.experimentCanConduct(x) && (x.rerunnable || runSingleUse))); }); if (m != null) { //_logger.Trace("Running DMModuleScienceAnimates Experiment " + m.experimentID + " on part " + m.part.partInfo.name); DMAPIInstance.deployDMExperiment(m, !_parent.Config.ShowResultsWindow); } return; } } } // Do stock run m = FindExperiment(s, runSingleUse); if (m != null) { //_logger.Trace( "Running Experiment " + m.experimentID + " on part " + m.part.partInfo.name ); RunStandardModuleScienceExperiment(m); return; } }
public bool CanRunExperiment(ScienceInstance s, bool runSingleUse = true) { bool IsAvailable = false; if (_availableScienceExperiments.ContainsKey(s.ScienceExperiment.id)) { return(_availableScienceExperiments[s.ScienceExperiment.id]); } IEnumerable <ModuleScienceExperiment> dlm = FindDMAnimateGenericsForExperiment(s.ScienceExperiment.id); if (dlm != null && dlm.Any()) { DMModuleScienceAnimateGeneric NewDMagicInstance = _parent.DMagic.GetDMModuleScienceAnimateGeneric(); IsAvailable = dlm.Any(x => (int)x.Fields.GetValue("experimentsLimit") > 1 ? NewDMagicInstance.canConduct(x) : NewDMagicInstance.canConduct(x) && (x.rerunnable || runSingleUse)); _availableScienceExperiments[s.ScienceExperiment.id] = IsAvailable; return(IsAvailable); } if (_moduleScienceExperiments != null && _moduleScienceExperiments.Count > 0) { IEnumerable <ModuleScienceExperiment> lm = _moduleScienceExperiments.Where(x => ( x.experimentID == s.ScienceExperiment.id && !(x.GetScienceCount() > 0) && (x.rerunnable || runSingleUse) && !x.Inoperable )); IsAvailable = lm.Count( ) != 0; _availableScienceExperiments[s.ScienceExperiment.id] = IsAvailable; } return(IsAvailable); }