BmnRoot
Loading...
Searching...
No Matches
UniRun.cxx
Go to the documentation of this file.
1// ----------------------------------------------------------------------
2// UniRun cxx file
3// Generated 05-11-2015
4// ----------------------------------------------------------------------
5
6#include "UniRun.h"
7
8#include "TSQLServer.h"
9#include "TSQLStatement.h"
10#include "TSystem.h"
11#include "UniRawFile.h"
12#include "UniRunGeometry.h"
13
14#include <iostream>
15using namespace std;
16
17/* GENERATED CLASS MEMBERS (SHOULD NOT BE CHANGED MANUALLY) */
18// ----- Constructor with database connection -----------------------
19UniRun::UniRun(UniConnection* db_connect,
20 int period_number,
21 int run_number,
22 int run_type,
23 TDatime start_datetime,
24 TDatime* end_datetime,
25 TString beam_particle,
26 TString target_particle,
27 double* energy,
28 double* field_voltage,
29 int* event_count,
30 int* geometry_id,
31 int run_quality)
32{
33 connectionDB = db_connect;
34
35 i_period_number = period_number;
36 i_run_number = run_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;
42 d_energy = energy;
43 d_field_voltage = field_voltage;
44 i_event_count = event_count;
45 i_geometry_id = geometry_id;
46 i_run_quality = run_quality;
47}
48
49// ----- Destructor -------------------------------------------------
51{
52 if (connectionDB)
53 delete connectionDB;
54 if (ts_end_datetime)
55 delete ts_end_datetime;
56 if (d_energy)
57 delete d_energy;
58 if (d_field_voltage)
59 delete d_field_voltage;
60 if (i_event_count)
61 delete i_event_count;
62 if (i_geometry_id)
63 delete i_geometry_id;
64}
65
66// ----- Creating new run in the database ---------------------------
67UniRun* UniRun::CreateRun(int period_number,
68 int run_number,
69 int run_type,
70 TDatime start_datetime,
71 TDatime* end_datetime,
72 TString beam_particle,
73 TString target_particle,
74 double* energy,
75 double* field_voltage,
76 int* event_count,
77 int* geometry_id,
78 int run_quality)
79{
81 if (connDb == nullptr)
82 return nullptr;
83
84 TSQLServer* db_server = connDb->GetSQLServer();
85
86 TString sql =
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);
91
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)
98 stmt->SetNull(4);
99 else
100 stmt->SetDatime(4, *end_datetime);
101 stmt->SetString(5, beam_particle);
102 stmt->SetString(6, target_particle);
103 if (energy == nullptr)
104 stmt->SetNull(7);
105 else
106 stmt->SetDouble(7, *energy);
107 if (field_voltage == nullptr)
108 stmt->SetNull(8);
109 else
110 stmt->SetDouble(8, *field_voltage);
111 if (event_count == nullptr)
112 stmt->SetNull(9);
113 else
114 stmt->SetInt(9, *event_count);
115 if (geometry_id == nullptr)
116 stmt->SetNull(10);
117 else
118 stmt->SetInt(10, *geometry_id);
119 stmt->SetInt(11, run_quality);
120
121 // inserting new run to the Database
122 if (!stmt->Process()) {
123 cout << "ERROR: inserting new run to the Database has been failed" << endl;
124 delete stmt;
125 delete connDb;
126 return nullptr;
127 }
128
129 delete stmt;
130
131 int tmp_period_number;
132 tmp_period_number = period_number;
133 int tmp_run_number;
134 tmp_run_number = run_number;
135 int tmp_run_type;
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;
142 else
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;
148 double* tmp_energy;
149 if (energy == nullptr)
150 tmp_energy = nullptr;
151 else
152 tmp_energy = new double(*energy);
153 double* tmp_field_voltage;
154 if (field_voltage == nullptr)
155 tmp_field_voltage = nullptr;
156 else
157 tmp_field_voltage = new double(*field_voltage);
158 int* tmp_event_count;
159 if (event_count == nullptr)
160 tmp_event_count = nullptr;
161 else
162 tmp_event_count = new int(*event_count);
163 int* tmp_geometry_id;
164 if (geometry_id == nullptr)
165 tmp_geometry_id = nullptr;
166 else
167 tmp_geometry_id = new int(*geometry_id);
168 int tmp_run_quality;
169 tmp_run_quality = run_quality;
170
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);
174}
175
176// ----- Get run from the database ---------------------------
177UniRun* UniRun::GetRun(int period_number, int run_number)
178{
180 if (connDb == nullptr)
181 return nullptr;
182
183 TSQLServer* db_server = connDb->GetSQLServer();
184
185 TString sql =
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 "
188 "from run_ "
189 "where period_number = %d and run_number = %d",
190 period_number, run_number);
191 TSQLStatement* stmt = db_server->Statement(sql);
192
193 // get run from the database
194 if (!stmt->Process()) {
195 cout << "ERROR: getting run from the database has been failed" << endl;
196
197 delete stmt;
198 delete connDb;
199 return nullptr;
200 }
201
202 // store result of statement in buffer
203 stmt->StoreResult();
204
205 // extract row
206 if (!stmt->NextResultRow()) {
207 cout << "ERROR: run was not found in the database" << endl;
208
209 delete stmt;
210 delete connDb;
211 return nullptr;
212 }
213
214 int tmp_period_number;
215 tmp_period_number = stmt->GetInt(0);
216 int tmp_run_number;
217 tmp_run_number = stmt->GetInt(1);
218 int tmp_run_type;
219 tmp_run_type = stmt->GetInt(2);
220 TDatime tmp_start_datetime;
221 tmp_start_datetime = stmt->GetDatime(3);
222 TDatime* tmp_end_datetime;
223 if (stmt->IsNull(4))
224 tmp_end_datetime = nullptr;
225 else
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);
231 double* tmp_energy;
232 if (stmt->IsNull(7))
233 tmp_energy = nullptr;
234 else
235 tmp_energy = new double(stmt->GetDouble(7));
236 double* tmp_field_voltage;
237 if (stmt->IsNull(8))
238 tmp_field_voltage = nullptr;
239 else
240 tmp_field_voltage = new double(stmt->GetDouble(8));
241 int* tmp_event_count;
242 if (stmt->IsNull(9))
243 tmp_event_count = nullptr;
244 else
245 tmp_event_count = new int(stmt->GetInt(9));
246 int* tmp_geometry_id;
247 if (stmt->IsNull(10))
248 tmp_geometry_id = nullptr;
249 else
250 tmp_geometry_id = new int(stmt->GetInt(10));
251 int tmp_run_quality;
252 tmp_run_quality = stmt->GetInt(11);
253
254 delete stmt;
255
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);
259}
260
261// ----- Check run exists in the database ---------------------------
262int UniRun::CheckRunExists(int period_number, int run_number)
263{
265 if (connDb == nullptr)
266 return -1;
267
268 TSQLServer* db_server = connDb->GetSQLServer();
269
270 TString sql = TString::Format("select 1 "
271 "from run_ "
272 "where period_number = %d and run_number = %d",
273 period_number, run_number);
274 TSQLStatement* stmt = db_server->Statement(sql);
275
276 // get run from the database
277 if (!stmt->Process()) {
278 cout << "ERROR: getting run from the database has been failed" << endl;
279
280 delete stmt;
281 delete connDb;
282 return -2;
283 }
284
285 // store result of statement in buffer
286 stmt->StoreResult();
287
288 // extract row
289 if (!stmt->NextResultRow()) {
290 delete stmt;
291 delete connDb;
292 return 0;
293 }
294
295 delete stmt;
296 delete connDb;
297
298 return 1;
299}
300
301// ----- Delete run from the database ---------------------------
302int UniRun::DeleteRun(int period_number, int run_number)
303{
305 if (connDb == nullptr)
306 return -1;
307
308 TSQLServer* db_server = connDb->GetSQLServer();
309
310 TString sql = TString::Format("delete from run_ "
311 "where period_number = $1 and run_number = $2");
312 TSQLStatement* stmt = db_server->Statement(sql);
313
314 stmt->NextIteration();
315 stmt->SetInt(0, period_number);
316 stmt->SetInt(1, run_number);
317
318 // delete run from the dataBase
319 if (!stmt->Process()) {
320 cout << "ERROR: deleting run from the dataBase has been failed" << endl;
321
322 delete stmt;
323 delete connDb;
324 return -2;
325 }
326
327 delete stmt;
328 delete connDb;
329 return 0;
330}
331
332// ----- Print all 'runs' ---------------------------------
334{
336 if (connDb == nullptr)
337 return -1;
338
339 TSQLServer* db_server = connDb->GetSQLServer();
340
341 TString sql =
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 "
344 "from run_");
345 TSQLStatement* stmt = db_server->Statement(sql);
346
347 // get all 'runs' from the database
348 if (!stmt->Process()) {
349 cout << "ERROR: getting all 'runs' from the dataBase has been failed" << endl;
350
351 delete stmt;
352 delete connDb;
353 return -2;
354 }
355
356 // store result of statement in buffer
357 stmt->StoreResult();
358
359 // print rows
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: ";
371 if (stmt->IsNull(4))
372 cout << "nullptr";
373 else
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: ";
380 if (stmt->IsNull(7))
381 cout << "nullptr";
382 else
383 cout << stmt->GetDouble(7);
384 cout << ", field_voltage: ";
385 if (stmt->IsNull(8))
386 cout << "nullptr";
387 else
388 cout << stmt->GetDouble(8);
389 cout << ", event_count: ";
390 if (stmt->IsNull(9))
391 cout << "nullptr";
392 else
393 cout << stmt->GetInt(9);
394 cout << ", geometry_id: ";
395 if (stmt->IsNull(10))
396 cout << "nullptr";
397 else
398 cout << stmt->GetInt(10);
399 cout << ", run_quality: ";
400 cout << (stmt->GetInt(11));
401 cout << "." << endl;
402 }
403
404 delete stmt;
405 delete connDb;
406
407 return 0;
408}
409
410// Setters functions
411int UniRun::SetPeriodNumber(int period_number)
412{
413 if (!connectionDB) {
414 cout << "CRITICAL ERROR: Connection object is null" << endl;
415 return -1;
416 }
417
418 TSQLServer* db_server = connectionDB->GetSQLServer();
419
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);
424
425 stmt->NextIteration();
426 stmt->SetInt(0, period_number);
427 stmt->SetInt(1, i_period_number);
428 stmt->SetInt(2, i_run_number);
429
430 // write new value to the database
431 if (!stmt->Process()) {
432 cout << "ERROR: updating information about run has been failed" << endl;
433
434 delete stmt;
435 return -2;
436 }
437
438 i_period_number = period_number;
439
440 delete stmt;
441 return 0;
442}
443
444int UniRun::SetRunNumber(int run_number)
445{
446 if (!connectionDB) {
447 cout << "CRITICAL ERROR: Connection object is null" << endl;
448 return -1;
449 }
450
451 TSQLServer* db_server = connectionDB->GetSQLServer();
452
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);
457
458 stmt->NextIteration();
459 stmt->SetInt(0, run_number);
460 stmt->SetInt(1, i_period_number);
461 stmt->SetInt(2, i_run_number);
462
463 // write new value to the database
464 if (!stmt->Process()) {
465 cout << "ERROR: updating information about run has been failed" << endl;
466
467 delete stmt;
468 return -2;
469 }
470
471 i_run_number = run_number;
472
473 delete stmt;
474 return 0;
475}
476
477int UniRun::SetRunType(int run_type)
478{
479 if (!connectionDB) {
480 cout << "CRITICAL ERROR: Connection object is null" << endl;
481 return -1;
482 }
483
484 TSQLServer* db_server = connectionDB->GetSQLServer();
485
486 TString sql = TString::Format("update run_ "
487 "set run_type = $1 "
488 "where period_number = $2 and run_number = $3");
489 TSQLStatement* stmt = db_server->Statement(sql);
490
491 stmt->NextIteration();
492 stmt->SetInt(0, run_type);
493 stmt->SetInt(1, i_period_number);
494 stmt->SetInt(2, i_run_number);
495
496 // write new value to the database
497 if (!stmt->Process()) {
498 cout << "ERROR: updating information about run has been failed" << endl;
499
500 delete stmt;
501 return -2;
502 }
503
504 i_run_type = run_type;
505
506 delete stmt;
507 return 0;
508}
509
510int UniRun::SetStartDatetime(TDatime start_datetime)
511{
512 if (!connectionDB) {
513 cout << "CRITICAL ERROR: Connection object is null" << endl;
514 return -1;
515 }
516
517 TSQLServer* db_server = connectionDB->GetSQLServer();
518
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);
523
524 stmt->NextIteration();
525 stmt->SetDatime(0, start_datetime);
526 stmt->SetInt(1, i_period_number);
527 stmt->SetInt(2, i_run_number);
528
529 // write new value to the database
530 if (!stmt->Process()) {
531 cout << "ERROR: updating information about run has been failed" << endl;
532
533 delete stmt;
534 return -2;
535 }
536
537 ts_start_datetime = start_datetime;
538
539 delete stmt;
540 return 0;
541}
542
543int UniRun::SetEndDatetime(TDatime* end_datetime)
544{
545 if (!connectionDB) {
546 cout << "CRITICAL ERROR: Connection object is null" << endl;
547 return -1;
548 }
549
550 TSQLServer* db_server = connectionDB->GetSQLServer();
551
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);
556
557 stmt->NextIteration();
558 if (end_datetime == nullptr)
559 stmt->SetNull(0);
560 else
561 stmt->SetDatime(0, *end_datetime);
562 stmt->SetInt(1, i_period_number);
563 stmt->SetInt(2, i_run_number);
564
565 // write new value to the database
566 if (!stmt->Process()) {
567 cout << "ERROR: updating information about run has been failed" << endl;
568
569 delete stmt;
570 return -2;
571 }
572
573 if (ts_end_datetime)
574 delete ts_end_datetime;
575 if (end_datetime == nullptr)
576 ts_end_datetime = nullptr;
577 else
578 ts_end_datetime = new TDatime(*end_datetime);
579
580 delete stmt;
581 return 0;
582}
583
584int UniRun::SetBeamParticle(TString beam_particle)
585{
586 if (!connectionDB) {
587 cout << "CRITICAL ERROR: Connection object is null" << endl;
588 return -1;
589 }
590
591 TSQLServer* db_server = connectionDB->GetSQLServer();
592
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);
597
598 stmt->NextIteration();
599 stmt->SetString(0, beam_particle);
600 stmt->SetInt(1, i_period_number);
601 stmt->SetInt(2, i_run_number);
602
603 // write new value to the database
604 if (!stmt->Process()) {
605 cout << "ERROR: updating information about run has been failed" << endl;
606
607 delete stmt;
608 return -2;
609 }
610
611 str_beam_particle = beam_particle;
612
613 delete stmt;
614 return 0;
615}
616
617int UniRun::SetTargetParticle(TString target_particle)
618{
619 if (!connectionDB) {
620 cout << "CRITICAL ERROR: Connection object is null" << endl;
621 return -1;
622 }
623
624 TSQLServer* db_server = connectionDB->GetSQLServer();
625
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);
630
631 stmt->NextIteration();
632 stmt->SetString(0, target_particle);
633 stmt->SetInt(1, i_period_number);
634 stmt->SetInt(2, i_run_number);
635
636 // write new value to the database
637 if (!stmt->Process()) {
638 cout << "ERROR: updating information about run has been failed" << endl;
639
640 delete stmt;
641 return -2;
642 }
643
644 str_target_particle = target_particle;
645
646 delete stmt;
647 return 0;
648}
649
650int UniRun::SetEnergy(double* energy)
651{
652 if (!connectionDB) {
653 cout << "CRITICAL ERROR: Connection object is null" << endl;
654 return -1;
655 }
656
657 TSQLServer* db_server = connectionDB->GetSQLServer();
658
659 TString sql = TString::Format("update run_ "
660 "set energy = $1 "
661 "where period_number = $2 and run_number = $3");
662 TSQLStatement* stmt = db_server->Statement(sql);
663
664 stmt->NextIteration();
665 if (energy == nullptr)
666 stmt->SetNull(0);
667 else
668 stmt->SetDouble(0, *energy);
669 stmt->SetInt(1, i_period_number);
670 stmt->SetInt(2, i_run_number);
671
672 // write new value to the database
673 if (!stmt->Process()) {
674 cout << "ERROR: updating information about run has been failed" << endl;
675
676 delete stmt;
677 return -2;
678 }
679
680 if (d_energy)
681 delete d_energy;
682 if (energy == nullptr)
683 d_energy = nullptr;
684 else
685 d_energy = new double(*energy);
686
687 delete stmt;
688 return 0;
689}
690
691int UniRun::SetFieldVoltage(double* field_voltage)
692{
693 if (!connectionDB) {
694 cout << "CRITICAL ERROR: Connection object is null" << endl;
695 return -1;
696 }
697
698 TSQLServer* db_server = connectionDB->GetSQLServer();
699
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);
704
705 stmt->NextIteration();
706 if (field_voltage == nullptr)
707 stmt->SetNull(0);
708 else
709 stmt->SetDouble(0, *field_voltage);
710 stmt->SetInt(1, i_period_number);
711 stmt->SetInt(2, i_run_number);
712
713 // write new value to the database
714 if (!stmt->Process()) {
715 cout << "ERROR: updating information about run has been failed" << endl;
716
717 delete stmt;
718 return -2;
719 }
720
721 if (d_field_voltage)
722 delete d_field_voltage;
723 if (field_voltage == nullptr)
724 d_field_voltage = nullptr;
725 else
726 d_field_voltage = new double(*field_voltage);
727
728 delete stmt;
729 return 0;
730}
731
732int UniRun::SetEventCount(int* event_count)
733{
734 if (!connectionDB) {
735 cout << "CRITICAL ERROR: Connection object is null" << endl;
736 return -1;
737 }
738
739 TSQLServer* db_server = connectionDB->GetSQLServer();
740
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);
745
746 stmt->NextIteration();
747 if (event_count == nullptr)
748 stmt->SetNull(0);
749 else
750 stmt->SetInt(0, *event_count);
751 stmt->SetInt(1, i_period_number);
752 stmt->SetInt(2, i_run_number);
753
754 // write new value to the database
755 if (!stmt->Process()) {
756 cout << "ERROR: updating information about run has been failed" << endl;
757
758 delete stmt;
759 return -2;
760 }
761
762 if (i_event_count)
763 delete i_event_count;
764 if (event_count == nullptr)
765 i_event_count = nullptr;
766 else
767 i_event_count = new int(*event_count);
768
769 delete stmt;
770 return 0;
771}
772
773int UniRun::SetGeometryId(int* geometry_id)
774{
775 if (!connectionDB) {
776 cout << "CRITICAL ERROR: Connection object is null" << endl;
777 return -1;
778 }
779
780 TSQLServer* db_server = connectionDB->GetSQLServer();
781
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);
786
787 stmt->NextIteration();
788 if (geometry_id == nullptr)
789 stmt->SetNull(0);
790 else
791 stmt->SetInt(0, *geometry_id);
792 stmt->SetInt(1, i_period_number);
793 stmt->SetInt(2, i_run_number);
794
795 // write new value to the database
796 if (!stmt->Process()) {
797 cout << "ERROR: updating information about run has been failed" << endl;
798
799 delete stmt;
800 return -2;
801 }
802
803 if (i_geometry_id)
804 delete i_geometry_id;
805 if (geometry_id == nullptr)
806 i_geometry_id = nullptr;
807 else
808 i_geometry_id = new int(*geometry_id);
809
810 delete stmt;
811 return 0;
812}
813
814int UniRun::SetRunQuality(int run_quality)
815{
816 if (!connectionDB) {
817 cout << "CRITICAL ERROR: Connection object is null" << endl;
818 return -1;
819 }
820
821 TSQLServer* db_server = connectionDB->GetSQLServer();
822
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);
827
828 stmt->NextIteration();
829 stmt->SetInt(0, run_quality);
830 stmt->SetInt(1, i_period_number);
831 stmt->SetInt(2, i_run_number);
832
833 // write new value to the database
834 if (!stmt->Process()) {
835 cout << "ERROR: updating information about run has been failed" << endl;
836
837 delete stmt;
838 return -2;
839 }
840
841 i_run_quality = run_quality;
842
843 delete stmt;
844 return 0;
845}
846
847// ----- Print current run ---------------------------------------
849{
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;
860
861 return;
862}
863/* END OF GENERATED CLASS PART (SHOULD NOT BE CHANGED MANUALLY) */
864
865// get array of raw files (UniRawFile*) corresponding to the run (return nullptr if an error occured)
867{
868 return UniRawFile::GetRawFiles(i_period_number, i_run_number);
869}
870
871// get numbers of runs existing in the Database for a selected range
872int UniRun::GetRunNumbers(UniqueRunNumber*& run_numbers, int start_period, int start_run, int end_period, int end_run)
873{
875 if (connDb == nullptr) {
876 cout << "ERROR: connection to the database was failed" << endl;
877 return -1;
878 }
879
880 TSQLServer* db_server = connDb->GetSQLServer();
881
882 if (end_period == -1)
883 end_period = start_period;
884 TString sql = TString::Format(
885 "select period_number, run_number "
886 "from run_ "
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);
892
893 // get table record from DB
894 if (!stmt->Process()) {
895 cout << "ERROR: getting run numbers from the database has been failed" << endl;
896 delete stmt;
897 delete connDb;
898 return -2;
899 }
900
901 // store result of statement in buffer
902 stmt->StoreResult();
903
904 vector<int> vecPeriods;
905 vector<int> vecRuns;
906 while (stmt->NextResultRow()) {
907 vecPeriods.push_back(stmt->GetInt(0));
908 vecRuns.push_back(stmt->GetInt(1));
909 }
910
911 delete stmt;
912 delete connDb;
913
914 int run_count = vecPeriods.size();
915 run_numbers = new UniqueRunNumber[run_count];
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];
919 }
920
921 return run_count;
922}
923
924// get numbers of existing runs in the Database
926{
928 if (connDb == nullptr) {
929 cout << "ERROR: connection to the database was failed" << endl;
930 return -1;
931 }
932
933 TSQLServer* db_server = connDb->GetSQLServer();
934
935 TString sql = TString::Format("select period_number, run_number "
936 "from run_ "
937 "order by period_number, run_number");
938 TSQLStatement* stmt = db_server->Statement(sql);
939
940 // get table record from DB
941 if (!stmt->Process()) {
942 cout << "ERROR: getting run numbers from the database has been failed" << endl;
943 delete stmt;
944 delete connDb;
945 return -2;
946 }
947
948 // store result of statement in buffer
949 stmt->StoreResult();
950
951 vector<int> vecPeriods;
952 vector<int> vecRuns;
953 while (stmt->NextResultRow()) {
954 vecPeriods.push_back(stmt->GetInt(0));
955 vecRuns.push_back(stmt->GetInt(1));
956 }
957
958 delete stmt;
959 delete connDb;
960
961 int run_count = vecPeriods.size();
962 run_numbers = new UniqueRunNumber[run_count];
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];
966 }
967
968 return run_count;
969}
970
971int UniRun::SetRootGeometry(int start_period,
972 int start_run,
973 int end_period,
974 int end_run,
975 unsigned char* root_geometry,
976 Long_t size_root_geometry)
977{
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))))
980 {
981 cout << "ERROR: end run should be after or the same as start run" << endl;
982 return -1;
983 }
984
985 UniRunGeometry* pGeometry = UniRunGeometry::CreateRunGeometry(root_geometry, size_root_geometry);
986 if (pGeometry == nullptr) {
987 cout << "ERROR: creating of the geometry was failed" << endl;
988 return -2;
989 }
990
991 int geometry_id = pGeometry->GetGeometryId();
992 delete pGeometry;
993
994 UniqueRunNumber* pUniqueRuns = nullptr;
995 int run_count = GetRunNumbers(pUniqueRuns, start_period, start_run, end_period, end_run);
996 if (run_count < 0)
997 return -10 - run_count;
998
999 for (int i = 0; i < run_count; i++) {
1000 cout << "Setting geometry for period:run " << pUniqueRuns[i].period_number << ":" << pUniqueRuns[i].run_number
1001 << "..." << endl;
1002
1003 UniRun* pCurRun = UniRun::GetRun(pUniqueRuns[i].period_number, pUniqueRuns[i].run_number);
1004 if (pCurRun == nullptr) {
1005 cout << "ERROR: getting of run " << pUniqueRuns[i].period_number << ":" << pUniqueRuns[i].run_number
1006 << " (period:number) was failed" << endl;
1007 continue;
1008 }
1009
1010 pCurRun->SetGeometryId(new int(geometry_id));
1011
1012 delete pCurRun;
1013 }
1014
1015 delete[] pUniqueRuns;
1016
1017 return 0;
1018}
1019
1020int UniRun::GetRootGeometry(int period_number,
1021 int run_number,
1022 unsigned char*& root_geometry,
1023 Long_t& size_root_geometry)
1024{
1025 UniRun* pCurRun = UniRun::GetRun(period_number, run_number);
1026 if (pCurRun == nullptr) {
1027 cout << "ERROR: getting of run " << period_number << ":" << run_number << " (period:number) was failed" << endl;
1028 return -1;
1029 }
1030
1031 int* geometry_ID = pCurRun->GetGeometryId();
1032 if (geometry_ID == nullptr) {
1033 cout << "ERROR: no geometry exists for run " << period_number << ":" << run_number << " (period:number)"
1034 << endl;
1035 return -2;
1036 }
1037
1038 int geometry_id = geometry_ID[0];
1039 UniRunGeometry* pGeometry = UniRunGeometry::GetRunGeometry(geometry_id);
1040 if (pGeometry == nullptr) {
1041 cout << "ERROR: getting of the geometry was failed" << endl;
1042 return -3;
1043 }
1044
1045 size_root_geometry = pGeometry->GetRootGeometrySize();
1046 root_geometry = pGeometry->GetRootGeometry();
1047 delete geometry_ID;
1048 delete pCurRun;
1049 delete pGeometry;
1050
1051 return 0;
1052}
1053
1054int UniRun::WriteGeometryFile(int start_period, int start_run, int end_period, int end_run, const char* geo_file_path)
1055{
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;
1061 return -1;
1062 }
1063
1064 fseek(root_file, 0, SEEK_END);
1065 size_t file_size = ftell(root_file);
1066 rewind(root_file);
1067 if (file_size <= 0) {
1068 cout << "ERROR: getting file size: " << strGeoFilePath << " was failed" << endl;
1069 fclose(root_file);
1070 return -2;
1071 }
1072
1073 unsigned char* buffer = new unsigned char[file_size];
1074 if (buffer == nullptr) {
1075 cout << "ERROR: getting memory from heap was failed" << endl;
1076 fclose(root_file);
1077 return -3;
1078 }
1079
1080 size_t bytes_read = fread(buffer, 1, file_size, root_file);
1081 if (bytes_read != file_size) {
1082 cout << "ERROR: reading file: " << strGeoFilePath << ", got " << bytes_read << " bytes of " << file_size
1083 << endl;
1084 delete[] buffer;
1085 fclose(root_file);
1086 return -4;
1087 }
1088
1089 fclose(root_file);
1090
1091 // set root geometry file's bytes for run range
1092 int res_code = UniRun::SetRootGeometry(start_period, start_run, end_period, end_run, buffer, file_size);
1093 if (res_code != 0) {
1094 delete[] buffer;
1095 return -5;
1096 }
1097
1098 delete[] buffer;
1099
1100 return 0;
1101}
1102
1103// read geometry file for selected run number from the database and write it to the file
1104// if the given run is absent and usePrevGeometryIfMissing is true then use the nearest run below period:run
1105int UniRun::ReadGeometryFile(int period_number, int run_number, char* geo_file_path, bool usePrevGeometryIfMissing)
1106{
1107 // get root geometry file's bytes for selected run
1108 unsigned char* buffer = nullptr;
1109 Long_t file_size;
1110 int res_code = UniRun::GetRootGeometry(period_number, run_number, buffer, file_size);
1111 if (res_code != 0) {
1112 if (usePrevGeometryIfMissing) {
1113 cout << "INFO: Trying to get the closest last geometry file for " << period_number << ":" << run_number
1114 << " run" << endl;
1115 int res_last_code = UniRun::ReadPreviousGeometryFile(period_number, run_number, geo_file_path);
1116 if (res_last_code != 0)
1117 return -1;
1118 cout << "INFO: The closest last geometry was get from " << period_number << ":" << run_number << " run"
1119 << endl;
1120 return 0;
1121 }
1122 return -1;
1123 }
1124
1125 FILE* root_file = fopen(geo_file_path, "wb");
1126 if (root_file == nullptr) {
1127 cout << "ERROR: creating root file: " << geo_file_path << endl;
1128 return -2;
1129 }
1130
1131 size_t bytes_write = fwrite(buffer, 1, file_size, root_file);
1132 if (bytes_write != (size_t)file_size) {
1133 cout << "ERROR: writing file: " << geo_file_path << ", put " << bytes_write << " bytes of " << file_size
1134 << endl;
1135 delete[] buffer;
1136 fclose(root_file);
1137 return -3;
1138 }
1139
1140 fclose(root_file);
1141
1142 if (buffer)
1143 delete[] buffer;
1144
1145 return 0;
1146}
1147
1148// read geometry file from the database and return the corresponding period and run numbers
1149// if period_number > 0 and run_number > 0: for the nearest run below period:run
1150// if period_number <= 0 or run_number <= 0: for the latest run in the database
1151int UniRun::ReadPreviousGeometryFile(int& period_number, int& run_number, char* geo_file_path)
1152{
1154 if (connDb == nullptr)
1155 return -1;
1156
1157 TSQLServer* db_server = connDb->GetSQLServer();
1158
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 "
1165 "limit 1";
1166 TSQLStatement* stmt = db_server->Statement(sql);
1167
1168 // get ROOT geometry from the database
1169 if (!stmt->Process()) {
1170 cout << "ERROR: getting last ROOT geometry from the database has been failed" << endl;
1171
1172 delete stmt;
1173 delete connDb;
1174 return -2;
1175 }
1176
1177 // store result of statement in buffer
1178 stmt->StoreResult();
1179
1180 // extract row
1181 if (!stmt->NextResultRow()) {
1182 delete stmt;
1183 delete connDb;
1184 return 0;
1185 }
1186
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);
1193
1194 delete stmt;
1195 delete connDb;
1196
1197 // write ROOT geometry array to the file
1198 FILE* root_file = fopen(geo_file_path, "wb");
1199 if (root_file == nullptr) {
1200 cout << "ERROR: creating root file: " << geo_file_path << endl;
1201 return -3;
1202 }
1203
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;
1209 fclose(root_file);
1210 return -4;
1211 }
1212
1213 fclose(root_file);
1214
1215 if (tmp_root_geometry)
1216 delete[] tmp_root_geometry;
1217
1218 return 0;
1219}
1220
1221// get field voltage value
1222// if period_number > 0 and run_number > 0: from the closest previous run, below (period:run)
1223// in another case: for the latest run in the database
1224// ATTENTION: changes the input period and run numbers to the correspoding ones of the previous run with the field
1225// voltage
1226double UniRun::FindPreviousFieldVoltage(int& period_number, int& run_number)
1227{
1229 if (connDb == nullptr)
1230 return 0;
1231
1232 TSQLServer* db_server = connDb->GetSQLServer();
1233
1234 TString sql("select period_number, run_number, field_voltage "
1235 "from run_ ");
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 "
1241 "limit 1";
1242 TSQLStatement* stmt = db_server->Statement(sql);
1243
1244 // get field_voltage geometry from the database
1245 if (!stmt->Process()) {
1246 cout << "ERROR: getting previous field_voltage from the database has been failed" << endl;
1247
1248 delete stmt;
1249 delete connDb;
1250 return 0;
1251 }
1252
1253 // store result of statement in buffer
1254 stmt->StoreResult();
1255
1256 // extract row
1257 if (!stmt->NextResultRow()) {
1258 delete stmt;
1259 delete connDb;
1260 return 0;
1261 }
1262
1263 period_number = stmt->GetInt(0);
1264 run_number = stmt->GetInt(1);
1265 double field_voltage = stmt->GetDouble(2);
1266
1267 delete stmt;
1268 delete connDb;
1269
1270 return field_voltage;
1271}
1272
1273TObjArray* UniRun::Search(TObjArray& search_conditions)
1274{
1275 TObjArray* arrayResult = nullptr;
1276 search_conditions.SetOwner(kTRUE);
1277
1279 if (connDb == nullptr) {
1280 cout << "ERROR: connection to the Unified Condition Database was failed" << endl;
1281 return arrayResult;
1282 }
1283
1284 TSQLServer* db_server = connDb->GetSQLServer();
1285
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 "
1288 "from run_");
1289
1290 TString strCondition;
1291 bool isFirst = true;
1292 TIter next(&search_conditions);
1293 UniSearchCondition* curCondition;
1294 while ((curCondition = (UniSearchCondition*)next()) != nullptr) {
1295 strCondition = "";
1296
1297 switch (curCondition->GetColumn()) {
1299 strCondition += "run_number ";
1300 break;
1302 strCondition += "period_number ";
1303 break;
1304 // case UniSearchCondition::columnFilePath: strCondition += "lower(file_path) "; break;
1306 strCondition += "lower(beam_particle) ";
1307 break;
1309 strCondition += "lower(target_particle) ";
1310 break;
1312 strCondition += "energy ";
1313 break;
1315 strCondition += "start_datetime ";
1316 break;
1318 strCondition += "end_datetime ";
1319 break;
1321 strCondition += "event_count ";
1322 break;
1324 strCondition += "field_voltage ";
1325 break;
1326 // case UniSearchCondition::columnFileSize: strCondition += "file_size "; break;
1327 default:
1328 cout << "ERROR: the column in the search condition was not defined, the condition is skipped" << endl;
1329 continue;
1330 }
1331
1332 switch (curCondition->GetCondition()) {
1334 strCondition += "< ";
1335 break;
1337 strCondition += "<= ";
1338 break;
1340 strCondition += "= ";
1341 break;
1343 strCondition += "<> ";
1344 break;
1346 strCondition += "> ";
1347 break;
1349 strCondition += ">= ";
1350 break;
1352 strCondition += "like ";
1353 break;
1355 strCondition += "is null ";
1356 break;
1358 strCondition += "is not null ";
1359 break;
1360 default:
1361 cout << "ERROR: the comparison operator in the search condition was not defined, the condition is "
1362 "skipped"
1363 << endl;
1364 continue;
1365 }
1366
1367 switch (curCondition->GetValueType()) {
1368 case 0:
1369 if ((curCondition->GetCondition() != UniSearchCondition::conditionNull)
1370 && (curCondition->GetCondition() != UniSearchCondition::conditionNotNull))
1371 continue;
1372 break;
1373 case 1:
1374 strCondition += Form("%d", curCondition->GetIntValue());
1375 break;
1376 case 2:
1377 strCondition += Form("%u", curCondition->GetUIntValue());
1378 break;
1379 case 3:
1380 strCondition += Form("%f", curCondition->GetDoubleValue());
1381 break;
1382 case 4:
1383 strCondition += Form("lower('%s')", curCondition->GetStringValue().Data());
1384 break;
1385 case 5:
1386 strCondition += Form("'%s'", curCondition->GetDatimeValue().AsSQLString());
1387 break;
1388 default:
1389 cout << "ERROR: the value type in the search condition was not found, the condition is skipped" << endl;
1390 continue;
1391 }
1392
1393 if (isFirst) {
1394 sql += " where ";
1395 isFirst = false;
1396 } else
1397 sql += " and ";
1398
1399 sql += strCondition;
1400 }
1401 sql += " order by period_number,run_number";
1402
1403 TSQLStatement* stmt = db_server->Statement(sql);
1404 // cout<<"SQL code: "<<sql<<endl;
1405
1406 // get table record from DB
1407 if (!stmt->Process()) {
1408 cout << "ERROR: getting runs from the Unified Condition Database has been failed" << endl;
1409 delete stmt;
1410 delete connDb;
1411
1412 return arrayResult;
1413 }
1414
1415 // store result of statement in buffer
1416 stmt->StoreResult();
1417
1418 // extract rows one after another
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;
1425 return arrayResult;
1426 }
1427
1428 int tmp_period_number;
1429 tmp_period_number = stmt->GetInt(0);
1430 int tmp_run_number;
1431 tmp_run_number = stmt->GetInt(1);
1432 int tmp_run_type;
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;
1439 else
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);
1445 double* tmp_energy;
1446 if (stmt->IsNull(7))
1447 tmp_energy = nullptr;
1448 else
1449 tmp_energy = new double(stmt->GetDouble(7));
1450 double* tmp_field_voltage;
1451 if (stmt->IsNull(8))
1452 tmp_field_voltage = nullptr;
1453 else
1454 tmp_field_voltage = new double(stmt->GetDouble(8));
1455 int* tmp_event_count;
1456 if (stmt->IsNull(9))
1457 tmp_event_count = nullptr;
1458 else
1459 tmp_event_count = new int(stmt->GetInt(9));
1460 int* tmp_geometry_id;
1461 if (stmt->IsNull(10))
1462 tmp_geometry_id = nullptr;
1463 else
1464 tmp_geometry_id = new int(stmt->GetInt(10));
1465 int tmp_run_quality;
1466 tmp_run_quality = stmt->GetInt(11);
1467
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));
1472 }
1473
1474 delete stmt;
1475
1476 return arrayResult;
1477}
1478
1479TObjArray* UniRun::Search(UniSearchCondition& search_condition)
1480{
1481 TObjArray search_conditions;
1482 search_conditions.Add((TObject*)&search_condition);
1483
1484 return Search(search_conditions);
1485}
1486
1487// get run from the database with the given period and run numbers
1488// if usePrevRunIfMissing is true then find and get the previous (existing) run in case the given run is absent
1489// ATTENTION: changes the input period and run numbers to ones of the found run (if usePrevRunIfMissing is true)
1490UniRun* UniRun::GetRun(int& period_number, int& run_number, bool usePrevRunIfMissing)
1491{
1492 if (!usePrevRunIfMissing)
1493 return UniRun::GetRun(period_number, run_number);
1494
1495 UniRun* pRun = UniRun::GetRun(period_number, run_number);
1496 if (pRun == nullptr) {
1497 cout << "INFO: Trying to get the previous run number before " << period_number << ":" << run_number << " run"
1498 << endl;
1499 int res_prev_code = UniRun::FindPreviousRun(period_number, run_number);
1500 if (res_prev_code != 0)
1501 return nullptr;
1502 cout << "INFO: The previous run number was defined: " << period_number << ":" << run_number << endl;
1503 pRun = UniRun::GetRun(period_number, run_number);
1504 }
1505
1506 return pRun;
1507}
1508
1509// get number of the closest run below the given one
1510// or return the latest run in the database if period_number < 1 or run_number < 1
1511int UniRun::FindPreviousRun(int& period_number, int& run_number)
1512{
1514 if (connDb == nullptr) {
1515 cout << "ERROR: connection to the Database was failed" << endl;
1516 return -1;
1517 }
1518
1519 TSQLServer* db_server = connDb->GetSQLServer();
1520
1521 TString sql = "select period_number, run_number "
1522 "from run_ ";
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 "
1527 "limit 1";
1528 TSQLStatement* stmt = db_server->Statement(sql);
1529
1530 // get table record from DB
1531 if (!stmt->Process()) {
1532 cout << "ERROR: getting previous run number from DB has been failed" << endl;
1533 delete stmt;
1534 delete connDb;
1535 return -2;
1536 }
1537
1538 // store result of statement in buffer
1539 stmt->StoreResult();
1540
1541 // extract row
1542 if (!stmt->NextResultRow()) {
1543 cout << "ERROR: previous run was not found in the database" << endl;
1544
1545 delete stmt;
1546 delete connDb;
1547 return -3;
1548 }
1549
1550 period_number = stmt->GetInt(0);
1551 run_number = stmt->GetInt(1);
1552
1553 delete stmt;
1554 delete connDb;
1555
1556 return 0;
1557}
int i
Definition P4_F32vec4.h:22
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
Definition UniRun.cxx:333
void Print()
print information about current run
Definition UniRun.cxx:848
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:177
int SetEndDatetime(TDatime *end_datetime)
set end datetime of the current run
Definition UniRun.cxx:543
static TObjArray * Search(UniSearchCondition &search_condition)
get runs corresponding to the specified single condition and set owner for search_condition to kTRUE
Definition UniRun.cxx:1479
int SetGeometryId(int *geometry_id)
set geometry id of the current run
Definition UniRun.cxx:773
int SetTargetParticle(TString target_particle)
set target particle of the current run
Definition UniRun.cxx:617
TObjArray * GetRawFiles()
get array of raw files (UniRawFile*) corresponding to the run (return nullptr if an error occured)
Definition UniRun.cxx:866
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
Definition UniRun.cxx:971
int SetRunType(int run_type)
set run type of the current run
Definition UniRun.cxx:477
static int ReadGeometryFile(int period_number, int run_number, char *geo_file_path, bool usePrevGeometryIfMissing=false)
Definition UniRun.cxx:1105
static int DeleteRun(int period_number, int run_number)
delete run from the database
Definition UniRun.cxx:302
int * GetGeometryId()
get geometry id of the current run
Definition UniRun.h:141
static int GetRunNumbers(UniqueRunNumber *&run_numbers, int start_period, int start_run=0, int end_period=-1, int end_run=-1)
Definition UniRun.cxx:872
int SetPeriodNumber(int period_number)
set period number of the current run
Definition UniRun.cxx:411
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
Definition UniRun.cxx:67
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
Definition UniRun.cxx:1054
static int ReadPreviousGeometryFile(int &period_number, int &run_number, char *geo_file_path)
Definition UniRun.cxx:1151
int SetEventCount(int *event_count)
set event count of the current run
Definition UniRun.cxx:732
int SetRunNumber(int run_number)
set run number of the current run
Definition UniRun.cxx:444
static double FindPreviousFieldVoltage(int &period_number, int &run_number)
Definition UniRun.cxx:1226
static int FindPreviousRun(int &period_number, int &run_number)
Definition UniRun.cxx:1511
int SetFieldVoltage(double *field_voltage)
set field voltage of the current run
Definition UniRun.cxx:691
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
Definition UniRun.cxx:1020
int SetEnergy(double *energy)
set energy of the current run
Definition UniRun.cxx:650
int SetRunQuality(int run_quality)
set run quality of the current run
Definition UniRun.cxx:814
virtual ~UniRun()
Definition UniRun.cxx:50
int SetBeamParticle(TString beam_particle)
set beam particle of the current run
Definition UniRun.cxx:584
int SetStartDatetime(TDatime start_datetime)
set start datetime of the current run
Definition UniRun.cxx:510
static int CheckRunExists(int period_number, int run_number)
check run exists in the database: 1- true, 0 - false, <0 - database operation error
Definition UniRun.cxx:262
enumConditions GetCondition()
unsigned int GetUIntValue()
STL namespace.