Belle II Software  release-06-00-14
KLMTime.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 /* Own header. */
10 #include <klm/time/KLMTime.h>
11 
12 using namespace Belle2;
13 
15 {
16  static KLMTime klmElementNumbers;
17  return klmElementNumbers;
18 }
19 
21 {
22  m_TDCPeriod =
23  1.0 / m_HardwareClockSettings->getClockFrequency(Const::KLM, "TDC");
24  m_CTimePeriod = 1.0 / m_HardwareClockSettings->getGlobalClockFrequency();
25 }
26 
27 double KLMTime::getScintillatorTime(int ctime, int triggerCTime) const
28 {
29  int cTimeShift = m_KLMTimeConversion->getCTimeShift();
30  /* Relative time in TDC periods for scintillators. */
31  int relativeTime;
32  /*
33  * All time values were shifted by 2 bits for the phase2 data.
34  */
35  int correctedCTime = (ctime << cTimeShift) & 0xFFFF;
36  int correctedTriggerCTime = (triggerCTime << cTimeShift) & 0xFFFF;
37  /* Scintillator: 16-bit CTIME. */
38  if (correctedCTime <= correctedTriggerCTime)
39  relativeTime = correctedCTime - correctedTriggerCTime;
40  else
41  relativeTime = correctedCTime - correctedTriggerCTime - 0x10000;
42  /* Get time in TDC periods. */
43  relativeTime = (relativeTime << 3);
44  return relativeTime * m_TDCPeriod;
45 }
46 
47 std::pair<int, double> KLMTime::getRPCTimes(int ctime, int tdc, int triggerTime) const
48 {
49  /* Relative time in TDC periods for RPC hits. */
50  int relativeTime = tdc & 0x7FF;
51  /*
52  * TDC frequency is 8 times greater than revo9 frequency.
53  * The 2 last bits are zero, thus, the precision is 4 * (TDC period).
54  * The TDC has 11 bits of dynamic range. Shift the triggerTime by
55  * 10 ticks to align the new prompt-time peak with the old
56  * TriggerCTime-relative peak (for backward compatibility of calibration).
57  */
58  int trigger = ((triggerTime - 10) & 0x0FF) << 3;
59  if (relativeTime <= trigger)
60  relativeTime -= trigger;
61  else
62  relativeTime -= trigger + 0x800;
63  return std::pair<int, double>(ctime - triggerTime,
64  relativeTime * m_TDCPeriod);
65 }
66 
67 double KLMTime::getTimeSimulation(int tdc, bool scintillator) const
68 {
69  double timeOffset = m_KLMTimeConversion->getTimeOffset();
70  (void)scintillator;
71  return tdc * m_TDCPeriod + timeOffset;
72 }
73 
74 uint16_t KLMTime::getTDCByTime(double time) const
75 {
76  double timeOffset = m_KLMTimeConversion->getTimeOffset();
77  return (time - timeOffset) / m_TDCPeriod;
78 }
KLM time conversion.
Definition: KLMTime.h:27
double m_TDCPeriod
TDC period (stored here because getting it from m_HardwareClockSettings requires to search in a map).
Definition: KLMTime.h:111
std::pair< int, double > getRPCTimes(int ctime, int tdc, int triggerTime) const
Get coarse and fine times for RPC.
Definition: KLMTime.cc:47
double getTimeSimulation(int tdc, bool scintillator) const
Get time for simulation.
Definition: KLMTime.cc:67
uint16_t getTDCByTime(double time) const
Get TDC by time.
Definition: KLMTime.cc:74
double m_CTimePeriod
CTIME period.
Definition: KLMTime.h:114
double getScintillatorTime(int ctime, int triggerCTime) const
Get time for scintillator.
Definition: KLMTime.cc:27
void updateConstants()
Update constants from database objects.
Definition: KLMTime.cc:20
static KLMTime & Instance()
Instantiation.
Definition: KLMTime.cc:14
DBObjPtr< HardwareClockSettings > m_HardwareClockSettings
Hardware clock settings.
Definition: KLMTime.h:105
DBObjPtr< KLMTimeConversion > m_KLMTimeConversion
KLM time conversion.
Definition: KLMTime.h:102
Abstract base class for different kinds of events.