79 LOGP(
debug,
"Processing {} tracklets and {} digits from {} triggers and {} ITS-TPC-TRD tracks and {} TPC-TRD tracks",
80 mTrackletsRaw.size(), mDigits->size(), mTriggerRecords.size(), mTracksInITSTPCTRD.size(), mTracksInTPCTRD.size());
81 if (mDigits->size() == 0) {
84 size_t nTrkTrig[2] = {mTrackTriggerRecordsITSTPCTRD.size(), mTrackTriggerRecordsTPCTRD.size()};
85 int lastTrkTrig[2] = {0};
86 for (
const auto& trig : mTriggerRecords) {
87 if (trig.getNumberOfDigits() == 0) {
90 for (
int iTrackType = 0; iTrackType <= 1; ++iTrackType) {
91 const gsl::span<const TrackTRD>* tracks = (iTrackType == 0) ? &mTracksInITSTPCTRD : &mTracksInTPCTRD;
92 const gsl::span<const TrackTriggerRecord>* trackTriggers = (iTrackType == 0) ? &mTrackTriggerRecordsITSTPCTRD : &mTrackTriggerRecordsTPCTRD;
93 for (
int iTrigTrack = lastTrkTrig[iTrackType]; iTrigTrack < nTrkTrig[iTrackType]; ++iTrigTrack) {
94 const auto& trigTrack = (*trackTriggers)[iTrigTrack];
95 if (trigTrack.getBCData().differenceInBC(trig.getBCData()) > 0) {
97 LOGP(
debug,
"Aborting, track trigger is too late");
100 if (trigTrack.getBCData() != trig.getBCData()) {
102 LOGP(
debug,
"Skipping, track trigger is too late");
103 ++lastTrkTrig[iTrackType];
106 if ((*tracks)[trigTrack.getFirstTrack()].hasPileUpInfo() && (*tracks)[trigTrack.getFirstTrack()].getPileUpTimeShiftMUS() < mParams.
pileupCut) {
108 ++lastTrkTrig[iTrackType];
109 LOGP(
debug,
"Rececting trigger due to pileup of {}", (*tracks)[trigTrack.getFirstTrack()].getPileUpTimeShiftMUS());
112 for (
int iTrk = trigTrack.getFirstTrack(); iTrk < trigTrack.getFirstTrack() + trigTrack.getNumberOfTracks(); iTrk++) {
113 const auto& trk = (*tracks)[iTrk];
114 for (
int iLayer = 0; iLayer < 6; iLayer++) {
115 int trkltIdx = trk.getTrackletIndex(iLayer);
132 auto trkltDet = trklt.getDetector();
135 for (
int iDigit = iDigitFirst + 1; iDigit < iDigitLast - 1; ++iDigit) {
136 const auto& digit = (*mDigits)[iDigit];
137 if (digit.isSharedDigit()) {
140 if (digit.getDetector() != trkltDet || digit.getPadRow() != trklt.getPadRow() || digit.getPadCol() != trklt.getPadCol(mApplyShift)) {
147 const auto* digitLeft = &(*mDigits)[iDigit + 1];
148 const auto* digitRight = &(*mDigits)[iDigit - 1];
150 if (digitLeft->getPadCol() == digit.getPadCol() && iDigit < iDigitLast - 2) {
151 digitLeft = &(*mDigits)[iDigit + 2];
153 if (digitRight->getPadCol() == digit.getPadCol() && iDigit > iDigitFirst + 2) {
154 digitRight = &(*mDigits)[iDigit - 2];
156 LOG(
debug) <<
"Central digit: " << digit;
157 LOG(
debug) <<
"Left digit: " << *digitLeft;
158 LOG(
debug) <<
"Right digit: " << *digitRight;
160 if (digitLeft->isNeighbour(digit)) {
163 direction = digit.getPadCol() - digitLeft->getPadCol();
165 if (digitRight->isNeighbour(digit) && digit.getPadCol() - digitRight->getPadCol() != direction) {
169 if (nNeighbours > 0) {
170 int digitTrackletDistance = 0;
171 auto adcSumMax = digit.getADCsum();
172 if (
left && digitLeft->getADCsum() > adcSumMax) {
173 adcSumMax = digitLeft->getADCsum();
174 digitTrackletDistance = 1;
176 if (
right && digitRight->getADCsum() > adcSumMax) {
177 adcSumMax = digitRight->getADCsum();
178 digitTrackletDistance = -1;
180 mDistances.push_back(digitTrackletDistance);
181 for (
int iTb = 0; iTb <
TIMEBINS; ++iTb) {
182 uint16_t phVal = digit.getADC()[iTb];
183 uint16_t phValHD = (digit.getADC()[iTb] << 2) + digit.getPreTrigPhase();
185 phVal += digitLeft->getADC()[iTb];
186 phValHD += (digitLeft->getADC()[iTb] << 2) + digit.getPreTrigPhase();
189 phVal += digitRight->getADC()[iTb];
190 phValHD += (digitRight->getADC()[iTb] << 2) + digit.getPreTrigPhase();
192 mPHValues.emplace_back(phVal, trkltDet, iTb, nNeighbours,
type);
193 mPHValuesHD.emplace_back(phValHD, trkltDet, iTb, nNeighbours,
type);