21
21
#include "Interface/Squeak.hh"
22
22
#include "src/common_cpp/Converter/DataConverters/JsonCppSpillConverter.hh"
23
23
#include "src/common_cpp/Converter/DataConverters/CppJsonSpillConverter.hh"
24
#include "src/common_cpp/API/PyWrapMapBase.hh"
26
MapCppGlobalTrackMatching::MapCppGlobalTrackMatching() {
27
_classname = "MapCppGlobalTrackMatching";
30
bool MapCppGlobalTrackMatching::birth(std::string argJsonConfigDocument) {
29
PyMODINIT_FUNC init_MapCppGlobalTrackMatching(void) {
30
PyWrapMapBase<MAUS::MapCppGlobalTrackMatching>::PyWrapMapBaseModInit
31
("MapCppGlobalTrackMatching", "", "", "", "");
34
MapCppGlobalTrackMatching::MapCppGlobalTrackMatching()
35
: MapBase<Data>("MapCppGlobalTrackMatching"), _configCheck(false) {
38
void MapCppGlobalTrackMatching::_birth(const std::string& argJsonConfigDocument) {
31
39
// Check if the JSON document can be parsed, else return error only.
32
41
bool parsingSuccessful = _reader.parse(argJsonConfigDocument, _configJSON);
33
42
if (!parsingSuccessful) {
43
throw MAUS::Exception(Exception::recoverable,
44
"Failed to parse configuration",
45
"MapCppGlobalTrackMatching::birth");
37
47
_configCheck = true;
41
bool MapCppGlobalTrackMatching::death() {
45
std::string MapCppGlobalTrackMatching::process(std::string document) const {
46
Json::FastWriter writer;
49
if (document.empty()) {
52
ss << _classname << " says: Empty document passed to process";
53
errors["bad_json_document"] = ss.str();
54
root["errors"] = errors;
55
return writer.write(root);
61
ss << _classname << " says: process passed an invalid configuration";
62
errors["bad_json_document"] = ss.str();
63
root["errors"] = errors;
64
return writer.write(root);
67
// Prepare converters, spill and json objects
68
JsonCppSpillConverter json2cppconverter;
69
CppJsonSpillConverter cpp2jsonconverter;
70
Json::Value *data_json = NULL;
71
MAUS::Data *data_cpp = NULL;
48
_classname = "MapCppGlobalTrackMatching";
51
void MapCppGlobalTrackMatching::_death() {
54
void MapCppGlobalTrackMatching::_process(MAUS::Data* data_cpp) const {
73
55
// Read string and convert to a Json object
75
Json::Value imported_json = JsonWrapper::StringToJson(document);
76
data_json = new Json::Value(imported_json);
77
} catch (Exception& exception) {
78
MAUS::CppErrorHandler::getInstance()->
79
HandleExceptionNoJson(exception, _classname);
80
Squeak::mout(Squeak::error) << "String to Json conversion failed,"
81
<< "MapCppGlobalTrackMatching::process" << std::endl;
84
ss << _classname << " says: Bad json document";
85
errors["bad_json_document"] = ss.str();
86
root["errors"] = errors;
88
return writer.write(root);
89
} catch (std::exception& exc) {
90
MAUS::CppErrorHandler::getInstance()->HandleStdExcNoJson(exc, _classname);
91
Squeak::mout(Squeak::error) << "String to Json conversion failed,"
92
<< "MapCppGlobalTrackMatching::process"
96
ss << _classname << " says: Bad json document";
97
errors["bad_json_document"] = ss.str();
98
root["errors"] = errors;
100
return writer.write(root);
103
if (!data_json || data_json->isNull()) {
104
if (data_json) delete data_json;
105
return std::string("{\"errors\":{\"bad_json_document\":")+
106
std::string("\"Failed to parse input document\"}}");
109
if (data_json->empty()) {
111
return std::string("{\"errors\":{\"bad_json_document\":")+
112
std::string("\"Failed to parse input document\"}}");
115
std::string maus_event = JsonWrapper::GetProperty(
116
*data_json, "maus_event_type",
117
JsonWrapper::stringValue).asString();
119
if ( maus_event.compare("Spill") != 0 ) {
120
Squeak::mout(Squeak::error) << "Line of json document did not contain "
121
<< "a Spill" << std::endl;
126
std::string daq_event = JsonWrapper::GetProperty(
127
*data_json, "daq_event_type",
128
JsonWrapper::stringValue).asString();
130
if ( daq_event.compare("physics_event") != 0 ) {
131
Squeak::mout(Squeak::error) << "daq_event_type did not return a "
132
<< "physics event" << std::endl;
137
// Convert Json into MAUS::Spill object. In future, this will all
138
// be done for me, and process will take/return whichever object we
141
data_cpp = json2cppconverter(data_json);
144
Squeak::mout(Squeak::error) << "Missing required branch daq_event_type"
145
<< "converting json->cpp, MapCppGlobalTrackMatching" << std::endl;
149
return std::string("{\"errors\":{\"failed_json_cpp_conversion\":")+
150
std::string("\"Failed to convert Json to Cpp Spill object\"}}");
57
throw MAUS::Exception(Exception::recoverable,
59
"MapCppGlobalTrackMatching::_process");
62
throw MAUS::Exception(Exception::recoverable,
63
"Birth has not been successfully called",
64
"MapCppGlobalTrackMatching::_process");
153
67
const MAUS::Spill* spill = data_cpp->GetSpill();