ATLAS Offline Software
CBNTAA_TBInfo.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "CBNTAA_TBInfo.h"
6 
7 #include "GaudiKernel/IToolSvc.h"
8 
10 
15 
16 #include <cmath>
17 
18 
19 CBNTAA_TBInfo::CBNTAA_TBInfo(const std::string& name, ISvcLocator* pSvcLocator) :
20 CBNT_TBRecBase(name, pSvcLocator)
21 {
22  declareProperty("DBRead", m_DBRead=false);
23  declareProperty("BeamEnergy", m_beamener);
24  declareProperty("BeamType", m_beamtype);
25  declareProperty("ComputeBeamEnergy", m_computeBeamEnergy=false);
26  declareProperty("DumpBeamLine", m_dumpBeamLine=true);
27  m_quad_file = NULL;
28  m_quad_equip = NULL;
29  m_bend_file = NULL;
30  m_bend_equip = NULL;
31  m_trim_file = NULL;
32  m_trim_equip = NULL;
33  m_coll_file = NULL;
34  m_coll_equip = NULL;
35  m_coord = 0;
36  m_runpar = 0;
37  m_B8_Bdl = 0;
38  m_energy = 0;
39  m_errAbsEnergy = 0;
40  m_errCollimators = 0;
41  m_errCurrents = 0;
42  m_errSycLoss = 0;
43  m_is_VLE = 0;
44  m_prevB3 = 0;
45  m_prevB4 = 0;
46  m_prevB8 = 0;
47  m_prevEnergy = 0;
51  m_preverrSycLoss = 0;
52  m_prevrunNum = 0;
53  m_prevsycLoss = 0;
54  m_runEnergy_nt = 0;
55  m_runEta_nt = 0;
57  m_sycLoss = 0;
58 }
59 
61 {
62  if(m_quad_file) delete m_quad_file;
63  if(m_quad_equip) delete m_quad_equip;
64  if(m_bend_file) delete m_bend_file;
65  if(m_bend_equip) delete m_bend_equip;
66  if(m_trim_file) delete m_trim_file;
67  if(m_trim_equip) delete m_trim_equip;
68  if(m_coll_file) delete m_coll_file;
69  if(m_coll_equip) delete m_coll_equip;
70 }
71 
73 
74  StatusCode sc;
75 
76  addBranch("EVENT_RunEta", m_runEta_nt,"RunEta/D");
77  addBranch("EVENT_RunPartType", m_runParticleType_nt,"RunPartType/l");
78  addBranch("EVENT_RunEnergy", m_runEnergy_nt,"RunEnergy/l");
79  addBranch("EVENT_Energy", m_energy,"Energy/f");
80 
81  if ( m_computeBeamEnergy ) {
82 
83  addBranch("EVENT_ErrAbsEnergy", m_errAbsEnergy,"ErrAbsEnergy/f");
84  addBranch("EVENT_ErrCollimators", m_errCollimators,"ErrCollimators/f");
85  addBranch("EVENT_ErrCurrents", m_errCurrents,"ErrCurrents/f");
86  addBranch("EVENT_SyncLoss", m_sycLoss,"SyncLoss/f");
87  addBranch("EVENT_ErrSyncLoss", m_errSycLoss,"ErrSyncLoss/f");
88 
89  if ( m_dumpBeamLine ) {
90 
91  addBranch("EVENT_Quad_file", m_quad_file);
92  addBranch("EVENT_Quad_equip", m_quad_equip);
93 
94  addBranch("EVENT_Bend_file", m_bend_file);
95  addBranch("EVENT_Bend_equip", m_bend_equip);
96 
97  addBranch("EVENT_Trim_file", m_trim_file);
98  addBranch("EVENT_Trim_equip", m_trim_equip);
99 
100  addBranch("EVENT_Coll_file", m_coll_file);
101  addBranch("EVENT_Coll_equip", m_coll_equip);
102  }
103 
104  }
105 
106  //VLE flag set to false
107  m_is_VLE=0;
108  //Bdl value of B8 magnet is also set to 0 - the case for HLE runs..
109  m_B8_Bdl=0.0;
110  //set a previous vars to -1
111  m_prevrunNum = -1;
112  m_prevEnergy = -1.0;
113  m_preverrAbsEnergy = -1.0;
114  m_preverrCollimators = -1.0;
115  m_preverrCurrents = -1.0;
116  m_prevsycLoss = -1.0;
117  m_preverrSycLoss = -1.0;
118  m_prevB3 = -1.0;
119  m_prevB4 = -1.0;
120  m_prevB8 = -1.0;
121 
122  return StatusCode::SUCCESS;
123 }
124 
125 
127 
128  const EventContext& ctx = Gaudi::Hive::currentContext();
129 
132 
133  if ( m_DBRead ) {
134 
135  int run = ctx.eventID().run_number();
136  uint64_t event = ctx.eventID().event_number();
137 
138  ATH_MSG_VERBOSE( "run " << run );
139 
140  if((event > 0) && (m_prevrunNum==-1))
141  m_prevrunNum=run;//initializing the prev run
142 
143  IToolSvc* p_toolSvc = 0;
144  StatusCode sc = service("ToolSvc", p_toolSvc);
145  if (sc.isFailure())
146  {
147  ATH_MSG_ERROR( "Cannot find ToolSvc " );
148  return(StatusCode::FAILURE);
149  }
150 
151  // This tool handles the conversion between local and ctb coordinates
152  sc = p_toolSvc->retrieveTool("TBCaloCoordinate",m_coord);
153 
154  if(sc.isFailure() || !m_coord)
155  {
156  ATH_MSG_ERROR( "Cannot get TBCaloCoordinate tool" );
157  return(StatusCode::FAILURE);
158  }
159  else {
160  ATH_MSG_DEBUG( "Found TBCaloCoordinate tool" );
161  }
162 
164 
165  sc = p_toolSvc->retrieveTool("TBCondRunParTool",m_runpar);
166 
167  if(sc.isFailure() || !m_runpar)
168  {
169  ATH_MSG_ERROR( "Cannot get TBCondParTool" );
170  return(StatusCode::FAILURE);
171  }
172  else
173  {
174  ATH_MSG_DEBUG( "Found TBCondRunParTool" );
175  }
176 
177  if ( m_computeBeamEnergy ) {
178 
179  //below the calculation of all energies and their errors...
181 
182  ATH_MSG_DEBUG( "m_energy " << m_energy );
183  ATH_MSG_DEBUG( "m_errAbsEnergy " << m_errAbsEnergy );
184  ATH_MSG_DEBUG( "m_errCollimators " << m_errCollimators );
185  ATH_MSG_DEBUG( "m_errCurrents " << m_errCurrents );
186  ATH_MSG_DEBUG( "m_sycLoss " << m_sycLoss );
187  ATH_MSG_DEBUG( "m_errSycLoss " << m_errSycLoss );
188 
189  }
190 
191  }//end of if (m_DBRead)
192 
193  return StatusCode::SUCCESS;
194 }
195 
196 
197 
198 
199 float CBNTAA_TBInfo::GetEnergy(float currB3, float currB4)
200 {
201  float Bdltot = GetBdl3(currB3) + GetBdl4(currB4);
202 
203  float energy = (0.3/41.)*Bdltot * 1000;
204 
205  return energy;
206 }
207 
208 
209 
211 {
212  float Bend3_low[2] = {0.0079347, 0.021813};
213  float Bend3_high[4] = {0.437329, 0.0212849, 0.00000355516, -0.0000000147542};
214 
215  float Bdl3 = 0;
216 
217  current = fabs(current);
218 
219  if (current <= 824.12) Bdl3 = Bend3_low[0] + Bend3_low[1]*current;
220  else Bdl3 = Bend3_high[0] + Bend3_high[1]*current + Bend3_high[2]*(current-824.12)*(current-824.12) + Bend3_high[3]*(current-824.12)*(current-824.12)*(current-824.12);
221 
222  return Bdl3;
223 }
224 
225 
227 {
228  float Bend4_low[2] = {0.00786406, 0.021814};
229  float Bend4_high[4] = {0.434258, 0.0212899, 0.00000356113, -0.0000000147379};
230 
231  float Bdl4 = 0;
232 
233  current = fabs(current);
234 
235  if (current <= 824.12) Bdl4 = Bend4_low[0] + Bend4_low[1]*current;
236  else Bdl4 = Bend4_high[0] + Bend4_high[1]*current + Bend4_high[2]*(current-824.12)*(current-824.12) + Bend4_high[3]*(current-824.12)*(current-824.12)*(current-824.12);
237 
238  return Bdl4;
239 }
240 
241 
242 float CBNTAA_TBInfo::GetErrColl(float coll3_down, float coll3_up, float coll9_down, float coll9_up)
243 {
244  float coll3_opening = (fabs(coll3_down) + fabs(coll3_up))/2.0;
245  float coll9_opening = (fabs(coll9_down) + fabs(coll9_up))/2.0;
246 
247  float errcoll = sqrt(coll3_opening*coll3_opening + coll9_opening*coll9_opening)*(1./27);
248 
249  return errcoll;
250 }
251 
253 {
254  float fac = 25./energy;
255  float err_abs = sqrt(fac*fac + 0.5*0.5);
256 
257  return err_abs;
258 }
259 
260 
261 float CBNTAA_TBInfo::GetErrCurr(float currB3, float currB4)
262 {
263  float Bdl3 = GetBdl3(currB3);
264  float Bdl4 = GetBdl4(currB4);
265 
266  float Bdl_tot = Bdl3 + Bdl4;
267 
268  float errBdl3 = (GetBdl3(currB3 + 0.1) - GetBdl3(currB3 - 0.1))/2;
269  float errBdl4 = (GetBdl4(currB4 + 0.1) - GetBdl4(currB4 - 0.1))/2;
270  const float fac3 = errBdl3/Bdl3;
271  const float fac4 = errBdl4/Bdl4;
272  float errBdl = sqrt(fac3*fac3 + fac4*fac4)*Bdl_tot;
273 
274  float resField = sqrt(0.0010*0.0010 + 0.0010*0.0010);
275 
276  errBdl = sqrt(errBdl*errBdl + resField*resField + Bdl_tot*0.0003 * Bdl_tot*0.0003)/Bdl_tot*100;
277 
278  return errBdl;
279 }
280 
281 
282 
283 float CBNTAA_TBInfo::SyncLoss(float energy, float currB3, float currB4)
284 {
285  float Lmag = 5.127;
286 
287  float Bdl_B3 = GetBdl3(currB3);
288  float Bdl_B4 = GetBdl4(currB4);
289 
290  float B2dl_B3 = (Bdl_B3 * Bdl_B3)*(1./(Lmag*9));
291  float B2dl_B4 = (Bdl_B4 * Bdl_B4)*(1./(Lmag*9));
292  float B2dl_tot = B2dl_B3 + B2dl_B4;
293 
294  float B5suB34 = 0.19;
295  float B6suB34 = 0.22;
296  float B56lB34 = 0.25;
297 
298  float B2dl_B5 = (B2dl_B3 + B2dl_B4)*B5suB34*B5suB34*B56lB34;
299  float B2dl_B6 = (B2dl_B3 + B2dl_B4)*B6suB34*B6suB34*B56lB34;
300 
301  float loss = 0.00000127*energy*energy*(3*B2dl_tot/2 + B2dl_B5 + B2dl_B6);
302  return loss;
303 }
304 
305 
306 
307 float CBNTAA_TBInfo::SyncLossErr(float loss)
308 {
309  float errloss = loss * 0.02;
310  return errloss;
311 }
312 
313 
314 
316 
317  return StatusCode::SUCCESS;
318 }
319 
320 // Clear vectors
321 
323 {
324  if(m_quad_file) m_quad_file->clear();
325  if(m_quad_equip) m_quad_equip->clear();
326  if(m_bend_file) m_bend_file->clear();
327  if(m_bend_equip) m_bend_equip->clear();
328  if(m_trim_file) m_trim_file->clear();
329  if(m_trim_equip) m_trim_equip->clear();
330  if(m_coll_file) m_coll_file->clear();
331  if(m_coll_equip) m_coll_equip->clear();
332 
333 
334  return StatusCode::SUCCESS;
335 }
336 //new method which will clculate all energies and their errors using info provided by m_runpar variable
338 
339  int run = runNumber;
340  int event = eventNumber;
341 
342  ATH_MSG_VERBOSE( "run " << run );
343 
344  //check if the run is a VLE run then set the flag
345  if (((run < 2101225) && (run >= 2101022)) || ((run < 2102165) && (run >= 2102003)))
346  m_is_VLE=1;
347 
348  //starting from event=2 we dont have to recalculate the variables unless the run number changes
349  if (event > 1)
350  {
351  if (run == m_prevrunNum)
352  {
359 
360  return;
361  }
362  else
364  }
365 
368 
369  float bend_equip[9];
370  float coll_equip[24];
371 
372  int nc_quad = 22;
373  int nc_bend = 9;
374  int nc_trim = 10;
375  int nc_coll = 24;
376 
377  const char* folder;
378  if (m_dumpBeamLine == true)
379  {
380 // const GenericDbTable* dcstbl_quad_file[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
381 // const GenericDbTable* dcstbl_quad_equip[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
382 // const GenericDbTable* dcstbl_bend_file[9] = {0,0,0,0,0,0,0,0,0};
383 // const GenericDbTable* dcstbl_bend_equip[9] = {0,0,0,0,0,0,0,0,0};
384 // const GenericDbTable* dcstbl_trim_file[10] = {0,0,0,0,0,0,0,0,0,0};
385 // const GenericDbTable* dcstbl_trim_equip[10] = {0,0,0,0,0,0,0,0,0,0};
386 // const GenericDbTable* dcstbl_coll_file[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
387 // const GenericDbTable* dcstbl_coll_equip[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
388 
389 // int ncol_quad_file[22], nrow_quad_file[22];
390 // int ncol_bend_file[9], nrow_bend_file[9];
391 // int ncol_trim_file[10], nrow_trim_file[10];
392 // int ncol_coll_file[24], nrow_coll_file[24];
393 // int ncol_quad_equip[22], nrow_quad_equip[22];
394 // int ncol_bend_equip[9], nrow_bend_equip[9];
395 // int ncol_trim_equip[10], nrow_trim_equip[10];
396 // int ncol_coll_equip[24], nrow_coll_equip[24];
397 
398 // std::vector<std::string> names_quad_file[22], rows_quad_file[22];
399 // std::vector<std::string> names_bend_file[9], rows_bend_file[9];
400 // std::vector<std::string> names_trim_file[10], rows_trim_file[10];
401 // std::vector<std::string> names_coll_file[24], rows_coll_file[24];
402 // std::vector<std::string> names_quad_equip[22], rows_quad_equip[22];
403 // std::vector<std::string> names_bend_equip[9], rows_bend_equip[9];
404 // std::vector<std::string> names_trim_equip[10], rows_trim_equip[10];
405 // std::vector<std::string> names_coll_equip[24], rows_coll_equip[24];
406 
407  float quad_file[22];
408  float bend_file[9];
409  float trim_file[10];
410  float coll_file[24];
411  float quad_equip[22];
412  float trim_equip[10];
413 
414  m_quad_file->reserve(nc_quad);
415  m_quad_equip->reserve(nc_quad);
416  for (int i=0; i<nc_quad; i++)
417  {
418  quad_file[i] = -1;
419  quad_equip[i] = -1;
420  unsigned int val1;
421  unsigned int val2;
422 
423 #if 0
424  if (run < 1000454)
425  {
426  folder = "/TILE/DCS/SYSTEM1/BEAM";
427  }
428  else
429 #endif
430  {
431  folder = "/TILE/DCS/SYSTEM1/BEAM";
432  }
433  val1 = i+6;
434  val2 = i+48;
435 
436  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val1,quad_file[i])) {
437  ATH_MSG_ERROR( "Cannot find val" << val1 );
438  }
439  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,quad_equip[i])){
440  ATH_MSG_ERROR( "Cannot find val" << val2 );
441  }
442 
443  (*m_quad_file)[i] = quad_file[i];
444  (*m_quad_equip)[i] = quad_equip[i];
445  }
446 
447 
448  m_bend_file->reserve(nc_bend);
449  m_bend_equip->reserve(nc_bend);
450  for (int i=0; i<nc_bend; i++)
451  {
452  bend_file[i] = -1;
453  bend_equip[i] = -1;
454  unsigned int val1;
455  unsigned int val2;
456 
457  if (run < 1000454)
458  {
459  folder = "/TILE/DCS/SYSTEM1/BEAM";
460  }
461  else
462  {
463  folder = "/TILE/DCS/TILE_LV_62/BEAM";
464  }
465  val1 = i+28;
466  val2 = i+70;
467 
468  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val1,bend_file[i])) {
469  ATH_MSG_ERROR( "Cannot find val" << val1 );
470  }
471  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,bend_equip[i])) {
472  ATH_MSG_ERROR( "Cannot find val" << val2 );
473  }
474 
475  (*m_bend_file)[i] = bend_file[i];
476  (*m_bend_equip)[i] = bend_equip[i];
477 
478  //added on 12.03.2006 by H.Hakobyan for caching purposes
479  if (!m_is_VLE)
480  {
481  //if the currents B3 and B4 are the same as in previous event then quit..
482  if((m_prevB3 == bend_equip[2]) && (m_prevB4 == bend_equip[3]))
483  return;
484  }
485  else
486  {
487  //if the current B8 is the same as in previous event then quit..
488  if(m_prevB8 == bend_equip[7])
489  return;
490  }
491 
492  }
493 
494  m_trim_file->reserve(nc_trim);
495  m_trim_equip->reserve(nc_trim);
496  for (int i=0; i<nc_trim; i++)
497  {
498  trim_file[i] = -1;
499  trim_equip[i] = -1;
500  unsigned int val1;
501  unsigned int val2;
502 
503  if (run < 1000454)
504  {
505  folder = "/TILE/DCS/SYSTEM1/BEAM";
506  }
507  else
508  {
509  folder = "/TILE/DCS/TILE_LV_62/BEAM";
510  }
511  val1 = i+37;
512  val2 = i+79;
513 
514  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val1,trim_file[i])) {
515  ATH_MSG_ERROR( "Cannot find val" << val1 );
516  }
517  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,trim_equip[i])) {
518  ATH_MSG_ERROR( "Cannot find val" << val2 );
519  }
520 
521  (*m_trim_file)[i] = trim_file[i];
522  (*m_trim_equip)[i] = trim_equip[i];
523  }
524 
525 
526  m_coll_file->reserve(nc_coll);
527  m_coll_equip->reserve(nc_coll);
528  for (int i=0; i<nc_coll; i++)
529  {
530  coll_file[i] = -1;
531  coll_equip[i] = -1;
532  unsigned int val1;
533  unsigned int val2;
534 
535 
536  if (run < 1000454)
537  {
538  folder = "/TILE/DCS/SYSTEM1/BEAM";
539  }
540  else
541  {
542  folder = "/TILE/DCS/TILE_LV_62/BEAM";
543  }
544  val1 = i+90;
545  val2 = i+115;
546 
547  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val1,coll_file[i])) {
548  ATH_MSG_ERROR( "Cannot find val" << val1 );
549  }
550  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,coll_equip[i])) {
551  ATH_MSG_ERROR( "Cannot find val" << val2 );
552  }
553 
554  (*m_coll_file)[i] = coll_file[i];
555  (*m_coll_equip)[i] = coll_equip[i];
556  }
557 
558 
559  for (int i=0; i<nc_quad; i++)
560  {
561  ATH_MSG_DEBUG( "Q" << i+1 << " from file " << (*m_quad_file)[i] );
562  }
563  for (int i=0; i<nc_bend; i++)
564  {
565  ATH_MSG_DEBUG( "B" << i+1 << " from file " << (*m_bend_file)[i] );
566  }
567  for (int i=0; i<nc_trim; i++)
568  {
569  ATH_MSG_DEBUG( "Trim" << i+1 << " from file " << (*m_trim_file)[i] );
570  }
571  for (int i=0; i<nc_coll; i++)
572  {
573  int j = i/2;
574  if (i == 2*j)
575  {
576  ATH_MSG_DEBUG( "Coll" << j+1 << " from file (up or right position) " << (*m_coll_file)[i] );
577  ATH_MSG_DEBUG( "Coll" << j+1 << " from file (down or left position) " << (*m_coll_file)[i+1] );
578  }
579  }
580 
581 
582  for (int i=0; i<nc_quad; i++)
583  {
584  ATH_MSG_DEBUG( "Q" << i+1 << " from equipement " << (*m_quad_equip)[i] );
585  }
586  for (int i=0; i<nc_bend; i++)
587  {
588  ATH_MSG_DEBUG( "B" << i+1 << " from equipement " << (*m_bend_equip)[i] );
589  }
590  for (int i=0; i<nc_trim; i++)
591  {
592  ATH_MSG_DEBUG( "Trim" << i+1 << " from equipement " << (*m_trim_equip)[i] );
593  }
594  for (int i=0; i<nc_coll; i++)
595  {
596  int j = i/2;
597  if (i == 2*j)
598  {
599  ATH_MSG_DEBUG( "Coll" << j+1 << " from equipement (up or right position) " << (*m_coll_equip)[i] );
600  ATH_MSG_DEBUG( "Coll" << j+1 << " from file (down or left position) " << (*m_coll_equip)[i+1] );
601  }
602  }//for
603  }//end of if (m_dumpBeamLine = true)
604  else // if(m_dumpBeamLine == false)
605  {
606 // const GenericDbTable* dcstbl_bend_equip[9] = {0,0,0,0,0,0,0,0,0};
607 // const GenericDbTable* dcstbl_coll_equip[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
608 // int ncol_bend_equip[9], nrow_bend_equip[9];
609 // int ncol_coll_equip[9], nrow_coll_equip[9];
610 // std::vector<std::string> names_bend_equip[9], rows_bend_equip[9];
611 // std::vector<std::string> names_coll_equip[9], rows_coll_equip[9];
612 
613  for (int i=0; i<nc_bend; i++)
614  {
615  bend_equip[i] = -1;
616  unsigned int val2;
617 
618  if (run < 1000454)
619  {
620  folder = "/TILE/DCS/SYSTEM1/BEAM";
621  }
622  else
623  {
624  folder = "/TILE/DCS/TILE_LV_62/BEAM";
625  }
626  val2 = i+70;
627  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,bend_equip[i])) {
628  ATH_MSG_ERROR( "Cannot find val" << val2 );
629  }
630  }
631 
632 
633  for (int i=0; i<nc_coll; i++)
634  {
635  coll_equip[i] = -1;
636  unsigned int val2;
637 
638  if (run < 1000454)
639  {
640  folder = "/TILE/DCS/SYSTEM1/BEAM";
641  }
642  else
643  {
644  folder = "/TILE/DCS/TILE_LV_62/BEAM";
645  }
646  val2 = i+115;
647  if (StatusCode::SUCCESS!=m_runpar->getVal(folder,val2,coll_equip[i])) {
648  ATH_MSG_ERROR( "Cannot find val" << val2 );
649  }
650  }
651 
652  }//end of if(m_dumpBeamLine = false)
653 
654  //check if the run is a VLE run then set the flag
655  //if (((run < 2101225) && (run >= 2101022)) || ((run < 2102165) && (run >= 2102003)))
656  // m_is_VLE=1;
657 
658  // --- modifying the code introducing two cases - for VLE and HLE, with different beam energy calculations ---
659  if(m_is_VLE)//run is a VLE run
660  {
661 
662  //ATH_MSG_INFO( "THIS is a VLE run..." );
663  //ATH_MSG_INFO( "B8 current=" << bend_equip[7] );
664 
665  //a polynomial function giving the values of Bdl for any given B8 current value...MIGRAD method for 4th order polynome ...:)
666  // m_B8_Bdl = 0.00525593*bend_equip[7] + 0.00000410442*bend_equip[7]*bend_equip[7] -
667  // 0.00000000906592*bend_equip[7]*bend_equip[7]*bend_equip[7]+
668  // 0.00000000000345019*bend_equip[7]*bend_equip[7]*bend_equip[7]*bend_equip[7];
669 
670  //a polynomial function giving the values of Bdl for any given B8 current value...MINOS method ...for 5th order polynome:)
671  m_B8_Bdl = 0.00530982*bend_equip[7] + 0.00000328502*bend_equip[7]*bend_equip[7] -
672  0.00000000532397*bend_equip[7]*bend_equip[7]*bend_equip[7]-
673  0.00000000000276483*bend_equip[7]*bend_equip[7]*bend_equip[7]*bend_equip[7]+
674  0.000000000000003368*bend_equip[7]*bend_equip[7]*bend_equip[7]*bend_equip[7]*bend_equip[7];
675 
676  //beam energy calculation basedon a famous formula..
677  m_energy = 2.49826 * m_B8_Bdl;
679 
680  ATH_MSG_DEBUG( "B8dl=" << m_B8_Bdl );
681  ATH_MSG_DEBUG( "m_energy=" << m_energy );
682 
683  //C12 opening calculations... C12 is the onlycollimator which is responsible for VLE runs
684  float coll12_opening = (fabs(coll_equip[11]) + fabs(coll_equip[23]))/2.0;
685  m_errCollimators = sqrt(coll12_opening*coll12_opening)*(1./27);
686 
687  //calculation of errors of magnet currents..
688  m_errCurrents = GetErrCurr(bend_equip[6], bend_equip[7]);
689  m_sycLoss = SyncLoss(m_energy, bend_equip[6], bend_equip[7]);
691 
692  //for caching purposes
693  m_prevB8 = bend_equip[7];
694  }
695  else//run is a HLE run
696  {
697  m_energy = GetEnergy(bend_equip[2], bend_equip[3]);
699  m_errCollimators = GetErrColl(coll_equip[4], coll_equip[5], coll_equip[16], coll_equip[17]);
700  m_errCurrents = GetErrCurr(bend_equip[2], bend_equip[3]);
701  m_sycLoss = SyncLoss(m_energy, bend_equip[2], bend_equip[3]);
703 
704  //for caching purposes
705  m_prevB3 = bend_equip[2];
706  m_prevB4 = bend_equip[3];
707  }
708 
709  //assigning the previous vars for caching..
716 
717 
718 }
719 
CBNTAA_TBInfo::m_quad_file
std::vector< float > * m_quad_file
Definition: CBNTAA_TBInfo.h:64
fillPileUpNoiseLumi.current
current
Definition: fillPileUpNoiseLumi.py:52
CBNTAA_TBInfo::m_errAbsEnergy
float m_errAbsEnergy
Definition: CBNTAA_TBInfo.h:77
CBNTAA_TBInfo::m_coll_file
std::vector< float > * m_coll_file
Definition: CBNTAA_TBInfo.h:73
CBNTAA_TBInfo::GetErrColl
float GetErrColl(float coll3_down, float coll3_up, float coll9_down, float coll9_up)
Definition: CBNTAA_TBInfo.cxx:242
CBNTAA_TBInfo::calculateAll
void calculateAll(int runNumber, int eventNumber)
Definition: CBNTAA_TBInfo.cxx:337
CBNTAA_TBInfo.h
CBNTAA_TBInfo::m_runParticleType_nt
long m_runParticleType_nt
Definition: CBNTAA_TBInfo.h:61
CBNTAA_TBInfo::SyncLossErr
float SyncLossErr(float loss)
Definition: CBNTAA_TBInfo.cxx:307
CBNTAA_TBInfo::GetErrAbsE
float GetErrAbsE(float energy)
Definition: CBNTAA_TBInfo.cxx:252
CBNTAA_TBInfo::m_prevEnergy
float m_prevEnergy
Definition: CBNTAA_TBInfo.h:46
CBNTAA_TBInfo::m_runpar
TBCondRunParTool * m_runpar
Definition: CBNTAA_TBInfo.h:33
CBNTAA_TBInfo::m_energy
float m_energy
Definition: CBNTAA_TBInfo.h:76
TBCondRunParTool::beam_energy
int beam_energy()
Definition: TBCondRunParTool.h:86
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CBNTAA_TBInfo::GetErrCurr
float GetErrCurr(float currB3, float currB4)
Definition: CBNTAA_TBInfo.cxx:261
CBNTAA_TBInfo::m_preverrAbsEnergy
float m_preverrAbsEnergy
Definition: CBNTAA_TBInfo.h:47
CBNTAA_TBInfo::m_prevB8
float m_prevB8
Definition: CBNTAA_TBInfo.h:54
CBNTAA_TBInfo::m_trim_equip
std::vector< float > * m_trim_equip
Definition: CBNTAA_TBInfo.h:71
CBNTAA_TBInfo::CBNT_finalize
virtual StatusCode CBNT_finalize() override
Definition: CBNTAA_TBInfo.cxx:315
run
int run(int argc, char *argv[])
Definition: ttree2hdf5.cxx:28
CBNTAA_TBInfo::m_bend_equip
std::vector< float > * m_bend_equip
Definition: CBNTAA_TBInfo.h:68
CBNTAA_TBInfo::m_B8_Bdl
float m_B8_Bdl
Definition: CBNTAA_TBInfo.h:41
CBNTAA_TBInfo::m_prevB4
float m_prevB4
Definition: CBNTAA_TBInfo.h:53
TBCaloCoordinate.h
CBNTAA_TBInfo::m_is_VLE
bool m_is_VLE
Definition: CBNTAA_TBInfo.h:42
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
CBNTAA_TBInfo::m_sycLoss
float m_sycLoss
Definition: CBNTAA_TBInfo.h:80
CBNTAA_TBInfo::m_coord
TBCaloCoordinate * m_coord
Definition: CBNTAA_TBInfo.h:32
CBNTAA_TBInfo::m_errCollimators
float m_errCollimators
Definition: CBNTAA_TBInfo.h:78
CBNTAA_TBInfo::GetEnergy
float GetEnergy(float CurrB3, float CurrB4)
Definition: CBNTAA_TBInfo.cxx:199
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
CBNTAA_TBInfo::m_prevB3
float m_prevB3
Definition: CBNTAA_TBInfo.h:52
CBNTAA_TBInfo::m_trim_file
std::vector< float > * m_trim_file
Definition: CBNTAA_TBInfo.h:70
CBNTAA_TBInfo::m_computeBeamEnergy
bool m_computeBeamEnergy
Definition: CBNTAA_TBInfo.h:37
CBNTAA_TBInfo::m_preverrSycLoss
float m_preverrSycLoss
Definition: CBNTAA_TBInfo.h:51
CBNTAA_TBInfo::GetBdl3
float GetBdl3(float current)
Definition: CBNTAA_TBInfo.cxx:210
CBNTAA_TBInfo::CBNTAA_TBInfo
CBNTAA_TBInfo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: CBNTAA_TBInfo.cxx:19
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
CBNT_TBRecBase
Definition: CBNT_TBRecBase.h:21
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
lumiFormat.i
int i
Definition: lumiFormat.py:92
CBNTAA_TBInfo::m_beamener
int m_beamener
Definition: CBNTAA_TBInfo.h:35
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CBNTAA_TBInfo::SyncLoss
float SyncLoss(float energy, float currB3, float currB4)
Definition: CBNTAA_TBInfo.cxx:283
CBNTAA_TBInfo::m_prevsycLoss
float m_prevsycLoss
Definition: CBNTAA_TBInfo.h:50
CBNT_TBRecBase::addBranch
void addBranch(const std::string &branchname, T &obj, const std::string &leaflist)
Definition: CBNT_TBRecBase.h:44
CBNTAA_TBInfo::m_beamtype
int m_beamtype
Definition: CBNTAA_TBInfo.h:36
CaloPhiRange.h
CaloPhiRange class declaration.
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
run
Definition: run.py:1
xAOD::eventNumber
eventNumber
Definition: EventInfo_v1.cxx:124
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
CBNTAA_TBInfo::CBNT_execute
virtual StatusCode CBNT_execute() override
Definition: CBNTAA_TBInfo.cxx:126
GenericDbTable.h
CBNTAA_TBInfo::m_DBRead
bool m_DBRead
Definition: CBNTAA_TBInfo.h:34
CBNTAA_TBInfo::m_quad_equip
std::vector< float > * m_quad_equip
Definition: CBNTAA_TBInfo.h:65
CBNTAA_TBInfo::m_preverrCurrents
float m_preverrCurrents
Definition: CBNTAA_TBInfo.h:49
CBNTAA_TBInfo::GetBdl4
float GetBdl4(float current)
Definition: CBNTAA_TBInfo.cxx:226
TBCondRunParTool::getVal
StatusCode getVal(const std::string &folder, const unsigned int chnum, float &fval)
Definition: TBCondRunParTool.cxx:143
TBCondRunParTool::beam_type
int beam_type()
Definition: TBCondRunParTool.h:84
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
TBCaloCoordinate::beam_local_eta
double beam_local_eta()
the most common use-case : the H8 beam goes along the x axis -> that are the local calorimeters eta a...
Definition: TBCaloCoordinate.cxx:201
CBNTAA_TBInfo::~CBNTAA_TBInfo
virtual ~CBNTAA_TBInfo()
Definition: CBNTAA_TBInfo.cxx:60
CBNTAA_TBInfo::m_bend_file
std::vector< float > * m_bend_file
Definition: CBNTAA_TBInfo.h:67
CaloCondBlobAlgs_fillNoiseFromASCII.folder
folder
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:56
TBCondRunParTool.h
CBNTAA_TBInfo::CBNT_clear
virtual StatusCode CBNT_clear() override
Definition: CBNTAA_TBInfo.cxx:322
CBNTAA_TBInfo::CBNT_initialize
virtual StatusCode CBNT_initialize() override
Definition: CBNTAA_TBInfo.cxx:72
CBNTAA_TBInfo::m_preverrCollimators
float m_preverrCollimators
Definition: CBNTAA_TBInfo.h:48
StoreGateSvc.h
CBNTAA_TBInfo::m_runEta_nt
double m_runEta_nt
Definition: CBNTAA_TBInfo.h:60
CBNTAA_TBInfo::m_prevrunNum
int m_prevrunNum
Definition: CBNTAA_TBInfo.h:45
CBNTAA_TBInfo::m_errSycLoss
float m_errSycLoss
Definition: CBNTAA_TBInfo.h:81
CBNTAA_TBInfo::m_coll_equip
std::vector< float > * m_coll_equip
Definition: CBNTAA_TBInfo.h:74
CBNTAA_TBInfo::m_runEnergy_nt
long m_runEnergy_nt
Definition: CBNTAA_TBInfo.h:62
CBNTAA_TBInfo::m_errCurrents
float m_errCurrents
Definition: CBNTAA_TBInfo.h:79
CBNTAA_TBInfo::m_dumpBeamLine
bool m_dumpBeamLine
Definition: CBNTAA_TBInfo.h:38