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) {
341 void set_as_origin(
const std::string alg,
const std::string algid,
342 const std::string uuid,
const AtomicType typ,
343 bool define_as_raw =
false);
395 const AtomicType typ,
396 const std::vector<ProcessingHistory *> parents,
397 const bool create_newid =
true);
449 void accumulate(
const std::string alg,
const std::string algid,
501 new_map(
const std::string alg,
const std::string algid,
const AtomicType typ,
502 const ProcessingStatus newstatus = ProcessingStatus::VOLATILE);
532 new_map(
const std::string alg,
const std::string algid,
const AtomicType typ,
534 const ProcessingStatus newstatus = ProcessingStatus::VOLATILE);
571 std::string
map_as_saved(
const std::string alg,
const std::string algid,
572 const AtomicType typ);
581 std::multimap<std::string, mspass::utility::NodeData>
get_nodes()
const;
591 int stage()
const {
return current_stage; };
593 ProcessingStatus
status()
const {
return current_status; };
599 std::string
id()
const {
return current_id; };
602 std::pair<std::string, std::string> result(algorithm, algid);
657 std::list<mspass::utility::NodeData>
658 inputs(
const std::string id_to_find)
const;
672 std::multimap<std::string, mspass::utility::NodeData>
nodes;
679 ProcessingStatus current_status;
681 std::string current_id;
684 std::string algorithm;
687 friend boost::serialization::access;
688 template <
class Archive>
689 void serialize(Archive &ar,
const unsigned int version) {
690 ar &boost::serialization::base_object<BasicProcessingHistory>(*
this);
718template <
typename Tdata>
719void append_input(
const Tdata &d, ProcessingHistory &his) {
721 const ProcessingHistory *ptr =
dynamic_cast<const ProcessingHistory *
>(&d);
722 his.add_one_input(*ptr);
742std::list<std::tuple<int, std::string, std::string>>
743algorithm_history(
const ProcessingHistory &h);
764std::list<std::string> algorithm_outputs(
const ProcessingHistory &h,
765 const std::string alg,
766 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:140
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:150
NodeData current_nodedata() const
Definition ProcessingHistory.cc:661
ProcessingStatus status() const
Definition ProcessingHistory.h:593
std::multimap< std::string, mspass::utility::NodeData > nodes
Definition ProcessingHistory.h:672
bool is_saved() const
Definition ProcessingHistory.cc:134
void clear()
Definition ProcessingHistory.cc:633
bool is_raw() const
Definition ProcessingHistory.cc:115
bool is_origin() const
Definition ProcessingHistory.cc:121
void merge(const ProcessingHistory &data_to_add)
Merge the history nodes from another.
Definition ProcessingHistory.cc:441
std::multimap< std::string, mspass::utility::NodeData > get_nodes() const
Definition ProcessingHistory.cc:614
void add_many_inputs(const std::vector< ProcessingHistory * > &d)
Define several data objects as inputs.
Definition ProcessingHistory.cc:305
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:320
ProcessingHistory()
Definition ProcessingHistory.cc:82
int number_inputs() const
Definition ProcessingHistory.cc:650
std::pair< std::string, std::string > created_by() const
Definition ProcessingHistory.h:601
bool is_volatile() const
Definition ProcessingHistory.cc:128
bool is_empty() const
Definition ProcessingHistory.cc:110
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:173
std::string newid()
Definition ProcessingHistory.cc:653
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:397
ProcessingHistory & operator=(const ProcessingHistory &parent)
Definition ProcessingHistory.cc:689
void add_one_input(const ProcessingHistory &data_to_add)
Add one datum as an input for current data.
Definition ProcessingHistory.cc:264
std::string id() const
Definition ProcessingHistory.h:599
void set_id(const std::string newid)
Definition ProcessingHistory.cc:660
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:672
std::string clean_accumulate_uuids()
Clean up inconsistent uuids that can be produced by reduce.
Definition ProcessingHistory.cc:548
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:476
int stage() const
Definition ProcessingHistory.h:591