BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
add_slewing_file_id.C
Go to the documentation of this file.
1// macro for adding file IDs defining files with corresponding TOF-700 slewing
2// it reads a file with file list storing run numbers prepared by Yury Petukhov
3
4struct RunPair
5{
7 int iEndRun;
8 RunPair(int start_run, int end_run)
9 {
10 iStartRun = start_run;
11 iEndRun = end_run;
12 }
13};
14ostream& operator<<(ostream& stream, const RunPair& obj)
15{
16 stream << obj.iStartRun << "-" << obj.iEndRun;
17 return stream;
18}
19
20void add_slewing_file_id(TString strFileList, int file_id, int period_number = 7)
21{
22 fstream fList(strFileList, std::fstream::in);
23 if (fList.fail()) {
24 cout << "Failed to open " << strFileList << endl;
25 return;
26 }
27
28 TString strCurrentFile;
29 int number;
30 vector<int> vecRuns;
31 while (!fList.eof()) {
32 fList >> strCurrentFile;
33 if (strCurrentFile[0] == nullptr)
34 continue;
35 cout << "Current file: " << strCurrentFile << endl;
36
37 // open current file
38 fstream fFile(strCurrentFile.Data(), std::fstream::in);
39 if (fFile.fail()) {
40 cout << "Failed to open " << strCurrentFile << endl;
41 return;
42 }
43
44 while (fFile >> number) {
45 if (number < 0) {
46 cout << "Numbers should be positive: " << number << ". Something goes wrong. Exiting..." << endl;
47 return;
48 }
49 vecRuns.push_back(number);
50 }
51 fFile.close();
52 }
53 fList.close();
54 cout << endl;
55
56 cout << "Vector before sorting:" << endl;
57 copy(vecRuns.begin(), vecRuns.end(), ostream_iterator<int>(cout, " "));
58 cout << endl << endl;
59 sort(vecRuns.begin(), vecRuns.end());
60 cout << "Vector after sorting:" << endl;
61 copy(vecRuns.begin(), vecRuns.end(), ostream_iterator<int>(cout, " "));
62 cout << endl << endl;
63
64 if (vecRuns.size() < 1) {
65 cout << "There are no numbers in output vector. Exiting..." << endl;
66 return;
67 }
68
69 // generate run intervals
70 vector<RunPair> vecRunPairs;
71 vector<int>::iterator it = vecRuns.begin();
72 int fix_number = *it, prev_number = *it, cur_number;
73 for (it++; it != vecRuns.end(); it++) {
74 cur_number = *it;
75 if (cur_number != (prev_number + 1)) {
76 RunPair new_pair(fix_number, prev_number);
77 vecRunPairs.push_back(new_pair);
78 fix_number = cur_number;
79 }
80
81 prev_number = cur_number;
82 }
83 RunPair new_pair(fix_number, prev_number);
84 vecRunPairs.push_back(new_pair);
85 cout << "Final Run Intervals:" << endl;
86 copy(vecRunPairs.begin(), vecRunPairs.end(), ostream_iterator<RunPair>(cout, " "));
87 cout << endl << endl;
88
89 // create parameter in the Database (only once)
90 /*UniParameter* pParameter = UniParameter::CreateParameter("slewing_file_id", IntType);
91 if (pParameter == nullptr)
92 {
93 cout << "\nMacro finished with errors" << endl;
94 return;
95 }
96 // clean memory after work
97 delete pParameter;*/
98
99 // write parameter values to the Database
100 cout << "Writing file ID (" << file_id << ") to the Database... ";
101 for (vector<RunPair>::iterator it = vecRunPairs.begin(); it != vecRunPairs.end(); it++) {
102 IntValue iValue;
103 iValue.value = file_id;
105 "TOF2", "slewing_file_id", period_number, (*it).iStartRun, period_number, (*it).iEndRun, &iValue);
106 if (pDetectorParameter == nullptr) {
107 cout << "Macro finished with errors" << endl;
108 return;
109 }
110 // clean memory after work
111 delete pDetectorParameter;
112 }
113
114 cout << "Macro finished successfully" << endl;
115}
void add_slewing_file_id(TString strFileList, int file_id, int period_number=7)
ostream & operator<<(ostream &stream, const RunPair &obj)
static UniDetectorParameter * CreateDetectorParameter(TString detector_name, int parameter_id, int start_period, int start_run, int end_period, int end_run, int value_key, unsigned char *parameter_value, Long_t size_parameter_value, TDatime *expiry_date)
add new detector parameter to the database
RunPair(int start_run, int end_run)