BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
copy_data_table2table.C
Go to the documentation of this file.
1#define PBSTR "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
2#define PBWIDTH 60
3void MoveParameter(TString parameter_name, enumParameterType parameter_type, enumValueType parameter_type_new);
4void printProgress(double percentage)
5{
6 int val = (int)(percentage * 100);
7 int lpad = (int)(percentage * PBWIDTH);
8 int rpad = PBWIDTH - lpad;
9 printf("\r%3d%% [%.*s%*s]", val, lpad, PBSTR, rpad, "");
10 fflush(stdout);
11}
12
14{
15 TStopwatch timer;
16 timer.Start();
17
18 cout << "Forming conditions..." << endl;
19 // find all parameters in the source table, except having dc_serial
20 TObjArray arrayConditions;
21 UniSearchCondition* searchCondition =
22 new UniSearchCondition(UniSearchCondition::columnDCSerial, UniSearchCondition::conditionNull);
23 arrayConditions.Add((TObject*)searchCondition);
24
25 cout << "Getting original array for general parameters..." << endl;
26 TObjArray* pParameterArray = UniDetectorParameter::Search(arrayConditions);
27 // clean memory for the conditions after the search
28 arrayConditions.Delete();
29
30 // read all parameters and write to the new table
31 cout << "Reading/writing general parameters: " << pParameterArray->GetEntriesFast() << endl;
32 for (int i = 0; i < pParameterArray->GetEntriesFast(); i++) {
33 UniDetectorParameter* pParameter = (UniDetectorParameter*)pParameterArray->At(i);
34 vector<UniValue*> parameter_value;
35
36 printProgress(((double)i) / (pParameterArray->GetEntriesFast() - 1));
37 // cout<<"Current parameter: "<<pParameter->GetParameterName()<<endl;
38
39 switch (pParameter->GetParameterType()) {
40 case BoolType: {
41 BoolValue* pNewParameter = new BoolValue;
42 pNewParameter->value = pParameter->GetBool();
43 parameter_value.push_back(pNewParameter);
44 break;
45 }
46 case IntType: {
47 IntValue* pNewParameter = new IntValue;
48 pNewParameter->value = pParameter->GetInt();
49 parameter_value.push_back(pNewParameter);
50 break;
51 }
52 case DoubleType: {
53 DoubleValue* pNewParameter = new DoubleValue;
54 pNewParameter->value = pParameter->GetDouble();
55 parameter_value.push_back(pNewParameter);
56 break;
57 }
58 case StringType: {
59 StringValue* pNewParameter = new StringValue;
60 string s(pParameter->GetString().Data());
61 pNewParameter->value = s;
62 parameter_value.push_back(pNewParameter);
63 break;
64 }
65 case IIArrayType: {
66 IIStructure* ii_value = nullptr;
67 int element_count;
68 pParameter->GetIIArray(ii_value, element_count);
69 for (int j = 0; j < element_count; j++) {
70 IIValue* pNewParameter = new IIValue;
71 pNewParameter->value1 = ii_value[j].int_1;
72 pNewParameter->value2 = ii_value[j].int_2;
73 parameter_value.push_back(pNewParameter);
74 }
75 break;
76 }
77 case IntArrayType: {
78 int* i_value = nullptr;
79 int element_count;
80 pParameter->GetIntArray(i_value, element_count);
81 for (int j = 0; j < element_count; j++) {
82 IntValue* pNewParameter = new IntValue;
83 pNewParameter->value = i_value[j];
84 parameter_value.push_back(pNewParameter);
85 }
86 break;
87 }
88 case DoubleArrayType: {
89 double* d_value = nullptr;
90 int element_count;
91 pParameter->GetDoubleArray(d_value, element_count);
92 for (int j = 0; j < element_count; j++) {
93 DoubleValue* pNewParameter = new DoubleValue;
94 pNewParameter->value = d_value[j];
95 parameter_value.push_back(pNewParameter);
96 }
97 break;
98 }
99 case BinaryArrayType: {
100 BinaryValue* pNewParameter = new BinaryValue;
101 size_t byte_count;
102 if (pParameter->GetBinaryArray(pNewParameter->value, byte_count) != 0) {
103 cout << "ERROR: returning binary array was failed" << endl;
104 return -4;
105 }
106 pNewParameter->size = byte_count;
107
108 parameter_value.push_back(pNewParameter);
109 break;
110 }
111 case UIntArrayType: {
112 unsigned int* ui_value = nullptr;
113 int element_count;
114 pParameter->GetUIntArray(ui_value, element_count);
115 for (int j = 0; j < element_count; j++) {
116 UIntValue* pNewParameter = new UIntValue;
117 pNewParameter->value = ui_value[j];
118 parameter_value.push_back(pNewParameter);
119 }
120 break;
121 }
122 case DchMapArrayType: {
123 DchMapStructure* dch_value = nullptr;
124 int element_count;
125 pParameter->GetDchMapArray(dch_value, element_count);
126 for (int j = 0; j < element_count; j++) {
127 DchMapValue* pNewParameter = new DchMapValue;
128 pNewParameter->plane = dch_value[j].plane;
129 pNewParameter->group = dch_value[j].group;
130 pNewParameter->crate = dch_value[j].crate;
131 pNewParameter->slot = dch_value[j].slot;
132 pNewParameter->channel_low = dch_value[j].channel_low;
133 pNewParameter->channel_high = dch_value[j].channel_high;
134 parameter_value.push_back(pNewParameter);
135 }
136 break;
137 }
138 case GemMapArrayType: {
139 GemMapStructure* gem_value = nullptr;
140 int element_count;
141 pParameter->GetGemMapArray(gem_value, element_count);
142 for (int j = 0; j < element_count; j++) {
143 GemMapValue* pNewParameter = new GemMapValue;
144 pNewParameter->serial = gem_value[j].serial;
145 pNewParameter->id = gem_value[j].id;
146 pNewParameter->station = gem_value[j].station;
147 pNewParameter->channel_low = gem_value[j].channel_low;
148 pNewParameter->channel_high = gem_value[j].channel_high;
149 pNewParameter->hotZone = gem_value[j].hotZone;
150 parameter_value.push_back(pNewParameter);
151 }
152 break;
153 }
154 case GemPedestalArrayType: {
155 GemPedestalStructure* gem_ped_value = nullptr;
156 int element_count;
157 pParameter->GetGemPedestalArray(gem_ped_value, element_count);
158 for (int j = 0; j < element_count; j++) {
159 GemPedestalValue* pNewParameter = new GemPedestalValue;
160 pNewParameter->serial = gem_ped_value[j].serial;
161 pNewParameter->channel = gem_ped_value[j].channel;
162 pNewParameter->pedestal = gem_ped_value[j].pedestal;
163 pNewParameter->noise = gem_ped_value[j].noise;
164 parameter_value.push_back(pNewParameter);
165 }
166 break;
167 }
168 case TriggerMapArrayType: {
169 TriggerMapStructure* trigger_value = nullptr;
170 int element_count;
171 pParameter->GetTriggerMapArray(trigger_value, element_count);
172 for (int j = 0; j < element_count; j++) {
173 TriggerMapValue* pNewParameter = new TriggerMapValue;
174 pNewParameter->serial = trigger_value[j].serial;
175 pNewParameter->slot = trigger_value[j].slot;
176 pNewParameter->channel = trigger_value[j].channel;
177 parameter_value.push_back(pNewParameter);
178 }
179 break;
180 }
181 case LorentzShiftArrayType: {
182 LorentzShiftStructure* lorentz_value = nullptr;
183 int element_count;
184 pParameter->GetLorentzShiftArray(lorentz_value, element_count);
185 for (int j = 0; j < element_count; j++) {
186 LorentzShiftValue* pNewParameter = new LorentzShiftValue;
187 pNewParameter->number = lorentz_value[j].number;
188 pNewParameter->ls[0] = lorentz_value[j].ls[0];
189 pNewParameter->ls[1] = lorentz_value[j].ls[1];
190 pNewParameter->ls[2] = lorentz_value[j].ls[2];
191 parameter_value.push_back(pNewParameter);
192 }
193 break;
194 }
195 case ErrorType: {
196 cout << "ERROR: ErrorType was unexpectedly found" << endl;
197 return -2;
198 }
199 default: {
200 cout << "ERROR: the parameter type was not defined" << endl;
201 return -3;
202 }
203 }
204
205 // cout<<"DetectorName = "<<pParameter->GetDetectorName()<<". ParameterName =
206 // "<<pParameter->GetParameterName()<<". StartPeriod = "<<pParameter->GetStartPeriod()<<". StartRun =
207 // "<<pParameter->GetStartRun()<<". EndPeriod = "<<pParameter->GetEndPeriod()<<". GetEndRun() =
208 // "<<pParameter->GetEndRun()<<". parameter_value size = "<<parameter_value.size()<<endl;
209 UniDetectorParameterNew* pParameterNew = UniDetectorParameterNew::CreateDetectorParameter(
210 pParameter->GetDetectorName(), pParameter->GetParameterName(), pParameter->GetStartPeriod(),
211 pParameter->GetStartRun(), pParameter->GetEndPeriod(), pParameter->GetEndRun(), parameter_value);
212 delete pParameterNew;
213 parameter_value.clear();
214 }
215 cout << endl;
216
217 // clean memory after work
218 delete pParameterArray;
219
220 // SPECIAL CASES: INL = double* (serial + channel) -> MapDVectorValue
221 MoveParameter(TString("inl"), DoubleArrayType, MapDVectorTypeNew);
222 // plane = int (serial + channel) -> MapIntValue
223 MoveParameter(TString("plane"), IntType, MapIntTypeNew);
224 // strip = int (serial + channel) -> MapIntValue
225 MoveParameter(TString("strip"), IntType, MapIntTypeNew);
226 // side = bool (serial + channel) -> MapBoolValue
227 MoveParameter(TString("side"), BoolType, MapBoolTypeNew);
228
229 timer.Stop();
230 Double_t rtime = timer.RealTime(), ctime = timer.CpuTime();
231 printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
232
233 cout << "Macro was successfull" << endl;
234
235 return 0;
236}
237
238void MoveParameter(TString parameter_name, enumParameterType parameter_type, enumValueType parameter_type_new)
239{
240 cout << endl << "Forming conditions for a special parameter: " << parameter_name << "..." << endl;
241 TObjArray arrayConditions;
242 UniSearchCondition* searchCondition = new UniSearchCondition(columnParameterName, conditionEqual, parameter_name);
243 arrayConditions.Add((TObject*)searchCondition);
244
245 cout << "Getting original array for parameter: " << parameter_name << "..." << endl;
246 TObjArray* pParameterArray = UniDetectorParameter::Search(arrayConditions);
247 arrayConditions.Delete();
248
249 int start_period = -1, start_run = -1, end_period = -1, end_run = -1;
250 UniDetectorParameter* pParameter;
251 vector<UniValue*> parameter_value;
252 cout << "Reading/writing '" << parameter_name << "' parameter: " << pParameterArray->GetEntriesFast() << endl;
253 for (int i = 0; i < pParameterArray->GetEntriesFast(); i++) {
254 pParameter = (UniDetectorParameter*)pParameterArray->At(i);
255
256 printProgress(((double)i) / (pParameterArray->GetEntriesFast() - 1));
257 // cout<<"Current parameter: "<<pParameter->GetParameterName()<<". Parameter type =
258 // "<<pParameter->GetParameterType()<<
259 // ". Start period = "<<pParameter->GetStartPeriod()<<". Start run = "<<pParameter->GetStartRun()<<endl;
260
261 if ((start_period == -1) && (start_run == -1)) {
262 start_period = pParameter->GetStartPeriod();
263 start_run = pParameter->GetStartRun();
264 end_period = pParameter->GetEndPeriod();
265 end_run = pParameter->GetEndRun();
266 }
267
268 if ((start_period != pParameter->GetStartPeriod()) || (start_run != pParameter->GetStartRun())) {
269 // cout<<"Write new parameter: "<<pParameter->GetParameterName()<<", start_period = "<<start_period<<",
270 // start_run = "<<start_run<<", value size = "<<parameter_value.size()<<endl;
271 UniDetectorParameterNew* pParameterNew = UniDetectorParameterNew::CreateDetectorParameter(
272 pParameter->GetDetectorName(), pParameter->GetParameterName(), start_period, start_run, end_period,
273 end_run, parameter_value);
274 delete pParameterNew;
275 start_period = pParameter->GetStartPeriod();
276 start_run = pParameter->GetStartRun();
277 end_period = pParameter->GetEndPeriod();
278 end_run = pParameter->GetEndRun();
279 parameter_value.clear();
280 }
281
282 switch (parameter_type) {
283 case BoolType: {
284 bool b_value = pParameter->GetBool();
285
286 switch (parameter_type_new) {
287 case MapBoolTypeNew: {
288 MapBoolValue* pNewParameter = new MapBoolValue;
289 pNewParameter->serial = *(pParameter->GetDcSerial());
290 pNewParameter->channel = *(pParameter->GetChannel());
291 pNewParameter->value = b_value;
292 parameter_value.push_back(pNewParameter);
293
294 break;
295 }
296 default: {
297 cout << "ERROR: the new parameter type was not defined for BoolType" << endl;
298 }
299 } // switch (parameter_type_new)
300
301 break;
302 }
303 case IntType: {
304 int i_value = pParameter->GetInt();
305
306 switch (parameter_type_new) {
307 case MapIntTypeNew: {
308 MapIntValue* pNewParameter = new MapIntValue;
309 pNewParameter->serial = *(pParameter->GetDcSerial());
310 pNewParameter->channel = *(pParameter->GetChannel());
311 pNewParameter->value = i_value;
312 parameter_value.push_back(pNewParameter);
313
314 break;
315 }
316 default: {
317 cout << "ERROR: the new parameter type was not defined for IntType" << endl;
318 }
319 } // switch (parameter_type_new)
320
321 break;
322 }
323 case DoubleArrayType: {
324 double* d_value;
325 int element_count;
326 pParameter->GetDoubleArray(d_value, element_count);
327
328 switch (parameter_type_new) {
329 case MapDVectorTypeNew: {
330 MapDVectorValue* pNewParameter = new MapDVectorValue;
331 // cout<<"serial = "<<*(pParameter->GetDcSerial())<<", channel =
332 // "<<*(pParameter->GetChannel())<<endl;
333 pNewParameter->serial = *(pParameter->GetDcSerial());
334 pNewParameter->channel = *(pParameter->GetChannel());
335 for (int j = 0; j < element_count; j++)
336 pNewParameter->value.push_back(d_value[j]);
337 parameter_value.push_back(pNewParameter);
338
339 break;
340 }
341 default:
342 cout << "ERROR: the new parameter type was not defined for DoubleArrayType" << endl;
343 } // switch (parameter_type_new)
344
345 break;
346 }
347 default:
348 cout << "ERROR: the old parameter type was not defined for the special case" << endl;
349 } // switch (parameter_type)
350 } // for (int i = 0; i < pParameterArray->GetEntriesFast(); i++)
351 cout << endl;
352
353 if ((start_period != -1) && (start_run != -1)) {
354 // cout<<"Final writing new parameter: "<<pParameter->GetParameterName()<<", start_period = "<<start_period<<",
355 // start_run = "<<start_run<<", value size = "<<parameter_value.size()<<endl;
356 UniDetectorParameterNew* pParameterNew = UniDetectorParameterNew::CreateDetectorParameter(
357 pParameter->GetDetectorName(), pParameter->GetParameterName(), start_period, start_run, end_period, end_run,
358 parameter_value);
359 delete pParameterNew;
360 }
361}
int i
Definition P4_F32vec4.h:22
double Double_t
Int_t GetEntriesFast() const
void Delete(Option_t *option="") override
TObject * At(Int_t idx) const override
void Add(TObject *obj) override
Double_t RealTime()
void Start(Bool_t reset=kTRUE)
Double_t CpuTime()
void Stop()
enumValueType GetParameterType()
get parameter type of the current parameter value
int GetStartPeriod()
get start period of the current detector parameter
TString GetParameterName()
get parameter name of the current parameter value
static TObjArray * Search(UniSearchCondition &search_condition)
get parameters' values corresponding to the specified single condition and set owner for search_condi...
TString GetDetectorName()
get detector name of the current detector parameter
int GetEndPeriod()
get end period of the current detector parameter
int GetEndRun()
get end run of the current detector parameter
int GetStartRun()
get start run of the current detector parameter
#define PBWIDTH
#define PBSTR
void MoveParameter(TString parameter_name, enumParameterType parameter_type, enumValueType parameter_type_new)
void printProgress(double percentage)
int copy_data_table2table()
enumValueType
@ IntType
@ StringType
@ BoolType
@ DoubleType
unsigned char * value
STRUCTURES for parameter storing corresponding enumValueType list.
vector< double > value