45 TObjString* TOS_w_JSON;
48 TString obj_input_type = obj_in->ClassName();
50 if (obj_input_type ==
"TFile") {
55 TDirectory* obj_in_dir =
static_cast<TDirectory*
> (obj_in);
56 TDirectory* obj_to_dir =
static_cast<TDirectory*
> (obj_to);
57 TString name = obj_in->GetName();
59 if (is_file ==
false) {
60 copy_dir = obj_to_dir->mkdir(name);
62 copy_dir = obj_to_dir;
66 TIter next(obj_in_dir->GetListOfKeys());
68 while ((key = (TKey*) next())) {
70 TString key_name = key->GetName();
71 TString key_type = key->GetClassName();
72 if (key_type ==
"TObjString") {
73 if (key_name ==
"File_version") {
76 obj_in_dir->GetObject(key_name, TOS_w_JSON);
78 content = TOS_w_JSON->GetString();
85 idir =
new TDirectoryFile(key_name,
"");
87 copy_dir->GetObject(key_name, idir);
89 using json = nlohmann::json;
91 auto j = json::parse(content);
100 else if (key_type ==
"TH1I" || key_type ==
"TH2I" || key_type ==
"TH1F" || key_type ==
"TH2F" ||
101 key_type ==
"TProfile2D" || key_type ==
"TProfile" || key_type ==
"TGraphAsymmErrors" ||
102 key_type ==
"TGraphErrors" || key_type ==
"TH1D" || key_type ==
"TH2S") {
103 obj_inside = obj_in_dir->GetKey(key_name)->ReadObj();
105 if (key_name ==
"Reference") {
107 copy_dir->mkdir(
"Results");
109 copy_dir->cd(
"Results");
111 obj_inside->Write(key_name);
114 }
else if (key_type ==
"TDirectoryFile") {
115 obj_inside = obj_in_dir->GetKey(key_name)->ReadObj();
123 using json = nlohmann::json;
125 int size = str_content.size();
127 for (json::iterator it = str_content.begin(); it != str_content.end(); ++it) {
129 TDirectory* nextLevelDirs[size];
131 const char* keyname = it.key().c_str();
132 auto valuestring = it.value();
134 if (
dir_exists(keyname, place_to_save) == 0) {
135 place_to_save->mkdir(keyname);
137 place_to_save->cd(keyname);
138 nextLevelDirs[num_of_key] = gDirectory;
139 if (strncmp(valuestring.type_name(),
"string", 6) == 0) {
141 nextLevelDirs[num_of_key]->cd();
142 TString string_name = valuestring.dump();
143 leaf.SetString(string_name);
144 nextLevelDirs[num_of_key]->WriteTObject(&leaf, string_name);