diff --git a/RecoTracker/LST/plugins/alpaka/LSTModulesDevESProducer.cc b/RecoTracker/LST/plugins/alpaka/LSTModulesDevESProducer.cc index d0e103b1e315b..7152da9ed13c7 100644 --- a/RecoTracker/LST/plugins/alpaka/LSTModulesDevESProducer.cc +++ b/RecoTracker/LST/plugins/alpaka/LSTModulesDevESProducer.cc @@ -13,16 +13,23 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { class LSTModulesDevESProducer : public ESProducer { + private: + std::string ptCutLabel_; + public: - LSTModulesDevESProducer(edm::ParameterSet const& iConfig) : ESProducer(iConfig) { setWhatProduced(this); } + LSTModulesDevESProducer(edm::ParameterSet const& iConfig) + : ESProducer(iConfig), ptCutLabel_(iConfig.getParameter("ptCutLabel")) { + setWhatProduced(this, ptCutLabel_); + } static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; + desc.add("ptCutLabel", "0.8"); descriptions.addWithDefaultLabel(desc); } std::unique_ptr> produce(TrackerRecoGeometryRecord const& iRecord) { - return lst::loadAndFillESHost(); + return lst::loadAndFillESHost(ptCutLabel_); } }; diff --git a/RecoTracker/LST/plugins/alpaka/LSTProducer.cc b/RecoTracker/LST/plugins/alpaka/LSTProducer.cc index 7eb6c57ade05c..4b83dd3693624 100644 --- a/RecoTracker/LST/plugins/alpaka/LSTProducer.cc +++ b/RecoTracker/LST/plugins/alpaka/LSTProducer.cc @@ -28,8 +28,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { LSTProducer(edm::ParameterSet const& config) : lstPixelSeedInputToken_{consumes(config.getParameter("pixelSeedInput"))}, lstPhase2OTHitsInputToken_{consumes(config.getParameter("phase2OTHitsInput"))}, - lstESToken_{esConsumes()}, + lstESToken_{esConsumes(edm::ESInputTag("", config.getParameter("ptCutLabel")))}, verbose_(config.getParameter("verbose")), + ptCut_(config.getParameter("ptCut")), nopLSDupClean_(config.getParameter("nopLSDupClean")), tcpLSTriplets_(config.getParameter("tcpLSTriplets")), lstOutputToken_{produces()} {} @@ -43,6 +44,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { lst_.run(event.queue(), verbose_, + static_cast(ptCut_), &lstESDeviceData, pixelSeeds.px(), pixelSeeds.py(), @@ -78,6 +80,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { desc.add("pixelSeedInput", edm::InputTag{"lstPixelSeedInputProducer"}); desc.add("phase2OTHitsInput", edm::InputTag{"lstPhase2OTHitsInputProducer"}); desc.add("verbose", false); + desc.add("ptCut", 0.8); + desc.add("ptCutLabel", "0.8"); desc.add("nopLSDupClean", false); desc.add("tcpLSTriplets", false); descriptions.addWithDefaultLabel(desc); @@ -87,7 +91,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { edm::EDGetTokenT lstPixelSeedInputToken_; edm::EDGetTokenT lstPhase2OTHitsInputToken_; device::ESGetToken, TrackerRecoGeometryRecord> lstESToken_; - const bool verbose_, nopLSDupClean_, tcpLSTriplets_; + const bool verbose_; + const double ptCut_; + const bool nopLSDupClean_; + const bool tcpLSTriplets_; edm::EDPutTokenT lstOutputToken_; lst::LST lst_; diff --git a/RecoTracker/LSTCore/BuildFile.xml b/RecoTracker/LSTCore/BuildFile.xml index a58a1898046ae..8dd2b885bf1b4 100644 --- a/RecoTracker/LSTCore/BuildFile.xml +++ b/RecoTracker/LSTCore/BuildFile.xml @@ -2,7 +2,6 @@ - diff --git a/RecoTracker/LSTCore/interface/Common.h b/RecoTracker/LSTCore/interface/Common.h index f65ca7a50d867..32337d8f409ae 100644 --- a/RecoTracker/LSTCore/interface/Common.h +++ b/RecoTracker/LSTCore/interface/Common.h @@ -20,11 +20,6 @@ namespace lst { // Named types for LST objects enum LSTObjType { T5 = 4, pT3 = 5, pT5 = 7, pLS = 8 }; -// If a compile time flag does not define PT_CUT, default to 0.8 (GeV) -#ifndef PT_CUT - constexpr float PT_CUT = 0.8f; -#endif - constexpr unsigned int max_blocks = 80; constexpr unsigned int max_connected_modules = 40; diff --git a/RecoTracker/LSTCore/interface/LSTESData.h b/RecoTracker/LSTCore/interface/LSTESData.h index 45887d3cb1fea..bfa10186f8f2e 100644 --- a/RecoTracker/LSTCore/interface/LSTESData.h +++ b/RecoTracker/LSTCore/interface/LSTESData.h @@ -40,7 +40,7 @@ namespace lst { pixelMapping(pixelMappingIn) {} }; - std::unique_ptr> loadAndFillESHost(); + std::unique_ptr> loadAndFillESHost(std::string& ptCutLabel); } // namespace lst diff --git a/RecoTracker/LSTCore/interface/QuintupletsSoA.h b/RecoTracker/LSTCore/interface/QuintupletsSoA.h index 4ece80cd11ddd..e2991a7fe28d3 100644 --- a/RecoTracker/LSTCore/interface/QuintupletsSoA.h +++ b/RecoTracker/LSTCore/interface/QuintupletsSoA.h @@ -28,7 +28,9 @@ namespace lst { SOA_COLUMN(float, regressionF), SOA_COLUMN(float, rzChiSquared), // r-z only chi2 SOA_COLUMN(float, chiSquared), - SOA_COLUMN(float, nonAnchorChiSquared)); + SOA_COLUMN(float, nonAnchorChiSquared), + SOA_COLUMN(float, dBeta1), + SOA_COLUMN(float, dBeta2)); using QuintupletsSoA = QuintupletsSoALayout<>; using Quintuplets = QuintupletsSoA::View; diff --git a/RecoTracker/LSTCore/interface/alpaka/Common.h b/RecoTracker/LSTCore/interface/alpaka/Common.h index 7a1feabfcf076..fd59555fe8588 100644 --- a/RecoTracker/LSTCore/interface/alpaka/Common.h +++ b/RecoTracker/LSTCore/interface/alpaka/Common.h @@ -49,7 +49,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float k2Rinv1GeVf = (2.99792458e-3 * 3.8) / 2; ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kR1GeVf = 1. / (2.99792458e-3 * 3.8); ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kSinAlphaMax = 0.95; - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float ptCut = PT_CUT; ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kDeltaZLum = 15.0; ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kPixelPSZpitch = 0.15; ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kStripPSZpitch = 2.4; @@ -60,22 +59,27 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { // To be updated with std::numeric_limits::infinity() in the code and data files ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kVerticalModuleSlope = 123456789.0; - namespace t5dnn { - - // Working points matching LST fake rate (43.9%) or signal acceptance (82.0%) - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kLSTWp1 = 0.3418833f; // 94.0% TPR, 43.9% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kLSTWp2 = 0.6177366f; // 82.0% TPR, 20.0% FPR - // Other working points - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp70 = 0.7776195f; // 70.0% TPR, 10.0% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp75 = 0.7181118f; // 75.0% TPR, 13.5% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp80 = 0.6492643f; // 80.0% TPR, 17.9% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp85 = 0.5655319f; // 85.0% TPR, 23.8% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp90 = 0.4592205f; // 90.0% TPR, 32.6% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp95 = 0.3073708f; // 95.0% TPR, 47.7% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp97p5 = 0.2001348f; // 97.5% TPR, 61.2% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp99 = 0.1120605f; // 99.0% TPR, 75.9% FPR - ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp99p9 = 0.0218196f; // 99.9% TPR, 95.4% FPR + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kMiniDeltaTilted[3] = {0.26f, 0.26f, 0.26f}; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kMiniDeltaFlat[6] = {0.26f, 0.16f, 0.16f, 0.18f, 0.18f, 0.18f}; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kMiniDeltaLooseTilted[3] = {0.4f, 0.4f, 0.4f}; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kMiniDeltaEndcap[5][15] = { + {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, + {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, + {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, + {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, + {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}}; + namespace t5dnn { + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kZ_max = 267.2349854f; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kR_max = 110.1099396f; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kEta_norm = 2.5f; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kPhi_norm = kPi; + // pt, eta binned + constexpr unsigned int kPtBins = 2; + constexpr unsigned int kEtaBins = 10; + ALPAKA_STATIC_ACC_MEM_GLOBAL constexpr float kWp[kPtBins][kEtaBins] = { + {0.4493, 0.4939, 0.5715, 0.6488, 0.5709, 0.5938, 0.7164, 0.7565, 0.8103, 0.8593}, + {0.4488, 0.4448, 0.5067, 0.5929, 0.4836, 0.4112, 0.4968, 0.4403, 0.5597, 0.5067}}; } // namespace t5dnn } // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst diff --git a/RecoTracker/LSTCore/interface/alpaka/LST.h b/RecoTracker/LSTCore/interface/alpaka/LST.h index 40d912de3f291..5fe369b9cd22b 100644 --- a/RecoTracker/LSTCore/interface/alpaka/LST.h +++ b/RecoTracker/LSTCore/interface/alpaka/LST.h @@ -17,6 +17,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { void run(Queue& queue, bool verbose, + const float ptCut, LSTESData const* deviceESData, std::vector const& see_px, std::vector const& see_py, @@ -63,7 +64,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { std::vector const& ph2_detId, std::vector const& ph2_x, std::vector const& ph2_y, - std::vector const& ph2_z); + std::vector const& ph2_z, + const float ptCut); void getOutput(LSTEvent& event); diff --git a/RecoTracker/LSTCore/src/LSTESData.cc b/RecoTracker/LSTCore/src/LSTESData.cc index 66163d39beb2e..dad8522bbe2cd 100644 --- a/RecoTracker/LSTCore/src/LSTESData.cc +++ b/RecoTracker/LSTCore/src/LSTESData.cc @@ -10,25 +10,25 @@ namespace { std::string geometryDataDir() { - const char* path_lst_base = std::getenv("LST_BASE"); + std::string path_str, path; const char* path_tracklooperdir = std::getenv("TRACKLOOPERDIR"); - std::string path_str; - if (path_lst_base != nullptr) { - path_str = path_lst_base; - } else if (path_tracklooperdir != nullptr) { + std::stringstream search_path; + search_path << std::getenv("CMSSW_SEARCH_PATH"); + + while (std::getline(search_path, path, ':')) { + if (std::filesystem::exists(path + "/RecoTracker/LSTCore/data")) { + path_str = path; + break; + } + } + + if (path_str.empty()) { path_str = path_tracklooperdir; - path_str += "/../"; + path_str += "/.."; } else { - std::stringstream search_path(std::getenv("CMSSW_SEARCH_PATH")); - std::string path; - while (std::getline(search_path, path, ':')) { - if (std::filesystem::exists(path + "/RecoTracker/LSTCore/data")) { - path_str = path; - break; - } - } path_str += "/RecoTracker/LSTCore"; } + return path_str; } @@ -43,21 +43,22 @@ namespace { void loadMapsHost(lst::MapPLStoLayer& pLStoLayer, lst::EndcapGeometry& endcapGeometry, lst::TiltedGeometry& tiltedGeometry, - lst::ModuleConnectionMap& moduleConnectionMap) { + lst::ModuleConnectionMap& moduleConnectionMap, + std::string& ptCutLabel) { // Module orientation information (DrDz or phi angles) - auto endcap_geom = - get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt0.8/endcap_orientation.bin"); - auto tilted_geom = get_absolute_path_after_check_file_exists( - geometryDataDir() + "/data/OT800_IT615_pt0.8/tilted_barrel_orientation.bin"); + auto endcap_geom = get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt" + + ptCutLabel + "/endcap_orientation.bin"); + auto tilted_geom = get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt" + + ptCutLabel + "/tilted_barrel_orientation.bin"); // Module connection map (for line segment building) - auto mappath = get_absolute_path_after_check_file_exists( - geometryDataDir() + "/data/OT800_IT615_pt0.8/module_connection_tracing_merged.bin"); + auto mappath = get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt" + ptCutLabel + + "/module_connection_tracing_merged.bin"); endcapGeometry.load(endcap_geom); tiltedGeometry.load(tilted_geom); moduleConnectionMap.load(mappath); - auto pLSMapDir = geometryDataDir() + "/data/OT800_IT615_pt0.8/pixelmap/pLS_map"; + auto pLSMapDir = geometryDataDir() + "/data/OT800_IT615_pt" + ptCutLabel + "/pixelmap/pLS_map"; const std::array connects{ {"_layer1_subdet5", "_layer2_subdet5", "_layer1_subdet4", "_layer2_subdet4"}}; std::string path; @@ -78,7 +79,7 @@ namespace { } } // namespace -std::unique_ptr> lst::loadAndFillESHost() { +std::unique_ptr> lst::loadAndFillESHost(std::string& ptCutLabel) { uint16_t nModules; uint16_t nLowerModules; unsigned int nPixels; @@ -87,7 +88,7 @@ std::unique_ptr> lst::loadAndFillESHost() TiltedGeometry tiltedGeometry; PixelMap pixelMapping; ModuleConnectionMap moduleConnectionMap; - ::loadMapsHost(pLStoLayer, endcapGeometry, tiltedGeometry, moduleConnectionMap); + ::loadMapsHost(pLStoLayer, endcapGeometry, tiltedGeometry, moduleConnectionMap, ptCutLabel); auto endcapGeometryDev = std::make_shared(endcapGeometry.nEndCapMap, cms::alpakatools::host()); @@ -98,8 +99,8 @@ std::unique_ptr> lst::loadAndFillESHost() endcapGeometry.geoMapPhi_buf.data(), endcapGeometry.nEndCapMap * sizeof(float)); - auto path = - get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt0.8/sensor_centroids.bin"); + auto path = get_absolute_path_after_check_file_exists(geometryDataDir() + "/data/OT800_IT615_pt" + ptCutLabel + + "/sensor_centroids.bin"); auto modulesBuffers = lst::loadModulesFromFile(pLStoLayer, path.c_str(), nModules, diff --git a/RecoTracker/LSTCore/src/alpaka/Kernels.h b/RecoTracker/LSTCore/src/alpaka/Kernels.h index c642f2427fa84..13d0d2b0e1202 100644 --- a/RecoTracker/LSTCore/src/alpaka/Kernels.h +++ b/RecoTracker/LSTCore/src/alpaka/Kernels.h @@ -217,15 +217,22 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { for (unsigned int ix1 = 0; ix1 < nQuintuplets_lowmod1; ix1 += 1) { unsigned int ix = quintupletModuleIndices_lowmod1 + ix1; - if (quintuplets.partOfPT5()[ix] || (quintuplets.isDup()[ix] & 1)) + if (quintuplets.isDup()[ix] & 1) continue; + bool isPT5_ix = quintuplets.partOfPT5()[ix]; + for (unsigned int jx1 = 0; jx1 < nQuintuplets_lowmod2; jx1++) { unsigned int jx = quintupletModuleIndices_lowmod2 + jx1; if (ix == jx) continue; - if (quintuplets.partOfPT5()[jx] || (quintuplets.isDup()[jx] & 1)) + if (quintuplets.isDup()[jx] & 1) + continue; + + bool isPT5_jx = quintuplets.partOfPT5()[jx]; + + if (isPT5_ix && isPT5_jx) continue; float eta1 = __H2F(quintuplets.eta()[ix]); @@ -249,9 +256,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { int nMatched = checkHitsT5(ix, jx, quintuplets); const int minNHitsForDup_T5 = 5; if (dR2 < 0.001f || nMatched >= minNHitsForDup_T5) { - if (score_rphisum1 > score_rphisum2) { + if (isPT5_jx || score_rphisum1 > score_rphisum2) { rmQuintupletFromMemory(quintuplets, ix, true); - } else if (score_rphisum1 < score_rphisum2) { + } else if (isPT5_ix || score_rphisum1 < score_rphisum2) { rmQuintupletFromMemory(quintuplets, jx, true); } else { rmQuintupletFromMemory(quintuplets, (ix < jx ? ix : jx), true); diff --git a/RecoTracker/LSTCore/src/alpaka/LST.cc b/RecoTracker/LSTCore/src/alpaka/LST.cc index 3c1638677eab2..b2fe87e3a2917 100644 --- a/RecoTracker/LSTCore/src/alpaka/LST.cc +++ b/RecoTracker/LSTCore/src/alpaka/LST.cc @@ -75,7 +75,8 @@ void LST::prepareInput(std::vector const& see_px, std::vector const& ph2_detId, std::vector const& ph2_x, std::vector const& ph2_y, - std::vector const& ph2_z) { + std::vector const& ph2_z, + float const ptCut) { in_trkX_.clear(); in_trkY_.clear(); in_trkZ_.clear(); @@ -132,7 +133,7 @@ void LST::prepareInput(std::vector const& see_px, float eta = p3LH.eta(); float ptErr = see_ptErr[iSeed]; - if ((ptIn > 0.8 - 2 * ptErr)) { + if ((ptIn > ptCut - 2 * ptErr)) { XYZVector r3LH(see_stateTrajGlbX[iSeed], see_stateTrajGlbY[iSeed], see_stateTrajGlbZ[iSeed]); XYZVector p3PCA(see_px[iSeed], see_py[iSeed], see_pz[iSeed]); XYZVector r3PCA(calculateR3FromPCA(p3PCA, see_dxy[iSeed], see_dz[iSeed])); @@ -149,7 +150,7 @@ void LST::prepareInput(std::vector const& see_px, if (ptIn >= 2.0) pixtype = PixelType::kHighPt; - else if (ptIn >= (0.8 - 2 * ptErr) and ptIn < 2.0) { + else if (ptIn >= (ptCut - 2 * ptErr) and ptIn < 2.0) { if (pixelSegmentDeltaPhiChange >= 0) pixtype = PixelType::kLowPtPosCurv; else @@ -255,6 +256,7 @@ void LST::getOutput(LSTEvent& event) { void LST::run(Queue& queue, bool verbose, + float const ptCut, LSTESData const* deviceESData, std::vector const& see_px, std::vector const& see_py, @@ -277,7 +279,7 @@ void LST::run(Queue& queue, std::vector const& ph2_z, bool no_pls_dupclean, bool tc_pls_triplets) { - auto event = LSTEvent(verbose, queue, deviceESData); + auto event = LSTEvent(verbose, ptCut, queue, deviceESData); prepareInput(see_px, see_py, see_pz, @@ -296,7 +298,8 @@ void LST::run(Queue& queue, ph2_detId, ph2_x, ph2_y, - ph2_z); + ph2_z, + ptCut); event.addHitToEvent(in_trkX_, in_trkY_, in_trkZ_, in_hitId_, in_hitIdxs_); event.addPixelSegmentToEvent(in_hitIndices_vec0_, diff --git a/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc b/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc index 653b6b0964afa..cb8a2bcbb457e 100644 --- a/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc +++ b/RecoTracker/LSTCore/src/alpaka/LSTEvent.dev.cc @@ -202,7 +202,8 @@ void LSTEvent::addPixelSegmentToEvent(std::vector const& hitIndice createMDArrayRangesGPU_workDiv, CreateMDArrayRangesGPU{}, modules_.const_view(), - rangesDC_->view()); + rangesDC_->view(), + ptCut_); auto nTotalMDs_buf_h = cms::alpakatools::make_host_buffer(queue_); auto nTotalMDs_buf_d = cms::alpakatools::make_device_view(queue_, rangesOccupancy.nTotalMDs()); @@ -233,7 +234,8 @@ void LSTEvent::addPixelSegmentToEvent(std::vector const& hitIndice CreateSegmentArrayRanges{}, modules_.const_view(), rangesDC_->view(), - miniDoubletsDC_->const_view()); + miniDoubletsDC_->const_view(), + ptCut_); auto rangesOccupancy = rangesDC_->view(); auto nTotalSegments_view_h = cms::alpakatools::make_host_view(nTotalSegments_); @@ -346,7 +348,8 @@ void LSTEvent::createMiniDoublets() { createMDArrayRangesGPU_workDiv, CreateMDArrayRangesGPU{}, modules_.const_view(), - rangesDC_->view()); + rangesDC_->view(), + ptCut_); auto nTotalMDs_buf_h = cms::alpakatools::make_host_buffer(queue_); auto nTotalMDs_buf_d = cms::alpakatools::make_device_view(queue_, rangesOccupancy.nTotalMDs()); @@ -381,7 +384,8 @@ void LSTEvent::createMiniDoublets() { hitsDC_->const_view(), miniDoubletsDC_->view(), miniDoubletsDC_->view(), - rangesDC_->const_view()); + rangesDC_->const_view(), + ptCut_); WorkDiv1D const addMiniDoubletRangesToEventExplicit_workDiv = createWorkDiv({1}, {1024}, {1}); @@ -427,7 +431,8 @@ void LSTEvent::createSegmentsWithModuleMap() { miniDoubletsDC_->const_view(), segmentsDC_->view(), segmentsDC_->view(), - rangesDC_->const_view()); + rangesDC_->const_view(), + ptCut_); WorkDiv1D const addSegmentRangesToEventExplicit_workDiv = createWorkDiv({1}, {1024}, {1}); @@ -452,7 +457,8 @@ void LSTEvent::createTriplets() { CreateTripletArrayRanges{}, modules_.const_view(), rangesDC_->view(), - segmentsDC_->const_view()); + segmentsDC_->const_view(), + ptCut_); // TODO: Why are we pulling this back down only to put it back on the device in a new struct? auto rangesOccupancy = rangesDC_->view(); @@ -537,7 +543,8 @@ void LSTEvent::createTriplets() { tripletsDC_->view(), rangesDC_->const_view(), index_gpu_buf.data(), - nonZeroModules); + nonZeroModules, + ptCut_); WorkDiv1D const addTripletRangesToEventExplicit_workDiv = createWorkDiv({1}, {1024}, {1}); @@ -822,7 +829,8 @@ void LSTEvent::createPixelTriplets() { pixelTripletsDC_->view(), connectedPixelSize_dev_buf.data(), connectedPixelIndex_dev_buf.data(), - nInnerSegments); + nInnerSegments, + ptCut_); #ifdef WARNINGS auto nPixelTriplets_buf = cms::alpakatools::make_host_buffer(queue_); @@ -853,7 +861,8 @@ void LSTEvent::createQuintuplets() { CreateEligibleModulesListForQuintuplets{}, modules_.const_view(), tripletsDC_->const_view(), - rangesDC_->view()); + rangesDC_->view(), + ptCut_); auto nEligibleT5Modules_buf = cms::alpakatools::make_host_buffer(queue_); auto nTotalQuintuplets_buf = cms::alpakatools::make_host_buffer(queue_); @@ -904,7 +913,8 @@ void LSTEvent::createQuintuplets() { quintupletsDC_->view(), quintupletsDC_->view(), rangesDC_->const_view(), - nEligibleT5Modules); + nEligibleT5Modules, + ptCut_); Vec3D const threadsPerBlockDupQuint{1, 16, 16}; Vec3D const blocksPerGridDupQuint{max_blocks, 1, 1}; @@ -1065,7 +1075,8 @@ void LSTEvent::createPixelQuintuplets() { connectedPixelSize_dev_buf.data(), connectedPixelIndex_dev_buf.data(), nInnerSegments, - rangesDC_->const_view()); + rangesDC_->const_view(), + ptCut_); Vec3D const threadsPerBlockDupPix{1, 16, 16}; Vec3D const blocksPerGridDupPix{1, max_blocks, 1}; @@ -1191,8 +1202,9 @@ void LSTEvent::addQuintupletsToEventExplicit() { // FIXME: replace by ES host data auto module_subdets_buf = cms::alpakatools::make_host_buffer(queue_, nLowerModules_); - auto module_subdets_view = cms::alpakatools::make_device_view(queue_, modules.subdets(), modules.metadata().size()); - alpaka::memcpy(queue_, module_subdets_buf, module_subdets_view, nModules_); + auto module_subdets_view = + cms::alpakatools::make_device_view(queue_, modules.subdets(), nLowerModules_); // only lower modules + alpaka::memcpy(queue_, module_subdets_buf, module_subdets_view, nLowerModules_); auto module_layers_buf = cms::alpakatools::make_host_buffer(queue_, nLowerModules_); auto module_layers_view = diff --git a/RecoTracker/LSTCore/src/alpaka/LSTEvent.h b/RecoTracker/LSTCore/src/alpaka/LSTEvent.h index d4c659a199515..a883436a11266 100644 --- a/RecoTracker/LSTCore/src/alpaka/LSTEvent.h +++ b/RecoTracker/LSTCore/src/alpaka/LSTEvent.h @@ -36,6 +36,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { class LSTEvent { private: Queue& queue_; + const float ptCut_; std::array n_minidoublets_by_layer_barrel_{}; std::array n_minidoublets_by_layer_endcap_{}; @@ -81,8 +82,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { public: // Constructor used for CMSSW integration. Uses an external queue. - LSTEvent(bool verbose, Queue& q, const LSTESData* deviceESData) + LSTEvent(bool verbose, const float pt_cut, Queue& q, const LSTESData* deviceESData) : queue_(q), + ptCut_(pt_cut), nModules_(deviceESData->nModules), nLowerModules_(deviceESData->nLowerModules), nPixels_(deviceESData->nPixels), @@ -90,7 +92,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { modules_(*deviceESData->modules), pixelMapping_(*deviceESData->pixelMapping), endcapGeometry_(*deviceESData->endcapGeometry), - addObjects_(verbose) {} + addObjects_(verbose) { + if (pt_cut < 0.6f) { + throw std::invalid_argument("Minimum pT cut must be at least 0.6 GeV. Provided value: " + + std::to_string(pt_cut)); + } + } void initSync(); // synchronizes, for standalone usage void resetEventSync(); // synchronizes, for standalone usage void wait() const { alpaka::wait(queue_); } diff --git a/RecoTracker/LSTCore/src/alpaka/MiniDoublet.h b/RecoTracker/LSTCore/src/alpaka/MiniDoublet.h index c2af864f84d12..4255d651dbce2 100644 --- a/RecoTracker/LSTCore/src/alpaka/MiniDoublet.h +++ b/RecoTracker/LSTCore/src/alpaka/MiniDoublet.h @@ -106,35 +106,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } ALPAKA_FN_ACC ALPAKA_FN_INLINE float moduleGapSize(ModulesConst modules, uint16_t moduleIndex) { - float miniDeltaTilted[3] = {0.26f, 0.26f, 0.26f}; - float miniDeltaFlat[6] = {0.26f, 0.16f, 0.16f, 0.18f, 0.18f, 0.18f}; - float miniDeltaLooseTilted[3] = {0.4f, 0.4f, 0.4f}; - float miniDeltaEndcap[5][15]; - - for (size_t i = 0; i < 5; i++) { - for (size_t j = 0; j < 15; j++) { - if (i == 0 || i == 1) { - if (j < 10) { - miniDeltaEndcap[i][j] = 0.4f; - } else { - miniDeltaEndcap[i][j] = 0.18f; - } - } else if (i == 2 || i == 3) { - if (j < 8) { - miniDeltaEndcap[i][j] = 0.4f; - } else { - miniDeltaEndcap[i][j] = 0.18f; - } - } else { - if (j < 9) { - miniDeltaEndcap[i][j] = 0.4f; - } else { - miniDeltaEndcap[i][j] = 0.18f; - } - } - } - } - unsigned int iL = modules.layers()[moduleIndex] - 1; unsigned int iR = modules.rings()[moduleIndex] - 1; short subdet = modules.subdets()[moduleIndex]; @@ -143,22 +114,27 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float moduleSeparation = 0; if (subdet == Barrel and side == Center) { - moduleSeparation = miniDeltaFlat[iL]; + moduleSeparation = kMiniDeltaFlat[iL]; } else if (isTighterTiltedModules(modules, moduleIndex)) { - moduleSeparation = miniDeltaTilted[iL]; + moduleSeparation = kMiniDeltaTilted[iL]; } else if (subdet == Endcap) { - moduleSeparation = miniDeltaEndcap[iL][iR]; + moduleSeparation = kMiniDeltaEndcap[iL][iR]; } else //Loose tilted modules { - moduleSeparation = miniDeltaLooseTilted[iL]; + moduleSeparation = kMiniDeltaLooseTilted[iL]; } return moduleSeparation; } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE float dPhiThreshold( - TAcc const& acc, float rt, ModulesConst modules, uint16_t moduleIndex, float dPhi = 0, float dz = 0) { + ALPAKA_FN_ACC ALPAKA_FN_INLINE float dPhiThreshold(TAcc const& acc, + float rt, + ModulesConst modules, + uint16_t moduleIndex, + const float ptCut, + float dPhi = 0, + float dz = 0) { // ================================================================= // Various constants // ================================================================= @@ -403,7 +379,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float xUpper, float yUpper, float zUpper, - float rtUpper) { + float rtUpper, + const float ptCut) { dz = zLower - zUpper; const float dzCut = modules.moduleType()[lowerModuleIndex] == PS ? 2.f : 10.f; const float sign = ((dz > 0) - (dz < 0)) * ((zLower > 0) - (zLower < 0)); @@ -415,8 +392,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float miniCut = 0; miniCut = modules.moduleLayerType()[lowerModuleIndex] == Pixel - ? dPhiThreshold(acc, rtLower, modules, lowerModuleIndex) - : dPhiThreshold(acc, rtUpper, modules, lowerModuleIndex); + ? dPhiThreshold(acc, rtLower, modules, lowerModuleIndex, ptCut) + : dPhiThreshold(acc, rtUpper, modules, lowerModuleIndex, ptCut); // Cut #2: dphi difference // Ref to original code: https://github.com/slava77/cms-tkph2-ntuple/blob/184d2325147e6930030d3d1f780136bc2dd29ce6/doubletAnalysis.C#L3085 @@ -530,7 +507,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float xUpper, float yUpper, float zUpper, - float rtUpper) { + float rtUpper, + const float ptCut) { // There are series of cuts that applies to mini-doublet in a "endcap" region // Cut #1 : dz cut. The dz difference can't be larger than 1cm. (max separation is 4mm for modules in the endcap) // Ref to original code: https://github.com/slava77/cms-tkph2-ntuple/blob/184d2325147e6930030d3d1f780136bc2dd29ce6/doubletAnalysis.C#L3093 @@ -603,8 +581,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float miniCut = 0; miniCut = modules.moduleLayerType()[lowerModuleIndex] == Pixel - ? dPhiThreshold(acc, rtLower, modules, lowerModuleIndex, dPhi, dz) - : dPhiThreshold(acc, rtUpper, modules, lowerModuleIndex, dPhi, dz); + ? dPhiThreshold(acc, rtLower, modules, lowerModuleIndex, ptCut, dPhi, dz) + : dPhiThreshold(acc, rtUpper, modules, lowerModuleIndex, ptCut, dPhi, dz); if (alpaka::math::abs(acc, dPhi) >= miniCut) return false; @@ -641,7 +619,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float xUpper, float yUpper, float zUpper, - float rtUpper) { + float rtUpper, + const float ptCut) { if (modules.subdets()[lowerModuleIndex] == Barrel) { return runMiniDoubletDefaultAlgoBarrel(acc, modules, @@ -664,7 +643,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { xUpper, yUpper, zUpper, - rtUpper); + rtUpper, + ptCut); } else { return runMiniDoubletDefaultAlgoEndcap(acc, modules, @@ -687,7 +667,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { xUpper, yUpper, zUpper, - rtUpper); + rtUpper, + ptCut); } } @@ -699,7 +680,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { HitsRangesConst hitsRanges, MiniDoublets mds, MiniDoubletsOccupancy mdsOccupancy, - ObjectRangesConst ranges) const { + ObjectRangesConst ranges, + const float ptCut) const { auto const globalThreadIdx = alpaka::getIdx(acc); auto const gridThreadExtent = alpaka::getWorkDiv(acc); @@ -754,13 +736,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { xUpper, yUpper, zUpper, - rtUpper); + rtUpper, + ptCut); if (success) { int totOccupancyMDs = alpaka::atomicAdd( acc, &mdsOccupancy.totOccupancyMDs()[lowerModuleIndex], 1u, alpaka::hierarchy::Threads{}); if (totOccupancyMDs >= (ranges.miniDoubletModuleOccupancy()[lowerModuleIndex])) { #ifdef WARNINGS - printf("Mini-doublet excess alert! Module index = %d\n", lowerModuleIndex); + printf( + "Mini-doublet excess alert! Module index = %d, Occupancy = %d\n", lowerModuleIndex, totOccupancyMDs); #endif } else { int mdModuleIndex = @@ -790,9 +774,38 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } }; + // Helper function to determine eta bin for occupancies + ALPAKA_FN_ACC ALPAKA_FN_INLINE int getEtaBin(const float module_eta) { + if (module_eta < 0.75f) + return 0; + else if (module_eta < 1.5f) + return 1; + else if (module_eta < 2.25f) + return 2; + else if (module_eta < 3.0f) + return 3; + return -1; + } + + // Helper function to determine category number for occupancies + ALPAKA_FN_ACC ALPAKA_FN_INLINE int getCategoryNumber(const short module_layers, + const short module_subdets, + const short module_rings) { + if (module_subdets == Barrel) { + return (module_layers <= 3) ? 0 : 1; + } else if (module_subdets == Endcap) { + if (module_layers <= 2) { + return (module_rings >= 11) ? 2 : 3; + } else { + return (module_rings >= 8) ? 2 : 3; + } + } + return -1; + } + struct CreateMDArrayRangesGPU { template - ALPAKA_FN_ACC void operator()(TAcc const& acc, ModulesConst modules, ObjectRanges ranges) const { + ALPAKA_FN_ACC void operator()(TAcc const& acc, ModulesConst modules, ObjectRanges ranges, const float ptCut) const { // implementation is 1D with a single block static_assert(std::is_same_v, "Should be Acc1D"); ALPAKA_ASSERT_ACC((alpaka::getWorkDiv(acc)[0] == 1)); @@ -807,67 +820,43 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } alpaka::syncBlockThreads(acc); + // Occupancy matrix for 0.8 GeV pT Cut + constexpr int p08_occupancy_matrix[4][4] = { + {49, 42, 37, 41}, // category 0 + {100, 100, 0, 0}, // category 1 + {0, 16, 19, 0}, // category 2 + {0, 14, 20, 25} // category 3 + }; + + // Occupancy matrix for 0.6 GeV pT Cut, 99.99% + constexpr int p06_occupancy_matrix[4][4] = { + {60, 57, 54, 48}, // category 0 + {259, 195, 0, 0}, // category 1 + {0, 23, 28, 0}, // category 2 + {0, 25, 25, 33} // category 3 + }; + + // Select the appropriate occupancy matrix based on ptCut + const auto& occupancy_matrix = (ptCut < 0.8f) ? p06_occupancy_matrix : p08_occupancy_matrix; + for (uint16_t i = globalThreadIdx[0]; i < modules.nLowerModules(); i += gridThreadExtent[0]) { short module_rings = modules.rings()[i]; short module_layers = modules.layers()[i]; short module_subdets = modules.subdets()[i]; float module_eta = alpaka::math::abs(acc, modules.eta()[i]); - int category_number; - if (module_layers <= 3 && module_subdets == 5) - category_number = 0; - else if (module_layers >= 4 && module_subdets == 5) - category_number = 1; - else if (module_layers <= 2 && module_subdets == 4 && module_rings >= 11) - category_number = 2; - else if (module_layers >= 3 && module_subdets == 4 && module_rings >= 8) - category_number = 2; - else if (module_layers <= 2 && module_subdets == 4 && module_rings <= 10) - category_number = 3; - else if (module_layers >= 3 && module_subdets == 4 && module_rings <= 7) - category_number = 3; - else - category_number = -1; - - int eta_number; - if (module_eta < 0.75f) - eta_number = 0; - else if (module_eta < 1.5f) - eta_number = 1; - else if (module_eta < 2.25f) - eta_number = 2; - else if (module_eta < 3.0f) - eta_number = 3; - else - eta_number = -1; - - int occupancy; - if (category_number == 0 && eta_number == 0) - occupancy = 49; - else if (category_number == 0 && eta_number == 1) - occupancy = 42; - else if (category_number == 0 && eta_number == 2) - occupancy = 37; - else if (category_number == 0 && eta_number == 3) - occupancy = 41; - else if (category_number == 1) - occupancy = 100; - else if (category_number == 2 && eta_number == 1) - occupancy = 16; - else if (category_number == 2 && eta_number == 2) - occupancy = 19; - else if (category_number == 3 && eta_number == 1) - occupancy = 14; - else if (category_number == 3 && eta_number == 2) - occupancy = 20; - else if (category_number == 3 && eta_number == 3) - occupancy = 25; - else { - occupancy = 0; + int category_number = getCategoryNumber(module_layers, module_subdets, module_rings); + int eta_number = getEtaBin(module_eta); + + int occupancy = 0; + if (category_number != -1 && eta_number != -1) { + occupancy = occupancy_matrix[category_number][eta_number]; + } #ifdef WARNINGS + else { printf("Unhandled case in createMDArrayRangesGPU! Module index = %i\n", i); -#endif } +#endif unsigned int nTotMDs = alpaka::atomicAdd(acc, &nTotalMDs, occupancy, alpaka::hierarchy::Threads{}); diff --git a/RecoTracker/LSTCore/src/alpaka/NeuralNetwork.h b/RecoTracker/LSTCore/src/alpaka/NeuralNetwork.h index 42605c80e9434..cc1bffa3d928b 100644 --- a/RecoTracker/LSTCore/src/alpaka/NeuralNetwork.h +++ b/RecoTracker/LSTCore/src/alpaka/NeuralNetwork.h @@ -1,165 +1,151 @@ #ifndef RecoTracker_LSTCore_src_alpaka_NeuralNetwork_h #define RecoTracker_LSTCore_src_alpaka_NeuralNetwork_h +#include "FWCore/Utilities/interface/CMSUnrollLoop.h" + #include "RecoTracker/LSTCore/interface/alpaka/Common.h" -#include "RecoTracker/LSTCore/interface/ModulesSoA.h" -#include "RecoTracker/LSTCore/interface/HitsSoA.h" #include "RecoTracker/LSTCore/interface/MiniDoubletsSoA.h" -#include "RecoTracker/LSTCore/interface/SegmentsSoA.h" -#include "RecoTracker/LSTCore/interface/TripletsSoA.h" #include "NeuralNetworkWeights.h" -namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { - - namespace t5dnn { - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE float runInference(TAcc const& acc, - ModulesConst modules, - MiniDoubletsConst mds, - SegmentsConst segments, - TripletsConst triplets, - const float* xVec, - const float* yVec, - const unsigned int* mdIndices, - const uint16_t* lowerModuleIndices, - unsigned int innerTripletIndex, - unsigned int outerTripletIndex, - float innerRadius, - float outerRadius, - float bridgeRadius) { - // Unpack x-coordinates of hits - float x1 = xVec[0]; - float x2 = xVec[1]; - float x3 = xVec[2]; - float x4 = xVec[3]; - float x5 = xVec[4]; - // Unpack y-coordinates of hits - float y1 = yVec[0]; - float y2 = yVec[1]; - float y3 = yVec[2]; - float y4 = yVec[3]; - float y5 = yVec[4]; - // Unpack module indices - unsigned int mdIndex1 = mdIndices[0]; - unsigned int mdIndex2 = mdIndices[1]; - unsigned int mdIndex3 = mdIndices[2]; - unsigned int mdIndex4 = mdIndices[3]; - unsigned int mdIndex5 = mdIndices[4]; - // Unpack module indices - uint16_t lowerModuleIndex1 = lowerModuleIndices[0]; - uint16_t lowerModuleIndex2 = lowerModuleIndices[1]; - uint16_t lowerModuleIndex3 = lowerModuleIndices[2]; - uint16_t lowerModuleIndex4 = lowerModuleIndices[3]; - uint16_t lowerModuleIndex5 = lowerModuleIndices[4]; - // Compute some convenience variables - short layer2_adjustment = 0; - if (modules.layers()[lowerModuleIndex1] == 1) { - layer2_adjustment = 1; // get upper segment to be in second layer - } - unsigned int md_idx_for_t5_eta_phi = - segments.mdIndices()[triplets.segmentIndices()[innerTripletIndex][0]][layer2_adjustment]; - bool is_endcap1 = (modules.subdets()[lowerModuleIndex1] == 4); // true if anchor hit 1 is in the endcap - bool is_endcap2 = (modules.subdets()[lowerModuleIndex2] == 4); // true if anchor hit 2 is in the endcap - bool is_endcap3 = (modules.subdets()[lowerModuleIndex3] == 4); // true if anchor hit 3 is in the endcap - bool is_endcap4 = (modules.subdets()[lowerModuleIndex4] == 4); // true if anchor hit 4 is in the endcap - bool is_endcap5 = (modules.subdets()[lowerModuleIndex5] == 4); // true if anchor hit 5 is in the endcap - - // Build DNN input vector (corresponding output N-tuple branch noted in parenthetical in comment) - float x[38] = { - alpaka::math::log10(acc, 2 * k2Rinv1GeVf * innerRadius), // inner T3 pT (t3_pt) - mds.anchorEta()[mdIndex1], // inner T3 anchor hit 1 eta (t3_0_eta) - mds.anchorPhi()[mdIndex1], // inner T3 anchor hit 1 phi (t3_0_phi) - mds.anchorZ()[mdIndex1], // inner T3 anchor hit 1 z (t3_0_z) - alpaka::math::sqrt(acc, x1 * x1 + y1 * y1), // inner T3 anchor hit 1 r (t3_0_r) - float(modules.layers()[lowerModuleIndex1] + 6 * is_endcap1), // inner T3 anchor hit 1 layer (t3_0_layer) - mds.anchorEta()[mdIndex2], // inner T3 anchor hit 2 eta (t3_2_eta) - mds.anchorPhi()[mdIndex2], // inner T3 anchor hit 2 phi (t3_2_phi) - mds.anchorZ()[mdIndex2], // inner T3 anchor hit 2 z (t3_2_z) - alpaka::math::sqrt(acc, x2 * x2 + y2 * y2), // inner T3 anchor hit 2 r (t3_2_r) - float(modules.layers()[lowerModuleIndex2] + 6 * is_endcap2), // inner T3 anchor hit 2 layer (t3_2_layer) - mds.anchorEta()[mdIndex3], // inner T3 anchor hit 3 eta (t3_4_eta) - mds.anchorPhi()[mdIndex3], // inner T3 anchor hit 3 phi (t3_4_phi) - mds.anchorZ()[mdIndex3], // inner T3 anchor hit 3 z (t3_4_z) - alpaka::math::sqrt(acc, x3 * x3 + y3 * y3), // inner T3 anchor hit 3 r (t3_4_r) - float(modules.layers()[lowerModuleIndex3] + 6 * is_endcap3), // inner T3 anchor hit 3 layer (t3_4_layer) - alpaka::math::log10(acc, 2 * k2Rinv1GeVf * outerRadius), // outer T3 pT (t3_pt) - mds.anchorEta()[mdIndex3], // outer T3 anchor hit 4 eta (t3_0_eta) - mds.anchorPhi()[mdIndex3], // outer T3 anchor hit 4 phi (t3_0_phi) - mds.anchorZ()[mdIndex3], // outer T3 anchor hit 3 eta (t3_0_z) - alpaka::math::sqrt(acc, x3 * x3 + y3 * y3), // outer T3 anchor hit 3 r (t3_0_r) - float(modules.layers()[lowerModuleIndex3] + 6 * is_endcap3), // outer T3 anchor hit 3 layer (t3_0_layer) - mds.anchorEta()[mdIndex4], // outer T3 anchor hit 4 eta (t3_2_eta) - mds.anchorPhi()[mdIndex4], // outer T3 anchor hit 4 phi (t3_2_phi) - mds.anchorZ()[mdIndex4], // outer T3 anchor hit 4 z (t3_2_z) - alpaka::math::sqrt(acc, x4 * x4 + y4 * y4), // outer T3 anchor hit 4 r (t3_2_r) - float(modules.layers()[lowerModuleIndex4] + 6 * is_endcap4), // outer T3 anchor hit 4 layer (t3_2_layer) - mds.anchorEta()[mdIndex5], // outer T3 anchor hit 5 eta (t3_4_eta) - mds.anchorPhi()[mdIndex5], // outer T3 anchor hit 5 phi (t3_4_phi) - mds.anchorZ()[mdIndex5], // outer T3 anchor hit 5 z (t3_4_z) - alpaka::math::sqrt(acc, x5 * x5 + y5 * y5), // outer T3 anchor hit 5 r (t3_4_r) - float(modules.layers()[lowerModuleIndex5] + 6 * is_endcap5), // outer T3 anchor hit 5 layer (t3_4_layer) - alpaka::math::log10(acc, (innerRadius + outerRadius) * k2Rinv1GeVf), // T5 pT (t5_pt) - mds.anchorEta()[md_idx_for_t5_eta_phi], // T5 eta (t5_eta) - mds.anchorPhi()[md_idx_for_t5_eta_phi], // T5 phi (t5_phi) - alpaka::math::log10(acc, innerRadius), // T5 inner radius (t5_innerRadius) - alpaka::math::log10(acc, bridgeRadius), // T5 bridge radius (t5_bridgeRadius) - alpaka::math::log10(acc, outerRadius) // T5 outer radius (t5_outerRadius) - }; - - // (0): Linear(in_features=38, out_features=32, bias=True) => x = x*W_T + b - float x_0[32]; - for (unsigned int col = 0; col < 32; ++col) { - x_0[col] = 0; - for (unsigned int inner = 0; inner < 38; ++inner) { - x_0[col] += x[inner] * wgtT_0[inner][col]; - } - x_0[col] += bias_0[col]; - } +namespace ALPAKA_ACCELERATOR_NAMESPACE::lst::t5dnn { - // (1): ReLU() - float x_1[32]; - for (unsigned int col = 0; col < 32; ++col) { - x_1[col] = (x_0[col] > 0.f) ? x_0[col] : 0.f; - } + template + ALPAKA_FN_ACC ALPAKA_FN_INLINE void relu_activation(float (&input)[FEATURES]) { + CMS_UNROLL_LOOP + for (unsigned int col = 0; col < FEATURES; ++col) { + input[col] = (input[col] > 0.f) ? input[col] : 0.f; + } + } - // (2): Linear(in_features=32, out_features=32, bias=True) => x = x*W_T + b - float x_2[32]; - for (unsigned int col = 0; col < 32; ++col) { - x_2[col] = 0; - for (unsigned int inner = 0; inner < 32; ++inner) { - x_2[col] += x_1[inner] * wgtT_2[inner][col]; - } - x_2[col] += bias_2[col]; - } + template + ALPAKA_FN_ACC ALPAKA_FN_INLINE float sigmoid_activation(TAcc const& acc, const float x) { + return alpaka::math::exp(acc, x) / (alpaka::math::exp(acc, x) + 1.f); + } - // (3): ReLU() - float x_3[32]; - for (unsigned int col = 0; col < 32; ++col) { - x_3[col] = (x_2[col] > 0.f) ? x_2[col] : 0.f; + template + ALPAKA_FN_ACC ALPAKA_FN_INLINE void linear_layer(const float (&input)[IN_FEATURES], + float (&output)[OUT_FEATURES], + const float (&weights)[IN_FEATURES][OUT_FEATURES], + const float (&biases)[OUT_FEATURES]) { + CMS_UNROLL_LOOP + for (unsigned int i = 0; i < OUT_FEATURES; ++i) { + output[i] = biases[i]; + CMS_UNROLL_LOOP + for (int j = 0; j < IN_FEATURES; ++j) { + output[i] += input[j] * weights[j][i]; } + } + } - // (4): Linear(in_features=32, out_features=1, bias=True) => x = x*W_T + b - float x_4[1]; - for (unsigned int col = 0; col < 1; ++col) { - x_4[col] = 0; - for (unsigned int inner = 0; inner < 32; ++inner) { - x_4[col] += x_3[inner] * wgtT_4[inner][col]; - } - x_4[col] += bias_4[col]; - } + ALPAKA_FN_ACC ALPAKA_FN_INLINE float delta_phi(const float phi1, const float phi2) { + float delta = phi1 - phi2; + // Adjust delta to be within the range [-M_PI, M_PI] + if (delta > kPi) { + delta -= 2 * kPi; + } else if (delta < -kPi) { + delta += 2 * kPi; + } - // (5): Sigmoid() - float x_5[1]; - for (unsigned int col = 0; col < 1; ++col) { - x_5[col] = alpaka::math::exp(acc, x_4[col]) / (alpaka::math::exp(acc, x_4[col]) + 1); - } + return delta; + } - return x_5[0]; - } + template + ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runInference(TAcc const& acc, + MiniDoubletsConst mds, + const unsigned int mdIndex1, + const unsigned int mdIndex2, + const unsigned int mdIndex3, + const unsigned int mdIndex4, + const unsigned int mdIndex5, + const float innerRadius, + const float outerRadius, + const float bridgeRadius) { + // Constants + constexpr unsigned int kinputFeatures = 23; + constexpr unsigned int khiddenFeatures = 32; + + float eta1 = alpaka::math::abs(acc, mds.anchorEta()[mdIndex1]); // inner T3 anchor hit 1 eta (t3_0_eta) + float eta2 = alpaka::math::abs(acc, mds.anchorEta()[mdIndex2]); // inner T3 anchor hit 2 eta (t3_2_eta) + float eta3 = alpaka::math::abs(acc, mds.anchorEta()[mdIndex3]); // inner T3 anchor hit 3 eta (t3_4_eta) + float eta4 = alpaka::math::abs(acc, mds.anchorEta()[mdIndex4]); // outer T3 anchor hit 4 eta (t3_2_eta) + float eta5 = alpaka::math::abs(acc, mds.anchorEta()[mdIndex5]); // outer T3 anchor hit 5 eta (t3_4_eta) + + float phi1 = mds.anchorPhi()[mdIndex1]; // inner T3 anchor hit 1 phi (t3_0_phi) + float phi2 = mds.anchorPhi()[mdIndex2]; // inner T3 anchor hit 2 phi (t3_2_phi) + float phi3 = mds.anchorPhi()[mdIndex3]; // inner T3 anchor hit 3 phi (t3_4_phi) + float phi4 = mds.anchorPhi()[mdIndex4]; // outer T3 anchor hit 4 phi (t3_2_phi) + float phi5 = mds.anchorPhi()[mdIndex5]; // outer T3 anchor hit 5 phi (t3_4_phi) + + float z1 = alpaka::math::abs(acc, mds.anchorZ()[mdIndex1]); // inner T3 anchor hit 1 z (t3_0_z) + float z2 = alpaka::math::abs(acc, mds.anchorZ()[mdIndex2]); // inner T3 anchor hit 2 z (t3_2_z) + float z3 = alpaka::math::abs(acc, mds.anchorZ()[mdIndex3]); // inner T3 anchor hit 3 z (t3_4_z) + float z4 = alpaka::math::abs(acc, mds.anchorZ()[mdIndex4]); // outer T3 anchor hit 4 z (t3_2_z) + float z5 = alpaka::math::abs(acc, mds.anchorZ()[mdIndex5]); // outer T3 anchor hit 5 z (t3_4_z) + + float r1 = mds.anchorRt()[mdIndex1]; // inner T3 anchor hit 1 r (t3_0_r) + float r2 = mds.anchorRt()[mdIndex2]; // inner T3 anchor hit 2 r (t3_2_r) + float r3 = mds.anchorRt()[mdIndex3]; // inner T3 anchor hit 3 r (t3_4_r) + float r4 = mds.anchorRt()[mdIndex4]; // outer T3 anchor hit 4 r (t3_2_r) + float r5 = mds.anchorRt()[mdIndex5]; // outer T3 anchor hit 5 r (t3_4_r) + + // Build the input feature vector using pairwise differences after the first hit + float x[kinputFeatures] = { + eta1 / kEta_norm, // inner T3: First hit eta normalized + alpaka::math::abs(acc, phi1) / kPhi_norm, // inner T3: First hit phi normalized + z1 / kZ_max, // inner T3: First hit z normalized + r1 / kR_max, // inner T3: First hit r normalized + + eta2 - eta1, // inner T3: Difference in eta between hit 2 and 1 + delta_phi(phi2, phi1) / kPhi_norm, // inner T3: Difference in phi between hit 2 and 1 + (z2 - z1) / kZ_max, // inner T3: Difference in z between hit 2 and 1 normalized + (r2 - r1) / kR_max, // inner T3: Difference in r between hit 2 and 1 normalized + + eta3 - eta2, // inner T3: Difference in eta between hit 3 and 2 + delta_phi(phi3, phi2) / kPhi_norm, // inner T3: Difference in phi between hit 3 and 2 + (z3 - z2) / kZ_max, // inner T3: Difference in z between hit 3 and 2 normalized + (r3 - r2) / kR_max, // inner T3: Difference in r between hit 3 and 2 normalized + + eta4 - eta3, // outer T3: Difference in eta between hit 4 and 3 + delta_phi(phi4, phi3) / kPhi_norm, // inner T3: Difference in phi between hit 4 and 3 + (z4 - z3) / kZ_max, // outer T3: Difference in z between hit 4 and 3 normalized + (r4 - r3) / kR_max, // outer T3: Difference in r between hit 4 and 3 normalized + + eta5 - eta4, // outer T3: Difference in eta between hit 5 and 4 + delta_phi(phi5, phi4) / kPhi_norm, // inner T3: Difference in phi between hit 5 and 4 + (z5 - z4) / kZ_max, // outer T3: Difference in z between hit 5 and 4 normalized + (r5 - r4) / kR_max, // outer T3: Difference in r between hit 5 and 4 normalized + + alpaka::math::log10(acc, innerRadius), // T5 inner radius (t5_innerRadius) + alpaka::math::log10(acc, bridgeRadius), // T5 bridge radius (t5_bridgeRadius) + alpaka::math::log10(acc, outerRadius) // T5 outer radius (t5_outerRadius) + }; + + float x_1[khiddenFeatures]; // Layer 1 output + float x_2[khiddenFeatures]; // Layer 2 output + float x_3[1]; // Layer 3 linear output + + // Layer 1: Linear + Relu + linear_layer(x, x_1, wgtT_layer1, bias_layer1); + relu_activation(x_1); + + // Layer 2: Linear + Relu + linear_layer(x_1, x_2, wgtT_layer2, bias_layer2); + relu_activation(x_2); + + // Layer 3: Linear + Sigmoid + linear_layer(x_2, x_3, wgtT_output_layer, bias_output_layer); + float x_5 = sigmoid_activation(acc, x_3[0]); + + // Get the bin index based on abs(eta) of first hit and t5_pt + float t5_pt = innerRadius * lst::k2Rinv1GeVf * 2; + + uint8_t pt_index = (t5_pt > 5); + uint8_t bin_index = (eta1 > 2.5f) ? (kEtaBins - 1) : static_cast(eta1 / 0.25f); - } // namespace t5dnn -} // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst + // Compare x_5 to the cut value for the relevant bin + return x_5 > kWp[pt_index][bin_index]; + } +} // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst::t5dnn #endif diff --git a/RecoTracker/LSTCore/src/alpaka/NeuralNetworkWeights.h b/RecoTracker/LSTCore/src/alpaka/NeuralNetworkWeights.h index d5321fea07a6e..42f7b19f33898 100644 --- a/RecoTracker/LSTCore/src/alpaka/NeuralNetworkWeights.h +++ b/RecoTracker/LSTCore/src/alpaka/NeuralNetworkWeights.h @@ -3,313 +3,255 @@ #include -namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { - namespace t5dnn { +namespace ALPAKA_ACCELERATOR_NAMESPACE::lst::t5dnn { + ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_layer1[32] = { + -1.3837075f, -0.0653152f, -0.7900129f, 0.0714758f, -1.1574365f, -1.4634879f, -0.9317133f, -0.1455518f, + -0.0459635f, -0.2055620f, 0.0586231f, -0.8943899f, -0.1009487f, 0.0166031f, -0.5451909f, -0.1384538f, + 1.2664700f, -1.8996916f, -0.0025585f, -0.1647783f, -1.9019107f, 0.0707104f, -0.2373025f, 0.0357050f, + -0.0048417f, 2.3127339f, -0.0508943f, -0.1116435f, -0.1610904f, -1.6463890f, -1.0739423f, -0.0962902f}; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_0[32] = { - -4.5069356f, -5.8842053f, 1.0793180f, -0.1540973f, -0.4705772f, 6.4027028f, -0.6620818f, -7.0734525f, - 0.6211641f, 4.9630723f, 3.4310920f, -0.8856288f, 4.5843782f, -6.0180559f, 0.0126438f, -1.5725276f, - -0.8549317f, -6.8545237f, -1.2129461f, 3.0617838f, -0.3911322f, 0.0799793f, -2.5398655f, -0.5780622f, - 2.8533990f, -0.1777968f, -2.6457164f, -0.7976936f, 4.5644889f, -2.1747942f, 3.4286616f, -10.1073380f}; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_0[38][32] = { - {6.1269712f, -10.6625051f, 17.4907818f, -0.0019928f, -3.4468415f, 1.6674044f, -7.8957767f, 2.2077549f, - 9.5517254f, -5.1345053f, -30.1643391f, 4.0148559f, -19.8330841f, -18.3806915f, 0.1334764f, 1.6213616f, - -4.1423774f, -15.3062429f, -1.0209556f, 1.5580219f, 0.7426265f, 0.0033929f, 1.3924170f, 0.9196110f, - -0.8995734f, 1.0594707f, 39.4390869f, 8.7642002f, 28.4583893f, -5.9235659f, 3.7221889f, 14.4167147f}, - {1.7863803f, -0.6068707f, 0.3166098f, -0.0608759f, 0.5939785f, 0.4870262f, -3.1375074f, -17.7147388f, - -0.7231818f, -9.3808413f, 2.2070611f, 15.7461920f, 0.9355862f, 2.3942475f, -0.0671409f, 3.5954301f, - -3.0463996f, -2.0748904f, -0.5450584f, -4.4800100f, 0.6074556f, -0.0161482f, 3.0624702f, -4.5688419f, - 2.9881518f, -0.3714012f, -0.0387531f, -0.7699140f, 4.4028845f, 5.0333014f, -4.7350726f, -8.6568584f}, - {5.6548429f, -0.0207700f, 0.1785973f, 0.0881671f, 0.2530097f, -0.1893259f, -0.1105739f, -0.5183877f, - 1.0728362f, 0.1833011f, 1.7765219f, 0.3127359f, 0.0455277f, -0.1442616f, -0.1048361f, -0.1235604f, - -0.1217661f, -0.5487315f, 0.7575656f, -0.1177454f, -17.0993137f, 0.1628031f, 0.2789381f, 0.5304270f, - 0.0837841f, -3.1120780f, 0.0074821f, -0.1648044f, -0.3395336f, 0.3958135f, 0.8718957f, -1.1980486f}, - {0.2401041f, -0.0585765f, -0.0144584f, 0.0411095f, 0.0752229f, 0.0292672f, -0.2437613f, -1.4396472f, - -0.0971315f, -1.7181139f, 0.2417643f, 2.2030578f, 0.0566049f, 0.1081589f, -0.1060181f, 0.3473758f, - -0.7095683f, -0.0345675f, 0.2794849f, -1.1702278f, 0.2622930f, -0.0072611f, 0.5026371f, -1.2882922f, - -0.4712771f, 0.0597130f, -0.0039970f, -0.6050836f, 0.1554724f, 1.0991164f, -0.4975886f, 0.2597970f}, - {0.0766028f, 0.0218421f, -0.1739017f, -0.0076569f, 0.0384461f, -0.1841756f, 0.9677940f, -3.1114254f, - 2.3830564f, 2.0706992f, -0.9643140f, 0.7361387f, -0.0060253f, -0.1554846f, -0.0831100f, 2.8754771f, - -1.4403527f, -0.5281797f, 0.5157787f, 4.2405987f, 0.4807618f, 0.0217647f, -1.2626950f, 0.9145837f, - -0.3931780f, 0.3426280f, -0.0065206f, -0.7510439f, -0.4555758f, 2.7724340f, -1.2173026f, 0.1039017f}, - {0.5685715f, 0.3927337f, 0.4942532f, -0.0671033f, -0.2808350f, -0.0336000f, -1.3983957f, 0.9876546f, - -2.3840380f, 0.7315395f, -2.2009561f, -1.4631602f, -0.4672308f, -0.4994236f, 0.1169335f, -1.1894208f, - -1.2692982f, 0.3303853f, -2.0147655f, -0.9912014f, 1.0042895f, 0.1121151f, -1.0789106f, -2.2821584f, - -6.6459913f, -0.0959398f, -0.0068429f, -2.8177626f, 0.3213172f, -2.6832986f, -4.7613306f, -0.9985733f}, - {1.4419515f, -0.3864825f, -0.6756768f, -0.1273375f, 0.4321181f, 0.3354745f, -0.8236564f, -2.8190827f, - 0.7090831f, 1.9072700f, -3.1834064f, -2.6938572f, 0.5051147f, 1.4382831f, 0.1241910f, -0.7352629f, - 0.7703634f, -1.7556250f, -2.1104112f, 3.0603442f, 1.9873468f, -0.0358815f, -1.0087154f, 3.8253262f, - -0.5466214f, 0.0875162f, 0.2691758f, 0.7121435f, 1.9314718f, -0.1580560f, 3.6484149f, -5.3173709f}, - {6.9104381f, -0.0033664f, -1.4405546f, -0.1768288f, 0.2028089f, -0.1012344f, -4.4735684f, 0.6354278f, - 4.3039737f, 0.2056303f, 1.8338999f, -1.1351355f, 0.1015760f, -0.0733253f, -0.0561627f, 2.5292397f, - 1.6314448f, -0.9333628f, -0.7773662f, 0.8313186f, -0.7829623f, 0.1265118f, 0.5922315f, -0.3463379f, - -1.3269740f, -3.3302619f, -0.0061799f, 2.3374722f, 0.0880938f, 0.7470241f, -0.4205743f, -4.7557602f}, - {0.0380794f, 0.0947470f, 0.0419397f, 0.0582226f, -0.0603404f, 0.0234028f, -0.2575402f, 0.4125248f, - 0.3035339f, 0.2663808f, -0.6092452f, -1.4727812f, 0.0247187f, -0.0539688f, -0.0150413f, 0.2094955f, - 0.5379737f, -0.3255228f, -0.5639279f, 0.0786276f, 0.6703192f, 0.1557026f, -0.2753083f, 1.1463971f, - -0.9372965f, 0.5657740f, 0.0041413f, 0.0870248f, 0.0101520f, -0.8214461f, 0.1212932f, 1.5648646f}, - {-0.0969819f, 0.0137566f, 1.3515147f, -0.0155047f, -0.1416170f, -0.1636726f, 0.5184190f, 0.4732984f, - 0.6815788f, -1.0522166f, -0.4486531f, -0.0516016f, 0.0201894f, -0.0849667f, -0.0861271f, -1.2027841f, - 1.2458711f, -0.7061657f, 1.0381308f, -0.3450044f, -0.1300479f, -0.0828402f, 0.6859242f, -1.0575374f, - 0.6947553f, -0.0922188f, 0.0199132f, 0.8038982f, -0.1734094f, -0.1057449f, 1.6305015f, -0.0688597f}, - {-1.8151448f, 0.1024327f, 1.7063105f, 0.1130912f, -0.1081472f, -0.2904744f, -1.3465070f, -1.0455177f, - -0.4581082f, -3.2220871f, 0.5221398f, -5.1637673f, 0.0811146f, -0.1326323f, -0.0379338f, -3.0439703f, - -2.4246936f, -0.3670847f, -3.1256330f, -1.6595014f, -3.4715190f, -0.1526113f, -1.0420206f, 0.9536474f, - -3.2932863f, 1.6048199f, 0.0025162f, -3.6049840f, 0.0604250f, -2.2404826f, 1.8406851f, -3.1381185f}, - {1.2985691f, -1.1044264f, 0.9062797f, -0.0788333f, 0.2694912f, 0.0032800f, -0.0574267f, 0.9734111f, - 1.1532565f, 2.6786125f, -3.8574269f, -2.2871449f, -0.1261243f, 1.0545347f, -0.1454154f, -0.5609738f, - 1.8385800f, -0.8035598f, -1.7668265f, 5.1665063f, 0.7966110f, 0.0940206f, -2.3943975f, 2.3344002f, - 1.0342182f, 0.4806454f, -0.3880928f, 0.6998246f, 1.4011886f, -1.7313483f, 4.9702630f, -6.0058608f}, - {1.0300356f, 0.0616315f, -0.1113776f, -0.1694220f, 0.7159944f, 0.0626456f, 2.0994680f, 0.3452290f, - -3.0487001f, 0.0654031f, -1.1510723f, 0.5370992f, -0.0290704f, -0.0300795f, 0.0751569f, -0.2345951f, - -0.3472281f, 0.4424143f, 1.2444530f, -0.2114656f, 0.7865694f, -0.0709381f, -0.1839961f, -0.0529834f, - 0.5867608f, -3.8793530f, -0.0814745f, -0.6368676f, 0.0361213f, -0.5549288f, 0.5661780f, 1.8374584f}, - {0.3345098f, 0.0068199f, -0.4205509f, -0.1088801f, -0.1043202f, -0.0040804f, 0.3400922f, 0.2673528f, - -0.6050695f, 0.4443954f, -0.4319905f, -0.6044132f, -0.0260679f, 0.0137036f, 0.0765494f, -0.0095099f, - 0.5880439f, -0.0083854f, -0.2407522f, 0.1942379f, 0.6554548f, -0.1322891f, -0.8298992f, 0.7909554f, - 1.0528831f, 0.1970959f, 0.0754069f, -0.0947960f, -0.0279494f, -0.5888316f, 0.8919419f, 0.4828835f}, - {0.3995822f, -0.2139665f, 0.3982936f, -0.1285759f, -0.3445527f, -0.1167238f, -0.1263519f, 0.8393803f, - -0.7758383f, 0.0719291f, -0.0134762f, 0.1715237f, 0.0796666f, 0.1023507f, -0.1172728f, -1.2364722f, - 1.2592632f, -0.3168479f, 0.7487004f, -1.5170647f, -0.2235429f, -0.1620898f, 1.4064828f, -1.0821995f, - 0.0740103f, -1.0412805f, -0.0621277f, 0.2439800f, 0.2684972f, -1.1661061f, 0.7859434f, -0.6170313f}, - {2.1615884f, 0.1431713f, 0.0642652f, -0.0522325f, -0.2658786f, -0.0245810f, -1.6857448f, -0.6685011f, - -0.6978170f, -0.8716729f, 0.3129902f, -2.5870812f, -0.2855283f, -0.3205920f, -0.0084069f, 1.3182145f, - -0.6923816f, -0.3730274f, -2.3638811f, -1.1128502f, -2.4709859f, 0.1349022f, -0.3574466f, -0.6597407f, - -4.1122031f, 0.2240651f, 0.1806145f, -1.6836300f, -0.0766231f, -3.2611966f, 0.0091456f, -0.0997367f}, - {5.2476101f, -0.1966512f, 4.8935304f, -0.1551689f, 1.6919724f, -0.8324367f, 14.3318472f, -0.3503132f, - 10.3614969f, -9.1522884f, -0.2543063f, -1.8476851f, 16.7961140f, 9.9541416f, -0.0434563f, -9.6973553f, - -5.0469398f, 6.1688442f, 7.6429725f, -7.3149266f, 1.2345183f, 0.1412155f, 0.7114770f, -1.6378664f, - 5.1548996f, 0.3686100f, -45.3027611f, 3.0492647f, -37.3445892f, 2.7421410f, -2.7958770f, -25.2034016f}, - {1.4597454f, -1.0561740f, 0.9751291f, 0.0446527f, 0.3691662f, 0.1006782f, 0.1418435f, 0.8871480f, - 1.1603093f, 2.8034730f, -4.0856910f, -1.9786842f, -0.2206208f, 0.9539357f, 0.0868183f, -0.6811873f, - 1.9642411f, -0.8065316f, -2.0244894f, 5.2936082f, 0.6120632f, -0.1194160f, -2.3925939f, 2.5555069f, - 1.0149733f, 0.4607603f, -0.2197217f, 0.5703423f, 1.4049014f, -1.5900208f, 5.1645074f, -6.0569463f}, - {0.9000676f, -0.0028781f, -0.1967366f, 0.1039593f, 0.7993248f, 0.0655172f, 2.2296758f, 0.4391927f, - -3.0292840f, 0.0334536f, -1.1728534f, 0.3479103f, -0.1190938f, 0.0410203f, 0.1146637f, -0.2958017f, - -0.3240463f, 0.4361866f, 1.0564958f, -0.1989332f, 0.5194008f, -0.0628912f, -0.1733121f, -0.1255383f, - 0.5990249f, -3.7692382f, 0.0995128f, -0.7101220f, -0.0785123f, -0.3514554f, 0.6662078f, 2.0991604f}, - {0.1781942f, -0.1873588f, -0.4653996f, -0.0153059f, -0.1399561f, -0.0498718f, 0.4552556f, 0.2300792f, - -0.7682312f, 0.4342302f, -0.3787803f, -0.6089386f, -0.1049337f, 0.0395331f, 0.0220332f, 0.0114750f, - 0.4672548f, 0.1284784f, -0.2472819f, 0.2892784f, 0.4788667f, 0.0472555f, -0.6593549f, 0.6508777f, - 0.9286987f, 0.3043948f, -0.0635985f, 0.0814399f, -0.1168853f, -0.6688027f, 0.8876534f, 0.4865684f}, - {0.4024099f, 0.0480259f, 0.4588822f, -0.1793082f, -0.2151573f, -0.1871128f, -0.1502780f, 1.1011307f, - -0.9467706f, 0.2632496f, -0.1257263f, -0.0241331f, 0.2280627f, 0.0878608f, -0.1334262f, -1.1642927f, - 1.0943586f, -0.4799654f, 0.5981907f, -1.5051398f, -0.4235946f, 0.0012827f, 1.2342577f, -0.8281875f, - 0.2776567f, -1.0362227f, 0.0408372f, 0.1540821f, 0.1777556f, -1.2684357f, 0.8836584f, -0.4001710f}, - {2.1558056f, 0.2082023f, 0.0863442f, 0.0364868f, -0.3985825f, 0.0307202f, -1.8889453f, -0.5614714f, - -0.7311882f, -0.8075573f, 0.4895108f, -2.7770483f, -0.3121874f, -0.1671291f, -0.1281284f, 1.3212786f, - -0.5310181f, -0.1974759f, -2.6240873f, -0.8320529f, -2.3875966f, -0.0286360f, -0.6263188f, -0.6553424f, - -4.1658955f, -0.0601300f, 0.0946256f, -1.6795633f, -0.1251303f, -3.0974686f, 0.2412274f, -0.0687501f}, - {2.0523887f, -0.6387668f, 2.0633900f, -0.0550964f, 0.5181718f, -0.4202190f, 1.8569367f, 0.8295385f, - 0.8555872f, 2.4727983f, -0.2072828f, -1.9006120f, 0.5379534f, 0.4463673f, 0.1468820f, 0.4918649f, - -3.4016700f, 0.2884440f, -1.9418719f, 4.5157170f, -0.5160927f, -0.0199372f, 3.1353824f, -0.9863126f, - -1.5135859f, 0.7576568f, 0.6715558f, 2.7409093f, 0.9291748f, -0.3247162f, 1.8204515f, -8.9181070f}, - {-0.1428107f, -0.0829889f, 0.4213613f, 0.0225415f, 1.2238166f, 0.0477106f, 0.3031853f, -0.7466553f, - 2.0663500f, 0.7588379f, 0.3689216f, -0.2003786f, 0.1242338f, 0.1693589f, -0.0351716f, -0.0186597f, - -0.0189417f, 0.5468715f, -0.2862698f, -0.1311738f, 3.0747476f, -0.0310747f, 0.0943165f, 0.3139819f, - 0.6274695f, -1.8314874f, 0.0147495f, 0.3554756f, 0.3829916f, 0.4891713f, 0.1328600f, 1.0535098f}, - {0.0534900f, 0.1787969f, -0.0571320f, -0.0685673f, 0.1968977f, 0.0374476f, 0.7876674f, 0.0828491f, - 0.6444036f, -0.2203166f, -0.2383427f, 0.5397566f, 0.0106769f, -0.1230072f, -0.0135021f, -0.5691944f, - -1.5040319f, 0.0406933f, -0.0025478f, 0.9251419f, -1.7180276f, -0.1112956f, 1.4840862f, 0.0407115f, - -0.0100329f, 0.0583593f, -0.0110524f, 0.7431355f, -0.0971857f, -0.5501527f, -0.6371027f, -0.1935233f}, - {-0.6455778f, 0.2317368f, 0.9285696f, -0.1415854f, 0.0822560f, 0.2488030f, -2.6992166f, 0.0884904f, - 0.6735302f, -0.1467820f, 0.5641044f, 0.6436581f, 0.0818401f, -0.0336634f, -0.0729000f, -0.1206900f, - -2.5739892f, 0.5776953f, 0.9531668f, -1.2362405f, -0.0615577f, -0.0143544f, -2.7525210f, 1.3738545f, - 0.2751348f, -1.7463943f, -0.0020144f, 2.4814103f, 0.1716725f, -0.7055540f, -0.3474010f, 0.4482578f}, - {-0.2526205f, -0.7463821f, -3.6076138f, -0.1511098f, 0.1216256f, 0.0888247f, -1.0190924f, -1.3260181f, - -0.0443211f, -4.8911066f, -3.4385188f, -6.0057454f, 0.3340450f, 0.2997236f, -0.0907855f, 0.7500492f, - -0.4007562f, 1.9382039f, 0.5687234f, 2.6511824f, 4.7703862f, 0.0006749f, -0.0201394f, -3.5885489f, - -4.1518898f, 0.0807014f, -0.0584071f, -0.8100027f, 0.7697087f, -0.8038046f, -1.2945876f, -4.0110312f}, - {0.4337017f, -1.1532011f, 2.0740633f, 0.0271806f, 0.6654227f, 0.1012998f, -4.0791736f, 1.2631345f, - 1.9511020f, 2.3272331f, 1.2707534f, 1.6306664f, 0.4936035f, 0.8285242f, 0.0807625f, 3.8652387f, - 0.0281145f, 1.6877037f, 1.2557380f, -0.3036775f, 0.5604967f, 0.1551418f, -0.9599600f, -6.3067718f, - -0.6352320f, 0.8058553f, 0.3657880f, -2.0491202f, -0.3926269f, 2.5650854f, 1.3697821f, -8.3070078f}, - {5.1334143f, -0.0351738f, -0.4774780f, -0.0679726f, 1.4569254f, 0.0580191f, -0.3649136f, -0.2298838f, - -3.3826666f, -0.7392708f, -0.6036060f, -0.2612940f, -0.1877640f, -0.1145124f, -0.0042578f, -0.0311193f, - -0.0320479f, 0.5270581f, -0.4324475f, 0.2681437f, 4.7813129f, -0.0222701f, -0.0525629f, -0.2861001f, - -0.1251072f, 3.9112861f, 0.0045046f, -0.0426071f, -0.3299106f, -0.0686970f, -0.1602017f, -0.0070103f}, - {-0.6633690f, 0.0103367f, 0.5998458f, 0.1256577f, -0.0359184f, -0.0176820f, -0.6458368f, -0.0370536f, - 0.3542259f, 0.1394724f, 0.8255956f, 0.2501569f, 0.0320156f, -0.0256806f, 0.0277949f, 0.0036392f, - 0.2825173f, 0.1400358f, 1.0011463f, -0.6792242f, 0.0672508f, 0.0728705f, -0.1089695f, -1.0414587f, - -0.4135485f, 0.4293025f, -0.0041241f, -0.9564193f, 0.0314900f, 0.8658463f, -0.7734696f, -0.7610567f}, - {-0.0200122f, -0.0749178f, -1.5026549f, -0.0387432f, -0.0713735f, 0.1214790f, 1.8730290f, -0.0552839f, - -1.6867150f, 0.2282097f, 0.7161849f, -0.1018546f, -0.1092003f, 0.0365504f, -0.1326883f, 1.2310545f, - 0.1800210f, 0.7024739f, -2.9606545f, 1.2275347f, -0.2050014f, 0.0940569f, 0.4761694f, 0.8812068f, - -0.0083424f, -1.5406264f, 0.0061815f, -2.7606382f, 0.0248556f, 1.1086880f, -1.3608936f, 1.0795454f}, - {0.9734020f, 0.3905411f, -3.7008634f, 0.0013557f, 0.1649124f, 0.9935362f, 1.3489184f, 0.9505764f, - 0.7966231f, -0.1627246f, -2.5754328f, 1.4892205f, 0.8586300f, 0.6974363f, 0.1320204f, -0.7840260f, - 0.3121157f, 0.0966901f, 2.7447381f, 1.8256680f, 0.7229405f, -0.1723188f, 0.9145948f, -2.1376033f, - 0.5259342f, 0.0731194f, -0.2908303f, -0.2603913f, -0.2326528f, 3.6684167f, -0.2883157f, -2.8546307f}, - {-4.8917460f, 6.7944999f, -0.2255474f, 0.1051999f, 3.9000113f, 2.0624907f, 5.3019547f, 10.0209141f, - 1.1268179f, 2.2669628f, -6.5002980f, 1.8408583f, 5.3039579f, 2.2055962f, 0.1055369f, 1.7230233f, - 6.9605255f, 7.7025104f, 2.9880707f, -0.9274251f, -0.2287160f, -0.0206735f, 0.6885675f, 2.8179996f, - -7.1129837f, -1.3772345f, 3.8655453f, -5.9388318f, -0.0469947f, 7.2763596f, -6.3536129f, -17.0069847f}, - {1.8787041f, -0.9953383f, -1.4839923f, 0.1308209f, 0.3657510f, 0.3106483f, -1.4158971f, -6.7449651f, - 0.6553892f, -4.5046172f, -3.5489719f, 3.5363002f, 0.5454772f, 2.3521471f, 0.1612140f, -0.9744226f, - 0.6546553f, -2.7179255f, -1.7758157f, 0.3089439f, 1.7462813f, 0.1654593f, -0.2440207f, 3.9501827f, - 1.3750844f, 0.0596805f, -0.1977254f, 0.0264880f, 2.6396444f, 1.0816911f, 3.6413448f, -6.0299959f}, - {-4.1295738f, 0.1044480f, 0.2131937f, 0.0420826f, 0.5292229f, 0.0090477f, -0.0973486f, 0.9596778f, - 2.9579651f, -0.6364226f, -1.7556342f, 0.1539868f, -0.1273174f, -0.1348504f, 0.1257833f, -1.4168571f, - -1.0960362f, 0.0482449f, -1.4395387f, -0.2524115f, -2.9162085f, -0.0451428f, -0.4021681f, -0.5756381f, - 0.0515293f, -3.1996479f, -0.0007676f, -1.3878343f, -0.2864279f, -0.9579773f, -1.0999249f, 1.6500067f}, - {-2.4806111f, -6.8115449f, 3.2805641f, 0.1187415f, -0.9950783f, 6.2553434f, -1.6450261f, -6.1463733f, - 2.7507148f, 4.2995782f, 0.0461297f, -0.5417359f, 2.4306326f, -7.3530145f, 0.0698273f, -0.9394333f, - -1.3595498f, -7.5141478f, -1.4911395f, 3.2300410f, 0.1203540f, 0.0314884f, -2.0116949f, -0.8167119f, - 2.4133310f, 0.1920709f, 1.0619365f, 0.2459123f, 6.9166069f, -2.6384118f, 3.6829739f, -7.2385545f}, - {0.9408096f, 14.9067144f, 1.7709646f, 0.1105646f, -0.5600107f, -15.3188124f, -12.3718462f, -1.8893757f, - 13.6364670f, -5.7327847f, -14.1805468f, 1.0581509f, -14.2186184f, 14.8948650f, 0.0190344f, 5.4395180f, - 6.7243400f, 9.8468456f, 4.5144215f, -1.4551491f, 1.1032411f, -0.0317988f, 2.3398454f, -3.1671596f, - -7.7541409f, 1.1255593f, 6.7340465f, -4.4448423f, -9.1472626f, -3.1959128f, 4.4181323f, -2.7904994f}, - {-2.1621978f, -4.7202382f, 1.7378219f, 0.1417439f, -0.5000908f, 5.4468708f, 1.4260571f, -6.6136570f, - 1.5713804f, 3.4479704f, 2.7354901f, -0.7388076f, 5.4666147f, -3.8697338f, -0.1368596f, -2.7903373f, - -1.2043713f, -4.9554005f, 0.3324645f, 1.6767365f, 0.1156244f, -0.0326964f, -2.0945346f, -0.4590589f, - 3.0942657f, 0.0015020f, -6.2626700f, -0.3969755f, 0.7717427f, -1.9667094f, 2.9664171f, -11.9477053f}, - }; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_2[32] = { - 9.8383608f, 3.6922295f, 3.5774977f, -4.4619012f, 6.5087032f, -0.9540017f, -0.5059246f, 0.0706402f, - 14.3396597f, -0.2771132f, -4.8409863f, -8.3581600f, -3.5078344f, 4.3287506f, -5.7808843f, 3.9264839f, - -2.1697845f, -0.0040514f, -0.2095029f, -6.8678174f, 1.7911285f, -0.4510343f, 1.2410443f, -4.5678806f, - -0.5693849f, 2.3320096f, 4.4606552f, -6.3771009f, -4.3149071f, -0.1905672f, -3.5726390f, -1.0744030f}; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_2[32][32] = { - {-0.0155548f, 0.0243339f, 0.0037967f, -0.2771824f, 0.0111955f, -0.0115980f, 0.0079653f, -2.9803498f, - -0.0061037f, -0.0956634f, 0.0332446f, 0.0179244f, -0.0080377f, -9.0180779f, 0.1720033f, 0.0350694f, - -0.0146588f, -0.2135506f, -0.3158041f, 1.3697664f, 0.0119146f, 0.0119120f, -0.0986927f, 0.0297492f, - 0.0355827f, -0.1196868f, -0.0745119f, 0.0281862f, -0.0422190f, -0.3069138f, -0.0477367f, -0.0550450f}, - {-1.7374619f, 1.4822800f, -2.1885235f, 1.8354234f, -0.5380136f, 1.6621803f, 0.6251035f, 0.1008954f, - -0.8387129f, -0.2063313f, 1.0661691f, -0.9799694f, -5.1710258f, -3.2260630f, -1.5073707f, -1.0792168f, - 1.8569958f, -0.2289213f, 0.0563821f, -1.6398847f, -4.1649504f, -2.7527378f, -0.0134577f, 3.0424533f, - 0.0364320f, 0.6762254f, -3.1551330f, 2.4888904f, 1.4757305f, -0.3141717f, -2.0126467f, -0.1675602f}, - {-0.9571826f, 0.0914152f, 0.0404339f, 0.2927902f, 0.2933607f, 0.0619171f, 0.0772318f, -1.3796169f, - -0.8194544f, -0.2179988f, -1.1241078f, -0.1443964f, 0.0559355f, -1.2914546f, -0.3445117f, 0.2031156f, - 0.0273864f, -0.0193422f, -0.2136522f, 0.0429592f, 0.0212854f, 0.0414394f, -1.1734651f, 0.0582848f, - 0.0136039f, -0.1892604f, 0.0764908f, -0.0130132f, -0.1272559f, -0.0818855f, -0.0408583f, -0.1563294f}, - {-0.0213695f, 0.0596942f, -0.0641309f, -0.0146449f, 0.0416586f, -0.0378931f, 0.1234860f, 0.1622967f, - 0.0794091f, -0.0639933f, -0.1030663f, 0.0579078f, 0.1050275f, -0.0136866f, 0.0149978f, 0.0876813f, - 0.0693554f, 0.1612417f, -0.0595916f, -0.1008234f, -0.0579058f, 0.0915138f, 0.1321436f, -0.1484535f, - -0.0920316f, -0.0024532f, -0.1045300f, 0.0924260f, 0.0277524f, -0.0287276f, -0.1271127f, 0.1164243f}, - {0.0713067f, 0.0198056f, -0.3023696f, -0.0025908f, -0.0085885f, -1.1157553f, 0.0236462f, -0.0704844f, - -0.0189257f, -0.0997382f, 0.3379845f, -0.1229390f, -0.0616165f, -0.8968034f, 0.0401445f, -0.1144476f, - -0.0532077f, 0.0604580f, 0.0609454f, -0.1613472f, 0.0103525f, -0.1653874f, 0.0205189f, 0.0758978f, - -0.1514593f, 0.0151441f, 0.2043469f, 0.0349607f, -0.1361278f, -0.1255922f, 0.0631648f, 0.3570991f}, - {0.3371337f, -3.7541580f, 2.2215877f, -0.3390516f, 0.1912718f, -4.1861577f, -1.2264019f, 2.8179801f, - 0.0667294f, -0.0093539f, 2.3029909f, 3.1814916f, 3.9780347f, 0.2310601f, 0.3986159f, -0.8544636f, - 0.4139664f, -0.1876569f, -0.2448732f, -2.8053334f, 4.0488625f, 2.1094146f, -6.7310257f, -4.9950023f, - -0.8315823f, 0.0555959f, 2.4573720f, -3.7234364f, -4.2910552f, -0.2995245f, -3.2605181f, 2.3620574f}, - {-1.5522735f, -0.1866350f, -0.0067679f, 0.3196557f, 1.4052233f, 2.8143549f, -0.9992948f, -0.5309914f, - -25.8852596f, -0.1218249f, 0.6625420f, 0.3007106f, -0.2767264f, -0.1847300f, -0.5313534f, -0.0383462f, - -0.1987552f, 0.0581405f, -0.3376078f, 1.2621028f, 0.0818709f, -0.1401216f, -0.4550788f, -0.1592657f, - 0.0597123f, 0.1344101f, -0.1005317f, -0.1538406f, 2.9142656f, -0.0806051f, -0.4267367f, -31.9512234f}, - {0.6859627f, 0.1212986f, 0.1291616f, 0.0459838f, -0.0899920f, 0.0287645f, 0.1987007f, -2.7079368f, - -0.2628384f, -0.1402464f, -0.6302179f, -0.2923960f, -0.1106663f, 0.8256195f, -2.8054097f, -0.0296494f, - -0.5632019f, -0.1335654f, -0.1558440f, -6.8611612f, 0.0203786f, 0.0046566f, -0.4401442f, -0.0471430f, - 0.4535986f, -0.8657981f, 0.0684740f, 0.0518814f, -0.0123748f, -0.2270164f, 0.0922878f, -0.3863277f}, - {0.0127175f, 2.3346109f, -0.4390767f, -0.4657893f, 0.1659466f, -0.1132782f, -0.4928388f, 0.7652873f, - 1.1510741f, -0.0879600f, 0.2721785f, -0.1878961f, -0.3477249f, -0.8473209f, -0.8931856f, -0.4328294f, - -11.9181929f, -0.0282545f, -0.0217915f, 1.6676594f, -0.2122232f, -0.6190930f, 1.9053432f, -0.7592348f, - -1.0739189f, -0.7170524f, 0.3864411f, -0.8849231f, 0.1393488f, 0.0738489f, 0.4460345f, 1.9020857f}, - {0.4453296f, -0.0767821f, 0.1638939f, 1.6997167f, -0.1098599f, -0.0551604f, 0.0040561f, -13.5290670f, - -0.1285677f, -0.0590394f, 0.6499141f, -0.7617344f, 0.0453151f, 0.3104213f, -1.0711143f, 0.1361838f, - -0.4365610f, -0.1300649f, 0.2013344f, -0.5308123f, 0.1451896f, 0.1030715f, -0.6487910f, -0.3136590f, - -0.0280079f, 0.5394178f, 0.1318262f, -0.0159292f, 0.0636870f, -0.3224248f, -0.1868187f, -0.2468304f}, - {-0.0333494f, -0.0834255f, -0.1221875f, 0.6861304f, 0.0521738f, -0.0416543f, -0.4437352f, -19.3246250f, - -0.1520821f, 0.0528602f, -0.6375434f, -0.5803806f, -0.0958465f, -2.0058544f, -0.8282642f, 0.0259000f, - 0.4846996f, 0.1211179f, 0.0356884f, 1.0009497f, 0.0635682f, -0.0314105f, -0.0011147f, 0.0131714f, - -0.3410152f, 0.2798154f, 0.0961889f, 0.1266228f, -0.0934717f, -0.0904307f, 0.1355542f, 0.5722573f}, - {0.2146454f, 0.2143834f, 0.1290650f, -0.9063646f, 0.2100945f, 0.1331054f, -0.2620614f, -0.1264993f, - 0.1313979f, 0.0455465f, -0.8395286f, -0.4967833f, -0.0538581f, 0.9155380f, 0.6627046f, 0.1691243f, - 0.9887002f, -0.1597013f, -0.1236713f, -1.9041336f, 0.0427585f, 0.0849747f, -5.2559652f, -0.3133100f, - 0.0141170f, -0.1635530f, 0.4938746f, 0.0162943f, 0.2107756f, -0.3413893f, -0.0657575f, 1.0542560f}, - {-2.8868380f, -2.0837426f, -1.0611480f, -0.6143807f, -0.6398501f, -2.8018746f, 0.5166737f, -1.0814301f, - -1.9272422f, -0.1017482f, -0.4651161f, -1.4021232f, 1.8854499f, 0.1815407f, 0.5965426f, -2.3344259f, - -0.0690846f, -0.1678239f, -0.4219488f, 0.6215640f, 1.0270095f, -0.3473049f, -0.3926674f, -0.7942593f, - 1.1305071f, -1.4621233f, -0.8051161f, -0.7698632f, -2.6038630f, -0.3090037f, -1.6365144f, -1.0179478f}, - {0.0046026f, 1.1319581f, -2.6405678f, -2.0353596f, -2.1687336f, 0.3364883f, 2.1122196f, 0.2584647f, - -2.4344857f, -0.0378498f, 0.6158544f, -0.6060749f, -4.9598379f, 0.1570698f, 2.2436838f, -2.6198347f, - -2.0935996f, -0.1845744f, -0.0716080f, -1.9338604f, -4.1995640f, -3.6706774f, -1.6762524f, 3.9646862f, - -0.9677961f, 1.8319578f, -3.1916575f, 3.7312632f, 0.0820446f, -0.0497568f, -0.0898171f, -0.2499462f}, - {-0.0780375f, -0.0286571f, 0.1007227f, 0.0012229f, -0.0531285f, 0.0840718f, 0.1013894f, 0.1312424f, - -0.0673772f, 0.1603183f, 0.0074385f, -0.0718321f, -0.1549873f, 0.1616689f, 0.0405887f, -0.1558588f, - 0.0740745f, 0.1696893f, -0.0064026f, -0.1656420f, -0.1186674f, -0.1262667f, -0.0784757f, -0.1280154f, - 0.0909976f, 0.0853046f, -0.1075811f, 0.1310615f, 0.0610194f, 0.0647223f, 0.1360559f, 0.0440074f}, - {-0.2106480f, 0.0087131f, 0.1119385f, -1.0611318f, 0.5250220f, 0.0525479f, -0.2733742f, -1.0799565f, - -0.5601607f, -0.0651806f, -1.9793440f, -0.3373334f, -0.1550518f, 0.8932216f, 0.7264332f, -0.0450735f, - 1.2373760f, -0.1236272f, 0.0680048f, -3.0446634f, -0.1533586f, -0.0127355f, -0.3326311f, -0.0225603f, - -0.2265739f, -2.3752897f, -0.3771705f, -0.0728938f, 0.1741305f, 0.1111639f, 0.4131119f, 0.2239323f}, - {-2.5691276f, -1.4011253f, -2.0640867f, -3.7236946f, 1.5542637f, -0.9456654f, -1.7575809f, 3.6794879f, - -0.4439790f, -0.1009826f, 3.6702275f, -0.1935008f, -0.4423219f, -0.3825364f, -0.4784791f, 0.5927492f, - -2.3482494f, 0.0801714f, -0.1567418f, -1.7934613f, -0.1706410f, -0.6326947f, 0.6260155f, 0.3631033f, - -0.9325932f, 1.9647995f, -1.3409088f, 1.3501998f, 0.0367797f, -0.1744210f, 1.8690013f, -1.0737898f}, - {-0.5934777f, 0.6232591f, -0.3391055f, 0.2640936f, -0.2824444f, 0.4815128f, 0.6625078f, -0.1103976f, - 0.9555223f, -0.0624896f, -0.6778919f, 0.1181502f, -0.5425385f, 0.7297349f, -1.7261271f, -0.2917557f, - 1.1873137f, -0.2725933f, 0.0975242f, 1.7756181f, -0.5735835f, -0.4453230f, 0.9800369f, 0.9344145f, - -1.8692539f, 0.0120440f, -0.7315661f, 0.6250805f, 0.3839143f, -0.0376306f, 0.3816243f, 0.6059195f}, - {0.5522162f, -1.8043815f, -10.9379101f, 0.5719097f, -0.2246755f, -1.4856353f, 0.4877502f, 0.7163438f, - -11.8135147f, -0.0180790f, -0.9928634f, 0.1107815f, -0.0005064f, -0.3824990f, -0.7453306f, -1.9909632f, - -7.4362645f, -0.0245507f, -0.1815712f, -3.5507584f, -0.0075889f, -11.0296011f, -1.1292133f, -0.0710276f, - 0.5675677f, 0.2017778f, -0.0684891f, -0.0367653f, -1.6674192f, 0.0281711f, -0.8356591f, -0.0447807f}, - {0.2537312f, -3.0178010f, -0.3493635f, 1.8573236f, 0.4017631f, 0.9912633f, -0.8625028f, -0.7783228f, - -1.7815375f, -0.1204695f, 1.8551122f, 0.3344182f, -0.2828701f, -1.3226960f, -1.4470471f, 0.2895959f, - 0.6780876f, -0.2010069f, 0.0425280f, -2.1786852f, -0.1274053f, -0.2549899f, -0.2233993f, -0.1561645f, - -0.4640818f, 0.6375850f, 0.7733670f, -0.2388286f, 1.0447853f, -0.1503223f, 0.3823584f, -13.8176088f}, - {0.2575197f, -2.2127593f, -0.0389457f, -0.0215759f, 0.1659477f, -0.0097748f, -0.1935415f, -0.9091369f, - -0.1453371f, 0.0442428f, -0.1206519f, 0.1435609f, -0.0186047f, -5.0154042f, 0.0538177f, 0.0403250f, - 0.0240955f, 0.0331080f, 0.0517951f, 0.7422639f, 0.0069818f, 0.0248351f, -0.2205741f, -0.0082387f, - 0.2043269f, 0.0459435f, 0.0876343f, 0.0140607f, 0.1056308f, 0.0062555f, 0.0184278f, -0.5539715f}, - {-0.0398742f, 0.1075264f, 0.1725024f, -0.0755192f, -0.0360048f, 0.1325573f, 0.0903103f, -0.0882263f, - 0.1207692f, 0.0032722f, 0.0048489f, -0.1257241f, 0.1450990f, -0.0713558f, 0.1116815f, 0.1107689f, - -0.1447252f, 0.1581838f, -0.0160124f, -0.0425587f, 0.1411217f, 0.0865060f, -0.0643460f, -0.0431262f, - -0.1452804f, -0.0195101f, 0.1234572f, 0.0520887f, 0.1117576f, -0.0751791f, 0.1511539f, 0.1224861f}, - {0.7728126f, 2.3075340f, -0.0385258f, -3.1270287f, 0.9414487f, 3.5251477f, -0.8043440f, 0.7212446f, - -7.6850162f, -0.1609414f, -3.7687578f, -1.0751100f, -0.2052089f, 5.0728245f, 2.2835267f, 0.5930225f, - 0.1303335f, -0.1428799f, -0.3715075f, 0.5136011f, -0.4755619f, -0.2192461f, -3.8696294f, -0.0062392f, - -1.3774812f, -0.0034140f, -1.5944362f, 0.9773729f, 3.2859125f, -0.1616932f, -1.2785367f, -13.5732412f}, - {0.5535743f, 0.1461481f, -0.2218016f, -0.2971808f, -0.2169309f, 0.1564545f, -0.0390397f, 1.1558976f, - -0.0119933f, -0.0774637f, 1.1907971f, -0.5127968f, -0.0066028f, -1.6794037f, -0.3650940f, 0.2555613f, - -0.9488379f, 0.0449603f, -0.1620417f, 0.1583214f, 0.0000908f, 0.0152763f, -1.0660053f, -0.0139402f, - -1.7440189f, 0.2515209f, 0.3333162f, 0.1904725f, 0.1116094f, -0.2287960f, -0.0007165f, -1.7047704f}, - {-5.9897852f, -0.1316296f, -0.0218074f, -0.4602887f, 0.3288545f, -0.0882939f, -0.5929499f, 0.4294790f, - -0.0383545f, 0.0556869f, 0.1975944f, 0.1341491f, 0.0629570f, -2.2742157f, 0.0175826f, -0.1439869f, - -24.8701649f, -0.1582915f, -0.2460304f, -3.9643264f, 0.0863483f, 0.0180861f, -0.2210452f, -0.0868723f, - -0.4175525f, -0.8231756f, 0.0247534f, -0.1473545f, -0.0021330f, -0.0410253f, -1.1944869f, -1.1523768f}, - {0.1031547f, -3.3402514f, -4.3636522f, -0.1534714f, -0.0622189f, 0.0374694f, -0.0870097f, -4.1865788f, - -0.0555377f, 0.0252329f, 0.1339467f, 0.0461691f, -0.0503090f, 0.0289890f, -0.0095674f, -0.3289992f, - -0.0279080f, 0.0274977f, -0.0903500f, 0.5610157f, -0.0478177f, 0.4346960f, 0.4822784f, -0.1058945f, - -0.2026870f, -0.0560638f, 0.0910069f, -0.0818529f, 0.0819198f, -0.0292193f, 0.3040628f, -0.1275230f}, - {-5.8789845f, -17.1114635f, -4.6755161f, 0.1016624f, -0.8685016f, -0.3898779f, -2.3363957f, 0.1413794f, - -2.4254086f, -0.2171030f, -0.0901150f, 0.7058705f, 0.4166250f, -0.0231085f, -0.1789686f, -9.4244318f, - -0.6418229f, -0.0857969f, 0.1683681f, -0.0310597f, -0.0247807f, -5.3748040f, -7.4730940f, 0.1019564f, - -1.2126822f, -0.3726285f, -1.0287101f, 0.1803891f, -0.2227769f, -0.0791530f, -0.0159770f, -1.4883354f}, - {-17.9394970f, -0.5228514f, -11.3547935f, -0.0672671f, -2.0371394f, -0.9076943f, 2.4331825f, -6.9409127f, - 0.8286008f, 0.0208618f, -0.8009814f, 1.2268484f, 0.1943726f, -1.7297083f, -0.7668949f, -6.5505466f, - -0.6495168f, -0.0404727f, -0.1260914f, -3.5029383f, -0.0852898f, -2.9679556f, 1.6404767f, -0.0251449f, - 1.1460075f, -0.7877688f, -0.0586593f, -0.4741839f, -1.7420560f, 0.0295600f, -2.3574052f, 0.0974777f}, - {0.4443443f, 0.6384261f, 1.3317494f, -1.0085982f, 0.9508762f, 1.3168396f, -0.1862490f, -0.1801148f, - 1.1106120f, -0.0654911f, 0.1186706f, -0.7198273f, 0.5449172f, -0.5886080f, 0.7504217f, 1.8046317f, - -0.1294390f, -0.1939137f, -0.2383934f, 0.4131435f, 0.6910310f, 1.2821866f, -0.1088722f, -0.5660405f, - -0.1188610f, 0.0364403f, 0.3597929f, -0.6409024f, 1.2114668f, -0.0212278f, 0.8423592f, 0.4848156f}, - {-0.8772649f, -13.5265112f, -4.5540547f, -0.2856667f, 0.7604876f, -0.6829260f, -0.8320626f, 0.6541347f, - 0.4020181f, 0.0009324f, -10.9660740f, -0.3540186f, -0.2316812f, 0.3576394f, 0.0998953f, -1.5738430f, - 1.2089975f, 0.0706465f, -0.2538019f, 0.7016497f, -0.0282650f, -3.1291001f, -0.4375663f, -0.3979468f, - -0.1588882f, 0.3978875f, 0.2038192f, -0.4281644f, -0.5787544f, -0.0922198f, 0.9595569f, 0.0212818f}, - {0.3392667f, 0.1170919f, -0.0705636f, -0.1025443f, -0.1192213f, -0.0495686f, 0.0284667f, -0.1226804f, - 0.0050191f, -0.0516545f, -1.0892097f, 0.0033689f, 0.0471462f, 1.4266804f, 0.0288870f, -0.0110408f, - -1.1283765f, -0.1299917f, -0.4318301f, -0.9854419f, -0.0190479f, -0.0269406f, 0.3697925f, -0.0757695f, - -0.3632923f, -0.1714077f, 0.0669245f, 0.0557428f, -0.1713906f, -0.4307863f, -0.1749060f, -2.1246362f}, - {0.8383662f, -3.8122442f, 0.1568939f, -2.2105119f, -0.7086993f, -0.4664145f, -0.3578597f, 0.5554636f, - 0.6965880f, -0.1506968f, 0.2646832f, 0.2874083f, 0.1901203f, -2.4997077f, -0.3519035f, -0.0518054f, - 1.0862818f, -0.2502540f, -0.3133347f, -0.7411230f, 0.1268138f, 0.1069811f, -0.8109779f, 0.0264679f, - 0.1604289f, -0.7534032f, -0.1419461f, 0.0688303f, -0.1570919f, -0.3055144f, -0.7415189f, 2.5547018f}, - }; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_4[1] = {1.4616280f}; - ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_4[32][1] = { - {0.0609813f}, {0.0685224f}, {0.1655236f}, {-0.0599842f}, {0.0669006f}, {-0.1817371f}, {-0.0539167f}, - {-0.0737955f}, {0.0654664f}, {0.0302955f}, {-0.0586768f}, {0.0717433f}, {0.1472274f}, {-0.0610073f}, - {-0.0601061f}, {0.2086218f}, {-0.0545418f}, {-0.0388369f}, {-0.0613536f}, {-0.1141072f}, {-0.2289097f}, - {-0.3354485f}, {0.0831025f}, {0.1333673f}, {0.0490410f}, {0.0484894f}, {0.0436755f}, {-0.1479877f}, - {0.1540713f}, {0.0021261f}, {-0.0845848f}, {-0.0564973f}, - }; + ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_layer1[23][32] = { + {-0.1881404f, -0.0534256f, 1.6563641f, 0.0401664f, 2.8318353f, 1.5049738f, 1.4111555f, -0.2339872f, + 0.0431970f, 0.1220361f, -0.0450153f, -1.6025578f, 0.0394025f, -0.3051167f, 1.9442217f, 0.1599094f, + 0.1376955f, 2.4181051f, -0.0226484f, -0.1801709f, -0.4861264f, -0.0268545f, 0.5463807f, 0.2420150f, + -0.1238829f, 0.2916382f, 0.1507791f, 0.7952659f, 0.2736979f, 3.2790639f, 1.2062043f, -0.0884467f}, + {-0.0469924f, 0.2013927f, 0.0307775f, -0.1241788f, -0.0100412f, 0.0422375f, 0.0211071f, -0.0359304f, + 0.0451861f, 0.0291862f, -0.2094866f, -0.0013007f, 0.1191471f, 0.0750159f, 0.0184378f, 0.0419437f, + -0.0207304f, -0.0444109f, 0.0013400f, -0.0699210f, -0.0668742f, -0.0880825f, -0.0107244f, 0.0363424f, + 0.1391699f, -0.0112885f, -0.0060098f, -0.0073863f, -0.0566143f, -0.0224207f, 0.0103718f, -0.0015193f}, + {0.4520382f, 0.1227609f, -1.3887709f, -0.0542129f, -3.2003114f, -0.8354173f, -1.3173198f, 0.3292131f, + -0.1657729f, -0.1982902f, 0.1599589f, -0.0417666f, -0.1461042f, -1.3237997f, -5.3609071f, -0.0981676f, + 0.2922535f, -1.8692241f, -0.0345302f, 0.1810613f, 0.4473544f, -0.0159401f, -0.7293931f, -1.4816793f, + -0.1431545f, -0.0955672f, -0.2370718f, -0.7204540f, 0.8451244f, -3.4310548f, -1.3518151f, 0.1551731f}, + {0.2670300f, 0.1343590f, 3.0347505f, -0.1783503f, 2.1586559f, 2.4137778f, 2.0080864f, -0.2545274f, + -0.1985905f, 0.1653812f, -0.1714860f, 4.1022782f, -0.1045471f, 4.4776497f, 3.3737848f, -0.0849546f, + -6.1899095f, 3.6970129f, 0.0007382f, 0.1675882f, 0.6014717f, -0.0287709f, 0.0495882f, 2.2192705f, + -0.1043157f, -4.7508621f, -0.0022774f, 0.3766513f, -0.7505829f, 1.9759512f, 1.6747239f, -0.1004091f}, + {0.6639504f, -0.0384022f, -10.0415087f, -0.0032648f, 0.3049855f, -2.0427964f, -1.1522077f, 0.0935732f, + 0.1232134f, 0.0868663f, -0.0230848f, -1.8257296f, -0.0799238f, 6.8892417f, -1.3941933f, 0.0445172f, + 0.9485117f, -2.5238073f, -0.0148513f, 0.2256772f, 0.5914315f, -0.1278037f, 0.1609928f, 11.3438406f, + -0.0831544f, 0.1928522f, 0.0361467f, 0.0137040f, 4.9549832f, 2.3954937f, 0.3917757f, 0.1206975f}, + {29.6590214f, -0.0836848f, -1.3028307f, -0.1391431f, -0.3703596f, 5.3762760f, 1.8429571f, 21.0697041f, + -0.1232606f, 0.0066067f, -0.0308768f, -0.9960231f, 0.1865301f, -1.2142091f, 0.9273136f, 0.0974103f, + 1.4067870f, 0.7268439f, 0.0035755f, 0.0619486f, -32.8901024f, -0.1950644f, -0.3978897f, -3.1790049f, + -0.1371673f, 0.1569460f, 0.0268667f, -0.4512640f, 0.3055371f, -0.2241473f, -0.6455348f, 0.1178979f}, + {-2.9178317f, -0.2023720f, -0.2946439f, -0.1851392f, -0.3493766f, -1.5397958f, -1.5902523f, 1.0981250f, + -0.1796725f, -0.0540953f, 0.0926500f, 2.0021629f, -0.1277778f, 3.3643394f, -7.5327554f, -0.0084912f, + 2.7298651f, 0.2535582f, 0.0474618f, -0.1377846f, -2.2746830f, -0.2016302f, -0.7150622f, 4.4011140f, + -0.1688751f, -1.2160714f, -0.0055839f, -1.1319760f, -2.2543004f, 0.6365916f, -1.4942099f, -0.0992425f}, + {-5.9751196f, -0.1597221f, -3.8946304f, 0.0537821f, 0.4741110f, 3.6895070f, 2.5116272f, 1.7058172f, + -0.0860321f, -0.1519644f, 0.1465356f, 1.4165760f, -0.0984433f, 1.6990343f, 4.0953226f, 0.1742475f, + -3.2570388f, 3.1653547f, 0.0135764f, 0.0092055f, -5.0966530f, -0.0542810f, 0.4907863f, 0.5900084f, + -0.1736992f, -4.9153452f, 0.2017547f, 0.2854181f, 3.1490057f, 0.2885774f, 0.9775900f, -0.2207156f}, + {0.3805595f, 0.0308984f, -9.5846119f, -0.0547350f, 1.9641919f, 2.0823991f, 9.9298115f, 0.0344243f, + -0.1557834f, -0.1847700f, -0.1195207f, 4.4698248f, 0.1492174f, 0.4272707f, 4.7265644f, 0.0200772f, + -14.3444443f, 4.9532328f, 0.0319610f, -0.0645846f, -0.6238102f, 0.1038110f, 0.2483765f, -5.1799927f, + 0.0782294f, 16.8777409f, 0.0196593f, 0.8423936f, -8.5921221f, -0.0184179f, -5.7857180f, -0.0551181f}, + {17.1570740f, 0.0265437f, -1.4766232f, -0.0528512f, 1.0128449f, 3.1529653f, -0.6560294f, 8.7189465f, + -0.1728377f, 0.1245629f, 0.1072764f, 0.2649773f, 0.0254132f, -0.8094708f, 1.8371828f, 0.1586192f, + 1.9410020f, 0.9662392f, -0.0839922f, -0.2894930f, -16.5091496f, -0.1079556f, -0.1204132f, -0.9694697f, + 0.0537786f, 0.2476868f, 0.0076408f, 0.1025890f, 0.1267423f, 0.4956081f, 0.1457323f, 0.1342634f}, + {-0.5389574f, 0.1333421f, -4.6338782f, -0.0645123f, -0.6526322f, -3.2958410f, -1.2309581f, -1.0803053f, + -0.1170542f, -0.0169311f, 0.1147491f, 2.9890807f, -0.1234096f, 0.6792320f, -3.9311285f, -0.0678321f, + -2.7922039f, 4.9413238f, 0.1060735f, -0.1114068f, -2.2443752f, -0.1649915f, -0.3656403f, 2.5320942f, + -0.0249616f, -4.5098810f, -0.1773834f, -1.9516623f, -1.6839710f, -0.1365123f, 1.0296160f, -0.0419825f}, + {-2.4413636f, 0.1075683f, -1.4518708f, 0.0537449f, 0.1154493f, -0.5463845f, 1.3964951f, 2.6729572f, + -0.0206257f, 0.1435281f, -0.1819518f, 0.4540120f, -0.1910136f, 1.7696143f, 2.3670278f, 0.1324464f, + -0.5837788f, -2.2784615f, 0.0345478f, -0.0980538f, -0.4999657f, 0.1178097f, 0.5756868f, -0.1058674f, + 0.1920418f, -3.5473657f, 0.2146371f, 0.2557987f, 1.3935618f, 0.3242345f, 0.2029733f, -0.1844350f}, + {-0.9069599f, -0.2032758f, -0.5786582f, 0.1395915f, 3.9338124f, -1.6806563f, 0.4269728f, -0.3697720f, + -0.0306356f, -0.0341866f, -0.0635755f, 1.8898975f, 0.1968578f, -17.2182655f, 1.4839698f, -0.0541308f, + 15.9838457f, 18.5951862f, 0.0078872f, -0.1186571f, -2.4982276f, 0.0033835f, 0.3749593f, -15.0238085f, + 0.0595601f, -16.8588371f, 0.1146287f, 0.1274172f, 19.3332062f, -7.0513921f, -5.4852023f, 0.1681230f}, + {-5.1457887f, 0.0335570f, 1.8620163f, 0.0560381f, -0.6397949f, -4.0867515f, 1.3578068f, -23.9992580f, + -0.1034287f, 0.1437906f, 0.1076568f, -0.6930848f, -0.1176134f, 2.2855785f, -0.8021089f, 0.0424611f, + -0.6139123f, -3.1381547f, 0.0188163f, -0.1728741f, 0.6676420f, -0.1124282f, 0.1077818f, 2.3839712f, + 0.1340676f, 1.3538554f, 0.0421035f, 0.4513423f, -0.1543196f, 0.5120541f, -0.8940096f, -0.1175765f}, + {2.1656792f, 0.1638565f, 4.5302448f, 0.0741160f, 3.3850696f, -4.8867540f, 2.8059542f, -0.0023008f, + -0.1248942f, -0.0075225f, -0.0082212f, -1.0955724f, -0.1462416f, -1.7098176f, -4.1775723f, 0.1950609f, + 3.6847639f, 1.6520064f, 0.0310502f, -0.0430167f, 3.4527576f, 0.1453262f, -1.0126116f, 1.8785841f, + -0.0615105f, 1.0451943f, -0.2653875f, -1.2223006f, -1.0100641f, 1.2076828f, 0.4882897f, -0.0618375f}, + {2.4578559f, -0.1464199f, -1.3086185f, 0.1208716f, -0.2079897f, -2.7138259f, -1.4107026f, -0.4483974f, + -0.1599056f, 0.0242936f, 0.1326804f, 0.8664415f, 0.0588684f, 0.7366717f, 2.3159802f, -0.1917707f, + -2.0800066f, -7.5100355f, 0.0585225f, 0.1582773f, 1.8128076f, -0.0756957f, 0.8521049f, 0.5539182f, + -0.1738797f, -0.2020151f, 0.2219591f, 0.1088298f, -1.9535940f, 2.4130275f, -0.0741222f, 0.1156681f}, + {-0.4152933f, -0.0679605f, -0.5760314f, -0.0201883f, -14.1784763f, 0.7755737f, -19.5469246f, 0.0381304f, + 0.0160074f, 0.1124380f, -0.0478151f, -2.3719466f, 0.0819727f, -12.5069208f, 2.0468810f, 0.0964909f, + 7.8784809f, -6.3555703f, -0.0429914f, -0.0162720f, -0.9493829f, 0.0296786f, -0.0244959f, -12.6325788f, + -0.1871653f, -9.8338795f, 0.0391840f, -0.1199073f, -11.7859421f, 8.7398720f, 19.4971046f, -0.1954873f}, + {-4.8962007f, -0.1695992f, 0.7760146f, -0.0199836f, -0.0576061f, -6.0196476f, -2.3023551f, -20.0125084f, + -0.1957836f, -0.0993785f, 0.1109372f, -0.0710161f, -0.0553650f, 0.2546394f, -1.7578228f, 0.1498791f, + -2.6269529f, 1.3973731f, 0.0464059f, -0.2307575f, 1.6730053f, -0.0038867f, 0.1040150f, 2.6721606f, + 0.2027777f, -1.2358316f, -0.0587254f, 0.0610504f, -0.1700777f, -0.4323797f, 1.0359807f, -0.0127435f}, + {1.1245984f, -0.1806923f, -1.5868790f, 0.1536594f, 1.6837788f, -1.6474472f, -3.9225550f, 0.4506312f, + 0.1854908f, -0.1023232f, -0.0306957f, -0.8615071f, 0.0945480f, 2.0585704f, 0.6044773f, 0.1269336f, + 2.4720187f, -4.5123949f, -0.0657749f, 0.1738364f, 2.4188614f, 0.0038840f, -0.2019601f, -0.3842189f, + -0.0493631f, 3.6777370f, -0.1003436f, 0.6174496f, 1.0476112f, 2.7601521f, 0.9059890f, -0.1691816f}, + {1.9658293f, 0.2083382f, 1.7833723f, 0.0662620f, -0.3932888f, -1.0642430f, 0.1807114f, -1.1486723f, + -0.0177136f, -0.1706942f, 0.1730027f, 0.6712329f, 0.0485299f, 0.6379296f, -0.2880911f, -0.1993632f, + -0.9471832f, 1.9425983f, 0.0328524f, 0.0777725f, 0.6454380f, 0.0143852f, 0.0192997f, 1.6793132f, + -0.1872064f, -1.5757623f, 0.0242778f, -0.5992475f, 2.2148299f, -3.5215647f, -2.9748621f, 0.0112703f}, + {0.3737165f, 0.0361593f, -0.1075856f, -0.0312021f, -0.0786010f, 1.3149793f, 0.0237401f, -0.0819654f, + -0.1388431f, -0.0306386f, -0.0704427f, -2.3997226f, -0.1392045f, 0.7729424f, 0.1253861f, -0.0819755f, + -0.7590774f, -0.3295609f, -0.0172208f, -0.0551179f, 0.4599459f, -0.1143881f, 2.7430685f, 0.3621114f, + -0.1475701f, 0.2296079f, -2.2224922f, -0.9080986f, 0.2101683f, 0.1190262f, -2.2205217f, -0.0811555f}, + {0.3946800f, -0.1204188f, 0.0543225f, -0.0392627f, 1.9454094f, 0.1865290f, 1.5276426f, -0.0342965f, + 0.0117116f, -0.1873923f, -0.1045035f, 1.8535231f, -0.0207077f, 0.0981549f, -0.0327459f, -0.1486938f, + 0.6359531f, -0.1314566f, -2.1469448f, -0.1665767f, 0.5134121f, -0.0341647f, -2.1786075f, -0.5976576f, + 0.0111857f, 0.3272055f, 2.1917374f, -1.6247722f, 1.6025572f, -1.9965295f, 0.3347488f, 0.1113990f}, + {0.0340557f, -0.1659652f, -0.0042457f, 0.0010229f, -2.1550148f, -0.4728722f, -1.3667214f, 0.2625635f, + -0.0302200f, -0.0322885f, 0.0227866f, 0.6977839f, 0.0050141f, -1.6183628f, 0.0869662f, -0.0775411f, + 0.4754244f, 0.4596581f, 2.1509945f, -0.0313832f, 0.0336208f, -0.1547154f, -0.6017126f, 0.0369996f, + -0.1102583f, -0.5788267f, 0.0017006f, 2.6352038f, -1.7847317f, 1.7510574f, 2.1478791f, -0.2251654f}, + }; - } // namespace t5dnn -} // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst + ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_layer2[32] = { + -0.2689391f, 1.5461178f, -0.2424639f, 0.4424149f, -0.0411816f, -4.1070848f, 1.4709516f, -0.2439820f, + -0.1750926f, 2.8802166f, -0.1573734f, -1.3724055f, 0.3671952f, 1.8267332f, 1.5655776f, -0.7323843f, + 1.6318209f, 2.2198663f, -1.5951139f, -0.0870247f, 0.2806863f, -0.2407108f, 0.1310665f, -0.5246177f, + 0.1914421f, -0.3386542f, -0.6310596f, 3.2995102f, 0.7519229f, -0.1565450f, -0.1496341f, 1.0073272f}; + + ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_layer2[32][32] = { + {-0.1731049f, 1.7775618f, -0.2532010f, -0.2902778f, -0.1392802f, 4.2428946f, -0.1866968f, -0.1800365f, + -0.0634398f, 0.0763313f, 0.0472901f, -0.8030146f, 0.3161853f, -1.0713238f, -4.6514492f, -0.3908085f, + 1.1607268f, 0.8834935f, -0.1194544f, -0.0785166f, 0.4967587f, -0.0558136f, -0.9601135f, -0.1001592f, + 3.4427991f, -0.2144053f, -0.3632556f, 0.0117088f, 0.1742481f, -0.2540179f, -0.1705156f, -0.2627344f}, + {-0.1478276f, -0.1659575f, 0.1602777f, -0.0758106f, 0.1067696f, -0.0247068f, -0.1123443f, -0.1724832f, + -0.0013103f, -0.0685904f, 0.1537329f, 0.1042632f, -0.0360880f, -0.0679077f, 0.0672719f, 0.1597116f, + -0.0150259f, 0.0367102f, -0.0545881f, -0.0693004f, -0.1008447f, -0.0672846f, -0.1395939f, -0.0324785f, + -0.1051702f, -0.0530534f, -0.1019061f, -0.0921245f, 0.1195077f, 0.0453448f, 0.0257045f, -0.0622537f}, + {-0.0363173f, -0.1990481f, -0.0452148f, 0.4074381f, -0.0731660f, -0.0823270f, 0.3154473f, -0.1909118f, + -0.0165690f, 0.1325824f, -0.0760181f, 0.7768906f, -0.2702211f, -0.6023573f, 1.5904741f, 0.2384946f, + 0.7610655f, -2.8705251f, 0.5754877f, -0.1587478f, -0.5708794f, -0.3421216f, 0.5023443f, 1.2806857f, + 0.2158970f, -0.1364033f, -0.3398291f, 0.9066412f, -1.2935438f, 0.0273695f, -0.1850613f, -0.9301611f}, + {-0.1281746f, 0.1695392f, 0.0805936f, -0.0598281f, 0.1266985f, -0.1697189f, -0.1091505f, -0.1569477f, + 0.0363969f, -0.0628394f, 0.0107523f, 0.0659535f, -0.0568244f, -0.1299786f, 0.0005438f, -0.0806242f, + -0.0806848f, -0.0919798f, -0.0748445f, 0.0792912f, 0.0022868f, 0.0211520f, -0.0183716f, 0.1279848f, + -0.1518286f, -0.0113527f, 0.0824359f, -0.0178597f, 0.0272009f, 0.0288935f, 0.0123459f, 0.1685353f}, + {0.1099675f, -0.3914332f, -0.0647218f, -0.8259028f, -0.0283726f, -0.0860217f, -2.0489185f, 0.1042144f, + 0.1024824f, 0.0735443f, -0.1235109f, -3.3674469f, -0.1799957f, -7.1867313f, 1.6053666f, -0.5203959f, + 0.8686391f, -0.0675404f, -2.8893898f, -0.0796400f, 1.2672142f, -0.0371844f, -1.8065344f, -2.2551982f, + 0.0355568f, 0.0672171f, 0.7150316f, 1.3620002f, -0.4106106f, 0.0126076f, 0.0408083f, 1.5958146f}, + {0.0525989f, 1.8947815f, -0.2513640f, -0.3715420f, -0.1752283f, 1.3911799f, -0.7633898f, -0.1716654f, + -0.0145629f, -1.7601604f, -0.1943324f, -0.5716376f, -0.8281464f, -0.0308049f, -1.4709659f, -0.4294116f, + -0.1030817f, -0.1823493f, 0.7561242f, -0.1608112f, 0.3980689f, -0.2464017f, -1.3065518f, 0.0875702f, + -0.1504322f, -0.0352198f, -0.4051513f, 0.7010455f, -0.2363433f, -0.1118084f, -0.1329087f, -0.3257700f}, + {-0.1209070f, 0.1677164f, -0.1353413f, -0.0410048f, -0.1432644f, 0.2649301f, 0.2247741f, -0.0425357f, + -0.2644008f, 1.4204332f, -0.2540753f, 0.2481354f, 1.9494507f, -0.2003033f, -0.5938342f, -0.3314930f, + 1.5038266f, -2.4000788f, -1.6202501f, -0.0256936f, -0.2890913f, -0.2113032f, 0.9030544f, 1.1483711f, + 0.0545346f, -0.1961582f, -0.2267976f, 0.2372836f, 2.5995049f, -0.1469661f, -0.1017130f, 1.6176132f}, + {0.0542207f, 2.7658713f, -0.1700335f, -0.3357265f, -0.1097085f, 1.6508883f, 0.0132292f, 0.1211861f, + -0.0852982f, 0.9232512f, 0.0202751f, 0.3138782f, 0.2674713f, 0.1247260f, 0.3859081f, 0.3961721f, + 1.0556988f, 0.8574673f, -0.1462571f, -0.1600272f, 0.4117427f, -0.1561815f, 0.0553897f, -0.2753994f, + 5.8420453f, 0.0883128f, 0.3594444f, -0.7174141f, 0.5683901f, 0.0096710f, -0.0957449f, -0.0195320f}, + {0.1561092f, -0.0417566f, -0.1044470f, 0.1186895f, -0.1195878f, 0.0446987f, -0.1386125f, -0.0103878f, + 0.1173026f, 0.1349312f, -0.0676422f, -0.1452308f, 0.0093872f, 0.0069650f, 0.1739093f, -0.1592752f, + -0.1329019f, -0.0459163f, -0.1511888f, -0.0040456f, 0.0065862f, 0.0106182f, 0.0318060f, 0.1003269f, + 0.0249398f, 0.1661194f, -0.0286407f, -0.1062361f, 0.0026465f, -0.0091479f, -0.1493473f, 0.0519762f}, + {-0.0702637f, 0.1154817f, -0.0680643f, 0.1447217f, 0.1394082f, -0.0691432f, 0.0939426f, 0.0483852f, + 0.1437123f, -0.1085759f, 0.0333924f, -0.0683726f, 0.0707103f, -0.0723069f, 0.0124601f, -0.0309495f, + -0.0308395f, -0.0695953f, -0.1078720f, 0.0858701f, -0.0773453f, 0.0477413f, 0.0615588f, 0.1656474f, + 0.1718751f, -0.1125762f, 0.1753366f, -0.0557704f, 0.0921221f, 0.0372290f, -0.1084552f, -0.0438967f}, + {-0.0557757f, 0.0694144f, 0.1150911f, -0.0202319f, 0.0661389f, -0.0928373f, 0.0441888f, -0.0028318f, + -0.0039446f, 0.0294675f, 0.1353384f, 0.0427515f, 0.0695194f, 0.1329748f, 0.1339706f, 0.0713900f, + -0.1384726f, 0.0925476f, 0.1581103f, 0.0100842f, -0.1248652f, -0.0173615f, 0.1637451f, -0.0025173f, + -0.0331219f, -0.0335269f, 0.0949441f, 0.0538645f, 0.0834281f, 0.0137191f, -0.1360130f, 0.0074489f}, + {-0.0949665f, -0.2181539f, 0.0871969f, 3.0772011f, -0.1152011f, -0.0022047f, 1.2700632f, -0.1173392f, + -0.1678371f, -1.3448639f, -0.2893313f, 1.5105180f, -0.6029126f, -1.1568675f, 1.4823192f, 0.1635401f, + -2.2136483f, -1.4164798f, -0.4795305f, -0.0807557f, -1.6675406f, -0.0992591f, 2.1212378f, -0.9400231f, + -0.5339298f, -0.0342672f, -2.3564072f, 1.3407421f, -3.8635128f, -0.1171367f, -0.0364181f, -3.2491686f}, + {-0.1047117f, -0.0540412f, -0.1137928f, 0.1582367f, -0.0982449f, 0.0511854f, -0.0805884f, -0.1141258f, + 0.0931992f, -0.0227052f, 0.0780590f, -0.1288135f, -0.1186576f, -0.0754066f, -0.1234059f, -0.0091936f, + 0.0205475f, 0.1640417f, -0.1527465f, 0.0068472f, -0.1239804f, -0.0448335f, -0.0061169f, -0.0078998f, + 0.0253047f, 0.0712901f, 0.0024753f, -0.0259875f, -0.1238613f, 0.1096537f, -0.0953007f, 0.1385384f}, + {0.0521762f, 1.4885306f, -0.1298001f, 2.3033395f, -0.1589162f, -0.8458843f, 0.0631668f, -0.1424429f, + -0.0384785f, 0.5599840f, 0.0008631f, -1.5839294f, 1.9202064f, 0.6930331f, 0.4948464f, -0.6195241f, + -3.0526664f, 3.1423819f, -1.3433597f, -0.1167206f, -1.3491610f, -0.0901343f, -1.2291449f, 3.5039587f, + 0.4674770f, -0.3027362f, 0.8279622f, 0.3417586f, 0.1367343f, -0.1085793f, -0.1048759f, 1.2729272f}, + {-0.0029521f, 0.2439991f, -0.0858953f, -2.7804739f, -0.0220416f, 0.0256599f, -0.3304259f, -0.0586597f, + -0.0459698f, 0.1670698f, -0.1359344f, -0.3957845f, -1.6954739f, 0.3318155f, 0.9375985f, 0.5211958f, + 0.6071047f, -3.4249072f, 1.3199407f, 0.0136374f, 1.2692807f, 0.0233104f, -0.0731508f, 2.2171400f, + -0.6052189f, -0.0698463f, 1.6376522f, -1.1908000f, -0.1706121f, -0.0380146f, 0.0144418f, 1.5177792f}, + {-0.0314772f, 0.0523589f, -0.0517322f, -0.0100344f, 0.0714635f, -0.1646974f, 0.0800682f, 0.1132821f, + -0.0028872f, -0.1239987f, -0.1322138f, -0.1059789f, 0.1752418f, 0.0475279f, -0.0046871f, 0.1574167f, + -0.0231106f, -0.0261228f, 0.0236005f, 0.1663371f, 0.1059707f, 0.1229704f, 0.1427562f, -0.1648343f, + 0.0992667f, -0.0631751f, -0.1411413f, -0.0999486f, -0.0972435f, -0.1422556f, 0.0973614f, -0.0156000f}, + {-0.1309903f, -0.5060971f, -0.1911870f, 2.2349114f, 0.1010354f, 0.5538697f, 1.8757060f, -0.1538645f, + -0.2073075f, -1.8350753f, 0.0532570f, 1.8151909f, -0.6800886f, 0.2615838f, -0.6204563f, -0.1238837f, + -0.4772464f, -2.4070835f, -0.2783994f, -0.0211087f, -4.4925098f, -0.0790045f, 1.3566529f, -0.3650998f, + -0.4658130f, -0.0479139f, -1.9361999f, 2.1485121f, -3.1108823f, -0.0020647f, -0.0489678f, -0.4781263f}, + {-0.0099352f, -1.9572417f, 0.0918592f, 0.7327217f, -0.0609625f, -0.1969659f, 0.1922992f, -0.1091586f, + -0.2125459f, -1.9542989f, -0.1648019f, -0.9355955f, 0.9144324f, -5.0530005f, -0.2265045f, -0.5638458f, + 4.4370432f, -2.0318019f, -1.5679311f, 0.0221776f, -0.4063498f, -0.1160609f, 0.9651156f, -0.2401051f, + 0.1903293f, -0.2355373f, 0.2334733f, 0.1025979f, 0.7150746f, 0.0315593f, -0.0001765f, 0.0137871f}, + {0.0320691f, -1.8876421f, -0.1241799f, -3.1652985f, -0.1528286f, 2.1882250f, -2.5907574f, 0.0210803f, + -0.1545521f, 0.7706368f, -0.1652040f, -4.1518817f, 4.2974262f, 0.3074523f, 3.3711803f, -37.9055862f, + 1.0623894f, 0.4360786f, -2.6417589f, 0.1113010f, 3.8902094f, -0.1616735f, 0.5595753f, 1.5364015f, + -2.4740698f, -0.0240434f, -28.0232792f, 0.6092473f, 1.6978041f, -0.0458809f, 0.0664777f, 0.2603019f}, + {0.1044999f, 0.0054908f, 0.1407564f, -0.1701076f, -0.1274551f, 0.0443607f, 0.1182709f, -0.1103420f, + -0.1343671f, -0.0042888f, -0.1611361f, 0.0154269f, 0.2285106f, 0.0870507f, 0.0914433f, 0.0657276f, + -0.1664300f, -0.0342912f, 0.1037545f, -0.1175308f, 0.1135652f, 0.1325845f, -0.1459545f, -0.2156865f, + -0.1673723f, -0.1156510f, 0.0179541f, 0.0541515f, 0.0957617f, -0.1297485f, 0.1045326f, 0.2950188f}, + {-0.1401742f, -2.8181052f, -0.0588381f, -0.1517100f, -0.0608850f, -3.5837226f, -0.1528927f, -0.0211265f, + 0.0881796f, -0.4448619f, -0.1457623f, -0.8828475f, 0.1261238f, -1.0495204f, -3.7918513f, -0.4645159f, + -0.0800092f, 0.0624971f, 0.1528609f, -0.1069645f, 0.4319421f, 0.0651448f, -0.6571375f, -0.0323338f, + -4.6534319f, -0.0538999f, -0.2221518f, 0.0972160f, 0.1496329f, 0.0570569f, -0.1125795f, -0.0153687f}, + {-0.1065502f, 0.0606179f, -0.1400291f, -0.0220975f, -0.0613350f, -0.0038843f, -0.0132201f, 0.1678067f, + 0.1008587f, -0.1255144f, -0.0675021f, -0.0475353f, 0.0278098f, 0.0527470f, -0.0089845f, -0.0622052f, + 0.1088723f, 0.0053812f, 0.0627310f, -0.0226460f, -0.1096366f, -0.0505830f, -0.0301058f, -0.0775778f, + -0.0008928f, -0.1157909f, 0.0544982f, 0.0430219f, -0.0134386f, -0.1095094f, 0.1215172f, 0.0081556f}, + {-0.1747307f, -0.7465636f, -0.0497346f, -2.0686443f, 0.0190713f, -2.9156351f, -5.4731860f, -0.0728399f, + -0.0845178f, -14.8429976f, -0.1068359f, 1.8549156f, -3.1135283f, -0.0907917f, -0.0262453f, -8.8010912f, + -4.3007965f, -1.6772208f, -0.2576891f, -0.0163111f, -7.8583646f, 0.0697906f, -0.0943863f, -0.7450574f, + 1.1493169f, 0.0921000f, -0.2395420f, 0.5794312f, -4.2405462f, -0.0910322f, -0.1381017f, -1.0270567f}, + {-0.0446755f, -0.8131990f, -0.1741483f, -1.7555307f, 0.0153283f, 0.0734032f, -0.5930048f, -0.0398877f, + -0.0215982f, 0.0497884f, -0.0504920f, 0.0942539f, -1.1370168f, -0.8821361f, -0.0879569f, 0.3811991f, + 1.2224945f, 0.3782545f, 1.4800016f, 0.0494110f, 1.7101970f, -0.2885793f, -0.1778114f, -1.3913733f, + -0.0944610f, -0.3578439f, 0.3491475f, -3.0349872f, 0.8044587f, 0.0928676f, -0.0395946f, 0.2008810f}, + {0.0721043f, -0.1181163f, 0.0108281f, -0.1215726f, 0.1285277f, 0.0851443f, 0.0791321f, 0.1765833f, + -0.0324889f, -0.0150838f, -0.0051942f, 0.1685798f, 0.1521861f, 0.0283858f, 0.0326072f, 0.0346215f, + -0.1081120f, -0.0745824f, -0.1762613f, 0.0901582f, 0.1335704f, 0.1599123f, -0.0097813f, 0.0364541f, + -0.0391450f, -0.0079635f, 0.1014886f, 0.0130333f, 0.0438304f, -0.0074333f, 0.0845035f, -0.0471010f}, + {0.0360538f, -0.9701002f, -0.2217611f, -1.1626705f, 0.0548465f, 0.6605385f, -0.6693703f, -0.1432099f, + -0.0754442f, -0.2380328f, -0.0754142f, -2.3242903f, 3.5773275f, 0.0707042f, 0.2052065f, -1.3753067f, + -0.8530636f, 3.1850073f, -0.2901604f, -0.1291050f, -4.4672642f, -0.2425279f, 0.1252670f, 0.4261391f, + -0.8620862f, 0.1153403f, -0.1999598f, -4.7756801f, 2.8851914f, -0.1340472f, 0.0482952f, 1.7996837f}, + {-0.1654812f, 0.9604513f, 0.1770310f, -16.5736618f, -0.0350192f, -0.5557595f, -35.3047371f, -0.1299658f, + 0.0065243f, -3.0823336f, 0.0351931f, 4.9456911f, -1.4382623f, -1.6900688f, -1.9084880f, -3.1811504f, + -8.0212736f, -7.3994560f, 4.9219728f, 0.0433824f, 0.6197430f, 0.0308996f, 5.2004323f, 0.5327767f, + 1.0885966f, 0.1487215f, -21.4211712f, -1.8733859f, 1.9195696f, -0.0539309f, -0.0795544f, -3.1121061f}, + {-0.0058153f, 1.7521383f, -0.2205407f, 2.6318321f, -0.0038140f, -1.4131194f, 3.0181022f, 0.0373498f, + -0.1246315f, -1.8323456f, -0.1470954f, 2.9131169f, 1.1522563f, 0.6036215f, -3.3962972f, 7.0906253f, + -1.5353408f, -0.2648884f, 0.5501783f, -0.2262681f, -2.4874980f, -0.0533402f, 3.0222948f, 0.3296265f, + 1.4057258f, 0.0185255f, 6.1208682f, 0.7210779f, -0.3055671f, -0.2595702f, -0.1286864f, 0.6510819f}, + {-0.2145578f, 0.4758183f, -0.1186396f, -0.6096930f, -0.1574199f, -0.1929667f, -0.6877209f, -0.2098342f, + 0.0726678f, 0.1379885f, 0.0710437f, -1.1860796f, 0.6582619f, 0.2388466f, 0.0458675f, -0.0634391f, + -0.1678368f, -8.2454395f, -0.6461441f, -0.2063597f, 0.0304686f, 0.0319904f, -1.0730971f, 1.1281222f, + 0.1292592f, -0.3054110f, 0.7732272f, -1.0069786f, -0.0847367f, -0.2342585f, -0.1553642f, 1.5100089f}, + {-0.1022291f, 2.7367072f, -0.1738961f, -1.0328600f, -0.0864617f, -0.3224345f, -2.6092832f, -0.2382921f, + 0.0578183f, 0.4115438f, 0.0121692f, -1.0689495f, 0.5158959f, 2.9600139f, 0.8839240f, -0.7147520f, + -2.7168157f, 1.2148006f, 1.5884653f, -0.1227511f, 1.3176637f, -0.1335970f, -1.4691980f, 1.1131358f, + -0.1302031f, 0.0779746f, 0.2622980f, 0.0837635f, 2.7756395f, -0.0315265f, 0.0868374f, -4.2980185f}, + {0.0228074f, 2.1787968f, -0.1889012f, -0.8560471f, -0.1063542f, -0.2869910f, 0.2767612f, -0.1183861f, + -0.0992468f, 2.1517978f, -0.0428540f, 1.0697522f, 1.9683092f, 2.1042306f, -0.0426359f, -0.3499008f, + -0.9989156f, 0.0880459f, 2.9753070f, -0.1941337f, -3.1616704f, -0.0093505f, 1.4922180f, 2.8480091f, + 0.2656264f, -0.1299839f, -1.0458518f, -1.6748481f, -3.1420829f, -0.1360553f, -0.1117443f, -1.3989290f}, + {-0.0246332f, 0.1165779f, 0.0255498f, -0.0601489f, 0.1545041f, -0.0977981f, 0.1242626f, -0.1533627f, + -0.1294386f, -0.0231293f, -0.1460808f, 0.1763088f, 0.0953614f, -0.0716483f, -0.1003436f, 0.0804519f, + 0.1373295f, -0.0686773f, 0.1198382f, 0.1519430f, 0.1640775f, -0.1675753f, 0.0790529f, -0.1521838f, + 0.0378523f, 0.1039687f, -0.0701027f, 0.0509319f, 0.1355647f, 0.0978021f, 0.0391430f, 0.0241266f}, + }; + + ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_output_layer[1] = {-0.7420582f}; + + ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_output_layer[32][1] = { + {0.0381968f}, {1.0667214f}, {0.0505496f}, {-1.5677565f}, {0.0066824f}, {-0.9951485f}, {0.9438043f}, + {0.0068631f}, {-0.0216870f}, {0.6560486f}, {-0.0235629f}, {0.9653404f}, {0.6641668f}, {-0.5351945f}, + {-0.5303048f}, {1.9339687f}, {0.4359012f}, {-0.7492802f}, {-0.5728400f}, {0.0473893f}, {-0.5091293f}, + {-0.1926489f}, {-0.6562935f}, {-0.5583456f}, {-0.7618014f}, {-0.0316967f}, {1.1637378f}, {-0.5158406f}, + {-0.5268564f}, {0.0735416f}, {0.0270067f}, {-0.5614370f}, + }; + +} // namespace ALPAKA_ACCELERATOR_NAMESPACE::lst::t5dnn #endif diff --git a/RecoTracker/LSTCore/src/alpaka/PixelQuintuplet.h b/RecoTracker/LSTCore/src/alpaka/PixelQuintuplet.h index 08feb0dfe3384..5ec314ef7bb1e 100644 --- a/RecoTracker/LSTCore/src/alpaka/PixelQuintuplet.h +++ b/RecoTracker/LSTCore/src/alpaka/PixelQuintuplet.h @@ -107,63 +107,61 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { modules.layers()[lowerModuleIndex5] + 6 * (modules.subdets()[lowerModuleIndex5] == Endcap) + 5 * (modules.subdets()[lowerModuleIndex5] == Endcap and modules.moduleType()[lowerModuleIndex5] == TwoS); + // These slides show the cut threshold definition. The comments below in the code, e.g, "cat 10", is consistent with the region separation in the slides + // https://indico.cern.ch/event/1410985/contributions/5931017/attachments/2875400/5035406/helix%20approxi%20for%20pT5%20rzchi2%20new%20results%20versions.pdf if (layer1 == 1 and layer2 == 2 and layer3 == 3) { - if (layer4 == 12 and layer5 == 13) { - return rzChiSquared < 451.141f; - } else if (layer4 == 4 and layer5 == 12) { - return rzChiSquared < 392.654f; - } else if (layer4 == 4 and layer5 == 5) { - return rzChiSquared < 225.322f; - } else if (layer4 == 7 and layer5 == 13) { - return rzChiSquared < 595.546f; - } else if (layer4 == 7 and layer5 == 8) { - return rzChiSquared < 196.111f; + if (layer4 == 12 and layer5 == 13) { // cat 10 + return rzChiSquared < 14.031f; + } else if (layer4 == 4 and layer5 == 12) { // cat 12 + return rzChiSquared < 8.760f; + } else if (layer4 == 4 and layer5 == 5) { // cat 11 + return rzChiSquared < 3.607f; + } else if (layer4 == 7 and layer5 == 13) { // cat 9 + return rzChiSquared < 16.620; + } else if (layer4 == 7 and layer5 == 8) { // cat 8 + return rzChiSquared < 17.910f; } } else if (layer1 == 1 and layer2 == 2 and layer3 == 7) { - if (layer4 == 13 and layer5 == 14) { - return rzChiSquared < 297.446f; - } else if (layer4 == 8 and layer5 == 14) { - return rzChiSquared < 451.141f; - } else if (layer4 == 8 and layer5 == 9) { - return rzChiSquared < 518.339f; + if (layer4 == 13 and layer5 == 14) { // cat 7 + return rzChiSquared < 8.950f; + } else if (layer4 == 8 and layer5 == 14) { // cat 6 + return rzChiSquared < 14.837f; + } else if (layer4 == 8 and layer5 == 9) { // cat 5 + return rzChiSquared < 18.519f; } } else if (layer1 == 1 and layer2 == 7 and layer3 == 8) { - if (layer4 == 9 and layer5 == 10) { - return rzChiSquared < 341.75f; - } else if (layer4 == 9 and layer5 == 15) { - return rzChiSquared < 341.75f; + if (layer4 == 9 and layer5 == 10) { // cat 3 + return rzChiSquared < 15.093f; + } else if (layer4 == 9 and layer5 == 15) { // cat 4 + return rzChiSquared < 11.200f; } } else if (layer1 == 2 and layer2 == 3 and layer3 == 4) { - if (layer4 == 12 and layer5 == 13) { - return rzChiSquared < 392.655f; - } else if (layer4 == 5 and layer5 == 12) { - return rzChiSquared < 341.75f; - } else if (layer4 == 5 and layer5 == 6) { - return rzChiSquared < 112.537f; + if (layer4 == 12 and layer5 == 13) { // cat 20 + return rzChiSquared < 12.868f; + } else if (layer4 == 5 and layer5 == 12) { // cat 19 + return rzChiSquared < 6.128f; + } else if (layer4 == 5 and layer5 == 6) { // cat 18 + return rzChiSquared < 2.987f; } } else if (layer1 == 2 and layer2 == 3 and layer4 == 7) { - if (layer4 == 13 and layer5 == 14) { - return rzChiSquared < 595.545f; - } else if (layer4 == 8 and layer5 == 14) { - return rzChiSquared < 74.198f; + if (layer4 == 13 and layer5 == 14) { // cat 17 + return rzChiSquared < 19.446f; + } else if (layer4 == 8 and layer5 == 14) { // cat 16 + return rzChiSquared < 17.520f; } } else if (layer1 == 2 and layer2 == 7 and layer3 == 8) { - if (layer4 == 14 and layer5 == 15) { - return rzChiSquared < 518.339f; - } else if (layer4 == 9 and layer5 == 10) { - return rzChiSquared < 8.046f; - } else if (layer4 == 9 and layer5 == 15) { - return rzChiSquared < 451.141f; + if (layer4 == 14 and layer5 == 15) { // cat 15 + return rzChiSquared < 14.71f; + } else if (layer4 == 9 and layer5 == 15) { // cat 14 + return rzChiSquared < 18.213f; } - } else if (layer1 == 3 and layer2 == 7 and layer3 == 8 and layer4 == 14 and layer5 == 15) { - return rzChiSquared < 56.207f; } else if (layer1 == 7 and layer2 == 8 and layer3 == 9) { - if (layer4 == 10 and layer5 == 11) { - return rzChiSquared < 64.578f; - } else if (layer4 == 10 and layer5 == 16) { - return rzChiSquared < 85.250f; - } else if (layer4 == 15 and layer5 == 16) { - return rzChiSquared < 85.250f; + if (layer4 == 10 and layer5 == 11) { // cat 0 + return rzChiSquared < 10.016f; + } else if (layer4 == 10 and layer5 == 16) { // cat 1 + return rzChiSquared < 87.671f; + } else if (layer4 == 15 and layer5 == 16) { // cat 2 + return rzChiSquared < 5.844f; } } return true; @@ -254,138 +252,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { return true; } - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE float computeChiSquaredpT5(TAcc const& acc, - unsigned int nPoints, - float* xs, - float* ys, - float* delta1, - float* delta2, - float* slopes, - bool* isFlat, - float g, - float f, - float radius) { - /* - Given values of (g, f, radius) and a set of points (and its uncertainties) compute chi squared - */ - float c = g * g + f * f - radius * radius; - float chiSquared = 0.f; - float absArctanSlope, angleM, xPrime, yPrime, sigma2; - for (size_t i = 0; i < nPoints; i++) { - absArctanSlope = ((slopes[i] != kVerticalModuleSlope) ? alpaka::math::abs(acc, alpaka::math::atan(acc, slopes[i])) - : kPi / 2.f); - if (xs[i] > 0 and ys[i] > 0) { - angleM = kPi / 2.f - absArctanSlope; - } else if (xs[i] < 0 and ys[i] > 0) { - angleM = absArctanSlope + kPi / 2.f; - } else if (xs[i] < 0 and ys[i] < 0) { - angleM = -(absArctanSlope + kPi / 2.f); - } else if (xs[i] > 0 and ys[i] < 0) { - angleM = -(kPi / 2.f - absArctanSlope); - } else { - angleM = 0; - } - if (not isFlat[i]) { - xPrime = xs[i] * alpaka::math::cos(acc, angleM) + ys[i] * alpaka::math::sin(acc, angleM); - yPrime = ys[i] * alpaka::math::cos(acc, angleM) - xs[i] * alpaka::math::sin(acc, angleM); - } else { - xPrime = xs[i]; - yPrime = ys[i]; - } - sigma2 = 4 * ((xPrime * delta1[i]) * (xPrime * delta1[i]) + (yPrime * delta2[i]) * (yPrime * delta2[i])); - chiSquared += (xs[i] * xs[i] + ys[i] * ys[i] - 2 * g * xs[i] - 2 * f * ys[i] + c) * - (xs[i] * xs[i] + ys[i] * ys[i] - 2 * g * xs[i] - 2 * f * ys[i] + c) / (sigma2); - } - return chiSquared; - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE void computeSigmasForRegression_pT5(TAcc const& acc, - ModulesConst modules, - const uint16_t* lowerModuleIndices, - float* delta1, - float* delta2, - float* slopes, - bool* isFlat, - unsigned int nPoints = 5, - bool anchorHits = true) { - /* - bool anchorHits required to deal with a weird edge case wherein - the hits ultimately used in the regression are anchor hits, but the - lower modules need not all be Pixel Modules (in case of PS). Similarly, - when we compute the chi squared for the non-anchor hits, the "partner module" - need not always be a PS strip module, but all non-anchor hits sit on strip - modules. - */ - ModuleType moduleType; - short moduleSubdet, moduleSide; - float inv1 = kWidthPS / kWidth2S; - float inv2 = kPixelPSZpitch / kWidth2S; - float inv3 = kStripPSZpitch / kWidth2S; - for (size_t i = 0; i < nPoints; i++) { - moduleType = modules.moduleType()[lowerModuleIndices[i]]; - moduleSubdet = modules.subdets()[lowerModuleIndices[i]]; - moduleSide = modules.sides()[lowerModuleIndices[i]]; - const float& drdz = modules.drdzs()[lowerModuleIndices[i]]; - slopes[i] = modules.dxdys()[lowerModuleIndices[i]]; - //category 1 - barrel PS flat - if (moduleSubdet == Barrel and moduleType == PS and moduleSide == Center) { - delta1[i] = inv1; - delta2[i] = inv1; - slopes[i] = -999.f; - isFlat[i] = true; - } - //category 2 - barrel 2S - else if (moduleSubdet == Barrel and moduleType == TwoS) { - delta1[i] = 1.f; - delta2[i] = 1.f; - slopes[i] = -999.f; - isFlat[i] = true; - } - //category 3 - barrel PS tilted - else if (moduleSubdet == Barrel and moduleType == PS and moduleSide != Center) { - delta1[i] = inv1; - isFlat[i] = false; - - if (anchorHits) { - delta2[i] = (inv2 * drdz / alpaka::math::sqrt(acc, 1 + drdz * drdz)); - } else { - delta2[i] = (inv3 * drdz / alpaka::math::sqrt(acc, 1 + drdz * drdz)); - } - } - //category 4 - endcap PS - else if (moduleSubdet == Endcap and moduleType == PS) { - delta1[i] = inv1; - isFlat[i] = false; - /* - despite the type of the module layer of the lower module index, - all anchor hits are on the pixel side and all non-anchor hits are - on the strip side! - */ - if (anchorHits) { - delta2[i] = inv2; - } else { - delta2[i] = inv3; - } - } - //category 5 - endcap 2S - else if (moduleSubdet == Endcap and moduleType == TwoS) { - delta1[i] = 1.f; - delta2[i] = 500.f * inv1; - isFlat[i] = false; - } -#ifdef WARNINGS - else { - printf("ERROR!!!!! I SHOULDN'T BE HERE!!!! subdet = %d, type = %d, side = %d\n", - moduleSubdet, - moduleType, - moduleSide); - } -#endif - } - } - template ALPAKA_FN_ACC ALPAKA_FN_INLINE float computePT5RPhiChiSquared(TAcc const& acc, ModulesConst modules, @@ -403,8 +269,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { bool isFlat[5]; float chiSquared = 0; - computeSigmasForRegression_pT5(acc, modules, lowerModuleIndices, delta1, delta2, slopes, isFlat); - chiSquared = computeChiSquaredpT5(acc, 5, xs, ys, delta1, delta2, slopes, isFlat, g, f, radius); + computeSigmasForRegression(acc, modules, lowerModuleIndices, delta1, delta2, slopes, isFlat); + chiSquared = computeChiSquared(acc, 5, xs, ys, delta1, delta2, slopes, isFlat, g, f, radius); return chiSquared; } @@ -512,28 +378,70 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { template ALPAKA_FN_ACC ALPAKA_FN_INLINE float computePT5RZChiSquared(TAcc const& acc, ModulesConst modules, - uint16_t* lowerModuleIndices, - float* rtPix, - float* zPix, - float* rts, - float* zs) { - //use the two anchor hits of the pixel segment to compute the slope - //then compute the pseudo chi squared of the five outer hits - - float slope = (zPix[1] - zPix[0]) / (rtPix[1] - rtPix[0]); + const uint16_t* lowerModuleIndices, + const float* rtPix, + const float* xPix, + const float* yPix, + const float* zPix, + const float* rts, + const float* zs, + float pixelSegmentPt, + float pixelSegmentPx, + float pixelSegmentPy, + float pixelSegmentPz, + int pixelSegmentCharge) { float residual = 0; float error2 = 0; - //hardcoded array indices!!! float RMSE = 0; + + // the pixel positions are in unit of cm, and need to be divided by 100 to be in consistent with unit mm. + float Px = pixelSegmentPx, Py = pixelSegmentPy, Pz = pixelSegmentPz; + int charge = pixelSegmentCharge; + float x1 = xPix[1] / 100; + float y1 = yPix[1] / 100; + float z1 = zPix[1] / 100; + float r1 = rtPix[1] / 100; + + float a = -100 / kR1GeVf * charge; + for (size_t i = 0; i < Params_T5::kLayers; i++) { - uint16_t& lowerModuleIndex = lowerModuleIndices[i]; + float zsi = zs[i] / 100; + float rtsi = rts[i] / 100; + uint16_t lowerModuleIndex = lowerModuleIndices[i]; const int moduleType = modules.moduleType()[lowerModuleIndex]; const int moduleSide = modules.sides()[lowerModuleIndex]; const int moduleSubdet = modules.subdets()[lowerModuleIndex]; - residual = (moduleSubdet == Barrel) ? (zs[i] - zPix[0]) - slope * (rts[i] - rtPix[0]) - : (rts[i] - rtPix[0]) - (zs[i] - zPix[0]) / slope; - const float& drdz = modules.drdzs()[lowerModuleIndex]; + // calculation is detailed documented here https://indico.cern.ch/event/1185895/contributions/4982756/attachments/2526561/4345805/helix%20pT3%20summarize.pdf + float diffr, diffz; + float p = alpaka::math::sqrt(acc, Px * Px + Py * Py + Pz * Pz); + + float rou = a / p; + if (moduleSubdet == Endcap) { + float s = (zsi - z1) * p / Pz; + float x = x1 + Px / a * alpaka::math::sin(acc, rou * s) - Py / a * (1 - alpaka::math::cos(acc, rou * s)); + float y = y1 + Py / a * alpaka::math::sin(acc, rou * s) + Px / a * (1 - alpaka::math::cos(acc, rou * s)); + diffr = alpaka::math::abs(acc, rtsi - alpaka::math::sqrt(acc, x * x + y * y)) * 100; + residual = diffr; + } + + if (moduleSubdet == Barrel) { + float paraA = r1 * r1 + 2 * (Px * Px + Py * Py) / (a * a) + 2 * (y1 * Px - x1 * Py) / a - rtsi * rtsi; + float paraB = 2 * (x1 * Px + y1 * Py) / a; + float paraC = 2 * (y1 * Px - x1 * Py) / a + 2 * (Px * Px + Py * Py) / (a * a); + float A = paraB * paraB + paraC * paraC; + float B = 2 * paraA * paraB; + float C = paraA * paraA - paraC * paraC; + float sol1 = (-B + alpaka::math::sqrt(acc, B * B - 4 * A * C)) / (2 * A); + float sol2 = (-B - alpaka::math::sqrt(acc, B * B - 4 * A * C)) / (2 * A); + float solz1 = alpaka::math::asin(acc, sol1) / rou * Pz / p + z1; + float solz2 = alpaka::math::asin(acc, sol2) / rou * Pz / p + z1; + float diffz1 = alpaka::math::abs(acc, solz1 - zsi) * 100; + float diffz2 = alpaka::math::abs(acc, solz2 - zsi) * 100; + diffz = alpaka::math::min(acc, diffz1, diffz2); + residual = diffz; + } + //PS Modules if (moduleType == 0) { error2 = kPixelPSZpitch * kPixelPSZpitch; @@ -544,6 +452,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { //special dispensation to tilted PS modules! if (moduleType == 0 and moduleSubdet == Barrel and moduleSide != Center) { + float drdz = modules.drdzs()[lowerModuleIndex]; error2 /= (1.f + drdz * drdz); } RMSE += (residual * residual) / error2; @@ -571,7 +480,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& quintupletRadius, float& centerX, float& centerY, - unsigned int pixelSegmentArrayIndex) { + unsigned int pixelSegmentArrayIndex, + const float ptCut) { unsigned int t5InnerT3Index = quintuplets.tripletIndices()[quintupletIndex][0]; unsigned int t5OuterT3Index = quintuplets.tripletIndices()[quintupletIndex][1]; @@ -594,6 +504,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { rzChiSquaredTemp, rPhiChiSquaredTemp, rPhiChiSquaredInwardsTemp, + ptCut, false)) return false; @@ -619,8 +530,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t lowerModuleIndices[Params_T5::kLayers] = { lowerModuleIndex1, lowerModuleIndex2, lowerModuleIndex3, lowerModuleIndex4, lowerModuleIndex5}; - float zPix[Params_pLS::kLayers] = {mds.anchorZ()[pixelInnerMDIndex], mds.anchorZ()[pixelOuterMDIndex]}; float rtPix[Params_pLS::kLayers] = {mds.anchorRt()[pixelInnerMDIndex], mds.anchorRt()[pixelOuterMDIndex]}; + float xPix[Params_pLS::kLayers] = {mds.anchorX()[pixelInnerMDIndex], mds.anchorX()[pixelOuterMDIndex]}; + float yPix[Params_pLS::kLayers] = {mds.anchorY()[pixelInnerMDIndex], mds.anchorY()[pixelOuterMDIndex]}; + float zPix[Params_pLS::kLayers] = {mds.anchorZ()[pixelInnerMDIndex], mds.anchorZ()[pixelOuterMDIndex]}; float zs[Params_T5::kLayers] = {mds.anchorZ()[firstMDIndex], mds.anchorZ()[secondMDIndex], mds.anchorZ()[thirdMDIndex], @@ -632,9 +545,32 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { mds.anchorRt()[fourthMDIndex], mds.anchorRt()[fifthMDIndex]}; - rzChiSquared = computePT5RZChiSquared(acc, modules, lowerModuleIndices, rtPix, zPix, rts, zs); + float pixelSegmentPt = segmentsPixel.ptIn()[pixelSegmentArrayIndex]; + float pixelSegmentPx = segmentsPixel.px()[pixelSegmentArrayIndex]; + float pixelSegmentPy = segmentsPixel.py()[pixelSegmentArrayIndex]; + float pixelSegmentPz = segmentsPixel.pz()[pixelSegmentArrayIndex]; + int pixelSegmentCharge = segmentsPixel.charge()[pixelSegmentArrayIndex]; + + rzChiSquared = 0; - if (/*pixelRadius*/ 0 < 5.0f * kR1GeVf) { // FIXME: pixelRadius is not defined yet + //get the appropriate centers + pixelRadius = segmentsPixel.circleRadius()[pixelSegmentArrayIndex]; + + if (pixelRadius < 5.0f * kR1GeVf) { //only apply r-z chi2 cuts for <5GeV tracks + rzChiSquared = computePT5RZChiSquared(acc, + modules, + lowerModuleIndices, + rtPix, + xPix, + yPix, + zPix, + rts, + zs, + pixelSegmentPt, + pixelSegmentPx, + pixelSegmentPy, + pixelSegmentPz, + pixelSegmentCharge); if (not passPT5RZChiSquaredCuts(modules, lowerModuleIndex1, lowerModuleIndex2, @@ -657,10 +593,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { mds.anchorY()[fourthMDIndex], mds.anchorY()[fifthMDIndex]}; - //get the appropriate radii and centers + //get the appropriate centers centerX = segmentsPixel.circleCenterX()[pixelSegmentArrayIndex]; centerY = segmentsPixel.circleCenterY()[pixelSegmentArrayIndex]; - pixelRadius = segmentsPixel.circleRadius()[pixelSegmentArrayIndex]; float T5CenterX = quintuplets.regressionG()[quintupletIndex]; float T5CenterY = quintuplets.regressionF()[quintupletIndex]; @@ -679,8 +614,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { return false; } - float xPix[] = {mds.anchorX()[pixelInnerMDIndex], mds.anchorX()[pixelOuterMDIndex]}; - float yPix[] = {mds.anchorY()[pixelInnerMDIndex], mds.anchorY()[pixelOuterMDIndex]}; rPhiChiSquaredInwards = computePT5RPhiChiSquaredInwards(T5CenterX, T5CenterY, quintupletRadius, xPix, yPix); if (quintuplets.regressionRadius()[quintupletIndex] < 5.0f * kR1GeVf) { @@ -715,7 +648,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int* connectedPixelSize, unsigned int* connectedPixelIndex, unsigned int nPixelSegments, - ObjectRangesConst ranges) const { + ObjectRangesConst ranges, + const float ptCut) const { auto const globalBlockIdx = alpaka::getIdx(acc); auto const globalThreadIdx = alpaka::getIdx(acc); auto const gridBlockExtent = alpaka::getWorkDiv(acc); @@ -770,7 +704,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { quintupletRadius, centerX, centerY, - static_cast(i_pLS)); + static_cast(i_pLS), + ptCut); if (success) { unsigned int totOccupancyPixelQuintuplets = alpaka::atomicAdd( acc, &pixelQuintuplets.totOccupancyPixelQuintuplets(), 1u, alpaka::hierarchy::Threads{}); diff --git a/RecoTracker/LSTCore/src/alpaka/PixelTriplet.h b/RecoTracker/LSTCore/src/alpaka/PixelTriplet.h index a8be90fff5227..cfd1b3d9b5a5c 100644 --- a/RecoTracker/LSTCore/src/alpaka/PixelTriplet.h +++ b/RecoTracker/LSTCore/src/alpaka/PixelTriplet.h @@ -10,6 +10,8 @@ #include "RecoTracker/LSTCore/interface/SegmentsSoA.h" #include "RecoTracker/LSTCore/interface/TripletsSoA.h" +#include "Quintuplet.h" + namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { template @@ -27,7 +29,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int firstMDIndex, unsigned int secondMDIndex, unsigned int thirdMDIndex, - unsigned int fourthMDIndex); + unsigned int fourthMDIndex, + const float ptCut); template ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runTripletDefaultAlgoPPEE(TAcc const& acc, ModulesConst modules, @@ -43,7 +46,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int firstMDIndex, unsigned int secondMDIndex, unsigned int thirdMDIndex, - unsigned int fourthMDIndex); + unsigned int fourthMDIndex, + const float ptCut); ALPAKA_FN_ACC ALPAKA_FN_INLINE void addPixelTripletToMemory(MiniDoubletsConst mds, SegmentsConst segments, @@ -121,7 +125,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t outerInnerLowerModuleIndex, uint16_t outerOuterLowerModuleIndex, unsigned int innerSegmentIndex, - unsigned int outerSegmentIndex) { + unsigned int outerSegmentIndex, + const float ptCut) { short outerInnerLowerModuleSubdet = modules.subdets()[outerInnerLowerModuleIndex]; short outerOuterLowerModuleSubdet = modules.subdets()[outerOuterLowerModuleIndex]; @@ -147,7 +152,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { firstMDIndex, secondMDIndex, thirdMDIndex, - fourthMDIndex); + fourthMDIndex, + ptCut); } else if (outerInnerLowerModuleSubdet == Endcap and outerOuterLowerModuleSubdet == Endcap) { return runTripletDefaultAlgoPPEE(acc, modules, @@ -163,7 +169,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { firstMDIndex, secondMDIndex, thirdMDIndex, - fourthMDIndex); + fourthMDIndex, + ptCut); } return false; } @@ -219,52 +226,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { return true; } - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE float computeChiSquaredpT3(TAcc const& acc, - unsigned int nPoints, - float* xs, - float* ys, - float* delta1, - float* delta2, - float* slopes, - bool* isFlat, - float g, - float f, - float radius) { - //given values of (g, f, radius) and a set of points (and its uncertainties) - //compute chi squared - float c = g * g + f * f - radius * radius; - float chiSquared = 0.f; - float absArctanSlope, angleM, xPrime, yPrime, sigma2; - for (size_t i = 0; i < nPoints; i++) { - absArctanSlope = ((slopes[i] != kVerticalModuleSlope) ? alpaka::math::abs(acc, alpaka::math::atan(acc, slopes[i])) - : kPi / 2.f); - if (xs[i] > 0 and ys[i] > 0) { - angleM = kPi / 2.f - absArctanSlope; - } else if (xs[i] < 0 and ys[i] > 0) { - angleM = absArctanSlope + kPi / 2.f; - } else if (xs[i] < 0 and ys[i] < 0) { - angleM = -(absArctanSlope + kPi / 2.f); - } else if (xs[i] > 0 and ys[i] < 0) { - angleM = -(kPi / 2.f - absArctanSlope); - } else { - angleM = 0; - } - - if (not isFlat[i]) { - xPrime = xs[i] * alpaka::math::cos(acc, angleM) + ys[i] * alpaka::math::sin(acc, angleM); - yPrime = ys[i] * alpaka::math::cos(acc, angleM) - xs[i] * alpaka::math::sin(acc, angleM); - } else { - xPrime = xs[i]; - yPrime = ys[i]; - } - sigma2 = 4 * ((xPrime * delta1[i]) * (xPrime * delta1[i]) + (yPrime * delta2[i]) * (yPrime * delta2[i])); - chiSquared += (xs[i] * xs[i] + ys[i] * ys[i] - 2 * g * xs[i] - 2 * f * ys[i] + c) * - (xs[i] * xs[i] + ys[i] * ys[i] - 2 * g * xs[i] - 2 * f * ys[i] + c) / sigma2; - } - return chiSquared; - } - //TODO: merge this one and the pT5 function later into a single function template ALPAKA_FN_ACC ALPAKA_FN_INLINE float computePT3RPhiChiSquared(TAcc const& acc, @@ -332,7 +293,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } #endif } - chiSquared = computeChiSquaredpT3(acc, 3, xs, ys, delta1, delta2, slopes, isFlat, g, f, radius); + chiSquared = computeChiSquared(acc, 3, xs, ys, delta1, delta2, slopes, isFlat, g, f, radius); return chiSquared; } @@ -683,6 +644,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& rzChiSquared, float& rPhiChiSquared, float& rPhiChiSquaredInwards, + const float ptCut, bool runChiSquaredCuts = true) { //run pT4 compatibility between the pixel segment and inner segment, and between the pixel and outer segment of the triplet uint16_t pixelModuleIndex = segments.innerLowerModuleIndices()[pixelSegmentIndex]; @@ -703,7 +665,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { lowerModuleIndex, middleModuleIndex, pixelSegmentIndex, - triplets.segmentIndices()[tripletIndex][0])) + triplets.segmentIndices()[tripletIndex][0], + ptCut)) return false; //pixel segment vs outer segment of triplet @@ -717,7 +680,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { middleModuleIndex, upperModuleIndex, pixelSegmentIndex, - triplets.segmentIndices()[tripletIndex][1])) + triplets.segmentIndices()[tripletIndex][1], + ptCut)) return false; } @@ -835,7 +799,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { PixelTriplets pixelTriplets, unsigned int* connectedPixelSize, unsigned int* connectedPixelIndex, - unsigned int nPixelSegments) const { + unsigned int nPixelSegments, + const float ptCut) const { auto const globalBlockIdx = alpaka::getIdx(acc); auto const globalThreadIdx = alpaka::getIdx(acc); auto const gridBlockExtent = alpaka::getWorkDiv(acc); @@ -911,7 +876,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { centerY, rzChiSquared, rPhiChiSquared, - rPhiChiSquaredInwards); + rPhiChiSquaredInwards, + ptCut); if (success) { float phi = @@ -962,105 +928,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } }; - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE void runDeltaBetaIterationspT3(TAcc const& acc, - float& betaIn, - float& betaOut, - float betaAv, - float& pt_beta, - float sdIn_dr, - float sdOut_dr, - float dr, - float lIn) { - if (lIn == 0) { - betaOut += alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdOut_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_beta), kSinAlphaMax)), - betaOut); - return; - } - - if (betaIn * betaOut > 0.f and - (alpaka::math::abs(acc, pt_beta) < 4.f * kPt_betaMax or - (lIn >= 11 and alpaka::math::abs(acc, pt_beta) < - 8.f * kPt_betaMax))) //and the pt_beta is well-defined; less strict for endcap-endcap - { - const float betaInUpd = - betaIn + - alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdIn_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_beta), kSinAlphaMax)), - betaIn); //FIXME: need a faster version - const float betaOutUpd = - betaOut + - alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdOut_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_beta), kSinAlphaMax)), - betaOut); //FIXME: need a faster version - betaAv = 0.5f * (betaInUpd + betaOutUpd); - - //1st update - const float pt_beta_inv = - 1.f / alpaka::math::abs(acc, dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv)); //get a better pt estimate - - betaIn += alpaka::math::copysign( - acc, - alpaka::math::asin(acc, alpaka::math::min(acc, sdIn_dr * k2Rinv1GeVf * pt_beta_inv, kSinAlphaMax)), - betaIn); //FIXME: need a faster version - betaOut += alpaka::math::copysign( - acc, - alpaka::math::asin(acc, alpaka::math::min(acc, sdOut_dr * k2Rinv1GeVf * pt_beta_inv, kSinAlphaMax)), - betaOut); //FIXME: need a faster version - //update the av and pt - betaAv = 0.5f * (betaIn + betaOut); - //2nd update - pt_beta = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); //get a better pt estimate - } else if (lIn < 11 && alpaka::math::abs(acc, betaOut) < 0.2f * alpaka::math::abs(acc, betaIn) && - alpaka::math::abs(acc, pt_beta) < 12.f * kPt_betaMax) //use betaIn sign as ref - { - const float pt_betaIn = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaIn); - - const float betaInUpd = - betaIn + - alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdIn_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_betaIn), kSinAlphaMax)), - betaIn); //FIXME: need a faster version - const float betaOutUpd = - betaOut + - alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, - alpaka::math::min(acc, sdOut_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_betaIn), kSinAlphaMax)), - betaIn); //FIXME: need a faster version - betaAv = (alpaka::math::abs(acc, betaOut) > 0.2f * alpaka::math::abs(acc, betaIn)) - ? (0.5f * (betaInUpd + betaOutUpd)) - : betaInUpd; - - //1st update - pt_beta = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); //get a better pt estimate - betaIn += alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdIn_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_beta), kSinAlphaMax)), - betaIn); //FIXME: need a faster version - betaOut += alpaka::math::copysign( - acc, - alpaka::math::asin( - acc, alpaka::math::min(acc, sdOut_dr * k2Rinv1GeVf / alpaka::math::abs(acc, pt_beta), kSinAlphaMax)), - betaIn); //FIXME: need a faster version - //update the av and pt - betaAv = 0.5f * (betaIn + betaOut); - //2nd update - pt_beta = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); //get a better pt estimate - } - } - template ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runTripletDefaultAlgoPPBB(TAcc const& acc, ModulesConst modules, @@ -1076,7 +943,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int firstMDIndex, unsigned int secondMDIndex, unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { + unsigned int fourthMDIndex, + const float ptCut) { float dPhi, betaIn, betaOut, pt_beta, zLo, zHi, zLoPointed, zHiPointed, dPhiCut, betaOutCut; bool isPS_OutLo = (modules.moduleType()[outerInnerLowerModuleIndex] == PS); @@ -1258,7 +1126,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { alpaka::math::sqrt(acc, (x_OutUp - x_OutLo) * (x_OutUp - x_OutLo) + (y_OutUp - y_OutLo) * (y_OutUp - y_OutLo)); float sdOut_d = rt_OutUp - rt_OutLo; - runDeltaBetaIterationspT3(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); + runDeltaBetaIterations(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); const float betaInMMSF = (alpaka::math::abs(acc, betaInRHmin + betaInRHmax) > 0) ? (2.f * betaIn / alpaka::math::abs(acc, betaInRHmin + betaInRHmax)) @@ -1334,7 +1202,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int firstMDIndex, unsigned int secondMDIndex, unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { + unsigned int fourthMDIndex, + const float ptCut) { float dPhi, betaIn, betaOut, pt_beta, rtLo, rtHi, dPhiCut, betaOutCut; bool isPS_OutLo = (modules.moduleType()[outerInnerLowerModuleIndex] == PS); @@ -1517,7 +1386,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { alpaka::math::sqrt(acc, (x_OutUp - x_OutLo) * (x_OutUp - x_OutLo) + (y_OutUp - y_OutLo) * (y_OutUp - y_OutLo)); float sdOut_d = rt_OutUp - rt_OutLo; - runDeltaBetaIterationspT3(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); + runDeltaBetaIterations(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); const float betaInMMSF = (alpaka::math::abs(acc, betaInRHmin + betaInRHmax) > 0) ? (2.f * betaIn / alpaka::math::abs(acc, betaInRHmin + betaInRHmax)) diff --git a/RecoTracker/LSTCore/src/alpaka/Quintuplet.h b/RecoTracker/LSTCore/src/alpaka/Quintuplet.h index 24ce2d1d53e22..679b1334038b2 100644 --- a/RecoTracker/LSTCore/src/alpaka/Quintuplet.h +++ b/RecoTracker/LSTCore/src/alpaka/Quintuplet.h @@ -2,6 +2,7 @@ #define RecoTracker_LSTCore_src_alpaka_Quintuplet_h #include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h" +#include "FWCore/Utilities/interface/isFinite.h" #include "RecoTracker/LSTCore/interface/ObjectRangesSoA.h" #include "RecoTracker/LSTCore/interface/MiniDoubletsSoA.h" @@ -18,13 +19,6 @@ #include "Triplet.h" // FIXME: need to refactor common functions to a common place namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool checkIntervalOverlap(float firstMin, - float firstMax, - float secondMin, - float secondMax) { - return ((firstMin <= secondMin) && (secondMin < firstMax)) || ((secondMin < firstMin) && (firstMin < secondMax)); - } - ALPAKA_FN_ACC ALPAKA_FN_INLINE void addQuintupletToMemory(TripletsConst triplets, Quintuplets quintuplets, unsigned int innerTripletIndex, @@ -43,6 +37,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float rzChiSquared, float rPhiChiSquared, float nonAnchorChiSquared, + float dBeta1, + float dBeta2, float pt, float eta, float phi, @@ -89,89 +85,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { quintuplets.rzChiSquared()[quintupletIndex] = rzChiSquared; quintuplets.chiSquared()[quintupletIndex] = rPhiChiSquared; quintuplets.nonAnchorChiSquared()[quintupletIndex] = nonAnchorChiSquared; - } - - //90% constraint - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool passChiSquaredConstraint(ModulesConst modules, - uint16_t lowerModuleIndex1, - uint16_t lowerModuleIndex2, - uint16_t lowerModuleIndex3, - uint16_t lowerModuleIndex4, - uint16_t lowerModuleIndex5, - float chiSquared) { - // Using lstLayer numbering convention defined in ModuleMethods.h - const int layer1 = modules.lstLayers()[lowerModuleIndex1]; - const int layer2 = modules.lstLayers()[lowerModuleIndex2]; - const int layer3 = modules.lstLayers()[lowerModuleIndex3]; - const int layer4 = modules.lstLayers()[lowerModuleIndex4]; - const int layer5 = modules.lstLayers()[lowerModuleIndex5]; - - if (layer1 == 7 and layer2 == 8 and layer3 == 9) { - if (layer4 == 10 and layer5 == 11) { - return chiSquared < 0.01788f; - } else if (layer4 == 10 and layer5 == 16) { - return chiSquared < 0.04725f; - } else if (layer4 == 15 and layer5 == 16) { - return chiSquared < 0.04725f; - } - } else if (layer1 == 1 and layer2 == 7 and layer3 == 8) { - if (layer4 == 9 and layer5 == 10) { - return chiSquared < 0.01788f; - } else if (layer4 == 9 and layer5 == 15) { - return chiSquared < 0.08234f; - } - } else if (layer1 == 1 and layer2 == 2 and layer3 == 7) { - if (layer4 == 8 and layer5 == 9) { - return chiSquared < 0.02360f; - } else if (layer4 == 8 and layer5 == 14) { - return chiSquared < 0.07167f; - } else if (layer4 == 13 and layer5 == 14) { - return chiSquared < 0.08234f; - } - } else if (layer1 == 1 and layer2 == 2 and layer3 == 3) { - if (layer4 == 7 and layer5 == 8) { - return chiSquared < 0.01026f; - } else if (layer4 == 7 and layer5 == 13) { - return chiSquared < 0.06238f; - } else if (layer4 == 12 and layer5 == 13) { - return chiSquared < 0.06238f; - } - } else if (layer1 == 1 and layer2 == 2 and layer3 == 3 and layer4 == 4) { - if (layer5 == 5) { - return chiSquared < 0.04725f; - } else if (layer5 == 12) { - return chiSquared < 0.09461f; - } - } else if (layer1 == 2 and layer2 == 7 and layer3 == 8) { - if (layer4 == 9 and layer5 == 10) { - return chiSquared < 0.00512f; - } - if (layer4 == 9 and layer5 == 15) { - return chiSquared < 0.04112f; - } else if (layer4 == 14 and layer5 == 15) { - return chiSquared < 0.06238f; - } - } else if (layer1 == 2 and layer2 == 3 and layer3 == 7) { - if (layer4 == 8 and layer5 == 14) { - return chiSquared < 0.07167f; - } else if (layer4 == 13 and layer5 == 14) { - return chiSquared < 0.06238f; - } - } else if (layer1 == 2 and layer2 == 3 and layer3 == 4) { - if (layer4 == 5 and layer5 == 6) { - return chiSquared < 0.08234f; - } else if (layer4 == 5 and layer5 == 12) { - return chiSquared < 0.10870f; - } else if (layer4 == 12 and layer5 == 13) { - return chiSquared < 0.10870f; - } - } else if (layer1 == 3 and layer2 == 7 and layer3 == 8 and layer4 == 14 and layer5 == 15) { - return chiSquared < 0.09461f; - } else if (layer1 == 3 and layer2 == 4 and layer3 == 5 and layer4 == 12 and layer5 == 13) { - return chiSquared < 0.09461f; - } - - return true; + quintuplets.dBeta1()[quintupletIndex] = dBeta1; + quintuplets.dBeta2()[quintupletIndex] = dBeta2; } //bounds can be found at http://uaf-10.t2.ucsd.edu/~bsathian/SDL/T5_RZFix/t5_rz_thresholds.txt @@ -413,9 +328,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float solz2 = alpaka::math::asin(acc, sol2) / rou * Pz / p + z_init; float diffz1 = (solz1 - zsi) * 100; float diffz2 = (solz2 - zsi) * 100; - if (alpaka::math::isnan(acc, diffz1)) + if (edm::isNotFinite(diffz1)) diffz = diffz2; - else if (alpaka::math::isnan(acc, diffz2)) + else if (edm::isNotFinite(diffz2)) diffz = diffz1; else { diffz = (alpaka::math::abs(acc, diffz1) < alpaka::math::abs(acc, diffz2)) ? diffz1 : diffz2; @@ -460,7 +375,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } // for set rzchi2 cut // if the 5 points are linear, helix calculation gives nan - if (inner_pt > 100 || alpaka::math::isnan(acc, rzChiSquared)) { + if (inner_pt > 100 || edm::isNotFinite(rzChiSquared)) { float slope; if (moduleType1 == 0 and moduleType2 == 0 and moduleType3 == 1) //PSPS2S { @@ -622,251 +537,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { return (innerOuterOuterMiniDoubletIndex == outerInnerInnerMiniDoubletIndex); } - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE void computeErrorInRadius(TAcc const& acc, - float* x1Vec, - float* y1Vec, - float* x2Vec, - float* y2Vec, - float* x3Vec, - float* y3Vec, - float& minimumRadius, - float& maximumRadius) { - //brute force - float candidateRadius; - float g, f; - minimumRadius = kVerticalModuleSlope; - maximumRadius = 0.f; - for (size_t i = 0; i < 3; i++) { - float x1 = x1Vec[i]; - float y1 = y1Vec[i]; - for (size_t j = 0; j < 3; j++) { - float x2 = x2Vec[j]; - float y2 = y2Vec[j]; - for (size_t k = 0; k < 3; k++) { - float x3 = x3Vec[k]; - float y3 = y3Vec[k]; - candidateRadius = computeRadiusFromThreeAnchorHits(acc, x1, y1, x2, y2, x3, y3, g, f); - maximumRadius = alpaka::math::max(acc, candidateRadius, maximumRadius); - minimumRadius = alpaka::math::min(acc, candidateRadius, minimumRadius); - } - } - } - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBBEE12378(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.178f; - float bridgeInvRadiusErrorBound = 0.507f; - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, - innerInvRadiusMax, - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - - /*bounds for high Pt taken from : http://uaf-10.t2.ucsd.edu/~bsathian/SDL/T5_efficiency/efficiencies/new_efficiencies/efficiencies_20210513_T5_recovering_high_Pt_efficiencies/highE_radius_matching/highE_bounds.txt */ - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBBBB(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.1512f; - float bridgeInvRadiusErrorBound = 0.1781f; - - if (innerRadius * k2Rinv1GeVf > 1.f) { - innerInvRadiusErrorBound = 0.4449f; - bridgeInvRadiusErrorBound = 0.4033f; - } - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBBBE(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.1781f; - float bridgeInvRadiusErrorBound = 0.2167f; - - if (innerRadius * k2Rinv1GeVf > 1.f) { - innerInvRadiusErrorBound = 0.4750f; - bridgeInvRadiusErrorBound = 0.3903f; - } - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBBEE23478(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.2097f; - float bridgeInvRadiusErrorBound = 0.8557f; - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, - innerInvRadiusMax, - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBBEE34578(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.066f; - float bridgeInvRadiusErrorBound = 0.617f; - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, - innerInvRadiusMax, - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBBEEE(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 0.6376f; - float bridgeInvRadiusErrorBound = 2.1381f; - - if (innerRadius * k2Rinv1GeVf > 1.f) //as good as no selections! - { - innerInvRadiusErrorBound = 12.9173f; - bridgeInvRadiusErrorBound = 5.1700f; - } - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(innerInvRadiusMin, - innerInvRadiusMax, - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiBEEEE(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float innerRadiusMin2S, - float innerRadiusMax2S, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 1.9382f; - float bridgeInvRadiusErrorBound = 3.7280f; - - if (innerRadius * k2Rinv1GeVf > 1.f) { - innerInvRadiusErrorBound = 23.2713f; - bridgeInvRadiusErrorBound = 21.7980f; - } - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(alpaka::math::min(acc, innerInvRadiusMin, 1.0f / innerRadiusMax2S), - alpaka::math::max(acc, innerInvRadiusMax, 1.0f / innerRadiusMin2S), - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - - template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool matchRadiiEEEEE(TAcc const& acc, - float innerRadius, - float bridgeRadius, - float outerRadius, - float innerRadiusMin2S, - float innerRadiusMax2S, - float bridgeRadiusMin2S, - float bridgeRadiusMax2S) { - float innerInvRadiusMin, innerInvRadiusMax, bridgeInvRadiusMin, bridgeInvRadiusMax; - - float innerInvRadiusErrorBound = 1.9382f; - float bridgeInvRadiusErrorBound = 2.2091f; - - if (innerRadius * k2Rinv1GeVf > 1.f) { - innerInvRadiusErrorBound = 22.5226f; - bridgeInvRadiusErrorBound = 21.0966f; - } - - innerInvRadiusMax = (1.f + innerInvRadiusErrorBound) / innerRadius; - innerInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - innerInvRadiusErrorBound) / innerRadius); - - bridgeInvRadiusMax = (1.f + bridgeInvRadiusErrorBound) / bridgeRadius; - bridgeInvRadiusMin = alpaka::math::max(acc, 0.f, (1.f - bridgeInvRadiusErrorBound) / bridgeRadius); - - return checkIntervalOverlap(alpaka::math::min(acc, innerInvRadiusMin, 1.0f / innerRadiusMax2S), - alpaka::math::max(acc, innerInvRadiusMax, 1.0f / innerRadiusMin2S), - alpaka::math::min(acc, bridgeInvRadiusMin, 1.0f / bridgeRadiusMax2S), - alpaka::math::max(acc, bridgeInvRadiusMax, 1.0f / bridgeRadiusMin2S)); - } - template ALPAKA_FN_ACC ALPAKA_FN_INLINE void computeSigmasForRegression(TAcc const& acc, ModulesConst modules, @@ -1099,15 +769,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE void runDeltaBetaIterationsT5(TAcc const& acc, - float& betaIn, - float& betaOut, - float betaAv, - float& pt_beta, - float sdIn_dr, - float sdOut_dr, - float dr, - float lIn) { + ALPAKA_FN_ACC ALPAKA_FN_INLINE void runDeltaBetaIterations(TAcc const& acc, + float& betaIn, + float& betaOut, + float betaAv, + float& pt_beta, + float sdIn_dr, + float sdOut_dr, + float dr, + float lIn) { if (lIn == 0) { betaOut += alpaka::math::copysign( acc, @@ -1198,83 +868,33 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletDefaultAlgoBBBB(TAcc const& acc, - ModulesConst modules, - MiniDoubletsConst mds, - SegmentsConst segments, - uint16_t innerInnerLowerModuleIndex, - uint16_t innerOuterLowerModuleIndex, - uint16_t outerInnerLowerModuleIndex, - uint16_t outerOuterLowerModuleIndex, - unsigned int innerSegmentIndex, - unsigned int outerSegmentIndex, - unsigned int firstMDIndex, - unsigned int secondMDIndex, - unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { - bool isPS_InLo = (modules.moduleType()[innerInnerLowerModuleIndex] == PS); - bool isPS_OutLo = (modules.moduleType()[outerInnerLowerModuleIndex] == PS); - + ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletdBetaCutBBBB(TAcc const& acc, + ModulesConst modules, + MiniDoubletsConst mds, + SegmentsConst segments, + uint16_t innerInnerLowerModuleIndex, + uint16_t innerOuterLowerModuleIndex, + uint16_t outerInnerLowerModuleIndex, + uint16_t outerOuterLowerModuleIndex, + unsigned int innerSegmentIndex, + unsigned int outerSegmentIndex, + unsigned int firstMDIndex, + unsigned int secondMDIndex, + unsigned int thirdMDIndex, + unsigned int fourthMDIndex, + float& dBeta, + const float ptCut) { float rt_InLo = mds.anchorRt()[firstMDIndex]; float rt_InOut = mds.anchorRt()[secondMDIndex]; float rt_OutLo = mds.anchorRt()[thirdMDIndex]; float z_InLo = mds.anchorZ()[firstMDIndex]; - float z_InOut = mds.anchorZ()[secondMDIndex]; float z_OutLo = mds.anchorZ()[thirdMDIndex]; - float alpha1GeV_OutLo = - alpaka::math::asin(acc, alpaka::math::min(acc, rt_OutLo * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float rtRatio_OutLoInLo = rt_OutLo / rt_InLo; // Outer segment beginning rt divided by inner segment beginning rt; - float dzDrtScale = - alpaka::math::tan(acc, alpha1GeV_OutLo) / alpha1GeV_OutLo; // The track can bend in r-z plane slightly - float zpitch_InLo = (isPS_InLo ? kPixelPSZpitch : kStrip2SZpitch); - float zpitch_OutLo = (isPS_OutLo ? kPixelPSZpitch : kStrip2SZpitch); - - float zHi = z_InLo + (z_InLo + kDeltaZLum) * (rtRatio_OutLoInLo - 1.f) * (z_InLo < 0.f ? 1.f : dzDrtScale) + - (zpitch_InLo + zpitch_OutLo); - float zLo = z_InLo + (z_InLo - kDeltaZLum) * (rtRatio_OutLoInLo - 1.f) * (z_InLo > 0.f ? 1.f : dzDrtScale) - - (zpitch_InLo + zpitch_OutLo); - - //Cut 1 - z compatibility - if ((z_OutLo < zLo) || (z_OutLo > zHi)) - return false; - - float drt_OutLo_InLo = (rt_OutLo - rt_InLo); float r3_InLo = alpaka::math::sqrt(acc, z_InLo * z_InLo + rt_InLo * rt_InLo); float drt_InSeg = rt_InOut - rt_InLo; - float dz_InSeg = z_InOut - z_InLo; - float dr3_InSeg = alpaka::math::sqrt(acc, rt_InOut * rt_InOut + z_InOut * z_InOut) - - alpaka::math::sqrt(acc, rt_InLo * rt_InLo + z_InLo * z_InLo); - - float coshEta = dr3_InSeg / drt_InSeg; - float dzErr = (zpitch_InLo + zpitch_OutLo) * (zpitch_InLo + zpitch_OutLo) * 2.f; float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2f * (rt_OutLo - rt_InLo) / 50.f) * (r3_InLo / rt_InLo); - float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - dzErr += muls2 * drt_OutLo_InLo * drt_OutLo_InLo / 3.f * coshEta * coshEta; - dzErr = alpaka::math::sqrt(acc, dzErr); - - // Constructing upper and lower bound - const float dzMean = dz_InSeg / drt_InSeg * drt_OutLo_InLo; - const float zWindow = - dzErr / drt_InSeg * drt_OutLo_InLo + - (zpitch_InLo + zpitch_OutLo); //FIXME for ptCut lower than ~0.8 need to add curv path correction - float zLoPointed = z_InLo + dzMean * (z_InLo > 0.f ? 1.f : dzDrtScale) - zWindow; - float zHiPointed = z_InLo + dzMean * (z_InLo < 0.f ? 1.f : dzDrtScale) + zWindow; - - // Cut #2: Pointed Z (Inner segment two MD points to outer segment inner MD) - if ((z_OutLo < zLoPointed) || (z_OutLo > zHiPointed)) - return false; - - float pvOffset = 0.1f / rt_OutLo; - float dPhiCut = alpha1GeV_OutLo + alpaka::math::sqrt(acc, muls2 + pvOffset * pvOffset); - - float deltaPhiPos = phi_mpi_pi(acc, mds.anchorPhi()[fourthMDIndex] - mds.anchorPhi()[secondMDIndex]); - // Cut #3: FIXME:deltaPhiPos can be tighter - if (alpaka::math::abs(acc, deltaPhiPos) > dPhiCut) - return false; float midPointX = 0.5f * (mds.anchorX()[firstMDIndex] + mds.anchorX()[thirdMDIndex]); float midPointY = 0.5f * (mds.anchorY()[firstMDIndex] + mds.anchorY()[thirdMDIndex]); @@ -1283,10 +903,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float dPhi = deltaPhi(acc, midPointX, midPointY, diffX, diffY); - // Cut #4: deltaPhiChange - if (alpaka::math::abs(acc, dPhi) > dPhiCut) - return false; - // First obtaining the raw betaIn and betaOut values without any correction and just purely based on the mini-doublet hit positions float alpha_InLo = __H2F(segments.dPhiChanges()[innerSegmentIndex]); float alpha_OutLo = __H2F(segments.dPhiChanges()[outerSegmentIndex]); @@ -1349,21 +965,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { //beta computation float drt_tl_axis = alpaka::math::sqrt(acc, tl_axis_x * tl_axis_x + tl_axis_y * tl_axis_y); - float corrF = 1.f; //innerOuterAnchor - innerInnerAnchor const float rt_InSeg = alpaka::math::sqrt(acc, (mds.anchorX()[secondMDIndex] - mds.anchorX()[firstMDIndex]) * (mds.anchorX()[secondMDIndex] - mds.anchorX()[firstMDIndex]) + (mds.anchorY()[secondMDIndex] - mds.anchorY()[firstMDIndex]) * (mds.anchorY()[secondMDIndex] - mds.anchorY()[firstMDIndex])); - float betaInCut = - alpaka::math::asin( - acc, alpaka::math::min(acc, (-rt_InSeg * corrF + drt_tl_axis) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / drt_InSeg); - - //Cut #5: first beta cut - if (alpaka::math::abs(acc, betaInRHmin) >= betaInCut) - return false; float betaAv = 0.5f * (betaIn + betaOut); float pt_beta = drt_tl_axis * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); @@ -1376,7 +983,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { (mds.anchorY()[fourthMDIndex] - mds.anchorY()[thirdMDIndex])); float sdOut_d = mds.anchorRt()[fourthMDIndex] - mds.anchorRt()[thirdMDIndex]; - runDeltaBetaIterationsT5(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); + runDeltaBetaIterations(acc, betaIn, betaOut, betaAv, pt_beta, rt_InSeg, sdOut_dr, drt_tl_axis, lIn); const float betaInMMSF = (alpaka::math::abs(acc, betaInRHmin + betaInRHmax) > 0) ? (2.f * betaIn / alpaka::math::abs(acc, betaInRHmin + betaInRHmax)) @@ -1406,7 +1013,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { const float dBetaLum2 = (dBetaInLum + dBetaOutLum) * (dBetaInLum + dBetaOutLum); const float sinDPhi = alpaka::math::sin(acc, dPhi); - const float dBetaRIn2 = 0; // TODO-RH float dBetaROut = 0; if (isEC_lastLayer) { dBetaROut = (alpaka::math::sqrt(acc, @@ -1420,116 +1026,43 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { const float dBetaROut2 = dBetaROut * dBetaROut; - float betaOutCut = - alpaka::math::asin(acc, alpaka::math::min(acc, drt_tl_axis * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / sdOut_d) + alpaka::math::sqrt(acc, dBetaLum2 + dBetaMuls2); - - //Cut #6: The real beta cut - if (alpaka::math::abs(acc, betaOut) >= betaOutCut) - return false; - float dBetaRes = 0.02f / alpaka::math::min(acc, sdOut_d, drt_InSeg); float dBetaCut2 = - (dBetaRes * dBetaRes * 2.0f + dBetaMuls2 + dBetaLum2 + dBetaRIn2 + dBetaROut2 + + (dBetaRes * dBetaRes * 2.0f + dBetaMuls2 + dBetaLum2 + dBetaROut2 + 0.25f * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax)) * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax))); - float dBeta = betaIn - betaOut; + dBeta = betaIn - betaOut; return dBeta * dBeta <= dBetaCut2; } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletDefaultAlgoBBEE(TAcc const& acc, - ModulesConst modules, - MiniDoubletsConst mds, - SegmentsConst segments, - uint16_t innerInnerLowerModuleIndex, - uint16_t innerOuterLowerModuleIndex, - uint16_t outerInnerLowerModuleIndex, - uint16_t outerOuterLowerModuleIndex, - unsigned int innerSegmentIndex, - unsigned int outerSegmentIndex, - unsigned int firstMDIndex, - unsigned int secondMDIndex, - unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { - bool isPS_InLo = (modules.moduleType()[innerInnerLowerModuleIndex] == PS); - bool isPS_OutLo = (modules.moduleType()[outerInnerLowerModuleIndex] == PS); - + ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletdBetaCutBBEE(TAcc const& acc, + ModulesConst modules, + MiniDoubletsConst mds, + SegmentsConst segments, + uint16_t innerInnerLowerModuleIndex, + uint16_t innerOuterLowerModuleIndex, + uint16_t outerInnerLowerModuleIndex, + uint16_t outerOuterLowerModuleIndex, + unsigned int innerSegmentIndex, + unsigned int outerSegmentIndex, + unsigned int firstMDIndex, + unsigned int secondMDIndex, + unsigned int thirdMDIndex, + unsigned int fourthMDIndex, + float& dBeta, + const float ptCut) { float rt_InLo = mds.anchorRt()[firstMDIndex]; float rt_InOut = mds.anchorRt()[secondMDIndex]; float rt_OutLo = mds.anchorRt()[thirdMDIndex]; float z_InLo = mds.anchorZ()[firstMDIndex]; - float z_InOut = mds.anchorZ()[secondMDIndex]; float z_OutLo = mds.anchorZ()[thirdMDIndex]; - float alpha1GeV_OutLo = - alpaka::math::asin(acc, alpaka::math::min(acc, rt_OutLo * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float dzDrtScale = - alpaka::math::tan(acc, alpha1GeV_OutLo) / alpha1GeV_OutLo; // The track can bend in r-z plane slightly - float zpitch_InLo = (isPS_InLo ? kPixelPSZpitch : kStrip2SZpitch); - float zpitch_OutLo = (isPS_OutLo ? kPixelPSZpitch : kStrip2SZpitch); - float zGeom = zpitch_InLo + zpitch_OutLo; - - // Cut #0: Preliminary (Only here in endcap case) - if (z_InLo * z_OutLo <= 0) - return false; - - float dLum = alpaka::math::copysign(acc, kDeltaZLum, z_InLo); - bool isOutSgInnerMDPS = modules.moduleType()[outerInnerLowerModuleIndex] == PS; - float rtGeom1 = isOutSgInnerMDPS ? kPixelPSZpitch : kStrip2SZpitch; - float zGeom1 = alpaka::math::copysign(acc, zGeom, z_InLo); - float rtLo = rt_InLo * (1.f + (z_OutLo - z_InLo - zGeom1) / (z_InLo + zGeom1 + dLum) / dzDrtScale) - - rtGeom1; //slope correction only on the lower end - float rtOut = rt_OutLo; - - //Cut #1: rt condition - if (rtOut < rtLo) - return false; - - float zInForHi = z_InLo - zGeom1 - dLum; - if (zInForHi * z_InLo < 0) { - zInForHi = alpaka::math::copysign(acc, 0.1f, z_InLo); - } - float rtHi = rt_InLo * (1.f + (z_OutLo - z_InLo + zGeom1) / zInForHi) + rtGeom1; - - //Cut #2: rt condition - if ((rt_OutLo < rtLo) || (rt_OutLo > rtHi)) - return false; - float rIn = alpaka::math::sqrt(acc, z_InLo * z_InLo + rt_InLo * rt_InLo); - const float drtSDIn = rt_InOut - rt_InLo; - const float dzSDIn = z_InOut - z_InLo; - const float dr3SDIn = alpaka::math::sqrt(acc, rt_InOut * rt_InOut + z_InOut * z_InOut) - - alpaka::math::sqrt(acc, rt_InLo * rt_InLo + z_InLo * z_InLo); - - const float coshEta = dr3SDIn / drtSDIn; //direction estimate - const float dzOutInAbs = alpaka::math::abs(acc, z_OutLo - z_InLo); - const float multDzDr = dzOutInAbs * coshEta / (coshEta * coshEta - 1.f); - const float zGeom1_another = kPixelPSZpitch; - float kZ = (z_OutLo - z_InLo) / dzSDIn; - float drtErr = - zGeom1_another * zGeom1_another * drtSDIn * drtSDIn / dzSDIn / dzSDIn * (1.f - 2.f * kZ + 2.f * kZ * kZ); const float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2f * (rt_OutLo - rt_InLo) / 50.f) * (rIn / rt_InLo); - const float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - drtErr += muls2 * multDzDr * multDzDr / 3.f * coshEta * coshEta; - drtErr = alpaka::math::sqrt(acc, drtErr); - - //Cut #3: rt-z pointed - if ((kZ < 0) || (rtOut < rtLo) || (rtOut > rtHi)) - return false; - - const float pvOffset = 0.1f / rt_OutLo; - float dPhiCut = alpha1GeV_OutLo + alpaka::math::sqrt(acc, muls2 + pvOffset * pvOffset); - - float deltaPhiPos = phi_mpi_pi(acc, mds.anchorPhi()[fourthMDIndex] - mds.anchorPhi()[secondMDIndex]); - - //Cut #4: deltaPhiPos can be tighter - if (alpaka::math::abs(acc, deltaPhiPos) > dPhiCut) - return false; float midPointX = 0.5f * (mds.anchorX()[firstMDIndex] + mds.anchorX()[thirdMDIndex]); float midPointY = 0.5f * (mds.anchorY()[firstMDIndex] + mds.anchorY()[thirdMDIndex]); @@ -1537,25 +1070,21 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float diffY = mds.anchorY()[thirdMDIndex] - mds.anchorY()[firstMDIndex]; float dPhi = deltaPhi(acc, midPointX, midPointY, diffX, diffY); - // Cut #5: deltaPhiChange - if (alpaka::math::abs(acc, dPhi) > dPhiCut) - return false; float sdIn_alpha = __H2F(segments.dPhiChanges()[innerSegmentIndex]); float sdIn_alpha_min = __H2F(segments.dPhiChangeMins()[innerSegmentIndex]); float sdIn_alpha_max = __H2F(segments.dPhiChangeMaxs()[innerSegmentIndex]); float sdOut_alpha = sdIn_alpha; - float sdOut_alphaOut = phi_mpi_pi(acc, - phi(acc, - mds.anchorX()[fourthMDIndex] - mds.anchorX()[thirdMDIndex], - mds.anchorY()[fourthMDIndex] - mds.anchorY()[thirdMDIndex]) - - mds.anchorPhi()[fourthMDIndex]); + float sdOut_dPhiPos = phi_mpi_pi(acc, mds.anchorPhi()[fourthMDIndex] - mds.anchorPhi()[thirdMDIndex]); + + float sdOut_dPhiChange = __H2F(segments.dPhiChanges()[outerSegmentIndex]); + float sdOut_dPhiChange_min = __H2F(segments.dPhiChangeMins()[outerSegmentIndex]); + float sdOut_dPhiChange_max = __H2F(segments.dPhiChangeMaxs()[outerSegmentIndex]); - float sdOut_alphaOut_min = phi_mpi_pi( - acc, __H2F(segments.dPhiChangeMins()[outerSegmentIndex]) - __H2F(segments.dPhiMins()[outerSegmentIndex])); - float sdOut_alphaOut_max = phi_mpi_pi( - acc, __H2F(segments.dPhiChangeMaxs()[outerSegmentIndex]) - __H2F(segments.dPhiMaxs()[outerSegmentIndex])); + float sdOut_alphaOutRHmin = phi_mpi_pi(acc, sdOut_dPhiChange_min - sdOut_dPhiPos); + float sdOut_alphaOutRHmax = phi_mpi_pi(acc, sdOut_dPhiChange_max - sdOut_dPhiPos); + float sdOut_alphaOut = phi_mpi_pi(acc, sdOut_dPhiChange - sdOut_dPhiPos); float tl_axis_x = mds.anchorX()[fourthMDIndex] - mds.anchorX()[firstMDIndex]; float tl_axis_y = mds.anchorY()[fourthMDIndex] - mds.anchorY()[firstMDIndex]; @@ -1577,8 +1106,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { betaInRHmax = betaIn - sdIn_alpha_max + sdIn_alpha; } - betaOutRHmin = betaOut - sdOut_alphaOut_min + sdOut_alphaOut; - betaOutRHmax = betaOut - sdOut_alphaOut_max + sdOut_alphaOut; + betaOutRHmin = betaOut - sdOut_alphaOutRHmin + sdOut_alphaOut; + betaOutRHmax = betaOut - sdOut_alphaOutRHmax + sdOut_alphaOut; float swapTemp; if (alpaka::math::abs(acc, betaOutRHmin) > alpaka::math::abs(acc, betaOutRHmax)) { @@ -1601,14 +1130,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float sdIn_d = rt_InOut - rt_InLo; float dr = alpaka::math::sqrt(acc, tl_axis_x * tl_axis_x + tl_axis_y * tl_axis_y); - const float corrF = 1.f; - float betaInCut = - alpaka::math::asin(acc, alpaka::math::min(acc, (-sdIn_dr * corrF + dr) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / sdIn_d); - - //Cut #6: first beta cut - if (alpaka::math::abs(acc, betaInRHmin) >= betaInCut) - return false; float betaAv = 0.5f * (betaIn + betaOut); float pt_beta = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); @@ -1623,7 +1144,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { (mds.anchorY()[fourthMDIndex] - mds.anchorY()[thirdMDIndex])); float sdOut_d = mds.anchorRt()[fourthMDIndex] - mds.anchorRt()[thirdMDIndex]; - runDeltaBetaIterationsT5(acc, betaIn, betaOut, betaAv, pt_beta, sdIn_dr, sdOut_dr, dr, lIn); + runDeltaBetaIterations(acc, betaIn, betaOut, betaAv, pt_beta, sdIn_dr, sdOut_dr, dr, lIn); const float betaInMMSF = (alpaka::math::abs(acc, betaInRHmin + betaInRHmax) > 0) ? (2.f * betaIn / alpaka::math::abs(acc, betaInRHmin + betaInRHmax)) @@ -1666,12 +1187,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } const float dBetaROut2 = dBetaROut * dBetaROut; - float betaOutCut = alpaka::math::asin(acc, alpaka::math::min(acc, dr * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / sdOut_d) + alpaka::math::sqrt(acc, dBetaLum2 + dBetaMuls2); - - //Cut #6: The real beta cut - if (alpaka::math::abs(acc, betaOut) >= betaOutCut) - return false; float dBetaRes = 0.02f / alpaka::math::min(acc, sdOut_d, sdIn_d); float dBetaCut2 = @@ -1679,117 +1194,35 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { 0.25f * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax)) * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax))); - float dBeta = betaIn - betaOut; - //Cut #7: Cut on dBet + dBeta = betaIn - betaOut; return dBeta * dBeta <= dBetaCut2; } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletDefaultAlgoEEEE(TAcc const& acc, - ModulesConst modules, - MiniDoubletsConst mds, - SegmentsConst segments, - uint16_t innerInnerLowerModuleIndex, - uint16_t innerOuterLowerModuleIndex, - uint16_t outerInnerLowerModuleIndex, - uint16_t outerOuterLowerModuleIndex, - unsigned int innerSegmentIndex, - unsigned int outerSegmentIndex, - unsigned int firstMDIndex, - unsigned int secondMDIndex, - unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { + ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletdBetaCutEEEE(TAcc const& acc, + ModulesConst modules, + MiniDoubletsConst mds, + SegmentsConst segments, + uint16_t innerInnerLowerModuleIndex, + uint16_t innerOuterLowerModuleIndex, + uint16_t outerInnerLowerModuleIndex, + uint16_t outerOuterLowerModuleIndex, + unsigned int innerSegmentIndex, + unsigned int outerSegmentIndex, + unsigned int firstMDIndex, + unsigned int secondMDIndex, + unsigned int thirdMDIndex, + unsigned int fourthMDIndex, + float& dBeta, + const float ptCut) { float rt_InLo = mds.anchorRt()[firstMDIndex]; float rt_InOut = mds.anchorRt()[secondMDIndex]; float rt_OutLo = mds.anchorRt()[thirdMDIndex]; float z_InLo = mds.anchorZ()[firstMDIndex]; - float z_InOut = mds.anchorZ()[secondMDIndex]; float z_OutLo = mds.anchorZ()[thirdMDIndex]; - float alpha1GeV_OutLo = - alpaka::math::asin(acc, alpaka::math::min(acc, rt_OutLo * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float dzDrtScale = - alpaka::math::tan(acc, alpha1GeV_OutLo) / alpha1GeV_OutLo; // The track can bend in r-z plane slightly - - // Cut #0: Preliminary (Only here in endcap case) - if ((z_InLo * z_OutLo) <= 0) - return false; - - float dLum = alpaka::math::copysign(acc, kDeltaZLum, z_InLo); - bool isOutSgInnerMDPS = modules.moduleType()[outerInnerLowerModuleIndex] == PS; - bool isInSgInnerMDPS = modules.moduleType()[innerInnerLowerModuleIndex] == PS; - - float rtGeom = (isInSgInnerMDPS and isOutSgInnerMDPS) ? 2.f * kPixelPSZpitch - : (isInSgInnerMDPS or isOutSgInnerMDPS) ? kPixelPSZpitch + kStrip2SZpitch - : 2.f * kStrip2SZpitch; - - float dz = z_OutLo - z_InLo; - float rtLo = rt_InLo * (1.f + dz / (z_InLo + dLum) / dzDrtScale) - rtGeom; //slope correction only on the lower end - - float rtOut = rt_OutLo; - - //Cut #1: rt condition - - float rtHi = rt_InLo * (1.f + dz / (z_InLo - dLum)) + rtGeom; - - if ((rtOut < rtLo) || (rtOut > rtHi)) - return false; - - bool isInSgOuterMDPS = modules.moduleType()[innerOuterLowerModuleIndex] == PS; - - const float drtSDIn = rt_InOut - rt_InLo; - const float dzSDIn = z_InOut - z_InLo; - const float dr3SDIn = alpaka::math::sqrt(acc, rt_InOut * rt_InOut + z_InOut * z_InOut) - - alpaka::math::sqrt(acc, rt_InLo * rt_InLo + z_InLo * z_InLo); - float coshEta = dr3SDIn / drtSDIn; //direction estimate - float dzOutInAbs = alpaka::math::abs(acc, z_OutLo - z_InLo); - float multDzDr = dzOutInAbs * coshEta / (coshEta * coshEta - 1.f); - - float kZ = (z_OutLo - z_InLo) / dzSDIn; float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2f * (rt_OutLo - rt_InLo) / 50.f); - - float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - - float drtErr = - alpaka::math::sqrt(acc, - kPixelPSZpitch * kPixelPSZpitch * 2.f / (dzSDIn * dzSDIn) * (dzOutInAbs * dzOutInAbs) + - muls2 * multDzDr * multDzDr / 3.f * coshEta * coshEta); - - float drtMean = drtSDIn * dzOutInAbs / alpaka::math::abs(acc, dzSDIn); - float rtWindow = drtErr + rtGeom; - float rtLo_point = rt_InLo + drtMean / dzDrtScale - rtWindow; - float rtHi_point = rt_InLo + drtMean + rtWindow; - - // Cut #3: rt-z pointed - // https://github.com/slava77/cms-tkph2-ntuple/blob/superDoubletLinked-91X-noMock/doubletAnalysis.C#L3765 - - if (isInSgInnerMDPS and isInSgOuterMDPS) // If both PS then we can point - { - if (kZ < 0 || rtOut < rtLo_point || rtOut > rtHi_point) - return false; - } - - float pvOffset = 0.1f / rtOut; - float dPhiCut = alpha1GeV_OutLo + alpaka::math::sqrt(acc, muls2 + pvOffset * pvOffset); - - float deltaPhiPos = phi_mpi_pi(acc, mds.anchorPhi()[fourthMDIndex] - mds.anchorPhi()[secondMDIndex]); - - if (alpaka::math::abs(acc, deltaPhiPos) > dPhiCut) - return false; - - float midPointX = 0.5f * (mds.anchorX()[firstMDIndex] + mds.anchorX()[thirdMDIndex]); - float midPointY = 0.5f * (mds.anchorY()[firstMDIndex] + mds.anchorY()[thirdMDIndex]); - float diffX = mds.anchorX()[thirdMDIndex] - mds.anchorX()[firstMDIndex]; - float diffY = mds.anchorY()[thirdMDIndex] - mds.anchorY()[firstMDIndex]; - - float dPhi = deltaPhi(acc, midPointX, midPointY, diffX, diffY); - - // Cut #5: deltaPhiChange - if (alpaka::math::abs(acc, dPhi) > dPhiCut) - return false; - float sdIn_alpha = __H2F(segments.dPhiChanges()[innerSegmentIndex]); float sdOut_alpha = sdIn_alpha; //weird float sdOut_dPhiPos = phi_mpi_pi(acc, mds.anchorPhi()[fourthMDIndex] - mds.anchorPhi()[thirdMDIndex]); @@ -1837,14 +1270,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float sdIn_d = rt_InOut - rt_InLo; float dr = alpaka::math::sqrt(acc, tl_axis_x * tl_axis_x + tl_axis_y * tl_axis_y); - const float corrF = 1.f; - float betaInCut = - alpaka::math::asin(acc, alpaka::math::min(acc, (-sdIn_dr * corrF + dr) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / sdIn_d); - - //Cut #6: first beta cut - if (alpaka::math::abs(acc, betaInRHmin) >= betaInCut) - return false; float betaAv = 0.5f * (betaIn + betaOut); float pt_beta = dr * k2Rinv1GeVf / alpaka::math::sin(acc, betaAv); @@ -1859,7 +1284,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { (mds.anchorY()[fourthMDIndex] - mds.anchorY()[thirdMDIndex])); float sdOut_d = mds.anchorRt()[fourthMDIndex] - mds.anchorRt()[thirdMDIndex]; - runDeltaBetaIterationsT5(acc, betaIn, betaOut, betaAv, pt_beta, sdIn_dr, sdOut_dr, dr, lIn); + runDeltaBetaIterations(acc, betaIn, betaOut, betaAv, pt_beta, sdIn_dr, sdOut_dr, dr, lIn); const float betaInMMSF = (alpaka::math::abs(acc, betaInRHmin + betaInRHmax) > 0) ? (2.f * betaIn / alpaka::math::abs(acc, betaInRHmin + betaInRHmax)) @@ -1888,42 +1313,33 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { const float dBetaOutLum = lOut < 11 ? 0.0f : alpaka::math::abs(acc, alphaOutAbsReg * kDeltaZLum / z_OutLo); const float dBetaLum2 = (dBetaInLum + dBetaOutLum) * (dBetaInLum + dBetaOutLum); - const float dBetaRIn2 = 0; // TODO-RH - - float dBetaROut2 = 0; //TODO-RH - float betaOutCut = alpaka::math::asin(acc, alpaka::math::min(acc, dr * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + - (0.02f / sdOut_d) + alpaka::math::sqrt(acc, dBetaLum2 + dBetaMuls2); - - //Cut #6: The real beta cut - if (alpaka::math::abs(acc, betaOut) >= betaOutCut) - return false; - float dBetaRes = 0.02f / alpaka::math::min(acc, sdOut_d, sdIn_d); float dBetaCut2 = - (dBetaRes * dBetaRes * 2.0f + dBetaMuls2 + dBetaLum2 + dBetaRIn2 + dBetaROut2 + + (dBetaRes * dBetaRes * 2.0f + dBetaMuls2 + dBetaLum2 + 0.25f * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax)) * (alpaka::math::abs(acc, betaInRHmin - betaInRHmax) + alpaka::math::abs(acc, betaOutRHmin - betaOutRHmax))); - float dBeta = betaIn - betaOut; - //Cut #7: Cut on dBeta + dBeta = betaIn - betaOut; return dBeta * dBeta <= dBetaCut2; } template - ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletAlgoSelector(TAcc const& acc, - ModulesConst modules, - MiniDoubletsConst mds, - SegmentsConst segments, - uint16_t innerInnerLowerModuleIndex, - uint16_t innerOuterLowerModuleIndex, - uint16_t outerInnerLowerModuleIndex, - uint16_t outerOuterLowerModuleIndex, - unsigned int innerSegmentIndex, - unsigned int outerSegmentIndex, - unsigned int firstMDIndex, - unsigned int secondMDIndex, - unsigned int thirdMDIndex, - unsigned int fourthMDIndex) { + ALPAKA_FN_ACC ALPAKA_FN_INLINE bool runQuintupletdBetaAlgoSelector(TAcc const& acc, + ModulesConst modules, + MiniDoubletsConst mds, + SegmentsConst segments, + uint16_t innerInnerLowerModuleIndex, + uint16_t innerOuterLowerModuleIndex, + uint16_t outerInnerLowerModuleIndex, + uint16_t outerOuterLowerModuleIndex, + unsigned int innerSegmentIndex, + unsigned int outerSegmentIndex, + unsigned int firstMDIndex, + unsigned int secondMDIndex, + unsigned int thirdMDIndex, + unsigned int fourthMDIndex, + float& dBeta, + const float ptCut) { short innerInnerLowerModuleSubdet = modules.subdets()[innerInnerLowerModuleIndex]; short innerOuterLowerModuleSubdet = modules.subdets()[innerOuterLowerModuleIndex]; short outerInnerLowerModuleSubdet = modules.subdets()[outerInnerLowerModuleIndex]; @@ -1931,84 +1347,94 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { if (innerInnerLowerModuleSubdet == Barrel and innerOuterLowerModuleSubdet == Barrel and outerInnerLowerModuleSubdet == Barrel and outerOuterLowerModuleSubdet == Barrel) { - return runQuintupletDefaultAlgoBBBB(acc, - modules, - mds, - segments, - innerInnerLowerModuleIndex, - innerOuterLowerModuleIndex, - outerInnerLowerModuleIndex, - outerOuterLowerModuleIndex, - innerSegmentIndex, - outerSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex); + return runQuintupletdBetaCutBBBB(acc, + modules, + mds, + segments, + innerInnerLowerModuleIndex, + innerOuterLowerModuleIndex, + outerInnerLowerModuleIndex, + outerOuterLowerModuleIndex, + innerSegmentIndex, + outerSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta, + ptCut); } else if (innerInnerLowerModuleSubdet == Barrel and innerOuterLowerModuleSubdet == Barrel and outerInnerLowerModuleSubdet == Endcap and outerOuterLowerModuleSubdet == Endcap) { - return runQuintupletDefaultAlgoBBEE(acc, - modules, - mds, - segments, - innerInnerLowerModuleIndex, - innerOuterLowerModuleIndex, - outerInnerLowerModuleIndex, - outerOuterLowerModuleIndex, - innerSegmentIndex, - outerSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex); + return runQuintupletdBetaCutBBEE(acc, + modules, + mds, + segments, + innerInnerLowerModuleIndex, + innerOuterLowerModuleIndex, + outerInnerLowerModuleIndex, + outerOuterLowerModuleIndex, + innerSegmentIndex, + outerSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta, + ptCut); } else if (innerInnerLowerModuleSubdet == Barrel and innerOuterLowerModuleSubdet == Barrel and outerInnerLowerModuleSubdet == Barrel and outerOuterLowerModuleSubdet == Endcap) { - return runQuintupletDefaultAlgoBBBB(acc, - modules, - mds, - segments, - innerInnerLowerModuleIndex, - innerOuterLowerModuleIndex, - outerInnerLowerModuleIndex, - outerOuterLowerModuleIndex, - innerSegmentIndex, - outerSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex); + return runQuintupletdBetaCutBBBB(acc, + modules, + mds, + segments, + innerInnerLowerModuleIndex, + innerOuterLowerModuleIndex, + outerInnerLowerModuleIndex, + outerOuterLowerModuleIndex, + innerSegmentIndex, + outerSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta, + ptCut); } else if (innerInnerLowerModuleSubdet == Barrel and innerOuterLowerModuleSubdet == Endcap and outerInnerLowerModuleSubdet == Endcap and outerOuterLowerModuleSubdet == Endcap) { - return runQuintupletDefaultAlgoBBEE(acc, - modules, - mds, - segments, - innerInnerLowerModuleIndex, - innerOuterLowerModuleIndex, - outerInnerLowerModuleIndex, - outerOuterLowerModuleIndex, - innerSegmentIndex, - outerSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex); + return runQuintupletdBetaCutBBEE(acc, + modules, + mds, + segments, + innerInnerLowerModuleIndex, + innerOuterLowerModuleIndex, + outerInnerLowerModuleIndex, + outerOuterLowerModuleIndex, + innerSegmentIndex, + outerSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta, + ptCut); } else if (innerInnerLowerModuleSubdet == Endcap and innerOuterLowerModuleSubdet == Endcap and outerInnerLowerModuleSubdet == Endcap and outerOuterLowerModuleSubdet == Endcap) { - return runQuintupletDefaultAlgoEEEE(acc, - modules, - mds, - segments, - innerInnerLowerModuleIndex, - innerOuterLowerModuleIndex, - outerInnerLowerModuleIndex, - outerOuterLowerModuleIndex, - innerSegmentIndex, - outerSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex); + return runQuintupletdBetaCutEEEE(acc, + modules, + mds, + segments, + innerInnerLowerModuleIndex, + innerOuterLowerModuleIndex, + outerInnerLowerModuleIndex, + outerOuterLowerModuleIndex, + innerSegmentIndex, + outerSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta, + ptCut); } return false; @@ -2036,7 +1462,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& rzChiSquared, float& chiSquared, float& nonAnchorChiSquared, - bool& tightCutFlag) { + float& dBeta1, + float& dBeta2, + bool& tightCutFlag, + const float ptCut) { unsigned int firstSegmentIndex = triplets.segmentIndices()[innerTripletIndex][0]; unsigned int secondSegmentIndex = triplets.segmentIndices()[innerTripletIndex][1]; unsigned int thirdSegmentIndex = triplets.segmentIndices()[outerTripletIndex][0]; @@ -2057,38 +1486,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int fourthMDIndex = segments.mdIndices()[thirdSegmentIndex][1]; unsigned int fifthMDIndex = segments.mdIndices()[fourthSegmentIndex][1]; - if (not runQuintupletAlgoSelector(acc, - modules, - mds, - segments, - lowerModuleIndex1, - lowerModuleIndex2, - lowerModuleIndex3, - lowerModuleIndex4, - firstSegmentIndex, - thirdSegmentIndex, - firstMDIndex, - secondMDIndex, - thirdMDIndex, - fourthMDIndex)) - return false; - - if (not runQuintupletAlgoSelector(acc, - modules, - mds, - segments, - lowerModuleIndex1, - lowerModuleIndex2, - lowerModuleIndex4, - lowerModuleIndex5, - firstSegmentIndex, - fourthSegmentIndex, - firstMDIndex, - secondMDIndex, - fourthMDIndex, - fifthMDIndex)) - return false; - float x1 = mds.anchorX()[firstMDIndex]; float x2 = mds.anchorX()[secondMDIndex]; float x3 = mds.anchorX()[thirdMDIndex]; @@ -2101,73 +1498,61 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float y4 = mds.anchorY()[fourthMDIndex]; float y5 = mds.anchorY()[fifthMDIndex]; - //construct the arrays - float x1Vec[] = {x1, x1, x1}; - float y1Vec[] = {y1, y1, y1}; - float x2Vec[] = {x2, x2, x2}; - float y2Vec[] = {y2, y2, y2}; - float x3Vec[] = {x3, x3, x3}; - float y3Vec[] = {y3, y3, y3}; - - if (modules.subdets()[lowerModuleIndex1] == Endcap and modules.moduleType()[lowerModuleIndex1] == TwoS) { - x1Vec[1] = mds.anchorLowEdgeX()[firstMDIndex]; - x1Vec[2] = mds.anchorHighEdgeX()[firstMDIndex]; - - y1Vec[1] = mds.anchorLowEdgeY()[firstMDIndex]; - y1Vec[2] = mds.anchorHighEdgeY()[firstMDIndex]; - } - if (modules.subdets()[lowerModuleIndex2] == Endcap and modules.moduleType()[lowerModuleIndex2] == TwoS) { - x2Vec[1] = mds.anchorLowEdgeX()[secondMDIndex]; - x2Vec[2] = mds.anchorHighEdgeX()[secondMDIndex]; - - y2Vec[1] = mds.anchorLowEdgeY()[secondMDIndex]; - y2Vec[2] = mds.anchorHighEdgeY()[secondMDIndex]; - } - if (modules.subdets()[lowerModuleIndex3] == Endcap and modules.moduleType()[lowerModuleIndex3] == TwoS) { - x3Vec[1] = mds.anchorLowEdgeX()[thirdMDIndex]; - x3Vec[2] = mds.anchorHighEdgeX()[thirdMDIndex]; - - y3Vec[1] = mds.anchorLowEdgeY()[thirdMDIndex]; - y3Vec[2] = mds.anchorHighEdgeY()[thirdMDIndex]; - } - - float innerRadiusMin2S, innerRadiusMax2S; - computeErrorInRadius(acc, x1Vec, y1Vec, x2Vec, y2Vec, x3Vec, y3Vec, innerRadiusMin2S, innerRadiusMax2S); - - for (int i = 0; i < 3; i++) { - x1Vec[i] = x4; - y1Vec[i] = y4; - } - if (modules.subdets()[lowerModuleIndex4] == Endcap and modules.moduleType()[lowerModuleIndex4] == TwoS) { - x1Vec[1] = mds.anchorLowEdgeX()[fourthMDIndex]; - x1Vec[2] = mds.anchorHighEdgeX()[fourthMDIndex]; - - y1Vec[1] = mds.anchorLowEdgeY()[fourthMDIndex]; - y1Vec[2] = mds.anchorHighEdgeY()[fourthMDIndex]; - } - - float bridgeRadiusMin2S, bridgeRadiusMax2S; - computeErrorInRadius(acc, x2Vec, y2Vec, x3Vec, y3Vec, x1Vec, y1Vec, bridgeRadiusMin2S, bridgeRadiusMax2S); - - for (int i = 0; i < 3; i++) { - x2Vec[i] = x5; - y2Vec[i] = y5; - } - if (modules.subdets()[lowerModuleIndex5] == Endcap and modules.moduleType()[lowerModuleIndex5] == TwoS) { - x2Vec[1] = mds.anchorLowEdgeX()[fifthMDIndex]; - x2Vec[2] = mds.anchorHighEdgeX()[fifthMDIndex]; - - y2Vec[1] = mds.anchorLowEdgeY()[fifthMDIndex]; - y2Vec[2] = mds.anchorHighEdgeY()[fifthMDIndex]; - } - - float outerRadiusMin2S, outerRadiusMax2S; - computeErrorInRadius(acc, x3Vec, y3Vec, x1Vec, y1Vec, x2Vec, y2Vec, outerRadiusMin2S, outerRadiusMax2S); - float g, f; outerRadius = triplets.radius()[outerTripletIndex]; bridgeRadius = computeRadiusFromThreeAnchorHits(acc, x2, y2, x3, y3, x4, y4, g, f); innerRadius = triplets.radius()[innerTripletIndex]; + + bool inference = lst::t5dnn::runInference(acc, + mds, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + fifthMDIndex, + innerRadius, + outerRadius, + bridgeRadius); + tightCutFlag = tightCutFlag and inference; // T5-in-TC cut + if (!inference) // T5-building cut + return false; + + if (not runQuintupletdBetaAlgoSelector(acc, + modules, + mds, + segments, + lowerModuleIndex1, + lowerModuleIndex2, + lowerModuleIndex3, + lowerModuleIndex4, + firstSegmentIndex, + thirdSegmentIndex, + firstMDIndex, + secondMDIndex, + thirdMDIndex, + fourthMDIndex, + dBeta1, + ptCut)) + return false; + + if (not runQuintupletdBetaAlgoSelector(acc, + modules, + mds, + segments, + lowerModuleIndex1, + lowerModuleIndex2, + lowerModuleIndex4, + lowerModuleIndex5, + firstSegmentIndex, + fourthSegmentIndex, + firstMDIndex, + secondMDIndex, + fourthMDIndex, + fifthMDIndex, + dBeta2, + ptCut)) + return false; + g = triplets.centerX()[innerTripletIndex]; f = triplets.centerY()[innerTripletIndex]; @@ -2194,73 +1579,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { tightCutFlag)) return false; - if (innerRadius < 0.95f * ptCut / (2.f * k2Rinv1GeVf)) - return false; - - //split by category - bool matchedRadii; - if (modules.subdets()[lowerModuleIndex1] == Barrel and modules.subdets()[lowerModuleIndex2] == Barrel and - modules.subdets()[lowerModuleIndex3] == Barrel and modules.subdets()[lowerModuleIndex4] == Barrel and - modules.subdets()[lowerModuleIndex5] == Barrel) { - matchedRadii = matchRadiiBBBBB(acc, innerRadius, bridgeRadius, outerRadius); - } else if (modules.subdets()[lowerModuleIndex1] == Barrel and modules.subdets()[lowerModuleIndex2] == Barrel and - modules.subdets()[lowerModuleIndex3] == Barrel and modules.subdets()[lowerModuleIndex4] == Barrel and - modules.subdets()[lowerModuleIndex5] == Endcap) { - matchedRadii = matchRadiiBBBBE(acc, innerRadius, bridgeRadius, outerRadius); - } else if (modules.subdets()[lowerModuleIndex1] == Barrel and modules.subdets()[lowerModuleIndex2] == Barrel and - modules.subdets()[lowerModuleIndex3] == Barrel and modules.subdets()[lowerModuleIndex4] == Endcap and - modules.subdets()[lowerModuleIndex5] == Endcap) { - if (modules.layers()[lowerModuleIndex1] == 1) { - matchedRadii = - matchRadiiBBBEE12378(acc, innerRadius, bridgeRadius, outerRadius, bridgeRadiusMin2S, bridgeRadiusMax2S); - } else if (modules.layers()[lowerModuleIndex1] == 2) { - matchedRadii = - matchRadiiBBBEE23478(acc, innerRadius, bridgeRadius, outerRadius, bridgeRadiusMin2S, bridgeRadiusMax2S); - } else { - matchedRadii = - matchRadiiBBBEE34578(acc, innerRadius, bridgeRadius, outerRadius, bridgeRadiusMin2S, bridgeRadiusMax2S); - } - } - - else if (modules.subdets()[lowerModuleIndex1] == Barrel and modules.subdets()[lowerModuleIndex2] == Barrel and - modules.subdets()[lowerModuleIndex3] == Endcap and modules.subdets()[lowerModuleIndex4] == Endcap and - modules.subdets()[lowerModuleIndex5] == Endcap) { - matchedRadii = matchRadiiBBEEE(acc, innerRadius, bridgeRadius, outerRadius, bridgeRadiusMin2S, bridgeRadiusMax2S); - } else if (modules.subdets()[lowerModuleIndex1] == Barrel and modules.subdets()[lowerModuleIndex2] == Endcap and - modules.subdets()[lowerModuleIndex3] == Endcap and modules.subdets()[lowerModuleIndex4] == Endcap and - modules.subdets()[lowerModuleIndex5] == Endcap) { - matchedRadii = matchRadiiBEEEE(acc, - innerRadius, - bridgeRadius, - outerRadius, - innerRadiusMin2S, - innerRadiusMax2S, - bridgeRadiusMin2S, - bridgeRadiusMax2S); - } else { - matchedRadii = matchRadiiEEEEE(acc, - innerRadius, - bridgeRadius, - outerRadius, - innerRadiusMin2S, - innerRadiusMax2S, - bridgeRadiusMin2S, - bridgeRadiusMax2S); - } - - //compute regression radius right here - this computation is expensive!!! - if (not matchedRadii) - return false; + // 5 categories for sigmas + float sigmas2[5], delta1[5], delta2[5], slopes[5]; + bool isFlat[5]; float xVec[] = {x1, x2, x3, x4, x5}; float yVec[] = {y1, y2, y3, y4, y5}; const uint16_t lowerModuleIndices[] = { lowerModuleIndex1, lowerModuleIndex2, lowerModuleIndex3, lowerModuleIndex4, lowerModuleIndex5}; - // 5 categories for sigmas - float sigmas2[5], delta1[5], delta2[5], slopes[5]; - bool isFlat[5]; - computeSigmasForRegression(acc, modules, lowerModuleIndices, delta1, delta2, slopes, isFlat); regressionRadius = computeRadiusUsingRegression(acc, Params_T5::kLayers, @@ -2275,25 +1602,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { sigmas2, chiSquared); - unsigned int mdIndices[] = {firstMDIndex, secondMDIndex, thirdMDIndex, fourthMDIndex, fifthMDIndex}; - float inference = t5dnn::runInference(acc, - modules, - mds, - segments, - triplets, - xVec, - yVec, - mdIndices, - lowerModuleIndices, - innerTripletIndex, - outerTripletIndex, - innerRadius, - outerRadius, - bridgeRadius); - tightCutFlag = tightCutFlag and (inference > t5dnn::kLSTWp2); // T5-in-TC cut - if (inference <= t5dnn::kLSTWp2) // T5-building cut - return false; - //compute the other chisquared //non anchor is always shifted for tilted and endcap! float nonAnchorDelta1[Params_T5::kLayers], nonAnchorDelta2[Params_T5::kLayers], nonAnchorSlopes[Params_T5::kLayers]; @@ -2342,7 +1650,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { Quintuplets quintuplets, QuintupletsOccupancy quintupletsOccupancy, ObjectRangesConst ranges, - uint16_t nEligibleT5Modules) const { + uint16_t nEligibleT5Modules, + const float ptCut) const { auto const globalThreadIdx = alpaka::getIdx(acc); auto const gridThreadExtent = alpaka::getWorkDiv(acc); @@ -2373,7 +1682,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t lowerModule5 = triplets.lowerModuleIndices()[outerTripletIndex][2]; float innerRadius, outerRadius, bridgeRadius, regressionG, regressionF, regressionRadius, rzChiSquared, - chiSquared, nonAnchorChiSquared; //required for making distributions + chiSquared, nonAnchorChiSquared, dBeta1, dBeta2; //required for making distributions bool tightCutFlag = false; bool success = runQuintupletDefaultAlgo(acc, @@ -2397,14 +1706,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { rzChiSquared, chiSquared, nonAnchorChiSquared, - tightCutFlag); + dBeta1, + dBeta2, + tightCutFlag, + ptCut); if (success) { int totOccupancyQuintuplets = alpaka::atomicAdd( acc, &quintupletsOccupancy.totOccupancyQuintuplets()[lowerModule1], 1u, alpaka::hierarchy::Threads{}); if (totOccupancyQuintuplets >= ranges.quintupletModuleOccupancy()[lowerModule1]) { #ifdef WARNINGS - printf("Quintuplet excess alert! Module index = %d\n", lowerModule1); + printf("Quintuplet excess alert! Module index = %d, Occupancy = %d\n", + lowerModule1, + totOccupancyQuintuplets); #endif } else { int quintupletModuleIndex = alpaka::atomicAdd( @@ -2440,6 +1754,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { rzChiSquared, chiSquared, nonAnchorChiSquared, + dBeta1, + dBeta2, pt, eta, phi, @@ -2464,7 +1780,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ALPAKA_FN_ACC void operator()(TAcc const& acc, ModulesConst modules, TripletsOccupancyConst tripletsOccupancy, - ObjectRanges ranges) const { + ObjectRanges ranges, + const float ptCut) const { // implementation is 1D with a single block static_assert(std::is_same_v, "Should be Acc1D"); ALPAKA_ASSERT_ACC((alpaka::getWorkDiv(acc)[0] == 1)); @@ -2481,6 +1798,25 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } alpaka::syncBlockThreads(acc); + // Occupancy matrix for 0.8 GeV pT Cut + constexpr int p08_occupancy_matrix[4][4] = { + {336, 414, 231, 146}, // category 0 + {0, 0, 0, 0}, // category 1 + {0, 0, 0, 0}, // category 2 + {0, 0, 191, 106} // category 3 + }; + + // Occupancy matrix for 0.6 GeV pT Cut, 99.99% + constexpr int p06_occupancy_matrix[4][4] = { + {325, 237, 217, 176}, // category 0 + {0, 0, 0, 0}, // category 1 + {0, 0, 0, 0}, // category 2 + {0, 0, 129, 180} // category 3 + }; + + // Select the appropriate occupancy matrix based on ptCut + const auto& occupancy_matrix = (ptCut < 0.8f) ? p06_occupancy_matrix : p08_occupancy_matrix; + for (int i = globalThreadIdx[0]; i < modules.nLowerModules(); i += gridThreadExtent[0]) { // Condition for a quintuple to exist for a module // TCs don't exist for layers 5 and 6 barrel, and layers 2,3,4,5 endcap @@ -2498,55 +1834,18 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { int nEligibleT5Modules = alpaka::atomicAdd(acc, &nEligibleT5Modulesx, 1, alpaka::hierarchy::Threads{}); - int category_number; - if (module_layers <= 3 && module_subdets == 5) - category_number = 0; - else if (module_layers >= 4 && module_subdets == 5) - category_number = 1; - else if (module_layers <= 2 && module_subdets == 4 && module_rings >= 11) - category_number = 2; - else if (module_layers >= 3 && module_subdets == 4 && module_rings >= 8) - category_number = 2; - else if (module_layers <= 2 && module_subdets == 4 && module_rings <= 10) - category_number = 3; - else if (module_layers >= 3 && module_subdets == 4 && module_rings <= 7) - category_number = 3; - else - category_number = -1; - - int eta_number; - if (module_eta < 0.75f) - eta_number = 0; - else if (module_eta < 1.5f) - eta_number = 1; - else if (module_eta < 2.25f) - eta_number = 2; - else if (module_eta < 3.0f) - eta_number = 3; - else - eta_number = -1; - - int occupancy; - if (category_number == 0 && eta_number == 0) - occupancy = 336; - else if (category_number == 0 && eta_number == 1) - occupancy = 414; - else if (category_number == 0 && eta_number == 2) - occupancy = 231; - else if (category_number == 0 && eta_number == 3) - occupancy = 146; - else if (category_number == 3 && eta_number == 1) - occupancy = 0; - else if (category_number == 3 && eta_number == 2) - occupancy = 191; - else if (category_number == 3 && eta_number == 3) - occupancy = 106; - else { - occupancy = 0; + int category_number = getCategoryNumber(module_layers, module_subdets, module_rings); + int eta_number = getEtaBin(module_eta); + + int occupancy = 0; + if (category_number != -1 && eta_number != -1) { + occupancy = occupancy_matrix[category_number][eta_number]; + } #ifdef WARNINGS + else { printf("Unhandled case in createEligibleModulesListForQuintupletsGPU! Module index = %i\n", i); -#endif } +#endif int nTotQ = alpaka::atomicAdd(acc, &nTotalQuintupletsx, occupancy, alpaka::hierarchy::Threads{}); ranges.quintupletModuleIndices()[i] = nTotQ; diff --git a/RecoTracker/LSTCore/src/alpaka/Segment.h b/RecoTracker/LSTCore/src/alpaka/Segment.h index fc885e9d66afe..911119bf67ff8 100644 --- a/RecoTracker/LSTCore/src/alpaka/Segment.h +++ b/RecoTracker/LSTCore/src/alpaka/Segment.h @@ -39,46 +39,26 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } ALPAKA_FN_ACC ALPAKA_FN_INLINE float moduleGapSize_seg(short layer, short ring, short subdet, short side, short rod) { - static constexpr float miniDeltaTilted[3] = {0.26f, 0.26f, 0.26f}; - static constexpr float miniDeltaFlat[6] = {0.26f, 0.16f, 0.16f, 0.18f, 0.18f, 0.18f}; - static constexpr float miniDeltaLooseTilted[3] = {0.4f, 0.4f, 0.4f}; - static constexpr float miniDeltaEndcap[5][15] = { - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}}; - unsigned int iL = layer - 1; unsigned int iR = ring - 1; float moduleSeparation = 0; if (subdet == Barrel and side == Center) { - moduleSeparation = miniDeltaFlat[iL]; + moduleSeparation = kMiniDeltaFlat[iL]; } else if (isTighterTiltedModules_seg(subdet, layer, side, rod)) { - moduleSeparation = miniDeltaTilted[iL]; + moduleSeparation = kMiniDeltaTilted[iL]; } else if (subdet == Endcap) { - moduleSeparation = miniDeltaEndcap[iL][iR]; + moduleSeparation = kMiniDeltaEndcap[iL][iR]; } else //Loose tilted modules { - moduleSeparation = miniDeltaLooseTilted[iL]; + moduleSeparation = kMiniDeltaLooseTilted[iL]; } return moduleSeparation; } ALPAKA_FN_ACC ALPAKA_FN_INLINE float moduleGapSize_seg(ModulesConst modules, unsigned int moduleIndex) { - static constexpr float miniDeltaTilted[3] = {0.26f, 0.26f, 0.26f}; - static constexpr float miniDeltaFlat[6] = {0.26f, 0.16f, 0.16f, 0.18f, 0.18f, 0.18f}; - static constexpr float miniDeltaLooseTilted[3] = {0.4f, 0.4f, 0.4f}; - static constexpr float miniDeltaEndcap[5][15] = { - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}, - {0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.18f, /*10*/ 0.18f, 0.18f, 0.18f, 0.18f, 0.18f}}; - unsigned int iL = modules.layers()[moduleIndex] - 1; unsigned int iR = modules.rings()[moduleIndex] - 1; short subdet = modules.subdets()[moduleIndex]; @@ -87,14 +67,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float moduleSeparation = 0; if (subdet == Barrel and side == Center) { - moduleSeparation = miniDeltaFlat[iL]; + moduleSeparation = kMiniDeltaFlat[iL]; } else if (isTighterTiltedModules_seg(modules, moduleIndex)) { - moduleSeparation = miniDeltaTilted[iL]; + moduleSeparation = kMiniDeltaTilted[iL]; } else if (subdet == Endcap) { - moduleSeparation = miniDeltaEndcap[iL][iR]; + moduleSeparation = kMiniDeltaEndcap[iL][iR]; } else //Loose tilted modules { - moduleSeparation = miniDeltaLooseTilted[iL]; + moduleSeparation = kMiniDeltaLooseTilted[iL]; } return moduleSeparation; @@ -116,7 +96,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t innerLowerModuleIndex, uint16_t outerLowerModuleIndex, unsigned int innerMDIndex, - unsigned int outerMDIndex) { + unsigned int outerMDIndex, + const float ptCut) { float sdMuls = (modules.subdets()[innerLowerModuleIndex] == Barrel) ? kMiniMulsPtScaleBarrel[modules.layers()[innerLowerModuleIndex] - 1] * 3.f / ptCut : kMiniMulsPtScaleEndcap[modules.layers()[innerLowerModuleIndex] - 1] * 3.f / ptCut; @@ -299,7 +280,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& dPhiMax, float& dPhiChange, float& dPhiChangeMin, - float& dPhiChangeMax) { + float& dPhiChangeMax, + const float ptCut) { float sdMuls = (modules.subdets()[innerLowerModuleIndex] == Barrel) ? kMiniMulsPtScaleBarrel[modules.layers()[innerLowerModuleIndex] - 1] * 3.f / ptCut : kMiniMulsPtScaleEndcap[modules.layers()[innerLowerModuleIndex] - 1] * 3.f / ptCut; @@ -357,7 +339,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerLowerModuleIndex, outerLowerModuleIndex, innerMDIndex, - outerMDIndex); + outerMDIndex, + ptCut); float innerMDAlpha = mds.dphichanges()[innerMDIndex]; float outerMDAlpha = mds.dphichanges()[outerMDIndex]; @@ -389,7 +372,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& dPhiMax, float& dPhiChange, float& dPhiChangeMin, - float& dPhiChangeMax) { + float& dPhiChangeMax, + const float ptCut) { float xIn, yIn, zIn, rtIn, xOut, yOut, zOut, rtOut; xIn = mds.anchorX()[innerMDIndex]; @@ -470,7 +454,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerLowerModuleIndex, outerLowerModuleIndex, innerMDIndex, - outerMDIndex); + outerMDIndex, + ptCut); float innerMDAlpha = mds.dphichanges()[innerMDIndex]; float outerMDAlpha = mds.dphichanges()[outerMDIndex]; @@ -502,7 +487,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& dPhiMax, float& dPhiChange, float& dPhiChangeMin, - float& dPhiChangeMax) { + float& dPhiChangeMax, + const float ptCut) { if (modules.subdets()[innerLowerModuleIndex] == Barrel and modules.subdets()[outerLowerModuleIndex] == Barrel) { return runSegmentDefaultAlgoBarrel(acc, modules, @@ -516,7 +502,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { dPhiMax, dPhiChange, dPhiChangeMin, - dPhiChangeMax); + dPhiChangeMax, + ptCut); } else { return runSegmentDefaultAlgoEndcap(acc, modules, @@ -530,7 +517,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { dPhiMax, dPhiChange, dPhiChangeMin, - dPhiChangeMax); + dPhiChangeMax, + ptCut); } } @@ -542,7 +530,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { MiniDoubletsOccupancyConst mdsOccupancy, Segments segments, SegmentsOccupancy segmentsOccupancy, - ObjectRangesConst ranges) const { + ObjectRangesConst ranges, + const float ptCut) const { auto const globalBlockIdx = alpaka::getIdx(acc); auto const blockThreadIdx = alpaka::getIdx(acc); auto const gridBlockExtent = alpaka::getWorkDiv(acc); @@ -595,7 +584,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { dPhiMax, dPhiChange, dPhiChangeMin, - dPhiChangeMax)) { + dPhiChangeMax, + ptCut)) { unsigned int totOccupancySegments = alpaka::atomicAdd(acc, &segmentsOccupancy.totOccupancySegments()[innerLowerModuleIndex], @@ -603,7 +593,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { alpaka::hierarchy::Threads{}); if (static_cast(totOccupancySegments) >= ranges.segmentModuleOccupancy()[innerLowerModuleIndex]) { #ifdef WARNINGS - printf("Segment excess alert! Module index = %d\n", innerLowerModuleIndex); + printf("Segment excess alert! Module index = %d, Occupancy = %d\n", + innerLowerModuleIndex, + totOccupancySegments); #endif } else { unsigned int segmentModuleIdx = alpaka::atomicAdd( @@ -634,10 +626,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { struct CreateSegmentArrayRanges { template - ALPAKA_FN_ACC void operator()(TAcc const& acc, - ModulesConst modules, - ObjectRanges ranges, - MiniDoubletsConst mds) const { + ALPAKA_FN_ACC void operator()( + TAcc const& acc, ModulesConst modules, ObjectRanges ranges, MiniDoubletsConst mds, const float ptCut) const { // implementation is 1D with a single block static_assert(std::is_same_v, "Should be Acc1D"); ALPAKA_ASSERT_ACC((alpaka::getWorkDiv(acc)[0] == 1)); @@ -652,6 +642,25 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } alpaka::syncBlockThreads(acc); + // Occupancy matrix for 0.8 GeV pT Cut + constexpr int p08_occupancy_matrix[4][4] = { + {572, 300, 183, 62}, // category 0 + {191, 128, 0, 0}, // category 1 + {0, 107, 102, 0}, // category 2 + {0, 64, 79, 85} // category 3 + }; + + // Occupancy matrix for 0.6 GeV pT Cut, 99.9% + constexpr int p06_occupancy_matrix[4][4] = { + {936, 351, 256, 61}, // category 0 + {1358, 763, 0, 0}, // category 1 + {0, 210, 268, 0}, // category 2 + {0, 60, 97, 96} // category 3 + }; + + // Select the appropriate occupancy matrix based on ptCut + const auto& occupancy_matrix = (ptCut < 0.8f) ? p06_occupancy_matrix : p08_occupancy_matrix; + for (uint16_t i = globalThreadIdx[0]; i < modules.nLowerModules(); i += gridThreadExtent[0]) { if (modules.nConnectedModules()[i] == 0) { ranges.segmentModuleIndices()[i] = nTotalSegments; @@ -664,63 +673,18 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { short module_subdets = modules.subdets()[i]; float module_eta = alpaka::math::abs(acc, modules.eta()[i]); - int category_number; - if (module_layers <= 3 && module_subdets == 5) - category_number = 0; - else if (module_layers >= 4 && module_subdets == 5) - category_number = 1; - else if (module_layers <= 2 && module_subdets == 4 && module_rings >= 11) - category_number = 2; - else if (module_layers >= 3 && module_subdets == 4 && module_rings >= 8) - category_number = 2; - else if (module_layers <= 2 && module_subdets == 4 && module_rings <= 10) - category_number = 3; - else if (module_layers >= 3 && module_subdets == 4 && module_rings <= 7) - category_number = 3; - else - category_number = -1; - - int eta_number; - if (module_eta < 0.75f) - eta_number = 0; - else if (module_eta < 1.5f) - eta_number = 1; - else if (module_eta < 2.25f) - eta_number = 2; - else if (module_eta < 3.0f) - eta_number = 3; - else - eta_number = -1; - - int occupancy; - if (category_number == 0 && eta_number == 0) - occupancy = 572; - else if (category_number == 0 && eta_number == 1) - occupancy = 300; - else if (category_number == 0 && eta_number == 2) - occupancy = 183; - else if (category_number == 0 && eta_number == 3) - occupancy = 62; - else if (category_number == 1 && eta_number == 0) - occupancy = 191; - else if (category_number == 1 && eta_number == 1) - occupancy = 128; - else if (category_number == 2 && eta_number == 1) - occupancy = 107; - else if (category_number == 2 && eta_number == 2) - occupancy = 102; - else if (category_number == 3 && eta_number == 1) - occupancy = 64; - else if (category_number == 3 && eta_number == 2) - occupancy = 79; - else if (category_number == 3 && eta_number == 3) - occupancy = 85; - else { - occupancy = 0; + int category_number = getCategoryNumber(module_layers, module_subdets, module_rings); + int eta_number = getEtaBin(module_eta); + + int occupancy = 0; + if (category_number != -1 && eta_number != -1) { + occupancy = occupancy_matrix[category_number][eta_number]; + } #ifdef WARNINGS + else { printf("Unhandled case in createSegmentArrayRanges! Module index = %i\n", i); -#endif } +#endif int nTotSegs = alpaka::atomicAdd(acc, &nTotalSegments, occupancy, alpaka::hierarchy::Threads{}); ranges.segmentModuleIndices()[i] = nTotSegs; diff --git a/RecoTracker/LSTCore/src/alpaka/Triplet.h b/RecoTracker/LSTCore/src/alpaka/Triplet.h index 9192edbd9a186..ae2faecb080a6 100644 --- a/RecoTracker/LSTCore/src/alpaka/Triplet.h +++ b/RecoTracker/LSTCore/src/alpaka/Triplet.h @@ -2,6 +2,7 @@ #define RecoTracker_LSTCore_src_alpaka_Triplet_h #include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h" +#include "FWCore/Utilities/interface/isFinite.h" #include "RecoTracker/LSTCore/interface/alpaka/Common.h" #include "RecoTracker/LSTCore/interface/ModulesSoA.h" @@ -76,54 +77,295 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { uint16_t outerOuterLowerModuleIndex, unsigned int firstMDIndex, unsigned int secondMDIndex, - unsigned int thirdMDIndex) { - //get the rt and z - const float& r1 = mds.anchorRt()[firstMDIndex]; - const float& r2 = mds.anchorRt()[secondMDIndex]; - const float& r3 = mds.anchorRt()[thirdMDIndex]; - - const float& z1 = mds.anchorZ()[firstMDIndex]; - const float& z2 = mds.anchorZ()[secondMDIndex]; - const float& z3 = mds.anchorZ()[thirdMDIndex]; - + unsigned int thirdMDIndex, + float circleRadius, + float circleCenterX, + float circleCenterY) { // Using lst_layer numbering convention defined in ModuleMethods.h const int layer1 = modules.lstLayers()[innerInnerLowerModuleIndex]; const int layer2 = modules.lstLayers()[middleLowerModuleIndex]; const int layer3 = modules.lstLayers()[outerOuterLowerModuleIndex]; - const float residual = z2 - ((z3 - z1) / (r3 - r1) * (r2 - r1) + z1); + //all the values are stored in the unit of cm, in the calculation below we need to be cautious if we want to use the meter unit + //get r and z + const float r1 = mds.anchorRt()[firstMDIndex] / 100; + const float r2 = mds.anchorRt()[secondMDIndex] / 100; + const float r3 = mds.anchorRt()[thirdMDIndex] / 100; + + const float z1 = mds.anchorZ()[firstMDIndex] / 100; + const float z2 = mds.anchorZ()[secondMDIndex] / 100; + const float z3 = mds.anchorZ()[thirdMDIndex] / 100; + + //use linear approximation for regions 9 and 20-24 because it works better (see https://github.com/SegmentLinking/cmssw/pull/92) + float residual = alpaka::math::abs(acc, z2 - ((z3 - z1) / (r3 - r1) * (r2 - r1) + z1)); + + //region definitions: https://github.com/user-attachments/assets/2b3c1425-66eb-4524-83de-deb6f3b31f71 + if (layer1 == 1 && layer2 == 7) { + return residual < 0.01f; // Region 9 + } else if (layer1 == 3 && layer2 == 4) { + if (layer3 == 5) { + return residual < 0.037127972f; // Region 20 + } else if (layer3 == 12) { + return residual < 0.05f; // Region 21 + } + } else if (layer1 == 4) { + if (layer2 == 12) { + return residual < 0.063831687f; // Region 22 + } else if (layer2 == 5) { + if (layer3 == 6) { + return residual < 0.04362525f; // Region 23 + } else if (layer3 == 12) { + return residual < 0.05f; // Region 24 + } + } + } - if (layer1 == 12 and layer2 == 13 and layer3 == 14) { - return false; - } else if (layer1 == 1 and layer2 == 2 and layer3 == 3) { - return alpaka::math::abs(acc, residual) < 0.53f; - } else if (layer1 == 1 and layer2 == 2 and layer3 == 7) { - return alpaka::math::abs(acc, residual) < 1; - } else if (layer1 == 13 and layer2 == 14 and layer3 == 15) { - return false; - } else if (layer1 == 14 and layer2 == 15 and layer3 == 16) { - return false; - } else if (layer1 == 1 and layer2 == 7 and layer3 == 8) { - return alpaka::math::abs(acc, residual) < 1; - } else if (layer1 == 2 and layer2 == 3 and layer3 == 4) { - return alpaka::math::abs(acc, residual) < 1.21f; - } else if (layer1 == 2 and layer2 == 3 and layer3 == 7) { - return alpaka::math::abs(acc, residual) < 1.f; - } else if (layer1 == 2 and layer2 == 7 and layer3 == 8) { - return alpaka::math::abs(acc, residual) < 1.f; - } else if (layer1 == 3 and layer2 == 4 and layer3 == 5) { - return alpaka::math::abs(acc, residual) < 2.7f; - } else if (layer1 == 4 and layer2 == 5 and layer3 == 6) { - return alpaka::math::abs(acc, residual) < 3.06f; - } else if (layer1 == 7 and layer2 == 8 and layer3 == 9) { - return alpaka::math::abs(acc, residual) < 1; - } else if (layer1 == 8 and layer2 == 9 and layer3 == 10) { - return alpaka::math::abs(acc, residual) < 1; - } else if (layer1 == 9 and layer2 == 10 and layer3 == 11) { - return alpaka::math::abs(acc, residual) < 1; + //get the type of module: 0 is ps, 1 is 2s + const int moduleType3 = modules.moduleType()[outerOuterLowerModuleIndex]; + + //get the x,y position of each MD + const float x1 = mds.anchorX()[firstMDIndex] / 100; + const float x2 = mds.anchorX()[secondMDIndex] / 100; + const float x3 = mds.anchorX()[thirdMDIndex] / 100; + + const float y1 = mds.anchorY()[firstMDIndex] / 100; + const float y2 = mds.anchorY()[secondMDIndex] / 100; + const float y3 = mds.anchorY()[thirdMDIndex] / 100; + + //set initial and target points + float x_init = x2; + float y_init = y2; + float z_init = z2; + float r_init = r2; + + float z_target = z3; + float r_target = r3; + + float x_other = x1; + float y_other = y1; + + float dz = z2 - z1; + + //use MD2 for regions 5 and 19 because it works better (see https://github.com/SegmentLinking/cmssw/pull/92) + if ((layer1 == 8 && layer2 == 14 && layer3 == 15) || (layer1 == 3 && layer2 == 12 && layer3 == 13)) { + x_init = x1; + y_init = y1; + z_init = z1; + r_init = r1; + + z_target = z2; + r_target = r2; + + x_other = x3; + y_other = y3; + + dz = z3 - z1; + } + + //use the 3 MDs to fit a circle. This is the circle parameters, for circle centers and circle radius + float x_center = circleCenterX / 100; + float y_center = circleCenterY / 100; + float pt = 2 * k2Rinv1GeVf * circleRadius; //k2Rinv1GeVf is already in cm^(-1) + + //determine the charge + int charge = 0; + if ((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1) > 0) + charge = -1; + else + charge = 1; + + //get the absolute value of px and py at the initial point + float px = 2 * k2Rinv1GeVf * alpaka::math::abs(acc, (y_init - y_center)) * 100; + float py = 2 * k2Rinv1GeVf * alpaka::math::abs(acc, (x_init - x_center)) * 100; + + //Above line only gives you the correct value of px and py, but signs of px and py calculated below. + //We look at if the circle is clockwise or anti-clock wise, to make it simpler, we separate the x-y plane into 4 quarters. + if (x_init > x_center && y_init > y_center) //1st quad + { + if (charge == 1) + py = -py; + if (charge == -1) + px = -px; + } + if (x_init < x_center && y_init > y_center) //2nd quad + { + if (charge == -1) { + px = -px; + py = -py; + } + } + if (x_init < x_center && y_init < y_center) //3rd quad + { + if (charge == 1) + px = -px; + if (charge == -1) + py = -py; + } + if (x_init > x_center && y_init < y_center) //4th quad + { + if (charge == 1) { + px = -px; + py = -py; + } + } + + //But if the initial T3 curve goes across quarters(i.e. cross axis to separate the quarters), need special redeclaration of px,py signs on these to avoid errors + if (x3 < x2 && x2 < x1) + px = -alpaka::math::abs(acc, px); + else if (x3 > x2 && x2 > x1) + px = alpaka::math::abs(acc, px); + if (y3 < y2 && y2 < y1) + py = -alpaka::math::abs(acc, py); + else if (y3 > y2 && y2 > y1) + py = alpaka::math::abs(acc, py); + + float AO = alpaka::math::sqrt( + acc, (x_other - x_center) * (x_other - x_center) + (y_other - y_center) * (y_other - y_center)); + float BO = + alpaka::math::sqrt(acc, (x_init - x_center) * (x_init - x_center) + (y_init - y_center) * (y_init - y_center)); + float AB2 = (x_other - x_init) * (x_other - x_init) + (y_other - y_init) * (y_other - y_init); + float dPhi = alpaka::math::acos(acc, (AO * AO + BO * BO - AB2) / (2 * AO * BO)); //Law of Cosines + float ds = circleRadius / 100 * dPhi; + float pz = dz / ds * pt; + + float p = alpaka::math::sqrt(acc, px * px + py * py + pz * pz); + float a = -2.f * k2Rinv1GeVf * 100 * charge; + float rou = a / p; + + float rzChiSquared = 0; + float error = 0; + + //check the tilted module, side: PosZ, NegZ, Center(for not tilted) + float drdz = alpaka::math::abs(acc, modules.drdzs()[outerOuterLowerModuleIndex]); + short side = modules.sides()[outerOuterLowerModuleIndex]; + short subdets = modules.subdets()[outerOuterLowerModuleIndex]; + + //calculate residual + if (layer3 <= 6 && ((side == lst::Center) or (drdz < 1))) { // for barrel + float paraA = r_init * r_init + 2 * (px * px + py * py) / (a * a) + 2 * (y_init * px - x_init * py) / a - + r_target * r_target; + float paraB = 2 * (x_init * px + y_init * py) / a; + float paraC = 2 * (y_init * px - x_init * py) / a + 2 * (px * px + py * py) / (a * a); + float A = paraB * paraB + paraC * paraC; + float B = 2 * paraA * paraB; + float C = paraA * paraA - paraC * paraC; + float sol1 = (-B + alpaka::math::sqrt(acc, B * B - 4 * A * C)) / (2 * A); + float sol2 = (-B - alpaka::math::sqrt(acc, B * B - 4 * A * C)) / (2 * A); + float solz1 = alpaka::math::asin(acc, sol1) / rou * pz / p + z_init; + float solz2 = alpaka::math::asin(acc, sol2) / rou * pz / p + z_init; + float diffz1 = (solz1 - z_target) * 100; + float diffz2 = (solz2 - z_target) * 100; + if (edm::isNotFinite(diffz1)) + residual = diffz2; + else if (edm::isNotFinite(diffz2)) + residual = diffz1; + else { + residual = (alpaka::math::abs(acc, diffz1) < alpaka::math::abs(acc, diffz2)) ? diffz1 : diffz2; + } + } else { // for endcap + float s = (z_target - z_init) * p / pz; + float x = x_init + px / a * alpaka::math::sin(acc, rou * s) - py / a * (1 - alpaka::math::cos(acc, rou * s)); + float y = y_init + py / a * alpaka::math::sin(acc, rou * s) + px / a * (1 - alpaka::math::cos(acc, rou * s)); + residual = (r_target - alpaka::math::sqrt(acc, x * x + y * y)) * 100; + } + + // error + if (moduleType3 == 0) { + error = 0.15f; //PS } else { - return alpaka::math::abs(acc, residual) < 5; + error = 5.0f; //2S } + + float projection_missing2 = 1; + if (drdz < 1) + projection_missing2 = ((subdets == lst::Endcap) or (side == lst::Center)) + ? 1.f + : 1 / (1 + drdz * drdz); // cos(atan(drdz)), if dr/dz<1 + if (drdz > 1) + projection_missing2 = ((subdets == lst::Endcap) or (side == lst::Center)) + ? 1.f + : drdz * drdz / (1 + drdz * drdz); //sin(atan(drdz)), if dr/dz>1 + + rzChiSquared = 12 * (residual * residual) / (error * error * projection_missing2); + + //helix calculation returns NaN, use linear approximation + if (edm::isNotFinite(rzChiSquared) || circleRadius < 0) { + float slope = (z3 - z1) / (r3 - r1); + + residual = (layer3 <= 6) ? ((z3 - z1) - slope * (r3 - r1)) : ((r3 - r1) - (z3 - z1) / slope); + residual = (moduleType3 == 0) ? residual / 0.15f : residual / 5.0f; + + rzChiSquared = 12 * residual * residual; + return rzChiSquared < 2.8e-4; + } + + //cuts for different regions + //region definitions: https://github.com/user-attachments/assets/2b3c1425-66eb-4524-83de-deb6f3b31f71 + //for the logic behind the cuts, see https://github.com/SegmentLinking/cmssw/pull/92 + if (layer1 == 7) { + if (layer2 == 8) { + if (layer3 == 9) { + return rzChiSquared < 65.47191f; // Region 0 + } else if (layer3 == 14) { + return rzChiSquared < 3.3200853f; // Region 1 + } + } else if (layer2 == 13) { + return rzChiSquared < 17.194584f; // Region 2 + } + } else if (layer1 == 8) { + if (layer2 == 9) { + if (layer3 == 10) { + return rzChiSquared < 114.91959f; // Region 3 + } else if (layer3 == 15) { + return rzChiSquared < 3.4359624f; // Region 4 + } + } else if (layer2 == 14) { + return rzChiSquared < 4.6487956f; // Region 5 + } + } else if (layer1 == 9) { + if (layer2 == 10) { + if (layer3 == 11) { + return rzChiSquared < 97.34339f; // Region 6 + } else if (layer3 == 16) { + return rzChiSquared < 3.095819f; // Region 7 + } + } else if (layer2 == 15) { + return rzChiSquared < 11.477617f; // Region 8 + } + } else if (layer1 == 1) { + if (layer3 == 7) { + return rzChiSquared < 96.949936f; // Region 10 + } else if (layer3 == 3) { + return rzChiSquared < 458.43982f; // Region 11 + } + } else if (layer1 == 2) { + if (layer2 == 7) { + if (layer3 == 8) { + return rzChiSquared < 218.82303f; // Region 12 + } else if (layer3 == 13) { + return rzChiSquared < 3.155554f; // Region 13 + } + } else if (layer2 == 3) { + if (layer3 == 7) { + return rzChiSquared < 235.5005f; // Region 14 + } else if (layer3 == 12) { + return rzChiSquared < 3.8522234f; // Region 15 + } else if (layer3 == 4) { + return rzChiSquared < 3.5852437f; // Region 16 + } + } + } else if (layer1 == 3) { + if (layer2 == 7) { + if (layer3 == 8) { + return rzChiSquared < 42.68f; // Region 17 + } else if (layer3 == 13) { + return rzChiSquared < 3.853796f; // Region 18 + } + } else if (layer2 == 12) { + return rzChiSquared < 6.2774787f; // Region 19 + } + } + return false; } template @@ -141,62 +383,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& rtOut, unsigned int innerSegmentIndex, float& betaIn, - float& betaInCut) { - bool isPSIn = (modules.moduleType()[innerInnerLowerModuleIndex] == PS); - bool isPSOut = (modules.moduleType()[outerOuterLowerModuleIndex] == PS); - + float& betaInCut, + const float ptCut) { float rtIn = mds.anchorRt()[firstMDIndex]; float rtMid = mds.anchorRt()[secondMDIndex]; - rtOut = mds.anchorRt()[thirdMDIndex]; - - float zIn = mds.anchorZ()[firstMDIndex]; - float zMid = mds.anchorZ()[secondMDIndex]; - zOut = mds.anchorZ()[thirdMDIndex]; - - float alpha1GeVOut = alpaka::math::asin(acc, alpaka::math::min(acc, rtOut * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float rtRatio_OutIn = rtOut / rtIn; // Outer segment beginning rt divided by inner segment beginning rt; - float dzDrtScale = alpaka::math::tan(acc, alpha1GeVOut) / alpha1GeVOut; // The track can bend in r-z plane slightly - float zpitchIn = (isPSIn ? kPixelPSZpitch : kStrip2SZpitch); - float zpitchOut = (isPSOut ? kPixelPSZpitch : kStrip2SZpitch); - - const float zHi = - zIn + (zIn + kDeltaZLum) * (rtRatio_OutIn - 1.f) * (zIn < 0.f ? 1.f : dzDrtScale) + (zpitchIn + zpitchOut); - const float zLo = zIn + (zIn - kDeltaZLum) * (rtRatio_OutIn - 1.f) * (zIn > 0.f ? 1.f : dzDrtScale) - - (zpitchIn + zpitchOut); //slope-correction only on outer end - - //Cut 1 - z compatibility - if ((zOut < zLo) || (zOut > zHi)) - return false; - - float drt_OutIn = (rtOut - rtIn); - - float r3In = alpaka::math::sqrt(acc, zIn * zIn + rtIn * rtIn); float drt_InSeg = rtMid - rtIn; - float dz_InSeg = zMid - zIn; - float dr3_InSeg = - alpaka::math::sqrt(acc, rtMid * rtMid + zMid * zMid) - alpaka::math::sqrt(acc, rtIn * rtIn + zIn * zIn); - - float coshEta = dr3_InSeg / drt_InSeg; - float dzErr = (zpitchIn + zpitchOut) * (zpitchIn + zpitchOut) * 2.f; - - float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2f * (rtOut - rtIn) / 50.f) * (r3In / rtIn); - float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - dzErr += muls2 * drt_OutIn * drt_OutIn / 3.f * coshEta * coshEta; - dzErr = alpaka::math::sqrt(acc, dzErr); - - // Constructing upper and lower bound - const float dzMean = dz_InSeg / drt_InSeg * drt_OutIn; - const float zWindow = dzErr / drt_InSeg * drt_OutIn + - (zpitchIn + zpitchOut); //FIXME for ptCut lower than ~0.8 need to add curv path correction - const float zLoPointed = zIn + dzMean * (zIn > 0.f ? 1.f : dzDrtScale) - zWindow; - const float zHiPointed = zIn + dzMean * (zIn < 0.f ? 1.f : dzDrtScale) + zWindow; - - // Constructing upper and lower bound - - // Cut #2: Pointed Z (Inner segment two MD points to outer segment inner MD) - if ((zOut < zLoPointed) || (zOut > zHiPointed)) - return false; // raw betaIn value without any correction, based on the mini-doublet hit positions float alpha_InLo = __H2F(segments.dPhiChanges()[innerSegmentIndex]); @@ -217,7 +408,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { alpaka::math::asin(acc, alpaka::math::min(acc, (-rt_InSeg + drt_tl_axis) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + (0.02f / drt_InSeg); - //Cut #3: first beta cut + //Beta cut return alpaka::math::abs(acc, betaIn) < betaInCut; } @@ -238,72 +429,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int innerSegmentIndex, unsigned int outerSegmentIndex, float& betaIn, - float& betaInCut) { - bool isPSIn = (modules.moduleType()[innerInnerLowerModuleIndex] == PS); - bool isPSOut = (modules.moduleType()[outerOuterLowerModuleIndex] == PS); - - float rtIn = mds.anchorRt()[firstMDIndex]; - float rtMid = mds.anchorRt()[secondMDIndex]; - rtOut = mds.anchorRt()[thirdMDIndex]; - - float zIn = mds.anchorZ()[firstMDIndex]; - float zMid = mds.anchorZ()[secondMDIndex]; - zOut = mds.anchorZ()[thirdMDIndex]; - - float alpha1GeV_OutLo = alpaka::math::asin(acc, alpaka::math::min(acc, rtOut * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float dzDrtScale = - alpaka::math::tan(acc, alpha1GeV_OutLo) / alpha1GeV_OutLo; // The track can bend in r-z plane slightly - float zpitchIn = (isPSIn ? kPixelPSZpitch : kStrip2SZpitch); - float zpitchOut = (isPSOut ? kPixelPSZpitch : kStrip2SZpitch); - float zGeom = zpitchIn + zpitchOut; - - // Cut #0: Preliminary (Only here in endcap case) - if (zIn * zOut <= 0) - return false; - - float dLum = alpaka::math::copysign(acc, kDeltaZLum, zIn); - bool isOutSgInnerMDPS = modules.moduleType()[outerOuterLowerModuleIndex] == PS; - float rtGeom1 = isOutSgInnerMDPS ? kPixelPSZpitch : kStrip2SZpitch; - float zGeom1 = alpaka::math::copysign(acc, zGeom, zIn); - float rtLo = rtIn * (1.f + (zOut - zIn - zGeom1) / (zIn + zGeom1 + dLum) / dzDrtScale) - - rtGeom1; //slope correction only on the lower end - - //Cut #1: rt condition - float zInForHi = zIn - zGeom1 - dLum; - if (zInForHi * zIn < 0) { - zInForHi = alpaka::math::copysign(acc, 0.1f, zIn); - } - float rtHi = rtIn * (1.f + (zOut - zIn + zGeom1) / zInForHi) + rtGeom1; - - //Cut #2: rt condition - if ((rtOut < rtLo) || (rtOut > rtHi)) - return false; - - float rIn = alpaka::math::sqrt(acc, zIn * zIn + rtIn * rtIn); - - const float drtSDIn = rtMid - rtIn; - const float dzSDIn = zMid - zIn; - const float dr3SDIn = - alpaka::math::sqrt(acc, rtMid * rtMid + zMid * zMid) - alpaka::math::sqrt(acc, rtIn * rtIn + zIn * zIn); - - const float coshEta = dr3SDIn / drtSDIn; //direction estimate - const float dzOutInAbs = alpaka::math::abs(acc, zOut - zIn); - const float multDzDr = dzOutInAbs * coshEta / (coshEta * coshEta - 1.f); - const float zGeom1_another = kPixelPSZpitch; - const float kZ = (zOut - zIn) / dzSDIn; - float drtErr = - zGeom1_another * zGeom1_another * drtSDIn * drtSDIn / dzSDIn / dzSDIn * (1.f - 2.f * kZ + 2.f * kZ * kZ); - const float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2 * (rtOut - rtIn) / 50.f) * (rIn / rtIn); - const float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - drtErr += muls2 * multDzDr * multDzDr / 3.f * coshEta * coshEta; - drtErr = alpaka::math::sqrt(acc, drtErr); - - //Cut #3: rt-z pointed - - if ((kZ < 0) || (rtOut < rtLo) || (rtOut > rtHi)) - return false; - + float& betaInCut, + const float ptCut) { float rt_InLo = mds.anchorRt()[firstMDIndex]; float rt_InOut = mds.anchorRt()[secondMDIndex]; @@ -336,7 +463,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { betaInCut = alpaka::math::asin(acc, alpaka::math::min(acc, (-sdIn_dr + dr) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + (0.02f / sdIn_d); - //Cut #4: first beta cut + //Beta cut return alpaka::math::abs(acc, betaInRHmin) < betaInCut; } @@ -356,75 +483,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int innerSegmentIndex, unsigned int outerSegmentIndex, float& betaIn, - float& betaInCut) { - float rtIn = mds.anchorRt()[firstMDIndex]; - float rtMid = mds.anchorRt()[secondMDIndex]; - rtOut = mds.anchorRt()[thirdMDIndex]; - - float zIn = mds.anchorZ()[firstMDIndex]; - float zMid = mds.anchorZ()[secondMDIndex]; - zOut = mds.anchorZ()[thirdMDIndex]; - - float alpha1GeV_Out = alpaka::math::asin(acc, alpaka::math::min(acc, rtOut * k2Rinv1GeVf / ptCut, kSinAlphaMax)); - - float dzDrtScale = - alpaka::math::tan(acc, alpha1GeV_Out) / alpha1GeV_Out; // The track can bend in r-z plane slightly - - // Cut #0: Preliminary (Only here in endcap case) - if (zIn * zOut <= 0) - return false; - - float dLum = alpaka::math::copysign(acc, kDeltaZLum, zIn); - bool isOutSgOuterMDPS = modules.moduleType()[outerOuterLowerModuleIndex] == PS; - bool isInSgInnerMDPS = modules.moduleType()[innerInnerLowerModuleIndex] == PS; - - float rtGeom = (isInSgInnerMDPS and isOutSgOuterMDPS) ? 2.f * kPixelPSZpitch - : (isInSgInnerMDPS or isOutSgOuterMDPS) ? kPixelPSZpitch + kStrip2SZpitch - : 2.f * kStrip2SZpitch; - - float dz = zOut - zIn; - const float rtLo = rtIn * (1.f + dz / (zIn + dLum) / dzDrtScale) - rtGeom; //slope correction only on the lower end - const float rtHi = rtIn * (1.f + dz / (zIn - dLum)) + rtGeom; - - //Cut #1: rt condition - if ((rtOut < rtLo) || (rtOut > rtHi)) - return false; - - bool isInSgOuterMDPS = modules.moduleType()[outerOuterLowerModuleIndex] == PS; - - float drtSDIn = rtMid - rtIn; - float dzSDIn = zMid - zIn; - float dr3SDIn = - alpaka::math::sqrt(acc, rtMid * rtMid + zMid * zMid) - alpaka::math::sqrt(acc, rtIn * rtIn + zIn * zIn); - - float coshEta = dr3SDIn / drtSDIn; //direction estimate - float dzOutInAbs = alpaka::math::abs(acc, zOut - zIn); - float multDzDr = dzOutInAbs * coshEta / (coshEta * coshEta - 1.f); - - float kZ = (zOut - zIn) / dzSDIn; - float thetaMuls2 = (kMulsInGeV * kMulsInGeV) * (0.1f + 0.2f * (rtOut - rtIn) / 50.f); - - float muls2 = thetaMuls2 * 9.f / (ptCut * ptCut) * 16.f; - - float drtErr = - alpaka::math::sqrt(acc, - kPixelPSZpitch * kPixelPSZpitch * 2.f / (dzSDIn * dzSDIn) * (dzOutInAbs * dzOutInAbs) + - muls2 * multDzDr * multDzDr / 3.f * coshEta * coshEta); - - float drtMean = drtSDIn * dzOutInAbs / alpaka::math::abs(acc, dzSDIn); - float rtWindow = drtErr + rtGeom; - float rtLo_point = rtIn + drtMean / dzDrtScale - rtWindow; - float rtHi_point = rtIn + drtMean + rtWindow; - - // Cut #3: rt-z pointed - // https://github.com/slava77/cms-tkph2-ntuple/blob/superDoubletLinked-91X-noMock/doubletAnalysis.C#L3765 - - if (isInSgInnerMDPS and isInSgOuterMDPS) // If both PS then we can point - { - if ((kZ < 0) || (rtOut < rtLo_point) || (rtOut > rtHi_point)) - return false; - } - + float& betaInCut, + const float ptCut) { float rt_InLo = mds.anchorRt()[firstMDIndex]; float rt_InOut = mds.anchorRt()[secondMDIndex]; float sdIn_alpha = __H2F(segments.dPhiChanges()[innerSegmentIndex]); @@ -457,7 +517,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { betaInCut = alpaka::math::asin(acc, alpaka::math::min(acc, (-sdIn_dr + dr) * k2Rinv1GeVf / ptCut, kSinAlphaMax)) + (0.02f / sdIn_d); - //Cut #4: first beta cut + //Beta cut return alpaka::math::abs(acc, betaInRHmin) < betaInCut; } @@ -478,7 +538,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int innerSegmentIndex, unsigned int outerSegmentIndex, float& betaIn, - float& betaInCut) { + float& betaInCut, + const float ptCut) { short innerInnerLowerModuleSubdet = modules.subdets()[innerInnerLowerModuleIndex]; short middleLowerModuleSubdet = modules.subdets()[middleLowerModuleIndex]; short outerOuterLowerModuleSubdet = modules.subdets()[outerOuterLowerModuleIndex]; @@ -499,7 +560,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { rtOut, innerSegmentIndex, betaIn, - betaInCut); + betaInCut, + ptCut); } else if (innerInnerLowerModuleSubdet == Barrel and middleLowerModuleSubdet == Barrel and outerOuterLowerModuleSubdet == Endcap) { return passPointingConstraintBBE(acc, @@ -518,7 +580,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerSegmentIndex, outerSegmentIndex, betaIn, - betaInCut); + betaInCut, + ptCut); } else if (innerInnerLowerModuleSubdet == Barrel and middleLowerModuleSubdet == Endcap and outerOuterLowerModuleSubdet == Endcap) { return passPointingConstraintBBE(acc, @@ -537,7 +600,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerSegmentIndex, outerSegmentIndex, betaIn, - betaInCut); + betaInCut, + ptCut); } @@ -558,7 +622,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerSegmentIndex, outerSegmentIndex, betaIn, - betaInCut); + betaInCut, + ptCut); } return false; // failsafe } @@ -612,7 +677,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { float& betaInCut, float& circleRadius, float& circleCenterX, - float& circleCenterY) { + float& circleCenterY, + const float ptCut) { //this cut reduces the number of candidates by a factor of 4, i.e., 3 out of 4 warps can end right here! if (segments.mdIndices()[innerSegmentIndex][1] != segments.mdIndices()[outerSegmentIndex][0]) return false; @@ -621,6 +687,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { unsigned int secondMDIndex = segments.mdIndices()[outerSegmentIndex][0]; unsigned int thirdMDIndex = segments.mdIndices()[outerSegmentIndex][1]; + float x1 = mds.anchorX()[firstMDIndex]; + float x2 = mds.anchorX()[secondMDIndex]; + float x3 = mds.anchorX()[thirdMDIndex]; + float y1 = mds.anchorY()[firstMDIndex]; + float y2 = mds.anchorY()[secondMDIndex]; + float y3 = mds.anchorY()[thirdMDIndex]; + + circleRadius = computeRadiusFromThreeAnchorHits(acc, x1, y1, x2, y2, x3, y3, circleCenterX, circleCenterY); + if (not passRZConstraint(acc, modules, mds, @@ -629,8 +704,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { outerOuterLowerModuleIndex, firstMDIndex, secondMDIndex, - thirdMDIndex)) + thirdMDIndex, + circleRadius, + circleCenterX, + circleCenterY)) return false; + if (not passPointingConstraint(acc, modules, mds, @@ -647,17 +726,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { innerSegmentIndex, outerSegmentIndex, betaIn, - betaInCut)) + betaInCut, + ptCut)) return false; - float x1 = mds.anchorX()[firstMDIndex]; - float x2 = mds.anchorX()[secondMDIndex]; - float x3 = mds.anchorX()[thirdMDIndex]; - float y1 = mds.anchorY()[firstMDIndex]; - float y2 = mds.anchorY()[secondMDIndex]; - float y3 = mds.anchorY()[thirdMDIndex]; - - circleRadius = computeRadiusFromThreeAnchorHits(acc, x1, y1, x2, y2, x3, y3, circleCenterX, circleCenterY); return true; } @@ -672,7 +744,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { TripletsOccupancy tripletsOccupancy, ObjectRangesConst ranges, uint16_t* index_gpu, - uint16_t nonZeroModules) const { + uint16_t nonZeroModules, + const float ptCut) const { auto const globalThreadIdx = alpaka::getIdx(acc); auto const gridThreadExtent = alpaka::getWorkDiv(acc); @@ -719,7 +792,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { betaInCut, circleRadius, circleCenterX, - circleCenterY); + circleCenterY, + ptCut); if (success) { unsigned int totOccupancyTriplets = @@ -730,7 +804,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { if (static_cast(totOccupancyTriplets) >= ranges.tripletModuleOccupancy()[innerInnerLowerModuleIndex]) { #ifdef WARNINGS - printf("Triplet excess alert! Module index = %d\n", innerInnerLowerModuleIndex); + printf("Triplet excess alert! Module index = %d, Occupancy = %d\n", + innerInnerLowerModuleIndex, + totOccupancyTriplets); #endif } else { unsigned int tripletModuleIndex = alpaka::atomicAdd( @@ -769,7 +845,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { ALPAKA_FN_ACC void operator()(TAcc const& acc, ModulesConst modules, ObjectRanges ranges, - SegmentsOccupancyConst segmentsOccupancy) const { + SegmentsOccupancyConst segmentsOccupancy, + const float ptCut) const { // implementation is 1D with a single block static_assert(std::is_same_v, "Should be Acc1D"); ALPAKA_ASSERT_ACC((alpaka::getWorkDiv(acc)[0] == 1)); @@ -784,6 +861,25 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { } alpaka::syncBlockThreads(acc); + // Occupancy matrix for 0.8 GeV pT Cut + constexpr int p08_occupancy_matrix[4][4] = { + {543, 235, 88, 46}, // category 0 + {755, 347, 0, 0}, // category 1 + {0, 0, 0, 0}, // category 2 + {0, 38, 46, 39} // category 3 + }; + + // Occupancy matrix for 0.6 GeV pT Cut, 99.9% + constexpr int p06_occupancy_matrix[4][4] = { + {1146, 544, 216, 83}, // category 0 + {1032, 275, 0, 0}, // category 1 + {0, 0, 0, 0}, // category 2 + {0, 115, 110, 76} // category 3 + }; + + // Select the appropriate occupancy matrix based on ptCut + const auto& occupancy_matrix = (ptCut < 0.8f) ? p06_occupancy_matrix : p08_occupancy_matrix; + for (uint16_t i = globalThreadIdx[0]; i < modules.nLowerModules(); i += gridThreadExtent[0]) { if (segmentsOccupancy.nSegments()[i] == 0) { ranges.tripletModuleIndices()[i] = nTotalTriplets; @@ -796,63 +892,18 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::lst { short module_subdets = modules.subdets()[i]; float module_eta = alpaka::math::abs(acc, modules.eta()[i]); - int category_number; - if (module_layers <= 3 && module_subdets == 5) - category_number = 0; - else if (module_layers >= 4 && module_subdets == 5) - category_number = 1; - else if (module_layers <= 2 && module_subdets == 4 && module_rings >= 11) - category_number = 2; - else if (module_layers >= 3 && module_subdets == 4 && module_rings >= 8) - category_number = 2; - else if (module_layers <= 2 && module_subdets == 4 && module_rings <= 10) - category_number = 3; - else if (module_layers >= 3 && module_subdets == 4 && module_rings <= 7) - category_number = 3; - else - category_number = -1; - - int eta_number; - if (module_eta < 0.75f) - eta_number = 0; - else if (module_eta < 1.5f) - eta_number = 1; - else if (module_eta < 2.25f) - eta_number = 2; - else if (module_eta < 3.0f) - eta_number = 3; - else - eta_number = -1; - - int occupancy; - if (category_number == 0 && eta_number == 0) - occupancy = 543; - else if (category_number == 0 && eta_number == 1) - occupancy = 235; - else if (category_number == 0 && eta_number == 2) - occupancy = 88; - else if (category_number == 0 && eta_number == 3) - occupancy = 46; - else if (category_number == 1 && eta_number == 0) - occupancy = 755; - else if (category_number == 1 && eta_number == 1) - occupancy = 347; - else if (category_number == 2 && eta_number == 1) - occupancy = 0; - else if (category_number == 2 && eta_number == 2) - occupancy = 0; - else if (category_number == 3 && eta_number == 1) - occupancy = 38; - else if (category_number == 3 && eta_number == 2) - occupancy = 46; - else if (category_number == 3 && eta_number == 3) - occupancy = 39; - else { - occupancy = 0; + int category_number = getCategoryNumber(module_layers, module_subdets, module_rings); + int eta_number = getEtaBin(module_eta); + + int occupancy = 0; + if (category_number != -1 && eta_number != -1) { + occupancy = occupancy_matrix[category_number][eta_number]; + } #ifdef WARNINGS + else { printf("Unhandled case in createTripletArrayRanges! Module index = %i\n", i); -#endif } +#endif ranges.tripletModuleOccupancy()[i] = occupancy; unsigned int nTotT = alpaka::atomicAdd(acc, &nTotalTriplets, occupancy, alpaka::hierarchy::Threads{}); diff --git a/RecoTracker/LSTCore/standalone/.gitignore b/RecoTracker/LSTCore/standalone/.gitignore index 29e86cb6b932a..3d27afd0c4469 100644 --- a/RecoTracker/LSTCore/standalone/.gitignore +++ b/RecoTracker/LSTCore/standalone/.gitignore @@ -9,6 +9,7 @@ plots_*/ scripts/moduleconnection*.txt *.root .make.log* +performance* bin/doAnalysis bin/lst bin/lst_cuda diff --git a/RecoTracker/LSTCore/standalone/LST/Makefile b/RecoTracker/LSTCore/standalone/LST/Makefile index ee6f82ecccde1..3790a6031b0c8 100644 --- a/RecoTracker/LSTCore/standalone/LST/Makefile +++ b/RecoTracker/LSTCore/standalone/LST/Makefile @@ -67,7 +67,7 @@ CMSSW_WERRORS_CPU = -Werror=pointer-arith -Werror=overlength-strings -Werror= -Wno-unused-parameter -Wno-unused-local-typedefs -Wno-attributes CMSSW_WERRORS_CUDA = $(patsubst %,-Xcompiler %,$(CMSSW_WERRORS_CPU)) CMSSW_WERRORS_ROCM = $(CMSSW_WERRORS_CPU) -T5CUTFLAGS = $(T5DNNFLAG) $(T5RZCHI2FLAG) $(T5RPHICHI2FLAG) +T5CUTFLAGS = $(T5DNNFLAG) $(T5RZCHI2FLAG) LD_CPU = g++ SOFLAGS_CPU = -g -shared -fPIC @@ -88,31 +88,31 @@ CUTVALUEFLAG = CUTVALUEFLAG_FLAGS = -DCUT_VALUE_DEBUG %_cpu.o: ../../src/alpaka/%.dev.cc - $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ + $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ %_cuda.o: ../../src/alpaka/%.dev.cc - $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ + $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ %_rocm.o: ../../src/alpaka/%.dev.cc - $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ + $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ %_cpu.o: ../../src/alpaka/%.cc - $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ + $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ %_cuda.o: ../../src/alpaka/%.cc - $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ + $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ %_rocm.o: ../../src/alpaka/%.cc - $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ + $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ %_cpu.o: ../../src/%.cc - $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ + $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ %_cuda.o: ../../src/%.cc - $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ + $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ %_rocm.o: ../../src/%.cc - $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(PTCUTFLAG) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ + $(COMPILE_CMD_ROCM) $(CXXFLAGS_ROCM) $(ROOTINCLUDE) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_ROCM) $(T5CUTFLAGS) $(ALPAKAINCLUDE) $(ALPAKABACKEND_ROCM) $< -o $@ $(LIB_CPU): $(CCOBJECTS_CPU) $(LSTOBJECTS_CPU) $(LD_CPU) $(SOFLAGS_CPU) $^ -o $@ diff --git a/RecoTracker/LSTCore/standalone/Makefile b/RecoTracker/LSTCore/standalone/Makefile index b98df31df1b5e..18ec73db8d975 100644 --- a/RecoTracker/LSTCore/standalone/Makefile +++ b/RecoTracker/LSTCore/standalone/Makefile @@ -25,7 +25,6 @@ ALPAKA_CUDA = -DALPAKA_ACC_GPU_CUDA_ENABLED -DALPAKA_HOST_ONLY -DALPAKA_DISABLE_ ALPAKA_ROCM = -DALPAKA_ACC_GPU_HIP_ENABLED -DALPAKA_HOST_ONLY -DALPAKA_DISABLE_VENDOR_RNG -D__HIP_PLATFORM_HCC__ -D__HIP_PLATFORM_AMD__ -DALPAKA_DEFAULT_HOST_MEMORY_ALIGNMENT=128 EXTRAFLAGS = -ITMultiDrawTreePlayer -Wunused-variable -lTMVA -lEG -lGenVector -lXMLIO -lMLP -lTreePlayer -fopenmp DOQUINTUPLET = -PTCUTFLAG = CUTVALUEFLAG = CUTVALUEFLAG_FLAGS = -DCUT_VALUE_DEBUG @@ -47,20 +46,20 @@ cutvalue_primitive: rooutil efficiency $(EXES) bin/lst_cpu: LSTLIB=-llst_cpu bin/lst_cpu: bin/lst_cpu.o $(OBJECTS_CPU) - $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CPU) -o $@ + $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CPU) -o $@ bin/lst_cuda: LSTLIB=-llst_cuda bin/lst_cuda: bin/lst_cuda.o $(OBJECTS_CUDA) - $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CUDA) $(LDFLAGS_CUDA) -o $@ + $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CUDA) $(LDFLAGS_CUDA) -o $@ bin/lst_rocm: LSTLIB=-llst_rocm bin/lst_rocm: bin/lst_rocm.o $(OBJECTS_ROCM) - $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_ROCM) $(LDFLAGS_ROCM) -o $@ + $(CXX) $(LDFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $^ $(ROOTLIBS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_ROCM) $(LDFLAGS_ROCM) -o $@ %_cpu.o: %.cc rooutil - $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CPU) $< -c -o $@ + $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CPU) $< -c -o $@ %_cuda.o: %.cc rooutil - $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CUDA) $(CUDAINCLUDE) $< -c -o $@ + $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_CUDA) $(CUDAINCLUDE) $< -c -o $@ %_rocm.o: %.cc rooutil - $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(PTCUTFLAG) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_ROCM) $(ROCMINCLUDE) $< -c -o $@ + $(CXX) $(CXXFLAGS) $(EXTRAFLAGS) $(INCLUDEFLAGS) $(ALPAKAFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKA_ROCM) $(ROCMINCLUDE) $< -c -o $@ rooutil: $(MAKE) -C code/rooutil/ diff --git a/RecoTracker/LSTCore/standalone/README.md b/RecoTracker/LSTCore/standalone/README.md index 02fbef943f697..ed68ea6797f8e 100644 --- a/RecoTracker/LSTCore/standalone/README.md +++ b/RecoTracker/LSTCore/standalone/README.md @@ -1,53 +1,93 @@ -# TrackLooper +# How to set up standalone LST - -## Quick Start - - -### Setting up LSTPerformanceWeb (only for lnx7188 and lnx4555) +## Setting up LSTPerformanceWeb (only for lnx7188 and lnx4555) For lnx7188 and lnx4555 this needs to be done once cd /cdat/tem/${USER}/ git clone git@github.com:SegmentLinking/LSTPerformanceWeb.git -### Setting up container (only for lnx7188) +## Setting up container (only for lnx7188) For lnx7188 this needs to be done before compiling or running the code: singularity shell --nv --bind /mnt/data1:/data --bind /data2/segmentlinking/ --bind /opt --bind /nfs --bind /mnt --bind /usr/local/cuda/bin/ --bind /cvmfs /cvmfs/unpacked.cern.ch/registry.hub.docker.com/cmssw/el8:x86_64 -### Setting up the code +## Setting up LST + +There are two way to set up LST as a standalone, either by setting up a full CMSSW area, which provides a unified setup for standalone and CMSSW tests, or by `sparse-checkout` only the relevant package and using them independent of CMSSW. A CVMFS-less setup is also provided for the second option. + +### Setting up LST within CMSSW (preferred option) + +```bash +CMSSW_VERSION=CMSSW_14_2_0_pre4 # Change with latest/preferred CMSSW version +cmsrel ${CMSSW_VERSION} +cd ${CMSSW_VERSION}/src/ +cmsenv +git cms-init +# If necessary, add the remote git@github.com:SegmentLinking/cmssw.git +# and checkout a development/feature branch +git cms-addpkg RecoTracker/LST RecoTracker/LSTCore +# If modifying some dependencies, run `git cms-checkdeps -a -A` +scram b -j 12 +cd RecoTracker/LSTCore/standalone +``` + +The data files for LST will be fetched from CVMFS. However, if new data files are needed, the need to be manually placed (under `$CMSSW_BASE/external/$SCRAM_ARCH/data/RecoTracker/LSTCore/data/`). This is done by running: - git clone git@github.com:SegmentLinking/TrackLooper.git - cd TrackLooper/ - # Source one of the commands below, depending on the site - source setup.sh # if on UCSD or Cornell - source setup_hpg.sh # if on Florida +```bash +mkdir -p $CMSSW_BASE/external/$SCRAM_ARCH/data/RecoTracker/LSTCore/ +cd $CMSSW_BASE/external/$SCRAM_ARCH/data/RecoTracker/LSTCore/ +git clone git@github.com:cms-data/RecoTracker-LSTCore.git data + +cd - +``` -### Running the code +### Setting up LST outside of CMSSW - sdl_make_tracklooper -mc - sdl_ -i PU200 -o LSTNtuple.root +For this setup, dependencies are still provided from CMSSW through CVMFS but no CMSSW area is setup. This is done by running the following commands. + +``` bash +LST_BRANCH=master # Change to the development branch +git clone --filter=blob:none --no-checkout --depth 1 --sparse --branch ${LST_BRANCH} https://github.com/SegmentLinking/cmssw.git TrackLooper +cd TrackLooper +git sparse-checkout add RecoTracker/LSTCore +git checkout +cd RecoTracker/LSTCore/standalone/ +``` + +As in the sectino above, the data files are fetched from CVMFS, but they can also be copied manually under `RecoTracker/LSTCore/data/`. + + +## Running the code + +Each time the standalone version of LST is to be used, the following command should be run from the `RecoTracker/LSTCore/standalone` directory: +```bash +source setup.sh +``` + +For running the code: + + lst_make_tracklooper -m + lst_ -i PU200 -o LSTNtuple.root createPerfNumDenHists -i LSTNtuple.root -o LSTNumDen.root - lst_plot_performance.py LSTNumDen.root -t "myTag" - # python3 efficiency/python/lst_plot_performance.py LSTNumDen.root -t "myTag" # if you are on cgpu-1 or Cornell + lst_plot_performance.py LSTNumDen.root -t "myTag" # or + python3 efficiency/python/lst_plot_performance.py LSTNumDen.root -t "myTag" # if you are on cgpu-1 or Cornell The above can be even simplified - sdl_run -f -mc -s PU200 -n -1 -t myTag + lst_run -f -m -s PU200 -n -1 -t myTag The `-f` flag can be omitted when the code has already been compiled. If multiple backends were compiled, then the `-b` flag can be used to specify a backend. For example - sdl_run -b cpu -s PU200 -n -1 -t myTag + lst_run -b cpu -s PU200 -n -1 -t myTag -## Command explanations +### Command explanations Compile the code with option flags. If none of `C,G,R,A` are used, then it defaults to compiling for CUDA and CPU. - sdl_make_tracklooper -mc + lst_make_tracklooper -m -m: make clean binaries - -c: run with the cmssw caching allocator -C: compile CPU backend -G: compile CUDA backend -R: compile ROCm backend @@ -56,7 +96,7 @@ Compile the code with option flags. If none of `C,G,R,A` are used, then it defau Run the code - sdl_ -n -v -w -s -i -o + lst_ -n -v -w -s -i -o -i: PU200; muonGun, etc -n: number of events; default: all @@ -106,186 +146,40 @@ Comparing two different runs -t "mywork" \ --compare -## CMSSW Integration -This is the a complete set of instruction on how the TrackLooper code -can be linked as an external tool in CMSSW: - -### Build TrackLooper -```bash -git clone git@github.com:SegmentLinking/TrackLooper.git -cd TrackLooper/ -# Source one of the commands below, depending on the site -source setup.sh # if on UCSD or Cornell -source setup_hpg.sh # if on Florida -sdl_make_tracklooper -mc -cd .. -``` - -### Set up `TrackLooper` as an external -```bash -mkdir workingFolder # Create the folder you will be working in -cd workingFolder -cmsrel CMSSW_14_1_0_pre3 -cd CMSSW_14_1_0_pre3/src -cmsenv -git cms-init -git remote add SegLink git@github.com:SegmentLinking/cmssw.git -git fetch SegLink CMSSW_14_1_0_pre3_LST_X -git cms-addpkg RecoTracker Configuration -git checkout CMSSW_14_1_0_pre3_LST_X -#To include both the CPU library and GPU library into CMSSW, create 3 xml files (headers file has no library). -#Before writing the following xml file, check that libsdl_cpu.so and libsdl_gpu.so can be found under the ../../../TrackLooper/SDL/ folder. -cat <lst_headers.xml - - - - - - - -EOF -cat <lst_cpu.xml - - - - - - - - - -EOF -cat <lst_cuda.xml - - - - - - - - - -EOF -scram setup lst_headers.xml -scram setup lst_cpu.xml -scram setup lst_cuda.xml -cmsenv -git cms-checkdeps -a -A -scram b -j 12 -``` - -### Run the LST reconstruction in CMSSW -A simple test configuration of the LST reconstruction can be run with the command: -```bash -cmsRun RecoTracker/LST/test/LSTAlpakaTester.py -``` +# How to set up CMSSW with LST -For a more complete workflow, one can run a modified version of the 21034.1 workflow. -To get the commands of this workflow, one can run: -```bash -runTheMatrix.py -w upgrade -n -e -l 21034.1 -``` +## Setting up the area -For convenience, the workflow has been run for 100 events and the output is stored here: -```bash -/data2/segmentlinking/CMSSW_14_1_0_pre0/step2_21034.1_100Events.root -``` +Follow the instructions in the ["Setting up LST within CMSSW" section](#setting-up-lst-within-cmssw-preferred-option). -For enabling the LST reconstruction in the CMSSW tracking workflow, a modified step3 needs to be run. -This is based on the step3 command of the 21034.1 workflow with the following changes: - - Remove the `--pileup_input` and `--pileup` flags. - - The number of threads and streams for the job can be optionally controlled by the `--nThreads` and `--nStreams` command line options respectively (`1` ends up being the actual default value for both, and more info can be found by running `cmsDriver.py --help`). - - Add at the end of the command: `--procModifiers gpu,trackingLST,trackingIters01 --no_exec` - -Run the command and modify the output configuration file with the following: - - If want to run a cpu version, remove the ```gpu``` in the line defining the `process` object: - ```python - process = cms.Process('RECO',...,gpu,...) - ``` - - Add the following lines below the part where the import of the standard configurations happens: - ```python - process.load('Configuration.StandardSequences.Accelerators_cff') - process.load("HeterogeneousCore.AlpakaCore.ProcessAcceleratorAlpaka_cfi") - ``` - - Modify the input and output file names accordingly, as well as the number of events. - -Then, run the configuration file with `cmsRun`. - -To get the DQM files, one would have to run step4 of the 21034.1 workflow with the following modifications: - - Add `--no_exec` to the end of command and then run it. - - Modify the output configuration file by changing the input file (the one containing `inDQM` from the previous step) and number of events accordingly. +## Run the LST reconstruction in CMSSW (read to the end, before running) -Running the configuration file with `cmsRun`, the output file will have a name starting with `DQM`. The name is the same every time this step runs, -so it is good practice to rename the file, e.g. to `tracking_Iters01LST.root`. -The MTV plots can be produced with the command: -```bash -makeTrackValidationPlots.py --extended tracking_Iters01LST.root -``` -Comparison plots can be made by including multiple ROOT files as arguments. +Two complete workflows have been implemented within CMSSW to run a two-iteration, tracking-only reconstruction with LST: + - 24834.703 (CPU) + - 24834.704 (GPU) -**Note:** In case one wants to run step2 as well, similar modifications as in step4 (`--no_exec` flag and input file/number of events) need to be applied. Moreover, the PU files have better be modified to point to local ones. This can be done by inserting a dummy file when running the command (set the argument of the `--pileup_input` flag to `file:file.root`), and then change the PU input files in the configuration to the following line (by means of replacing the corresponding line in the configuration): -```python -process.mix.input.fileNames = cms.untracked.vstring(['file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/066fc95d-1cef-4469-9e08-3913973cd4ce.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/07928a25-231b-450d-9d17-e20e751323a1.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/26bd8fb0-575e-4201-b657-94cdcb633045.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/4206a9c5-44c2-45a5-aab2-1a8a6043a08a.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/55a372bf-a234-4111-8ce0-ead6157a1810.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/59ad346c-f405-4288-96d7-795f81c43fe8.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/7280f5ec-b71d-4579-a730-7ce2de0ff906.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/b93adc85-715f-477a-afc9-65f3241933ee.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/c7a0aa46-f55c-4b01-977f-34a397b71fba.root', 'file:/data2/segmentlinking/PUSamplesForCMSSW1263/CMSSW_12_3_0_pre5/RelValMinBias_14TeV/GEN-SIM/123X_mcRun4_realistic_v4_2026D88noPU-v1/e77fa467-97cb-4943-884f-6965b4eb0390.root']) -``` +We will use the second one in the example below. To get the commands of this workflow, one can run: -### Inclusion of LST in other CMSSW packages -Including the line -``` - -``` -in the relevant package `BuildFile.xml` allows for -including our headers in the code of that package. + runTheMatrix.py -w upgrade -n -e -l 24834.704 -## Running LST in a CVMFS-less setup +For convenience, the workflow has been run for 100 events and the output is stored here: -The setup scripts included in this repository assume that the [CernVM File System (CVMFS)](https://cernvm.cern.ch/fs/) is installed. This provides a convenient way to fetch the required dependencies, but it is not necessary to run LST in standalone mode. Here, we briefly describe how to build and run it when CVMFS is not available. + /data2/segmentlinking/step2_29834.1_100Events.root -The necessary dependencies are CUDA, ROOT, the Boost libraries, Alpaka, and some CMSSW headers. CUDA, ROOT, and Boost, are fairly standard libraries and are available from multiple package managers. For the remaining necessary headers you will need to clone the [Alpaka](https://github.com/alpaka-group/alpaka) and [CMSSW](https://github.com/cms-sw/cmssw) repositories. The Alpaka repository is reasonably sized, but the CMSSW one extremely large, especially considering that we only need a tiny fraction of its files to build LST. We can get only the Alpaka interface headers from CMSSW by running the following commands. +The input files in each step may need to be properly adjusted to match the ones produced by the previous step/provided externally, hence it is better to run the commands with the `--no_exec` option included. -``` bash -git clone --filter=blob:none --no-checkout --depth 1 --sparse --branch CMSSW_14_1_X https://github.com/cms-sw/cmssw.git -cd cmssw -git sparse-checkout add HeterogeneousCore/AlpakaInterface -git checkout -``` +Running the configuration file with `cmsRun`, the output file will have a name starting with `DQM`. The name is the same every time this step runs, +so it is good practice to rename the file, e.g. to `step4_24834.704.root`. +The MTV plots can be produced with the command: -Then all that is left to do is set some environment variables. We give an example of how to do this in lnx7188/cgpu-1. + makeTrackValidationPlots.py --extended step4_24834.704.root -```bash -# These two lines are only needed to set the right version of gcc and nvcc. They are not needed for standard installations. -export PATH=/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/gcc/12.3.1-40d504be6370b5a30e3947a6e575ca28/bin:/cvmfs/cms.cern.ch/el8_amd64_gcc12/cms/cmssw/CMSSW_14_1_0_pre3/external/el8_amd64_gcc12/bin:$PATH -export LD_LIBRARY_PATH=/cvmfs/cms.cern.ch/el8_amd64_gcc12/cms/cmssw/CMSSW_14_1_0_pre3/biglib/el8_amd64_gcc12:/cvmfs/cms.cern.ch/el8_amd64_gcc12/cms/cmssw/CMSSW_14_1_0_pre3/lib/el8_amd64_gcc12:/cvmfs/cms.cern.ch/el8_amd64_gcc12/cms/cmssw/CMSSW_14_1_0_pre3/external/el8_amd64_gcc12/lib:/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/gcc/12.3.1-40d504be6370b5a30e3947a6e575ca28/lib64:/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/gcc/12.3.1-40d504be6370b5a30e3947a6e575ca28/lib:$LD_LIBRARY_PATH - -# These are the lines that you need to manually change for a CVMFS-less setup. -# In this example we use cvmfs paths since that is where the dependencies are in lnx7188/cgpu1, but they can point to local directories. -export BOOST_ROOT=/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/boost/1.80.0-60a217837b5db1cff00c7d88ec42f53a -export ALPAKA_ROOT=/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/alpaka/1.1.0-7d0324257db47fde2d27987e7ff98fb4 -export CUDA_HOME=/cvmfs/cms.cern.ch/el8_amd64_gcc12/external/cuda/12.4.1-06cde0cd9f95a73a1ea05c8535f60bde -export ROOT_ROOT=/cvmfs/cms.cern.ch/el8_amd64_gcc12/lcg/root/6.30.07-21947a33e64ceb827a089697ad72e468 -export CMSSW_BASE=/cvmfs/cms.cern.ch/el8_amd64_gcc12/cms/cmssw/CMSSW_14_1_0_pre3 - -# These lines are needed to account for some extra environment variables that are exported in the setup script. -export LD_LIBRARY_PATH=$PWD/SDL/cuda:$PWD/SDL/cpu:$PWD:$LD_LIBRARY_PATH -export PATH=$PWD/bin:$PATH -export PATH=$PWD/efficiency/bin:$PATH -export PATH=$PWD/efficiency/python:$PATH -export TRACKLOOPERDIR=$PWD -export TRACKINGNTUPLEDIR=/data2/segmentlinking/CMSSW_12_2_0_pre2/ -export LSTOUTPUTDIR=. -source $PWD/code/rooutil/thisrooutil.sh - -# After this, you can compile and run LST as usual. -sdl_run -f -mc -s PU200 -n -1 -t myTag -``` +Comparison plots can be made by including multiple ROOT files as arguments. ## Code formatting and checking -The makefile in the `SDL` directory includes phony targets to run `clang-format` and `clang-tidy` on the code using the formatting and checks used in CMSSW. The following are the available commands. +Using the first setup option above, it is prefered to run the checks provided by CMSSW using the following commands. -- `make format` - Formats the code in the `SDL` directory using `clang-format` following the rules specified in `.clang-format`. -- `make check` - Runs `clang-tidy` on the code in the `SDL` directory to performs the checks specified in `.clang-tidy`. -- `make check-fix` - Same as `make check`, but fixes the issues that it knows how to fix. - \ No newline at end of file +``` +scram b -j 12 code-checks >& c.log && scram b -j 12 code-format >& f.log +``` \ No newline at end of file diff --git a/RecoTracker/LSTCore/standalone/analysis/DNN/train_T5_DNN.ipynb b/RecoTracker/LSTCore/standalone/analysis/DNN/train_T5_DNN.ipynb new file mode 100644 index 0000000000000..e7ec1b45283e5 --- /dev/null +++ b/RecoTracker/LSTCore/standalone/analysis/DNN/train_T5_DNN.ipynb @@ -0,0 +1,1073 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import uproot\n", + "import numpy as np\n", + "\n", + "def load_root_file(file_path, branches=None, print_branches=False):\n", + " all_branches = {}\n", + " with uproot.open(file_path) as file:\n", + " tree = file[\"tree\"]\n", + " # Load all ROOT branches into array if not specified\n", + " if branches is None:\n", + " branches = tree.keys()\n", + " # Option to print the branch names\n", + " if print_branches:\n", + " print(\"Branches:\", tree.keys())\n", + " # Each branch is added to the dictionary\n", + " for branch in branches:\n", + " try:\n", + " all_branches[branch] = (tree[branch].array(library=\"np\"))\n", + " except uproot.KeyInFileError as e:\n", + " print(f\"KeyInFileError: {e}\")\n", + " # Number of events in file\n", + " all_branches['event'] = tree.num_entries\n", + " return all_branches\n", + "\n", + "branches_list = [\n", + " 't5_innerRadius',\n", + " 't5_bridgeRadius',\n", + " 't5_outerRadius',\n", + " 't5_pt',\n", + " 't5_eta',\n", + " 't5_phi',\n", + " 't5_isFake',\n", + " 't5_t3_idx0',\n", + " 't5_t3_idx1',\n", + " 't5_pMatched',\n", + " 't5_sim_vxy',\n", + " 't5_sim_vz'\n", + "]\n", + "\n", + "# Hit-dependent branches\n", + "suffixes = ['r', 'z', 'eta', 'phi', 'layer']\n", + "branches_list += [f't5_t3_{i}_{suffix}' for i in [0, 2, 4] for suffix in suffixes]\n", + "\n", + "file_path = \"1000_no_dnn_for_phi.root\"\n", + "branches = load_root_file(file_path, branches_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z max: 267.2349853515625, R max: 110.10993957519531, Eta max: 2.5\n" + ] + } + ], + "source": [ + "z_max = np.max([np.max(event) for event in branches[f't5_t3_4_z']])\n", + "r_max = np.max([np.max(event) for event in branches[f't5_t3_4_r']])\n", + "eta_max = 2.5\n", + "phi_max = np.pi\n", + "\n", + "print(f'Z max: {z_max}, R max: {r_max}, Eta max: {eta_max}')\n", + "\n", + "def delta_phi(phi1, phi2):\n", + " delta = phi1 - phi2\n", + " # Adjust delta to be within the range [-pi, pi]\n", + " if delta > np.pi:\n", + " delta -= 2 * np.pi\n", + " elif delta < -np.pi:\n", + " delta += 2 * np.pi\n", + " return delta" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "features_list = []\n", + "eta_list = [] # Used for DNN cut values\n", + "\n", + "for event in range(branches['event']):\n", + " # Determine the number of elements in this event\n", + " num_elements = len(branches['t5_t3_idx0'][event])\n", + "\n", + " for i in range(num_elements):\n", + " features_iter = []\n", + " eta_iter = []\n", + " \n", + " idx0 = branches['t5_t3_idx0'][event][i]\n", + " idx1 = branches['t5_t3_idx1'][event][i]\n", + "\n", + " eta1 = np.abs(branches['t5_t3_0_eta'][event][idx0])\n", + " eta2 = np.abs(branches['t5_t3_2_eta'][event][idx0])\n", + " eta3 = np.abs(branches['t5_t3_4_eta'][event][idx0])\n", + " eta4 = np.abs(branches['t5_t3_2_eta'][event][idx1])\n", + " eta5 = np.abs(branches['t5_t3_4_eta'][event][idx1])\n", + "\n", + " phi1 = (branches['t5_t3_0_phi'][event][idx0])\n", + " phi2 = (branches['t5_t3_2_phi'][event][idx0])\n", + " phi3 = (branches['t5_t3_4_phi'][event][idx0])\n", + " phi4 = (branches['t5_t3_2_phi'][event][idx1])\n", + " phi5 = (branches['t5_t3_4_phi'][event][idx1])\n", + "\n", + " z1 = np.abs(branches['t5_t3_0_z'][event][idx0])\n", + " z2 = np.abs(branches['t5_t3_2_z'][event][idx0])\n", + " z3 = np.abs(branches['t5_t3_4_z'][event][idx0])\n", + " z4 = np.abs(branches['t5_t3_2_z'][event][idx1])\n", + " z5 = np.abs(branches['t5_t3_4_z'][event][idx1])\n", + "\n", + " r1 = branches['t5_t3_0_r'][event][idx0]\n", + " r2 = branches['t5_t3_2_r'][event][idx0]\n", + " r3 = branches['t5_t3_4_r'][event][idx0]\n", + " r4 = branches['t5_t3_2_r'][event][idx1]\n", + " r5 = branches['t5_t3_4_r'][event][idx1]\n", + "\n", + " innerRad = branches['t5_innerRadius'][event][i]\n", + " bridgeRad = branches['t5_bridgeRadius'][event][i]\n", + " outerRad = branches['t5_outerRadius'][event][i]\n", + "\n", + " # Construct the input feature vector using pairwise differences\n", + " features_iter = [\n", + " eta1 / eta_max, # First hit eta, normalized\n", + " np.abs(phi1) / phi_max, # First hit phi, normalized\n", + " z1 / z_max, # First hit z, normalized\n", + " r1 / r_max, # First hit r, normalized\n", + "\n", + " eta2 - eta1, # Difference in eta between hit 2 and 1\n", + " delta_phi(phi2, phi1) / phi_max, # Difference in phi between hit 2 and 1\n", + " (z2 - z1) / z_max, # Difference in z between hit 2 and 1, normalized\n", + " (r2 - r1) / r_max, # Difference in r between hit 2 and 1, normalized\n", + "\n", + " eta3 - eta2, # Difference in eta between hit 3 and 2\n", + " delta_phi(phi3, phi2) / phi_max, # Difference in phi between hit 3 and 2\n", + " (z3 - z2) / z_max, # Difference in z between hit 3 and 2, normalized\n", + " (r3 - r2) / r_max, # Difference in r between hit 3 and 2, normalized\n", + "\n", + " eta4 - eta3, # Difference in eta between hit 4 and 3\n", + " delta_phi(phi4, phi3) / phi_max, # Difference in phi between hit 4 and 3\n", + " (z4 - z3) / z_max, # Difference in z between hit 4 and 3, normalized\n", + " (r4 - r3) / r_max, # Difference in r between hit 4 and 3, normalized\n", + "\n", + " eta5 - eta4, # Difference in eta between hit 5 and 4\n", + " delta_phi(phi5, phi4) / phi_max, # Difference in phi between hit 5 and 4\n", + " (z5 - z4) / z_max, # Difference in z between hit 5 and 4, normalized\n", + " (r5 - r4) / r_max, # Difference in r between hit 5 and 4, normalized\n", + "\n", + " np.log10(innerRad),\n", + " np.log10(bridgeRad),\n", + " np.log10(outerRad)\n", + " ]\n", + "\n", + " # Use the abs eta value of first hit to select cut thresholds\n", + " eta_iter.extend([np.abs(branches['t5_t3_0_eta'][event][idx0])])\n", + " \n", + " # Append the feature vector to the list\n", + " features_list.append(features_iter)\n", + " eta_list.append(eta_iter)\n", + "\n", + "# Convert the list of features to a NumPy array\n", + "features = np.array(features_list).T\n", + "eta_list = np.array(eta_list).T" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "# Stack features along a new axis to form a single array suitable for NN input\n", + "input_features_numpy = np.stack(features, axis=-1)\n", + "\n", + "# Identify rows with NaN or Inf values\n", + "mask = ~np.isnan(input_features_numpy) & ~np.isinf(input_features_numpy)\n", + "\n", + "# Apply mask across all columns: retain a row only if all its entries are neither NaN nor Inf\n", + "filtered_input_features_numpy = input_features_numpy[np.all(mask, axis=1)]\n", + "t5_isFake_filtered = np.concatenate(branches['t5_isFake'])[np.all(mask, axis=1)]\n", + "\n", + "# Convert to PyTorch tensor when ready to use with NN\n", + "input_features_tensor = torch.tensor(filtered_input_features_numpy, dtype=torch.float32)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using device: cuda\n", + "Initial dataset size: 10921577\n", + "Dataset size after initial 100.0% downsampling: 10921577\n", + "Class distribution after initial downsampling - Class 0: 2985946, Class 1: 7935631\n", + "Final class distribution after balancing - Class 0: 2985946, Class 1: 2985946\n", + "Epoch [1/150], Loss: 0.4802, Test Acc: 81.32%\n", + "Epoch [2/150], Loss: 0.4255, Test Acc: 81.45%\n", + "Epoch [3/150], Loss: 0.4602, Test Acc: 82.69%\n", + "Epoch [4/150], Loss: 0.4475, Test Acc: 83.97%\n", + "Epoch [5/150], Loss: 0.4417, Test Acc: 82.76%\n", + "Epoch [6/150], Loss: 0.4643, Test Acc: 83.01%\n", + "Epoch [7/150], Loss: 0.4474, Test Acc: 81.68%\n", + "Epoch [8/150], Loss: 0.4050, Test Acc: 84.32%\n", + "Epoch [9/150], Loss: 0.3563, Test Acc: 83.51%\n", + "Epoch [10/150], Loss: 0.4774, Test Acc: 83.24%\n", + "Epoch [11/150], Loss: 0.4846, Test Acc: 84.06%\n", + "Epoch [12/150], Loss: 0.5055, Test Acc: 83.28%\n", + "Epoch [13/150], Loss: 0.4461, Test Acc: 84.35%\n", + "Epoch [14/150], Loss: 0.4607, Test Acc: 82.75%\n", + "Epoch [15/150], Loss: 0.4795, Test Acc: 83.22%\n", + "Epoch [16/150], Loss: 0.4414, Test Acc: 83.83%\n", + "Epoch [17/150], Loss: 0.4357, Test Acc: 82.26%\n", + "Epoch [18/150], Loss: 0.4498, Test Acc: 83.85%\n", + "Epoch [19/150], Loss: 0.4779, Test Acc: 84.34%\n", + "Epoch [20/150], Loss: 0.4248, Test Acc: 83.84%\n", + "Epoch [21/150], Loss: 0.4538, Test Acc: 83.97%\n", + "Epoch [22/150], Loss: 0.4335, Test Acc: 84.28%\n", + "Epoch [23/150], Loss: 0.4248, Test Acc: 84.43%\n", + "Epoch [24/150], Loss: 0.4072, Test Acc: 83.57%\n", + "Epoch [25/150], Loss: 0.3732, Test Acc: 83.51%\n", + "Epoch [26/150], Loss: 0.4559, Test Acc: 83.91%\n", + "Epoch [27/150], Loss: 0.4071, Test Acc: 83.04%\n", + "Epoch [28/150], Loss: 0.4709, Test Acc: 84.22%\n", + "Epoch [29/150], Loss: 0.4079, Test Acc: 83.83%\n", + "Epoch [30/150], Loss: 0.3676, Test Acc: 83.50%\n", + "Epoch [31/150], Loss: 0.4944, Test Acc: 83.84%\n", + "Epoch [32/150], Loss: 0.4316, Test Acc: 84.63%\n", + "Epoch [33/150], Loss: 0.4229, Test Acc: 83.43%\n", + "Epoch [34/150], Loss: 0.3955, Test Acc: 83.82%\n", + "Epoch [35/150], Loss: 0.4467, Test Acc: 83.64%\n", + "Epoch [36/150], Loss: 0.4164, Test Acc: 84.49%\n", + "Epoch [37/150], Loss: 0.4656, Test Acc: 83.64%\n", + "Epoch [38/150], Loss: 0.4274, Test Acc: 84.10%\n", + "Epoch [39/150], Loss: 0.3943, Test Acc: 84.63%\n", + "Epoch [40/150], Loss: 0.4476, Test Acc: 84.55%\n", + "Epoch [41/150], Loss: 0.4765, Test Acc: 84.51%\n", + "Epoch [42/150], Loss: 0.4007, Test Acc: 84.32%\n", + "Epoch [43/150], Loss: 0.4716, Test Acc: 84.01%\n", + "Epoch [44/150], Loss: 0.4063, Test Acc: 83.81%\n", + "Epoch [45/150], Loss: 0.3712, Test Acc: 84.63%\n", + "Epoch [46/150], Loss: 0.3657, Test Acc: 84.43%\n", + "Epoch [47/150], Loss: 0.4514, Test Acc: 84.26%\n", + "Epoch [48/150], Loss: 0.3817, Test Acc: 84.30%\n", + "Epoch [49/150], Loss: 0.3744, Test Acc: 83.23%\n", + "Epoch [50/150], Loss: 0.4377, Test Acc: 84.43%\n", + "Epoch [51/150], Loss: 0.4331, Test Acc: 84.19%\n", + "Epoch [52/150], Loss: 0.4022, Test Acc: 84.39%\n", + "Epoch [53/150], Loss: 0.4272, Test Acc: 84.67%\n", + "Epoch [54/150], Loss: 0.4146, Test Acc: 84.06%\n", + "Epoch [55/150], Loss: 0.3798, Test Acc: 84.52%\n", + "Epoch [56/150], Loss: 0.4070, Test Acc: 83.82%\n", + "Epoch [57/150], Loss: 0.5018, Test Acc: 84.64%\n", + "Epoch [58/150], Loss: 0.5112, Test Acc: 84.71%\n", + "Epoch [59/150], Loss: 0.4554, Test Acc: 84.41%\n", + "Epoch [60/150], Loss: 0.4313, Test Acc: 84.78%\n", + "Epoch [61/150], Loss: 0.4101, Test Acc: 83.46%\n", + "Epoch [62/150], Loss: 0.4139, Test Acc: 84.60%\n", + "Epoch [63/150], Loss: 0.3841, Test Acc: 84.47%\n", + "Epoch [64/150], Loss: 0.4931, Test Acc: 83.95%\n", + "Epoch [65/150], Loss: 0.3589, Test Acc: 84.59%\n", + "Epoch [66/150], Loss: 0.4328, Test Acc: 84.87%\n", + "Epoch [67/150], Loss: 0.4525, Test Acc: 84.00%\n", + "Epoch [68/150], Loss: 0.4745, Test Acc: 84.31%\n", + "Epoch [69/150], Loss: 0.4585, Test Acc: 84.07%\n", + "Epoch [70/150], Loss: 0.4348, Test Acc: 84.95%\n", + "Epoch [71/150], Loss: 0.4101, Test Acc: 85.12%\n", + "Epoch [72/150], Loss: 0.4001, Test Acc: 84.77%\n", + "Epoch [73/150], Loss: 0.4505, Test Acc: 84.56%\n", + "Epoch [74/150], Loss: 0.3493, Test Acc: 84.78%\n", + "Epoch [75/150], Loss: 0.4316, Test Acc: 83.27%\n", + "Epoch [76/150], Loss: 0.4963, Test Acc: 84.52%\n", + "Epoch [77/150], Loss: 0.4214, Test Acc: 84.66%\n", + "Epoch [78/150], Loss: 0.5551, Test Acc: 84.71%\n", + "Epoch [79/150], Loss: 0.3809, Test Acc: 84.12%\n", + "Epoch [80/150], Loss: 0.3979, Test Acc: 84.31%\n", + "Epoch [81/150], Loss: 0.3920, Test Acc: 84.49%\n", + "Epoch [82/150], Loss: 0.4278, Test Acc: 84.71%\n", + "Epoch [83/150], Loss: 0.3696, Test Acc: 84.69%\n", + "Epoch [84/150], Loss: 0.3483, Test Acc: 84.02%\n", + "Epoch [85/150], Loss: 0.3976, Test Acc: 84.13%\n", + "Epoch [86/150], Loss: 0.3335, Test Acc: 84.92%\n", + "Epoch [87/150], Loss: 0.3972, Test Acc: 84.58%\n", + "Epoch [88/150], Loss: 0.4135, Test Acc: 84.32%\n", + "Epoch [89/150], Loss: 0.4556, Test Acc: 84.21%\n", + "Epoch [90/150], Loss: 0.4180, Test Acc: 84.28%\n", + "Epoch [91/150], Loss: 0.3586, Test Acc: 84.78%\n", + "Epoch [92/150], Loss: 0.4388, Test Acc: 84.43%\n", + "Epoch [93/150], Loss: 0.4243, Test Acc: 84.12%\n", + "Epoch [94/150], Loss: 0.4133, Test Acc: 84.55%\n", + "Epoch [95/150], Loss: 0.4201, Test Acc: 84.86%\n", + "Epoch [96/150], Loss: 0.4670, Test Acc: 84.50%\n", + "Epoch [97/150], Loss: 0.4199, Test Acc: 84.89%\n", + "Epoch [98/150], Loss: 0.4076, Test Acc: 84.35%\n", + "Epoch [99/150], Loss: 0.3696, Test Acc: 84.98%\n", + "Epoch [100/150], Loss: 0.3553, Test Acc: 84.70%\n", + "Epoch [101/150], Loss: 0.4054, Test Acc: 84.40%\n", + "Epoch [102/150], Loss: 0.4168, Test Acc: 84.65%\n", + "Epoch [103/150], Loss: 0.3675, Test Acc: 84.69%\n", + "Epoch [104/150], Loss: 0.4107, Test Acc: 84.10%\n", + "Epoch [105/150], Loss: 0.4310, Test Acc: 84.55%\n", + "Epoch [106/150], Loss: 0.4340, Test Acc: 83.76%\n", + "Epoch [107/150], Loss: 0.4691, Test Acc: 84.93%\n", + "Epoch [108/150], Loss: 0.4838, Test Acc: 84.37%\n", + "Epoch [109/150], Loss: 0.4057, Test Acc: 84.73%\n", + "Epoch [110/150], Loss: 0.4900, Test Acc: 84.75%\n", + "Epoch [111/150], Loss: 0.4501, Test Acc: 84.18%\n", + "Epoch [112/150], Loss: 0.4528, Test Acc: 84.51%\n", + "Epoch [113/150], Loss: 0.4126, Test Acc: 84.74%\n", + "Epoch [114/150], Loss: 0.4142, Test Acc: 84.99%\n", + "Epoch [115/150], Loss: 0.3894, Test Acc: 84.30%\n", + "Epoch [116/150], Loss: 0.4518, Test Acc: 84.30%\n", + "Epoch [117/150], Loss: 0.4568, Test Acc: 84.43%\n", + "Epoch [118/150], Loss: 0.3588, Test Acc: 84.32%\n", + "Epoch [119/150], Loss: 0.3891, Test Acc: 84.38%\n", + "Epoch [120/150], Loss: 0.4558, Test Acc: 84.62%\n", + "Epoch [121/150], Loss: 0.4732, Test Acc: 84.41%\n", + "Epoch [122/150], Loss: 0.4008, Test Acc: 84.54%\n", + "Epoch [123/150], Loss: 0.4279, Test Acc: 84.21%\n", + "Epoch [124/150], Loss: 0.4658, Test Acc: 84.58%\n", + "Epoch [125/150], Loss: 0.4696, Test Acc: 84.59%\n", + "Epoch [126/150], Loss: 0.4663, Test Acc: 84.00%\n", + "Epoch [127/150], Loss: 0.3993, Test Acc: 84.53%\n", + "Epoch [128/150], Loss: 0.4316, Test Acc: 84.31%\n", + "Epoch [129/150], Loss: 0.4189, Test Acc: 84.63%\n", + "Epoch [130/150], Loss: 0.3826, Test Acc: 83.96%\n", + "Epoch [131/150], Loss: 0.3437, Test Acc: 84.45%\n", + "Epoch [132/150], Loss: 0.4950, Test Acc: 85.07%\n", + "Epoch [133/150], Loss: 0.4394, Test Acc: 84.15%\n", + "Epoch [134/150], Loss: 0.3998, Test Acc: 84.38%\n", + "Epoch [135/150], Loss: 0.3154, Test Acc: 84.99%\n", + "Epoch [136/150], Loss: 0.4408, Test Acc: 84.83%\n", + "Epoch [137/150], Loss: 0.4970, Test Acc: 84.38%\n", + "Epoch [138/150], Loss: 0.4473, Test Acc: 84.13%\n", + "Epoch [139/150], Loss: 0.4615, Test Acc: 84.66%\n", + "Epoch [140/150], Loss: 0.4316, Test Acc: 84.38%\n", + "Epoch [141/150], Loss: 0.5141, Test Acc: 84.62%\n", + "Epoch [142/150], Loss: 0.4030, Test Acc: 84.03%\n", + "Epoch [143/150], Loss: 0.4777, Test Acc: 84.15%\n", + "Epoch [144/150], Loss: 0.4286, Test Acc: 84.78%\n", + "Epoch [145/150], Loss: 0.4194, Test Acc: 84.73%\n", + "Epoch [146/150], Loss: 0.3649, Test Acc: 84.84%\n", + "Epoch [147/150], Loss: 0.4346, Test Acc: 84.00%\n", + "Epoch [148/150], Loss: 0.4373, Test Acc: 84.60%\n", + "Epoch [149/150], Loss: 0.4238, Test Acc: 84.78%\n", + "Epoch [150/150], Loss: 0.4499, Test Acc: 84.80%\n" + ] + } + ], + "source": [ + "from torch import nn\n", + "from torch.optim import Adam\n", + "from torch.utils.data import DataLoader, TensorDataset, random_split\n", + "import torch\n", + "\n", + "# Set device\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "print(f\"Using device: {device}\")\n", + "\n", + "# Create labels tensor\n", + "labels_tensor = 1 - torch.tensor(t5_isFake_filtered, dtype=torch.float32)\n", + "\n", + "# Set initial downsample fraction\n", + "initial_downsample_fraction = 1.0 # Adjust this value as needed\n", + "\n", + "class MyNeuralNetwork(nn.Module):\n", + " def __init__(self):\n", + " super(MyNeuralNetwork, self).__init__()\n", + " self.layer1 = nn.Linear(input_features_numpy.shape[1], 32)\n", + " self.layer2 = nn.Linear(32, 32)\n", + " self.output_layer = nn.Linear(32, 1)\n", + "\n", + " def forward(self, x):\n", + " x = self.layer1(x)\n", + " x = nn.ReLU()(x)\n", + " x = self.layer2(x)\n", + " x = nn.ReLU()(x)\n", + " x = self.output_layer(x)\n", + " x = torch.sigmoid(x)\n", + " return x\n", + "\n", + "class WeightedBCELoss(nn.Module):\n", + " def __init__(self):\n", + " super(WeightedBCELoss, self).__init__()\n", + " \n", + " def forward(self, outputs, targets, weights):\n", + " eps = 1e-7\n", + " losses = -(weights * (targets * torch.log(outputs + eps) + \n", + " (1 - targets) * torch.log(1 - outputs + eps)))\n", + " return losses.mean()\n", + "\n", + "def calculate_sample_weights(t5_sim_vxy, weight_factor=6.0):\n", + " \"\"\"\n", + " Calculate sample weights giving higher importance to displaced t5's\n", + " \n", + " Args:\n", + " t5_sim_vxy: Array of t5 simulation values\n", + " weight_factor: How much more weight to give to displaced samples\n", + " \n", + " Returns:\n", + " Tensor of sample weights\n", + " \"\"\"\n", + " weights = torch.ones(len(t5_sim_vxy))\n", + " displaced_mask = t5_sim_vxy > 0.1\n", + " weights[displaced_mask] = weight_factor\n", + " return weights\n", + "\n", + "# Print initial dataset size\n", + "print(f\"Initial dataset size: {len(labels_tensor)}\")\n", + "\n", + "# Calculate sample weights\n", + "sample_weights = calculate_sample_weights(torch.tensor(np.concatenate(branches['t5_sim_vxy'])))\n", + "\n", + "# Remove rows with NaN and update weights accordingly\n", + "nan_mask = torch.isnan(input_features_tensor).any(dim=1) | torch.isnan(labels_tensor)\n", + "filtered_inputs = input_features_tensor[~nan_mask]\n", + "filtered_labels = labels_tensor[~nan_mask]\n", + "filtered_weights = sample_weights[~nan_mask]\n", + "\n", + "# Initial downsampling of entire dataset\n", + "if initial_downsample_fraction < 1.0:\n", + " total_samples = len(filtered_labels)\n", + " samples_to_keep = int(total_samples * initial_downsample_fraction)\n", + " indices = torch.randperm(total_samples)[:samples_to_keep]\n", + " filtered_inputs = filtered_inputs[indices]\n", + " filtered_labels = filtered_labels[indices]\n", + " filtered_weights = filtered_weights[indices]\n", + "\n", + "print(f\"Dataset size after initial {initial_downsample_fraction*100}% downsampling: {len(filtered_labels)}\")\n", + "\n", + "# Count samples in each class after initial downsampling\n", + "class_counts = torch.bincount(filtered_labels.int())\n", + "print(f\"Class distribution after initial downsampling - Class 0: {class_counts[0]}, Class 1: {class_counts[1]}\")\n", + "\n", + "# Balance classes while maintaining weights\n", + "minority_class = 0 if class_counts[0] < class_counts[1] else 1\n", + "minority_indices = (filtered_labels == minority_class).nonzero(as_tuple=True)[0]\n", + "majority_indices = (filtered_labels == (1 - minority_class)).nonzero(as_tuple=True)[0]\n", + "downsampled_majority_indices = majority_indices[torch.randperm(len(majority_indices))[:len(minority_indices)]]\n", + "balanced_indices = torch.cat((minority_indices, downsampled_majority_indices))\n", + "\n", + "# Create balanced dataset with weights\n", + "balanced_inputs = filtered_inputs[balanced_indices]\n", + "balanced_labels = filtered_labels[balanced_indices]\n", + "balanced_weights = filtered_weights[balanced_indices]\n", + "\n", + "# Verify balanced distribution\n", + "balanced_counts = torch.bincount(balanced_labels.int())\n", + "print(f\"Final class distribution after balancing - Class 0: {balanced_counts[0]}, Class 1: {balanced_counts[1]}\")\n", + "\n", + "# Create dataset with weights\n", + "dataset = TensorDataset(balanced_inputs, balanced_labels, balanced_weights)\n", + "\n", + "# Split into train and test sets\n", + "train_size = int(0.8 * len(dataset))\n", + "test_size = len(dataset) - train_size\n", + "train_dataset, test_dataset = random_split(dataset, [train_size, test_size])\n", + "\n", + "# Create data loaders\n", + "train_loader = DataLoader(train_dataset, batch_size=1024, shuffle=True, num_workers=10, pin_memory=True)\n", + "test_loader = DataLoader(test_dataset, batch_size=1024, shuffle=False, num_workers=10, pin_memory=True)\n", + "\n", + "# Initialize model and optimizer\n", + "model = MyNeuralNetwork().to(device)\n", + "loss_function = WeightedBCELoss()\n", + "optimizer = Adam(model.parameters(), lr=0.0025)\n", + "\n", + "def evaluate_model(loader):\n", + " model.eval()\n", + " total = 0\n", + " correct = 0\n", + " with torch.no_grad():\n", + " for inputs, targets, weights in loader:\n", + " inputs, targets = inputs.to(device), targets.to(device)\n", + " outputs = model(inputs)\n", + " predicted = outputs.squeeze() > 0.5\n", + " total += targets.size(0)\n", + " correct += (predicted == targets.bool()).sum().item()\n", + " model.train()\n", + " return 100 * correct / total\n", + "\n", + "# Training loop\n", + "num_epochs = 150\n", + "loss_log = []\n", + "\n", + "for epoch in range(num_epochs):\n", + " for inputs, targets, weights in train_loader:\n", + " inputs, targets, weights = inputs.to(device), targets.to(device), weights.to(device)\n", + " \n", + " # Forward pass\n", + " outputs = model(inputs)\n", + " loss = loss_function(outputs.squeeze(), targets, weights)\n", + " \n", + " loss_log.append(loss.item())\n", + "\n", + " # Backward and optimize\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " test_accuracy = evaluate_model(test_loader)\n", + " print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}, Test Acc: {test_accuracy:.2f}%')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model.state_dict(), \"model.pth\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Baseline accuracy: 0.8745944499969482\n", + "Feature importances:\n", + "Feature 21 importance: 0.3800\n", + "Feature 20 importance: 0.2052\n", + "Feature 0 importance: 0.2036\n", + "Feature 22 importance: 0.1572\n", + "Feature 17 importance: 0.1333\n", + "Feature 12 importance: 0.1323\n", + "Feature 13 importance: 0.1207\n", + "Feature 5 importance: 0.1142\n", + "Feature 2 importance: 0.0741\n", + "Feature 16 importance: 0.0638\n", + "Feature 15 importance: 0.0420\n", + "Feature 8 importance: 0.0402\n", + "Feature 9 importance: 0.0399\n", + "Feature 6 importance: 0.0305\n", + "Feature 7 importance: 0.0274\n", + "Feature 4 importance: 0.0269\n", + "Feature 3 importance: 0.0247\n", + "Feature 14 importance: 0.0162\n", + "Feature 10 importance: 0.0128\n", + "Feature 19 importance: 0.0117\n", + "Feature 11 importance: 0.0106\n", + "Feature 18 importance: 0.0089\n", + "Feature 1 importance: 0.0001\n" + ] + } + ], + "source": [ + "from sklearn.metrics import accuracy_score\n", + "\n", + "# Convert tensors to numpy for simplicity in permutation\n", + "input_features_np = input_features_tensor.numpy()\n", + "labels_np = labels_tensor.numpy()\n", + "\n", + "def model_accuracy(features, labels, model):\n", + " model.eval() # Set the model to evaluation mode\n", + " inputs = features.to(device)\n", + " labels = labels.to(device)\n", + " with torch.no_grad():\n", + " outputs = model(inputs)\n", + " predicted = (outputs.squeeze() > 0.5).float() # Update threshold as necessary\n", + " accuracy = (predicted == labels).float().mean().item()\n", + " return accuracy\n", + "\n", + "# Use the original input_features_tensor and labels_tensor directly\n", + "baseline_accuracy = model_accuracy(input_features_tensor, labels_tensor, model)\n", + "print(f\"Baseline accuracy: {baseline_accuracy}\")\n", + "\n", + "# Initialize an array to store feature importances\n", + "feature_importances = np.zeros(input_features_tensor.shape[1])\n", + "\n", + "# Permute each feature and calculate the drop in accuracy\n", + "for i in range(input_features_tensor.shape[1]):\n", + " permuted_features = input_features_tensor.clone()\n", + " permuted_features[:, i] = permuted_features[torch.randperm(permuted_features.size(0)), i] # Permute feature\n", + "\n", + " permuted_accuracy = model_accuracy(permuted_features, labels_tensor, model)\n", + " feature_importances[i] = baseline_accuracy - permuted_accuracy\n", + "\n", + "# Ranking features by importance\n", + "important_features_indices = np.argsort(feature_importances)[::-1] # Indices of features in descending importance\n", + "important_features_scores = np.sort(feature_importances)[::-1] # Importance scores in descending order\n", + "\n", + "print(\"Feature importances:\")\n", + "for idx, score in zip(important_features_indices, important_features_scores):\n", + " print(f\"Feature {idx} importance: {score:.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_909590/52354147.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " inputs = torch.tensor(features, dtype=torch.float32).to(device)\n" + ] + }, + { + "data": { + "image/png": "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OfpQ+/btMXv2bNjb28PNzU3r+CpWrIj69evD398fCoUCSUlJGYb5t2/fHvv374e7u3uuzoVUp04dtGrVCmvXrkWfPn3QsGFDjeOnTp3CunXr0KZNG42O0gDw999/48WLF+qaEYVCgW3btsHd3V1dc5AbcctkMhgbG2t8OIaHh2c6OurDWpPc0KRJE2zfvh0HDhxQN+kByHSEXGZ8fX2xbt06jBgxIsPweUDV9Lh792507txZq7i0eV0+dg8jIyONpDshIQEbN27UOK9Vq1YwNDTEihUr4OnpmeX9snr927dvj61bt0KhUKB+/frZjk8btra26NatG54+fYrRo0fj4cOHqFSpknr6hez8XLRt2xZbtmzB+vXr2TxGGTARokLLzs4OEydOxPjx47F582b07t0bq1atQtu2bdG6dWv0798fJUqUQFRUFG7evImLFy/ijz/+AABMnz4dBw4cQOPGjfHDDz+gatWqePPmDQ4ePAg/Pz9UqFABo0ePxs6dO9G4cWP4+vqiWrVqUCqVCAsLw+HDhzFmzJj//OM/cOBADB06FM+ePYOXl1eGpGv69OkICgqCl5cXRo0ahfLlyyMxMREPHz7E/v37sXLlyhw3W/z+++9o0aIFWrVqlemEihUqVMh0iLiDgwOaN2+OH3/8UT1q7NatWxoJQm7EnTaUesSIEejWrRseP36MGTNmwMnJKcOM4VWrVsWxY8ewd+9eODk5wcrKKssENrv69euHRYsWoXfv3pg5cybKli2LAwcO4NChQwDwnzUHbm5u6tq+GjVqqCdUBFQT+q1btw5CCK0TIW1el6y0a9cOCxcuRK9evTBkyBBERkZi/vz5GeZuKl26NH744QfMmDEDCQkJ+Oqrr2BjY4MbN27g1atX6uHtVatWxa5du7BixQrUrl0bBgYGqFOnDnr27ImAgAB4e3vju+++Q7169SCXy/HkyRMcPXoUX3zxhdbPHwA6dOignjesaNGiePToERYvXgxXV1f1SMmqVasCAJYsWYJ+/fpBLpejfPnyGWqhAFW/L39/fwwbNgy3b99Gs2bNoFQq8e+//6JixYro2bOn1jGSDpG2rzbRf0sbNfbh6C0hhEhISBClSpUS5cqVE6mpqUIIIS5fviy6d+8uihUrJuRyuShevLho3ry5WLlypca1jx8/FgMHDhTFixcXcrlcODs7i+7du4sX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tT8REREZaonSODk5oUSJEhqj0ypWrAghBJ48eZLpNRMnTkR0dLT66/Hjx9oF+uJC+nbxutpdS0T0Hw4cuItq1VZg717VoIy3b5Oxb9+d/7iKiHJLjhKhjRs3omHDhnB2dsajR48AAIsXL8aff/6Z7XsYGxujdu3aCAoK0igPCgqCl5dXptc0bNgQz549w9u3b9Vld+7cgYGBAUqWLJnpNSYmJrC2ttb40srLy+nbxWppdy0RURYSElIwatQBeHtvxosXcQCAokXNsXfvV/juuwYSR0ekP7ROhFasWAE/Pz94e3vjzZs3UChUMy7b2tpi8eLFWt3Lz88Pa9aswbp163Dz5k34+voiLCwMw4YNA6Cqzenbt6/6/F69esHe3h4DBgzAjRs3cOLECYwbNw4DBw7MtFnskwkBRFxSbZvaA5bOuf8YRKR3rlx5gbp1V+OXX9Kb3r29y+Hq1eFo395DwsiI9I/WidAvv/yC1atXY9KkSTA0NFSX16lTB1evXtXqXj169MDixYsxffp01KhRAydOnMD+/fvh6qoanv78+XOEhYWpz7e0tERQUBDevHmDOnXqwMfHBx06dMDSpUu1fRrZEx+RPqN0sersKE1En0SpFFi06Czq1l2N69dfAgBMTY3w669tsW/fV3B0tPyPOxBRbtO6s3RoaChq1qyZodzExARxcXFaBzBixAiMGDEi02Pr16/PUFahQoUMzWl55v1msaLV8+cxiUhnRUcnYt68M0hOVtWkV6vmiM2bu6By5WISR0akv7SuEXJzc8OlS5cylB84cEC9Or3OePVeDZdDtazPIyLKBjs7M2zY0AkGBjKMGeOJc+cGMwkikpjWNULjxo3DN998g8TERAghcO7cOWzZsgVz5szBmjVr8iJG6UTeSN92qCxdHERUKMXFJSMxMRX29ubqspYt3XH79kiULcvh8UQFgdaJ0IABA5Camorx48cjPj4evXr1QokSJbBkyRL07NkzL2KUTuT19O0iFaWLg4gKneDgZ/Dx2YWyZYtg376vNOZHYxJEVHB80lpjr169glKpRLFihadqN9trlQgBLLMDkqJVy2oMeZR/QRJRoaVQKDF37mlMmXIMqalKAMCyZd4YMYLzkBF9igKz1ti0adNw//59AKpJEQtTEqSVt09VSRDAZjEiypawsGg0b/47fvjhiDoJqlvXGS1blpE4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def model_outputs(features, model):\n", + " model.eval() # Set the model to evaluation mode\n", + " with torch.no_grad():\n", + " inputs = torch.tensor(features, dtype=torch.float32).to(device)\n", + " outputs = model(inputs).squeeze().cpu().numpy()\n", + " return outputs\n", + "\n", + "# Calculate model outputs\n", + "probabilities = model_outputs(filtered_inputs, model)\n", + "\n", + "# Calculate ROC curve and AUC\n", + "fpr, tpr, thresholds = roc_curve(filtered_labels, probabilities)\n", + "roc_auc = auc(fpr, tpr)\n", + "\n", + "# Plot ROC curve\n", + "plt.figure()\n", + "lw = 2 # Line width\n", + "plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.3f)' % roc_auc)\n", + "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n", + "plt.xlim([0.0, 1.0])\n", + "plt.ylim([0.0, 1.05])\n", + "plt.xlabel('False Positive Rate')\n", + "plt.ylabel('True Positive Rate')\n", + "plt.title('Receiver Operating Characteristic')\n", + "plt.legend(loc=\"lower right\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_909590/52354147.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", + " inputs = torch.tensor(features, dtype=torch.float32).to(device)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prediction scores for displaced tracks (t5_sim_vxy > 0.1):\n", + "Mean score: 0.8229\n", + "Median score: 0.9340\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACE5UlEQVR4nO3deXhTZd4+8DtNl7TpTje6l5bS0lKgK4Iijgii4rhvo4MMjguOjoPLMG4gLrjrvAo6+vqKOm7jjOg4boMjioKWrpTu0FK60X1J9yU9vz/6y5kmbdOmtMnT5P5cVy5ocpJ8c+6T06fPOed5FJIkSSAiIiKiWc/O0gUQERER0fRgw46IiIjISrBhR0RERGQl2LAjIiIishJs2BERERFZCTbsiIiIiKwEG3ZEREREVoINOyIiIiIrwYYdERERkZVgw46IrNbAwAC2bduG6OhoODo6QqFQQKFQYPv27ZYubcoqKirkz6FQKPDdd9/Z1PtPtz179uh9HqLZjg07shnfffed3g5coVDA0dERHh4eiIyMxJo1a/DYY4+hpqZmzOcb/kJTKBT497//PWo5Hx8f+fEbb7xR77Hw8HC9599///2jnn/FFVfIj4eHh5v0GQsKCrBp0yZERkbC2dkZzs7OCA4ORlJSEjZu3IiXXnrJpNeb7bZv344dO3bg2LFjGBgYsHQ5AMbejhwcHODm5oawsDCsWrUK999/P44dO2bpUmkM27dvH5XfRDfdfmCsfZDhLSoqyrIfkGY9e0sXQGRJAwMDGBgYgEajQXl5Ofbt24dHHnkE27dvx5/+9CfY2Rn/2+f+++/HeeedN+W/9P/85z/jzjvvREBAwJSeP9Lnn3+OSy+9dFQDpqamBjU1NcjOzsY777yDO+6447Tfa7Z499135f8vWrQI1113Hezt7bF8+XILVjXa4OAgOjs70dnZicrKSnz//fd48skncfvtt+PZZ5+Fk5OTvKy3tzeeeeYZ+efIyEhLlExEgmLDjmzW1VdfjeTkZLS3tyMnJwdff/01BgcHMTg4iAcffBCnTp3Cyy+/bPQ1srKy8I9//ANXXHHFlGro7u7GY489NuH7TESr1eLmm2+WG3V+fn646qqrMHfuXDQ1NaGiogI//vgjWlpaTut9ZkJHRwfc3Nxm5LUrKyvl///+97/Hpk2bZuR9dAYHBzEwMABnZ+dJP+e8887DmjVr0NnZiYKCAnz++efo6emBJEl4+eWXUVlZib1798p/ZLi7u+Oee+6ZqY9AE1izZg1cXV317nvllVdQXl4OAPDy8hrVEx8fHz/qdZKTk3H11VePut/Ly2saqyWbJBHZiP3790sA5Nubb76p93hRUZEUGRmpt8zXX38tP37ixAm9x3S3mJgYaXBwUF5uzpw58mMbNmzQe4+wsLBRz3dwcJDKy8vlZS6//HL5sbCwsEl9tiNHjui95oEDB0Yto9VqpX//+99jPr+xsVHatm2blJKSInl4eEiOjo5ScHCwdMEFF0iffvrpqOU/+ugjad26dZKfn59kb28veXl5SWeddZa0a9cuqa+vT29Zw/X27bffSrt27ZLi4+MlJycn6eyzz9Zbfu/evdJFF10kBQQESA4ODpKXl5e0evVq6R//+Mek1oUkSdLZZ589Zla62/79++Vlq6urpbvvvluKi4uT1Gq15OTkJM2bN0/6zW9+I+Xl5Y167Q0bNsivc/bZZ0tlZWXSVVddJc2ZM0dSKBR6rz0Ww/Wxbds2vcdramqklJQUvWX+8pe/jPv8ke83MDAgvfDCC9KyZcskDw8PSalUSt7e3tLChQulG264QXr//ff13svw+/D5559LK1askFxcXCRPT0/pyiuvlMrKyozWP/L9jx07Jt15553SihUrpODgYMnFxUVydHSUgoKCpPXr10ufffbZuOvlp59+km644QZp3rx5kkqlklxdXaWYmBjppptukqqqqvSWbW1tlR599FEpOTlZcnd3lxwdHaWwsDDppptuko4dOzbm61dUVEjXXHON5OXlJbm4uEhnnXWWtG/fPunNN9/U+zxTMXJ7M/adHbkPMtw3GHPgwAHpkksukQIDAyUHBwdJrVZLYWFh0vnnny9t27ZNamtrm1LdZJ3YsCObMVHDTpIkKTMzU2+ZtWvXyo8Z/kILCAiQ///GG2/Iy022YTfy+TfccIO8zFQadllZWXq1Pf/889LQ0NCknvvzzz9Lfn5+4zaCRn6GwcFB6aqrrjLaaEpNTdX7RWO43lasWKH3s65hp9Vqpeuuu87oa998882T+kyTbdh9//33kqen57jLOTg4SHv27NF77ZENu/nz549ad6fbsJOk4cadSqWSl1mwYMG4zx/5fiNrG+uWlpam9z4jHzvnnHPGfI6vr69eY8nY+3/00UdG3x+A9Mgjj4z6vA899JCkUCgmzEuSJKm4uFgKDQ0dd1m1Wq33B5mu5pHfN91NoVBI69ats0jDztvbW5ozZ47k4OAg+fv7S+vXr5e+/PLLUc/55ptvJKVSaXSdFhUVTalusk48FEs0QlJSEpYsWYLc3FwAwPfff4+hoaExz7W7/fbb8fzzz6O1tRWPPPIIfvWrX+mdCzWRFStWoKWlBfv378e7776L++67b8xDNpOxYMECqFQq9Pb2AgC2bNmCp556CsuXL0dSUhLOOussrFixAkqlUu95Go0GF198MRoaGuT7zjvvPCxbtgxtbW2jrnh8/PHH8be//U3vM5x77rnIzc3FP//5TwDA4cOHccstt+CDDz4Ys9aDBw9i3rx5uOyyy6BSqdDd3Q0AePLJJ/Hee+8BAOzs7HDllVciPj4ex44dw7vvvgutVovXXnsNSUlJuPnmm42uj9tuuw0XXXQR7r33Xvk+3aF3YPi8tLa2Nlx66aVoa2sDAKjVavzmN7+Bs7Mz3nnnHZw6dQoDAwO46aabkJiYiEWLFo16n2PHjkGhUODKK6/EokWLUFFRAbVabbS2yQgMDMT555+PTz75BABQUlKC2tpaBAYGjvuczs5O/PWvf5V/vvzyy5GYmIj29nacPHkS33//vdH33L9/P5KSknDBBRegoKAAH3/8MQCgsbERt956K7755psJ63ZwcEBiYiKSkpLg6+sLd3d3dHZ24uDBg9i/fz8A4NFHH8WmTZsQFBQEAPjwww/x6KOPyq+hVqtx7bXXIjg4GGVlZfJ2BQyfcnDppZfKh9j9/f3xq1/9Ch4eHvjXv/6FjIwMdHV14aqrrsKxY8fg6+sLAPjd736Huro6+XXWr1+PpUuX4ssvv8SXX3454eeaCSNPi6ivr8dnn32Gzz77DPfeey+efvpp+bHXXnsNWq0WABATE4Mrr7wS9vb2qKysRG5uLrKzs81eOwnO0i1LInOZTI+dJEmjeqQaGhokSRrdU/HSSy9JO3fulH9+4YUXJEmafI/d5ZdfLv3000/yz7/85S8lSZpaj50kSdLTTz9t9K/6wMDAUZ/5z3/+s94yTz755KjX1R0mHhwclLy9veVlzzzzTEmr1crL/eY3v9HrCdEdPjNcb/Pnz5fa29v13kOr1eqttyeeeELv8a1bt+o9f7KM5f3CCy/oPT6yl6esrExycHCQH7vpppvkxwx7xXbv3j3peiRpcj12kiRJ9913n95yhw8fHvP5ut6slpYW+T53d/dRh8SHhob0Dvkbrp+4uDi95/z2t7/Ve/z48eNG33+kkpIS6YMPPpBeeukl6dlnn5WeeeYZycXFRX7O22+/LS+7dOlS+X5XV9dRh1Lb2tqkpqYmSZIk6dNPP5WXdXR0lCoqKuTl+vr69HryHn/8cUmSJKm2tlavN/D666+Xn9Pf3y/FxcWZtcdOqVRK55xzjnTnnXdKO3bskK655ppRPXKff/65/JyLL75Yvt/wULokSdKpU6ekrq6uKdVN1onDnRAZkCRp0sveeeedmDt3LgDgiSeeQGdnp0nvtWzZMlx88cUAgE8//RTp6ekmPX+ke++9F++99x6WLl065uO1tbXYuHEjPv30U/m+gwcPyv93c3Mb86T8iIgIAMO9RiN7Ga677jq9nswNGzbI/5ckCT/99NOYdWzevBnu7u5695WUlKC5uVn++f7779cbAuLJJ5+UHzt27BiamprGfG1THDp0SP6/n58f1qxZI/88b948nHnmmWMuO5K3t/eEvYdTZcp2CAyfdB8XFwdguCc2IiICl1xyCe699168/fbbqK2tlbMcy9VXXw1HR0f55+uvv17v8aysrAlrqKiowIoVK7BgwQJcc801uOOOO3DPPffg3nvvlXtmAaC6uhrA8MVDut5xAPj1r389argPDw8PzJkzB4D+9trf3683fJCTk5PexTK6zLKysvTW5a9+9Sv5/w4ODrjqqqsm/FzTJSEhAbW1tfj222/x5z//GQ899BDef/99fP7553pX1r/55pvy/8866yz5/zfeeCPOOecc3HLLLXj++eeRnp4Of39/uLi4mO0zkPjYsCMyUFpaKv9fpVLJv1TG4uLiggcffBDA8CGrF154weT3e/zxx+UG0ljj2pni2muvRXZ2Nurq6vDxxx/jnnvuwbx58/SWefHFF+X/j2yohYSEjDpUO1Jra6vez35+fno/+/v7G11eJzo6etR9pl6t29jYaNLyYxlZn+FnAfQ/z3ifJTIy0ug6Ox0jt0MA8qFLY9577z0sXLgQwHBD/tNPP8Wzzz6LDRs2IDQ0FFu2bBn3uVPNc6RLLrlk3EbwSH19ffJrjmx0TTRuoynbiW4b0R1q15noc84kb2/vMbe1tWvXYsGCBfLPhYWF8v/vuusu3HDDDVAqlejr68N3332H1157DXfffTeWLVuGhIQEvcPMRDzHjmiEzMxMHDlyRP757LPPnnAsu9/+9rd47rnnUF5ejmeffRaDg4MmvWd8fDyuu+46/PWvf8W3334r9wCeDn9/f1x66aW49NJLsXPnTqSlpcnn4hw/flxeztvbW/5/VVUVtFrtuA0Vw2EYRp6XBwyfJ2RseZ2xehcMl73pppv0ftEZGuuXo6lGvqfhZwH0P48pn2U61NTU4Ouvv5Z/XrBggdHz63QSEhJQUFCAo0ePIjs7G8eOHUN2dja+/PJLDA0N4YUXXsDFF1+MVatWjXruRHl6enoafe+SkhK9784f/vAHbN26Fb6+vlAoFPDz8xvVIPfy8oJCoZAbdxUVFUbfY2QOrq6u2LZt27jL6saGNKx7os9pKSMbuCP3Ofb29nj77bfx3HPP4dChQygpKUFJSQn27t2L1tZW5OfnY+vWrdizZ48FqiYhWfAwMJFZTXSOXXFxsUnDnbz00kvyY++8886Y57VNdI6djuE5XZjE+Toj1dTUSHfccYdUXFw86rGhoSG9K1Hj4+PlxwzPsXvmmWdGPV93HpOp59hVVlaOud7GOifL8By7kVcJj3Ty5Enpq6++mtQ6kaSZP8fOcKiWyZjoHLva2lopNTVVb5nJDneSk5Mz5nsmJCTIyz/77LNjrp+4uDipv79ffszUc+wOHjyod39WVpb8Wv/5z3/G/cwjz7Fzc3MbNbxKR0eH1NzcLEnS8FA4I1/nP//5z6jPOjQ0JH3zzTfy+YQ1NTXCnGP3wAMPjDmEztdff61X4zXXXCM/VlxcPOY5dM8///yY32ki9tiRzfrqq6/Q1NQEjUaDnJwcfPXVV3q9bZs3b9Y778qY6667Dk899RTy8/OnVMu8efPw29/+Frt3757S8/v7+/HSSy/hpZdewqJFi7B8+XKEhIRgYGAA3377rd65Seeff778/xtvvBGPP/643Itx7733Yt++fVi2bBk6Ozvxww8/YOHChdizZw+USiXuvPNOeZ7VH3/8EStXrsTq1auRm5urd+7eFVdcgZCQkEnXb2dnh7vuugsPPfQQAOCdd97BsWPH8Itf/AJqtRq1tbX4+eefkZ2djV//+tdYu3btlNbTSBs2bMCjjz4qH9677LLL9K6K1Q32bG9vP6OzdRw6dAjPPvssurq6UFBQgH/961/o6emRH1+/fj1uuummSb3WsmXLEBgYiLPOOguBgYFwd3fHkSNHkJeXJy8zXs9bQUEBzjjjDFx44YXIz8+Xr4oFgHPOOWfCGS6ioqJgZ2eHoaEhAMPn6F1zzTU4deqU0d6k++67D9deey2A4cGqFy9ejGuvvRYhISE4efIkPv30U3z00UdYtWoVLrroIixYsAAlJSUAgAsvvBCXX345YmJiMDg4iNLSUnz33Xc4deoU9u/fj4iICAQGBmLdunX44osvAAB//etfodFosGTJEnz55ZcoKCiYcL1Ol3/96194/PHHkZaWhrPOOgseHh4oLCzERx99pNdjd9ttt8n/f+GFF/DOO+/g3HPPRUREBPz9/dHS0oK3335bXmai3lSyMZZuWRKZi2GP3Xg3e3t76dFHH9XrjZIk4z12kqR/xZ7uNtkeO0kavrpt5JWDMKHHbrzBkw1vsbGxcu+Hjinj2A0MDEiXXXaZ0fdISkqSWlpaxq1tvHHeBgcHpWuvvXbCz2DKwK4jnzfWVdDffvut5OHhYXRbGDlGoSRNf4/deDeFQiH97ne/k3p7e40+f+T6dHJyMvqaERERemMMjnxs3bp1Y44lN2fOHKmkpGRS73/rrbeO+b7nnnuuFBQUNGaPnSSZNo5dUVGR0XHsxnpOeXn5uNu44ZiHUzHZHrvFixcbrVmpVErPP/+83nNuueUWo8+xs7OT9u7dO6W6yTrx4gmyaUqlEm5uboiIiMC5556LRx55BBUVFXjwwQcnPLfO0MUXX4xly5ZNuZaAgADceeedU3puaGgoDh48iEcffRSrV69GdHQ0PD09YW9vDy8vLyxfvhxPPfUUMjIy9M6rA4C0tDTk5+fj4YcfRlJSEtzd3eHg4ICAgACsXbsWl156qbysvb09/v73v+ODDz7A2rVr4ePjA3t7e3h6emLFihX4n//5Hxw8eHBK0yIplUq89957+PTTT/HLX/4SgYGBcHBwgJeXF+Lj43H11Vfj3XffxZ///OcpraOxnHPOOTh69CjuuusuxMbGwtnZGU5OTggPD8eNN96IzMxM/OY3v5m29xuPnZ0d1Go1QkJCsHLlSvzxj39EcXExXnrpJZPGRnzllVewceNGJCQkwNfXF/b29nB1dUVCQgLuu+8+pKenw8PDY8znXnXVVfj3v/+Ns846Cy4uLvDw8MDll1+On3/+ecwLXsby0ksvYceOHQgLC4ODgwNCQ0Nx77334rPPPoO9/fgHiHbs2IGDBw/i+uuvR3h4OJycnODi4oKoqChs3LhR70rZmJgY5OXl4YknnkBaWho8PDzg4OCAoKAgpKWl4e6778YPP/yAlStXys+JiIjAzz//jKuuugqenp5wdnbGGWecgc8++ww33njj5FbuNHj//fexc+dOrFq1CuHh4fL2FhkZiY0bN+Lw4cP4wx/+oPecTZs24Y9//CNWrlyJkJAQqFQqODo6IiQkBFdeeSW+//57XHLJJWb7DCQ+hSSZeE09ERFZBcMhNszZyCGimcEeOyIiIiIrwYYdERERkZVgw46IiIjISnC4EyIiG8VTrImsD3vsiIiIiKwEG3ZEREREVoKHYgEMDQ2htrYWbm5uepf/ExEREVmaJEno6OhAYGDghGOssmEHoLa21qTpj4iIiIjMraqqCsHBwUaXYcMOgJubG4DhFebu7j5j79Pd3Q0XF5cZe30yHTMRDzMRDzMRC/MQz0xnotFoEBISIrdXjGHDDv8dfd3d3X1GG3ZFRUVIS0ubsdcn0zET8TAT8TATsTAP8Zgrk8mcLsaLJ4iIiIisBBt2ZhQeHm7pEsgAMxEPMxEPMxEL8xCPSJmwYWdGg4ODli6BDDAT8TAT8TATsTAP8YiUCRt2ZlRdXW3pEsgAMxEPMxEPMxEL8xCPSJmwYUdERERkJRQSJwuERqOBh4cH2tvbZ/Sq2IGBATg4OMzY65PpmIl4mIl4mIlYmId4ZjoTU9op7LEzo+LiYkuXQAaYiXiYiXiYiViYh3hEyoQNOzPq7u62dAlkgJmIh5mIh5mIhXmIR6RM2LAzI1dXV0uXQAaYiXiYiXiYiViYh3hEyoQNOzOKjIy0dAlkgJmIh5mIh5mIhXmIR6RM2LAzoyNHjli6BDLATMTDTMTDTMTCPMQjUiZs2BERERFZCTbszCg0NNTSJZABZiIeZiIeZiIW5iEekTKxt3QBRERERCKRJAk9A9pxH3d2UEKhUJixosljw86MKisrMXfuXEuXQSMwE/EwE/EwE7Ewj5nXM6DFwoe/Hvfxwh1r4eL43yaUSJnwUCwRERGRlWCPnRktXrzY0iWQAWYiHmYiHmYiFuZhXpkProaLoxLd/VokP/bNmMuIlAl77MyorKzM0iWQAWYiHmYiHmYiFuZhXi6OSrg42sPFUTnuMiJlwoadGXV2dlq6BDLATMTDTMTDTMTCPMQjUiZs2JmRi4uLpUsgA8xEPMxEPMxELMxDPCJlwoadGcXExFi6BDLATMTDTMTDTMTCPMQjUiZs2JlRdna2pUsgA8xEPMxEPMxELMxDPCJlwoYdERERkZVgw86MgoODLV0CGWAm4mEm4mEmYmEe4hEpEzbszMjensMGioaZiIeZiIeZiIV5iEekTNiwM6OKigpLl0AGmIl4mIl4mIlYmId4RMqEDTsiIiIiK8GGnRktWrTI0iWQAWYiHmYiHmYiFuYhHpEyYcPOjCorKy1dAhlgJuJhJuJhJmJhHuIRKRM27Myovb3d0iWQAWYiHmYiHmYiFuYhHpEyYcPOjFQqlaVLIAPMRDzMRDzMRCzMQzwiZSLO9bmnyd7eHvHx8QCA5ORk/O///q+FKxpNVx+Jg5mIh5mIh5mIhXlML0mS0DOg1buvu187ztJjEykTq2nYeXp6Ijc319JlGJWZmYm0tDRLl0EjMBPxMBPxMBOxMI/p1TOgxcKHvz6t1xApEx6KJSIiIrISQjTsDhw4gPXr1yMwMBAKhQKffPLJqGV2796NiIgIqFQqJCUl4YcfftB7XKPRICkpCWeeeSa+//57M1Vumrlz51q6BDLATMTDTMTDTMTCPGZO5oOrUbhjrd7N2UE54fNEykSIhl1XVxcWL16Ml19+eczHP/zwQ9x111144IEHkJOTg7POOgvr1q3Tu7y4oqICWVlZePXVV/HrX/8aGo3GXOVPmouLi6VLIAPMRDzMRDzMRCzMY+a4OCrh4mivd1MoFBM/T6BMhGjYrVu3Do899hguu+yyMR9//vnnsWnTJtx0002IjY3Fiy++iJCQELzyyivyMoGBgQCGT2BcuHAhSktLx32/vr4+aDQavZs5lJWVmeV9aPKYiXiYiXiYiViYh3hEykT4iyf6+/uRlZWFrVu36t2/Zs0aHDp0CADQ2toKFxcXODk5obq6GoWFhZg3b964r7lz50488sgjo+7PzMyEWq1GYmIiioqK0NPTAzc3N0RERCAvLw8AEBYWhqGhIVRVVQEAlixZguPHj6OzsxNqtRrR0dHIyckBAAQHB0OpVOLkyZMAAK1Wi6KiImg0GqhUKsTFxSErKwvAcMNUpVKhvLwcwHADtbq6Gm1tbXB0dMSSJUtw+PBhAEBAQABcXV1x/PhxAEBsbCzq6+vR0tICe3t7JCUl4fDhw5AkCb6+vvDy8pIbugsWLEBLSwsaGxthZ2eHlJQUZGZmQqvVYs6cOfDz80NRUREAYP78+dBoNKivrwcApKWlITs7GwMDA/Dy8kJgYCAKCgoAAJGRkeju7sapU6cADF+ZnJ+fj97eXnh4eCA0NBRHjx4FAISHh2NwcBDV1dUAgMTERBQXF6O7uxuurq6IjIzEkSNHAAChoaEA/jv44+LFi1FWVobOzk64uLggJiYG2dnZ8vq2t7eX5+xbtGgRKisr0d7eDpVKhfj4eGRmZgIY7jZ3cXFBa2sr0tPTERcXh9raWrS2tsLBwQGJiYlIT08HAPj7+8Pd3R3Hjh2T13dDQwOam5uhVCqRnJyMjIwMDA0NwdfXF97e3igpKQEAREdHo7W1FY2NjVAoFEhNTUVWVhYGBwfh7e0Nf39/eX1HRUWhs7MTdXV1AIDU1FTk5uaiv78fnp6eCA4ORn5+PgBg3rx56O3tRW1tLQAgKSkJBQUF6O3thbu7O8LDw/W2Wa1WK6/vpUuXorS0FF1dXXB1dUVUVJR84VFISAjs7OzkbTYhIQEnTpxAR0cHnJ2dERsbK6/voKAgODo64sSJE/L6rqqqQltbG5ycnJCQkICMjAx5m1Wr1fLOb+HChairq0NLS8uo9d3d3Y2WlhZ5fcfExKCpqQlNTU3yNqtb3z4+PvDx8UFxcbG8zba3t6OhoWHUNuvt7Y2AgAAUFhbK22xXV5e8vlNSUpCXl4e+vj54enoiJCRE3mYjIiLQ39+PmpoaeZudiX1EQkICKioqhNtHtLW1IT093Sb3EbptVqR9hG6/Zav7CD8/P3h4eEzbPmLkhZcdHZ04erxE3mZH7iPiFi+VlztWegzz54XJ22xfXx+qq6tnbB+h229NhkKSJGnSS5uBQqHA3r17cckllwAAamtrERQUhIMHD2L58uXyck888QTeeustlJSU4NChQ7jllltgZ2cHhUKB7du3y88fS19fH/r6+uSfNRoNQkJC0N7eDnd395n6aOjs7ISrq+uMvT6ZjpmIh5mIh5mIhXlMr+7+Qfmq2MIda+HiOHafl7HlZjoTjUYDDw+PSbVThDgUOxmGx7glSZLvW758OY4ePYojR44gNzfXaKMOAJycnODu7q53MwfdX04kDmYiHmYiHmYiFuYhHpEyEb5h5+PjA6VSKXeF6jQ0NMDf399CVU1Na2urpUsgA8xEPMxEPMxELMxDPCJlInzDztHREUlJSdi3b5/e/fv27dM7NDsbODg4WLoEMsBMxMNMxMNMxMI8xCNSJkJcPNHZ2Smf5AsAJ06cQG5uLry9vREaGootW7bghhtuQHJyMs444wy89tprqKysxK233mrBqk2XmJho6RLIADMRDzMRDzMRC/MQj0iZCNFjl5mZiaVLl2Lp0uErTrZs2YKlS5fi4YcfBgBcffXVePHFF7Fjxw4sWbIEBw4cwBdffIGwsDBLlm0y3RU9JA5mIh5mIh5mIhbmIR6RMhGix27VqlWY6OLczZs3Y/PmzdP6vrt27cKuXbug1Q5P9svhTmxvKAMOdyLeUAYc7oTDnYi0j+BwJ+LtIzjciXHCDXdiCaZcRnw6KioqEB4ePmOvT6ZjJuJhJuJhJmJhHtNrOoY7melMrHK4E2tgrmFVaPKYiXiYiXiYiViYh3hEyoQNOzPSdRuTOJiJeJiJeJiJWJiH5XX3a9HdPyjfjhaVTnhKmbkIcY4dERER0WyR/Ng3o+4rTNGOexjXnNhjZ0axsbGWLoEMMBPxMBPxMBOxMA8yxvJNSxvS0NAg1HF4YiYiYibiYSZiYR6W4eygROGOtXr3dfdrx+y9syT22JlRc3OzpUsgA8xEPMxEPMxELMzDMhQKBVwc7Q1uSkuXNYpN99iZexw7ABzHDmKNUaUbn0ukMapsfRy73t5ejmMn2D6ivb2d49gJtI/Q7bdsdR9hqXHsxtpHZOTkyc+tqalBS0OdvM1yHDsLMtc4dkRERCSWyY5jN93PNQXHsROU7i8TEgczEQ8zEQ8zEQvzIGPYsDOjoaEhS5dABpiJeJiJeJiJWJgHGWPT59iZm6+vr6VLIAPMRDzMRDzMRCzMY+okSULPgFbvvu5+7ThLz05s2JmRt7e3pUsgA8xEPMxEPMxELMxj6noGtPI5cdaKh2LNSHcVFImDmYiHmYiHmYiFeZAx7LEjIiIim5P54OpR49A5O4g3Lp2pbLphZ+5x7MLCwjiOHcQao6q/v5/j2Ak2RpWrqyvHsRNsH6HVajmOnUD7CN1+y1b3Eaczjl1w2DzoFBzJwdkrlp3WPoLj2AnKXOPYlZeXY968eRMvSGbDTMTDTMTDTMTCPKZuused4zh2Nq6xsdHSJZABZiIeZiIeZiIW5kHGsGFnRgqFwtIlkAFmIh5mIh5mIhbmQcawYWdGqampli6BDDAT8TAT8TATsTAPMoYNOzPSnQRN4mAm4mEm4mEmYmEeZAwbdmY0ODho6RLIADMRDzMRDzMRC/MgY9iwMyOOFi4eZiIeZiIeZiIW5kHGsGFnRv7+/pYugQwwE/EwE/EwE7EwDzKGDTsz0g0ySeJgJuJhJuJhJmJhHmQMG3ZEREREVoJTiplxSrGQkBBOKQaxpgvilGLiTRekVqs5pZhg+whOKcYpxUTaR0zXlGIZGZmcUsxamWtKsZMnTyIsLGzGXp9Mx0zEw0zEw0zEwjymjlOK0bTStfpJHMxEPMxEPMxELMyDjGHDjoiIiMhKsGFnRpwGRjzMRDzMRDzMRCzMg4xhw86MdCefkjiYiXiYiXiYiViYBxlj01fFmlt/f7+lSyADzEQ8zEQ8zEQszGNyJElCz4BW777ufu04S1sPNuzMyNPT09IlkAFmIh5mIh5mIhbmMTk9A1r5ilVbwkOxZhQcHGzpEsgAMxEPMxEPMxEL8yBj2GNnRvn5+UhLS7N0GTQCMxEPMxEPMxEL8zBd5oOr4eKo1LvP2UE5ztKzGxt2REREZNVcHJUzNniwaGzjU47D3FOKBQUFcUoxiDVdUF9fH6cUE2y6IBcXF04pJtg+YnBwkFOKCbSP0O23bHUfMdkpxUZeKJGRkQmVvWLa9xGcUkxQ5ppSrKqqCiEhITP2+mQ6ZiIeZiIeZiIW5jE55pjui1OK2TjdX04kDmYiHmYiHmYiFuZBxrBhR0RERGQl2LAzo6SkJEuXQAaYiXiYiXiYiViYBxnDhp0Z6U4iJnEwE/EwE/EwE7EwDzKGDTsz6u3ttXQJZICZiIeZiIeZiIV5kDFs2JnRTF5xS1PDTMTDTMTDTMTCPMgYNuzMKDw83NIlkAFmIh5mIh5mIhbmQcawYWdGusEJSRzMRDzMRDzMRCzMg4xhw46IiIjISrBhZ0ZhYWGWLoEMMBPxMBPxMBOxMA8yxqbnijU33Zy0JA5mIh5mIh5mIhbmMZokSegZ0F8vI+eKtSVs2JlRdXU1goKCLF0GjcBMxMNMxMNMxMI8RusZ0Mpztto6HoolIiIishI23WO3a9cu7Nq1S+7WzszMhFqtRmJiIoqKitDT0wM3NzdERETIVyGFhYVhaGgIVVVVAIAlS5bg+PHj6OzshFqtRnR0NHJycgAAwcHBUCqVOHnyJAAgJiYGRUVF0Gg0UKlUiIuLQ1ZWFgAgMDAQKpUK5eXlAID4+HhUV1ejra0Njo6OWLJkCQ4fPgwACAgIgKurK44fPw4AiI2NRX19PVpaWmBvb4+kpCQcPnwYkiTB19cXXl5eKC0tBQAsWLAALS0taGxshJ2dHVJSUpCZmQmtVos5c+bAz88PRUVFAID58+dDo9Ggvr4eAJCWlobs7GwMDAzAy8sLgYGB8gjokZGR6O7uxqlTpwAAycnJyM/PR29vLzw8PBAaGoqjR48CGL5Uf3BwENXV1QCAxMREFBcXo7u7G66uroiMjMSRI0cAAKGhoQCAyspKAMDixYtRVlaGzs5OuLi4ICYmBtnZ2fL6tre3R0VFBQBg0aJFqKysRHt7O1QqFeLj45GZmQkAmDt3LlxcXDA0NIT09HTExcWhtrYWra2tcHBwQGJiItLT0wEA/v7+cHd3x7Fjx+T13dDQgObmZiiVSiQnJyMjIwNDQ0Pw9fWFt7c3SkpKAADR0dFobW1FY2MjFAoFUlNTkZWVhcHBQXh7e8Pf319e31FRUejs7ERdXR0AIDU1Fbm5uejv74enpyeCg4ORn58PAJg3bx56e3vlycCTkpJQUFCA3t5euLu7Izw8XG+b1Wq18vpeunQpSktL0dXVBVdXV0RFRSE3NxcAEBISAjs7O3mbTUhIwIkTJ9DR0QFnZ2fExsbK6zsoKAiOjo44ceKEvL6rqqrQ1tYGJycnJCQkICMjQ95m1Wo1ysrKAAALFy5EXV0dWlpaRq3vOXPmoKWlRV7fMTExaGpqQlNTk7zN6ta3j48PfHx8UFxcLG+z7e3taGhoGLXNent7IyAgAIWFhfI229XVJa/vlJQU5OXloa+vD56enggJCZG32YiICPT396OmpkbeZmdiH5GQkICKigrh9hEKhQLp6ek2uY/QbbMi7SN0+y1b3Uf4+fnBw8NDbx9RdWr4Ow8AmQ+uRtHRIxgaGsKcOXMwZ84c5GVnQqFQTPs+IiPnv1co19TUoKWhTt5mp3MfoatpMhSSJEmTXtpKaTQaeHh4oL29fUYHfszPz0d8fPyMvT6ZjpmIh5mIh5mIhXmM1t0/KB+KLdyxFi6O5um3Mtf7mtJO4aFYM+rq6rJ0CWSAmYiHmYiHmYiFeZAxbNiZkaurq6VLIAPMRDzMRDzMRCzMg4yZcp9hT08P6urq0NPTAx8fH/j5+U1nXVYpKirK0iWQAWYiHmYiHmYiFuZBxpjUY1dTU4Pt27cjJSUF7u7uiIqKwqJFizB37lz4+fnhyiuvxKeffoqhoaGZqndW0518SuJgJuJhJuJhJmJhHmTMpHrsTp06hfvvvx/vvvsu1Go1li9fjq1bt8LPzw8qlQotLS0oLy/Hzz//jEsvvRRhYWHYuXMnrrnmmpmun4iIiIj+v0k17KKjo5GamooPPvgA69evh4ODw7jLlpeX480338Ttt9+Ompoa3H333dNW7GwXEhJi6RLIADMRDzMRDzMRC/MgYybVsPv000/xi1/8YlIvOG/ePDz66KO455575LFraJidHa9VEQ0zEQ8zEQ8zEQvzIGMmtXVMtlE3koeHB5YsWWLy86yZbkBHEgczEQ8zEQ8zEQvzIGNOq9lfUlKCgwcPckwdIiIiIgFMqWH39ttvIzg4GAsXLsTKlSvlqVGuuuoqvP7669NaoDVJSEiwdAlkgJmIh5mIh5mIhXmQMSY37D766CPceOONSExMxMsvv4yRM5IlJibib3/727QWaE14zqF4mIl4mIl4mIlYmAcZY3LDbufOndi4cSP++c9/4uabb9Z7LDY21qSJam1NR0eHpUsgA8xEPMxEPMxELLaehyRJ6O4fNLhpLV2WMEyeeaKoqAhPPfXUmI95e3ujubn5tIuyVs7OzpYugQwwE/EwE/EwE7HYeh49A1osfPhrS5chLJN77FxcXNDe3j7mYzU1NfDy8jrtoqxVbGyspUsgA8xEPMxEPMxELMyDjDG5YbdixYpR59bp7NmzB6tWrZqOuqxSdna2pUsgA8xEPMxEPMxELMzjvzIfXI3CHWv1bs4OSkuXZVEmH4p9+OGHceaZZyI1NRXXXXcdFAoFPv74Y2zbtg0HDhzA4cOHZ6JOIiIiIj0ujkq4OJrclLFqJvfYJScn48svv0RnZyfuvvtuSJKEJ554AqWlpfjiiy8QHx8/E3VahaCgIEuXQAaYiXiYiXiYiViYBxkzpWbuOeecg6KiIpSVlaG+vh4+Pj6Ijo6e7tpm3K5du7Br1y5otcNX02RmZkKtViMxMRFFRUXo6emBm5sbIiIikJeXBwAICwvD0NAQqqqqAABLlizB8ePH0dnZCbVajejoaOTk5AAAgoODoVQq5VHCAwMDUVRUBI1GA5VKhbi4OGRlZcmPqVQqlJeXAwDi4+NRXV2NtrY2ODo6YsmSJXJvaEBAAFxdXXH8+HEAw+db1NfXo6WlBfb29khKSsLhw4chSRJ8fX3h5eWF0tJSAMCCBQvQ0tKCxsZG2NnZISUlBZmZmdBqtZgzZw78/PxQVFQEAJg/fz40Gg3q6+sBAGlpacjOzsbAwAC8vLwQGBiIgoICAEBkZCS6u7tx6tQpAMN/AOTn56O3txceHh4IDQ3F0aNHAQDh4eEYHBxEdXU1gOFhcoqLi9Hd3Q1XV1dERkbiyJEjAIDQ0FAAQGVlJQBg8eLFKCsrQ2dnJ1xcXBATEyMflggODoa9vT0qKioAAIsWLUJlZSXa29uhUqkQHx+PzMxMAMDcuXPh4uKC8vJy1NTUIC4uDrW1tWhtbYWDgwMSExORnp4OAPD394e7uzuOHTsmr++GhgY0NzdDqVQiOTkZGRkZGBoagq+vL7y9veWxHaOjo9Ha2orGxkYoFAqkpqYiKysLg4OD8Pb2hr+/v7y+o6Ki0NnZibq6OgBAamoqcnNz0d/fD09PTwQHByM/Px/A8NR9vb29qK2tBQAkJSWhoKAAvb29cHd3R3h4uN42q9Vq5fW9dOlSlJaWoqurC66uroiKikJubi6A4Tko7ezs5G02ISEBJ06cQEdHB5ydnREbGyuv76CgIDg6OspDLyxatAhVVVVoa2uDk5MTEhISkJGRIW+zarUaZWVlAICFCxeirq4OLS0to9a3s7MzXFxc5PUdExODpqYmNDU1ydusbn37+PjAx8cHxcXF8jbb3t6OhoaGUdust7c3AgIC5Cv3IyMj0dXVJa/vlJQU5OXloa+vD56enggJCZG32YiICPT396OmpkbeZmdiH5GQkICKigrh9hEVFRWoqamxyX2EbpsVaR9x8uRJ1NTU2Ow+ws3LBzoZGZlYEh9rsX1ERk6eXEtNTQ1aGurkbXY69xGmjDiikMY6Wc7GaDQaeHh4oL29He7u7jP2Punp6UhLS5ux1yfTMRPxMBPxMBOx2Hoe3f2D8lWxhTvWWvRQrLlqMaWdMqkKDhw4YFIBK1euNGl5IiIiIjp9k2rYrVq1CgqFYsLlJEmCQqGQD22SvkWLFlm6BDLATMTDTMTDTMTCPMiYSTXs9u/fP9N12ISqqiosWLDA0mXQCMxEPMxEPMxELLaShyRJ6BkY3VHEWSaMm1TD7uyzz57pOmxCW1ubpUsgA8xEPMxEPMxELLaSB2eYmBqThzuhqXNycrJ0CWSAmYiHmYiHmYiFeZAxU7p8o6WlBe+99558Ke9ICoUCb7zxxrQUZ20SEhIsXQIZYCbiYSbiYSZiscU8Mh9cDRfH0TNK2PosE2MxuWFXWVmJlJQUdHd3o7u7Gz4+PmhpaYFWq4WXlxc8PDxmok6rkJGRYdOXqIuImYiHmYiHmYjFFvPgDBOTZ/Kh2K1btyIuLg719fWQJAlffvklurq68NJLL0GlUuHzzz+fiTqJiIiIaAImN+x++ukn3HbbbVCpVACGr1pxdHTE7bffjk2bNuHee++d9iKtRUBAgKVLIAPMRDzMRDzMRCzMg4wxuWFXX1+PuXPnws7ODkqlEhqNRn7s7LPPxo8//jitBVoTtVpt6RLIADMRDzMRDzMRC/MgY0xu2Pn7+6OlpQXA8Hx+unn1AKCiogL29jwGPh7dHHgkDmYiHmYiHmYiFuZBxpjcClu2bBlycnJw8cUX47LLLsOOHTvQ19cHR0dHPPPMM/jFL34xE3USERER0QRMbtjdc889qKioAAA8/PDDKCoqwrZt2yBJElauXIk///nP012j1Vi4cKGlSyADzEQ8zEQ8zEQs1pjHWLNMcIaJqTG5YZeUlISkpCQAw8f5//nPf0Kj0UChUMDNzW3aC7QmdXV1XEeCYSbiYSbiYSZiscY8OMvE9JmWE+Lc3d2n42Wsnu7cRBIHMxEPMxEPMxEL8yBjTG7YPfXUU6iursZLL7006rE77rgDYWFhuOeee6alOGvj4OBg6RLIADMRDzMRDzMRi7XnMdYsE5xhYvJMvir2rbfeQnx8/JiPLV68GG+99dZpF2WtEhMTLV0CGWAm4mEm4mEmYrH2PHSzTIy8KRQKS5c1a5jcsDt58iSio6PHfCwqKkq+sIJGS09Pt3QJZICZiIeZiIeZiIV5kDEmN+wcHBzQ0NAw5mP19fVsVRMRERFZiMkNu+TkZLz++utjPvb6668jOTn5tIuyVn5+fpYugQwwE/EwE/EwE7EwDzJmSuPYXXjhhVi1ahU2b96MoKAgVFdX49VXX8WBAwfwxRdfzESdVsHDw8PSJZABZiIeZiIeZiIW5kHGmNxjd/755+O1115Dbm4urrnmGqxcuRLXXnstcnNz8frrr2Pt2rUzUadVOHbsmKVLIAPMRDzMRDzMRCyzPQ9JktDdP2hw42DE02VK49ht2rQJ11xzDQ4dOoTGxkb4+vpi+fLlnJiYiIiIjOJgxDNrygMUq9VqnHfeedNZi9WLiYmxdAlkgJmIh5mIh5mIhXmQMSY37L799ls0NzfjyiuvBDB8JezGjRuRnZ2NNWvW4LXXXoNKpZr2QmfCrl27sGvXLmi1w13AmZmZUKvVSExMRFFREXp6euDm5oaIiAjk5eUBAMLCwjA0NISqqioAwJIlS3D8+HF0dnZCrVYjOjoaOTk5AIDg4GAolUqcPHkSwPB5EbW1tdBoNFCpVIiLi0NWVhYAIDAwECqVCuXl5QCA+Ph4VFdXo62tDY6OjliyZAkOHz4MAAgICICrqyuOHz8OAIiNjUV9fT1aWlpgb2+PpKQkHD58GJIkwdfXF15eXigtLQUALFiwAC0tLWhsbISdnR1SUlKQmZkJrVaLOXPmwM/PD0VFRQCA+fPnQ6PRoL6+HgCQlpaG7OxsDAwMwMvLC4GBgSgoKAAAREZGoru7G6dOnQIwfJFNfn4+ent74eHhgdDQUBw9ehQAEB4ejsHBQVRXVwMYHpOpuLgY3d3dcHV1RWRkJI4cOQIACA0NBQBUVlYCGB4rsaysDJ2dnXBxcUFMTAyys7Pl9W1vby8PubNo0SJUVlaivb0dKpUK8fHxyMzMBADMnTsXLi4uyMvLg1qtRlxcHGpra9Ha2goHBwckJibKQwr4+/vD3d1dPvwRGxuLhoYGNDc3Q6lUIjk5GRkZGRgaGoKvry+8vb1RUlICAIiOjkZraysaGxuhUCiQmpqKrKwsDA4OwtvbG/7+/vL6joqKQmdnJ+rq6gAAqampyM3NRX9/Pzw9PREcHIz8/HwAwLx589Db24va2loAw1P9FRQUoLe3F+7u7ggPD9fbZrVarby+ly5ditLSUnR1dcHV1RVRUVHIzc0FAISEhMDOzk7eZhMSEnDixAl0dHTA2dkZsbGx8voOCgqCo6MjTpw4Ia/vqqoqtLW1wcnJCQkJCcjIyJC3WbVajbKyMgDDc13W1dWhpaVl1Pq2s7NDZGSkvL5jYmLQ1NSEpqYmeZvVrW8fHx/4+PiguLhY3mbb29vlK/dHbrPe3t4ICAhAYWGhvM12dXXJ6zslJQV5eXno6+uDp6cnQkJC5G02IiIC/f39qKmpkbfZmdhHJCQkoKKiQrh9RE5ODpydnW1yH6HbZkXaR5SVlUGtVs/afURdUyt0XrvAG05KBfz9/aF2cUH5iRPIy85EXFzcuPsIPz8/eHh4CLGPyMjJkz9LTU0NWhrq5G12OvcRupomQyFJkjTppQGceeaZOO+887Bt2zYAwIYNG/Dxxx/jvPPOw1dffYU//elPeOihh0x5SYvTaDTw8PBAe3v7jE6Plp6ejrS0tBl7fTIdMxEPMxEPMxHLbM+ju39QPhRbuGMtXBynZXZTizDXZzGlnWLyxROlpaXyqNeDg4PYu3cvnnrqKXz88cfYsWMH3n///alVbQPs7Exe3TTDmIl4mIl4mIlYmAcZY/LWodFo4OnpCQDIyspCV1cXLr74YgDDh4503eE0WkpKiqVLIAPMRDzMRDzMRCzMg4wxuWHn5+cnH9f+5ptvEBYWhuDgYABAR0eH1U9OfDp05xuROJiJeJiJeJiJWJgHGWPyweDzzz8f999/PwoKCrBnzx5s2LBBfqy4uBjh4eHTWZ9VGRoasnQJZICZiIeZiIeZiGU25SFJEnoG9Meo45h1M8vkht0TTzyByspKvP7660hNTcWDDz4oP/bee+9h+fLl01qgNfHx8bF0CWSAmYiHmYiHmYhlNuXBMevMz+SGnY+PD7766qsxH9u/f/+sGerEEmbTl9FWMBPxMBPxMBOxMA8yZlqvy53JoUKsQXFx8ay+RN0aMRPxMBPxMBOxzNY8Mh9cDRdHpd59zg7KcZamqZq9g8cQERHRrOHiqJzVY9bNFhwMx4zmz59v6RLIADMRDzMRDzMRC/MgY9iwM6P29nZLl0AGmIl4mIl4mIlYRM1DkiR09w8a3HgFrLmxT9SMGhoaEBERYekyaARmIh5mIh5mIhZR8+AVsGJgjx0RERGRlTC5x+7AgQPjPmZnZwdPT0/ExMTA3p6dgYZm41VM1o6ZiIeZiIeZiGU25MErYC3H5NbXqlWroFAojC7j6uqKLVu2YNu2bVMuzBplZ2cjMTHR0mXQCMxEPMxEPMxELLMhD14Bazkmr/XPPvsMd9xxBxYsWIBrr70W/v7+qKurw/vvv4+SkhLs2LEDP/zwAx599FF4e3vjjjvumIm6Z6WBgQFLl0AGmIl4mIl4mIlYmAcZY3LD7quvvsLKlSuxZ88evfs3bNiADRs24Mcff8Rrr70GAHj99dfZsBvB29vb0iWQAWYiHmYiHmYiFhHy4Byw4jK5Yffhhx/inXfeGfOx6667Dtdffz3+8pe/4KKLLhp3OVsVEBBg6RLIADMRDzMRDzMRiwh58ApYcZl8VWxXVxcaGxvHfKy+vh7d3d0AADc3N15AYaCwsNDSJZABZiIeZiIeZiIW5kHGmNzyWrFiBR566CGkpKRgwYIF8v3FxcV4+OGHceaZZwIAysvLERwcPH2VEhERkXB4BaxYTG7Yvfjii1i5ciXi4uIQHx8Pf39/1NfXIz8/H15eXnjxxRcBALW1tdiwYcN01zurRUZGWroEMsBMxMNMxMNMxCJaHrwCViwmH4pduHAh8vPzsWXLFqhUKpSXl0OlUuHuu+9GXl4eYmNjAQAPPfQQtm7dOu0Fz2ZdXV2WLoEMMBPxMBPxMBOxMA8yZkpN7ICAADz99NPTXYvVq6urQ1hYmKXLoBGYiXiYiXiYiViYBxkz5b7Tjo4O/PTTT2huboavry/S0tLg5uY2nbURERGRhXFok9llSg27Z599Fo888gi6u7shSRIAQK1W45FHHsGWLVumtUBrkpKSYukSyAAzEQ8zEQ8zEYu58+DQJrOLyefYvf3227jvvvuwcuVKfPDBB/jhhx/w4Ycf4uyzz8a9997LseuMyMvLs3QJZICZiIeZiIeZiIV5kDEm99i98MILuO666/DXv/5V7/4rr7wS119/PV544QXccMMN01agNenr67N0CWSAmYiHmYiHmYjFknlwaBPxmdxjV1xcjOuvv37Mx66//noUFRWddlHWytPT09IlkAFmIh5mIh5mIpaZzEOSJHT3Dxrc/ns+nW5ok5E3hUIxY/WQ6UzusXN2dkZLS8uYj7W0tMDZ2fm0i7JWISEhli6BDDAT8TAT8TATscxkHjyfbvYzucfurLPOwvbt21FbW6t3f11dHXbs2IGVK1dOW3HW5ujRo5YugQwwE/EwE/EwE7EwDzLG5B67J554AsuXL0dUVBTOPfdczJ07F6dOncK3334LBwcHfPzxxzNRJxEREZkRz6ebnUxu2MXFxSEjIwPbtm3D/v370dzcjDlz5uCSSy7Btm3bEB0dPRN1WoWIiAhLl0AGmIl4mIl4mIlYzJUHpwqbnaaUWHR0NN5///3prsXq9ff3W7oEMsBMxMNMxMNMxMI8yBiTz7GjqaupqbF0CWSAmYiHmYiHmYhluvKY6ApYmp0m1WO3Y8eOSb+gQqHAQw89NOWCiIiIaObxCljrNKmG3fbt2yf9gmzYjS8xMdHSJZABZiIeZiIeZiKWqeTB+V5tx6QadkNDQzNdh00oKipCQkKCpcugEZiJeJiJeJiJWKaSx0S9c7wC1nrwchcz6unpsXQJZICZiIeZiIeZiGUm8uAVsNbDqlLs7u5GbGwsrrzySjz77LOWLmcUNzc3S5dABpiJeJiJeJiJWE43D/bOWbdJXRUbHx+PvXv3TvpFT506hTvvvBNPPvnklAubiscffxxpaWlmfU9TcCwo8TAT8TAT8TATsZxuHpzv1bpNqmF31VVX4de//jVCQ0Pxpz/9CV9//TUaGxshSRKA4W7h/Px8/O///i/Wr1+PsLAwZGVl4eKLL57R4kc6duwYiouLccEFF5jtPU2Vl5dn6RLIADMRDzMRDzMRy0R5cBgT2zapht3DDz+M0tJSXHvttfjf//1frFu3DgEBAXBwcICzszNcXV2xePFi3HzzzdBoNPjggw9w8OBBLFy4cFJFHDhwAOvXr0dgYCAUCgU++eSTUcvs3r0bERERUKlUSEpKwg8//KD3+D333IOdO3dO6v2IiIisle5CiZG35Me+sXRZZCaTPsdu7ty5eOqpp/DYY48hPT0dP/30E2pra9HT0wMfHx/ExMRg1apVCA4ONrmIrq4uLF68GBs3bsTll18+6vEPP/wQd911F3bv3o0VK1bgL3/5C9atW4fCwkKEhobi008/RXR0NKKjo3Ho0CGT399cwsLCLF0CGWAm4mEm4mEmYmEeZIzJF084ODjgzDPPxJlnnjltRaxbtw7r1q0b9/Hnn38emzZtwk033QQAePHFF/H111/jlVdewc6dO/Hzzz/jgw8+wEcffYTOzk4MDAzA3d0dDz/88LTVOB04bIx4mIl4mIl4mIlYTMmDF0rYHuGnFOvv70dWVhbWrFmjd/+aNWvk3rmdO3eiqqoKFRUVePbZZ/Hb3/7WaKOur68PGo1G72YOVVVVZnkfmjxmIh5mIh5mIhZT8uCFErZH+OFOmpqaoNVq4e/vr3e/v78/6urqpvSaO3fuxCOPPDLq/szMTKjVaiQmJqKoqAg9PT1wc3NDRESEfLJqWFgYhoaG5C/WkiVLcPz4cXR2dkKtViM6Oho5OTkAgODgYCiVSpw8eRIAoNVqUVRUBI1GA5VKhbi4OGRlZQEAAgMDoVKpUF5eDmD4SuTq6mq0tbXB0dERS5YsweHDhwEAAQEBcHV1xfHjxwEAsbGxqK+vR0tLC+zt7ZGUlITDhw9DkiT4+vrCy8sLpaWlAIAFCxagpaUFjY2NsLOzQ0pKCjIzM6HVajFnzhz4+fmhqKgIADB//nxoNBrU19cDANLS0pCdnY2BgQF4eXkhMDAQBQUFAIDIyEh0d3fj1KlTAIDk5GTk5+ejt7cXHh4eCA0NxdGjRwEA4eHhGBwcRHV1NYDhUdSLi4vR3d0NV1dXREZG4siRIwCA0NBQAEBlZSUAYPHixSgrK0NnZydcXFwQExOD7OxseX3b29ujoqICALBo0SJUVlaivb0dKpUK8fHxyMzMBDB8aoGLiwtaW1uRnp6OuLg41NbWorW1FQ4ODkhMTER6ejqA4W3N3d0dx44dk9d3Q0MDmpuboVQqkZycjIyMDAwNDcHX1xfe3t4oKSkBAERHR6O1tRWNjY1QKBRITU1FVlYWBgcH4e3tDX9/f3l9R0VFobOzU96uU1NTkZubi/7+fnh6eiI4OBj5+fkAgHnz5qG3txe1tbUAgKSkJBQUFKC3txfu7u4IDw/X22a1Wq28vpcuXYrS0lJ0dXXB1dUVUVFRyM3NBQCEhITAzs5O3mYTEhJw4sQJdHR0wNnZGbGxsfL6DgoKgqOjI06cOCGv76qqKrS1tcHJyQkJCQnIyMiQt1m1Wo2ysjIAwMKFC1FXV4eWlpZR67u7uxstLS3y+o6JiUFTUxOamprkbVa3vn18fODj44Pi4mJ5m21vb0dDQ8Oobdbb2xsBAQEoLCyUt9muri55faekpCAvLw99fX3w9PRESEiIvM1GRESgv79fnqNzpvYRCQkJqKioEG4f0dbWhvT0dJvcR+i2WZH2Ebr9VmpqKnJyctDR0w9PDw8EBgWhsLAQfdrhCxsBICMjEyp7hVXtI/z8/ODh4SHEPiIj578XstTU1KCloU7eZqdzH6GraTIUku7SVkEoFArs3bsXl1xyCQCgtrYWQUFBOHToEM444wx5uccffxzvvPOOHJYp+vr60NfXJ/+s0WgQEhKC9vZ2uLu7n/ZnMPa+Tk5OM/b6ZDpmIh5mIh5mIpaReXT3DxqdUaJwx1oOPDyDRq7/mVzXGo0GHh4ek2qnCH8o1sfHB0qlclTvXENDw6hevMlycnKCu7u73s0cdH89kziYiXiYiXiYiViYBxkjfDPe0dERSUlJ2LdvHy699FL5/n379uGXv/ylBSszXWdnp6VLIAPMRDzMRDzMRAySJKFnQIumtg509w8CgN74dLxQgoApNOzq6uoQEBAwrUV0dnbq/QVy4sQJ5ObmwtvbG6GhodiyZQtuuOEGJCcn44wzzsBrr72GyspK3HrrrdNax0xTq9WWLoEMMBPxMBPxMBMx6ManAwB8NvrwK+d7JWAKDbvQ0FBcfvnl+N3vfocVK1ZMSxGZmZk455xz5J+3bNkCANiwYQP27NmDq6++Gs3NzdixYwdOnTqF+Ph4fPHFF7NuLJ/o6GhLl0AGmIl4mIl4mAnR7GFyw+7BBx/Ea6+9hr/97W9YtGgR7rjjDlx33XVwdnaechGrVq3CRNdwbN68GZs3b57ye4ggJydH6LlsbREzEQ8zEQ8zEQ8Pu9J4pnRVrFarxT/+8Q+8/PLL+PHHH+Hl5YWNGzfitttuQ2Rk5EzUOSN27dqFXbt2QavVorS0FP/5z39mfLgTLy8v4YYysOXhTjIzM+Hl5SXUUAYc7qQbixcvFmIoAw53Mry+v/76a3h6etrkPkKk4U6CQiNw5p+Hv1NvrZ+DlcvTbHIfIdpwJxs+awYA7LslfkaHOzn33HMndVXsaQ93kpeXh5dffhnvvfceent7cf755+OOO+7A2rVrT+dlzcqUy4hPR01NDYKCgmbs9cl0zEQ8zEQ8zEQM5hpagybPKoc7WbRoEdatW4f4+HgMDQ3hP//5Dy644AIkJyfLfwHSMKWS3eSiYSbiYSbiYSbmJ0kSuvsHDW7aiZ9INm/KDbumpibs3LkTERERuOKKK2Bvb48PP/wQGo0Gn3zyCTo6OnDjjTdOY6mzn67rmsTBTMTDTMTDTGbWWI245q5+LHz4a71b8mPfWLpUmgVM7jNMT0/Hrl278NFHH0GSJFx99dX4/e9/j8TERHmZ9evXw97eXp49goiIiP47Ft1I3f1aNtpo2pjcsDvjjDMQEBCArVu34rbbboOfn9+Yy4WHh2P58uWnXaA1SUhIsHQJZICZiIeZiIeZTB+9segmyfAK2J6eXl4BS+MyuWH39ttv4+qrr4aDg4PR5WJjY7F///4pF2aNKioqEBsba+kyaARmIh5mIh5mYj7jDWOiUCjkn0+WVWGOB/OgsZncsLv++utnog6LGDncCTA8UPJMD3dSVFQk3FAGtjzcycmTJ6HRaIQYyoDDnfx3uBN/f38hhjLgcCfD67uyshIajcYm9xGnM9xJU1MTBqFEYuJSZGVlY2hoCK6e3tB57QJvxC+Yj9a2NjQ1NUGhUGCO2hHZ2dl6+4jDOfr7CN1+y1b3EaINd6JTU1Mzo8OdTJbJw5089dRTqK6uxksvvTTqsTvuuANhYWG45557THlJizPXcCdHjhzB4sWLZ+z1yXTMRDzMRDzMZGpGDoUxlqkOj8E8xGEVw5289dZbiI+PH/OxxYsX46233jL1JW1GXFycpUsgA8xEPMxEPMxELMyDjDG5aXny5Mlx5w2MioqSu7hptKysLE7LIxhmIh5mIh5mcvqmcwow5kHGmNywc3BwkI9NG6qvr9c7wZOIiMgWjDeMiY6Lo5IzRZBZmLyVJScn4/XXX8fVV1896rHXX38dycnJ01KYNQoMDLR0CWSAmYiHmYiHmUxsKsOYTBXzIGNMbtjdc889uPDCC7Fq1Sps3rwZQUFBqK6uxquvvooDBw7giy++mIk6rYJKpbJ0CWSAmYiHmYiHmYiFeZAxJjfszj//fLz22mu4++67cc0110ChUECSJHh4eOD111/H2rVrZ6JOq1BeXg5fX19Ll0EjMBPxMBPxMBN9Ex12nc7z6cbCPMiYKR3w37RpE6655hocOnQIjY2N8PX1xfLly6FWq6e7PiIiIouZyhRgPJ+OLGnKW55arcZ55503nbWYnbkHKI6KiuIAxRBr8NHBwUGkp6dzgGKBBh/19PRES0uLEIOPcoDi4fUtSRLS09Otah8hSRKiYuJQXVWFdo0GKpUTFi5ciOzs4WzCg+dCrVajoOQ4NnzWDFNoNB2obWuesX2Ebr9lq/sIDlBsnMkDFAPDf8FkZGTg5MmT6OnpGfX4r3/9a1Nf0qLMNUBxSUkJFixYMGOvT6ZjJuJhJuKZ7ZlMpddNdzh1ssuNZDgF2HSb7XlYExEHKDa5gtLSUlx88cU4duwYxmoTKhSKWdewM5e2tjZLl0AGmIl4mIl4RM1krAbbSLoG1lSuWB2rMWeJRtxYRM2DxGByw+72229Hb28vPvzwQyQkJMDJyWkm6rJKjo6Oli6BDDAT8TAT8YiayUQNtpG9bsZMtndOlHPnRM2DxGDyoVjd1a9XXXXVTNVkduY6FCtJEgdwFgwzEQ8zEY+omUw0F+tYjPW6TbYH0NJEzcMWiXgo1uS5Yl1dXWe08WPNdCc2kziYiXiYiXjMmYkkSejuH5zkTX+IkcIda5H54Gqjr6/rdRt50zWSFArFqMfGWs7S+B0hY0xuWm7cuBHvvfcezj///Jmoh4iIbNhUZ3DQNdicHZQo3DH+eKrTOZ4ckYhMbtjFx8fj/fffx8UXX4z169djzpw5o5a57LLLpqU4axMQEGDpEsgAMxEPMxHPbMpE1+tmzWZTHmR+Jm/91113HQDgxIkT+Ne//jXqcYVCIY8LR/pcXV0tXQIZYCbiYSbiMZbJZM9Lm2g5nYlmcDD2PraC3xEyxuSG3f79+2eiDptw/PjxMXs4yXKYiXiYiXiMZTLRoVPdCeVTOcQqylWoouF3hIwx+Rtz9tlnz0QdFmHumSe0Wi1nnoBYM0+0trZy5gnBRpXv7u7mzBOC7SPa2trGnXmivrkNxmRkZEJlr0BgSLjR5Yw915L7CN02K9I+QrffstV9BGeeMG5KM08AQHt7O37++Wc0NTXhggsugJeX11ReRgjmGu5Eo9HwimLBMBPxMBPxGMtk5HAPY40HZ+y+iYgyvIho+B0Rh4jDnUypgkcffRRPPvkkenp6oFAokJGRAS8vL5x77rk477zzsHXr1ikVbu3q6+v5ZRQMMxEPMxGPLpPxpubSGevQ6VgD/vIQ6+nhd4SMMfmbtXv3bjzyyCPYvHkz1q1bhwsvvFB+7KKLLsLHH3/Mht04WlpaLF0CGWAm4mEm4tFlMtWhSGh68TtCxpjcsHv55ZexZcsWPP3006Oufp0/f758zJtGs7fnX6iiYSbiYSZiGNk7Nwi7UQMCG8Ox5GYWvyNkjMlbR3l5OdauHfsL6+bmxsmJjUhKSrJ0CWSAmYiHmYhhVO/cXv2euvGm5gJsYyw5S+J3hIwxeUoxDw8P+SpJQxUVFfDz8zvtoqwVp4ERDzMRDzOZWRNN2TXZ6+mMTc1FM4vfETLG5D+pzj33XDz99NP45S9/CZVKBWD4r7PBwUG88sor4/bmESa9wyTzYSbiYSYza6Lz5EZexarz2gXeOHNZit5yPJxqOfyOkDEmN+x27NiBlJQULFy4EJdeeikUCgVefvll5OTkoLKyEn/7299mok6r4Ovra+kSyAAzEQ8zmT4TXcU6lrGuYg3y9+WhVYHwO0LGmPxNjYqKwsGDB7Flyxbs3r0bkiTh7bffxjnnnIN3331XHiySRpvNY/1ZK2YiHmYyNeM14sZqqOmMNcbcWLw8PaerTJoG/I6QMVP6E2zhwoX46quv0NfXh+bmZnh5ecHZ2Xm6a7M6paWlSEtLs3QZNAIzEQ8zmdhUGnFj0Z0nN9FVrHnZmQj095lSrTT9+B0hY06rb93JyQmBgYHTVQsREU3CVMaTO52rWHlRBNHsMaVz7IxRKBR46KGHplyQOZl7rtjw8HDOFQux5oodGBjgXLGCzQPp5ubGuWIn2Ef0Dho/ef6TDTHw8XRD2f/fnyxYsAAttSdR1to6pX3E0NDQuHPFWvs+QsS5YnX7LVvdR3CuWONMnivWzs74CCkKhWLUwMWiM9dcseXl5Zg3b96MvT6ZjpmIh5nom+iw63g9cdPZy8ZMxMI8xGEVc8UODQ2Nuq+lpQWffPIJXnzxRXz++eemvqTNaGxs5JdRMMxEPLacyVTOnTPHvKu2nImImAcZMy17A29vb/zmN79BQ0MD7rzzTuzdu3c6XtbqTNTbSebHTMRjy5mIOherLWciIuZBxkzrn3mpqal44oknpvMlrUpKSsrEC5FZMRPxMJPxGbsAYiYxE7EwDzJmWht2R44cgaur63S+pFXJzMxEcnKypcugEZiJeGwlk4kGDzbHuXOTZSuZzBbMg4wxuWH39ttvj7qvr68PeXl5+L//+z9cf/3101KYNZptF5XYAmYiHlvJZKLDruY4d26ybCWT2YJ5kDEm7zVuvPHGMe9XqVS4/vrr8eyzz55uTVZrzpw5li6BDDAT8TAT8TATsTAPMsbkhp1uPJqRVCoV/P39p6Uga+bn52fpEsgAMxGPNWYy1cOuorDGTGYz5kHGmNywCwsLm4k6bEJRURGngREMMxHPbMpkrAbbWEQYsuR0zKZMbAHzIGPE3ZMQEQlO1OFJiMh2mdyws7Ozm/RVWQqFAoODgyYXZa3mz59v6RLIADMRj6iZTHQ4dbJEP+w6FlEzsVXMg4wxuWH38MMPY8+ePejs7MT69esREBCAU6dO4V//+hdcXV2xcePGmajTKmg0Gnh7e1u6DBqBmYhHhEymMgPEWA22sVhqyJLTIUIm9F/Mg4wxuWHn5uaGgIAAfPPNN3pj1nV0dGD16tVwcXHBvffeO61FWov6+nqEh4dbugwagZmIR4RMpnKIVfTz5E6HCJnQfzEPMsbkvdDu3bvxzDPPjBqI2M3NDffddx/uueceNuyIyKrNxsOpRGQbTG7Y1dTUwN5+7KfZ29ujrq7utIsyl127dmHXrl3yYI+ZmZlQq9VITExEUVERenp64ObmhoiICOTl5QEYvip4aGgIVVVVAIAlS5bg+PHj6OzshFqtRnR0NHJycgAAwcHBUCqVOHnyJAAgISEBRUVF0Gg0UKlUiIuLQ1ZWFgAgMDAQKpUK5eXlAID4+HhUV1ejra0Njo6OWLJkCQ4fPgwACAgIgKurK44fPw4AiI2NRX19PVpaWmBvb4+kpCQcPnwYkiTB19cXXl5eKC0tBQAsWLAALS0taGxshJ2dHVJSUpCZmQmtVos5c+bAz88PRUVFAIbP49BoNKivrwcApKWlITs7GwMDA/Dy8kJgYCAKCgoAAJGRkeju7sapU6cAAMnJycjPz0dvby88PDwQGhqKo0ePAgDCw8MxODiI6upqAEBiYiKKi4vR3d0NV1dXREZG4siRIwCA0NBQAEBlZSUAYPHixSgrK0NnZydcXFwQExOD7OxseX3b29ujoqICALBo0SJUVlaivb0dKpUK8fHxyMzMBADMnTsXLi4uAID09HTExcWhtrYWra2tcHBwQGJiItLT0wEA/v7+cHd3x7Fjx+T13dDQgObmZiiVSiQnJyMjIwNDQ0Pw9fWFt7c3SkpKAADR0dFobW1FY2MjFAoFUlNTkZWVhcHBQXh7e8Pf319e31FRUejs7JS/Q6mpqcjNzUV/fz88PT0RHByM/Px8AMC8efPQ29uL2tpaAEBSUhIKCgrQ29sLd3d3hIeH622zWq1WXt9Lly5FaWkpurq64OrqiqioKOTm5gIAQkJCYGdnp7fNnjhxAh0dHXB2dkZsbKy8voOCguDo6CgPgbRo0SJUVVWhra0NTk5OSEhIQEZGhrzNqtVqlJWVAQAWLlyIuro6tLS0jFrffn5+aGlpkdd3TEwMmpqa0NTUJG+zuvXt4+MDHx8fFBcXy9tse3s7GhoaRm2z3t7eCAgIQGFhobzNdnV1yes7JSUFeXl56Ovrg0rtDp3XLvDGgshw9Pf3o7Z2ePt2d1SguLhQbx9xOCdLXt+ns4+oqKgQbh+hVCqRnp5uk/sI3TYr0j4CGN5v2fI+wsPDw6L7CE9PT4SEhCAjZ3gdAsPto5aGOnmbnc52hK6myVBIkiRNemkMB+7h4YF9+/bBwcFBvr+/vx+rV69GR0eHXNBsodFo4OHhgfb2dri7u0/8hCnKzs5GYmLijL0+mY6ZiGcmM5loeBLd+W/d/YPyodjCHWut9hDrZPF7IhbmIQ5z7StMaaeYXMFjjz2GSy65BPPmzcNll12GgIAA1NXV4eOPP0ZdXR0++eSTqdZt9QYGBixdAhlgJuKZrkxO5wKIqVztas34PREL8yBjTG7YXXjhhfjqq6/wwAMPYNeuXRgaGpK7j998802sXr16Juq0Cl5eXpYugQwwE/FMVyZTuQDCWKPPlvF7IhbmQcZMqc/w3HPPxbnnnovu7m60trbCy8tLPl+JxhcYGGjpEsgAMxGPuTIZ2TvHBp1x/J6IhXmQMad1MFg3FpOjo+O0FGPtCgoKOA2MYJiJeKaSyVTnYlUoFHB2UKJwx9pxX5tXu/J7IhrmQcZMqWG3f/9+3H///fLVLIcPH0ZiYiJuv/12nHvuubjsssumtUgiImMmOuxqbIw5hUJh8xdHEJH1sDP1Cd9++y3WrFmD3t5e3HPPPRgaGpIf8/HxwZ49e6azPqsSGRlp6RLIADMRDzMRDzMRC/MgY6Y0pdgFF1yATz/9FIODg3j66aflxxYvXow333xzWgu0Jt3d3ZYugQwwE/GcbiYcPHj68XsiFuZBxpjcY5eTk4NbbrkFAEbNd+jr6ysP+kej6QbmJHEwE/FMlIkkSejuHzS4/fd8Ot1h15G32TY3q2j4PREL8yBjTO6xs7e3H3cMnYaGBri5uZ12UURE45nKMCZERLbC5B67lJQUvPPOO2M+9ve//x1nnHHGaRdlrZKTky1dAhlgJuY3do/bf28LE5aMus/ECXJomvF7IhbmQcaY3GO3detWrF27Fpdeeil+/etfQ6FQID09Hf/3f/+Hv//979i/f/9M1GkV8vPzsXjxYkuXQSMwE/ObSo/beFP18Hw68+D3RCzMg4wxuWG3evVqvPXWW7jrrrvw6aefAgBuv/12eHp6Ys+ePTjzzDOnvUhr0dvba+kSyAAzmd2MDWNC04ffE7EwDzLGpD2iVqtFWVkZLrroIlx++eU4dOgQ6uvr4ePjgxUrVkCtVs9UnVbBw8PD0iWQAWZiWWP1uJWWlCJ6QTRnhBAIvydiYR5kjEkNO0mSsHDhQnz22WdYt24dzj333JmqyyqFhoZaugQywEwsa6wet+jI8FH3jbzqdeT/yTz4PREL8yBjTLp4wt7eHgEBAXqDEtPkHT161NIlkAFmMrMmGppkLGNlkvzYN1j48NdY+PDX7MWzAH5PxMI8yBiTT0655ppr8Pbbb+PCCy+ciXqIyIpwaBIiIvMyuWG3ZMkSfPjhh/jFL36Byy67DHPnzh01+OdsmSt2165d2LVrF7Ta4R6EzMxMqNVqJCYmoqioCD09PXBzc0NERATy8vIAAGFhYRgaGkJVVRWA4fVx/PhxdHZ2Qq1WIzo6Gjk5OQCA4OBgKJVKnDx5EgAwd+5cFBUVQaPRQKVSIS4uDllZWQCAwMBAqFQqlJeXAwDi4+NRXV2NtrY2ODo6YsmSJTh8+DAAICAgAK6urjh+/DgAIDY2FvX19WhpaYG9vT2SkpJw+PBhSJIEX19feHl5obS0FACwYMECtLS0oLGxEXZ2dkhJSUFmZia0Wi3mzJkDPz8/FBUVAQDmz58PjUaD+vp6AEBaWhqys7MxMDAALy8vBAYGoqCgAMDwFDfd3d3ywJnJycnIz89Hb28vPDw8EBoaKv+VGR4ejsHBQVRXVwMAEhMTUVxcjO7ubri6uiIyMhJHjhwB8N9DDpWVlQCGZzcpKytDZ2cnXFxcEBMTg+zsbHl929vbo6KiAgCwaNEiVFZWor29HSqVCvHx8cjMzJSzcHFxQV9fH9LT0xEXF4fa2lq0trbCwcEBiYmJSE9PBwD4+/vD3d0dx44dk9d3Q0MDmpuboVQqkZycjIyMDAwNDcHX1xfe3t4oKSkBAERHR6O1tRWNjY1QKBRITU1FVlYWBgcH4e3tDX9/f3l9R0VFobOzE3V1dQCA1NRU5Obmor+/H56enggODkZ+fj4AYN68eejt7UVtbS0AICkpCQUFBejt7YW7uzvCw8P1tlmtViuv76VLl6K0tBRdXV1wdXVFVFQUcnNzAQAhISGws7OTt9mEhAScOHECHR0dcHZ2RmxsrLy+g4KC4OjoiBMnTsjb7PETlWhrb4eTkyPi4+Nx6HDWON++YRkZmXBzdtRb387OzmhpaUFpaSneWj8H0dHRaG5uRnNzM+zs7JCUlIisrGwMDQ2htrICvr6+KC4ulrfZ9vZ2eaD0kdust7c3AgICUFhYKG+zXV1d8vpOSUlBXl4e+vr64OnpiZCQEHmbjYiIQH9/P2pqauRtdib2EQkJCaioqBBuHzEwMID09HSb3EeUlZUBgFD7CN1+a7btIxYtWoSqqiq0tbXByckJCQkJ8pzzAQEBUKvV8vpeuHAh6urq0NLSMmp9+/n5wcPDQ17fMTExaGpqQlNTk7zN6ta3j48PfHx8ZmwfkZEzvA4BoKamBi0NdfI2O537CF1Nk6GQTBwgys7O+NFbhUIhN5RmC41GAw8PD7S3t8Pd3X3G3qempgZBQUEz9vpkOmYyfbr7B432zo03NInhH4bMRDzMRCzMQxwj93vjDcs0HUxpp5hcAcepm7rq6mp+GQXDTKZGkiT0DOj/ATfRuXOTHZqEmYiHmYiFeZAxk2rY3XfffbjzzjsRHByMs88+GwAwNDQ0Ye8dEVmnic6d48DBRESWMamW2XPPPScfpweGx7NzcHCQj6PT5CQmJlq6BDLATPRNNN3XZM/c0PXOjbwZHnIdDzMRDzMRC/MgYybVYzfWzpxzN5quuLgYixYtsnQZNIKtZDLWodORdOe6TdQTN9Y5JNPdO2crmcwmzEQszIOM4Vw8ZtTd3W3pEsiArWQylQbbWHTn0Y08n266p/WylUxmE2YiFuZBxrBhZ0aurq6WLoEMMJPx6XriRk7tZY7BgZmJeJiJWJgHGTPphl1JSQns7YcX1w1nohsXxhCP/48tMjLS0iWQAVvMZKwG21imuydusmwxE9ExE7EwDzJm0nvtG2+8cdR9N9xwg97PkiTNynHszOXIkSNIS0uzdBk0gi1mYmqDzdlBicIda40+Pp1sMRPRMROxMA8yZlJ79zfffHOm6yCiKZjoogidicaYG+vcOR2FQmGRnjsiIjLdpPbWGzZsmOk6bIJu6hsSx2zPZLrmYjXHuXOTNdszsUbMRCzMg4zhCMNEREREVoLHV8yosrISc+fOtXQZNII1ZTLWeHJj0Z0TZ+5z5ybLmjKxFsxELMyDjGHDjmiWmGh+VlMviuC5c0RE1od7dTNavHixpUsgAyJkYsoFECKdCzdTRMiE9DETsTAPMoYNOzMqKytDXFycpcugEUTIZLougLAWImRC+piJWJgHGcOGnRl1dnZaugQyMFszme75WUUyWzOxZsxELMyDjGHDzoxcXFwsXQIZmEomEx06dXZQQqFQTPq5I8+TM+UCiPHeY7bj90Q8zEQszIOMYcPOjGJiYixdAhmYSiYTHTot3LF23IsSJnqupabxEgm/J+JhJmJhHmQMx7Ezo+zsbEuXQAZmIpPufi26+wfHuXG6vYnweyIeZiIW5kHG2HbXANEIUznEqjt0OvKK1cleuWrN58kREZFlsGFnRsHBwZYuwSYZa7DN8Z8LSZKgUCgmPEw6shGnczqHTnnYdWz8noiHmYiFeZAx/K1iRvb2XN2WMPE5cYGTamAZ64mbaBaH8Z5Do/F7Ih5mIhbmQcZw6zCjiooK+Pv7W7oMmoSxDrEaw1kcpg+/J+JhJmJhHmQMfxORTZlsg013mFTU+VSJiIjGwoadGS1atMjSJViVqVzsMNZ5bbpz5sa6YpU9cebH74l4mIlYmAcZY9O/sXbt2oVdu3ZBqx3+hZ6ZmQm1Wo3ExEQUFRWhp6cHbm5uiIiIQF5eHgAgLCwMQ0NDqKqqAgAsWbIEx48fR2dnJ9RqNaKjo5GTkwNg+ARXpVKJkydPAhgeVNLe3h4ajQYqlQpxcXHIysoCAAQGBkKlUqG8vBwAEB8fj+rqarS1tcHR0RFLlizB4cOHAQABAQFwdXXF8ePHAQCxsbGor69HS0sL7O3tkZSUhMOHD0OSJPj6+sLLywulpaUAgAULFqClpQWNjY2ws7NDSkoKMjMzodVqMWfOHPj5+aGoqAgAMH/+fGg0GtTX1wMA0tLSkJ2djYGBAXh5eSEwMBAFBQUAgMjISHR3d+PUqVMAgOTkZOTn56O3txceHh4IDQ3F0aNHAQDh4eEYHBxEdXU1ACAxMRHFxcXo7u6Gq6srIiMjceTIEQBAaGgoAKCyshLA8ByJZWVl6OzshJ2jCld+WD1uvplbV6Kprgb1zW3yfRkZmVDZK+Dp89/DGOP13KWnpwMA/P394e7ujmPHjsnru6GhAc3NzVAqlUhOTkZGRgaGhobg6+sLb29vlJSUAACio6PR2tqKxsZGKBQKpKamIisrC4ODg/D29oa/v7+8vqOiotDZ2Ym6ujoAQGpqKnJzc9Hf3w9PT08EBwcjPz8fADBv3jz09vaitrYWAJCUlISCggL09vbC3d0d4eHhetusVquV1/fSpUtRWlqKrq4uuLq6IioqCrm5uQCAkJAQ2NnZydtsQkICTpw4gY6ODjg7OyM2NlYeaiEoKAiOjo44ceIEgOFfNlVVVWhra4OTkxMSEhKQkZEBYHibVavVKCsrAwAsXLgQdXV1aGlpgYODAxITE+X1LUkSoqOj5fUdExODpqYmNDU1ydusbn37+PjAx8cHxcXFAIa32fb2djQ0NADQ32a9vb0REBCAwsJCAMPbbFdXl7y+U1JSkJeXh76+Pnh6eiIkJETeZiMiItDf34+amhoAmLF9REJCAioqKoTbR/z8889Qq9Wzbh/h4uKCmJgYeZsNDg6Gvb09Kioq5G22srIS7e3tUKlUiI+PR2ZmJgBg7ty5cHFxkbfZuLg41NbWorW1ddQ2a+59xLFjx+Dm5maz+wg/Pz94eHgIsY/IyBlehwBQU1ODloY6eZudzn2ErqbJUEiSJE16aSul0Wjg4eGB9vZ2uLu7z9j7pKenIy0tbcZe39Z09w9O+ipWXeNNN3jwRM81NsgwzSx+T8TDTMTCPMQx8nfJTP7eMKWdwt9cZqRSqSxdglBOZ2ouQ6aOJ6c7d+7o0aNjHtbguXOWw++JeJiJWJgHGcOGnRnFx8dbugShnM7UXIZMHRNOd+5c8pIEKJVsxImE3xPxMBOxMA8yhg07M8rMzGT3+Qwz9SpWZiIeZiIeZiIW5kHGsGFHQjB13Ljx8CpWIiKyZfwNaEZz5861dAlmMdG5czoTTc011vAjpjw+GbaSyWzCTMTDTMTCPMgYNuzMyMXFxdIlmMVE585N1un03E2WrWQymzAT8TATsTAPMsbO0gXYEt34PCQOZiIeZiIeZiIW5kHGsMeOZpTu3LmJ6C5qmOjih4meT0REZMvYsDOjuLg4S5dgdlMdhsRcbDET0TET8TATsTAPMoaHYs1IN7WLNZEkCd39gwa307+owVysMZPZjpmIh5mIhXmQMeyxM6PW1lZLl3Baxrra9XSHJ7G02Z6JNWIm4mEmYmEeZAwbdmbk4OBg6RJOy3Rd7SqS2Z6JNWIm4mEmYmEeZAwbdmaUmJho6RImbbzeOWPGulBC9IsaZlMmtoKZiIeZiIV5kDFs2JlRenr6rJkGZqLeufEacQqFYqZLm1azKRNbwUzEw0zEwjzIGDbsaEpMvdqViIiIZh5/M5uRv7+/pUuYktl4iHWyZmsm1oyZiIeZiIV5kDFs2JmRu7u7pUuYEmvunZutmVgzZiIeZiIW5kHGcBw7Mzp27JilSxjTbB+L7nSImoktYybiYSZiYR5kjHV2w5BJrHEYEyIiIlvEHjszio2NtXQJZICZiIeZiIeZiIV5kDHssTOjhoYG4c+NsOYLJcYyGzKxNcxEPMxELMyDjGGPnRk1NzdbuoQJ6S6UGHmbbWPTmWI2ZGJrmIl4mIlYmAcZw4adGSmV1tvzNVsxE/EwE/EwE7EwDzKGDTszSk5OtnQJZICZiIeZiIeZiIV5kDFs2JlRRkaGWd9v7GFM/nuTJMms9YjI3JnQxJiJeJiJWJgHGcOLJ8xoaGjIrO830TAmhTvWWu3Aw5Nl7kxoYsxEPMxELMyDjLHt3+pm5uvrO2OvLUkSegb0BxWeaJBh3eO2MhjxWGYyE5oaZiIeZiIW5kHGsGFnRt7e3jP22hP1zumGMenu1yL5sW8AQP7Xls1kJjQ1zEQ8zEQszIOM4Tl2ZlRSUmKx9/7vMCa8mmokS2ZCY2Mm4mEmYmEeZAx77KyQsUGGnR2UKNyxdtznWvNgxERERNaODTszio6OnpbXmeh8Ol3v3FgUCoXNXzAx0nRlQtOHmYiHmYiFeZAx/A1vRq2trfDy8jrt15nofDqavOnKhKYPMxEPMxEL8yBjeI6dGTU2Nlq6BDLATMTDTMTDTMTCPMgY9tiZ0UzMuWrsfDqamDXPgztbMRPxMBOxMA8yhg07M0pNTTX6+Fjnzo3k7KAc9YU2dj4dTWyiTMj8mIl4mIlYmAcZwxaBGWVlZSEpKWncxzlThPlNlAmZHzMRDzMRC/MgY9hKMKPBwcHTej5niph+p5sJTT9mIh5mIhbmQcZYRcOuo6MDv/jFLzAwMACtVos777wTv/3tby1d1iimjBbOmSLMgyO4i4eZiIeZiIV5kDFW0bBzcXHB999/DxcXF3R3dyM+Ph6XXXYZ5syZY+nS9Pj7+096WZ47Zx6mZELmwUzEw0zEwjzIGKtoOSiVSri4uAAAent7odVqIUmShasaraioCGlpaSY9hzNFzKypZEIzi5mIh5mIhXmQMUKMY3fgwAGsX78egYGBUCgU+OSTT0Yts3v3bkREREClUiEpKQk//PCD3uNtbW1YvHgxgoODcd9998HHx8dM1c8s3UwR49142TsRERHpCNGw6+rqwuLFi/Hyyy+P+fiHH36Iu+66Cw888ABycnJw1llnYd26daisrJSX8fT0xJEjR3DixAm89957qK+vN1f5kxYVFWXpEsgAMxEPMxEPMxEL8yBjhGjYrVu3Do899hguu+yyMR9//vnnsWnTJtx0002IjY3Fiy++iJCQELzyyiujlvX390dCQgIOHDgw7vv19fVBo9Ho3cyhs7PTLO9Dk8dMxMNMxMNMxMI8yBjhz7Hr7+9HVlYWtm7dqnf/mjVrcOjQIQBAfX09nJ2d4e7uDo1GgwMHDuC2224b9zV37tyJRx55ZNT9mZmZUKvVSExMRFFREXp6euDm5oaIiAjk5eUBAMLCwjA0NISqqioAwJIlS3D8+HF0dnZCrVYjOjoaOTk5AIDg4GAolUqcPHkSAKDVatHd3Q2NRgOVSoW4uDhkZWUBAAIDAyEpHeRaurq6UXXiFNra2uDo6IglS5bg8OHDAICAgAC4urri+PHjAIDY2FjU19ejpaUF9vb2SEpKwuHDhyFJEnx9feHl5YXS0lIAwIIFC9DS0oLGxkbY2dkhJSUFmZmZ0Gq1mDNnDvz8/FBUVAQAmD9/PjQajdz7mZaWhuzsbAwMDMDLywuBgYEoKCgAAERGRqK7uxunTp0CACQnJyM/Px+9vb3w8PBAaGgojh49CgAIDw/H4OAgqqurAQCJiYkoLi5Gd3c3XF1dERkZiSNHjgAAQkNDAUDunV28eDHKysrQ2dkJFxcXxMTEIDs7W17f9vb2qKioAAAsWrQIlZWVaG9vh0qlQnx8PDIzMwEAc+fOhYuLC4qKilBXV4e4uDjU1taitbUVDg4OSExMRHp6OoDhPxbc3d1x7NgxeX03NDSgubkZSqUSycnJyMjIwNDQEHx9feHt7Y2SkhIAw5N1t7a2orGxEQqFAqmpqcjKysLg4CC8vb3h7+8vr++oqCh0dnairq4OwPAgpLm5uejv74enpyeCg4ORn58PAJg3bx56e3tRW1sLAEhKSkJBQQF6e3vh7u6O8PBwvW1Wq9XK63vp0qUoLS1FV1cXXF1dERUVhdzcXABASEgI7Ozs5G02ISEBJ06cQEdHB5ydnREbGyuv76CgIDg6OuLEiRPy+q6qqkJbWxucnJyQkJCAjIwMeZtVq9UoKysDACxcuBB1dXVoaWkZtb67u7vh5uYmr++YmBg0NTWhqalJ3mZ169vHxwc+Pj4oLi6Wt9n29nY0NDSM2ma9vb0REBCAwsJCeZvt6uqS13dKSgry8vLQ19cHT09PhISEyNtsREQE+vv7UVNTI2+zM7GPSEhIQEVFxbj7CJVKhfLycgBAfHw8qqurzbKPKC4uRl1dnU3uI3TbrEj7CN1+y1b3EX5+fvDw8BBiH5GRM7wOAaCmpgYtDXXyNjud+whdTZOhkAS7ykChUGDv3r245JJLAAC1tbUICgrCwYMHsXz5cnm5J554Am+99RZKSkqQlZWFTZs2QZIkSJKE2267zWjDrq+vD319ffLPGo0GISEhaG9vh7u7+4x9tvT0dKMnvHb3D8oDFHMwYvOYKBMyP2YiHmYiFuYhDnP93tZoNPDw8JhUO2XWtBwMLxKQJEm+LykpSf5rYjKcnJzg5OQ0neVNyshpYMaaPowDD5sfp+YRDzMRDzMRC/MgY4Rv2Pn4+ECpVMpdoToNDQ2zbiyf3NxcLF26FMDE04eReYzMhMTATMTDTMTCPMgYIS6eMMbR0RFJSUnYt2+f3v379u3TOzQ7G/T391u6BDLATMTDTMTDTMTCPMgYIXrsOjs75ZN8AeDEiRPIzc2Ft7c3QkNDsWXLFtxwww1ITk7GGWecgddeew2VlZW49dZbLVi16Tw9Pce8Xzd92EgceNg8xsuELIeZiIeZiIV5kDFCNOwyMzNxzjnnyD9v2bIFALBhwwbs2bMHV199NZqbm7Fjxw6cOnUK8fHx+OKLLxAWFmapkqckODh4zPs5fZjljJcJWQ4zEQ8zEQvzIGOEaE2sWrVqwinANm/ejM2bN0/r++7atQu7du2CVjt80YI5hjvx8vIaHjfP3lGuIyMjE/NCgyw2lIEtD3eSmZkJLy8voYYy4HAn3Vi8eLEQQxlwuJPh9f3jjz/C09PTJvcRog534uXlZbP7CA53Ypxww51YgimXEZ+OkZeoc2gTMXDYAPEwE/EwE7EwD3GIONyJ8BdPWJN58+ZZugQywEzEw0zEw0zEwjzIGDbszKi3t9fSJZABZiIeZiIeZiIW5kHGsGFnRrpzHUgczEQ8zEQ8zEQszIOMYcOOiIiIyEqwYWdGSUlJli6BDDAT8TAT8TATsTAPMoYNOzPSXfZP4mAm4mEm4mEmYmEeZIxNj7FhiXHsioqKOI6dQGNUnTp1Cr29vUKNUcVx7LrR0tIixBhVHMdueH3X1dWht7fXJvcRIo5jp9tv2eo+guPYGcdx7GC+ceyKiooQGxsLgOPYiWJkJiQGZiIeZiIW5iEOjmNn48LDwy1dAhlgJuJhJuJhJmJhHmQMG3ZmpOuGJXEwE/EwE/EwE7EwDzKGDTsiIiIiK8GGnRmFhYVZugQywEzEw0zEw0zEwjzIGDbszEh39S2Jg5mIh5mIh5mIhXmQMWzYmYEkSejuH8Txiip09w/+/xu/mCLQXd5P4mAm4mEmYmEeZIxNj7FhrnHsSsoqsOGz5uE3/ezrUXVwHDvLjVHV2tqK9PR0ocao4jh2HMdOtHHs2trakJ6ebpP7CBHHsdPtt2x1H8Fx7IzjOHaY+XHsRo5zMxaOY2c5/f39cHR0nHhBMhtmIh5mIhbmIQ4Rx7Fja8LMMh9cDRdHpd59zg7KcZammVZaWor4+HhLl0EjMBPxMBOxMA8yhg07M3NxVLJ3TiBdXV2WLoEMMBPxMBOxMA8yhhdPkE1zdXW1dAlkgJmIh5mIhXmQMWzYkU2LioqydAlkgJmIh5mIhXmQMWzYkU3TXelF4mAm4mEmYmEeZAwbdkRERERWgg07smkhISGWLoEMMBPxMBOxMA8yhg07sml2dvwKiIaZiIeZiIV5kDHcOsim6UZPJ3EwE/EwE7EwDzLGpgdUM+eUYjolxSXo7+kUarogTinGKcVEmi6IU4pxSjGR9hGcUky8fQSnFDOOU4rBvFOKcfowsfT09MDZ2dnSZdAIzEQ8zEQszEMcIk4pxkOxZNN0f0mSOJiJeJiJWJgHGcOGHdm0jo4OS5dABpiJeJiJWJgHGcOGHdk0Hs4QDzMRDzMRC/MgY9iwI5sWGxtr6RLIADMRDzMRC/MgY9iwI5umu3qLxMFMxMNMxMI8yBhenglAd2GwRqOZkdfv7h/EUF+3/B6DvCpWGF1dXTOWO00NMxEPMxEL8xCHuX6/6/KezEAmHO4EQHV1NadoISIiIqFVVVUhODjY6DJs2AEYGhpCbW0t3NzcoFAoZuQ9NBoNQkJCUFVVNSNj5ZHpmIl4mIl4mIlYmId4zJGJJEno6OhAYGDghFPK8Zgghufdm6gFPF3c3d35ZRQMMxEPMxEPMxEL8xDPTGfi4eExqeV48QQRERGRlWDDjoiIiMhKsGFnJk5OTti2bRucnJwsXQr9f8xEPMxEPMxELMxDPKJlwosniIiIiKwEe+yIiIiIrAQbdkRERERWgg07IiIiIivBht002r17NyIiIqBSqZCUlIQffvjB6PLff/89kpKSoFKpMG/ePLz66qtmqtR2mJLJxx9/jPPOOw++vr5wd3fHGWecga+//tqM1Vo/U78jOgcPHoS9vT2WLFkyswXaIFMz6evrwwMPPICwsDA4OTkhMjIS//d//2emam2DqZm8++67WLx4MVxcXDB37lxs3LgRzc3NZqrW+h04cADr169HYGAgFAoFPvnkkwmfY9Hf7xJNiw8++EBycHCQXn/9damwsFD6/e9/L6nVaunkyZNjLl9eXi65uLhIv//976XCwkLp9ddflxwcHKS///3vZq7cepmaye9//3vpqaeekg4fPiyVlpZKf/rTnyQHBwcpOzvbzJVbJ1Pz0Glra5PmzZsnrVmzRlq8eLF5irURU8nk4osvltLS0qR9+/ZJJ06ckNLT06WDBw+asWrrZmomP/zwg2RnZyf9+c9/lsrLy6UffvhBiouLky655BIzV269vvjiC+mBBx6Q/vGPf0gApL179xpd3tK/39mwmyapqanSrbfeqndfTEyMtHXr1jGXv++++6SYmBi9+2655RZp2bJlM1ajrTE1k7EsXLhQeuSRR6a7NJs01Tyuvvpq6cEHH5S2bdvGht00MzWTL7/8UvLw8JCam5vNUZ5NMjWTZ555Rpo3b57eff/zP/8jBQcHz1iNtmwyDTtL/37nodhp0N/fj6ysLKxZs0bv/jVr1uDQoUNjPuenn34atfzatWuRmZmJgYGBGavVVkwlE0NDQ0Po6OiAt7f3TJRoU6aax5tvvomysjJs27Ztpku0OVPJ5J///CeSk5Px9NNPIygoCNHR0bjnnnvQ09NjjpKt3lQyWb58Oaqrq/HFF19AkiTU19fj73//Oy688EJzlExjsPTvd84VOw2ampqg1Wrh7++vd7+/vz/q6urGfE5dXd2Yyw8ODqKpqQlz586dsXptwVQyMfTcc8+hq6sLV1111UyUaFOmksexY8ewdetW/PDDD7C3565quk0lk/Lycvz4449QqVTYu3cvmpqasHnzZrS0tPA8u2kwlUyWL1+Od999F1dffTV6e3sxODiIiy++GC+99JI5SqYxWPr3O3vsppFCodD7WZKkUfdNtPxY99PUmZqJzvvvv4/t27fjww8/hJ+f30yVZ3Mmm4dWq8V1112HRx55BNHR0eYqzyaZ8h0ZGhqCQqHAu+++i9TUVFxwwQV4/vnnsWfPHvbaTSNTMiksLMSdd96Jhx9+GFlZWfjqq69w4sQJ3HrrreYolcZhyd/v/DN4Gvj4+ECpVI76i6qhoWFUq10nICBgzOXt7e0xZ86cGavVVkwlE50PP/wQmzZtwkcffYTVq1fPZJk2w9Q8Ojo6kJmZiZycHPzud78DMNyokCQJ9vb2+Pe//41f/OIXZqndWk3lOzJ37lwEBQXBw8NDvi82NhaSJKG6uhrz58+f0Zqt3VQy2blzJ1asWIF7770XAJCQkAC1Wo2zzjoLjz32GI/+WIClf7+zx24aODo6IikpCfv27dO7f9++fVi+fPmYzznjjDNGLf/vf/8bycnJcHBwmLFabcVUMgGGe+puvPFGvPfeezxHZRqZmoe7uzuOHj2K3Nxc+XbrrbdiwYIFyM3NRVpamrlKt1pT+Y6sWLECtbW16OzslO8rLS2FnZ0dgoODZ7ReWzCVTLq7u2Fnp/+rXKlUAvhvLxGZl8V/v5vlEg0boLtE/Y033pAKCwulu+66S1Kr1VJFRYUkSZK0detW6YYbbpCX110O/Yc//EEqLCyU3njjDQ53Ms1MzeS9996T7O3tpV27dkmnTp2Sb21tbZb6CFbF1DwM8arY6WdqJh0dHVJwcLB0xRVXSAUFBdL3338vzZ8/X7rpppss9RGsjqmZvPnmm5K9vb20e/duqaysTPrxxx+l5ORkKTU11VIfwep0dHRIOTk5Uk5OjgRAev7556WcnBx5CBrRfr+zYTeNdu3aJYWFhUmOjo5SYmKi9P3338uPbdiwQTr77LP1lv/uu++kpUuXSo6OjlJ4eLj0yiuvmLli62dKJmeffbYEYNRtw4YN5i/cSpn6HRmJDbuZYWomRUVF0urVqyVnZ2cpODhY2rJli9Td3W3mqq2bqZn8z//8j7Rw4ULJ2dlZmjt3rvSrX/1Kqq6uNnPV1mv//v1GfzeI9vtdIUnsqyUiIiKyBjzHjoiIiMhKsGFHREREZCXYsCMiIiKyEmzYEREREVkJNuyIiIiIrAQbdkRERERWgg07IiIiIivBhh0RERGRlWDDjohmhT179kChUMg3lUqFgIAAnHPOOdi5cycaGhpGPWf79u1QKBTw8/NDR0fHqMfDw8Nx0UUX6d2ne/0nn3xy3BoyMzMnrLeoqAg33HAD5s2bB5VKBR8fHyQmJuJ3v/sdNBqNCZ+ciGjy2LAjolnlzTffxE8//YR9+/Zh165dWLJkCZ566inExsbim2++GfM5jY2NePrpp016nyeffBItLS1TqjEnJwdJSUkoLCzEww8/jK+++gqvvvoqLrzwQnz99ddTfl0ioomwYUdEs0p8fDyWLVuGs846C5dffjleeOEF5OXlQa1W47LLLkN9ff2o55x//vl44YUXUFdXN6n3WL16Nbq6uvD4449PqcYXX3wRdnZ2+O6773DjjTdi1apVuOKKK/Doo4/i2LFjCAsLm9LrTkV3d7fZ3ouILI8NOyKa9UJDQ/Hcc8+ho6MDf/nLX0Y9/thjj2FwcBDbt2+f1OstWLAAmzZtwq5du3Dy5EmT62luboa7uztcXV3HfFyhUOj9/NVXX+Hcc8+Fh4cHXFxcEBsbi507d+ot889//hNnnHEGXFxc4ObmhvPOOw8//fST3jK6Q8/Z2dm44oor4OXlhcjISACAJEnYvXs3lixZAmdnZ3h5eeGKK65AeXm5yZ+PiMTFhh0RWYULLrgASqUSBw4cGPVYWFgYNm/ejDfeeAOlpaWTer3t27dDqVTioYceMrmWM844A6dOncKvfvUrfP/99+jp6Rl32TfeeAMXXHABhoaG8Oqrr+Kzzz7DnXfeierqanmZ9957D7/85S/h7u6O999/H2+88QZaW1uxatUq/Pjjj6Ne87LLLkNUVBQ++ugjvPrqqwCAW265BXfddRdWr16NTz75BLt370ZBQQGWL18+Zi8nEc1SEhHRLPDmm29KAKSMjIxxl/H395diY2Pln7dt2yYBkBobG6WmpibJw8NDuvzyy+XHw8LCpAsvvFDvNQBIt99+uyRJkvTAAw9IdnZ20pEjRyZdgyRJUm9vr3TJJZdIACQAklKplJYuXSo98MADUkNDg7xcR0eH5O7uLp155pnS0NDQmK+l1WqlwMBAadGiRZJWq9V7rp+fn7R8+fJRn/fhhx/We42ffvpJAiA999xzevdXVVVJzs7O0n333Wf08xDR7MEeOyKyGpIkjfvYnDlz8Mc//hH/+Mc/kJ6ePqnXu+++++Dt7Y0//vGPJtXh5OSEvXv3orCwEC+88AKuueYaNDY24vHHH0dsbCxKSkoAAIcOHYJGo8HmzZtHHZ7VKSkpQW1tLW644QbY2f13l+3q6orLL78cP//886jz6C6//HK9n//1r39BoVDg+uuvx+DgoHwLCAjA4sWL8d1335n0+YhIXGzYEZFV6OrqQnNzMwIDA8dd5q677kJgYCDuu+++Sb2mu7s7HnzwQXz11VfYv3+/yTXFxsbirrvuwl//+ldUVlbi+eefR3Nzs3x4t7GxEQAQHBw87ms0NzcDAObOnTvqscDAQAwNDaG1tVXvfsNl6+vrIUkS/P394eDgoHf7+eef0dTUZPJnIyIxsWFHRFbh888/h1arxapVq8ZdxtnZGdu3b8eBAwfw+eefT+p1b7vtNkREROCPf/yj0R7BiSgUCvzhD3+Ap6cn8vPzAQC+vr4AoHc+naE5c+YAAE6dOjXqsdraWtjZ2cHLy2vUe43k4+MDhUKBH3/8ERkZGaNun3zyyZQ/FxGJhQ07Ipr1Kisrcc8998DDwwO33HKL0WV/85vfIDY2Flu3bsXQ0NCEr+3o6IjHHnsMGRkZ+OijjyZVz1iNMGC4IabRaORexeXLl8PDwwOvvvrquI3GBQsWICgoCO+9957eMl1dXfjHP/4hXylrzEUXXQRJklBTU4Pk5ORRt0WLFk3qcxGR+OwtXQARkSny8/Plc8QaGhrwww8/4M0334RSqcTevXvlXrDxKJVKPPHEE7j00ksBAAkJCRO+57XXXotnn30WX3755aRqvPnmm9HW1obLL78c8fHxUCqVKC4uxgsvvAA7Ozv5nD1XV1c899xzuOmmm7B69Wr89re/hb+/P44fP44jR47g5Zdfhp2dHZ5++mn86le/wkUXXYRbbrkFfX19eOaZZ9DW1jbmDBmGVqxYgZtvvhkbN25EZmYmVq5cCbVajVOnTuHHH3/EokWLcNttt03qsxGR2NiwI6JZZePGjQCGe9I8PT0RGxuLP/7xj7jpppsmbNTpXHLJJVi+fDkOHTo0qeUVCgWeeuoprFmzZlLL33HHHfjwww/x+uuvo6amBl1dXfD19cUZZ5yBt99+G8uWLZOX3bRpEwIDA/HUU0/hpptugiRJCA8Px4YNG+RlrrvuOqjVauzcuRNXX301lEolli1bhv3792P58uWTqukvf/kLli1bhr/85S/YvXs3hoaGEBgYiBUrViA1NXVSr0FE4lNIp3PSCBEREREJg+fYEREREVkJNuyIiIiIrAQbdkRERERWgg07IiIiIivBhh0RERGRlWDDjoiIiMhKsGFHREREZCXYsCMiIiKyEmzYEREREVkJNuyIiIiIrAQbdkRERERWgg07IiIiIivx/wBqZn8WDa8sqgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get model predictions\n", + "probabilities = model_outputs(filtered_inputs, model)\n", + "\n", + "# Get displaced track mask\n", + "displaced_mask = np.concatenate(branches['t5_sim_vxy'])[~nan_mask] > 0.1\n", + "\n", + "# Calculate statistics for displaced tracks\n", + "displaced_predictions = probabilities[displaced_mask]\n", + "mean_score = np.mean(displaced_predictions)\n", + "median_score = np.median(displaced_predictions)\n", + "\n", + "print(f\"Prediction scores for displaced tracks (t5_sim_vxy > 0.1):\")\n", + "print(f\"Mean score: {mean_score:.4f}\")\n", + "print(f\"Median score: {median_score:.4f}\")\n", + "\n", + "plt.hist(displaced_predictions, bins=100, histtype='step', linewidth=1.5) # Outline only, no fill\n", + "plt.yscale('log')\n", + "plt.xlabel(\"DNN Score\", fontsize=12)\n", + "plt.ylabel(\"Frequency (log scale)\", fontsize=12)\n", + "plt.title(\"DNN Score for Displaced T5s\", fontsize=14, weight='bold')\n", + "\n", + "plt.grid(visible=True, which='both', linestyle='--', linewidth=0.5)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_layer1[32] = {\n", + "-1.3837075f, -0.0653152f, -0.7900129f, 0.0714758f, -1.1574365f, -1.4634879f, -0.9317133f, -0.1455518f, -0.0459635f, -0.2055620f, 0.0586231f, -0.8943899f, -0.1009487f, 0.0166031f, -0.5451909f, -0.1384538f, 1.2664700f, -1.8996916f, -0.0025585f, -0.1647783f, -1.9019107f, 0.0707104f, -0.2373025f, 0.0357050f, -0.0048417f, 2.3127339f, -0.0508943f, -0.1116435f, -0.1610904f, -1.6463890f, -1.0739423f, -0.0962902f };\n", + "\n", + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_layer1[23][32] = {\n", + "{ -0.1881404f, -0.0534256f, 1.6563641f, 0.0401664f, 2.8318353f, 1.5049738f, 1.4111555f, -0.2339872f, 0.0431970f, 0.1220361f, -0.0450153f, -1.6025578f, 0.0394025f, -0.3051167f, 1.9442217f, 0.1599094f, 0.1376955f, 2.4181051f, -0.0226484f, -0.1801709f, -0.4861264f, -0.0268545f, 0.5463807f, 0.2420150f, -0.1238829f, 0.2916382f, 0.1507791f, 0.7952659f, 0.2736979f, 3.2790639f, 1.2062043f, -0.0884467f },\n", + "{ -0.0469924f, 0.2013927f, 0.0307775f, -0.1241788f, -0.0100412f, 0.0422375f, 0.0211071f, -0.0359304f, 0.0451861f, 0.0291862f, -0.2094866f, -0.0013007f, 0.1191471f, 0.0750159f, 0.0184378f, 0.0419437f, -0.0207304f, -0.0444109f, 0.0013400f, -0.0699210f, -0.0668742f, -0.0880825f, -0.0107244f, 0.0363424f, 0.1391699f, -0.0112885f, -0.0060098f, -0.0073863f, -0.0566143f, -0.0224207f, 0.0103718f, -0.0015193f },\n", + "{ 0.4520382f, 0.1227609f, -1.3887709f, -0.0542129f, -3.2003114f, -0.8354173f, -1.3173198f, 0.3292131f, -0.1657729f, -0.1982902f, 0.1599589f, -0.0417666f, -0.1461042f, -1.3237997f, -5.3609071f, -0.0981676f, 0.2922535f, -1.8692241f, -0.0345302f, 0.1810613f, 0.4473544f, -0.0159401f, -0.7293931f, -1.4816793f, -0.1431545f, -0.0955672f, -0.2370718f, -0.7204540f, 0.8451244f, -3.4310548f, -1.3518151f, 0.1551731f },\n", + "{ 0.2670300f, 0.1343590f, 3.0347505f, -0.1783503f, 2.1586559f, 2.4137778f, 2.0080864f, -0.2545274f, -0.1985905f, 0.1653812f, -0.1714860f, 4.1022782f, -0.1045471f, 4.4776497f, 3.3737848f, -0.0849546f, -6.1899095f, 3.6970129f, 0.0007382f, 0.1675882f, 0.6014717f, -0.0287709f, 0.0495882f, 2.2192705f, -0.1043157f, -4.7508621f, -0.0022774f, 0.3766513f, -0.7505829f, 1.9759512f, 1.6747239f, -0.1004091f },\n", + "{ 0.6639504f, -0.0384022f, -10.0415087f, -0.0032648f, 0.3049855f, -2.0427964f, -1.1522077f, 0.0935732f, 0.1232134f, 0.0868663f, -0.0230848f, -1.8257296f, -0.0799238f, 6.8892417f, -1.3941933f, 0.0445172f, 0.9485117f, -2.5238073f, -0.0148513f, 0.2256772f, 0.5914315f, -0.1278037f, 0.1609928f, 11.3438406f, -0.0831544f, 0.1928522f, 0.0361467f, 0.0137040f, 4.9549832f, 2.3954937f, 0.3917757f, 0.1206975f },\n", + "{ 29.6590214f, -0.0836848f, -1.3028307f, -0.1391431f, -0.3703596f, 5.3762760f, 1.8429571f, 21.0697041f, -0.1232606f, 0.0066067f, -0.0308768f, -0.9960231f, 0.1865301f, -1.2142091f, 0.9273136f, 0.0974103f, 1.4067870f, 0.7268439f, 0.0035755f, 0.0619486f, -32.8901024f, -0.1950644f, -0.3978897f, -3.1790049f, -0.1371673f, 0.1569460f, 0.0268667f, -0.4512640f, 0.3055371f, -0.2241473f, -0.6455348f, 0.1178979f },\n", + "{ -2.9178317f, -0.2023720f, -0.2946439f, -0.1851392f, -0.3493766f, -1.5397958f, -1.5902523f, 1.0981250f, -0.1796725f, -0.0540953f, 0.0926500f, 2.0021629f, -0.1277778f, 3.3643394f, -7.5327554f, -0.0084912f, 2.7298651f, 0.2535582f, 0.0474618f, -0.1377846f, -2.2746830f, -0.2016302f, -0.7150622f, 4.4011140f, -0.1688751f, -1.2160714f, -0.0055839f, -1.1319760f, -2.2543004f, 0.6365916f, -1.4942099f, -0.0992425f },\n", + "{ -5.9751196f, -0.1597221f, -3.8946304f, 0.0537821f, 0.4741110f, 3.6895070f, 2.5116272f, 1.7058172f, -0.0860321f, -0.1519644f, 0.1465356f, 1.4165760f, -0.0984433f, 1.6990343f, 4.0953226f, 0.1742475f, -3.2570388f, 3.1653547f, 0.0135764f, 0.0092055f, -5.0966530f, -0.0542810f, 0.4907863f, 0.5900084f, -0.1736992f, -4.9153452f, 0.2017547f, 0.2854181f, 3.1490057f, 0.2885774f, 0.9775900f, -0.2207156f },\n", + "{ 0.3805595f, 0.0308984f, -9.5846119f, -0.0547350f, 1.9641919f, 2.0823991f, 9.9298115f, 0.0344243f, -0.1557834f, -0.1847700f, -0.1195207f, 4.4698248f, 0.1492174f, 0.4272707f, 4.7265644f, 0.0200772f, -14.3444443f, 4.9532328f, 0.0319610f, -0.0645846f, -0.6238102f, 0.1038110f, 0.2483765f, -5.1799927f, 0.0782294f, 16.8777409f, 0.0196593f, 0.8423936f, -8.5921221f, -0.0184179f, -5.7857180f, -0.0551181f },\n", + "{ 17.1570740f, 0.0265437f, -1.4766232f, -0.0528512f, 1.0128449f, 3.1529653f, -0.6560294f, 8.7189465f, -0.1728377f, 0.1245629f, 0.1072764f, 0.2649773f, 0.0254132f, -0.8094708f, 1.8371828f, 0.1586192f, 1.9410020f, 0.9662392f, -0.0839922f, -0.2894930f, -16.5091496f, -0.1079556f, -0.1204132f, -0.9694697f, 0.0537786f, 0.2476868f, 0.0076408f, 0.1025890f, 0.1267423f, 0.4956081f, 0.1457323f, 0.1342634f },\n", + "{ -0.5389574f, 0.1333421f, -4.6338782f, -0.0645123f, -0.6526322f, -3.2958410f, -1.2309581f, -1.0803053f, -0.1170542f, -0.0169311f, 0.1147491f, 2.9890807f, -0.1234096f, 0.6792320f, -3.9311285f, -0.0678321f, -2.7922039f, 4.9413238f, 0.1060735f, -0.1114068f, -2.2443752f, -0.1649915f, -0.3656403f, 2.5320942f, -0.0249616f, -4.5098810f, -0.1773834f, -1.9516623f, -1.6839710f, -0.1365123f, 1.0296160f, -0.0419825f },\n", + "{ -2.4413636f, 0.1075683f, -1.4518708f, 0.0537449f, 0.1154493f, -0.5463845f, 1.3964951f, 2.6729572f, -0.0206257f, 0.1435281f, -0.1819518f, 0.4540120f, -0.1910136f, 1.7696143f, 2.3670278f, 0.1324464f, -0.5837788f, -2.2784615f, 0.0345478f, -0.0980538f, -0.4999657f, 0.1178097f, 0.5756868f, -0.1058674f, 0.1920418f, -3.5473657f, 0.2146371f, 0.2557987f, 1.3935618f, 0.3242345f, 0.2029733f, -0.1844350f },\n", + "{ -0.9069599f, -0.2032758f, -0.5786582f, 0.1395915f, 3.9338124f, -1.6806563f, 0.4269728f, -0.3697720f, -0.0306356f, -0.0341866f, -0.0635755f, 1.8898975f, 0.1968578f, -17.2182655f, 1.4839698f, -0.0541308f, 15.9838457f, 18.5951862f, 0.0078872f, -0.1186571f, -2.4982276f, 0.0033835f, 0.3749593f, -15.0238085f, 0.0595601f, -16.8588371f, 0.1146287f, 0.1274172f, 19.3332062f, -7.0513921f, -5.4852023f, 0.1681230f },\n", + "{ -5.1457887f, 0.0335570f, 1.8620163f, 0.0560381f, -0.6397949f, -4.0867515f, 1.3578068f, -23.9992580f, -0.1034287f, 0.1437906f, 0.1076568f, -0.6930848f, -0.1176134f, 2.2855785f, -0.8021089f, 0.0424611f, -0.6139123f, -3.1381547f, 0.0188163f, -0.1728741f, 0.6676420f, -0.1124282f, 0.1077818f, 2.3839712f, 0.1340676f, 1.3538554f, 0.0421035f, 0.4513423f, -0.1543196f, 0.5120541f, -0.8940096f, -0.1175765f },\n", + "{ 2.1656792f, 0.1638565f, 4.5302448f, 0.0741160f, 3.3850696f, -4.8867540f, 2.8059542f, -0.0023008f, -0.1248942f, -0.0075225f, -0.0082212f, -1.0955724f, -0.1462416f, -1.7098176f, -4.1775723f, 0.1950609f, 3.6847639f, 1.6520064f, 0.0310502f, -0.0430167f, 3.4527576f, 0.1453262f, -1.0126116f, 1.8785841f, -0.0615105f, 1.0451943f, -0.2653875f, -1.2223006f, -1.0100641f, 1.2076828f, 0.4882897f, -0.0618375f },\n", + "{ 2.4578559f, -0.1464199f, -1.3086185f, 0.1208716f, -0.2079897f, -2.7138259f, -1.4107026f, -0.4483974f, -0.1599056f, 0.0242936f, 0.1326804f, 0.8664415f, 0.0588684f, 0.7366717f, 2.3159802f, -0.1917707f, -2.0800066f, -7.5100355f, 0.0585225f, 0.1582773f, 1.8128076f, -0.0756957f, 0.8521049f, 0.5539182f, -0.1738797f, -0.2020151f, 0.2219591f, 0.1088298f, -1.9535940f, 2.4130275f, -0.0741222f, 0.1156681f },\n", + "{ -0.4152933f, -0.0679605f, -0.5760314f, -0.0201883f, -14.1784763f, 0.7755737f, -19.5469246f, 0.0381304f, 0.0160074f, 0.1124380f, -0.0478151f, -2.3719466f, 0.0819727f, -12.5069208f, 2.0468810f, 0.0964909f, 7.8784809f, -6.3555703f, -0.0429914f, -0.0162720f, -0.9493829f, 0.0296786f, -0.0244959f, -12.6325788f, -0.1871653f, -9.8338795f, 0.0391840f, -0.1199073f, -11.7859421f, 8.7398720f, 19.4971046f, -0.1954873f },\n", + "{ -4.8962007f, -0.1695992f, 0.7760146f, -0.0199836f, -0.0576061f, -6.0196476f, -2.3023551f, -20.0125084f, -0.1957836f, -0.0993785f, 0.1109372f, -0.0710161f, -0.0553650f, 0.2546394f, -1.7578228f, 0.1498791f, -2.6269529f, 1.3973731f, 0.0464059f, -0.2307575f, 1.6730053f, -0.0038867f, 0.1040150f, 2.6721606f, 0.2027777f, -1.2358316f, -0.0587254f, 0.0610504f, -0.1700777f, -0.4323797f, 1.0359807f, -0.0127435f },\n", + "{ 1.1245984f, -0.1806923f, -1.5868790f, 0.1536594f, 1.6837788f, -1.6474472f, -3.9225550f, 0.4506312f, 0.1854908f, -0.1023232f, -0.0306957f, -0.8615071f, 0.0945480f, 2.0585704f, 0.6044773f, 0.1269336f, 2.4720187f, -4.5123949f, -0.0657749f, 0.1738364f, 2.4188614f, 0.0038840f, -0.2019601f, -0.3842189f, -0.0493631f, 3.6777370f, -0.1003436f, 0.6174496f, 1.0476112f, 2.7601521f, 0.9059890f, -0.1691816f },\n", + "{ 1.9658293f, 0.2083382f, 1.7833723f, 0.0662620f, -0.3932888f, -1.0642430f, 0.1807114f, -1.1486723f, -0.0177136f, -0.1706942f, 0.1730027f, 0.6712329f, 0.0485299f, 0.6379296f, -0.2880911f, -0.1993632f, -0.9471832f, 1.9425983f, 0.0328524f, 0.0777725f, 0.6454380f, 0.0143852f, 0.0192997f, 1.6793132f, -0.1872064f, -1.5757623f, 0.0242778f, -0.5992475f, 2.2148299f, -3.5215647f, -2.9748621f, 0.0112703f },\n", + "{ 0.3737165f, 0.0361593f, -0.1075856f, -0.0312021f, -0.0786010f, 1.3149793f, 0.0237401f, -0.0819654f, -0.1388431f, -0.0306386f, -0.0704427f, -2.3997226f, -0.1392045f, 0.7729424f, 0.1253861f, -0.0819755f, -0.7590774f, -0.3295609f, -0.0172208f, -0.0551179f, 0.4599459f, -0.1143881f, 2.7430685f, 0.3621114f, -0.1475701f, 0.2296079f, -2.2224922f, -0.9080986f, 0.2101683f, 0.1190262f, -2.2205217f, -0.0811555f },\n", + "{ 0.3946800f, -0.1204188f, 0.0543225f, -0.0392627f, 1.9454094f, 0.1865290f, 1.5276426f, -0.0342965f, 0.0117116f, -0.1873923f, -0.1045035f, 1.8535231f, -0.0207077f, 0.0981549f, -0.0327459f, -0.1486938f, 0.6359531f, -0.1314566f, -2.1469448f, -0.1665767f, 0.5134121f, -0.0341647f, -2.1786075f, -0.5976576f, 0.0111857f, 0.3272055f, 2.1917374f, -1.6247722f, 1.6025572f, -1.9965295f, 0.3347488f, 0.1113990f },\n", + "{ 0.0340557f, -0.1659652f, -0.0042457f, 0.0010229f, -2.1550148f, -0.4728722f, -1.3667214f, 0.2625635f, -0.0302200f, -0.0322885f, 0.0227866f, 0.6977839f, 0.0050141f, -1.6183628f, 0.0869662f, -0.0775411f, 0.4754244f, 0.4596581f, 2.1509945f, -0.0313832f, 0.0336208f, -0.1547154f, -0.6017126f, 0.0369996f, -0.1102583f, -0.5788267f, 0.0017006f, 2.6352038f, -1.7847317f, 1.7510574f, 2.1478791f, -0.2251654f },\n", + "};\n", + "\n", + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_layer2[32] = {\n", + "-0.2689391f, 1.5461178f, -0.2424639f, 0.4424149f, -0.0411816f, -4.1070848f, 1.4709516f, -0.2439820f, -0.1750926f, 2.8802166f, -0.1573734f, -1.3724055f, 0.3671952f, 1.8267332f, 1.5655776f, -0.7323843f, 1.6318209f, 2.2198663f, -1.5951139f, -0.0870247f, 0.2806863f, -0.2407108f, 0.1310665f, -0.5246177f, 0.1914421f, -0.3386542f, -0.6310596f, 3.2995102f, 0.7519229f, -0.1565450f, -0.1496341f, 1.0073272f };\n", + "\n", + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_layer2[32][32] = {\n", + "{ -0.1731049f, 1.7775618f, -0.2532010f, -0.2902778f, -0.1392802f, 4.2428946f, -0.1866968f, -0.1800365f, -0.0634398f, 0.0763313f, 0.0472901f, -0.8030146f, 0.3161853f, -1.0713238f, -4.6514492f, -0.3908085f, 1.1607268f, 0.8834935f, -0.1194544f, -0.0785166f, 0.4967587f, -0.0558136f, -0.9601135f, -0.1001592f, 3.4427991f, -0.2144053f, -0.3632556f, 0.0117088f, 0.1742481f, -0.2540179f, -0.1705156f, -0.2627344f },\n", + "{ -0.1478276f, -0.1659575f, 0.1602777f, -0.0758106f, 0.1067696f, -0.0247068f, -0.1123443f, -0.1724832f, -0.0013103f, -0.0685904f, 0.1537329f, 0.1042632f, -0.0360880f, -0.0679077f, 0.0672719f, 0.1597116f, -0.0150259f, 0.0367102f, -0.0545881f, -0.0693004f, -0.1008447f, -0.0672846f, -0.1395939f, -0.0324785f, -0.1051702f, -0.0530534f, -0.1019061f, -0.0921245f, 0.1195077f, 0.0453448f, 0.0257045f, -0.0622537f },\n", + "{ -0.0363173f, -0.1990481f, -0.0452148f, 0.4074381f, -0.0731660f, -0.0823270f, 0.3154473f, -0.1909118f, -0.0165690f, 0.1325824f, -0.0760181f, 0.7768906f, -0.2702211f, -0.6023573f, 1.5904741f, 0.2384946f, 0.7610655f, -2.8705251f, 0.5754877f, -0.1587478f, -0.5708794f, -0.3421216f, 0.5023443f, 1.2806857f, 0.2158970f, -0.1364033f, -0.3398291f, 0.9066412f, -1.2935438f, 0.0273695f, -0.1850613f, -0.9301611f },\n", + "{ -0.1281746f, 0.1695392f, 0.0805936f, -0.0598281f, 0.1266985f, -0.1697189f, -0.1091505f, -0.1569477f, 0.0363969f, -0.0628394f, 0.0107523f, 0.0659535f, -0.0568244f, -0.1299786f, 0.0005438f, -0.0806242f, -0.0806848f, -0.0919798f, -0.0748445f, 0.0792912f, 0.0022868f, 0.0211520f, -0.0183716f, 0.1279848f, -0.1518286f, -0.0113527f, 0.0824359f, -0.0178597f, 0.0272009f, 0.0288935f, 0.0123459f, 0.1685353f },\n", + "{ 0.1099675f, -0.3914332f, -0.0647218f, -0.8259028f, -0.0283726f, -0.0860217f, -2.0489185f, 0.1042144f, 0.1024824f, 0.0735443f, -0.1235109f, -3.3674469f, -0.1799957f, -7.1867313f, 1.6053666f, -0.5203959f, 0.8686391f, -0.0675404f, -2.8893898f, -0.0796400f, 1.2672142f, -0.0371844f, -1.8065344f, -2.2551982f, 0.0355568f, 0.0672171f, 0.7150316f, 1.3620002f, -0.4106106f, 0.0126076f, 0.0408083f, 1.5958146f },\n", + "{ 0.0525989f, 1.8947815f, -0.2513640f, -0.3715420f, -0.1752283f, 1.3911799f, -0.7633898f, -0.1716654f, -0.0145629f, -1.7601604f, -0.1943324f, -0.5716376f, -0.8281464f, -0.0308049f, -1.4709659f, -0.4294116f, -0.1030817f, -0.1823493f, 0.7561242f, -0.1608112f, 0.3980689f, -0.2464017f, -1.3065518f, 0.0875702f, -0.1504322f, -0.0352198f, -0.4051513f, 0.7010455f, -0.2363433f, -0.1118084f, -0.1329087f, -0.3257700f },\n", + "{ -0.1209070f, 0.1677164f, -0.1353413f, -0.0410048f, -0.1432644f, 0.2649301f, 0.2247741f, -0.0425357f, -0.2644008f, 1.4204332f, -0.2540753f, 0.2481354f, 1.9494507f, -0.2003033f, -0.5938342f, -0.3314930f, 1.5038266f, -2.4000788f, -1.6202501f, -0.0256936f, -0.2890913f, -0.2113032f, 0.9030544f, 1.1483711f, 0.0545346f, -0.1961582f, -0.2267976f, 0.2372836f, 2.5995049f, -0.1469661f, -0.1017130f, 1.6176132f },\n", + "{ 0.0542207f, 2.7658713f, -0.1700335f, -0.3357265f, -0.1097085f, 1.6508883f, 0.0132292f, 0.1211861f, -0.0852982f, 0.9232512f, 0.0202751f, 0.3138782f, 0.2674713f, 0.1247260f, 0.3859081f, 0.3961721f, 1.0556988f, 0.8574673f, -0.1462571f, -0.1600272f, 0.4117427f, -0.1561815f, 0.0553897f, -0.2753994f, 5.8420453f, 0.0883128f, 0.3594444f, -0.7174141f, 0.5683901f, 0.0096710f, -0.0957449f, -0.0195320f },\n", + "{ 0.1561092f, -0.0417566f, -0.1044470f, 0.1186895f, -0.1195878f, 0.0446987f, -0.1386125f, -0.0103878f, 0.1173026f, 0.1349312f, -0.0676422f, -0.1452308f, 0.0093872f, 0.0069650f, 0.1739093f, -0.1592752f, -0.1329019f, -0.0459163f, -0.1511888f, -0.0040456f, 0.0065862f, 0.0106182f, 0.0318060f, 0.1003269f, 0.0249398f, 0.1661194f, -0.0286407f, -0.1062361f, 0.0026465f, -0.0091479f, -0.1493473f, 0.0519762f },\n", + "{ -0.0702637f, 0.1154817f, -0.0680643f, 0.1447217f, 0.1394082f, -0.0691432f, 0.0939426f, 0.0483852f, 0.1437123f, -0.1085759f, 0.0333924f, -0.0683726f, 0.0707103f, -0.0723069f, 0.0124601f, -0.0309495f, -0.0308395f, -0.0695953f, -0.1078720f, 0.0858701f, -0.0773453f, 0.0477413f, 0.0615588f, 0.1656474f, 0.1718751f, -0.1125762f, 0.1753366f, -0.0557704f, 0.0921221f, 0.0372290f, -0.1084552f, -0.0438967f },\n", + "{ -0.0557757f, 0.0694144f, 0.1150911f, -0.0202319f, 0.0661389f, -0.0928373f, 0.0441888f, -0.0028318f, -0.0039446f, 0.0294675f, 0.1353384f, 0.0427515f, 0.0695194f, 0.1329748f, 0.1339706f, 0.0713900f, -0.1384726f, 0.0925476f, 0.1581103f, 0.0100842f, -0.1248652f, -0.0173615f, 0.1637451f, -0.0025173f, -0.0331219f, -0.0335269f, 0.0949441f, 0.0538645f, 0.0834281f, 0.0137191f, -0.1360130f, 0.0074489f },\n", + "{ -0.0949665f, -0.2181539f, 0.0871969f, 3.0772011f, -0.1152011f, -0.0022047f, 1.2700632f, -0.1173392f, -0.1678371f, -1.3448639f, -0.2893313f, 1.5105180f, -0.6029126f, -1.1568675f, 1.4823192f, 0.1635401f, -2.2136483f, -1.4164798f, -0.4795305f, -0.0807557f, -1.6675406f, -0.0992591f, 2.1212378f, -0.9400231f, -0.5339298f, -0.0342672f, -2.3564072f, 1.3407421f, -3.8635128f, -0.1171367f, -0.0364181f, -3.2491686f },\n", + "{ -0.1047117f, -0.0540412f, -0.1137928f, 0.1582367f, -0.0982449f, 0.0511854f, -0.0805884f, -0.1141258f, 0.0931992f, -0.0227052f, 0.0780590f, -0.1288135f, -0.1186576f, -0.0754066f, -0.1234059f, -0.0091936f, 0.0205475f, 0.1640417f, -0.1527465f, 0.0068472f, -0.1239804f, -0.0448335f, -0.0061169f, -0.0078998f, 0.0253047f, 0.0712901f, 0.0024753f, -0.0259875f, -0.1238613f, 0.1096537f, -0.0953007f, 0.1385384f },\n", + "{ 0.0521762f, 1.4885306f, -0.1298001f, 2.3033395f, -0.1589162f, -0.8458843f, 0.0631668f, -0.1424429f, -0.0384785f, 0.5599840f, 0.0008631f, -1.5839294f, 1.9202064f, 0.6930331f, 0.4948464f, -0.6195241f, -3.0526664f, 3.1423819f, -1.3433597f, -0.1167206f, -1.3491610f, -0.0901343f, -1.2291449f, 3.5039587f, 0.4674770f, -0.3027362f, 0.8279622f, 0.3417586f, 0.1367343f, -0.1085793f, -0.1048759f, 1.2729272f },\n", + "{ -0.0029521f, 0.2439991f, -0.0858953f, -2.7804739f, -0.0220416f, 0.0256599f, -0.3304259f, -0.0586597f, -0.0459698f, 0.1670698f, -0.1359344f, -0.3957845f, -1.6954739f, 0.3318155f, 0.9375985f, 0.5211958f, 0.6071047f, -3.4249072f, 1.3199407f, 0.0136374f, 1.2692807f, 0.0233104f, -0.0731508f, 2.2171400f, -0.6052189f, -0.0698463f, 1.6376522f, -1.1908000f, -0.1706121f, -0.0380146f, 0.0144418f, 1.5177792f },\n", + "{ -0.0314772f, 0.0523589f, -0.0517322f, -0.0100344f, 0.0714635f, -0.1646974f, 0.0800682f, 0.1132821f, -0.0028872f, -0.1239987f, -0.1322138f, -0.1059789f, 0.1752418f, 0.0475279f, -0.0046871f, 0.1574167f, -0.0231106f, -0.0261228f, 0.0236005f, 0.1663371f, 0.1059707f, 0.1229704f, 0.1427562f, -0.1648343f, 0.0992667f, -0.0631751f, -0.1411413f, -0.0999486f, -0.0972435f, -0.1422556f, 0.0973614f, -0.0156000f },\n", + "{ -0.1309903f, -0.5060971f, -0.1911870f, 2.2349114f, 0.1010354f, 0.5538697f, 1.8757060f, -0.1538645f, -0.2073075f, -1.8350753f, 0.0532570f, 1.8151909f, -0.6800886f, 0.2615838f, -0.6204563f, -0.1238837f, -0.4772464f, -2.4070835f, -0.2783994f, -0.0211087f, -4.4925098f, -0.0790045f, 1.3566529f, -0.3650998f, -0.4658130f, -0.0479139f, -1.9361999f, 2.1485121f, -3.1108823f, -0.0020647f, -0.0489678f, -0.4781263f },\n", + "{ -0.0099352f, -1.9572417f, 0.0918592f, 0.7327217f, -0.0609625f, -0.1969659f, 0.1922992f, -0.1091586f, -0.2125459f, -1.9542989f, -0.1648019f, -0.9355955f, 0.9144324f, -5.0530005f, -0.2265045f, -0.5638458f, 4.4370432f, -2.0318019f, -1.5679311f, 0.0221776f, -0.4063498f, -0.1160609f, 0.9651156f, -0.2401051f, 0.1903293f, -0.2355373f, 0.2334733f, 0.1025979f, 0.7150746f, 0.0315593f, -0.0001765f, 0.0137871f },\n", + "{ 0.0320691f, -1.8876421f, -0.1241799f, -3.1652985f, -0.1528286f, 2.1882250f, -2.5907574f, 0.0210803f, -0.1545521f, 0.7706368f, -0.1652040f, -4.1518817f, 4.2974262f, 0.3074523f, 3.3711803f, -37.9055862f, 1.0623894f, 0.4360786f, -2.6417589f, 0.1113010f, 3.8902094f, -0.1616735f, 0.5595753f, 1.5364015f, -2.4740698f, -0.0240434f, -28.0232792f, 0.6092473f, 1.6978041f, -0.0458809f, 0.0664777f, 0.2603019f },\n", + "{ 0.1044999f, 0.0054908f, 0.1407564f, -0.1701076f, -0.1274551f, 0.0443607f, 0.1182709f, -0.1103420f, -0.1343671f, -0.0042888f, -0.1611361f, 0.0154269f, 0.2285106f, 0.0870507f, 0.0914433f, 0.0657276f, -0.1664300f, -0.0342912f, 0.1037545f, -0.1175308f, 0.1135652f, 0.1325845f, -0.1459545f, -0.2156865f, -0.1673723f, -0.1156510f, 0.0179541f, 0.0541515f, 0.0957617f, -0.1297485f, 0.1045326f, 0.2950188f },\n", + "{ -0.1401742f, -2.8181052f, -0.0588381f, -0.1517100f, -0.0608850f, -3.5837226f, -0.1528927f, -0.0211265f, 0.0881796f, -0.4448619f, -0.1457623f, -0.8828475f, 0.1261238f, -1.0495204f, -3.7918513f, -0.4645159f, -0.0800092f, 0.0624971f, 0.1528609f, -0.1069645f, 0.4319421f, 0.0651448f, -0.6571375f, -0.0323338f, -4.6534319f, -0.0538999f, -0.2221518f, 0.0972160f, 0.1496329f, 0.0570569f, -0.1125795f, -0.0153687f },\n", + "{ -0.1065502f, 0.0606179f, -0.1400291f, -0.0220975f, -0.0613350f, -0.0038843f, -0.0132201f, 0.1678067f, 0.1008587f, -0.1255144f, -0.0675021f, -0.0475353f, 0.0278098f, 0.0527470f, -0.0089845f, -0.0622052f, 0.1088723f, 0.0053812f, 0.0627310f, -0.0226460f, -0.1096366f, -0.0505830f, -0.0301058f, -0.0775778f, -0.0008928f, -0.1157909f, 0.0544982f, 0.0430219f, -0.0134386f, -0.1095094f, 0.1215172f, 0.0081556f },\n", + "{ -0.1747307f, -0.7465636f, -0.0497346f, -2.0686443f, 0.0190713f, -2.9156351f, -5.4731860f, -0.0728399f, -0.0845178f, -14.8429976f, -0.1068359f, 1.8549156f, -3.1135283f, -0.0907917f, -0.0262453f, -8.8010912f, -4.3007965f, -1.6772208f, -0.2576891f, -0.0163111f, -7.8583646f, 0.0697906f, -0.0943863f, -0.7450574f, 1.1493169f, 0.0921000f, -0.2395420f, 0.5794312f, -4.2405462f, -0.0910322f, -0.1381017f, -1.0270567f },\n", + "{ -0.0446755f, -0.8131990f, -0.1741483f, -1.7555307f, 0.0153283f, 0.0734032f, -0.5930048f, -0.0398877f, -0.0215982f, 0.0497884f, -0.0504920f, 0.0942539f, -1.1370168f, -0.8821361f, -0.0879569f, 0.3811991f, 1.2224945f, 0.3782545f, 1.4800016f, 0.0494110f, 1.7101970f, -0.2885793f, -0.1778114f, -1.3913733f, -0.0944610f, -0.3578439f, 0.3491475f, -3.0349872f, 0.8044587f, 0.0928676f, -0.0395946f, 0.2008810f },\n", + "{ 0.0721043f, -0.1181163f, 0.0108281f, -0.1215726f, 0.1285277f, 0.0851443f, 0.0791321f, 0.1765833f, -0.0324889f, -0.0150838f, -0.0051942f, 0.1685798f, 0.1521861f, 0.0283858f, 0.0326072f, 0.0346215f, -0.1081120f, -0.0745824f, -0.1762613f, 0.0901582f, 0.1335704f, 0.1599123f, -0.0097813f, 0.0364541f, -0.0391450f, -0.0079635f, 0.1014886f, 0.0130333f, 0.0438304f, -0.0074333f, 0.0845035f, -0.0471010f },\n", + "{ 0.0360538f, -0.9701002f, -0.2217611f, -1.1626705f, 0.0548465f, 0.6605385f, -0.6693703f, -0.1432099f, -0.0754442f, -0.2380328f, -0.0754142f, -2.3242903f, 3.5773275f, 0.0707042f, 0.2052065f, -1.3753067f, -0.8530636f, 3.1850073f, -0.2901604f, -0.1291050f, -4.4672642f, -0.2425279f, 0.1252670f, 0.4261391f, -0.8620862f, 0.1153403f, -0.1999598f, -4.7756801f, 2.8851914f, -0.1340472f, 0.0482952f, 1.7996837f },\n", + "{ -0.1654812f, 0.9604513f, 0.1770310f, -16.5736618f, -0.0350192f, -0.5557595f, -35.3047371f, -0.1299658f, 0.0065243f, -3.0823336f, 0.0351931f, 4.9456911f, -1.4382623f, -1.6900688f, -1.9084880f, -3.1811504f, -8.0212736f, -7.3994560f, 4.9219728f, 0.0433824f, 0.6197430f, 0.0308996f, 5.2004323f, 0.5327767f, 1.0885966f, 0.1487215f, -21.4211712f, -1.8733859f, 1.9195696f, -0.0539309f, -0.0795544f, -3.1121061f },\n", + "{ -0.0058153f, 1.7521383f, -0.2205407f, 2.6318321f, -0.0038140f, -1.4131194f, 3.0181022f, 0.0373498f, -0.1246315f, -1.8323456f, -0.1470954f, 2.9131169f, 1.1522563f, 0.6036215f, -3.3962972f, 7.0906253f, -1.5353408f, -0.2648884f, 0.5501783f, -0.2262681f, -2.4874980f, -0.0533402f, 3.0222948f, 0.3296265f, 1.4057258f, 0.0185255f, 6.1208682f, 0.7210779f, -0.3055671f, -0.2595702f, -0.1286864f, 0.6510819f },\n", + "{ -0.2145578f, 0.4758183f, -0.1186396f, -0.6096930f, -0.1574199f, -0.1929667f, -0.6877209f, -0.2098342f, 0.0726678f, 0.1379885f, 0.0710437f, -1.1860796f, 0.6582619f, 0.2388466f, 0.0458675f, -0.0634391f, -0.1678368f, -8.2454395f, -0.6461441f, -0.2063597f, 0.0304686f, 0.0319904f, -1.0730971f, 1.1281222f, 0.1292592f, -0.3054110f, 0.7732272f, -1.0069786f, -0.0847367f, -0.2342585f, -0.1553642f, 1.5100089f },\n", + "{ -0.1022291f, 2.7367072f, -0.1738961f, -1.0328600f, -0.0864617f, -0.3224345f, -2.6092832f, -0.2382921f, 0.0578183f, 0.4115438f, 0.0121692f, -1.0689495f, 0.5158959f, 2.9600139f, 0.8839240f, -0.7147520f, -2.7168157f, 1.2148006f, 1.5884653f, -0.1227511f, 1.3176637f, -0.1335970f, -1.4691980f, 1.1131358f, -0.1302031f, 0.0779746f, 0.2622980f, 0.0837635f, 2.7756395f, -0.0315265f, 0.0868374f, -4.2980185f },\n", + "{ 0.0228074f, 2.1787968f, -0.1889012f, -0.8560471f, -0.1063542f, -0.2869910f, 0.2767612f, -0.1183861f, -0.0992468f, 2.1517978f, -0.0428540f, 1.0697522f, 1.9683092f, 2.1042306f, -0.0426359f, -0.3499008f, -0.9989156f, 0.0880459f, 2.9753070f, -0.1941337f, -3.1616704f, -0.0093505f, 1.4922180f, 2.8480091f, 0.2656264f, -0.1299839f, -1.0458518f, -1.6748481f, -3.1420829f, -0.1360553f, -0.1117443f, -1.3989290f },\n", + "{ -0.0246332f, 0.1165779f, 0.0255498f, -0.0601489f, 0.1545041f, -0.0977981f, 0.1242626f, -0.1533627f, -0.1294386f, -0.0231293f, -0.1460808f, 0.1763088f, 0.0953614f, -0.0716483f, -0.1003436f, 0.0804519f, 0.1373295f, -0.0686773f, 0.1198382f, 0.1519430f, 0.1640775f, -0.1675753f, 0.0790529f, -0.1521838f, 0.0378523f, 0.1039687f, -0.0701027f, 0.0509319f, 0.1355647f, 0.0978021f, 0.0391430f, 0.0241266f },\n", + "};\n", + "\n", + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_output_layer[1] = {\n", + "-0.7420582f };\n", + "\n", + "ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_output_layer[32][1] = {\n", + "{ 0.0381968f },\n", + "{ 1.0667214f },\n", + "{ 0.0505496f },\n", + "{ -1.5677565f },\n", + "{ 0.0066824f },\n", + "{ -0.9951485f },\n", + "{ 0.9438043f },\n", + "{ 0.0068631f },\n", + "{ -0.0216870f },\n", + "{ 0.6560486f },\n", + "{ -0.0235629f },\n", + "{ 0.9653404f },\n", + "{ 0.6641668f },\n", + "{ -0.5351945f },\n", + "{ -0.5303048f },\n", + "{ 1.9339687f },\n", + "{ 0.4359012f },\n", + "{ -0.7492802f },\n", + "{ -0.5728400f },\n", + "{ 0.0473893f },\n", + "{ -0.5091293f },\n", + "{ -0.1926489f },\n", + "{ -0.6562935f },\n", + "{ -0.5583456f },\n", + "{ -0.7618014f },\n", + "{ -0.0316967f },\n", + "{ 1.1637378f },\n", + "{ -0.5158406f },\n", + "{ -0.5268564f },\n", + "{ 0.0735416f },\n", + "{ 0.0270067f },\n", + "{ -0.5614370f },\n", + "};\n", + "\n" + ] + } + ], + "source": [ + "def print_formatted_weights_biases(weights, biases, layer_name):\n", + " # Print biases\n", + " print(f\"ALPAKA_STATIC_ACC_MEM_GLOBAL const float bias_{layer_name}[{len(biases)}] = {{\")\n", + " print(\", \".join(f\"{b:.7f}f\" for b in biases) + \" };\")\n", + " print()\n", + "\n", + " # Print weights\n", + " print(f\"ALPAKA_STATIC_ACC_MEM_GLOBAL const float wgtT_{layer_name}[{len(weights[0])}][{len(weights)}] = {{\")\n", + " for row in weights.T:\n", + " formatted_row = \", \".join(f\"{w:.7f}f\" for w in row)\n", + " print(f\"{{ {formatted_row} }},\")\n", + " print(\"};\")\n", + " print()\n", + "\n", + "def print_model_weights_biases(model):\n", + " # Make sure the model is in evaluation mode\n", + " model.eval()\n", + "\n", + " # Iterate through all named modules in the model\n", + " for name, module in model.named_modules():\n", + " # Check if the module is a linear layer\n", + " if isinstance(module, nn.Linear):\n", + " # Get weights and biases\n", + " weights = module.weight.data.cpu().numpy()\n", + " biases = module.bias.data.cpu().numpy()\n", + "\n", + " # Print formatted weights and biases\n", + " print_formatted_weights_biases(weights, biases, name.replace('.', '_'))\n", + "\n", + "print_model_weights_biases(model)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Ensure input_features_tensor is moved to the appropriate device\n", + "input_features_tensor = input_features_tensor.to(device)\n", + "\n", + "# Make predictions\n", + "with torch.no_grad():\n", + " model.eval()\n", + " outputs = model(input_features_tensor)\n", + " predictions = outputs.squeeze().cpu().numpy()\n", + "\n", + "full_tracks = (np.concatenate(branches['t5_isFake']) == 0) * (np.concatenate(branches['t5_pMatched']) > 0.95)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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wgsvUL9+fZycnPDy8qJDhw788MMP113HkurVq8eRI0fYunVrqW4veXl5PP/887Rp0wZ3d3e8vLzo2rUrK1eutKnc119/HQB/f3+rbkdms5nZs2fTpEkTHB0d8fPzY+TIkVy4cMGqjF69etGiRQu2bdtGt27d0Ol0jB07ttznVKls+4q9ePEiu3fvZsSIEWg0Gkt6t27diIyMtLqzvmLFCoQQjBkzxqqMMWPGkJuby9q1a4HC18rR0RGtVgtg+Szl5eUB8N5771FQUMArr7xiUx2vNHbsWP79919OnDhhSdu4cSPnz58vVTcobH198sknadasGS4uLvj5+dGnTx/++usvS55z587h6+sLwPTp0y3v/+jRoy15jh8/zoMPPoi/vz+Ojo6EhYUxcuTIUq1LmZmZTJgwAR8fH7y9vRk2bBixsbGl6rV06VK6du2KXq/HxcWFAQMG8N9//5XKt3jxYho3boyjoyNNmzbl//7v/675NSvLuXPnUBSF2bNnM2PGDOrXr4+joyObN2++pvPdbDbz8ccfW76fPDw86NKlC7/99ttVn3/+/PloNBqmTp1qSVuwYAGtW7fGxcUFV1dXmjRpwquvvlrhsSxYsICAgAD69etnlV78ufnrr7/o0qULzs7OBAcH88Ybb1ha8mx57221fPlyXFxcuPfee63Sx4wZQ2xsLDt37ix339GjR/Ppp58CWHW7OnfuHFD4+XnllVeoX78+Dg4OBAcHM3HiRNLS0q65nlfj4ODA/fffz8KFC23ucilJdUYNB0dSNarork1WVpZQq9Wib9++lrTilpOkpCTx3HPPCY1GI06cOGHZXl7LycSJE0VcXJzQ6XRixIgRNtehWPEd7gcffFBs2bJF5OTklJv3yy+/FIqiiF69eonvv/9ebNy4UcyfP188+eSTljzfffedAET//v3FihUrxNKlS0X79u2Fg4OD+Ouvv0odb3h4uHj55ZfFhg0bxIoVK4QQhXemtVqteP7558XatWvF999/L5o0aSL8/f2tWpuuZDAYhJ+fn3j44YdLbevUqZNo166d5XHjxo1Fw4YNxbfffiu2bt0qfvnlF/H888+LzZs3X/X1uprIyEgRGBgojEaj2LhxowDEtGnTSuUDRGhoqGjWrJn44YcfxG+//SYGDhxYqrVj/PjxQqfTiblz54rNmzeLVatWiXfffVd8/PHHV61HccvJ0qVLhcFgKPVTbN++faJBgwaibdu2Yvv27WL79u1i3759Qggh0tLSxOjRo8W3334r/vzzT7F27VrxwgsvCJVKJb755purPv++ffvEuHHjLHd2t2/fLmJiYoQQQjz++OMCEE899ZRYu3at+Oyzz4Svr68IDQ0VSUlJljJ69uwpvLy8RGhoqPj444/F5s2bxdatWyt+E8TVW07Wrl0rAPHHH3+U2jZ8+HARGBhoefzAAw8IX1/fUvmysrIEIF555RUhhBDR0dFCq9WK+fPni9TUVPHyyy8Lb29vkZOTI06dOiV0Op3NdS+puOWkuJXkpZdesmy7//77xa233lrmHfDjx4+LCRMmiB9//FFs2bJFrFq1SowbN06oVCrL+Z2Xl2d5LcaNG2d5/0+dOiWEEGL//v3CxcVF1KtXT3z22Wdi06ZNYsmSJeK+++6ztLIWf8c0aNBAPP3002LdunXiyy+/FJ6enqJ3795Wx/L2228LRVHE2LFjxapVq8Svv/4qunbtKvR6vThy5IglX3GZd999t/j999/FkiVLRMOGDUVoaOgNt5ycPXtWACI4OFj07t1bLFu2TKxfv16cPXv2ms73ESNGCEVRxKOPPipWrlwp1qxZI95++23x4YcfWvKU/L42m83i+eefF1qt1uqc/OGHHwQgnn76abF+/XqxceNG8dlnn4lnnnmmwmNr0KCBuO+++0ql9+zZU3h7e4ugoCDx0UcfiXXr1olnnnnG6rWo6L0vfu1saVHt0qWL6NixY6n0w4cPC0B8/vnn5e576tQpMXz4cAFY6rB9+3aRl5cnzGazGDBggNBoNOKNN94Q69evF++9957Q6/Wibdu2FbZ2FZ9H/v7+QqVSCU9PTzF06FBx6NChMvMvXbpUAOLgwYMVHrMk1SUyOLEjtgQG/v7+omnTppbHJYOT5ORk4e7uLu655x7L9qsFJ0II8dprrwmVSiUOHDhgcx2EKPxHNWTIEAEIQKjVatG2bVvx2muvicTEREu+zMxM4ebmJm655ZZyu3qZTCYRFBQkWrZsadXNJjMzU/j5+Vl1TSk+3ilTpliVsX37dgGI999/3yo9JiZGODs7W12glWXSpEnC2dlZpKWlWdKKu0AUX9QnJycLQMybN++qZV2Lbdu2CUBMnjxZCFF4QVK/fn0RHh5e6vUChLOzs1WgZTQaRZMmTUTDhg0taS1atBBDhgy55roUByfl/RQHCkLY3q3LaDQKg8Egxo0bJ9q2bVth/pLnc7Fjx44JwCqYFUKInTt3CkC8+uqrlrSePXsKQGzatMmGI7Z2teCkOHjevn17qW2PP/64cHBwsDzu16+faNy4cZnP4eDgIB5//HHL4/nz5wsHBwcBCHd3d7Fy5UohhBC33XabGDdu3DUfgxCXgxMhCl/PgIAAYTAYREpKinB0dBSLFy+2qXtO8XvXt29fMXToUEv61fbt06eP8PDwsPoOuFLxd8yV7+fs2bMFYOmaGh0dLTQajXj66aet8mVmZoqAgADLRXbx90e7du2sPjPnzp0TWq220oKTiIgISxe88pR3vhd/zl977bWr7l/8fZ2TkyPuuece4e7uLjZu3GiV56mnnhIeHh7XdExCCJGQkCAA8e6775baVvy5KT7/ij322GNCpVKJ8+fPCyEq7talVqtFnz59KqxLo0aNxIABA0qlx8bGCqBUl8grldetqzh4mj17tlV6cRCxcOHCq5a7Zs0a8dprr4nff/9dbN26VXzyySciJCRE6PV6sX///lL5T548KQCxYMGCq5YrSXWN7NYlWRFXaT729vbm5Zdf5pdffrlqs3hJL730El5eXrz88svXVA9HR0eWL1/O0aNH+eCDD3jggQdISkri7bffpmnTppauJP/++y8ZGRk8+eST5Q7oPXHiBLGxsYwYMcKqm42Liwv33HMPO3bsICcnx2qfe+65x+rxqlWrUBSFRx55BKPRaPkJCAigdevWFQ7gHDt2LLm5uVYDiBctWoSjoyMPPfQQAF5eXkRERDBnzhzmzp3Lf//9h9lstvk1K0vxQPjirkfF3STOnz9fZjezvn374u/vb3msVqu5//77OXXqlKWLU6dOnVizZg2TJ09my5Yt5ObmXlOdZs2axe7du0v9lHzeq/n555/p3r07Li4uaDQatFotX331FceOHbumehTbvHkzQKnuI506daJp06alXidPT0/69OlzXc9VkfLO4SvTrzZ4veS2CRMmcOnSJY4dO0ZCQgJ33XUX3377LQcPHmTOnDlcunSJhx9+GF9fXyIiIvjss8+uqb5jxowhISGBNWvWWAb+X9mVpqTPPvuMdu3a4eTkZHnvNm3aZNN7l5OTw9atW7nvvvss3X+u5q677rJ63KpVKwBLl8Z169ZhNBoZOXKk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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "pt: 0 to 5\n", + "93% Retention Cut: {0.7831, 0.8153, 0.8313, 0.823, 0.7426, 0.7532, 0.8392, 0.8636, 0.9172, 0.9389} Mean: 0.8307\n", + "98% Retention Cut: {0.4493, 0.4939, 0.5715, 0.6488, 0.5709, 0.5938, 0.7164, 0.7565, 0.8103, 0.8593} Mean: 0.6471\n", + "99% Retention Cut: {0.2946, 0.3312, 0.4081, 0.5213, 0.4509, 0.495, 0.6333, 0.6726, 0.7225, 0.7661} Mean: 0.5295\n" + ] + }, + { + "data": { + "image/png": "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qjZs2KA2bNigtm3bppRSKikpSQ0bNkx9//336q+//lJLlixRzzzzjNLpdOrbb7+95v63bdumRowYYXmyu2HDBnXixAmllFIPPfSQAtSjjz6qlixZoj799FPl7++vQkND1blz5yzb6NSpk/Lx8VGhoaHqo48+UitXrlSrV6++/klQ1y45WbJkiQLUokWLCswbOHCgCg4Otvx91113KX9//wLLpaWlKUA9//zzSiml4uPjlcFgUNOmTVOXLl1SY8eOVb6+viojI0PFxsYqV1fXYsd+pfySk/xSkueee84y784771Q33XRToU/ADxw4oEaNGqVmzZqlVq1apX7//Xc1YsQIpdPpLJ/vrKwsy3sxYsQIy/mPjY1VSim1Y8cO5e7ursLDw9Wnn36qVqxYoX744Qc1ePBgSylr/jWmVq1a6n//+59aunSp+vLLL1W1atVUly5drI7l9ddfV5qmqQceeED9/vvv6tdff1Vt27ZVbm5uau/evZbl8rd52223qd9++0398MMPKioqSoWGhv7nkpOjR48qQIWEhKguXbqouXPnqj///FMdPXq0RJ/3IUOGKE3T1IMPPqgWLFig/vjjD/X666+rDz74wLLMlddrs9msnn76aWUwGKw+kzNnzlSA+t///qf+/PNPtXz5cvXpp5+qxx577LrHVqtWLTV48OAC0zt16qR8fX1V9erV1YcffqiWLl2qHnvsMav34nrnPv+9K06Jav61JiAgQOn1euXh4aF69Ohhda0vSmxsrBo4cKACLDFs2LBBZWVlKbPZrHr27KkcHBzUSy+9pP7880/19ttvKzc3N9W0adPrlnbl/75cKSwsTNWoUUPVr19ffffdd2rp0qVq0KBBCrB8P0+cOKF+/fVXy3m58pqYr169euqOO+647vEJUVlJclJFFScxCAwMVPXq1bP8fWVycv78eeXl5aUGDBhgmX+t5EQppcaPH690Op3auXNnsWNQKu+H6vbbb1eAApRer1dNmzZV48ePV2fPnrUsl5qaqjw9PVWHDh2KrOplMplU9erVVcOGDa2q2aSmpqqAgACrqin5x/vyyy9bbWPDhg0KUO+8847V9BMnTigXFxerG7TCPPXUU8rFxUUlJSVZpuVXgci/qT9//rwC1Pvvv3/NbZXEmjVrFKDGjRunlMq7IYmIiFBhYWEF3i9Aubi4WCVaRqNRRUdH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "pt: 5 to inf\n", + "93% Retention Cut: {0.6982, 0.7335, 0.7395, 0.8015, 0.7356, 0.6149, 0.6848, 0.6468, 0.7187, 0.7079} Mean: 0.7081\n", + "98% Retention Cut: {0.4488, 0.4448, 0.5067, 0.5929, 0.4836, 0.4112, 0.4968, 0.4403, 0.5597, 0.5067} Mean: 0.4891\n", + "99% Retention Cut: {0.3302, 0.3319, 0.3761, 0.4848, 0.3578, 0.2981, 0.3546, 0.3146, 0.4669, 0.4086} Mean: 0.3724\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.colors import LogNorm\n", + "\n", + "def plot_for_pt_bin(pt_min, pt_max, percentiles, eta_bin_edges, eta_list, predictions, full_tracks, branches):\n", + " \"\"\"\n", + " Calculate and plot cut values for specified percentiles in a given pt bin\n", + " \n", + " Parameters:\n", + " -----------\n", + " pt_min : float\n", + " Minimum pt value for the bin\n", + " pt_max : float\n", + " Maximum pt value for the bin\n", + " percentiles : list\n", + " List of percentiles to calculate (e.g., [92.5, 96.7, 99])\n", + " eta_bin_edges : array\n", + " Edges of the eta bins\n", + " eta_list : list\n", + " List of eta values\n", + " predictions : array\n", + " Array of DNN predictions\n", + " full_tracks : array\n", + " Boolean array for track selection\n", + " branches : dict\n", + " Dictionary containing branch data\n", + " \"\"\"\n", + " # Filter data based on pt bin\n", + " abs_eta = eta_list[0][full_tracks & (np.concatenate(branches['t5_pt']) > pt_min) & \n", + " (np.concatenate(branches['t5_pt']) <= pt_max)]\n", + " predictions_filtered = predictions[full_tracks & (np.concatenate(branches['t5_pt']) > pt_min) & \n", + " (np.concatenate(branches['t5_pt']) <= pt_max)]\n", + " \n", + " # Dictionary to store cut values for different percentiles\n", + " cut_values = {p: [] for p in percentiles}\n", + "\n", + " # Loop through each eta bin\n", + " for i in range(len(eta_bin_edges) - 1):\n", + " # Get indices of tracks within the current eta bin\n", + " bin_indices = (abs_eta >= eta_bin_edges[i]) & (abs_eta < eta_bin_edges[i + 1])\n", + " \n", + " # Get the corresponding DNN prediction scores\n", + " bin_predictions = predictions_filtered[bin_indices]\n", + " \n", + " # Calculate the percentile cut values for the current bin\n", + " for percentile in percentiles:\n", + " cut_value = np.percentile(bin_predictions, 100 - percentile) # Convert retention to percentile\n", + " cut_values[percentile].append(cut_value)\n", + "\n", + " # Plot 2D histogram\n", + " plt.figure(figsize=(10, 6))\n", + " plt.hist2d(abs_eta, predictions_filtered, bins=[eta_bin_edges, 50], norm=LogNorm())\n", + " plt.colorbar(label='Counts')\n", + " plt.xlabel(\"Absolute Eta\")\n", + " plt.ylabel(\"DNN Prediction Score\")\n", + " plt.title(f\"DNN Score vs. Abs Eta for 100% Matched Tracks (pt: {pt_min} to {pt_max})\")\n", + "\n", + " # Plot the cut values with different colors\n", + " cut_x = eta_bin_edges[:-1] + (eta_bin_edges[1] - eta_bin_edges[0]) / 2 # Mid-points of the bins\n", + " colors = plt.cm.rainbow(np.linspace(0, 1, len(percentiles))) # Generate distinct colors\n", + " \n", + " for percentile, color in zip(percentiles, colors):\n", + " plt.plot(cut_x, cut_values[percentile], '-', color=color, marker='o', \n", + " label=f'{percentile}% Retention Cut')\n", + " \n", + " plt.legend()\n", + " plt.grid(True, alpha=0.3)\n", + " plt.show()\n", + " \n", + " # Print the cut values\n", + " print(f\"\\npt: {pt_min} to {pt_max}\")\n", + " for percentile in percentiles:\n", + " values = cut_values[percentile]\n", + " print(f\"{percentile}% Retention Cut:\", \n", + " '{' + ', '.join(str(x) for x in np.round(values, 4)) + '}',\n", + " \"Mean:\", np.round(np.mean(values), 4))\n", + "\n", + "# Example usage:\n", + "def analyze_pt_bins(pt_bins, percentiles, eta_bin_edges, eta_list, predictions, full_tracks, branches):\n", + " \"\"\"\n", + " Analyze and plot for multiple pt bins and percentiles\n", + " \n", + " Parameters:\n", + " -----------\n", + " pt_bins : list\n", + " List of pt bin edges\n", + " percentiles : list\n", + " List of percentiles to calculate\n", + " Other parameters same as plot_for_pt_bin function\n", + " \"\"\"\n", + " for i in range(len(pt_bins) - 1):\n", + " plot_for_pt_bin(pt_bins[i], pt_bins[i + 1], percentiles, eta_bin_edges, \n", + " eta_list, predictions, full_tracks, branches)\n", + "\n", + "# Example call:\n", + "percentiles = [93, 98, 99]\n", + "pt_bins = [0, 5, np.inf]\n", + "eta_bin_edges = np.arange(0, 2.75, 0.25)\n", + "analyze_pt_bins(pt_bins, percentiles, eta_bin_edges, eta_list, predictions, full_tracks, branches)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "analysisenv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/RecoTracker/LSTCore/standalone/analysis/occupancy/compute_occupancies.ipynb b/RecoTracker/LSTCore/standalone/analysis/occupancy/compute_occupancies.ipynb new file mode 100644 index 0000000000000..246d12b11e8c5 --- /dev/null +++ b/RecoTracker/LSTCore/standalone/analysis/occupancy/compute_occupancies.ipynb @@ -0,0 +1,586 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import uproot\n", + "import numpy as np\n", + "\n", + "def load_root_file(file_path, branches=None, print_branches=False):\n", + " all_branches = {}\n", + " with uproot.open(file_path) as file:\n", + " tree = file[\"tree\"]\n", + " # Load all ROOT branches into array if not specified\n", + " if branches is None:\n", + " branches = tree.keys()\n", + " # Option to print the branch names\n", + " if print_branches:\n", + " print(\"Branches:\", branches)\n", + " # Each branch is added to the dictionary\n", + " for branch in branches:\n", + " all_branches[branch] = tree[branch].array(library=\"np\")\n", + " return all_branches\n", + "\n", + "# Branches relevant to the occupancy selections\n", + "mod_occ_branches = ['module_layers', 'module_subdets', 'module_rings', 'module_eta',\n", + " 'md_occupancies', 'sg_occupancies', 't3_occupancies', 't5_occupancies']\n", + "\n", + "# Root file generated with compile -d option turned on to generate relevant occupancy branches\n", + "file_path = \"occ_1000_p06.root\"\n", + "branches = load_root_file(file_path, mod_occ_branches)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "events = np.shape(branches['module_layers'])[0]\n", + "\n", + "module_layers = np.concatenate(branches['module_layers'])\n", + "module_subdets = np.concatenate(branches['module_subdets'])\n", + "module_rings = np.concatenate(branches['module_rings'])\n", + "module_eta = np.abs(np.concatenate(branches['module_eta']))\n", + "\n", + "category_numbers = np.full_like(module_layers, -1)\n", + "\n", + "# Different category masks\n", + "mask1 = (module_layers <= 3) & (module_subdets == 5)\n", + "mask2 = (module_layers >= 4) & (module_subdets == 5)\n", + "mask3 = (module_layers <= 2) & (module_subdets == 4) & (module_rings >= 11)\n", + "mask4 = (module_layers >= 3) & (module_subdets == 4) & (module_rings >= 8)\n", + "mask5 = (module_layers <= 2) & (module_subdets == 4) & (module_rings <= 10)\n", + "mask6 = (module_layers >= 3) & (module_subdets == 4) & (module_rings <= 7)\n", + "\n", + "category_numbers[mask1] = 0\n", + "category_numbers[mask2] = 1\n", + "category_numbers[mask3 | mask4] = 2\n", + "category_numbers[mask5 | mask6] = 3\n", + "\n", + "eta_numbers = np.full_like(module_eta, -1)\n", + "\n", + "# Different eta masks\n", + "eta_numbers[module_eta < 0.75] = 0\n", + "eta_numbers[(module_eta >= 0.75) & (module_eta < 1.5)] = 1\n", + "eta_numbers[(module_eta >= 1.5) & (module_eta < 2.25)] = 2\n", + "eta_numbers[(module_eta >= 2.25) & (module_eta < 3)] = 3\n", + "\n", + "# Split the arrays back into event-wise lists\n", + "split_indices = np.cumsum([len(x) for x in branches['module_layers'][:-1]])\n", + "\n", + "category_numbers_split = np.split(category_numbers, split_indices)\n", + "eta_numbers_split = np.split(eta_numbers, split_indices)\n", + "\n", + "# Add category number and eta number branches\n", + "branches['category_number'] = np.array(category_numbers_split, dtype=object)\n", + "branches['eta_number'] = np.array(eta_numbers_split, dtype=object)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "\n", + "font = {'size' : 20}\n", + "\n", + "matplotlib.rc('font', **font)\n", + "\n", + "def plot_histogram(data, title, xlabel, ylabel, occ_percentile=None):\n", + " plt.figure(figsize=(10, 6))\n", + " plt.hist(data, bins=50, edgecolor='black', alpha=0.7)\n", + " plt.title(title)\n", + " plt.xlabel(xlabel)\n", + " plt.ylabel(ylabel)\n", + " plt.grid(True)\n", + " plt.yscale('log')\n", + " # Plotting a vertical line at the occupancy value\n", + " if occ_percentile is not None:\n", + " non_zero_data = data[data > 0]\n", + " percentile_value = np.percentile(non_zero_data, occ_percentile)\n", + " plt.axvline(percentile_value, color='red', linestyle='dashed', linewidth=1, label=f'{occ_percentile}th percentile: {percentile_value:.0f}')\n", + " plt.legend()\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_occupancies(branches, occupancy_variables, occ_percentiles, plot=False):\n", + " cat_eta_combinations = [(cat, eta) for cat in range(4) for eta in range(4)]\n", + "\n", + " for var, percentile in zip(occupancy_variables, occ_percentiles):\n", + " for cat, eta in cat_eta_combinations:\n", + " data_to_plot = [\n", + " occupancy for sublist_cat, sublist_eta, sublist_occ in zip(branches['category_number'], branches['eta_number'], branches[var])\n", + " for c, e, occupancy in zip(sublist_cat, sublist_eta, sublist_occ) if c == cat and e == eta\n", + " ]\n", + " data_to_plot = np.array(data_to_plot)\n", + " non_zero_data = data_to_plot[data_to_plot > 0]\n", + " if non_zero_data.any():\n", + " if plot:\n", + " plot_histogram(data_to_plot, f'{var} for Category {cat} and Eta {eta}', 'Occupancy', 'Frequency', percentile)\n", + " else:\n", + " percentile_value = np.percentile(non_zero_data, percentile)\n", + " print(f'{var} for Category {cat} and Eta {eta} - {percentile}th percentile: {percentile_value:.0f}')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "md_occupancies for Category 0 and Eta 0 - 99.99th percentile: 60\n", + "md_occupancies for Category 0 and Eta 1 - 99.99th percentile: 57\n", + "md_occupancies for Category 0 and Eta 2 - 99.99th percentile: 54\n", + "md_occupancies for Category 0 and Eta 3 - 99.99th percentile: 48\n", + "md_occupancies for Category 1 and Eta 0 - 99.99th percentile: 259\n", + "md_occupancies for Category 1 and Eta 1 - 99.99th percentile: 195\n", + "md_occupancies for Category 2 and Eta 1 - 99.99th percentile: 23\n", + "md_occupancies for Category 2 and Eta 2 - 99.99th percentile: 28\n", + "md_occupancies for Category 3 and Eta 1 - 99.99th percentile: 25\n", + "md_occupancies for Category 3 and Eta 2 - 99.99th percentile: 25\n", + "md_occupancies for Category 3 and Eta 3 - 99.99th percentile: 33\n", + "sg_occupancies for Category 0 and Eta 0 - 99.9th percentile: 936\n", + "sg_occupancies for Category 0 and Eta 1 - 99.9th percentile: 351\n", + "sg_occupancies for Category 0 and Eta 2 - 99.9th percentile: 256\n", + "sg_occupancies for Category 0 and Eta 3 - 99.9th percentile: 61\n", + "sg_occupancies for Category 1 and Eta 0 - 99.9th percentile: 1358\n", + "sg_occupancies for Category 1 and Eta 1 - 99.9th percentile: 763\n", + "sg_occupancies for Category 2 and Eta 1 - 99.9th percentile: 210\n", + "sg_occupancies for Category 2 and Eta 2 - 99.9th percentile: 268\n", + "sg_occupancies for Category 3 and Eta 1 - 99.9th percentile: 60\n", + "sg_occupancies for Category 3 and Eta 2 - 99.9th percentile: 97\n", + "sg_occupancies for Category 3 and Eta 3 - 99.9th percentile: 96\n", + "t3_occupancies for Category 0 and Eta 0 - 99.9th percentile: 1146\n", + "t3_occupancies for Category 0 and Eta 1 - 99.9th percentile: 544\n", + "t3_occupancies for Category 0 and Eta 2 - 99.9th percentile: 216\n", + "t3_occupancies for Category 0 and Eta 3 - 99.9th percentile: 83\n", + "t3_occupancies for Category 1 and Eta 0 - 99.9th percentile: 1032\n", + "t3_occupancies for Category 1 and Eta 1 - 99.9th percentile: 275\n", + "t3_occupancies for Category 3 and Eta 1 - 99.9th percentile: 115\n", + "t3_occupancies for Category 3 and Eta 2 - 99.9th percentile: 110\n", + "t3_occupancies for Category 3 and Eta 3 - 99.9th percentile: 76\n", + "t5_occupancies for Category 0 and Eta 0 - 99.99th percentile: 325\n", + "t5_occupancies for Category 0 and Eta 1 - 99.99th percentile: 237\n", + "t5_occupancies for Category 0 and Eta 2 - 99.99th percentile: 217\n", + "t5_occupancies for Category 0 and Eta 3 - 99.99th percentile: 176\n", + "t5_occupancies for Category 3 and Eta 2 - 99.99th percentile: 129\n", + "t5_occupancies for Category 3 and Eta 3 - 99.99th percentile: 180\n" + ] + }, + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACEAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAoqtfs6WMrRsVYDhl6jmmvalUJFzcf990AczD4yvvJjnn0uLy3hjm2wzlnIkjd1ABUc/uyD9RWn4d1mfVY9Smma3kWCZVjFq/mLgwo+A2Bk5Y1Z8+wGo/2f/aEn2sDPlb+emfT0p0+iQ3Ekbm7v02dBDdPGp+oUgH8aLBcwrTxpLdmBPIs4jMVPnPcnykDJu2M23/WDpt/H2qf/AIS8JD9onS1jhM0kRUz/ADxbVkI8wY+Ukx4A9+/ff+wqQR502Cc43d/yo+wqc5mm55Pzdf0oA5VfHTbpt9rAAinCrOS6nZGwLjHyqTJjOf58S2njK4uo4php0fkjy1m2zbm3NLJF8mBhhmPPXoa3rbSoIRK0bzKZnLSfP949OfwAqf7EB0nn/wC+v/rUAcxL4xnisre9EMEwmgZ/LgnDKhLwqN7EDBXzDnp0/K7pfieW+1S2s7i2htzPCXXbOJSzDOfu5AGBnnGc+vFbX2FcEedNz1+br+lAsVU5E0wOMZDdvTpQBy0PijULS6aK8SCUy3cioA+w7BP5IWMbfmYfeOT6evF6XXb5/DFrqRSC0N1LEpkDGRYInIBdsgcjP0GRnitk2gDn9/OduCPn7nPtS/ZDjHm3GPTzBQBzV54sewurfT7eaHUXlQ4uQyj5jv2fKPvDKYO39Kgh8cXQRA+nxXBS0E8jwTgbz5Zf5AeSONpxnBz6V1YsgMYknGBgfOOKje0i/wBW00qnaePNAIXuR3FAHOjxvKJDGbezkKSsheK5LLLjyuIjt+Z/3vT/AGffi1D4ou2axWWwjB1CQpahJS33Xw275eCEDP8A8BIq/baVaafbwpaSyRwNJvJM+7eSDzuOSSeO9Svp9rJcrdvNKZbcMqsZuI8/e46A479cUAZ0+tXkfi1LBZIxEZkiFtt+Z0aJnMueuAyhfTg9yKr3njJ4NZutOgs45WiwsbGbblvMiQhhgkD96CDjnHGa6L7Ic7vNuM+vmCk+x8k+ZPk9TvFAHNS+Lbt760s1it7eQ3UcMu6XJkzM8beWCvI/dkk8Y3D0pup6/qVtqeupBPF/oUJaCF2jwSIQ/K/fPJPTj9a6drMkZEk+4Zwd44pj20UZEkk0it03NIAenr+dAGVp/in7X4kGkGOFwYi3nQy5G5VQnjrtIcYbpxSaDrV5f6xcW88kboFlZolXBtispRVJ/wBpRnn0JHBrZFkF+7JOOMcOKZ5UYZv9KlDbgrfvRnPYH3oAv0VRdGhlgKzTHMoVlZsgjBooAvVjanrcmm3rQfZkdTAJI283BLeYqYIxwMuDnnoeK2ary2FnPMZprSCSUoYy7xgsUPVcnt7UAY0eqXN9Y3M09uEtSgClMthw+1hn+IZGQQBx1rT1W5aDSbuaLKyJEzKSvAIHFF/FHFpMkUaKkaqAqqAAACOAKbrv/IAv/wDrg/8AKnHdClszyG+vLnUtRNxdyK8rTAEgAcCP0Fdr4R8WrJbx2epSwRbIokg2K2W7c9fQVwA/4+B/18f+06jid4o0kjYq6woVYHBB3da9SpSjONjyqdaUJcx7z5g9G/75NHmD0b/vk1xPg/xNd3d4NLuVMp3OfPeQluBnGMf1rsbW/tL3f9luYpvLOH8tw2364+lebOm4OzPThUjNXQ+OQbOjdT/CfWneYPRv++TRH9z8T/On1BYzzB6N/wB8mjzB6N/3yafRQBCXBkbhv4f4T60pjYknz5B7YH+FOAzK+fQf1p2xf7o/KgadhioVYEyyN7ED/CsDWfDQ1bVFuvM2J5RWRQ2DIdjqB04H7wnrzjoa6LYv90flRsX+6PyoBu5ydz4VuLjQotNa6TeskjiYDlDIX34GMcBwF4HTtUM/gqSSe5kjuFVZC6pGzNhVZZRuJAGWzLnnPAxmusmVRJBgDmTnj/ZNTbF/uj8qAaOcvtFvzp0NnaXDEC7d8tNIuyMo+AWB3HDFTjPpUMfhrUfNlM2tXL7pC4fzGH8LhflGAMFlPUg7RXU7F/uj8qNi/wB0flQI5WXw3qcrKRqckK/ZzF5cc8m1W+bLZPJzuB6ggqOtNn8KXMj3Oy8G2ZWTLs7EL+9CqcnkASLz/s11Tovlt8o6HtSqi7R8o6elAGLpOk3thcyyXN9Jch5mfLyNwDuxheg6gY5HArIbwddFJo/tsbo8khAlVmxv35k9nG8Yxx8vbNdlsX+6Pyo2L/dH5UAVLlh5sA5/1w7f7Jop90AGtsDH74fyNFAFms691q3sLloJo5twh81Sqgh/mCbRz97LKOeOetW5bu3gljimnjjklyI1dgC+PT1qreaNZ3119ouBKz+UYgBKwAXIbgA4zkA568CgCk2tw6hDcRRxTRosIfzJF2jduKlPTIIweat646HQb8BlJ8h+M+1LdWkNpoj20CYjQDAJLH72SSTyTnnNLro/4kN//wBcH/lTjuiZfCzxgK32gfKf9f6f9M6hCt9nHyn/AFCdv9qpR/x8D/r4/wDadQj/AI9x/wBcE/8AQq9g8Y09N1C60rUhc2oUSea6/OuRgpUFtf3trItzbyyRSbYn+UkAnceo6H8ahH/HwP8Aru3/AKBUS/6lf+uMP/oVJxTGpNJWO/0jx66MsGqQkrvcGdASSeo+UCu1tdQtL2FZbe4jkUqG4YZGemR2rxH/AJbr/wBdn/8AQTXQeGNch0fRNQxOsd28EJgBQtk8j0x371yVcOrc0Tso4l35ZHqvmJ/fX86PMT++v51xug+OLaZFt9Uk8ucFwZ2CqhweBweuPbtXZIyyIroQysMgjuK5JwlB2Z1wnGavEYJE81vnXoO/1p/mJ/fX86QAea3HYf1p+B6VJY3zE/vr+dHmJ/fX86dgelGB6UAV55E8y3+df9Z6/wCy1TeYn99fzqOcDzLfj/lp/wCytU2B6UinshvmJ/fX86PMT++v507A9KMD0pkkbyJ5bfOvQ96VZE2j516etK4Hltx2NKoG0cdqAE8xP76/nR5if31/OnYHpRgelAFW6dS9sAwJ84dD7Gilux89t/12H8jRQBieKFWWW0t3tEvVkV8QOruobK4kZFBDKvuOpGK1xd6fp6/ZDcRRfZ4Q5RpOUjHAJz27VheMY5hLp9wkSNHEZPMdoWfywQPmJVGwAcHHGcda0tT0STUb4XH2sRosPlqgiyQ29XDZz6ovGPWgCS51C1u7aWGCVZGMKyggZVkJ4IPQ9Kk13/kAX/8A1wf+VVZNJhsNGkQYebHzzEYLEvuP0GSeKsa5Go0K/IHIgf8AlTjuiZbM8ZH/AB8D/r4/9p1CP+Pcf9cE/wDQqnDH7QOf+W//ALTqEO32cc/8sE/9Cr2DxiUf8fA/67t/6BUS/wCpX/rjD/6FUwY/aBz/AMt2/wDQKiV28lef+WUX/oVAEn/Ldf8Aru//AKCahX/UL/1xh/8AQqsbm89ef+Wz/wDoJqFXbyV5/wCWMX/oVHQGPH+tH/XWT+VdD4d8X3WkbIrgtcWzCHeZHZmQHg7ea58M3mjn/lpJ/KmK7eWvP8EH/oVTOCmrMqE3B3iz27TdQh1S2W8t93lSDjeMHgkH+VXa8iPiGRdFtLC1a4t5Y5JN8scm3cATxxz3H5V03hzxnDetDaahFsncRrGyZYMW4yxPTmvPnQkldbHowxEJNJvU7eimCOMjIGR9aPKT0/WsDoGT/wCst/8Arp/7K1TVWmjTzLfj/lp6/wCy1TeUnp+tIp7IfRTPKT0/Wjyk9P1pkiv/AKtvoaVfuj6VG8SeW3HY96VYk2jjt60ASUUzyk9P1o8pPT9aAIbv79t/12H8jRTblFV7Ygc+cP5GigDnPGgDT2C+dHGdspUsittICtvO6N+AAeOCSRXWRoY4lRnaQqAC7Yy3ucYFc1r8F3da3ZD+zpZreD5hIsMUqgnvhzkMCo5HZjU2saNd32ptPbpbrG1r5Ls8hDSHzFfaQF+6QpGc/wAR4oA1NQlje0uIldTIqgsgYZAz1Ipmu/8AIAv/APrg/wDKs6PSX07R5GeUm4KBCFbKRrvyEXI6AHHvgVf1xSNCvzvY/uH449Kcd0TL4WeMj/j4H/Xx/wC06hH/AB7j/rgn/oVTgj7QPlH+v/8AadQhh9nHyj/UJ/6FXsHjEo/4+B/13b/0Col/1K/9cYf/AEKpgR9oHyj/AF7f+gVErDyV+Uf6qL/0KgCX/luv/Xd//QTUC/6hf+uMP/oVWNw89flH+uf/ANBNQqw8lflH+pi/9Co6APH+tH/XWT+VMX/Vr/uQf+hVIGHmj5R/rJP5UxWHlr8o+5B/6FQA9fvp/vzfzqIf6sf9c4P/AEKplI3p8o+/N/Oo1YeWvyj7kH/oVAHXeFfFh01xaX8wWxQShAsWSDuz1HPc16YjB0V1OVYZFeDhgG+6PvS1vXniqafU7S9gieP7OkKiN5SQ3J9MetclbD80rxOyjiOWNpHqs/8ArLf/AK6f+ytU1cto3ii11n7NG8piu1ZmkTGFGNw4J69q6bYf+ejfp/hXE4uLszvUlKKaH0UzYf8Ano36f4UbD/z0b9P8KQCv/q2+hpV+6PpTHQ+W37xuh9P8KFQ7R+8bp7f4UASUUzYf+ejfp/hRsP8Az0b9P8KAIbv79t/12H8jRTblSHtjvY/vh1x6GigC3RRXPaz/AGp/ajixW8MTWmGKEbAwkUnbk8Ps34P0oA19S/5B830H86h13/kAX/8A1wf+VZsNtfQaVNc3UhMskSIY5BlgA7YLEHBbawB9x3rQ1wP/AGDf5K48h+3t9acd0TL4WeMj/j4H/Xx/7TqEf8e4/wCuCf8AoVTjb9oHB/1/r/0zqEbfs44P+oTv/tV7B4xKP+Pgf9d2/wDQKiX/AFK/9cYf/QqmG37QOD/r27/7FRLt8leD/qou/wDtUAS/8t1/67v/AOgmoF/1C/8AXGH/ANCqx8vnrwf9c/f/AGTUK7fJXg/6mLv/ALVHQB4/1o/66yfypi/6tf8Acg/9CqQbfNHB/wBZJ39qYu3y14P3IO/+1QA9fvp/vzfzqNf9Wv8AuQf+hVKu3enB+/N396jXb5a8H7kHf/aoAX+L8ZqQdv8Atj/OnfLu6HrN3pBt44P/ACx7+9ADTjehYDAMx5HvXrlt4v0ie9t7GCWSWSTaoZYyFBPTOceleRvtwOD0n7+9bHh3H/CS2WAc+ZF1/GsK1NTTb6f5HTSqOFkuv+Z7JRXF6PfXP/CY6sslxK8USytsZyygBl6Lniug0bWodct5JrXeqo20iRMHOAexPrXBKDid8ail/XY0n/1bfQ0q/dH0pjiTy2+Zeh/h/wDr0KJNo+Zen93/AOvUFklFMxJ/eX/vn/69GJP7y/8AfP8A9egCG7+/bf8AXYfyNFNuQ++2yVI84dB7GigC3RRXPazrN1Yam1tDJEQbTzQpjJMZ8xVLHB5AVmOP9mgDW1LnTpvoO/uKi13/AJAF/wD9cH/lWXb3Gp3GnTXt2ytBJHhEUbc/MAGAI4yAW6nhh6Vpa4zHQr8FCB5D85HpTjuiZbM8ZH/HwP8Ar4/9p1CP+Pcf9cE/9CqcAfaB83/Lf0/6Z1CAPs4+b/lgnb/ar2LnjWJR/wAfA/67t/6BUS/6lf8ArjD/AOhVMAPtA+b/AJbt2/2KiUDyV+Yf6qLt/tUBYl/5br/13f8A9BNQL/qF/wCuMP8A6FVjA89fm/5bP2/2TUKgeQvzD/Uxdv8Aao6BYeP9aP8ArrJ/KmL/AKtf9yD/ANCqQAeaPm/5aSdvamKB5a/MPuQdv9qgB6/fT/fm/nUa/wCrX/cg/wDQqlUDenzfxzdveo1A8tfmH3IO3+1QFhf4vxmpB2/7Y/zp2Bu+93m7UgA4+Yf8se3vQFiN+g+k/wDOtDTL1dO1eC7dGdYnhYqvU8mqLgYHzDpP296ewG8/N3h7e9LR3X9bFu65X/W5c1HUnutTury3aWATeecK5BxkcHFNstTvdOuRLaXEkZDx/KGO05GDlehqoQNp+Yfdn7e9OwN/3v44u1HLG1rC5pXvc9h0LUTqOhwTTTRvctGTIFIyOSOg6VpCeFXWIyoJCOELDJ/CvNvATrBd3suNwW2kZsDnAepE1O31fx3aXVujgB0TDgA5Cn/GvPlR95pbI9GNf3It7vQ9KorJ1fX7bRBCbqKY+aSF2AHpjPf3ol8QW0WtR6U0U32iQAggDbyCeufaseVtXsbc8U7XLt39+2/67D+RoptyzF7bKEfvh3HoaKkot0UUUARzQpcQtFICUYYODisnWokh08xk3ExuHWARmcoCWOOTg4H4VtVFcW8F3A0NxCksTfeR1DA/gaAOZsPCPh6/sLa+js5lWdFnUNO+RuX6+hxU/wDwgfh/bt+ySY2hf9e/QfjXRqqoioihVUYAAwAKWr9pPuyPZw7I5z/hBtA3bvssud27/Xv1xj1qlqfhDQdO02W5WxLiJR8r3ciAgdADzznoMck12FQXVnbX0Pk3UEc0e4NtkUMMjoee9HtJ92Hs4dkcXpug6Dfag9s2m3EZHmOjvdMWypCuCAeMFwB1zWv/AMIH4fAx9llxgL/r36Dp3rdhsrW3meaG3ijlkADuqAMwHTJ71PR7Sfdh7OHZHOf8ILoGc/ZZc5J/179T1701vA3h6OMs1tIFVRkm4fgLyO/aulqjql+1hDCY41eSeZYU3ttUE55Y4PHH4nA70e0n3Yezh2RwNhB4a1C4U2+nStF5/lswvWO0O4RWAB5LFgSM8Cuo/wCEE8P4x9llxhR/r37dO9Q2ut6bdBbo6QpuIrgxB0EZ/fnAO1iQcEYO44BGO/FW7jxbZW7bPIneTLgouwEbTIDnLAf8sn/Sj2k+7D2cOyIv+EF0D/n1l7/8t379e9H/AAgnh/8A59Ze3/Ld+3TvQ3jTT98yxwXMpiOSUVcFdrsWBJHA8px65GKtDxNa4iYwThJ5jDA2F/euG24AzkdzzjhSaPaT7sPZw7I5O50zw6mqTWEemTmWKYQx7rqRBK77NwzggKPMUk5z7VtWHhHw9qOn216lnMqzxpIFNw+RxkDr2ropdMsJ5JZJrK3keVQsjNGCWAxgE9+g/IVYRFjRURQqKMKqjAA9BR7SfcPZw7I53/hBPD//AD6y/wAX/Ld+/XvS/wDCC6BnP2WXqD/r37dO9dHRR7Sfdh7OHZHGajYaT4XMS21ncH7WGjkKXD/KmRuPfuw5OB6kcZXw5o2jXbm7gspraeIxyK32lmyGQMp+uDyO3vXV3Fla3ZjNzbxTGNtyeYgbafUZ6UtvaW9ojJbQRwqzF2EahQSe5x3pc8u4+SPYoX/h6w1MRi886Xy87czMMZ69D7UP4esJNRW/YTm6T7snnNkcEeuO5rVopcz7j5V2Kws0EiO0kzlDuAaQkZoqzRSGFFFFABRRRQAUUUUAFFFFABRRRQAUyWGK4iaKaNJI2+8jqCD9QaKKAIW0+ycENZ27AoIzmJTlR0Xp0HpUc2kadPIry2NuzB/MyYxy2CMn14Y9aKKAJRY2au7i1gDSElyIxlicjn16n8zTW02za4jn+zoJI5DKCoxlyCu4gdTgkZPrRRQBaooooAKKKKACiiigAooooAKKKKAP/9k=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACEAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiq02o2VvLJFNdRRyRx+a6swBVM43H2zQBZorLk1e1uobiKyuVklSMPlD0DYwQfoR+Yqe4hS3t5JpLudERdzMX6AdT0oA5uHxlfeTHPPpcXlvDHNthnLORJG7qACo5/dkH6itPw7rM+qx6lNM1vIsEyrGLV/MXBhR8BsDJyxq5ZG01CDz7S+lliB27lfuO3Skn0SG4kjdru/jKdBDdPGD9QpAP40BuYVp40luzAnkWcRmKnznuT5SBk3bGbb/rB02/j7VP/AMJeEh+0TpaxwmaSIqZ/ni2rIR5gx8pJjwB79++/9hUgjzpsE5xu7/lR9hU5zNNzyfm6/pQByq+Om3Tb7WABFOFWcl1OyNgXGPlUmTGc/wA+JbTxlcXUcUw06PyR5azbZtzbmlki+TAwwzHnr0Nb0elQW8j+U8y+cxeT5/vHAHP5VP8AYgOk8/8A31/9agDmJfGM8Vlb3ohgmE0DP5cE4ZUJeFRvYgYK+Yc9On5XdL8Ty32qW1ncW0NuZ4S67ZxKWYZz93IAwM84zn14ra+wrgjzpuevzdf0oFiqnImmBxjIbt6dKAOWh8UahaXTRXiQSmW7kVAH2HYJ/JCxjb8zD7xyfT14vS67fP4YtdSKQWhupYlMgYyLBE5ALtkDkZ+gyM8VtG0G7iWc7T13jg1HFaSeXiSac/8AbQf4UAc9eeLHsLq30+3mh1F5UOLkMo+Y79nyj7wymDt/SoIfHF0EQPp8VwUtBPI8E4G8+WX+QHkjjacZwc+ldV9jVRnzJgFHXeBgUz7LDIAizynchK7ZQDtPUjHb3FAHOjxvKJDGbezkKSsheK5LLLjyuIjt+Z/3vT/Z9+LUPii7ZrFZbCMHUJClqElLfdfDbvl4IQM//ASK0bPS7HT4PJtpJEQSHOZ9xLn1JyS1StpkEl5HO0k7TwqQh877gbqcdOcYz9aAIJNRaLxhb6e17F5U9nJILc7QwdWQAjuchm49qy7zxk8Gs3WnQWccrRYWNjNty3mRIQwwSB+9BBxzjjNdALLJV2kmLgfe3jP54pfsfJPmT5PU7xQBzUvi27e+tLNYre3kN1HDLulyZMzPG3lgryP3ZJPGNw9Kbqev6lbanrqQTxf6FCWghdo8EiEPyv3zyT04/WunNnyCZJ8jod44pi2sUkhKzSNIvBIkBI6j+hoAytP8U/a/Eg0gxwuDEW86GXI3KqE8ddpDjDdOKtaPqT3Wsa1ZSXkU/wBlnURqu0MilAdpx6EkZNW2tVj2/vpUJIUfvAM+wpvlQRsW+0upLbCfNUEt6fWgDRoqi8bQywFZpjmUKys2QRg0UAXqx9T0R9Rvhcfa/LRYfLVBHkht6uGzn1ReMetbFUrnVrKzneGeVkkSLzSPLY5XIXg4wTkgYHPI45oAoyaRb2GjSKoV5iP3k20KzkvuP4ZPT6VZ1yNRoV+QOfIf+VQyarbahb3EMG84jEgZlwGGecd+DwQcYNWNd/5AF/8A9cH/AJU47omWzMfwMqvoDFhk+e/8hXS+Un92uU8CXtqNLazNxF9pM7kRbhuxgHpXXVdb+IyKP8OPoM8pP7tHlJ/dp9FZmpE0SeYny+tO8pP7tDf61PoafQAzyk/u0eUn92n0UAReWDkK7Jg/w49PemrCcf6+X9P8KmKqTyAfwqvaKDFyAT7ikUm7Db+yW90y4s3JYSxsnLYzn3A/pXPWPhO4sb20u0ukaWHzJHz0d28zC4AGEHmHpjOBxXV7F/uj8qNi/wB0flTJOOufBDTm7KXIi86T93g58pTvy33eWPmHryMD5quaf4Ylsb9LlbkKUfja7/Mm+ViCCcZPmD1xtrpdi/3R+VGxf7o/KgDkJPDmsXRuH/tKS3V7h3EaTtl03ybcnnbgMuAo/hGfa1J4cv8AE3l6nIHlSUCVpXzEzMxDKM4PBVfbbxXRRIvlJ8o6DtT9i/3R+VAHJy+E7yeyeKTUZGZk2bXmdlxh+O3G5kOcZwtLL4X1B5/Nj1Jog0gZkjdlJXdIQN2Cfl3jHHaur2L/AHR+VGxf7o/KgDI1HTLi6s7SOMW5lhu0n3SszYCvu4JyckcfjWSPB8sUs0kE8aOZ1eAlj+4A3fMMAbmO4ghs9Bya6qRF2j5R94dven7F/uj8qAKlyo86A4584f8AoJop90AGtsDH74fyNFAFmsu/0SLUbwXEtzOuIvKVE2gD5lcNyM5DKp6446Velu7eCWOKaeOOSXIjV2AL49PWql5rNtYXLwTJNuEPmqVXIf5gu0c/eyyj8aAIbjTbez0SSCNd3Qs7AFnO7cSSB6kn8al1yNBoN+Qig+Q/OPaqj63b6jDcQxxyoqwq/mSptGdxBXnjIIwfereuOp0G/AYE+Q/f2px3RMtmeaeFLuC18SRy3cyRwh3BaQ4H+rr1iPyJokljEbxuAysoBBB6GvDQrfaBwf8AX+n/AEzr1TwjrsGp6XFbpFLE1rBGrGTGG4xxz7V2YqH2kceEnpyM6Hyo/wC4v5UeVH/cX8qPMT++v50eYn99fzriO4Y0cfmJ8i9+1P8AKj/uL+VMaRPMT51796f5if31/OgA8qP+4v5UeVH/AHF/KjzE/vr+dHmJ/fX86ADyo/7i/lVe0jTyvuL+VWPMT++v51XtHTyvvr+YpdSvsljyo/7i/lR5Uf8AcX8qPMT++v50eYn99fzpkh5Uf9xfyo8qP+4v5UeYn99fzo8xP76/nQAyKOPyk+Reg7U/yo/7i/lTIpE8pPnXoO9P8xP76/nQAeVH/cX8qPKj/uL+VHmJ/fX86PMT++v50AMkjj2j5F+8O3vT/Kj/ALi/lTJJE2j51+8O/vT/ADE/vr+dAFa6RFe2IVQfOHQexopbp1L2wDAnzh0PsaKAMXxQqyy2lu9ol6siviB1d1DZXEjIoIZV9x1IxWhNoFhO6M6zYjg8hFEzAKuQRjnqCqnPXgVk+MY5hLp9wkSNHEZPMdoWfywQPmJVGwAcHHGcda17/WotPumglt5mPkiVGXbhyXVNo565ZeuBz1oAW6s4bTQ3toVxGgGAxySd2SST1JPOaXXQP7Bv+P8Alg/8qpNrK31tOBC8UIiDb2/hfftKHtnI7E1c1yRToV+AeTA/8qcd0TLZnjIP+kD/AK+P/adOsb6exaKeGRgY4432hyA2G6HFAVvtA4/5b/8AtOoQjfZxx/ywT/0KvYdmrM8dXWqPYfDuux6xZhpnt0ut7Awo/OB3wea2sD0FeGwyT2935kEkkT+cw3RsVONnqK9N8N+KrTUrSKGdvInSONf30gzKSMZHryP1rzq1Dk1jsejQr86tLc6NgPNTgdDTsD0FRtInmp83rTvNT+9XOdI7A9BRgegpvmp/eo81P71ADsD0FV7MDyegqbzU/vVBaSp5X3hS6lfZLOB6CjA9BTfNT+9R5qf3qZI7A9BRgegpvmp/eo81P71ABEB5ScDoKdgegqOKVPKT5uwp3mp/eoAdgegowPQU3zU/vUean96gAkA2jgfeH86dgegqOSVNo+b+Ifzp3mp/eoAhugN9tx/y2H8jRTbl1Z7YA8+cP5GigDnPGgDT2C+dHGdspUsittICtvO6N+AAeOCSRW9NotlcyLLdK88oh8ku8hGVyD0GBnIByB1A9KyNfgu7rW7If2dLNbwfMJFhilUE98OchgVHI7Ma0NS1ttOvDAbUODAJI2EmNzGRU2kY4GXXnnvxQBPd20Nror28CBIkACqD7ijXf+QBf/8AXB/5Vnrq0t/ZXEjwNFAEAyFJ/eByrAN0YZHXA61e1xwdBvxhv9Q/8J9Kcd0TL4WeMj/j4H/Xx/7TqEf8e4/64J/6FU4U/aByP9f6/wDTOoQp+zjkf6hO4/vV7FzxrEo/4+B/13b/ANAqJGKxIykqwihwQcEfNUwU/aByP9e3f/YqJVPkryP9VF3H96gLM7Lw74yax8u1vwWt0eRRKNzyZ5I716Ja3cF5Ak1vIroyhhg8gEZGfSvD1U7xyP8AXv39jU2nanqGlQ/6DdtBuiiLbNvJyRzn61y1cMpaxOuliXFWlqe4UV59p/j+S2s0hu7aS6uA7gy+Yqggc9h6cV3cFys1vHKFcb1DY2njIzXHOnKG52wqRn8JNVe0/wBVUvmD0b/vk1BaSDyujf8AfJrPqa/ZLVFM8wejf98mjzB6N/3yaZI+imeYPRv++TR5g9G/75NABF/qk+gp9RRSDyk4boP4TTvMHo3/AHyaAH0UzzB6N/3yaPMHo3/fJoAJPuj/AHh/On1FJINo4b7w/hPrTvMHo3/fJoAhu/v23/XYfyNFNuXBe2GG/wBcOqkdjRQBbqrNptjczmeezgllMZiLvGCSh6rn09qtVg6vrsum6g1uBbsDbeam5yGU+YqEt/sjfn/gJoA0L6COLSXhijVI0UBUUYAAI4AFN13/AJAF/wD9cH/lWdFqNze6XPczxYt2jUIY8FS4dlYrzkqcKRnsav64+dCvxtYfuH5/CnHdEy+FnjI/4+B/18f+06hH/HuP+uCf+hVOF/0gfMP9f/7TqEL/AKOPmX/UJ/6FXsXPGsSj/j4H/Xdv/QKiX/Ur/wBcYf8A0Kpgv+kD5h/r2/8AQKiVf3K/Mv8Aqov/AEKgLEq/6wf9d3/kagX/AFC/9cYf/QqsKvzj5h/r3/kahVf3C/Mv+pi/9CoCw8f60f8AXWT+VXdM1zUdKKPa3LhQsLGNiSrc45H0qmF/ej5h/rJP5UxV/dr8w+5B/wChUpJS0Y4txd0em6P48sbmNY9Rb7PcfPufbiM4OOOSen9a6SwdZLZXQgqwBBHcEV4ii/vV+Yfel/nW4fGGqvpkVtBJFbRiGJSYgdxycZz24HauOphveXId1LFe4+fy/U9corz+z8cLYaFbx5a8vg0gk812GACT97Bz2Fb/AIY8Qz63azzXEMcZjZQPLJxgjPOa55UpRV2tDojVhJpJ6nQ0UwSZGQrEe1G//Yb8qzNAi/1SfQU+oon/AHSfI3Qdqdv/ANhvyoAfRTN/+w35Ub/9hvyoAJPuj/eH86fUUj/KPkb7w7e9O3/7DflQBDd/ftv+uw/kaKbctl7YbWH74dfoaKALdRtBE772iQvjbuKjOPT6VJXPazrN1Yam1tDJEQbTzQpjJMZ8xVLHB5AVmOP9mgDV1FB/ZsqqMAAYA7cio9d/5AF//wBcH/lWVBPqVxps17dlXt5EARFXbn5gAwBHGcFup+8PStPXGY6FfgoQPIfnI9Kcd0TLZnjI/wCPgf8AXx/7TqEf8e4/64J/6FU4A+0D5v8Alv6f9M6hAH2cfN/ywTt/tV7FzxrEo/4+B/13b/0Col/1K/8AXGH/ANCqYAfaB83/AC3bt/sVEoHkr8w/1UXb/aoCxKv+sH/Xd/5GoF/1C/8AXGH/ANCqwoG8fN/y3ft7GoVA8hfmH+pi7f7VFwHj/Wj/AK6yfypi/wCrX/cg/wDQqkAHmj5v+Wknb2pigeWvzD7kHb/aoAcn+tX/AHpf51HH/wAe0f8A1zh/9CNSqB5i/N/FL296jiA+zx/MP9XD2/2jSe5SXuv5fqO/i/GatG11l7XRbrTBAjJcmEs5bleR2/Cs/A3fe7zdqQAcfMP+WPb3oaUtxRbjqjt/A2s3paazkkD2tvBK8ce0DBD+uM9zUFr4nvtY8V2Jy9tEGjUwxysVbJOcjiuPIAU/Pj5Z/X+9SsBvPzd4f51k6MW2+5sq8kkux7Db+ILOa5ubKHzDcWsbM4ZcA7eDg/U1maF42g1S5W0uYDDcu4VAmWUgjPJ7d64vw/q9vo9zdS3AkcSwzoNgyc7ge9VdGvYtO1qC7l3NHHJGSFHPII/rWH1dWZv9Zd4/ier6trlnoohN2ZB5pIXYm7pjP860q8S1G8ju9WuL1Wfy3aaQBuoG8V63pGtQazbPPaxShEfYd+Ac4B9fesqtHkimbUq3PJovyfdH+8P50+opGbaP3Z+8O49azpfEFtDrcektFN9okAIIA28gnrn2rFJvY2bS3Lt39+2/67D+RoptyzF7bKEfvh3HoaKQy3RRRQBHPClxC0UgJRhg4ODWTrUSQ6eYybiY3DrAIzOUBLHHJwcD8K2qiuLeC7gaG4hSWJvvI6hgfwNAHM2HhHw9f2FtfR2cyrOizqGnfI3L9fQ4qf8A4QPw/t2/ZJMbQv8Ar36D8a6NVVEVEUKqjAAGABS1ftJ92R7OHZHOf8INoG7d9llzu3f69+uMetNPgTQAhC2khIUAA3DjpyB1rpaQgMpUjIIwRR7Sfdh7OHZHmz2vh+G3hupdJnVBH50ypeMSpYuox/e5RvTGRWxpfhPQb+2kL6fJDJE/kuguncAryMHIyOR2rpYtH02ARCKwtkEIYR7YgNm7rj0zVi3toLOBYLaGOGJeiRqFA/AUe0n3Yezh2Rg/8ILoGc/ZZc5J/wBe/U9e9J/wgnh8DH2WXGFH+vft0710lUdUv2sIYTHGryTzLCm9tqgnPLHB44/E4Hej2k+7D2cOyOc1XwpoemWD3aWDSlCTsN3IpYnsvXLE4AHcmsaXT9AgkkhXR52OWEKtesMrEZN2f7uDG2Oucjkduh/t+w1ezAutLM/l3Ai2koy+f0G0sRxg5DYAwfXim3mr6DG0qSaUs0krkyp5UeWKGQZbJAOPKfH196PaT7h7OHZEkPgrw9PBHMlrNtkXeMzvn5hk96f/AMIJ4f8A+fWXt/y3ft070Hxpp4aVIoLmXyjk7FXBUK7FhkjgeU4x1yMVaHia1xExgnCTzGGBsL+9cNtwBnI7nnHCk0e0n3Yezh2RV/4QTw//AM+sv8X/AC3fv171j63oWhaNNCH0qaWOYYVxdSD51BKqe3b1z14IBrvKrTafZXM3nT2kMsmwpueME7T1HPbk/nR7Sfdh7OHZHC2GkaBeX0dm2lzKTI9vJIbxjiXDlgBxlT5Z+bjtxXQf8ILoGc/ZZeoP+vft071tRadZQSxyw2kEckaeWjLGAVX0B9Ks0e0n3Yezh2Rzf/CCeH8Y+yy4wR/r36Hr3rRsdCs9NhaKzM8SM24gTMcnGO59hWnRSc5PRsahFapHGSeJ7WS6u4Lc3EotZCWZbsZKKAWbGDznIA74zkVa0u30/WdSe+a3njuolSSOU3DElG3BSR0B4bI5x610Eun2U775rSCR9wfc0YJ3DofqKfBaW9qZDbwRReYxd9ihdzHucdTSTa2G0nuMFmgkR2kmcodwDSEjNFWaKQwooooAKKKKACiiigAooooAKKKKACmSwxXETRTRpJG33kdQQfqDRRQBC2n2TghrO3YFBGcxKcqOi9Og9Kjm0jTp5FeWxt2YP5mTGOWwRk+vDHrRRQBKLGzV3cWsAaQkuRGMsTkc+vU/maa2m2bXEc/2dBJHIZQVGMuQV3EDqcEjJ9aKKALVFFFABRRRQAUUUUAFFFFABRRRQB//2Q==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACFAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAoqvfO8djM6NtYLwfSo5rfyomka8nVVGSS4AA/KgDn9V1jVEvtStoLrT7ZLZ4SjSyhHKMuW+8CvXODjtWnca35Hhy11NIiftAh2/aD5YTzCoy5AO0Ddk0kd1pV3eG1j1RZp8fdEiscDn0qddFjF29z9uv2Lggo1yzR8/wCwfl/Si1gvcxI/GjyW09x9kgUQQeYY2uMPKefmT5eY+M7vTJxxU83i0W0qwSraSTMIink3G5ZN5kB28c42frW59hXIPnzZAwDkcD8qZJpsTRFGklKkFcAgcHsOOKAOTf4hGLSxdtaW7thZCIrnKFDGHIDEAbxkDb15GPa/N4tuIHcSWUCo8skcMjTkKAk/klpDt+Ucg8Z9K2o9MjggigiaZYo8BV3LgADHpUps8ggyzkHIILL/AIUAc3c+L7m0vTbLaJcs0pAZZ1WPAjhYhGIGSTISM+h/Cz/wklzc6Hrs8McEd5p8UjIm8yKMKxUkgYOdvQE++K2TaJkK00vHzAFl4x36UC1RUyJ5Qrns64Yn8Oc0Ac3/AMJbeWrvZvbQ3FzFiIkz4YuGjUs4CfKpMmQQOcdOeNLVdSuYNStLOW+g02N7d5XuHAKvIpUbAWwMck+pHpzWl9mX538+bjhm3rxjnnilazLkBpZ2Xrgsp57dqAOXn8aXEl/NaWsdqoiuI086WT5ShlMbZA5U5HGfX83w+N551dv7PhgUzeWklxdBVTiQkSYBKn93gcdWA7V0psQd2XmO7rkrz9eKgu9Ggvrd4Lh7oxyEFwkuwtj1K4NAHPL47le3EqafCWaFXWL7R84YxpJkjbwnz7Q3qOnNbdhrVxc63NpU1qiT26GSdkclQpx5ZGQM7vn+mw1aWxhtokQSSRxooRRuUAKBwOnQUkWlRwXE88clyJZyDI5kyWwMAc9APQccn1oAyPD+vXV7cXf2qSORI4POdUTBt23upjOOScKOvPX1FUYPHdxdWsssOnwMYVlkk/0jgokaScEA8kPjB6Ec103lJGzE3cqgnH+sUZb/AB6U5bRBlVmlGDggMvGfwoAyNL8Qz6n4lezxDHbpDOfKEm6QMkqoC4x8ueSBk5BrM0rxJqc1rp08tzbP9puhHN5roAilJG+UJyCSoADc9q6qa08uKSRbicPj72Rn+VOGnRrnEkgycnG3k/lQO2lzJ0HxMuvWV/IRHa/Z8YlEisu1k3Kx9CAeQfxqx4Y1G41LTZpLmRJHiuJIg67TuUHjlflJweo47dQaviwUAgTzAHqARz+lJHZ4BVbidVU4ADAAfpQIuUVSlieBoWW4mbMiqQzAgg/hRQBdoorntZ1i6sdUa3gkjIa08wKYixjIkVS3B5AUscf7NAGvqP8AyD5uM/LUOuf8gG//AOuD/wAjWZBPqNxp0l7cFTC8O0J93cQ5AcAjgFcHGe9aOtl/7Cv8qAPIfnPtTjuhS2Z4wADMARx57f8AoFd94R8Xq8CWmqTxowjhWALE3OcjkjPoK4NQvnj5v+W7dv8AYpkLmGNZY5CrpDGysB0IJwa9SrTU1Znk0qkqbuj3qmv0H1H865Hwn4o+3Y0+5eae93v+8ZQBgDOMj29q60lyMGMfnXmTg4OzPVhNTV0NMTk58+Qc9ML/AIUqxsrZMzsPQgf0FMcHKful+960/B/55L+dTYvmZz+teGTquqi6EmyMwlJBvwZDsdQv3TgfPk8kHA+U1WuPCt3caBFpzXMYkR3dZgf9WZC+7C7cfKGAXAXpxtrqcH/nkv50YP8AzyX86BHIT+C53mupI7hVSUuqRtIcKGWUbiQBubMnQ54XGav32j6l/Z0FnaXDti7d9zXEi7Yij4BYHccMV49h2roMH/nkv50wg+Yv7peh7/SgDnY/Dmr+bKZtauH3SFw4lYfwuF+QAAYLKcZIO2kl8PavK6ldTkgT7OYvLjunIV/my2SMtncD1BG0YzXTYP8AzyX86MH/AJ5L+dAHLXHhW9le523ilZlZAZJHYhf3oVSDnOBInPX5a0tJ0rULK5lkur6S5DzFwWmbAX5sYXAA6gYyRxmtfB/55L+dGD/zyX86AMFvD8k4voJ4rNbe41BLrCgsdgC7hjAwzbOf941NoejXGkNe+dcCVJpN69SxJdmLEnoSGUY6fLnvWqAfNb90vQd/rT8Ef8sl/OgBLn/j2k+lS1XuS/2aT5B09al3P/cH/fVLqV9kfTE6v/vUbn/uD/vqmoz5f5B97+9TJI7zpD/12T+dFNuyxEGVwPOXv70UAW6KjaeJJUieVFkkzsQsAWx1wO9SUAVNT/5B030H86i1z/kA3/8A1wf+RqbUeNPm5x8vWodc/wCQDf8A/XB/5GnHdClszxdf9eP+u7f+gVCP+Pb/ALd4/wCZqZf9eP8Aru3/AKBUI/49v+3eP+Zr2TxEX7DULnTdRFxaOEl81lyVB4Ke9et6FrNtrFhE8Nwk0yxIZtoIwxH+INeNj/j5H/Xdv/QKvaLr99oahrR12NFCXRlBD8kYz1HXtXPXo86utzow9b2bs9j2eTqn+9T6ydE1R9Y0qG8kiWNmkZSqnI4JFa1ec007M9NNNXQUUUUhhTD/AK1fof6U+mH/AFq/Q/0oAfRRRQAUUUUANH+tb/dH9adTR/rW/wB0f1p1AEV1/wAe0n0qWobr/j2k+lTUupX2UFMTq/8AvU+mJ1f/AHqZJDedIf8Arsn86KLzpD/12T+dFAGF4s8h2tILm2W6jcNshaTA8wFdrMAQSo5zjOMjitOXU7LSmFlIZx5UAkUlWfcu4KAD/E2Sox15FZHi95oLnTp4gAFMis+9025AwSVI+XIBI9q2L7RLbULv7RNJPuERiCq+FA3BsjjqCqnPtQBXbWba/t7mOH7qxByzEDaSSNrDqDkHirOuOp0K/AYZ8h+/tTZ7KGy0R7eEHao6scliWyST3JJJp+uAf2Df8D/UP/KnHdClszxhVPnjg/69u3+xUIVvs33T/wAe8fb3NSgnzxz/AMt2/wDQKiBP2bqf+PeP+Zr2DxSYKftA4P8Ar27f7FQqreQvyn/Uxdv9qpgT9oHP/Ldv/QKhUnyF5P8AqYv/AEKgDq/B+qvaawsV1etFZBpPkkkwgOM9+K9PWWN1DLIpUjIIPUV4WpPndf8AlrJ/6DXe+FvGMDWgh1e5t4CqRCIhCAQRjk8jsPSuLE0nfmR3YasrcjO43p/fX86N6f31/Oo7a4tryETW0sc0RJAdCCOKl2j0FcZ2ib0/vr+dNLp5q/MvQ9/pT9o9BTSo81eB0P8ASgBd6f31/Ojen99fzpdo9BRtHoKAE3p/fX86N6f31/Ol2j0FG0egoAYHTzW+Zfujv9advT++v50gUea3A+6P607aPQUAQ3MifZpPnXp61LvT++v51HcqPs0nA6VLtHoKXUr7Im9P76/nTEdMv8y/e9ak2j0FMRRl+B96mSQ3bqRAAwJ85e/vRS3gAEHA/wBcv86KAOd8ZGQyWUSTKgdZflYjBIAOXBOCgAbPXtwa6iJWSJFdzI4ABcgDcfXArl/ESm61yxikspJIYfm8w2Uk6fN7oRjG3GDkHdyOK6ugCrqP/IPm+npnvUOuf8gG/wD+uD/yNTagwNjOoYbgvI7iodc/5AN//wBcH/kacd0KWzPF1/14/wCu7f8AoFQj/j2/7d4/5mpl/wBeP+u7f+gVCP8Aj2/7d4/5mvZPERMP+Pkf9d2/9AqFf9Qv/XGL/wBCqYf8fI/67t/6BUK/6hf+uMX/AKFQBOv+u/7ayf8AoNQr/ql/65wf+hVMv+u/7ayf+g1Cv+qX/rnB/wChUDO/8C67K0y6OYE8tWkYSbjn16fjXfV4vomrvouqfakhWVi8ibWbb2/+tW/4T8WRWTSpqc9y3n+Uyu77ljzkckngdOlcNeg+ZyijuoV0oqMmek0w/wCtX6H+lMtrqC8gWe2lSWJs4dDkHHFPP+tX6H+lcZ2j6KKKACiiigBo/wBa3+6P606mj/Wt/uj+tOoAiuf+PaT6VLUV1/x7SfSpaXUr7IUxOr/71PpidX/3qZJDedIf+uyfzoovOkP/AF2T+dFAFmud1nT9QudUaS0jYRPaGN38/aGPmK23HbKhhu/2q6KigDnodNnstIllmlb7Q8SoyZDBFDsVG4jJIDbcn0q/rasNCvyXJHkPxgelWNSGdPm+n9ah1z/kA3//AFwf+Rpx3QpbM8YUjzx8o/17d/8AYqIEfZvuj/j3j7+5qRf9eP8Aru3/AKBUI/49v+3eP+Zr2LHi3JwR9oHy/wDLdu/+xUSkeQvyj/Uxd/8AaqQf8fI/67t/6BUK/wCoX/rjF/6FQFywpHnfd/5ayd/9moVI8pflH+rh7/7VSr/rv+2sn/oNQr/ql/65wf8AoVFguTAjzh8v/LV+/wDs1EpHlL8o/wBXD3/2qeP9cP8Ars//AKDUa/6pf+uUP/oVFgueh2OtvoXg2yuEh83zJpE2ltuOWOc4PpXYxM0yQy7iN8e7GBxnFeI+bIcRmVzGHlwhY7R+HSui8Ja9qFvqNtZiXzIZmhVvNyxAOQcEnjpXHVw+jkvM7aOI1UX5HqW1v+eh/IUbW/56H8hT6K4juGbW/wCeh/IUbW/56H8hT6KAIgrea37w/dHYe9O2t/z0P5ClH+tb/dH9adQBXuVb7NJ+8PT0FS7W/wCeh/IU26/49pPpUtLqV9kZtb/nofyFNRWy/wC8P3vQVLTE6v8A71Mkr3asBBlyf3y8YHrRTrzpD/12T+dFAFmiisLVtdl02/a3CQMptvNTc5BDeYqZb/Z+fOfY0Aaeo/8AIPmyCfl7VDrn/IBv/wDrg/8AI1mQalf31jPczwoto0ZVDHzlg23IOckEhj06bfetHW3zoV+Nrf6h+3tTjuhS2Z4yv+vH/Xdv/QKhH/Ht/wBu8f8AM1OF/fjkf69u/wDsVEF/0b7y/wDHvH39zXsXPFsSD/j5H/Xdv/QKhX/UL/1xi/8AQqsBf9IHI/157/7FQqv7hfmX/Uxd/wDaouFiVf8AXf8AbWT/ANBqFf8AVL/1zg/9CqdV/fdR/rX7/wCzUKr+6X5l/wBXD3/2qLhYeP8AXD/rs/8A6DUa/wCqX/rlD/6FUwX98OR/rn7/AOzUSr+6X5l/1UPf/aouFh4+/wD8DlrS8Nf8h+w/66W/8zWcF+fqPvy96u6JPFZ6raXE7hYo2gZiOcDJqZ/CyqekkdSmvjS/Gt699c3Btt0ihAWYA8Y+X8DRc+I49W8XaY2n3NwLfMQdCWQHLnqO/FcxrVxFe63cXMDhopJZSpPGeKZok8Vnq1nczuFijMDMRzgZNY+xjy83W36G/tpc3L0v+p7ZVa/voNNspLu5LCKPG7aMnkgDj8ax/wDhN9A/5/G7/wDLJu3XtWV4j8VaPqOhXFrbXRaZzHtBjYfxA9SPauKNKTaTTO2VWKi2mjq7C9h1G3S7tyxikUFSwwepHT8Kt1xXh3xTpFho1tbXFyVlRWBAjY9HOeg9xXSS65YQ30NnJKwuJgDGmw8g9OfwpSg07WHComk7keu6zZ6PaKbtnAlyF2IW6fStQHIBHQ1w/wAR2BsLQkFQDIefoK6nTNXs9UtzJZu0qoQrHYRg4z3ocLRUkUp3bizQpidX/wB6jzP9hvyrPbWrGDUl0+SRlupCCqbDznpz07GpSb2G2luWrzpD/wBdk/nRTbt8iAbWH75eo96KQy3UT20EkvmvBG0hXZuKAnb6Z9KlooAhmtkmtWt/uIV2jYB8vpisvWw0WmvFLc3Mn2g+SscUaFmLA8DOB0B6ntW1Ve8sre/g8m4QsgYMNrFSCOhBBBB+lAHJWvgLR7u3hu4b2+McoEyElBkMvH8Poaf/AMK30rZt+2X2NgT7ydB0/hrr4oo4IUhiQJHGoVVHQAcAU+tPbVO5l7Gn2OP/AOFdaZv3fbL3O4v95OuMf3aaPhvpQUL9svsBVX7ydAcj+Guyoo9tU7h7Gn2PN7rw3olrqMtqZtUM8brtXMX74vtGEzjP3hk9BzWhZ+AtGvbGC5gvL8xSxIyZKA4HIz8vWuputGsb2cz3EcjyYwp85xs5ByuD8pyq8jB4q3BBFa28dvAgSKJQiKOgAGAKPbVO4/Y0+xyf/CutL3bvtl7ncW+8nUjH92kHw30oKF+2X2Aqr95OinI/hrsaqahfrYQxuY3leWRYo40xlmPQZPA7n8KPbVO4vY0+xzEnw70xEZxc37su5gqtHliewyuKwX0Xw5FDBK1xqqwyW8UxOIztyrOinj7xCN0yOnIrto/Een3VtLn7SjKxhkRY2LLJnaUBXPzZ9D056VnSx+F7aGGKSOV1SNrdI8TSHavmKQRySVAkGTyBnFHtqncfsafYo2HgbSL62E8dzqCbZJEZHaPcrBirA4UjqD0NWP8AhXGlgY+2X3RR95P4Tkfw1pQa/oOnwvbQXDERNlgqPIxLBnLE4JOQrkn2NXP7f07GfOYKWKI5jba7AgEKcfNyccUe2qdxexp9jB/4Vzpf/P5ffxfxJ/F1/hqrqPgbSNN0+e9kn1KSOFVdljaPdhe/IA4613dV72zh1CyltLkM0Mq7XCuVJHcZBBo9tU7h7Gn2PPpfDeiQX1xamXVGlhcRpGDEGlaQgnbnGRyOTgDB5rp49CtNUmsNZS9uSyxRtCcIBt6rkbfetGbQ7C4cyTJLI+0KrtO5KYIPynPynKgkjGcc1ehhjt4I4IUCRRqERR0UAYApOpN7spU4LZGNrPhqHXYEhvby52pnHlhB1GD/AA1JpPh9NFgeG0vLjY7bjvCE5wB/d9q2KKXM7WvoVyq9+pl6jcS6bAs0k9zJGXCsY0j+XJABwcE8kcDJ9q5ie40yXV11SWfUTcRDzE2xxhfJXd+8x3Xhvf2rsbzTre/a3acSE28nmR7JGXDYxngjPU9aqHw3pJzm16tuP7xvf5ev3eT8v3eelJNrYGk9y2bSRnQyXUjqrBtu1Rkj6CirVFIYUUUUAFFFFABRRRQAUUUUAFFFFABUN1aQXsBhuIw6ZDYyQQQcggjkEHuKKKAKY8P6WqFVtQikLkI7LyDkNwfvcfe6+9RXHhjSrmYSvbsG3722yMN3DDB54HzsTjGSee9FFAEieHtJjeR0sowZMhsE4wQwIAzgD536f3jQ+gWDS27LGUWC4+0rGDlfMwQDg9PvE8Y5oooA06KKKACiiigAooooAKKKKACiiigD/9k=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "occupancy_variables = ['md_occupancies', 'sg_occupancies', 't3_occupancies', 't5_occupancies']\n", + "percents = [99.99, 99.9, 99.9, 99.99]\n", + "compute_occupancies(branches, occupancy_variables, occ_percentiles=percents, plot=False) # To print\n", + "compute_occupancies(branches, occupancy_variables, occ_percentiles=percents, plot=True) # To plot" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/RecoTracker/LSTCore/standalone/bin/lst.cc b/RecoTracker/LSTCore/standalone/bin/lst.cc index 369680bc4309e..17eb4a54628d6 100644 --- a/RecoTracker/LSTCore/standalone/bin/lst.cc +++ b/RecoTracker/LSTCore/standalone/bin/lst.cc @@ -53,6 +53,7 @@ int main(int argc, char **argv) { cxxopts::value()->default_value("trackingNtuple/tree"))( "o,output", "Output file name", cxxopts::value())( "N,nmatch", "N match for MTV-like matching", cxxopts::value()->default_value("9"))( + "p,ptCut", "Min pT cut In GeV", cxxopts::value()->default_value("0.8"))( "n,nevents", "N events to loop over", cxxopts::value()->default_value("-1"))( "x,event_index", "specific event index to process", cxxopts::value()->default_value("-1"))( "g,pdg_id", "The simhit pdgId match option", cxxopts::value()->default_value("0"))( @@ -145,6 +146,10 @@ int main(int argc, char **argv) { } } + //_______________________________________________________________________________ + // --ptCut + ana.ptCut = result["ptCut"].as(); + //_______________________________________________________________________________ // --nmatch ana.nmatch_threshold = result["nmatch"].as(); @@ -308,7 +313,9 @@ void run_lst() { // Load various maps used in the lst reconstruction TStopwatch full_timer; full_timer.Start(); - auto hostESData = lst::loadAndFillESHost(); + // Determine which maps to use based on given pt cut for standalone. + std::string ptCutString = (ana.ptCut >= 0.8) ? "0.8" : "0.6"; + auto hostESData = lst::loadAndFillESHost(ptCutString); auto deviceESData = cms::alpakatools::CopyToDevice>::copyAsync(queues[0], *hostESData.get()); float timeForMapLoading = full_timer.RealTime() * 1000; @@ -388,7 +395,7 @@ void run_lst() { full_timer.Start(); std::vector events; for (int s = 0; s < ana.streams; s++) { - LSTEvent *event = new LSTEvent(ana.verbose >= 2, queues[s], &deviceESData); + LSTEvent *event = new LSTEvent(ana.verbose >= 2, ana.ptCut, queues[s], &deviceESData); events.push_back(event); } float timeForEventCreation = full_timer.RealTime() * 1000; diff --git a/RecoTracker/LSTCore/standalone/bin/lst_make_tracklooper b/RecoTracker/LSTCore/standalone/bin/lst_make_tracklooper index 7686b3df42bf5..0c3c9be329e91 100755 --- a/RecoTracker/LSTCore/standalone/bin/lst_make_tracklooper +++ b/RecoTracker/LSTCore/standalone/bin/lst_make_tracklooper @@ -28,7 +28,6 @@ usage() echo " -G GPU (CUDA) backend (Compile for CUDA)" echo " -R ROCm backend (Compile for ROCm)" echo " -A All backends (Compile for all backends, including ROCm)" - echo " -P PT Cut Value (In GeV, Default is 0.8, Works only for standalone version of code)" echo " -w Warning mode (Print extra warning outputs)" echo exit @@ -47,7 +46,6 @@ while getopts ":cxgsmdp3NCGRA2ehwP:" OPTION; do R) ROCMBACKEND=true;; A) ALLBACKENDS=true;; w) PRINTWARNINGS=true;; - P) PTCUTVALUE=$OPTARG;; h) usage;; :) usage;; esac @@ -64,7 +62,6 @@ if [ -z ${CUDABACKEND} ]; then CUDABACKEND=false; fi if [ -z ${ROCMBACKEND} ]; then ROCMBACKEND=false; fi if [ -z ${ALLBACKENDS} ]; then ALLBACKENDS=false; fi if [ -z ${PRINTWARNINGS} ]; then PRINTWARNINGS=false; fi -if [ -z ${PTCUTVALUE} ]; then PTCUTVALUE=0.8; fi # Default to only CPU and CUDA backends if [ "${CPUBACKEND}" == false ] && [ "${CUDABACKEND}" == false ] && [ "${ROCMBACKEND}" == false ]; then @@ -101,7 +98,6 @@ echo " CPUBACKEND : ${CPUBACKEND}" | tee -a ${LOG} echo " CUDABACKEND : ${CUDABACKEND}" | tee -a ${LOG} echo " ROCMBACKEND : ${ROCMBACKEND}" | tee -a ${LOG} echo " PRINTWARNINGS : ${PRINTWARNINGS}" | tee -a ${LOG} -echo " PTCUTVALUE : ${PTCUTVALUE} GeV" | tee -a ${LOG} echo "" | tee -a ${LOG} echo " (cf. Run > sh $(basename $0) -h to see all options)" | tee -a ${LOG} echo "" | tee -a ${LOG} @@ -159,8 +155,6 @@ if $PRINTWARNINGS; then PRINTWARNINGSOPT="LSTWARNINGSFLAG=-DWARNINGS" fi -PTCUTOPT="PTCUTFLAG=-DPT_CUT=${PTCUTVALUE}" - if [ -z "${MAXMAKETHREADS}" ]; then MAXMAKETHREADS=32 fi @@ -177,9 +171,9 @@ echo "-------------------------------------------------------------------------- echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 if $SHOWLOG; then - (cd LST && make clean && make ${BACKENDOPT} ${PRINTWARNINGSOPT} ${PTCUTOPT} -j ${MAXMAKETHREADS} ${MAKETARGET} && cd -) 2>&1 | tee -a ${LOG} + (cd LST && make clean && make ${BACKENDOPT} ${PRINTWARNINGSOPT} -j ${MAXMAKETHREADS} ${MAKETARGET} && cd -) 2>&1 | tee -a ${LOG} else - (cd LST && make clean && make ${BACKENDOPT} ${PRINTWARNINGSOPT} ${PTCUTOPT} -j ${MAXMAKETHREADS} ${MAKETARGET} && cd -) >> ${LOG} 2>&1 + (cd LST && make clean && make ${BACKENDOPT} ${PRINTWARNINGSOPT} -j ${MAXMAKETHREADS} ${MAKETARGET} && cd -) >> ${LOG} 2>&1 fi if ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cpu"* ]]) && [ ! -f LST/liblst_cpu.so ]; then @@ -214,9 +208,9 @@ echo "-------------------------------------------------------------------------- echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 if $SHOWLOG; then - make EXES="${EXES}" ${TRACKLOOPERTARGET} ${PTCUTOPT} -j ${MAXMAKETHREADS} 2>&1 | tee -a ${LOG} + make EXES="${EXES}" ${TRACKLOOPERTARGET} -j ${MAXMAKETHREADS} 2>&1 | tee -a ${LOG} else - make EXES="${EXES}" ${TRACKLOOPERTARGET} ${PTCUTOPT} -j ${MAXMAKETHREADS} >> ${LOG} 2>&1 + make EXES="${EXES}" ${TRACKLOOPERTARGET} -j ${MAXMAKETHREADS} >> ${LOG} 2>&1 fi if ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cpu"* ]]) && [ ! -f bin/lst_cpu ]; then diff --git a/RecoTracker/LSTCore/standalone/code/core/AnalysisConfig.h b/RecoTracker/LSTCore/standalone/code/core/AnalysisConfig.h index 8608bc95ed2fa..6d0da61bf2395 100644 --- a/RecoTracker/LSTCore/standalone/code/core/AnalysisConfig.h +++ b/RecoTracker/LSTCore/standalone/code/core/AnalysisConfig.h @@ -46,6 +46,9 @@ class AnalysisConfig { // pt binning options int ptbound_mode; + // pt cut + float ptCut; + // pdg id of the particles to compute efficincies on int pdg_id; diff --git a/RecoTracker/LSTCore/standalone/code/core/trkCore.cc b/RecoTracker/LSTCore/standalone/code/core/trkCore.cc index ffb2e7de205ac..e480aa3608a4b 100644 --- a/RecoTracker/LSTCore/standalone/code/core/trkCore.cc +++ b/RecoTracker/LSTCore/standalone/code/core/trkCore.cc @@ -291,7 +291,8 @@ std::vector matchedSimTrkIdxs(std::vector hitidxs, std::vector hi //___________________________________________________________________________________________________________________________________________________________________________________________ std::vector matchedSimTrkIdxs(std::vector hitidxs, std::vector hittypes, - bool verbose) { + bool verbose, + float *pmatched) { if (hitidxs.size() != hittypes.size()) { std::cout << "Error: matched_sim_trk_idxs() hitidxs and hittypes have different lengths" << std::endl; std::cout << "hitidxs.size(): " << hitidxs.size() << std::endl; @@ -425,6 +426,7 @@ std::vector matchedSimTrkIdxs(std::vector hitidxs, } int maxHitMatchCount = 0; // ultimate maximum of the number of matched hits std::vector matched_sim_trk_idxs; + float max_percent_matched = 0.0f; for (auto &trkidx_perm : allperms) { std::vector counts; for (auto &unique_idx : unique_idxs) { @@ -436,10 +438,18 @@ std::vector matchedSimTrkIdxs(std::vector hitidxs, int trkidx = unique_idxs[rawidx]; if (trkidx < 0) continue; - if (counts[rawidx] > (((float)nhits_input) * 0.75)) + float percent_matched = static_cast(counts[rawidx]) / nhits_input; + if (percent_matched > 0.75f) matched_sim_trk_idxs.push_back(trkidx); maxHitMatchCount = std::max(maxHitMatchCount, *std::max_element(counts.begin(), counts.end())); + max_percent_matched = std::max(max_percent_matched, percent_matched); } + + // If pmatched is provided, set its value + if (pmatched != nullptr) { + *pmatched = max_percent_matched; + } + std::set s; unsigned size = matched_sim_trk_idxs.size(); for (unsigned i = 0; i < size; ++i) @@ -701,7 +711,7 @@ void addInputsToLineSegmentTrackingPreLoad(std::vector> &out_ float eta = p3LH.Eta(); float ptErr = trk.see_ptErr()[iSeed]; - if ((ptIn > PT_CUT - 2 * ptErr)) { + if ((ptIn > ana.ptCut - 2 * ptErr)) { TVector3 r3LH(trk.see_stateTrajGlbX()[iSeed], trk.see_stateTrajGlbY()[iSeed], trk.see_stateTrajGlbZ()[iSeed]); TVector3 p3PCA(trk.see_px()[iSeed], trk.see_py()[iSeed], trk.see_pz()[iSeed]); TVector3 r3PCA(calculateR3FromPCA(p3PCA, trk.see_dxy()[iSeed], trk.see_dz()[iSeed])); @@ -722,7 +732,7 @@ void addInputsToLineSegmentTrackingPreLoad(std::vector> &out_ PixelType pixtype = PixelType::kInvalid; if (ptIn >= 2.0) { pixtype = PixelType::kHighPt; - } else if (ptIn >= (PT_CUT - 2 * ptErr) and ptIn < 2.0) { + } else if (ptIn >= (ana.ptCut - 2 * ptErr) and ptIn < 2.0) { if (pixelSegmentDeltaPhiChange >= 0) { pixtype = PixelType::kLowPtPosCurv; } else { diff --git a/RecoTracker/LSTCore/standalone/code/core/trkCore.h b/RecoTracker/LSTCore/standalone/code/core/trkCore.h index e1ff0a00bd002..912143b052d9f 100644 --- a/RecoTracker/LSTCore/standalone/code/core/trkCore.h +++ b/RecoTracker/LSTCore/standalone/code/core/trkCore.h @@ -34,7 +34,8 @@ float runpT3(LSTEvent *event); std::vector matchedSimTrkIdxs(std::vector hitidxs, std::vector hittypes, - bool verbose = false); + bool verbose = false, + float *pmatched = nullptr); std::vector matchedSimTrkIdxs(std::vector hitidxs, std::vector hittypes, bool verbose = false); int getDenomSimTrkType(int isimtrk); int getDenomSimTrkType(std::vector simidxs); diff --git a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc index 1da3099947c79..deed88f833a00 100644 --- a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc +++ b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.cc @@ -1,3 +1,7 @@ +// to use computeRadiusFromThreeAnchorHits +#include "LSTEvent.h" +#include "Triplet.h" + #include "write_lst_ntuple.h" using namespace ALPAKA_ACCELERATOR_NAMESPACE::lst; @@ -72,6 +76,8 @@ void createOptionalOutputBranches() { ana.tx->createBranch>("pT5_eta"); ana.tx->createBranch>("pT5_phi"); ana.tx->createBranch>("pT5_isFake"); + ana.tx->createBranch>("t5_sim_vxy"); + ana.tx->createBranch>("t5_sim_vz"); ana.tx->createBranch>("pT5_isDuplicate"); ana.tx->createBranch>("pT5_score"); ana.tx->createBranch>("pT5_layer_binary"); @@ -118,6 +124,7 @@ void createOptionalOutputBranches() { ana.tx->createBranch>("t5_isDuplicate"); ana.tx->createBranch>("t5_foundDuplicate"); ana.tx->createBranch>("t5_pt"); + ana.tx->createBranch>("t5_pMatched"); ana.tx->createBranch>("t5_eta"); ana.tx->createBranch>("t5_phi"); ana.tx->createBranch>("t5_score_rphisum"); @@ -126,17 +133,65 @@ void createOptionalOutputBranches() { ana.tx->createBranch>("t5_moduleType_binary"); ana.tx->createBranch>("t5_layer_binary"); ana.tx->createBranch>("t5_matched_pt"); - ana.tx->createBranch>("t5_partOfTC"); ana.tx->createBranch>("t5_innerRadius"); ana.tx->createBranch>("t5_outerRadius"); ana.tx->createBranch>("t5_bridgeRadius"); ana.tx->createBranch>("t5_chiSquared"); ana.tx->createBranch>("t5_rzChiSquared"); ana.tx->createBranch>("t5_nonAnchorChiSquared"); + ana.tx->createBranch>("t5_dBeta1"); + ana.tx->createBranch>("t5_dBeta2"); + + // Occupancy branches + ana.tx->createBranch>("module_layers"); + ana.tx->createBranch>("module_subdets"); + ana.tx->createBranch>("module_rings"); + ana.tx->createBranch>("module_rods"); + ana.tx->createBranch>("module_modules"); + ana.tx->createBranch>("module_isTilted"); + ana.tx->createBranch>("module_eta"); + ana.tx->createBranch>("module_r"); + ana.tx->createBranch>("md_occupancies"); + ana.tx->createBranch>("sg_occupancies"); + ana.tx->createBranch>("t3_occupancies"); + ana.tx->createBranch("tc_occupancies"); + ana.tx->createBranch>("t5_occupancies"); + ana.tx->createBranch("pT3_occupancies"); + ana.tx->createBranch("pT5_occupancies"); + + // T5 DNN branches + createT5DNNBranches(); #endif } +//________________________________________________________________________________________________________________________________ +void createT5DNNBranches() { + // Common branches + ana.tx->createBranch>("t5_t3_idx0"); + ana.tx->createBranch>("t5_t3_idx1"); + ana.tx->createBranch>("t5_tc_idx"); + ana.tx->createBranch>("t5_partOfTC"); + ana.tx->createBranch>("t5_t3_pt"); + ana.tx->createBranch>("t5_t3_eta"); + ana.tx->createBranch>("t5_t3_phi"); + + // Hit-specific branches + std::vector hitIndices = {"0", "1", "2", "3", "4", "5"}; + std::vector hitProperties = {"r", "x", "y", "z", "eta", "phi", "detId", "layer", "moduleType"}; + + for (const auto& idx : hitIndices) { + for (const auto& prop : hitProperties) { + std::string branchName = "t5_t3_" + idx + "_" + prop; + if (prop == "detId" || prop == "layer" || prop == "moduleType") { + ana.tx->createBranch>(branchName); + } else { + ana.tx->createBranch>(branchName); + } + } + } +} + //________________________________________________________________________________________________________________________________ void createGnnNtupleBranches() { // Mini Doublets @@ -284,10 +339,74 @@ void setOptionalOutputBranches(LSTEvent* event) { setPixelQuintupletOutputBranches(event); setQuintupletOutputBranches(event); setPixelTripletOutputBranches(event); + setOccupancyBranches(event); + setT5DNNBranches(event); #endif } +//________________________________________________________________________________________________________________________________ +void setOccupancyBranches(LSTEvent* event) { + auto modules = event->getModules(); + auto miniDoublets = event->getMiniDoublets(); + auto segments = event->getSegments(); + auto triplets = event->getTriplets(); + auto quintuplets = event->getQuintuplets(); + auto pixelQuintuplets = event->getPixelQuintuplets(); + auto pixelTriplets = event->getPixelTriplets(); + auto trackCandidates = event->getTrackCandidates(); + + std::vector moduleLayer; + std::vector moduleSubdet; + std::vector moduleRing; + std::vector moduleRod; + std::vector moduleModule; + std::vector moduleEta; + std::vector moduleR; + std::vector moduleIsTilted; + std::vector trackCandidateOccupancy; + std::vector tripletOccupancy; + std::vector segmentOccupancy; + std::vector mdOccupancy; + std::vector quintupletOccupancy; + + for (unsigned int lowerIdx = 0; lowerIdx <= modules.nLowerModules(); lowerIdx++) { + //layer = 0, subdet = 0 => pixel module + moduleLayer.push_back(modules.layers()[lowerIdx]); + moduleSubdet.push_back(modules.subdets()[lowerIdx]); + moduleRing.push_back(modules.rings()[lowerIdx]); + moduleRod.push_back(modules.rods()[lowerIdx]); + moduleEta.push_back(modules.eta()[lowerIdx]); + moduleR.push_back(modules.r()[lowerIdx]); + bool isTilted = (modules.subdets()[lowerIdx] == 5 and modules.sides()[lowerIdx] != 3); + moduleIsTilted.push_back(isTilted); + moduleModule.push_back(modules.modules()[lowerIdx]); + segmentOccupancy.push_back(segments.totOccupancySegments()[lowerIdx]); + mdOccupancy.push_back(miniDoublets.totOccupancyMDs()[lowerIdx]); + + if (lowerIdx < modules.nLowerModules()) { + quintupletOccupancy.push_back(quintuplets.totOccupancyQuintuplets()[lowerIdx]); + tripletOccupancy.push_back(triplets.totOccupancyTriplets()[lowerIdx]); + } + } + + ana.tx->setBranch>("module_layers", moduleLayer); + ana.tx->setBranch>("module_subdets", moduleSubdet); + ana.tx->setBranch>("module_rings", moduleRing); + ana.tx->setBranch>("module_rods", moduleRod); + ana.tx->setBranch>("module_modules", moduleModule); + ana.tx->setBranch>("module_isTilted", moduleIsTilted); + ana.tx->setBranch>("module_eta", moduleEta); + ana.tx->setBranch>("module_r", moduleR); + ana.tx->setBranch>("md_occupancies", mdOccupancy); + ana.tx->setBranch>("sg_occupancies", segmentOccupancy); + ana.tx->setBranch>("t3_occupancies", tripletOccupancy); + ana.tx->setBranch("tc_occupancies", trackCandidates.nTrackCandidates()); + ana.tx->setBranch("pT3_occupancies", pixelTriplets.totOccupancyPixelTriplets()); + ana.tx->setBranch>("t5_occupancies", quintupletOccupancy); + ana.tx->setBranch("pT5_occupancies", pixelQuintuplets.totOccupancyPixelQuintuplets()); +} + //________________________________________________________________________________________________________________________________ void setPixelQuintupletOutputBranches(LSTEvent* event) { // ============ pT5 ============= @@ -325,6 +444,7 @@ void setPixelQuintupletOutputBranches(LSTEvent* event) { ana.tx->pushbackToBranch("pT5_phi", phi); ana.tx->pushbackToBranch("pT5_layer_binary", layer_binary); ana.tx->pushbackToBranch("pT5_moduleType_binary", moduleType_binary); + ana.tx->pushbackToBranch("pT5_rzChiSquared", pixelQuintuplets.rzChiSquared()[pT5]); pT5_matched_simIdx.push_back(simidx); @@ -393,10 +513,12 @@ void setQuintupletOutputBranches(LSTEvent* event) { moduleType_binary |= (modules.moduleType()[module_idx[i]] << i); } - std::vector simidx = matchedSimTrkIdxs(hit_idx, hit_type); + float percent_matched; + std::vector simidx = matchedSimTrkIdxs(hit_idx, hit_type, false, &percent_matched); ana.tx->pushbackToBranch("t5_isFake", static_cast(simidx.size() == 0)); ana.tx->pushbackToBranch("t5_pt", pt); + ana.tx->pushbackToBranch("t5_pMatched", percent_matched); ana.tx->pushbackToBranch("t5_eta", eta); ana.tx->pushbackToBranch("t5_phi", phi); ana.tx->pushbackToBranch("t5_innerRadius", __H2F(quintuplets.innerRadius()[quintupletIndex])); @@ -404,6 +526,9 @@ void setQuintupletOutputBranches(LSTEvent* event) { ana.tx->pushbackToBranch("t5_outerRadius", __H2F(quintuplets.outerRadius()[quintupletIndex])); ana.tx->pushbackToBranch("t5_chiSquared", quintuplets.chiSquared()[quintupletIndex]); ana.tx->pushbackToBranch("t5_rzChiSquared", quintuplets.rzChiSquared()[quintupletIndex]); + ana.tx->pushbackToBranch("t5_nonAnchorChiSquared", quintuplets.nonAnchorChiSquared()[quintupletIndex]); + ana.tx->pushbackToBranch("t5_dBeta1", quintuplets.dBeta1()[quintupletIndex]); + ana.tx->pushbackToBranch("t5_dBeta2", quintuplets.dBeta2()[quintupletIndex]); ana.tx->pushbackToBranch("t5_layer_binary", layer_binary); ana.tx->pushbackToBranch("t5_moduleType_binary", moduleType_binary); @@ -414,6 +539,21 @@ void setQuintupletOutputBranches(LSTEvent* event) { sim_t5_matched.at(simtrk) += 1; } } + + // Avoid fakes when calculating the vertex distance, set default to 0.0. + if (simidx.size() == 0) { + ana.tx->pushbackToBranch("t5_sim_vxy", 0.0); + ana.tx->pushbackToBranch("t5_sim_vz", 0.0); + continue; + } + + int vtxidx = trk.sim_parentVtxIdx()[simidx[0]]; + float vtx_x = trk.simvtx_x()[vtxidx]; + float vtx_y = trk.simvtx_y()[vtxidx]; + float vtx_z = trk.simvtx_z()[vtxidx]; + + ana.tx->pushbackToBranch("t5_sim_vxy", sqrt(vtx_x * vtx_x + vtx_y * vtx_y)); + ana.tx->pushbackToBranch("t5_sim_vz", vtx_z); } } @@ -498,6 +638,109 @@ void setPixelTripletOutputBranches(LSTEvent* event) { ana.tx->setBranch>("pT3_isDuplicate", pT3_isDuplicate); } +//________________________________________________________________________________________________________________________________ +void fillT5DNNBranches(LSTEvent* event, unsigned int iT3) { + auto hits = event->getHits(); + auto modules = event->getModules(); + + std::vector hitIdx = getHitsFromT3(event, iT3); + std::vector hitObjects(hitIdx.size()); + + for (int i = 0; i < hitIdx.size(); ++i) { + unsigned int hit = hitIdx[i]; + float x = hits.xs()[hit]; + float y = hits.ys()[hit]; + float z = hits.zs()[hit]; + hitObjects[i] = lst_math::Hit(x, y, z); + + std::string idx = std::to_string(i); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_r", sqrt(x * x + y * y)); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_x", x); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_y", y); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_z", z); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_eta", hitObjects[i].eta()); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_phi", hitObjects[i].phi()); + + int subdet = trk.ph2_subdet()[hits.idxs()[hit]]; + int is_endcap = subdet == 4; + int layer = trk.ph2_layer()[hits.idxs()[hit]] + 6 * is_endcap; + int detId = trk.ph2_detId()[hits.idxs()[hit]]; + unsigned int module = hits.moduleIndices()[hit]; + + ana.tx->pushbackToBranch("t5_t3_" + idx + "_detId", detId); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_layer", layer); + ana.tx->pushbackToBranch("t5_t3_" + idx + "_moduleType", modules.moduleType()[module]); + } + + float g, f; + auto const& devHost = cms::alpakatools::host(); + float radius = computeRadiusFromThreeAnchorHits(devHost, + hitObjects[0].x(), + hitObjects[0].y(), + hitObjects[1].x(), + hitObjects[1].y(), + hitObjects[2].x(), + hitObjects[2].y(), + g, + f); + ana.tx->pushbackToBranch("t5_t3_pt", k2Rinv1GeVf * 2 * radius); + + // Angles + ana.tx->pushbackToBranch("t5_t3_eta", hitObjects[2].eta()); + ana.tx->pushbackToBranch("t5_t3_phi", hitObjects[0].phi()); +} + +//________________________________________________________________________________________________________________________________ +void setT5DNNBranches(LSTEvent* event) { + auto triplets = event->getTriplets(); + auto modules = event->getModules(); + auto ranges = event->getRanges(); + auto const quintuplets = event->getQuintuplets(); + auto trackCandidates = event->getTrackCandidates(); + + std::unordered_set allT3s; + std::unordered_map t3_index_map; + + for (unsigned int idx = 0; idx < modules.nLowerModules(); ++idx) { + for (unsigned int jdx = 0; jdx < triplets.nTriplets()[idx]; ++jdx) { + unsigned int t3Idx = ranges.tripletModuleIndices()[idx] + jdx; + if (allT3s.insert(t3Idx).second) { + t3_index_map[t3Idx] = allT3s.size() - 1; + fillT5DNNBranches(event, t3Idx); + } + } + } + + std::unordered_map t5_tc_index_map; + std::unordered_set t5s_used_in_tc; + + for (unsigned int idx = 0; idx < trackCandidates.nTrackCandidates(); idx++) { + if (trackCandidates.trackCandidateType()[idx] == LSTObjType::T5) { + unsigned int objIdx = trackCandidates.directObjectIndices()[idx]; + t5s_used_in_tc.insert(objIdx); + t5_tc_index_map[objIdx] = idx; + } + } + + for (unsigned int idx = 0; idx < modules.nLowerModules(); ++idx) { + for (unsigned int jdx = 0; jdx < quintuplets.nQuintuplets()[idx]; ++jdx) { + unsigned int t5Idx = ranges.quintupletModuleIndices()[idx] + jdx; + std::vector t3sIdx = getT3sFromT5(event, t5Idx); + + ana.tx->pushbackToBranch("t5_t3_idx0", t3_index_map[t3sIdx[0]]); + ana.tx->pushbackToBranch("t5_t3_idx1", t3_index_map[t3sIdx[1]]); + + if (t5s_used_in_tc.find(t5Idx) != t5s_used_in_tc.end()) { + ana.tx->pushbackToBranch("t5_partOfTC", 1); + ana.tx->pushbackToBranch("t5_tc_idx", t5_tc_index_map[t5Idx]); + } else { + ana.tx->pushbackToBranch("t5_partOfTC", 0); + ana.tx->pushbackToBranch("t5_tc_idx", -999); + } + } + } +} + //________________________________________________________________________________________________________________________________ void setGnnNtupleBranches(LSTEvent* event) { // Get relevant information @@ -717,16 +960,16 @@ std::tuple> parseTrackCandidate( float pt, eta, phi; std::vector hit_idx, hit_type; switch (type) { - case lst::LSTObjType::pT5: + case LSTObjType::pT5: std::tie(pt, eta, phi, hit_idx, hit_type) = parsepT5(event, idx); break; - case lst::LSTObjType::pT3: + case LSTObjType::pT3: std::tie(pt, eta, phi, hit_idx, hit_type) = parsepT3(event, idx); break; - case lst::LSTObjType::T5: + case LSTObjType::T5: std::tie(pt, eta, phi, hit_idx, hit_type) = parseT5(event, idx); break; - case lst::LSTObjType::pLS: + case LSTObjType::pLS: std::tie(pt, eta, phi, hit_idx, hit_type) = parsepLS(event, idx); break; } diff --git a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.h b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.h index 314096f72679e..5bfe439fadbb3 100644 --- a/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.h +++ b/RecoTracker/LSTCore/standalone/code/core/write_lst_ntuple.h @@ -18,15 +18,19 @@ void createOutputBranches(); void createRequiredOutputBranches(); void createOptionalOutputBranches(); void createGnnNtupleBranches(); +void createT5DNNBranches(); void fillOutputBranches(LSTEvent* event); void setOutputBranches(LSTEvent* event); void setOptionalOutputBranches(LSTEvent* event); +void setOccupancyBranches(LSTEvent* event); void setPixelQuintupletOutputBranches(LSTEvent* event); void setQuintupletOutputBranches(LSTEvent* event); void setPixelTripletOutputBranches(LSTEvent* event); void setGnnNtupleBranches(LSTEvent* event); void setGnnNtupleMiniDoublet(LSTEvent* event, unsigned int MD); +void fillT5DNNBranches(LSTEvent* event, unsigned int T3); +void setT5DNNBranches(LSTEvent* event); std::tuple> parseTrackCandidate(LSTEvent* event, unsigned int); std::tuple, std::vector> parsepT5(LSTEvent* event, diff --git a/RecoTracker/LSTCore/standalone/setup.sh b/RecoTracker/LSTCore/standalone/setup.sh index 1a35fa8e69bdf..570a7ae9fee81 100644 --- a/RecoTracker/LSTCore/standalone/setup.sh +++ b/RecoTracker/LSTCore/standalone/setup.sh @@ -7,18 +7,20 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source $DIR/code/rooutil/thisrooutil.sh ARCH=$(uname -m) -if [[ $(hostname) == *lnx4555* ]]; then - export SCRAM_ARCH=el9_amd64_gcc12 -elif [[ $ARCH == "aarch64" || $ARCH == "arm64" ]]; then - export SCRAM_ARCH=el9_aarch64_gcc12 +if [ -z ${CMSSW_SEARCH_PATH+x} ]; then + if [ -z ${FORCED_CMSSW_VERSION+x} ]; then + export CMSSW_VERSION=CMSSW_14_2_0_pre4 + else + export CMSSW_VERSION=$FORCED_CMSSW_VERSION + fi + + source /cvmfs/cms.cern.ch/cmsset_default.sh + CMSSW_PATH=$(scram list -c CMSSW | grep -w $CMSSW_VERSION | awk '{print $3}') + cd $CMSSW_PATH + eval `scramv1 runtime -sh` else - export SCRAM_ARCH=el8_amd64_gcc12 + cd $CMSSW_BASE/src fi -export CMSSW_VERSION=CMSSW_14_2_0_pre3 - -source /cvmfs/cms.cern.ch/cmsset_default.sh -cd /cvmfs/cms.cern.ch/$SCRAM_ARCH/cms/cmssw/$CMSSW_VERSION/src -eval `scramv1 runtime -sh` # Export paths to libraries we need export BOOST_ROOT=$(scram tool info boost | grep BOOST_BASE | cut -d'=' -f2)