From cac75ef46851d90f1e0234723307ddfd31c38b6e Mon Sep 17 00:00:00 2001 From: soohwan lee Date: Thu, 16 May 2024 13:53:56 +0200 Subject: [PATCH] Backport of #45151 (HIon type def for pixel alpaka) --- DataFormats/TrackSoA/interface/TracksDevice.h | 2 ++ DataFormats/TrackSoA/src/alpaka/classes_cuda_def.xml | 5 +++++ DataFormats/TrackSoA/src/alpaka/classes_rocm_def.xml | 5 +++++ .../python/siPixelClustersPreSplitting_cff.py | 12 +++++++++--- .../interface/alpaka/PixelCPEFastParamsCollection.h | 1 + .../alpaka/PixelCPEFastParamsESProducerAlpaka.cc | 2 ++ .../plugins/alpaka/SiPixelRecHitAlpaka.cc | 2 ++ .../SiPixelRecHits/python/PixelCPEESProducers_cff.py | 1 + .../SiPixelRecHits/python/SiPixelRecHits_cfi.py | 12 ++++++++++++ .../SiPixelRecHits/src/ES_PixelCPEFastParams.cc | 2 ++ .../SiPixelRecHits/src/PixelCPEFastParams.cc | 4 +++- .../src/alpaka/ES_PixelCPEFastParams.cc | 1 + .../Configuration/python/RecoPixelVertexing_cff.py | 2 ++ .../PixelSeeding/plugins/alpaka/CAHitNtuplet.cc | 2 ++ .../PixelTrackFitting/python/PixelTracks_cff.py | 7 +++++++ 15 files changed, 56 insertions(+), 4 deletions(-) diff --git a/DataFormats/TrackSoA/interface/TracksDevice.h b/DataFormats/TrackSoA/interface/TracksDevice.h index 6ef28014bab63..dd2b25c8794be 100644 --- a/DataFormats/TrackSoA/interface/TracksDevice.h +++ b/DataFormats/TrackSoA/interface/TracksDevice.h @@ -31,6 +31,8 @@ namespace pixelTrack { template using TracksDevicePhase1 = TracksDevice; template + using TracksDeviceHIonPhase1 = TracksDevice; + template using TracksDevicePhase2 = TracksDevice; } // namespace pixelTrack diff --git a/DataFormats/TrackSoA/src/alpaka/classes_cuda_def.xml b/DataFormats/TrackSoA/src/alpaka/classes_cuda_def.xml index 9edee6439e63b..08d7eb9724b34 100644 --- a/DataFormats/TrackSoA/src/alpaka/classes_cuda_def.xml +++ b/DataFormats/TrackSoA/src/alpaka/classes_cuda_def.xml @@ -4,6 +4,11 @@ + + + + + diff --git a/DataFormats/TrackSoA/src/alpaka/classes_rocm_def.xml b/DataFormats/TrackSoA/src/alpaka/classes_rocm_def.xml index 772a1b385a957..0cd8cf9bb49d7 100644 --- a/DataFormats/TrackSoA/src/alpaka/classes_rocm_def.xml +++ b/DataFormats/TrackSoA/src/alpaka/classes_rocm_def.xml @@ -4,6 +4,11 @@ + + + + + diff --git a/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py b/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py index a6dd2bea80e2a..201c9788c921f 100644 --- a/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py +++ b/RecoLocalTracker/SiPixelClusterizer/python/siPixelClustersPreSplitting_cff.py @@ -111,8 +111,12 @@ def _addProcessCalibTrackerAlpakaES(process): # reconstruct the pixel digis and clusters with alpaka on the device from RecoLocalTracker.SiPixelClusterizer.siPixelRawToClusterPhase1_cfi import siPixelRawToClusterPhase1 as _siPixelRawToClusterAlpaka +from RecoLocalTracker.SiPixelClusterizer.siPixelRawToClusterHIonPhase1_cfi import siPixelRawToClusterHIonPhase1 as _siPixelRawToClusterAlpakaHIonPhase1 + siPixelClustersPreSplittingAlpaka = _siPixelRawToClusterAlpaka.clone() +(alpaka & pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelClustersPreSplittingAlpaka,_siPixelRawToClusterAlpakaHIonPhase1.clone()) + (alpaka & run3_common).toModify(siPixelClustersPreSplittingAlpaka, # use the pixel channel calibrations scheme for Run 3 clusterThreshold_layer1 = 4000, @@ -135,11 +139,16 @@ def _addProcessCalibTrackerAlpakaES(process): from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase1_cfi import siPixelDigisClustersFromSoAAlpakaPhase1 as _siPixelDigisClustersFromSoAAlpakaPhase1 from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase2_cfi import siPixelDigisClustersFromSoAAlpakaPhase2 as _siPixelDigisClustersFromSoAAlpakaPhase2 +from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaHIonPhase1_cfi import siPixelDigisClustersFromSoAAlpakaHIonPhase1 as _siPixelDigisClustersFromSoAAlpakaHIonPhase1 (alpaka & ~phase2_tracker).toReplaceWith(siPixelDigisClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaPhase1.clone( src = "siPixelClustersPreSplittingAlpaka" )) +(alpaka & pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelDigisClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaHIonPhase1.clone( + src = "siPixelClustersPreSplittingAlpaka" +)) + (alpaka & phase2_tracker).toReplaceWith(siPixelDigisClustersPreSplitting,_siPixelDigisClustersFromSoAAlpakaPhase2.clone( clusterThreshold_layer1 = 4000, clusterThreshold_otherLayers = 4000, @@ -148,9 +157,6 @@ def _addProcessCalibTrackerAlpakaES(process): produceDigis = False )) -from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase1_cfi import siPixelDigisClustersFromSoAAlpakaPhase1 as _siPixelDigisClustersFromSoAAlpakaPhase1 -from RecoLocalTracker.SiPixelClusterizer.siPixelDigisClustersFromSoAAlpakaPhase2_cfi import siPixelDigisClustersFromSoAAlpakaPhase2 as _siPixelDigisClustersFromSoAAlpakaPhase2 - alpaka.toModify(siPixelClustersPreSplitting, cpu = cms.EDAlias( siPixelDigisClustersPreSplitting = cms.VPSet( diff --git a/RecoLocalTracker/SiPixelRecHits/interface/alpaka/PixelCPEFastParamsCollection.h b/RecoLocalTracker/SiPixelRecHits/interface/alpaka/PixelCPEFastParamsCollection.h index 4e66d24604aec..1338bc457c1f7 100644 --- a/RecoLocalTracker/SiPixelRecHits/interface/alpaka/PixelCPEFastParamsCollection.h +++ b/RecoLocalTracker/SiPixelRecHits/interface/alpaka/PixelCPEFastParamsCollection.h @@ -20,6 +20,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { PixelCPEFastParamsDevice>; using PixelCPEFastParamsPhase1 = PixelCPEFastParams; + using PixelCPEFastParamsHIonPhase1 = PixelCPEFastParams; using PixelCPEFastParamsPhase2 = PixelCPEFastParams; } // namespace ALPAKA_ACCELERATOR_NAMESPACE diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/PixelCPEFastParamsESProducerAlpaka.cc b/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/PixelCPEFastParamsESProducerAlpaka.cc index 73059a13dc636..2872cedd14aeb 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/PixelCPEFastParamsESProducerAlpaka.cc +++ b/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/PixelCPEFastParamsESProducerAlpaka.cc @@ -113,8 +113,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } using PixelCPEFastParamsESProducerAlpakaPhase1 = PixelCPEFastParamsESProducerAlpaka; + using PixelCPEFastParamsESProducerAlpakaHIonPhase1 = PixelCPEFastParamsESProducerAlpaka; using PixelCPEFastParamsESProducerAlpakaPhase2 = PixelCPEFastParamsESProducerAlpaka; } // namespace ALPAKA_ACCELERATOR_NAMESPACE DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(PixelCPEFastParamsESProducerAlpakaPhase1); +DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(PixelCPEFastParamsESProducerAlpakaHIonPhase1); DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(PixelCPEFastParamsESProducerAlpakaPhase2); diff --git a/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/SiPixelRecHitAlpaka.cc b/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/SiPixelRecHitAlpaka.cc index 46fd8a6b8c2ca..5fdece3cdbf09 100644 --- a/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/SiPixelRecHitAlpaka.cc +++ b/RecoLocalTracker/SiPixelRecHits/plugins/alpaka/SiPixelRecHitAlpaka.cc @@ -92,9 +92,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { Algo_.makeHitsAsync(digis, clusters, bs.data(), fcpe.const_buffer().data(), iEvent.queue())); } using SiPixelRecHitAlpakaPhase1 = SiPixelRecHitAlpaka; + using SiPixelRecHitAlpakaHIonPhase1 = SiPixelRecHitAlpaka; using SiPixelRecHitAlpakaPhase2 = SiPixelRecHitAlpaka; } // namespace ALPAKA_ACCELERATOR_NAMESPACE #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h" DEFINE_FWK_ALPAKA_MODULE(SiPixelRecHitAlpakaPhase1); +DEFINE_FWK_ALPAKA_MODULE(SiPixelRecHitAlpakaHIonPhase1); DEFINE_FWK_ALPAKA_MODULE(SiPixelRecHitAlpakaPhase2); diff --git a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py index 52efaece5e4df..054e8b7c461ea 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py +++ b/RecoLocalTracker/SiPixelRecHits/python/PixelCPEESProducers_cff.py @@ -23,6 +23,7 @@ def _addProcessCPEsAlpaka(process): process.load("RecoLocalTracker.SiPixelRecHits.pixelCPEFastParamsESProducerAlpakaPhase1_cfi") process.load("RecoLocalTracker.SiPixelRecHits.pixelCPEFastParamsESProducerAlpakaPhase2_cfi") + process.load("RecoLocalTracker.SiPixelRecHits.pixelCPEFastParamsESProducerAlpakaHIonPhase1_cfi") modifyConfigurationForAlpakaCPEs_ = alpaka.makeProcessModifier(_addProcessCPEsAlpaka) diff --git a/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py b/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py index 7e8910a8e0918..cb539a2b1c6e4 100644 --- a/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py +++ b/RecoLocalTracker/SiPixelRecHits/python/SiPixelRecHits_cfi.py @@ -130,6 +130,8 @@ ### Alpaka Pixel Hits Reco from RecoLocalTracker.SiPixelRecHits.siPixelRecHitAlpakaPhase1_cfi import siPixelRecHitAlpakaPhase1 as _siPixelRecHitAlpakaPhase1 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitAlpakaPhase2_cfi import siPixelRecHitAlpakaPhase2 as _siPixelRecHitAlpakaPhase2 +from RecoLocalTracker.SiPixelRecHits.siPixelRecHitAlpakaHIonPhase1_cfi import siPixelRecHitAlpakaHIonPhase1 as _siPixelRecHitAlpakaHIonPhase1 + # Hit SoA producer on the device siPixelRecHitsPreSplittingAlpaka = _siPixelRecHitAlpakaPhase1.clone( @@ -138,6 +140,9 @@ phase2_tracker.toReplaceWith(siPixelRecHitsPreSplittingAlpaka,_siPixelRecHitAlpakaPhase2.clone( src = "siPixelClustersPreSplittingAlpaka" )) +(pp_on_AA & ~phase2_tracker).toReplaceWith(siPixelRecHitsPreSplittingAlpaka,_siPixelRecHitAlpakaHIonPhase1.clone( + src = "siPixelClustersPreSplittingAlpaka" +)) # Hit SoA producer on the cpu, for validation siPixelRecHitsPreSplittingAlpakaSerial = makeSerialClone(siPixelRecHitsPreSplittingAlpaka, @@ -146,6 +151,7 @@ from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromSoAAlpakaPhase1_cfi import siPixelRecHitFromSoAAlpakaPhase1 as _siPixelRecHitFromSoAAlpakaPhase1 from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromSoAAlpakaPhase2_cfi import siPixelRecHitFromSoAAlpakaPhase2 as _siPixelRecHitFromSoAAlpakaPhase2 +from RecoLocalTracker.SiPixelRecHits.siPixelRecHitFromSoAAlpakaHIonPhase1_cfi import siPixelRecHitFromSoAAlpakaHIonPhase1 as _siPixelRecHitFromSoAAlpakaHIonPhase1 (alpaka & ~phase2_tracker).toModify(siPixelRecHitsPreSplitting, cpu = _siPixelRecHitFromSoAAlpakaPhase1.clone( @@ -159,6 +165,12 @@ src = cms.InputTag('siPixelClustersPreSplitting')) ) +(alpaka & pp_on_AA & ~phase2_tracker).toModify(siPixelRecHitsPreSplitting, + cpu = _siPixelRecHitFromSoAAlpakaHIonPhase1.clone( + pixelRecHitSrc = cms.InputTag('siPixelRecHitsPreSplittingAlpaka'), + src = cms.InputTag('siPixelClustersPreSplitting')) +) + alpaka.toReplaceWith(siPixelRecHitsPreSplittingTask, cms.Task( # Reconstruct the pixel hits with alpaka on the device diff --git a/RecoLocalTracker/SiPixelRecHits/src/ES_PixelCPEFastParams.cc b/RecoLocalTracker/SiPixelRecHits/src/ES_PixelCPEFastParams.cc index 804f817bdb6e0..2515e71b44852 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/ES_PixelCPEFastParams.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/ES_PixelCPEFastParams.cc @@ -3,7 +3,9 @@ #include "Geometry/CommonTopologies/interface/SimplePixelTopology.h" using PixelCPEFastParamsHostPhase1 = PixelCPEFastParamsHost; +using PixelCPEFastParamsHostHIonPhase1 = PixelCPEFastParamsHost; using PixelCPEFastParamsHostPhase2 = PixelCPEFastParamsHost; TYPELOOKUP_DATA_REG(PixelCPEFastParamsHostPhase1); +TYPELOOKUP_DATA_REG(PixelCPEFastParamsHostHIonPhase1); TYPELOOKUP_DATA_REG(PixelCPEFastParamsHostPhase2); diff --git a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFastParams.cc b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFastParams.cc index d98c84e5860f4..ea42202746b72 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFastParams.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/PixelCPEFastParams.cc @@ -3,7 +3,9 @@ #include "Geometry/CommonTopologies/interface/SimplePixelTopology.h" using PixelCPEFastParamsPhase1 = PixelCPEFastParamsDevice; +using PixelCPEFastParamsHIonPhase1 = PixelCPEFastParamsDevice; using PixelCPEFastParamsPhase2 = PixelCPEFastParamsDevice; TYPELOOKUP_DATA_REG(PixelCPEFastParamsPhase1); -TYPELOOKUP_DATA_REG(PixelCPEFastParamsPhase2); \ No newline at end of file +TYPELOOKUP_DATA_REG(PixelCPEFastParamsHIonPhase1); +TYPELOOKUP_DATA_REG(PixelCPEFastParamsPhase2); diff --git a/RecoLocalTracker/SiPixelRecHits/src/alpaka/ES_PixelCPEFastParams.cc b/RecoLocalTracker/SiPixelRecHits/src/alpaka/ES_PixelCPEFastParams.cc index 3b4a2f74a8869..a7855ccadff54 100644 --- a/RecoLocalTracker/SiPixelRecHits/src/alpaka/ES_PixelCPEFastParams.cc +++ b/RecoLocalTracker/SiPixelRecHits/src/alpaka/ES_PixelCPEFastParams.cc @@ -2,4 +2,5 @@ #include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h" TYPELOOKUP_ALPAKA_DATA_REG(PixelCPEFastParamsPhase1); +TYPELOOKUP_ALPAKA_DATA_REG(PixelCPEFastParamsHIonPhase1); TYPELOOKUP_ALPAKA_DATA_REG(PixelCPEFastParamsPhase2); diff --git a/RecoTracker/Configuration/python/RecoPixelVertexing_cff.py b/RecoTracker/Configuration/python/RecoPixelVertexing_cff.py index f5ba3ad7df1da..82c211d952292 100644 --- a/RecoTracker/Configuration/python/RecoPixelVertexing_cff.py +++ b/RecoTracker/Configuration/python/RecoPixelVertexing_cff.py @@ -104,8 +104,10 @@ # pixel vertex SoA producer with alpaka on the device from RecoTracker.PixelVertexFinding.pixelVertexProducerAlpakaPhase1_cfi import pixelVertexProducerAlpakaPhase1 as _pixelVerticesAlpakaPhase1 from RecoTracker.PixelVertexFinding.pixelVertexProducerAlpakaPhase2_cfi import pixelVertexProducerAlpakaPhase2 as _pixelVerticesAlpakaPhase2 +from RecoTracker.PixelVertexFinding.pixelVertexProducerAlpakaHIonPhase1_cfi import pixelVertexProducerAlpakaHIonPhase1 as _pixelVerticesAlpakaHIonPhase1 pixelVerticesAlpaka = _pixelVerticesAlpakaPhase1.clone() phase2_tracker.toReplaceWith(pixelVerticesAlpaka,_pixelVerticesAlpakaPhase2.clone()) +(pp_on_AA & ~phase2_tracker).toReplaceWith(pixelVerticesAlpaka,_pixelVerticesAlpakaHIonPhase1.clone(doSplitting = False)) from RecoTracker.PixelVertexFinding.pixelVertexFromSoAAlpaka_cfi import pixelVertexFromSoAAlpaka as _pixelVertexFromSoAAlpaka alpaka.toReplaceWith(pixelVertices, _pixelVertexFromSoAAlpaka.clone()) diff --git a/RecoTracker/PixelSeeding/plugins/alpaka/CAHitNtuplet.cc b/RecoTracker/PixelSeeding/plugins/alpaka/CAHitNtuplet.cc index c16aed2e0b1e8..dc4639d40e0ee 100644 --- a/RecoTracker/PixelSeeding/plugins/alpaka/CAHitNtuplet.cc +++ b/RecoTracker/PixelSeeding/plugins/alpaka/CAHitNtuplet.cc @@ -86,10 +86,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } using CAHitNtupletAlpakaPhase1 = CAHitNtupletAlpaka; + using CAHitNtupletAlpakaHIonPhase1 = CAHitNtupletAlpaka; using CAHitNtupletAlpakaPhase2 = CAHitNtupletAlpaka; } // namespace ALPAKA_ACCELERATOR_NAMESPACE #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h" DEFINE_FWK_ALPAKA_MODULE(CAHitNtupletAlpakaPhase1); +DEFINE_FWK_ALPAKA_MODULE(CAHitNtupletAlpakaHIonPhase1); DEFINE_FWK_ALPAKA_MODULE(CAHitNtupletAlpakaPhase2); diff --git a/RecoTracker/PixelTrackFitting/python/PixelTracks_cff.py b/RecoTracker/PixelTrackFitting/python/PixelTracks_cff.py index 046caa0b033f3..c8c3719edfc84 100644 --- a/RecoTracker/PixelTrackFitting/python/PixelTracks_cff.py +++ b/RecoTracker/PixelTrackFitting/python/PixelTracks_cff.py @@ -214,9 +214,11 @@ # pixel tracks SoA producer on the device from RecoTracker.PixelSeeding.caHitNtupletAlpakaPhase1_cfi import caHitNtupletAlpakaPhase1 as _pixelTracksAlpakaPhase1 from RecoTracker.PixelSeeding.caHitNtupletAlpakaPhase2_cfi import caHitNtupletAlpakaPhase2 as _pixelTracksAlpakaPhase2 +from RecoTracker.PixelSeeding.caHitNtupletAlpakaHIonPhase1_cfi import caHitNtupletAlpakaHIonPhase1 as _pixelTracksAlpakaHIonPhase1 pixelTracksAlpaka = _pixelTracksAlpakaPhase1.clone() phase2_tracker.toReplaceWith(pixelTracksAlpaka,_pixelTracksAlpakaPhase2.clone()) +(pp_on_AA & ~phase2_tracker).toReplaceWith(pixelTracksAlpaka, _pixelTracksAlpakaHIonPhase1.clone()) # pixel tracks SoA producer on the cpu, for validation pixelTracksAlpakaSerial = makeSerialClone(pixelTracksAlpaka, @@ -226,6 +228,7 @@ # legacy pixel tracks from SoA from RecoTracker.PixelTrackFitting.pixelTrackProducerFromSoAAlpakaPhase1_cfi import pixelTrackProducerFromSoAAlpakaPhase1 as _pixelTrackProducerFromSoAAlpakaPhase1 from RecoTracker.PixelTrackFitting.pixelTrackProducerFromSoAAlpakaPhase2_cfi import pixelTrackProducerFromSoAAlpakaPhase2 as _pixelTrackProducerFromSoAAlpakaPhase2 +from RecoTracker.PixelTrackFitting.pixelTrackProducerFromSoAAlpakaHIonPhase1_cfi import pixelTrackProducerFromSoAAlpakaHIonPhase1 as _pixelTrackProducerFromSoAAlpakaHIonPhase1 (alpaka & ~phase2_tracker).toReplaceWith(pixelTracks, _pixelTrackProducerFromSoAAlpakaPhase1.clone( pixelRecHitLegacySrc = "siPixelRecHitsPreSplitting", @@ -235,6 +238,10 @@ pixelRecHitLegacySrc = "siPixelRecHitsPreSplitting", )) +(alpaka & ~phase2_tracker & pp_on_AA).toReplaceWith(pixelTracks, _pixelTrackProducerFromSoAAlpakaHIonPhase1.clone( + pixelRecHitLegacySrc = "siPixelRecHitsPreSplitting", +)) + alpaka.toReplaceWith(pixelTracksTask, cms.Task( # Build the pixel ntuplets and the pixel tracks in SoA format with alpaka on the device pixelTracksAlpaka,