-
Notifications
You must be signed in to change notification settings - Fork 494
Expand file tree
/
Copy pathDigit.cxx
More file actions
86 lines (74 loc) · 2.6 KB
/
Digit.cxx
File metadata and controls
86 lines (74 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
#include "FairLogger.h"
#include "DataFormatsPHOS/Digit.h"
#include "PHOSBase/Hit.h"
#include <iostream>
using namespace o2::phos;
ClassImp(Digit);
Digit::Digit(short absId, float amplitude, float time, int label)
: DigitBase(time), mAmplitude(amplitude), mTime(time), mAbsId(absId), mLabel(label)
{
}
Digit::Digit(short truId, float amplitude, float time, bool isTrigger2x2, int /*dummy*/)
: DigitBase(time), mAmplitude(amplitude), mTime(time), mAbsId(truId + NREADOUTCHANNELS), mLabel(-1)
{
setHighGain(isTrigger2x2);
}
Digit::Digit(const Hit& hit, int label) : mAbsId(hit.GetDetectorID()), mAmplitude(hit.GetEnergyLoss()), mTime(hit.GetTime()), mLabel(label)
{
}
void Digit::fillFromHit(const Hit& hit)
{
mAbsId = hit.GetDetectorID();
mAmplitude = hit.GetEnergyLoss();
mTime = hit.GetTime();
}
bool Digit::canAdd(const Digit other) const
{
return (mAbsId == other.getAbsId() && fabs(getTimeStamp() - other.getTimeStamp()) <= kTimeGate);
}
Digit& Digit::operator+=(const Digit& other)
{
// Adds the amplitude of digits
// TODO: What about time? Should we assign time of more energetic digit? More complicated treatment?
if (mAmplitude < other.mAmplitude) {
mTime = other.mTime;
}
if (mLabel == -1) {
mLabel = other.mLabel;
} else {
if (mLabel != other.mLabel && other.mLabel != -1) {
//if Label indexes are different, something wrong
LOG(error) << "Adding digits with different references to Labels:" << mLabel << " and " << other.mLabel;
}
}
mAmplitude += other.mAmplitude;
return *this;
}
void Digit::addEnergyTime(float energy, float time)
{
// Adds the amplitude of digits
// TODO: What about time? Should we assign time of more energetic digit? More complicated treatment?
if (mAmplitude < energy) {
mTime = time;
}
mAmplitude += energy;
}
void Digit::PrintStream(std::ostream& stream) const
{
stream << "PHOS Digit: cell absId " << mAbsId << ", Time " << getTimeStamp() << " with amplitude " << mAmplitude;
}
std::ostream& operator<<(std::ostream& stream, const Digit& digi)
{
digi.PrintStream(stream);
return stream;
}