3#include "database/event_db/event_db_settings.h"
6#include <services/nlohmann/json.hpp>
15 gSystem->ExpandPathName(dir_name);
19 if (file_list ==
nullptr) {
20 cout <<
"WARNING: There are no files in the directory: " << dir_name << endl;
24 int total_parsed_events = 0, added_events = 0, total_files = 0, parsed_files = 0, added_files = 0;
26 TIter iterFile(file_list);
29 if ((file_name ==
".") || (file_name ==
".."))
35 write_emd(file_dir, storage_name, software_version);
39 if (file_path[file_path.
Length() - 1] !=
'/')
41 file_path += file_name;
44 TFile dst_file(file_path);
47 cout <<
"WARNING: the current file has no 'bmndata' tree: " << file_path << endl;
54 int period_number = -1, run_number = -1, track_number = -1;
56 period_number = run_header->GetPeriodNumber();
57 run_number = run_header->GetRunNumber();
60 cout <<
"WARNING: the current file has not DST format: " << file_path << endl;
69 if (event_count < 1) {
71 <<
"ERROR: the current file (Run " << period_number <<
":" << run_number
72 <<
") has 0 events: " << file_path << endl;
77 json emd_json = json::array();
85 int parsed_events = 0;
86 for (
Int_t curEvent = 0; curEvent < dst_tree->
GetEntries(); curEvent++) {
92 emd_element[
"reference"][
"storage_name"] = storage_name.
Data();
93 emd_element[
"reference"][
"file_path"] = file_path.
Data();
94 emd_element[
"reference"][
"event_number"] = curEvent;
95 emd_element[
"software_version"] = software_version.
Data();
96 emd_element[
"period_number"] = period_number;
97 emd_element[
"run_number"] = run_number;
98 emd_element[
"parameters"][
"track_number"] = track_number;
100 emd_json.push_back(emd_element);
103 total_parsed_events += parsed_events;
106 size_t lastindex = file_path.
Last(
'.');
107 TString json_name = file_path(0, lastindex);
109 json_name.
Append(
".json");
110 ofstream json_file(json_name.
Data());
111 json_file << setw(4) << emd_json << endl;
116 if (isWriteEventDB) {
117 gSystem->ExpandPathName(json_name);
122 added_events += parsed_events;
132 if (total_parsed_events > 0) {
133 cout << endl << total_parsed_events <<
" events have been parsed in " << parsed_files <<
" files";
135 cout <<
" and " << added_events <<
" events were successfully added from " << added_files <<
" files";
136 cout <<
" (dir: " << dir_name <<
" with " << total_files <<
" files)" << endl << endl;
138 cout << endl <<
"There are no DST ROOT files in the directory (dir: " << dir_name <<
")" << endl << endl;
#define R__LOAD_LIBRARY(LIBRARY)
#define R__ADD_INCLUDE_PATH(PATH)
R__EXTERN TSystem * gSystem
Main Interface Class to work with the Event Catalogue of the experiment Throws runtime_exception if a...
int AddEventInfo(string storage_name, string file_path, int event_number, EventInfo event_metadata)
Function to add metadata for the event stored at the given location.
T * Get(const char *namecycle)
const char * GetName() const override
const char * GetTitle() const override
Int_t GetEntriesFast() const
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
const char * Data() const
Ssiz_t Last(char c) const
TString & Append(char c, Ssiz_t rep=1)
TString & ReplaceAll(const char *s1, const char *s2)
virtual TList * GetListOfFiles() const
virtual Bool_t IsDirectory(const char *dir=nullptr) const
virtual void SetBranchStatus(const char *bname, bool status=true, UInt_t *found=nullptr)
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
TFile * GetCurrentFile() const
virtual Long64_t GetEntries() const
Int_t SetBranchAddress(const char *bname, T **add, TBranch **ptr=nullptr)
int write_emd_2db(TString json_path)
int write_emd(TString dir_name, TString storage_name, TString software_version, bool isWriteEventDB=false)
basic_json< nlohmann::ordered_map > ordered_json
specialization that maintains the insertion order of object keys