R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BDigitizingPaddleMock.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
3 * Copyright (C) 2019-2025 Members of R3B Collaboration *
4 * *
5 * This software is distributed under the terms of the *
6 * GNU General Public Licence (GPL) version 3, *
7 * copied verbatim in the file "LICENSE". *
8 * *
9 * In applying this license GSI does not waive the privileges and immunities *
10 * granted to it by virtue of its status as an Intergovernmental Organization *
11 * or submit itself to any jurisdiction. *
12 ******************************************************************************/
13#pragma once
21
22#include "R3BDigitizingPaddle.h"
23
25{
27 {
28 public:
29 explicit MockPaddle(uint16_t paddleID)
30 : Digitizing::Paddle{ paddleID }
31 {
32 }
33
34 private:
35 [[nodiscard]] auto ComputeTime(const Channel::Signal& firstSignal,
36 const Channel::Signal& secondSignal) const -> double override
37 {
38 return (firstSignal.tdc + secondSignal.tdc) / 2;
39 }
40 [[nodiscard]] auto ComputeEnergy(const Channel::Signal& firstSignal,
41 const Channel::Signal& secondSignal) const -> double override
42 {
43 return (firstSignal.qdcUnSat + secondSignal.qdcUnSat) / 2;
44 }
45 [[nodiscard]] auto ComputePosition(const Channel::Signal& leftSignal,
46 const Channel::Signal& rightSignal) const -> double override
47 {
48 if (leftSignal.side == rightSignal.side)
49 {
50 R3BLOG(fatal, "cannot compute position with signals from same side!");
51 return 0.F;
52 }
53 return (leftSignal.side == ChannelSide::left) ? (leftSignal.tdc - rightSignal.tdc) / 2 * gCMedium
54 : (rightSignal.tdc - leftSignal.tdc) / 2 * gCMedium;
55 }
56 auto ComputeChannelHits(const Hit& hit) const -> Pair<Channel::Hit> override
57 {
58 auto rightChannelHit = GenerateMockChannelHit(hit.time, hit.LightDep, hit.DistToPaddleCenter);
59 auto leftChannelHit = GenerateMockChannelHit(hit.time, hit.LightDep, -1 * hit.DistToPaddleCenter);
60 return { leftChannelHit, rightChannelHit };
61 }
62
63 public:
64 static constexpr double gHalfLength = 135.; // [cm]
65 static constexpr double gCMedium = 30.; // speed of light in material in [cm/ns]
66 static auto GenerateMockChannelHit(Double_t mcTime, Double_t mcLight, Double_t dist) -> Channel::Hit
67 {
68 auto time = mcTime - (MockPaddle::gHalfLength + dist) / MockPaddle::gCMedium;
69 auto light = mcLight;
70 return { time, light };
71 }
72 };
73} // namespace R3B::Digitizing::Neuland
#define R3BLOG(severity, x)
Definition R3BLogger.h:35
auto ComputeEnergy(const Channel::Signal &firstSignal, const Channel::Signal &secondSignal) const -> double override
auto ComputePosition(const Channel::Signal &leftSignal, const Channel::Signal &rightSignal) const -> double override
static auto GenerateMockChannelHit(Double_t mcTime, Double_t mcLight, Double_t dist) -> Channel::Hit
auto ComputeTime(const Channel::Signal &firstSignal, const Channel::Signal &secondSignal) const -> double override
auto ComputeChannelHits(const Hit &hit) const -> Pair< Channel::Hit > override
Paddle(int paddleID, SignalCouplingStrategy strategy=SignalCouplingByTime)
Simulation of Mock Bar/Paddle.