1#ifndef _PROCESSING_HISTORY_H_
2#define _PROCESSING_HISTORY_H_
3#include "mspass/utility/ErrorLogger.h"
4#include <boost/archive/text_iarchive.hpp>
5#include <boost/archive/text_oarchive.hpp>
6#include <boost/serialization/map.hpp>
7#include <boost/serialization/serialization.hpp>
8#include <boost/uuid/uuid.hpp>
9#include <boost/uuid/uuid_generators.hpp>
10#include <boost/uuid/uuid_io.hpp>
11#include <boost/uuid/uuid_serialize.hpp>
24enum class ProcessingStatus { RAW, ORIGIN, VOLATILE, SAVED, UNDEFINED };
33enum class AtomicType { SEISMOGRAM, TIMESERIES, UNDEFINED };
53const std::string SAVED_ID_KEY(
"NODEDATA_AT_SAVE");
96 if (
this != (&parent)) {
110 friend boost::serialization::access;
111 template <
class Archive>
112 void serialize(Archive &ar,
const unsigned int version) {
129 mspass::utility::ProcessingStatus
status;
133 mspass::utility::AtomicType
type;
169 friend boost::serialization::access;
170 template <
class Archive>
171 void serialize(Archive &ar,
const unsigned int version) {
257 const std::multimap<std::string, NodeData> &nodesin,
345 void set_as_origin(
const std::string alg,
const std::string algid,
346 const std::string uuid,
const AtomicType typ,
347 bool define_as_raw =
false);
399 const AtomicType typ,
400 const std::vector<ProcessingHistory *> parents,
401 const bool create_newid =
true);
453 void accumulate(
const std::string alg,
const std::string algid,
505 new_map(
const std::string alg,
const std::string algid,
const AtomicType typ,
506 const ProcessingStatus newstatus = ProcessingStatus::VOLATILE);
536 new_map(
const std::string alg,
const std::string algid,
const AtomicType typ,
538 const ProcessingStatus newstatus = ProcessingStatus::VOLATILE);
575 std::string
map_as_saved(
const std::string alg,
const std::string algid,
576 const AtomicType typ);
585 std::multimap<std::string, mspass::utility::NodeData>
get_nodes()
const;
595 int stage()
const {
return current_stage; };
597 ProcessingStatus
status()
const {
return current_status; };
603 std::string
id()
const {
return current_id; };
606 std::pair<std::string, std::string> result(algorithm, algid);
661 std::list<mspass::utility::NodeData>
662 inputs(
const std::string id_to_find)
const;
676 std::multimap<std::string, mspass::utility::NodeData>
nodes;
683 ProcessingStatus current_status;
685 std::string current_id;
688 std::string algorithm;
691 friend boost::serialization::access;
692 template <
class Archive>
693 void serialize(Archive &ar,
const unsigned int version) {
694 ar &boost::serialization::base_object<BasicProcessingHistory>(*
this);
722template <
typename Tdata>
723void append_input(
const Tdata &d, ProcessingHistory &his) {
725 const ProcessingHistory *ptr =
dynamic_cast<const ProcessingHistory *
>(&d);
726 his.add_one_input(*ptr);
746std::list<std::tuple<int, std::string, std::string>>
747algorithm_history(
const ProcessingHistory &h);
768std::list<std::string> algorithm_outputs(
const ProcessingHistory &h,
769 const std::string alg,
770 const std::string algid);
Definition ProcessingHistory.h:56
std::string jobname() const
Definition ProcessingHistory.h:91
std::string jobid() const
Definition ProcessingHistory.h:87
BasicProcessingHistory & operator=(const BasicProcessingHistory &parent)
Definition ProcessingHistory.h:95
BasicProcessingHistory(const BasicProcessingHistory &parent)
Definition ProcessingHistory.h:73
std::string jnm
Definition ProcessingHistory.h:107
BasicProcessingHistory(const std::string jobname, const std::string jobid)
Definition ProcessingHistory.h:68
void set_jobid(const std::string &newjid)
Definition ProcessingHistory.h:89
virtual size_t number_of_stages()
Definition ProcessingHistory.h:85
std::string jid
Definition ProcessingHistory.h:105
void set_jobname(const std::string jobname)
Definition ProcessingHistory.h:93
Container to hold error logs for a data object.
Definition ErrorLogger.h:63
Holds properties of data used as input to algorithm that created this object.
Definition ProcessingHistory.h:126
std::string algorithm
Name of algorithm algorithm applied at this stage.
Definition ProcessingHistory.h:145
std::string uuid
Definition ProcessingHistory.h:131
bool operator==(const NodeData &other)
Definition ProcessingHistory.cc:59
mspass::utility::ProcessingStatus status
Definition ProcessingHistory.h:129
bool operator!=(const NodeData &other)
Definition ProcessingHistory.cc:77
int stage
Definition ProcessingHistory.h:136
std::string algid
Definition ProcessingHistory.h:155
mspass::utility::AtomicType type
Definition ProcessingHistory.h:133
NodeData & operator=(const NodeData &parent)
Definition ProcessingHistory.cc:48
Lightweight class to preserve procesing chain of atomic objects.
Definition ProcessingHistory.h:243
size_t number_of_stages() override
Return number of processing stages that have been applied to this object.
Definition ProcessingHistory.cc:151
void set_as_origin(const std::string alg, const std::string algid, const std::string uuid, const AtomicType typ, bool define_as_raw=false)
Definition ProcessingHistory.cc:161
NodeData current_nodedata() const
Definition ProcessingHistory.cc:672
ProcessingStatus status() const
Definition ProcessingHistory.h:597
std::multimap< std::string, mspass::utility::NodeData > nodes
Definition ProcessingHistory.h:676
bool is_saved() const
Definition ProcessingHistory.cc:145
void clear()
Definition ProcessingHistory.cc:644
bool is_raw() const
Definition ProcessingHistory.cc:126
bool is_origin() const
Definition ProcessingHistory.cc:132
void merge(const ProcessingHistory &data_to_add)
Merge the history nodes from another.
Definition ProcessingHistory.cc:452
std::multimap< std::string, mspass::utility::NodeData > get_nodes() const
Definition ProcessingHistory.cc:625
void add_many_inputs(const std::vector< ProcessingHistory * > &d)
Define several data objects as inputs.
Definition ProcessingHistory.cc:316
ErrorLogger elog
Definition ProcessingHistory.h:246
std::string new_map(const std::string alg, const std::string algid, const AtomicType typ, const ProcessingStatus newstatus=ProcessingStatus::VOLATILE)
Define this algorithm as a one-to-one map of same type data.
Definition ProcessingHistory.cc:331
ProcessingHistory()
Definition ProcessingHistory.cc:82
int number_inputs() const
Definition ProcessingHistory.cc:661
std::pair< std::string, std::string > created_by() const
Definition ProcessingHistory.h:605
bool is_volatile() const
Definition ProcessingHistory.cc:139
bool is_empty() const
Definition ProcessingHistory.cc:121
std::string new_ensemble_process(const std::string alg, const std::string algid, const AtomicType typ, const std::vector< ProcessingHistory * > parents, const bool create_newid=true)
Definition ProcessingHistory.cc:184
std::string newid()
Definition ProcessingHistory.cc:664
std::string map_as_saved(const std::string alg, const std::string algid, const AtomicType typ)
Prepare the current data for saving.
Definition ProcessingHistory.cc:408
ProcessingHistory & operator=(const ProcessingHistory &parent)
Definition ProcessingHistory.cc:700
void add_one_input(const ProcessingHistory &data_to_add)
Add one datum as an input for current data.
Definition ProcessingHistory.cc:275
std::string id() const
Definition ProcessingHistory.h:603
void set_id(const std::string newid)
Definition ProcessingHistory.cc:671
std::list< mspass::utility::NodeData > inputs(const std::string id_to_find) const
Return a list of data that define the inputs to a give uuids.
Definition ProcessingHistory.cc:683
std::string clean_accumulate_uuids()
Clean up inconsistent uuids that can be produced by reduce.
Definition ProcessingHistory.cc:559
void accumulate(const std::string alg, const std::string algid, const AtomicType typ, const ProcessingHistory &newinput)
Method to use with a spark reduce algorithm.
Definition ProcessingHistory.cc:487
int stage() const
Definition ProcessingHistory.h:595