15#include <fairlogger/Logger.h>
20#include <TStopwatch.h>
27 TStopwatch timerProcess;
34 LOG(
debug) <<
"TOFClusterer got Strip " << mStripData.
stripID <<
" with Ndigits "
35 << mStripData.
digits.size();
36 totNumDigits += mStripData.
digits.size();
39 processStrip(
clusters, digitMCTruth);
42 LOG(
debug) <<
"We had " << totNumDigits <<
" digits in this event";
47void Clusterer::calibrateStrip()
51 for (
int idig = 0; idig < mStripData.
digits.size(); idig++) {
71 Int_t chan, chan2, chan3;
73 Int_t iphi, iphi2, iphi3;
74 Int_t ieta, ieta2, ieta3;
76 for (
int idig = 0; idig < mStripData.
digits.size(); idig++) {
84 mNumberOfContributingDigits = 0;
86 if (mStripData.
digits.size() > 1) {
95 addContributingDigit(dig);
98 for (
int idigNext = idig + 1; idigNext < mStripData.
digits.size(); idigNext++) {
105 LOG(
debug) <<
"Time difference = " << timeDigNext - timeDig;
106 if (timeDigNext - timeDig > mDeltaTforClustering ) {
112 LOG(
debug) <<
"phi difference = " << iphi - iphi2;
113 LOG(
debug) <<
"eta difference = " << ieta - ieta2;
114 if ((std::abs(iphi - iphi2) > 1) || (std::abs(ieta - ieta2) > 1)) {
119 addContributingDigit(digNext);
124 buildCluster(
c, digitMCTruth);
129void Clusterer::addContributingDigit(
Digit* dig)
134 if (mNumberOfContributingDigits == 6) {
135 LOG(
debug) <<
"The cluster has already 6 digits associated to it, we cannot add more; returning without doing anything";
138 for (
int i = 0;
i < mNumberOfContributingDigits;
i++) {
140 LOG(
debug) <<
"digit already in " <<
i <<
", channel = " << mContributingDigit[
i]->
getChannel() <<
",phi,eta = (" <<
phi <<
"," << eta <<
"), TDC = " << mContributingDigit[
i]->
getTDC() <<
", calibrated time = " << mContributingDigit[
i]->
getCalibratedTime();
151 mContributingDigit[mNumberOfContributingDigits] = dig;
152 mNumberOfContributingDigits++;
161 static const float inv12 = 1. / 12.;
166 for (
int idig = 1; idig < mNumberOfContributingDigits; idig++) {
168 if (mContributingDigit[idig]->getTOT() > mContributingDigit[0]->getTOT()) {
169 temp = mContributingDigit[0];
170 mContributingDigit[0] = mContributingDigit[idig];
171 mContributingDigit[idig] = temp;
175 c.setMainContributingChannel(mContributingDigit[0]->getChannel());
176 c.
setTgeant(mContributingDigit[0]->getTgeant());
177 c.setT0true(mContributingDigit[0]->getT0true());
178 c.setTime(mContributingDigit[0]->getCalibratedTime());
187 c.setDigitInfo(0, mContributingDigit[0]->getChannel(), mContributingDigit[0]->getCalibratedTime(), mContributingDigit[0]->getTOT() *
Geo::TOTBIN_NS);
189 int ch1 = mContributingDigit[0]->
getChannel();
190 short tot1 = mContributingDigit[0]->
getTOT() < 20000 ? mContributingDigit[0]->
getTOT() : 20000;
191 double dtime =
c.getTimeRaw();
196 int deltaPhi, deltaEta;
201 for (
int idig = 1; idig < mNumberOfContributingDigits; idig++) {
203 deltaPhi =
phi1 - phi2;
204 deltaEta = eta1 - eta2;
211 }
else if (deltaEta == -1) {
216 }
else if (deltaPhi == -1) {
219 }
else if (deltaEta == -1) {
224 }
else if (deltaPhi == 0) {
227 }
else if (deltaEta == -1) {
230 LOG(
debug) <<
" Check what is going on, the digit you are trying to merge to the cluster must be in a different channels... ";
238 c.setDigitInfo(
c.getNumOfContributingChannels(), mContributingDigit[idig]->getChannel(), mContributingDigit[idig]->getCalibratedTime(), mContributingDigit[idig]->getTOT() *
Geo::TOTBIN_NS);
239 c.addBitInContributingChannels(
mask);
241 if (mCalibFromCluster &&
c.getNumOfContributingChannels() == 2 && !mIsNoisy[mContributingDigit[idig]->getChannel()] && !mIsNoisy[ch1]) {
242 int8_t dch = int8_t(mContributingDigit[idig]->getChannel() - ch1);
243 short tot2 = mContributingDigit[idig]->
getTOT() < 20000 ? mContributingDigit[idig]->
getTOT() : 20000;
251 if (digitMCTruth !=
nullptr) {
254 for (
int i = 0;
i < mNumberOfContributingDigits;
i++) {
255 if (!mContributingDigit[
i]->isUsedInCluster()) {
259 int digitLabel = mContributingDigit[
i]->
getLabel();
261 gsl::span<const o2::MCCompLabel> mcArray = digitMCTruth->
getLabels(digitLabel);
262 for (
int j = 0; j < static_cast<int>(mcArray.size());
j++) {
280 c.setPhi(std::atan2(
pos[1],
pos[0]));
290 c.setErrors(errY2, errZ2, errYZ);
304 mCalibInfosFromCluster.emplace_back(ch1, dch, dtime, tot1, tot2);
Definition of a container to keep Monte Carlo truth external to simulation objects.
Definition of the TOF cluster finder.
bool isChannelError(int channel) const
bool isProblematic(int ich)
float getTimeCalibration(int ich, float tot) const
void addCalibFromCluster(int ch1, int8_t dch, float dtime, short tot1, short tot2)
void setFirstOrbit(uint64_t orb)
void process(DataReader &r, std::vector< Cluster > &clusters, MCLabelContainer const *digitMCTruth)
DataReader class for TOF.
virtual Bool_t getNextStripData(StripData &stripData)=0
TOF digit implementation.
void setTgeant(float val)
bool isProblematic() const
double getCalibratedTime() const
void setIsUsedInCluster(bool val=true)
void getPhiAndEtaIndex(int &phi, int &eta) const
void setCalibratedTime(Double_t time)
void setIsProblematic(bool flag)
Bool_t isUsedInCluster() const
static constexpr Float_t ZPAD
static constexpr Float_t XPAD
static void rotateToSector(Float_t *xyz, Int_t isector)
static void getPos(Int_t *det, Float_t *pos)
static void getVolumeIndices(Int_t index, Int_t *detId)
static constexpr Float_t TOTBIN_NS
static constexpr Float_t TDCBIN
TDC bin width [ps].
static constexpr Double_t LATENCYWINDOW
GLuint GLsizei const GLchar * label
bool isOk(ResultWas::OfType resultType)
constexpr int LHCMaxBunches
constexpr double LHCBunchSpacingNS
return((dphi< 0 &&dphi > -constants::math::PI)||dphi > constants::math::PI) ? true T phi1
std::vector< Digit > digits
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::vector< Cluster > clusters