File indexing completed on 2025-05-09 22:40:19
0001 #include "RecoTracker/LSTCore/interface/alpaka/LST.h"
0002
0003 #include "LSTEvent.h"
0004
0005 using namespace ALPAKA_ACCELERATOR_NAMESPACE::lst;
0006
0007 #include "Math/Vector3D.h"
0008 #include "Math/VectorUtil.h"
0009 using XYZVector = ROOT::Math::XYZVector;
0010
0011 namespace {
0012 using namespace ALPAKA_ACCELERATOR_NAMESPACE::lst;
0013 std::vector<unsigned int> getHitIdxs(short trackCandidateType,
0014 Params_pT5::ArrayUxHits const& tcHitIndices,
0015 unsigned int const* hitIndices) {
0016 std::vector<unsigned int> hits;
0017
0018 unsigned int maxNHits = 0;
0019 if (trackCandidateType == LSTObjType::pT5)
0020 maxNHits = Params_pT5::kHits;
0021 else if (trackCandidateType == LSTObjType::pT3)
0022 maxNHits = Params_pT3::kHits;
0023 else if (trackCandidateType == LSTObjType::T5)
0024 maxNHits = Params_T5::kHits;
0025 else if (trackCandidateType == LSTObjType::pLS)
0026 maxNHits = Params_pLS::kHits;
0027
0028 for (unsigned int i = 0; i < maxNHits; i++) {
0029 unsigned int hitIdxDev = tcHitIndices[i];
0030 unsigned int hitIdx =
0031 (trackCandidateType == LSTObjType::pLS)
0032 ? hitIdxDev
0033 : hitIndices[hitIdxDev];
0034
0035
0036
0037
0038 if (trackCandidateType != LSTObjType::T5 && hits.size() == 3 &&
0039 hits.back() == hitIdx)
0040 continue;
0041
0042 hits.push_back(hitIdx);
0043 }
0044
0045 return hits;
0046 }
0047
0048 }
0049
0050 void LST::getOutput(LSTEvent& event) {
0051 out_tc_hitIdxs_.clear();
0052 out_tc_len_.clear();
0053 out_tc_seedIdx_.clear();
0054 out_tc_trackCandidateType_.clear();
0055
0056 auto const hitsBase = event.getTrimmedHitsBase(false);
0057 auto const& trackCandidates = event.getTrackCandidates( true, true);
0058
0059 unsigned int nTrackCandidates = trackCandidates.nTrackCandidates();
0060
0061 for (unsigned int idx = 0; idx < nTrackCandidates; idx++) {
0062 short trackCandidateType = trackCandidates.trackCandidateType()[idx];
0063 std::vector<unsigned int> hit_idx =
0064 getHitIdxs(trackCandidateType, trackCandidates.hitIndices()[idx], hitsBase.idxs());
0065
0066 out_tc_hitIdxs_.push_back(hit_idx);
0067 out_tc_len_.push_back(hit_idx.size());
0068 out_tc_seedIdx_.push_back(trackCandidates.pixelSeedIndex()[idx]);
0069 out_tc_trackCandidateType_.push_back(trackCandidateType);
0070 }
0071 }
0072
0073 void LST::run(Queue& queue,
0074 bool verbose,
0075 float const ptCut,
0076 LSTESData<Device> const* deviceESData,
0077 LSTInputDeviceCollection const* lstInputDC,
0078 bool no_pls_dupclean,
0079 bool tc_pls_triplets) {
0080 auto event = LSTEvent(verbose, ptCut, queue, deviceESData);
0081
0082 event.addInputToEvent(lstInputDC);
0083 event.addHitToEvent();
0084 event.addPixelSegmentToEventStart();
0085 event.createMiniDoublets();
0086 if (verbose) {
0087 alpaka::wait(queue);
0088 printf("# of Mini-doublets produced: %d\n", event.getNumberOfMiniDoublets());
0089 printf("# of Mini-doublets produced barrel layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(0));
0090 printf("# of Mini-doublets produced barrel layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(1));
0091 printf("# of Mini-doublets produced barrel layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(2));
0092 printf("# of Mini-doublets produced barrel layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(3));
0093 printf("# of Mini-doublets produced barrel layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(4));
0094 printf("# of Mini-doublets produced barrel layer 6: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(5));
0095 printf("# of Mini-doublets produced endcap layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(0));
0096 printf("# of Mini-doublets produced endcap layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(1));
0097 printf("# of Mini-doublets produced endcap layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(2));
0098 printf("# of Mini-doublets produced endcap layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(3));
0099 printf("# of Mini-doublets produced endcap layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(4));
0100 }
0101
0102 event.createSegmentsWithModuleMap();
0103 if (verbose) {
0104 alpaka::wait(queue);
0105 printf("# of Segments produced: %d\n", event.getNumberOfSegments());
0106 printf("# of Segments produced layer 1-2: %d\n", event.getNumberOfSegmentsByLayerBarrel(0));
0107 printf("# of Segments produced layer 2-3: %d\n", event.getNumberOfSegmentsByLayerBarrel(1));
0108 printf("# of Segments produced layer 3-4: %d\n", event.getNumberOfSegmentsByLayerBarrel(2));
0109 printf("# of Segments produced layer 4-5: %d\n", event.getNumberOfSegmentsByLayerBarrel(3));
0110 printf("# of Segments produced layer 5-6: %d\n", event.getNumberOfSegmentsByLayerBarrel(4));
0111 printf("# of Segments produced endcap layer 1: %d\n", event.getNumberOfSegmentsByLayerEndcap(0));
0112 printf("# of Segments produced endcap layer 2: %d\n", event.getNumberOfSegmentsByLayerEndcap(1));
0113 printf("# of Segments produced endcap layer 3: %d\n", event.getNumberOfSegmentsByLayerEndcap(2));
0114 printf("# of Segments produced endcap layer 4: %d\n", event.getNumberOfSegmentsByLayerEndcap(3));
0115 printf("# of Segments produced endcap layer 5: %d\n", event.getNumberOfSegmentsByLayerEndcap(4));
0116 }
0117
0118 event.createTriplets();
0119 if (verbose) {
0120 alpaka::wait(queue);
0121 printf("# of T3s produced: %d\n", event.getNumberOfTriplets());
0122 printf("# of T3s produced layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerBarrel(0));
0123 printf("# of T3s produced layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerBarrel(1));
0124 printf("# of T3s produced layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerBarrel(2));
0125 printf("# of T3s produced layer 4-5-6: %d\n", event.getNumberOfTripletsByLayerBarrel(3));
0126 printf("# of T3s produced endcap layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerEndcap(0));
0127 printf("# of T3s produced endcap layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerEndcap(1));
0128 printf("# of T3s produced endcap layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerEndcap(2));
0129 printf("# of T3s produced endcap layer 1: %d\n", event.getNumberOfTripletsByLayerEndcap(0));
0130 printf("# of T3s produced endcap layer 2: %d\n", event.getNumberOfTripletsByLayerEndcap(1));
0131 printf("# of T3s produced endcap layer 3: %d\n", event.getNumberOfTripletsByLayerEndcap(2));
0132 printf("# of T3s produced endcap layer 4: %d\n", event.getNumberOfTripletsByLayerEndcap(3));
0133 printf("# of T3s produced endcap layer 5: %d\n", event.getNumberOfTripletsByLayerEndcap(4));
0134 }
0135
0136 event.createQuintuplets();
0137 if (verbose) {
0138 alpaka::wait(queue);
0139 printf("# of Quintuplets produced: %d\n", event.getNumberOfQuintuplets());
0140 printf("# of Quintuplets produced layer 1-2-3-4-5-6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(0));
0141 printf("# of Quintuplets produced layer 2: %d\n", event.getNumberOfQuintupletsByLayerBarrel(1));
0142 printf("# of Quintuplets produced layer 3: %d\n", event.getNumberOfQuintupletsByLayerBarrel(2));
0143 printf("# of Quintuplets produced layer 4: %d\n", event.getNumberOfQuintupletsByLayerBarrel(3));
0144 printf("# of Quintuplets produced layer 5: %d\n", event.getNumberOfQuintupletsByLayerBarrel(4));
0145 printf("# of Quintuplets produced layer 6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(5));
0146 printf("# of Quintuplets produced endcap layer 1: %d\n", event.getNumberOfQuintupletsByLayerEndcap(0));
0147 printf("# of Quintuplets produced endcap layer 2: %d\n", event.getNumberOfQuintupletsByLayerEndcap(1));
0148 printf("# of Quintuplets produced endcap layer 3: %d\n", event.getNumberOfQuintupletsByLayerEndcap(2));
0149 printf("# of Quintuplets produced endcap layer 4: %d\n", event.getNumberOfQuintupletsByLayerEndcap(3));
0150 printf("# of Quintuplets produced endcap layer 5: %d\n", event.getNumberOfQuintupletsByLayerEndcap(4));
0151 }
0152
0153 event.addPixelSegmentToEventFinalize();
0154
0155 event.pixelLineSegmentCleaning(no_pls_dupclean);
0156
0157 event.createPixelQuintuplets();
0158 if (verbose) {
0159 alpaka::wait(queue);
0160 printf("# of Pixel Quintuplets produced: %d\n", event.getNumberOfPixelQuintuplets());
0161 }
0162
0163 event.createPixelTriplets();
0164 if (verbose) {
0165 alpaka::wait(queue);
0166 printf("# of Pixel T3s produced: %d\n", event.getNumberOfPixelTriplets());
0167 }
0168
0169 event.createTrackCandidates(no_pls_dupclean, tc_pls_triplets);
0170 if (verbose) {
0171 alpaka::wait(queue);
0172 printf("# of TrackCandidates produced: %d\n", event.getNumberOfTrackCandidates());
0173 printf(" # of Pixel TrackCandidates produced: %d\n", event.getNumberOfPixelTrackCandidates());
0174 printf(" # of pT5 TrackCandidates produced: %d\n", event.getNumberOfPT5TrackCandidates());
0175 printf(" # of pT3 TrackCandidates produced: %d\n", event.getNumberOfPT3TrackCandidates());
0176 printf(" # of pLS TrackCandidates produced: %d\n", event.getNumberOfPLSTrackCandidates());
0177 printf(" # of T5 TrackCandidates produced: %d\n", event.getNumberOfT5TrackCandidates());
0178 }
0179
0180 getOutput(event);
0181 }