77 LOGP(
debug,
"Processing {} tracklets and {} digits from {} triggers and {} ITS-TPC-TRD tracks and {} TPC-TRD tracks",
78 mTrackletsRaw.size(), mDigits->size(), mTriggerRecords.size(), mTracksInITSTPCTRD.size(), mTracksInTPCTRD.size());
79 if (mDigits->size() == 0) {
82 size_t nTrkTrig[2] = {mTrackTriggerRecordsITSTPCTRD.size(), mTrackTriggerRecordsTPCTRD.size()};
83 int lastTrkTrig[2] = {0};
84 for (
const auto& trig : mTriggerRecords) {
85 if (trig.getNumberOfDigits() == 0) {
88 for (
int iTrackType = 0; iTrackType <= 1; ++iTrackType) {
89 const gsl::span<const TrackTRD>* tracks = (iTrackType == 0) ? &mTracksInITSTPCTRD : &mTracksInTPCTRD;
90 const gsl::span<const TrackTriggerRecord>* trackTriggers = (iTrackType == 0) ? &mTrackTriggerRecordsITSTPCTRD : &mTrackTriggerRecordsTPCTRD;
91 for (
int iTrigTrack = lastTrkTrig[iTrackType]; iTrigTrack < nTrkTrig[iTrackType]; ++iTrigTrack) {
92 const auto& trigTrack = (*trackTriggers)[iTrigTrack];
93 if (trigTrack.getBCData().differenceInBC(trig.getBCData()) > 0) {
95 LOGP(
debug,
"Aborting, track trigger is too late");
98 if (trigTrack.getBCData() != trig.getBCData()) {
100 LOGP(
debug,
"Skipping, track trigger is too late");
101 ++lastTrkTrig[iTrackType];
104 if ((*tracks)[trigTrack.getFirstTrack()].hasPileUpInfo() && (*tracks)[trigTrack.getFirstTrack()].getPileUpTimeShiftMUS() < mParams.
pileupCut) {
106 ++lastTrkTrig[iTrackType];
107 LOGP(
debug,
"Rececting trigger due to pileup of {}", (*tracks)[trigTrack.getFirstTrack()].getPileUpTimeShiftMUS());
110 for (
int iTrk = trigTrack.getFirstTrack(); iTrk < trigTrack.getFirstTrack() + trigTrack.getNumberOfTracks(); iTrk++) {
111 const auto& trk = (*tracks)[iTrk];
112 for (
int iLayer = 0; iLayer < 6; iLayer++) {
113 int trkltIdx = trk.getTrackletIndex(iLayer);
130 auto trkltDet = trklt.getDetector();
133 for (
int iDigit = iDigitFirst + 1; iDigit < iDigitLast - 1; ++iDigit) {
134 const auto& digit = (*mDigits)[iDigit];
135 if (digit.isSharedDigit()) {
138 if (digit.getDetector() != trkltDet || digit.getPadRow() != trklt.getPadRow() || digit.getPadCol() != trklt.getPadCol(mApplyShift)) {
145 const auto* digitLeft = &(*mDigits)[iDigit + 1];
146 const auto* digitRight = &(*mDigits)[iDigit - 1];
148 if (digitLeft->getPadCol() == digit.getPadCol() && iDigit < iDigitLast - 2) {
149 digitLeft = &(*mDigits)[iDigit + 2];
151 if (digitRight->getPadCol() == digit.getPadCol() && iDigit > iDigitFirst + 2) {
152 digitRight = &(*mDigits)[iDigit - 2];
154 LOG(
debug) <<
"Central digit: " << digit;
155 LOG(
debug) <<
"Left digit: " << *digitLeft;
156 LOG(
debug) <<
"Right digit: " << *digitRight;
158 if (digitLeft->isNeighbour(digit)) {
161 direction = digit.getPadCol() - digitLeft->getPadCol();
163 if (digitRight->isNeighbour(digit) && digit.getPadCol() - digitRight->getPadCol() != direction) {
167 if (nNeighbours > 0) {
168 int digitTrackletDistance = 0;
169 auto adcSumMax = digit.getADCsum();
170 if (
left && digitLeft->getADCsum() > adcSumMax) {
171 adcSumMax = digitLeft->getADCsum();
172 digitTrackletDistance = 1;
174 if (
right && digitRight->getADCsum() > adcSumMax) {
175 adcSumMax = digitRight->getADCsum();
176 digitTrackletDistance = -1;
178 mDistances.push_back(digitTrackletDistance);
179 for (
int iTb = 0; iTb <
TIMEBINS; ++iTb) {
180 uint16_t phVal = digit.getADC()[iTb];
182 phVal += digitLeft->getADC()[iTb];
185 phVal += digitRight->getADC()[iTb];
187 mPHValues.emplace_back(phVal, trkltDet, iTb, nNeighbours,
type);