Program Listing for File Task.h¶
↰ Return to documentation for file (src/smartpeak/include/SmartPeak/cli/Task.h)
// --------------------------------------------------------------------------
// SmartPeak -- Fast and Accurate CE-, GC- and LC-MS(/MS) Data Processing
// --------------------------------------------------------------------------
// Copyright The SmartPeak Team -- Novo Nordisk Foundation
// Center for Biosustainability, Technical University of Denmark 2018-2021.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
// INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// --------------------------------------------------------------------------
// $Maintainer: Krzysztof Abram, Douglas McCloskey $
// $Authors: Douglas McCloskey, Pasquale Domenico Colaianni $
// --------------------------------------------------------------------------
#pragma once
#include <iostream>
#include <chrono>
#include <algorithm>
#include <plog/Log.h>
#include <SmartPeak/core/ApplicationHandler.h>
#include <SmartPeak/core/WorkflowManager.h>
#include <SmartPeak/core/SessionHandler.h>
#include <SmartPeak/core/FeatureMetadata.h>
#include <SmartPeak/core/SharedProcessors.h>
#include <SmartPeak/io/SequenceParser.h>
#include <SmartPeak/io/InputDataValidation.h>
#include <SmartPeak/core/ApplicationProcessors/BuildCommandsFromNames.h>
#include <SmartPeak/cli/ApplicationManager.h>
namespace SmartPeak {
namespace cli {
class Task
{
public:
Task() = default;
virtual ~Task() = default;
public:
virtual bool operator() (ApplicationManager& application_manager) = 0;
};
class InitializeApplicationSettings : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
};
class InitializeLogger : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
};
class LoadSession : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
};
class RunIntegrityChecks : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
private:
void handle_integrity_check(bool check, bool allow_inconsistent, std::string msg);
bool run_integrity_check(
const SmartPeak::SequenceHandler& sequence_handler,
std::function<bool(const SmartPeak::SequenceHandler&)> f,
const std::string& info_msg = "Run integrity check");
};
class InitializeWorkflowResources : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
};
class InitializeWorkflowSettings : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
private:
void _update_filenames(
SmartPeak::BuildCommandsFromNames& buildCommandsFromNames,
SmartPeak::ApplicationHandler& application_handler);
};
class RunWorkflow : public Task,
public IApplicationProcessorObserver,
public ISequenceProcessorObserver,
public ISequenceSegmentProcessorObserver,
public ISampleGroupProcessorObserver
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
virtual void onApplicationProcessorStart(const std::vector<std::string>& commands) override {}
virtual void onApplicationProcessorCommandStart(size_t command_index, const std::string& command_name) override {}
virtual void onApplicationProcessorCommandEnd(size_t command_index, const std::string& command_name) override {}
virtual void onApplicationProcessorEnd() override {}
virtual void onApplicationProcessorError(const std::string& error) override {}
virtual void onSequenceProcessorStart(const size_t nb_injections) override {}
virtual void onSequenceProcessorSampleStart(const std::string& sample) override
{
m_event_type = 0;
m_event_name = sample;
}
virtual void onSequenceProcessorSampleEnd(const std::string& sample) override {}
virtual void onSequenceProcessorEnd() override {}
virtual void onSequenceProcessorError(
const std::string& sample_name,
const std::string& processor_name,
const std::string& error) override {};
virtual void onSequenceSegmentProcessorStart(const size_t nb_segments) override {}
virtual void onSequenceSegmentProcessorSampleStart(const std::string& segment_name) override
{
m_event_type = 1;
m_event_name = segment_name;
}
virtual void onSequenceSegmentProcessorSampleEnd(const std::string& segment_name) override {}
virtual void onSequenceSegmentProcessorEnd() override {}
virtual void onSequenceSegmentProcessorError(const std::string& segment_name, const std::string& processor_name, const std::string& error) override {};
virtual void onSampleGroupProcessorStart(const size_t nb_groups) override {}
virtual void onSampleGroupProcessorSampleStart(const std::string& group_name) override
{
m_event_type = 2;
m_event_name = group_name;
}
virtual void onSampleGroupProcessorSampleEnd(const std::string& group_name) override {}
virtual void onSampleGroupProcessorEnd() override {}
virtual void onSampleGroupProcessorError(const std::string& group_name, const std::string& processor_name, const std::string& error) override {};
private:
std::string formatted_time(const std::chrono::steady_clock::duration& duration) const;
void show_progress(const ProgressInfo& progress_info, int bar_width=50) const;
private:
int m_event_type;
std::string m_event_name;
};
class ExportReport : public Task
{
public:
virtual bool operator() (ApplicationManager& application_manager) override;
private:
void _extract_report_sampletypes(
const ApplicationSettings& application_settings,
std::set<SampleType>& report_sample_types);
void _extract_report_metadata(
const ApplicationSettings& application_settings,
std::vector<FeatureMetadata>& report_metadata);
};
} /* namespace cli */
} /* namespace SmartPeak */