BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
move_field_2_run.C
Go to the documentation of this file.
1// macro for moving magnetic field voltage from parameter values to table RUN_
3void move_field_2_run(int period)
4{
5 UniqueRunNumber* run_numbers;
6 int run_count = UniRun::GetRunNumbers(run_numbers, period, 1, period, 100000);
7 if (run_count <= 0)
8 return;
9
10 const char* detector_name = "magnet";
11 const char* parameter_name = "average_field_mv";
12
13 for (int i = 0; i < run_count; i++) {
14 // get the average magnetic field from Runs of the Unified Condition Database
16 detector_name, parameter_name, run_numbers[i].period_number, run_numbers[i].run_number);
17 if (pDetectorParameter == nullptr) {
18 cout << "No field voltage was found for run (" << run_numbers[i].period_number << ":"
19 << run_numbers[i].run_number << ")" << endl;
20 continue;
21 }
22 double field_voltage = ((DoubleValue*)pDetectorParameter->GetValue())->value;
23 delete pDetectorParameter;
24
25 // get run
26 UniRun* pRun = UniRun::GetRun(run_numbers[i].period_number, run_numbers[i].run_number);
27 if (pRun == nullptr) {
28 cout << "The function encountered with errors: no experimental run was found ("
29 << run_numbers[i].period_number << ":" << run_numbers[i].run_number << "). This run will be skipped!"
30 << endl;
31 continue;
32 }
33 pRun->SetFieldVoltage(&field_voltage);
34 delete pRun;
35
36 cout << "Average magnetic field for run " << run_numbers[i].period_number << "-" << run_numbers[i].run_number
37 << ": " << field_voltage << " mV" << endl;
38 }
39
40 delete run_numbers;
41 cout << "Macro finished successfully" << endl;
42}
43
45{
46 UniqueRunNumber* run_numbers;
47 int run_count = UniRun::GetRunNumbers(run_numbers, period, 1, period, 100000);
48 if (run_count <= 0)
49 return;
50
51 const char* detector_name = "magnet";
52 const char* parameter_name = "field_current";
53
54 for (int i = 0; i < run_count; i++) {
55 // get the field current from parameter values of the Unified Condition Database
57 detector_name, parameter_name, run_numbers[i].period_number, run_numbers[i].run_number);
58 if (pDetectorParameter == nullptr) {
59 cout << "No field current was found for run (" << run_numbers[i].period_number << ":"
60 << run_numbers[i].run_number << ")" << endl;
61 continue;
62 }
63 int field_current = ((IntValue*)pDetectorParameter->GetValue())->value;
64 delete pDetectorParameter;
65
66 // convert current to voltage approximately
67 double field_voltage = field_current / 900.0 * 55.87;
68
69 // get run
70 UniRun* pRun = UniRun::GetRun(run_numbers[i].period_number, run_numbers[i].run_number);
71 if (pRun == nullptr) {
72 cout << "The function encountered with errors: no experimental run was found ("
73 << run_numbers[i].period_number << ":" << run_numbers[i].run_number << "). This run will be skipped!"
74 << endl;
75 continue;
76 }
77
78 double* current_voltage = pRun->GetFieldVoltage();
79 if (current_voltage == nullptr) {
80 pRun->SetFieldVoltage(&field_voltage);
81 cout << "Field voltage was written for run " << run_numbers[i].period_number << "-"
82 << run_numbers[i].run_number << ": " << field_voltage << " mV" << endl;
83 } else
84 cout << "Field voltage exists for run " << run_numbers[i].period_number << "-" << run_numbers[i].run_number
85 << ": " << *current_voltage << " mV" << endl;
86
87 delete pRun;
88 }
89
90 delete run_numbers;
91 cout << "Macro finished successfully" << endl;
92}
int i
Definition P4_F32vec4.h:22
int GetValue(vector< UniValue * > &parameter_value)
get value of detector parameter presented by an array
static UniDetectorParameter * GetDetectorParameter(int value_id)
get detector parameter from the database
UniRun.h Class for the table: run_.
Definition UniRun.h:21
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161
double * GetFieldVoltage()
get field voltage of the current run
Definition UniRun.h:121
static int GetRunNumbers(UniqueRunNumber *&run_numbers, int start_period, int start_run=0, int end_period=-1, int end_run=-1)
get numbers of runs stored in the Database for a selected range
Definition UniRun.cxx:804
int SetFieldVoltage(double *field_voltage)
set field voltage of the current run
Definition UniRun.cxx:665
void move_field_2_run(int period)
void convert_current_2_voltage(int period)