@@ -53,106 +53,33 @@ o2::parameters::AggregatedRunInfo AggregatedRunInfo::buildAggregatedRunInfo(int
5353{
5454 auto nOrbitsPerTF = grpecs->getNHBFPerTF ();
5555 // calculate SOR/EOR orbits
56- int64_t orbitSOR = (sorMS * 1000 - orbitResetMUS) / o2::constants::lhc::LHCOrbitMUS;
57- int64_t orbitEOR = (eorMS * 1000 - orbitResetMUS) / o2::constants::lhc::LHCOrbitMUS;
58- // adjust to the nearest TF edge to satisfy condition (orbitSOR % nOrbitsPerTF == 0)
59- orbitSOR = (orbitSOR / nOrbitsPerTF + 1 ) * nOrbitsPerTF; // +1 to choose the safe boundary ... towards run middle
60- orbitEOR = orbitEOR / nOrbitsPerTF * nOrbitsPerTF;
61- // temporary map of orbit shifts for runs <=LHC22m (while waiting for complete run list from CTP/Calib/FirstRunOrbit)
62- std::map<int , int > mapOrbitShift;
63- mapOrbitShift[517619 ] = 109 ;
64- mapOrbitShift[517620 ] = 109 ;
65- mapOrbitShift[517623 ] = 109 ;
66- mapOrbitShift[517677 ] = 127 ;
67- mapOrbitShift[517678 ] = 127 ;
68- mapOrbitShift[517679 ] = 127 ;
69- mapOrbitShift[517685 ] = 127 ;
70- mapOrbitShift[517690 ] = 127 ;
71- mapOrbitShift[517693 ] = 127 ;
72- mapOrbitShift[517737 ] = 127 ;
73- mapOrbitShift[517748 ] = 127 ;
74- mapOrbitShift[517751 ] = 127 ;
75- mapOrbitShift[517753 ] = 127 ;
76- mapOrbitShift[517758 ] = 127 ;
77- mapOrbitShift[517767 ] = 127 ;
78- mapOrbitShift[518541 ] = 40 ;
79- mapOrbitShift[518543 ] = 92 ;
80- mapOrbitShift[518546 ] = 124 ;
81- mapOrbitShift[518547 ] = 47 ;
82- mapOrbitShift[519041 ] = 59 ;
83- mapOrbitShift[519043 ] = 59 ;
84- mapOrbitShift[519045 ] = 59 ;
85- mapOrbitShift[519497 ] = 86 ;
86- mapOrbitShift[519498 ] = 86 ;
87- mapOrbitShift[519499 ] = 86 ;
88- mapOrbitShift[519502 ] = 86 ;
89- mapOrbitShift[519503 ] = 86 ;
90- mapOrbitShift[519504 ] = 86 ;
91- mapOrbitShift[519506 ] = 86 ;
92- mapOrbitShift[519507 ] = 86 ;
93- mapOrbitShift[519903 ] = 62 ;
94- mapOrbitShift[519904 ] = 62 ;
95- mapOrbitShift[519905 ] = 62 ;
96- mapOrbitShift[519906 ] = 62 ;
97- mapOrbitShift[520259 ] = 76 ;
98- mapOrbitShift[520294 ] = 76 ;
99- mapOrbitShift[520471 ] = 46 ;
100- mapOrbitShift[520472 ] = 46 ;
101- mapOrbitShift[520473 ] = 46 ;
102- mapOrbitShift[523142 ] = 127 ;
103- mapOrbitShift[523148 ] = 127 ;
104- mapOrbitShift[523182 ] = 127 ;
105- mapOrbitShift[523186 ] = 127 ;
106- mapOrbitShift[523298 ] = 28 ;
107- mapOrbitShift[523306 ] = 28 ;
108- mapOrbitShift[523308 ] = 28 ;
109- mapOrbitShift[523309 ] = 28 ;
110- mapOrbitShift[523397 ] = 110 ;
111- mapOrbitShift[523399 ] = 110 ;
112- mapOrbitShift[523401 ] = 110 ;
113- mapOrbitShift[523441 ] = 117 ;
114- mapOrbitShift[523541 ] = 103 ;
115- mapOrbitShift[523559 ] = 103 ;
116- mapOrbitShift[523669 ] = 39 ;
117- mapOrbitShift[523671 ] = 39 ;
118- mapOrbitShift[523677 ] = 39 ;
119- mapOrbitShift[523728 ] = 113 ;
120- mapOrbitShift[523731 ] = 113 ;
121- mapOrbitShift[523779 ] = 41 ;
122- mapOrbitShift[523783 ] = 41 ;
123- mapOrbitShift[523786 ] = 41 ;
124- mapOrbitShift[523788 ] = 41 ;
125- mapOrbitShift[523789 ] = 41 ;
126- mapOrbitShift[523792 ] = 41 ;
127- mapOrbitShift[523797 ] = 41 ;
128- mapOrbitShift[523821 ] = 36 ;
129- mapOrbitShift[523897 ] = 38 ;
130- if (mapOrbitShift.find (runnumber) != mapOrbitShift.end ()) {
131- orbitSOR += mapOrbitShift[runnumber];
132- orbitEOR += mapOrbitShift[runnumber];
133- }
134-
56+ int64_t orbitSOR = -1 ;
13557 if (ctfFirstRunOrbitVec && ctfFirstRunOrbitVec->size () >= 3 ) { // if we have CTP first run orbit available, we should use it
13658 int64_t creation_timeIGNORED = (*ctfFirstRunOrbitVec)[0 ]; // do not use CTP start of run time!
13759 int64_t ctp_run_number = (*ctfFirstRunOrbitVec)[1 ];
13860 int64_t ctp_orbitSOR = (*ctfFirstRunOrbitVec)[2 ];
13961 if (creation_timeIGNORED == -1 && ctp_run_number == -1 && ctp_orbitSOR == -1 ) {
140- LOGP (warn, " Default dummy CTP/Calib/FirstRunOrbit was provide, ignoring" );
141- } else if (ctp_run_number == runnumber) { // overwrite orbitSOR
142- if (ctp_orbitSOR != orbitSOR) {
143- LOGP (warn, " The calculated orbitSOR {} differs from CTP orbitSOR {}" , orbitSOR, ctp_orbitSOR);
144- // reasons for this is different unit of time storage in RunInformation (ms) and orbitReset (us), etc.
145- // so we need to adjust the SOR timings to be consistent
146- auto sor_new = (int64_t )((orbitResetMUS + ctp_orbitSOR * o2::constants::lhc::LHCOrbitMUS) / 1000 .);
147- if (sor_new != sorMS) {
148- LOGP (warn, " Adjusting SOR from {} to {}" , sorMS, sor_new);
149- sorMS = sor_new;
150- }
151- }
62+ LOGP (warn, " Default dummy CTP/Calib/FirstRunOrbit was provides, ignoring" );
63+ } else if (ctp_run_number == runnumber) {
15264 orbitSOR = ctp_orbitSOR;
65+ auto sor_new = (int64_t )((orbitResetMUS + ctp_orbitSOR * o2::constants::lhc::LHCOrbitMUS) / 1000 .);
66+ if (sor_new != sorMS) {
67+ LOGP (warn, " Adjusting SOR from {} to {}" , sorMS, sor_new);
68+ sorMS = sor_new;
69+ }
15370 } else {
15471 LOGP (error, " AggregatedRunInfo: run number inconsistency found (asked: {} vs CTP found: {}, ignoring" , runnumber, ctp_run_number);
15572 }
15673 }
74+ int64_t orbitEOR = (eorMS * 1000 - orbitResetMUS) / o2::constants::lhc::LHCOrbitMUS;
75+ if (runnumber > 523897 ) { // condition was introduced starting from LHC22o
76+ orbitEOR = orbitEOR / nOrbitsPerTF * nOrbitsPerTF;
77+ }
78+ if (orbitSOR < 0 ) { // extract from SOR
79+ orbitSOR = (sorMS * 1000 - orbitResetMUS) / o2::constants::lhc::LHCOrbitMUS;
80+ if (runnumber > 523897 ) {
81+ orbitSOR = (orbitSOR / nOrbitsPerTF + 1 ) * nOrbitsPerTF;
82+ }
83+ }
15784 return AggregatedRunInfo{runnumber, sorMS, eorMS, nOrbitsPerTF, orbitResetMUS, orbitSOR, orbitEOR, grpecs};
15885}
0 commit comments