9#include "TSQLStatement.h"
23 TDatime start_datetime,
24 TDatime* end_datetime,
25 TString beam_particle,
26 TString target_particle,
28 double* field_voltage,
33 connectionDB = db_connect;
35 i_period_number = period_number;
37 i_run_type = run_type;
38 ts_start_datetime = start_datetime;
39 ts_end_datetime = end_datetime;
40 str_beam_particle = beam_particle;
41 str_target_particle = target_particle;
43 d_field_voltage = field_voltage;
44 i_event_count = event_count;
45 i_geometry_id = geometry_id;
46 i_run_quality = run_quality;
55 delete ts_end_datetime;
59 delete d_field_voltage;
70 TDatime start_datetime,
71 TDatime* end_datetime,
72 TString beam_particle,
73 TString target_particle,
75 double* field_voltage,
81 if (connDb ==
nullptr)
87 TString::Format(
"insert into run_(period_number, run_number, run_type, start_datetime, end_datetime, "
88 "beam_particle, target_particle, energy, field_voltage, event_count, geometry_id, run_quality) "
89 "values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)");
90 TSQLStatement* stmt = db_server->Statement(sql);
92 stmt->NextIteration();
93 stmt->SetInt(0, period_number);
94 stmt->SetInt(1, run_number);
95 stmt->SetInt(2, run_type);
96 stmt->SetDatime(3, start_datetime);
97 if (end_datetime ==
nullptr)
100 stmt->SetDatime(4, *end_datetime);
101 stmt->SetString(5, beam_particle);
102 stmt->SetString(6, target_particle);
103 if (energy ==
nullptr)
106 stmt->SetDouble(7, *energy);
107 if (field_voltage ==
nullptr)
110 stmt->SetDouble(8, *field_voltage);
111 if (event_count ==
nullptr)
114 stmt->SetInt(9, *event_count);
115 if (geometry_id ==
nullptr)
118 stmt->SetInt(10, *geometry_id);
119 stmt->SetInt(11, run_quality);
122 if (!stmt->Process()) {
123 cout <<
"ERROR: inserting new run to the Database has been failed" << endl;
131 int tmp_period_number;
132 tmp_period_number = period_number;
134 tmp_run_number = run_number;
136 tmp_run_type = run_type;
137 TDatime tmp_start_datetime;
138 tmp_start_datetime = start_datetime;
139 TDatime* tmp_end_datetime;
140 if (end_datetime ==
nullptr)
141 tmp_end_datetime =
nullptr;
143 tmp_end_datetime =
new TDatime(*end_datetime);
144 TString tmp_beam_particle;
145 tmp_beam_particle = beam_particle;
146 TString tmp_target_particle;
147 tmp_target_particle = target_particle;
149 if (energy ==
nullptr)
150 tmp_energy =
nullptr;
152 tmp_energy =
new double(*energy);
153 double* tmp_field_voltage;
154 if (field_voltage ==
nullptr)
155 tmp_field_voltage =
nullptr;
157 tmp_field_voltage =
new double(*field_voltage);
158 int* tmp_event_count;
159 if (event_count ==
nullptr)
160 tmp_event_count =
nullptr;
162 tmp_event_count =
new int(*event_count);
163 int* tmp_geometry_id;
164 if (geometry_id ==
nullptr)
165 tmp_geometry_id =
nullptr;
167 tmp_geometry_id =
new int(*geometry_id);
169 tmp_run_quality = run_quality;
171 return new UniRun(connDb, tmp_period_number, tmp_run_number, tmp_run_type, tmp_start_datetime, tmp_end_datetime,
172 tmp_beam_particle, tmp_target_particle, tmp_energy, tmp_field_voltage, tmp_event_count,
173 tmp_geometry_id, tmp_run_quality);
180 if (connDb ==
nullptr)
186 TString::Format(
"select period_number, run_number, run_type, start_datetime, end_datetime, beam_particle, "
187 "target_particle, energy, field_voltage, event_count, geometry_id, run_quality "
189 "where period_number = %d and run_number = %d",
190 period_number, run_number);
191 TSQLStatement* stmt = db_server->Statement(sql);
194 if (!stmt->Process()) {
195 cout <<
"ERROR: getting run from the database has been failed" << endl;
206 if (!stmt->NextResultRow()) {
207 cout <<
"ERROR: run was not found in the database" << endl;
214 int tmp_period_number;
215 tmp_period_number = stmt->GetInt(0);
217 tmp_run_number = stmt->GetInt(1);
219 tmp_run_type = stmt->GetInt(2);
220 TDatime tmp_start_datetime;
221 tmp_start_datetime = stmt->GetDatime(3);
222 TDatime* tmp_end_datetime;
224 tmp_end_datetime =
nullptr;
226 tmp_end_datetime =
new TDatime(stmt->GetDatime(4));
227 TString tmp_beam_particle;
228 tmp_beam_particle = stmt->GetString(5);
229 TString tmp_target_particle;
230 tmp_target_particle = stmt->GetString(6);
233 tmp_energy =
nullptr;
235 tmp_energy =
new double(stmt->GetDouble(7));
236 double* tmp_field_voltage;
238 tmp_field_voltage =
nullptr;
240 tmp_field_voltage =
new double(stmt->GetDouble(8));
241 int* tmp_event_count;
243 tmp_event_count =
nullptr;
245 tmp_event_count =
new int(stmt->GetInt(9));
246 int* tmp_geometry_id;
247 if (stmt->IsNull(10))
248 tmp_geometry_id =
nullptr;
250 tmp_geometry_id =
new int(stmt->GetInt(10));
252 tmp_run_quality = stmt->GetInt(11);
256 return new UniRun(connDb, tmp_period_number, tmp_run_number, tmp_run_type, tmp_start_datetime, tmp_end_datetime,
257 tmp_beam_particle, tmp_target_particle, tmp_energy, tmp_field_voltage, tmp_event_count,
258 tmp_geometry_id, tmp_run_quality);
265 if (connDb ==
nullptr)
270 TString sql = TString::Format(
"select 1 "
272 "where period_number = %d and run_number = %d",
273 period_number, run_number);
274 TSQLStatement* stmt = db_server->Statement(sql);
277 if (!stmt->Process()) {
278 cout <<
"ERROR: getting run from the database has been failed" << endl;
289 if (!stmt->NextResultRow()) {
305 if (connDb ==
nullptr)
310 TString sql = TString::Format(
"delete from run_ "
311 "where period_number = $1 and run_number = $2");
312 TSQLStatement* stmt = db_server->Statement(sql);
314 stmt->NextIteration();
315 stmt->SetInt(0, period_number);
316 stmt->SetInt(1, run_number);
319 if (!stmt->Process()) {
320 cout <<
"ERROR: deleting run from the dataBase has been failed" << endl;
336 if (connDb ==
nullptr)
342 TString::Format(
"select period_number, run_number, run_type, start_datetime, end_datetime, beam_particle, "
343 "target_particle, energy, field_voltage, event_count, geometry_id, run_quality "
345 TSQLStatement* stmt = db_server->Statement(sql);
348 if (!stmt->Process()) {
349 cout <<
"ERROR: getting all 'runs' from the dataBase has been failed" << endl;
360 cout <<
"Table 'run_':" << endl;
361 while (stmt->NextResultRow()) {
362 cout <<
"period_number: ";
363 cout << (stmt->GetInt(0));
364 cout <<
", run_number: ";
365 cout << (stmt->GetInt(1));
366 cout <<
", run_type: ";
367 cout << (stmt->GetInt(2));
368 cout <<
", start_datetime: ";
369 cout << (stmt->GetDatime(3)).AsSQLString();
370 cout <<
", end_datetime: ";
374 cout << stmt->GetDatime(4).AsSQLString();
375 cout <<
", beam_particle: ";
376 cout << (stmt->GetString(5));
377 cout <<
", target_particle: ";
378 cout << (stmt->GetString(6));
379 cout <<
", energy: ";
383 cout << stmt->GetDouble(7);
384 cout <<
", field_voltage: ";
388 cout << stmt->GetDouble(8);
389 cout <<
", event_count: ";
393 cout << stmt->GetInt(9);
394 cout <<
", geometry_id: ";
395 if (stmt->IsNull(10))
398 cout << stmt->GetInt(10);
399 cout <<
", run_quality: ";
400 cout << (stmt->GetInt(11));
414 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
420 TString sql = TString::Format(
"update run_ "
421 "set period_number = $1 "
422 "where period_number = $2 and run_number = $3");
423 TSQLStatement* stmt = db_server->Statement(sql);
425 stmt->NextIteration();
426 stmt->SetInt(0, period_number);
427 stmt->SetInt(1, i_period_number);
428 stmt->SetInt(2, i_run_number);
431 if (!stmt->Process()) {
432 cout <<
"ERROR: updating information about run has been failed" << endl;
438 i_period_number = period_number;
447 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
453 TString sql = TString::Format(
"update run_ "
454 "set run_number = $1 "
455 "where period_number = $2 and run_number = $3");
456 TSQLStatement* stmt = db_server->Statement(sql);
458 stmt->NextIteration();
459 stmt->SetInt(0, run_number);
460 stmt->SetInt(1, i_period_number);
461 stmt->SetInt(2, i_run_number);
464 if (!stmt->Process()) {
465 cout <<
"ERROR: updating information about run has been failed" << endl;
471 i_run_number = run_number;
480 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
486 TString sql = TString::Format(
"update run_ "
488 "where period_number = $2 and run_number = $3");
489 TSQLStatement* stmt = db_server->Statement(sql);
491 stmt->NextIteration();
492 stmt->SetInt(0, run_type);
493 stmt->SetInt(1, i_period_number);
494 stmt->SetInt(2, i_run_number);
497 if (!stmt->Process()) {
498 cout <<
"ERROR: updating information about run has been failed" << endl;
504 i_run_type = run_type;
513 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
519 TString sql = TString::Format(
"update run_ "
520 "set start_datetime = $1 "
521 "where period_number = $2 and run_number = $3");
522 TSQLStatement* stmt = db_server->Statement(sql);
524 stmt->NextIteration();
525 stmt->SetDatime(0, start_datetime);
526 stmt->SetInt(1, i_period_number);
527 stmt->SetInt(2, i_run_number);
530 if (!stmt->Process()) {
531 cout <<
"ERROR: updating information about run has been failed" << endl;
537 ts_start_datetime = start_datetime;
546 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
552 TString sql = TString::Format(
"update run_ "
553 "set end_datetime = $1 "
554 "where period_number = $2 and run_number = $3");
555 TSQLStatement* stmt = db_server->Statement(sql);
557 stmt->NextIteration();
558 if (end_datetime ==
nullptr)
561 stmt->SetDatime(0, *end_datetime);
562 stmt->SetInt(1, i_period_number);
563 stmt->SetInt(2, i_run_number);
566 if (!stmt->Process()) {
567 cout <<
"ERROR: updating information about run has been failed" << endl;
574 delete ts_end_datetime;
575 if (end_datetime ==
nullptr)
576 ts_end_datetime =
nullptr;
578 ts_end_datetime =
new TDatime(*end_datetime);
587 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
593 TString sql = TString::Format(
"update run_ "
594 "set beam_particle = $1 "
595 "where period_number = $2 and run_number = $3");
596 TSQLStatement* stmt = db_server->Statement(sql);
598 stmt->NextIteration();
599 stmt->SetString(0, beam_particle);
600 stmt->SetInt(1, i_period_number);
601 stmt->SetInt(2, i_run_number);
604 if (!stmt->Process()) {
605 cout <<
"ERROR: updating information about run has been failed" << endl;
611 str_beam_particle = beam_particle;
620 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
626 TString sql = TString::Format(
"update run_ "
627 "set target_particle = $1 "
628 "where period_number = $2 and run_number = $3");
629 TSQLStatement* stmt = db_server->Statement(sql);
631 stmt->NextIteration();
632 stmt->SetString(0, target_particle);
633 stmt->SetInt(1, i_period_number);
634 stmt->SetInt(2, i_run_number);
637 if (!stmt->Process()) {
638 cout <<
"ERROR: updating information about run has been failed" << endl;
644 str_target_particle = target_particle;
653 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
659 TString sql = TString::Format(
"update run_ "
661 "where period_number = $2 and run_number = $3");
662 TSQLStatement* stmt = db_server->Statement(sql);
664 stmt->NextIteration();
665 if (energy ==
nullptr)
668 stmt->SetDouble(0, *energy);
669 stmt->SetInt(1, i_period_number);
670 stmt->SetInt(2, i_run_number);
673 if (!stmt->Process()) {
674 cout <<
"ERROR: updating information about run has been failed" << endl;
682 if (energy ==
nullptr)
685 d_energy =
new double(*energy);
694 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
700 TString sql = TString::Format(
"update run_ "
701 "set field_voltage = $1 "
702 "where period_number = $2 and run_number = $3");
703 TSQLStatement* stmt = db_server->Statement(sql);
705 stmt->NextIteration();
706 if (field_voltage ==
nullptr)
709 stmt->SetDouble(0, *field_voltage);
710 stmt->SetInt(1, i_period_number);
711 stmt->SetInt(2, i_run_number);
714 if (!stmt->Process()) {
715 cout <<
"ERROR: updating information about run has been failed" << endl;
722 delete d_field_voltage;
723 if (field_voltage ==
nullptr)
724 d_field_voltage =
nullptr;
726 d_field_voltage =
new double(*field_voltage);
735 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
741 TString sql = TString::Format(
"update run_ "
742 "set event_count = $1 "
743 "where period_number = $2 and run_number = $3");
744 TSQLStatement* stmt = db_server->Statement(sql);
746 stmt->NextIteration();
747 if (event_count ==
nullptr)
750 stmt->SetInt(0, *event_count);
751 stmt->SetInt(1, i_period_number);
752 stmt->SetInt(2, i_run_number);
755 if (!stmt->Process()) {
756 cout <<
"ERROR: updating information about run has been failed" << endl;
763 delete i_event_count;
764 if (event_count ==
nullptr)
765 i_event_count =
nullptr;
767 i_event_count =
new int(*event_count);
776 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
782 TString sql = TString::Format(
"update run_ "
783 "set geometry_id = $1 "
784 "where period_number = $2 and run_number = $3");
785 TSQLStatement* stmt = db_server->Statement(sql);
787 stmt->NextIteration();
788 if (geometry_id ==
nullptr)
791 stmt->SetInt(0, *geometry_id);
792 stmt->SetInt(1, i_period_number);
793 stmt->SetInt(2, i_run_number);
796 if (!stmt->Process()) {
797 cout <<
"ERROR: updating information about run has been failed" << endl;
804 delete i_geometry_id;
805 if (geometry_id ==
nullptr)
806 i_geometry_id =
nullptr;
808 i_geometry_id =
new int(*geometry_id);
817 cout <<
"CRITICAL ERROR: Connection object is null" << endl;
823 TString sql = TString::Format(
"update run_ "
824 "set run_quality = $1 "
825 "where period_number = $2 and run_number = $3");
826 TSQLStatement* stmt = db_server->Statement(sql);
828 stmt->NextIteration();
829 stmt->SetInt(0, run_quality);
830 stmt->SetInt(1, i_period_number);
831 stmt->SetInt(2, i_run_number);
834 if (!stmt->Process()) {
835 cout <<
"ERROR: updating information about run has been failed" << endl;
841 i_run_quality = run_quality;
850 cout <<
"Table 'run_'";
851 cout <<
". period_number: " << i_period_number <<
". run_number: " << i_run_number <<
". run_type: " << i_run_type
852 <<
". start_datetime: " << ts_start_datetime.AsSQLString()
853 <<
". end_datetime: " << (ts_end_datetime ==
nullptr ?
"nullptr" : (*ts_end_datetime).AsSQLString())
854 <<
". beam_particle: " << str_beam_particle <<
". target_particle: " << str_target_particle
855 <<
". energy: " << (d_energy ==
nullptr ?
"nullptr" : TString::Format(
"%f", *d_energy))
856 <<
". field_voltage: " << (d_field_voltage ==
nullptr ?
"nullptr" : TString::Format(
"%f", *d_field_voltage))
857 <<
". event_count: " << (i_event_count ==
nullptr ?
"nullptr" : TString::Format(
"%d", *i_event_count))
858 <<
". geometry_id: " << (i_geometry_id ==
nullptr ?
"nullptr" : TString::Format(
"%d", *i_geometry_id))
859 <<
". run_quality: " << i_run_quality << endl;
875 if (connDb ==
nullptr) {
876 cout <<
"ERROR: connection to the database was failed" << endl;
882 if (end_period == -1)
883 end_period = start_period;
884 TString sql = TString::Format(
885 "select period_number, run_number "
887 "where (not (((%d < period_number) or ((%d = period_number) and (%d <> -1) and (%d < run_number))) "
888 "or ((%d > period_number) or ((%d = period_number) and (%d > run_number))))) "
889 "order by period_number, run_number",
890 end_period, end_period, end_run, end_run, start_period, start_period, start_run);
891 TSQLStatement* stmt = db_server->Statement(sql);
894 if (!stmt->Process()) {
895 cout <<
"ERROR: getting run numbers from the database has been failed" << endl;
904 vector<int> vecPeriods;
906 while (stmt->NextResultRow()) {
907 vecPeriods.push_back(stmt->GetInt(0));
908 vecRuns.push_back(stmt->GetInt(1));
914 int run_count = vecPeriods.size();
916 for (
int i = 0;
i < run_count;
i++) {
917 run_numbers[
i].period_number = vecPeriods[
i];
918 run_numbers[
i].run_number = vecRuns[
i];
928 if (connDb ==
nullptr) {
929 cout <<
"ERROR: connection to the database was failed" << endl;
935 TString sql = TString::Format(
"select period_number, run_number "
937 "order by period_number, run_number");
938 TSQLStatement* stmt = db_server->Statement(sql);
941 if (!stmt->Process()) {
942 cout <<
"ERROR: getting run numbers from the database has been failed" << endl;
951 vector<int> vecPeriods;
953 while (stmt->NextResultRow()) {
954 vecPeriods.push_back(stmt->GetInt(0));
955 vecRuns.push_back(stmt->GetInt(1));
961 int run_count = vecPeriods.size();
963 for (
int i = 0;
i < run_count;
i++) {
964 run_numbers[
i].period_number = vecPeriods[
i];
965 run_numbers[
i].run_number = vecRuns[
i];
975 unsigned char* root_geometry,
976 Long_t size_root_geometry)
978 if (((end_period < start_period) or ((end_period == start_period) and (end_run < start_run)))
979 or ((start_period > end_period) or ((start_period == end_period) and (start_run > end_run))))
981 cout <<
"ERROR: end run should be after or the same as start run" << endl;
986 if (pGeometry ==
nullptr) {
987 cout <<
"ERROR: creating of the geometry was failed" << endl;
995 int run_count =
GetRunNumbers(pUniqueRuns, start_period, start_run, end_period, end_run);
997 return -10 - run_count;
999 for (
int i = 0;
i < run_count;
i++) {
1004 if (pCurRun ==
nullptr) {
1006 <<
" (period:number) was failed" << endl;
1015 delete[] pUniqueRuns;
1022 unsigned char*& root_geometry,
1023 Long_t& size_root_geometry)
1026 if (pCurRun ==
nullptr) {
1027 cout <<
"ERROR: getting of run " << period_number <<
":" << run_number <<
" (period:number) was failed" << endl;
1032 if (geometry_ID ==
nullptr) {
1033 cout <<
"ERROR: no geometry exists for run " << period_number <<
":" << run_number <<
" (period:number)"
1038 int geometry_id = geometry_ID[0];
1040 if (pGeometry ==
nullptr) {
1041 cout <<
"ERROR: getting of the geometry was failed" << endl;
1056 TString strGeoFilePath(geo_file_path);
1057 gSystem->ExpandPathName(strGeoFilePath);
1058 FILE* root_file = fopen(strGeoFilePath.Data(),
"rb");
1059 if (root_file ==
nullptr) {
1060 cout <<
"ERROR: opening root file: " << strGeoFilePath <<
" was failed" << endl;
1064 fseek(root_file, 0, SEEK_END);
1068 cout <<
"ERROR: getting file size: " << strGeoFilePath <<
" was failed" << endl;
1073 unsigned char* buffer =
new unsigned char[
file_size];
1074 if (buffer ==
nullptr) {
1075 cout <<
"ERROR: getting memory from heap was failed" << endl;
1080 size_t bytes_read = fread(buffer, 1,
file_size, root_file);
1082 cout <<
"ERROR: reading file: " << strGeoFilePath <<
", got " << bytes_read <<
" bytes of " <<
file_size
1093 if (res_code != 0) {
1108 unsigned char* buffer =
nullptr;
1111 if (res_code != 0) {
1112 if (usePrevGeometryIfMissing) {
1113 cout <<
"INFO: Trying to get the closest last geometry file for " << period_number <<
":" << run_number
1116 if (res_last_code != 0)
1118 cout <<
"INFO: The closest last geometry was get from " << period_number <<
":" << run_number <<
" run"
1125 FILE* root_file = fopen(geo_file_path,
"wb");
1126 if (root_file ==
nullptr) {
1127 cout <<
"ERROR: creating root file: " << geo_file_path << endl;
1131 size_t bytes_write = fwrite(buffer, 1,
file_size, root_file);
1133 cout <<
"ERROR: writing file: " << geo_file_path <<
", put " << bytes_write <<
" bytes of " <<
file_size
1154 if (connDb ==
nullptr)
1159 TString sql(
"select period_number, run_number, root_geometry "
1160 "from run_ r join run_geometry rg on r.geometry_id = rg.geometry_id ");
1161 if ((period_number > 0) and (run_number > 0))
1162 sql += TString::Format(
"where period_number < %d OR (period_number = %d and run_number < %d) ", period_number,
1163 period_number, run_number);
1164 sql +=
"order by period_number desc, run_number desc "
1166 TSQLStatement* stmt = db_server->Statement(sql);
1169 if (!stmt->Process()) {
1170 cout <<
"ERROR: getting last ROOT geometry from the database has been failed" << endl;
1178 stmt->StoreResult();
1181 if (!stmt->NextResultRow()) {
1187 period_number = stmt->GetInt(0);
1188 run_number = stmt->GetInt(1);
1189 unsigned char* tmp_root_geometry;
1190 tmp_root_geometry =
nullptr;
1191 Long_t tmp_sz_root_geometry = 0;
1192 stmt->GetBinary(2, (
void*&)tmp_root_geometry, tmp_sz_root_geometry);
1198 FILE* root_file = fopen(geo_file_path,
"wb");
1199 if (root_file ==
nullptr) {
1200 cout <<
"ERROR: creating root file: " << geo_file_path << endl;
1204 size_t bytes_write = fwrite(tmp_root_geometry, 1, tmp_sz_root_geometry, root_file);
1205 if (bytes_write != (
size_t)tmp_sz_root_geometry) {
1206 cout <<
"ERROR: writing file: " << geo_file_path <<
", put " << bytes_write <<
" bytes of "
1207 << tmp_sz_root_geometry << endl;
1208 delete[] tmp_root_geometry;
1215 if (tmp_root_geometry)
1216 delete[] tmp_root_geometry;
1229 if (connDb ==
nullptr)
1234 TString sql(
"select period_number, run_number, field_voltage "
1236 if ((period_number > 0) and (run_number > 0))
1237 sql += TString::Format(
1238 "where period_number < %d OR (period_number = %d and run_number < %d) and field_voltage is not NULL ",
1239 period_number, period_number, run_number);
1240 sql +=
"order by period_number desc, run_number desc "
1242 TSQLStatement* stmt = db_server->Statement(sql);
1245 if (!stmt->Process()) {
1246 cout <<
"ERROR: getting previous field_voltage from the database has been failed" << endl;
1254 stmt->StoreResult();
1257 if (!stmt->NextResultRow()) {
1263 period_number = stmt->GetInt(0);
1264 run_number = stmt->GetInt(1);
1265 double field_voltage = stmt->GetDouble(2);
1270 return field_voltage;
1275 TObjArray* arrayResult =
nullptr;
1276 search_conditions.SetOwner(kTRUE);
1279 if (connDb ==
nullptr) {
1280 cout <<
"ERROR: connection to the Unified Condition Database was failed" << endl;
1286 TString sql = TString::Format(
"select period_number, run_number, run_type, start_datetime, end_datetime, "
1287 "beam_particle, target_particle, energy, field_voltage, event_count, geometry_id "
1290 TString strCondition;
1291 bool isFirst =
true;
1292 TIter next(&search_conditions);
1299 strCondition +=
"run_number ";
1302 strCondition +=
"period_number ";
1306 strCondition +=
"lower(beam_particle) ";
1309 strCondition +=
"lower(target_particle) ";
1312 strCondition +=
"energy ";
1315 strCondition +=
"start_datetime ";
1318 strCondition +=
"end_datetime ";
1321 strCondition +=
"event_count ";
1324 strCondition +=
"field_voltage ";
1328 cout <<
"ERROR: the column in the search condition was not defined, the condition is skipped" << endl;
1334 strCondition +=
"< ";
1337 strCondition +=
"<= ";
1340 strCondition +=
"= ";
1343 strCondition +=
"<> ";
1346 strCondition +=
"> ";
1349 strCondition +=
">= ";
1352 strCondition +=
"like ";
1355 strCondition +=
"is null ";
1358 strCondition +=
"is not null ";
1361 cout <<
"ERROR: the comparison operator in the search condition was not defined, the condition is "
1374 strCondition += Form(
"%d", curCondition->
GetIntValue());
1377 strCondition += Form(
"%u", curCondition->
GetUIntValue());
1383 strCondition += Form(
"lower('%s')", curCondition->
GetStringValue().Data());
1386 strCondition += Form(
"'%s'", curCondition->
GetDatimeValue().AsSQLString());
1389 cout <<
"ERROR: the value type in the search condition was not found, the condition is skipped" << endl;
1399 sql += strCondition;
1401 sql +=
" order by period_number,run_number";
1403 TSQLStatement* stmt = db_server->Statement(sql);
1407 if (!stmt->Process()) {
1408 cout <<
"ERROR: getting runs from the Unified Condition Database has been failed" << endl;
1416 stmt->StoreResult();
1419 arrayResult =
new TObjArray();
1420 arrayResult->SetOwner(kTRUE);
1421 while (stmt->NextResultRow()) {
1423 if (connRun ==
nullptr) {
1424 cout <<
"ERROR: the connection to the Unified Condition Database for the selected run was failed" << endl;
1428 int tmp_period_number;
1429 tmp_period_number = stmt->GetInt(0);
1431 tmp_run_number = stmt->GetInt(1);
1433 tmp_run_type = stmt->GetInt(2);
1434 TDatime tmp_start_datetime;
1435 tmp_start_datetime = stmt->GetDatime(3);
1436 TDatime* tmp_end_datetime;
1437 if (stmt->IsNull(4))
1438 tmp_end_datetime =
nullptr;
1440 tmp_end_datetime =
new TDatime(stmt->GetDatime(4));
1441 TString tmp_beam_particle;
1442 tmp_beam_particle = stmt->GetString(5);
1443 TString tmp_target_particle;
1444 tmp_target_particle = stmt->GetString(6);
1446 if (stmt->IsNull(7))
1447 tmp_energy =
nullptr;
1449 tmp_energy =
new double(stmt->GetDouble(7));
1450 double* tmp_field_voltage;
1451 if (stmt->IsNull(8))
1452 tmp_field_voltage =
nullptr;
1454 tmp_field_voltage =
new double(stmt->GetDouble(8));
1455 int* tmp_event_count;
1456 if (stmt->IsNull(9))
1457 tmp_event_count =
nullptr;
1459 tmp_event_count =
new int(stmt->GetInt(9));
1460 int* tmp_geometry_id;
1461 if (stmt->IsNull(10))
1462 tmp_geometry_id =
nullptr;
1464 tmp_geometry_id =
new int(stmt->GetInt(10));
1465 int tmp_run_quality;
1466 tmp_run_quality = stmt->GetInt(11);
1468 arrayResult->Add((TObject*)
new UniRun(connRun, tmp_period_number, tmp_run_number, tmp_run_type,
1469 tmp_start_datetime, tmp_end_datetime, tmp_beam_particle,
1470 tmp_target_particle, tmp_energy, tmp_field_voltage, tmp_event_count,
1471 tmp_geometry_id, tmp_run_quality));
1481 TObjArray search_conditions;
1482 search_conditions.Add((TObject*)&search_condition);
1484 return Search(search_conditions);
1492 if (!usePrevRunIfMissing)
1496 if (pRun ==
nullptr) {
1497 cout <<
"INFO: Trying to get the previous run number before " << period_number <<
":" << run_number <<
" run"
1500 if (res_prev_code != 0)
1502 cout <<
"INFO: The previous run number was defined: " << period_number <<
":" << run_number << endl;
1514 if (connDb ==
nullptr) {
1515 cout <<
"ERROR: connection to the Database was failed" << endl;
1521 TString sql =
"select period_number, run_number "
1523 if ((period_number > 0) and (run_number > 0))
1524 sql += TString::Format(
"where (period_number < %d) OR ((period_number = %d) AND (run_number < %d)) ",
1525 period_number, period_number, run_number);
1526 sql +=
"order by period_number desc, run_number desc "
1528 TSQLStatement* stmt = db_server->Statement(sql);
1531 if (!stmt->Process()) {
1532 cout <<
"ERROR: getting previous run number from DB has been failed" << endl;
1539 stmt->StoreResult();
1542 if (!stmt->NextResultRow()) {
1543 cout <<
"ERROR: previous run was not found in the database" << endl;
1550 period_number = stmt->GetInt(0);
1551 run_number = stmt->GetInt(1);
static UniConnection * Open()
TSQLServer * GetSQLServer()
static TObjArray * GetRawFiles(int period_number, int run_number)
int GetGeometryId()
get geometry id of the current run geometry
static UniRunGeometry * CreateRunGeometry(unsigned char *root_geometry, Long_t size_root_geometry)
add new run geometry to the database
unsigned char * GetRootGeometry()
get root geometry of the current run geometry
Long_t GetRootGeometrySize()
get size of root geometry of the current run geometry
static UniRunGeometry * GetRunGeometry(int geometry_id)
get run geometry from the database
static int PrintAll()
print all runs
void Print()
print information about current run
static UniRun * GetRun(int period_number, int run_number)
get run from the database
int SetEndDatetime(TDatime *end_datetime)
set end datetime of the current run
static TObjArray * Search(UniSearchCondition &search_condition)
get runs corresponding to the specified single condition and set owner for search_condition to kTRUE
int SetGeometryId(int *geometry_id)
set geometry id of the current run
int SetTargetParticle(TString target_particle)
set target particle of the current run
TObjArray * GetRawFiles()
get array of raw files (UniRawFile*) corresponding to the run (return nullptr if an error occured)
static int SetRootGeometry(int start_period, int start_run, int end_period, int end_run, unsigned char *root_geometry, Long_t size_root_geometry)
set geometry binary data (geometry file's data) for runs from start_run_number to end_run_number
int SetRunType(int run_type)
set run type of the current run
static int ReadGeometryFile(int period_number, int run_number, char *geo_file_path, bool usePrevGeometryIfMissing=false)
static int DeleteRun(int period_number, int run_number)
delete run from the database
int * GetGeometryId()
get geometry id of the current run
static int GetRunNumbers(UniqueRunNumber *&run_numbers, int start_period, int start_run=0, int end_period=-1, int end_run=-1)
int SetPeriodNumber(int period_number)
set period number of the current run
static UniRun * CreateRun(int period_number, int run_number, int run_type, TDatime start_datetime, TDatime *end_datetime, TString beam_particle, TString target_particle, double *energy, double *field_voltage, int *event_count, int *geometry_id, int run_quality)
add new run to the database
static int WriteGeometryFile(int start_period, int start_run, int end_period, int end_run, const char *geo_file_path)
write geometry file for runs from start_run_number to end_run_number to the database
static int ReadPreviousGeometryFile(int &period_number, int &run_number, char *geo_file_path)
int SetEventCount(int *event_count)
set event count of the current run
int SetRunNumber(int run_number)
set run number of the current run
static double FindPreviousFieldVoltage(int &period_number, int &run_number)
static int FindPreviousRun(int &period_number, int &run_number)
int SetFieldVoltage(double *field_voltage)
set field voltage of the current run
static int GetRootGeometry(int period_number, int run_number, unsigned char *&root_geometry, Long_t &size_root_geometry)
get geometry binary data (geometry file's data) for selected run number
int SetEnergy(double *energy)
set energy of the current run
int SetRunQuality(int run_quality)
set run quality of the current run
int SetBeamParticle(TString beam_particle)
set beam particle of the current run
int SetStartDatetime(TDatime start_datetime)
set start datetime of the current run
static int CheckRunExists(int period_number, int run_number)
check run exists in the database: 1- true, 0 - false, <0 - database operation error
enumConditions GetCondition()
@ conditionGreaterOrEqual
unsigned int GetUIntValue()