Belle II Software  release-05-01-25
KLMTimeConversion.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Kirill Chilikin *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 /* Own header. */
12 #include <klm/dbobjects/KLMTimeConversion.h>
13 
14 using namespace Belle2;
15 
17  m_TDCPeriod(0),
18  m_TimeOffset(0),
19  m_CTimeShift(0)
20 {
21 }
22 
24 {
25 }
26 
27 double KLMTimeConversion::getScintillatorTime(int ctime, int triggerCTime) const
28 {
29  /* Relative time in TDC periods for scintillators. */
30  int relativeTime;
31  /*
32  * All time values were shifted by 2 bits for the phase2 data.
33  */
34  int correctedCTime = (ctime << m_CTimeShift) & 0xFFFF;
35  int correctedTriggerCTime = (triggerCTime << m_CTimeShift) & 0xFFFF;
36  /* Scintillator: 16-bit CTIME. */
37  if (correctedCTime <= correctedTriggerCTime)
38  relativeTime = correctedCTime - correctedTriggerCTime;
39  else
40  relativeTime = correctedCTime - correctedTriggerCTime - 0x10000;
41  /* Get time in TDC periods. */
42  relativeTime = (relativeTime << 3);
43  return relativeTime * m_TDCPeriod;
44 }
45 
46 std::pair<int, double> KLMTimeConversion::getRPCTimes(int ctime, int tdc, int triggerTime) const
47 {
48  /* Relative time in TDC periods for RPC hits. */
49  int relativeTime = tdc & 0x7FF;
50  /*
51  * TDC frequency is 8 times greater than revo9 frequency.
52  * The 2 last bits are zero, thus, the precision is 4 * (TDC period).
53  * The TDC has 11 bits of dynamic range. Shift the triggerTime by
54  * 10 ticks to align the new prompt-time peak with the old
55  * TriggerCTime-relative peak (for backward compatibility of calibration).
56  */
57  int trigger = ((triggerTime - 10) & 0x0FF) << 3;
58  if (relativeTime <= trigger)
59  relativeTime -= trigger;
60  else
61  relativeTime -= trigger + 0x800;
62  return std::pair<int, double>(ctime - triggerTime, relativeTime * m_TDCPeriod);
63 }
64 
65 double KLMTimeConversion::getTimeSimulation(int tdc, bool scintillator) const
66 {
67  (void)scintillator;
68  return tdc * m_TDCPeriod + m_TimeOffset;
69 }
Belle2::KLMTimeConversion::m_CTimeShift
int m_CTimeShift
CTIME shift in bits.
Definition: KLMTimeConversion.h:120
Belle2::KLMTimeConversion::m_TDCPeriod
double m_TDCPeriod
TDC period in ns.
Definition: KLMTimeConversion.h:114
Belle2::KLMTimeConversion::getScintillatorTime
double getScintillatorTime(int ctime, int triggerCTime) const
Get time for scintillator.
Definition: KLMTimeConversion.cc:27
Belle2::KLMTimeConversion::~KLMTimeConversion
~KLMTimeConversion()
Destructor.
Definition: KLMTimeConversion.cc:23
Belle2::KLMTimeConversion::KLMTimeConversion
KLMTimeConversion()
Constructor.
Definition: KLMTimeConversion.cc:16
Belle2::KLMTimeConversion::getTimeSimulation
double getTimeSimulation(int tdc, bool scintillator) const
Get time for simulation.
Definition: KLMTimeConversion.cc:65
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::KLMTimeConversion::m_TimeOffset
double m_TimeOffset
Time offset.
Definition: KLMTimeConversion.h:117
Belle2::KLMTimeConversion::getRPCTimes
std::pair< int, double > getRPCTimes(int ctime, int tdc, int triggerTime) const
Get coarse and fine times for RPC.
Definition: KLMTimeConversion.cc:46