Project
Loading...
Searching...
No Matches
TimeEstBC.h
Go to the documentation of this file.
1// Copyright 2019-2026 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef O2_TRACKINGITS_TIMEESTBC_H_
13#define O2_TRACKINGITS_TIMEESTBC_H_
14
15#include <limits>
16#include <cstdint>
18#include "GPUCommonRtypes.h"
19#include "GPUCommonDef.h"
20#include "GPUCommonMath.h"
21
22namespace o2::its
23{
24// Time estimates are given in BC
25// error needs to cover maximum 1 orbit
26using TimeStampType = uint32_t;
27using TimeStampErrorType = uint16_t;
28// this is an symmetric time error [t0-tE, t0+tE]
30// this is an asymmetric time interval [t0, t0+tE] used for internal calculations
31class TimeEstBC : public o2::dataformats::TimeStampWithError<TimeStampType, TimeStampErrorType>
32{
34
35 public:
36 GPUhdDefault() TimeEstBC() = default;
38
39 // convert to symmetric center+-half representation
40 GPUhdi() its::TimeStamp makeSymmetrical() const noexcept
41 {
42 const auto start = static_cast<float>(this->getTimeStamp());
43 const float half = (float)this->getTimeStampError() / 2.f;
44 return {start + half, half};
45 }
46
47 // check if timestamps overlap within their interval
48 GPUhdi() bool isCompatible(const TimeEstBC& o) const noexcept
49 {
50 return this->upper() > o.lower() && o.upper() > this->lower();
51 }
52
53 // check if this time interval is fully contained within o
54 GPUhdi() bool isContainedIn(const TimeEstBC& o) const noexcept
55 {
56 return this->lower() >= o.lower() && this->upper() <= o.upper();
57 }
58
59 GPUhdi() TimeEstBC& operator+=(const TimeEstBC& o) noexcept
60 {
61 add(o);
62 return *this;
63 }
64
65 GPUhdi() TimeEstBC operator+(const TimeEstBC& o) const noexcept
66 {
67 TimeEstBC res = *this;
68 res += o;
69 return res;
70 }
71
72 // upper bound of interval t0+tE
73 GPUhdi() TimeStampType upper() const noexcept
74 {
75 TimeStampType t = this->getTimeStamp();
76 TimeStampType e = this->getTimeStampError();
77 constexpr TimeStampType max = std::numeric_limits<TimeStampType>::max();
78 return (t > (max - e)) ? max : t + e;
79 }
80
81 // lower bound of interval t0
82 GPUhdi() TimeStampType lower() const noexcept
83 {
84 return this->getTimeStamp();
85 }
86
87 private:
88 // intersect with the other timestamp
89 // this assumes already that both overlap
90 GPUhdi() void add(const TimeEstBC& o) noexcept
91 {
92 const TimeStampType lo = o2::gpu::CAMath::Max(this->lower(), o.lower());
93 const TimeStampType hi = o2::gpu::CAMath::Min(this->upper(), o.upper());
94 this->setTimeStamp(lo);
95 this->setTimeStampError(static_cast<TimeStampErrorType>(hi - lo));
96 }
97
98 ClassDefNV(TimeEstBC, 1);
99};
100
101} // namespace o2::its
102
103#endif
uint32_t res
Definition RawData.h:0
TimeStampErrorType e
Definition TimeEstBC.h:37
GPUhdDefault() TimeEstBC()=default
GPUhdi() TimeEstBC(TimeStampType t
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint start
Definition glcorearb.h:469
uint32_t TimeStampType
Definition TimeEstBC.h:26
uint16_t TimeStampErrorType
Definition TimeEstBC.h:27
uint64_t getTimeStamp(o2::framework::ProcessingContext &pc)
constexpr size_t max