Skip to content

Conversation

@ktf
Copy link
Member

@ktf ktf commented Dec 3, 2024

This PR postpones the read operations which would usually populate an intermediate
RecordBatch and it performs them directly on its subsequent shared memory
serialization. Doing so avoids having the intermediate representation allocate most
of the memory.

For the moment this is only done for TTree. RNtuple support will come in a subsequent PR.

@ktf ktf requested a review from a team as a code owner December 3, 2024 15:02
@github-actions
Copy link
Contributor

github-actions bot commented Dec 3, 2024

REQUEST FOR PRODUCTION RELEASES:
To request your PR to be included in production software, please add the corresponding labels called "async-" to your PR. Add the labels directly (if you have the permissions) or add a comment of the form (note that labels are separated by a ",")

+async-label <label1>, <label2>, !<label3> ...

This will add <label1> and <label2> and removes <label3>.

The following labels are available
async-2023-pbpb-apass4
async-2023-pp-apass4
async-2024-pp-apass1
async-2022-pp-apass7
async-2024-pp-cpass0
async-2024-PbPb-cpass0
async-2024-PbPb-apass1
async-2024-ppRef-apass1

@ktf
Copy link
Member Author

ktf commented Dec 3, 2024

First step towards being able to read and write RNTuple and TTree seamleassly.

@ktf
Copy link
Member Author

ktf commented Dec 4, 2024

Tested on hyperloop. Not OK. One leak fixed, one more to go.

@alibuild
Copy link
Collaborator

Error while checking build/O2/fullCI for 8c955dd at 2024-12-14 04:53:

## sw/BUILD/O2-latest/log
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
/sw/SOURCES/O2/13763-slc8_x86-64/0/Framework/AnalysisSupport/src/DataInputDirector.cxx:373:34: error: 'TTreeFileFormat' was not declared in this scope
/sw/SOURCES/O2/13763-slc8_x86-64/0/Framework/AnalysisSupport/src/DataInputDirector.cxx:373:50: error: no matching function for call to 'make_shared<<expression error> >(std::size_t&, std::size_t&)'
/sw/SOURCES/O2/13763-slc8_x86-64/0/Framework/AnalysisSupport/src/DataInputDirector.cxx:373:50: error: template argument 1 is invalid
/sw/SOURCES/O2/13763-slc8_x86-64/0/Framework/AnalysisSupport/src/DataInputDirector.cxx:373:50: error: template argument 1 is invalid
/sw/slc8_x86-64/GCC-Toolchain/v13.2.0-alice1-6/include/c++/13.2.0/bits/stl_construct.h:115:28: error: no matching function for call to 'construct_at(o2::framework::TFileFileSystem*&, TFile*, int)'
/sw/slc8_x86-64/GCC-Toolchain/v13.2.0-alice1-6/include/c++/13.2.0/bits/stl_construct.h:96:17: error: no matching function for call to 'o2::framework::TFileFileSystem::TFileFileSystem(TFile*, int)'
/sw/slc8_x86-64/GCC-Toolchain/v13.2.0-alice1-6/include/c++/13.2.0/bits/stl_construct.h:119:7: error: no matching function for call to 'o2::framework::TFileFileSystem::TFileFileSystem(TFile*, int)'
ninja: build stopped: subcommand failed.

Full log here.

@alibuild
Copy link
Collaborator

Error while checking build/O2/fullCI for 84ca389 at 2025-01-01 00:35:

## sw/BUILD/O2-latest/log
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
c++: error: unrecognized command-line option '--rtlib=compiler-rt'


## sw/BUILD/O2Physics-latest/log
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:


## sw/BUILD/O2-full-system-test-latest/log
Detected critical problem in logfile reco_NOGPU.log
reco_NOGPU.log:[68498:calib-phos-l1phase]: [23:35:25][ERROR] Exception while running: Fatal error. Rethrowing.
[68498:calib-phos-l1phase]: [23:35:25][ERROR] Requested resource does not exist: http://alice-ccdb.cern.ch//PHS/Calib/BadMap/1735688125023/
[68498:calib-phos-l1phase]: [23:35:25][FATAL] Got nullptr from CCDB for path PHS/Calib/BadMap and timestamp 1735688125023
[68498:calib-phos-l1phase]: [23:35:25][ERROR] Exception while running: Fatal error. Rethrowing.
[68498:calib-phos-l1phase]: [23:35:25][FATAL] Unhandled o2::framework::runtime_error reached the top of main of o2-phos-calib-workflow, device shutting down. Reason: Fatal error
[ERROR] Workflow crashed - PID 68498 (calib-phos-l1phase) did not exit correctly however it's not clear why. Exit code forced to 128.


## sw/BUILD/o2checkcode-latest/log
--
========== List of errors found ==========
++ GRERR=0
++ grep -v clang-diagnostic-error error-log.txt
++ grep ' error:'
++ GRERR=1
++ [[ 1 == 0 ]]
++ mkdir -p /sw/INSTALLROOT/f1ba50d9bb49f31cbc9651bb9748dfe47cd167f6/slc8_x86-64/o2checkcode/1.0-local434/etc/modulefiles
++ cat
--

Full log here.

@alibuild
Copy link
Collaborator

alibuild commented Jan 16, 2025

Error while checking build/O2/fullCI_slc9 for f88e524 at 2025-01-22 16:54:

## sw/BUILD/ONNXRuntime-latest/log
CMake Error at /sw/slc9_x86-64/CMake/v3.28.1-13/share/cmake-3.28/Modules/CMakeFindDependencyMacro.cmake:76 (find_package):

Full log here.

@alibuild
Copy link
Collaborator

alibuild commented Jan 27, 2025

Error while checking build/O2/fullCI for 70b4151 at 2025-01-29 23:28:

## sw/BUILD/O2-latest/log
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
c++: error: unrecognized command-line option '--rtlib=compiler-rt'


## sw/BUILD/O2Physics-latest/log
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:


## sw/BUILD/O2-full-system-test-latest/log
Detected critical problem in logfile reco_ASYNC.log
reco_ASYNC.log:[72921:internal-dpl-ccdb-backend]: [22:28:19][ERROR] Exception while running: Fatal error. Rethrowing.
reco_ASYNC.log-[72921:internal-dpl-ccdb-backend]: [22:28:19][FATAL] Unhandled o2::framework::runtime_error reached the top of main of o2-ctf-reader-workflow, device shutting down. Reason: Fatal error
[72921:internal-dpl-ccdb-backend]: [22:28:18][ERROR] CCDBDownloader CURL transfer error - Timeout was reached
[72921:internal-dpl-ccdb-backend]: [22:28:18][ERROR] CcdbDownloader finished transfer http://alice-ccdb.cern.ch/CTP/Calib/OrbitReset for 1550600800000 (agent_id: alissandra05-1738189692-H9RHxh) with http code: 0
[72921:internal-dpl-ccdb-backend]: [22:28:18][ERROR] File CTP/Calib/OrbitReset could not be retrieved. No more hosts to try.
[72921:internal-dpl-ccdb-backend]: [22:28:18][FATAL] Unable to find object CTP/Calib/OrbitReset/1550600800000
[72921:internal-dpl-ccdb-backend]: [22:28:19][ERROR] Exception while running: Fatal error. Rethrowing.
[72921:internal-dpl-ccdb-backend]: [22:28:19][FATAL] Unhandled o2::framework::runtime_error reached the top of main of o2-ctf-reader-workflow, device shutting down. Reason: Fatal error
[ERROR] Workflow crashed - PID 72921 (internal-dpl-ccdb-backend) did not exit correctly however it's not clear why. Exit code forced to 128.
[ERROR]  - Device internal-dpl-ccdb-backend: pid 72921 (exit 128)
[INFO]    - First error: [22:28:18][FATAL] Unable to find object CTP/Calib/OrbitReset/1550600800000
[ERROR] SEVERE: Device internal-dpl-ccdb-backend (72921) had at least one message above severity 5: Unable to find object CTP/Calib/OrbitReset/1550600800000


## sw/BUILD/o2checkcode-latest/log
--
========== List of errors found ==========
++ GRERR=0
++ grep -v clang-diagnostic-error error-log.txt
++ grep ' error:'
++ GRERR=1
++ [[ 1 == 0 ]]
++ mkdir -p /sw/INSTALLROOT/c55d94649aa23f821365e5d5f587c5c6ec630a7b/slc8_x86-64/o2checkcode/1.0-local2/etc/modulefiles
++ cat
--

Full log here.

@alibuild
Copy link
Collaborator

Error while checking build/O2/fullCI_slc9 for 70b4151 at 2025-01-28 00:44:

++ cp /sw/slc9_x86-64/O2/13763-slc9_x86-64-local7/compile_commands.json .
+++ python3 -c 'import json, os; print(os.path.commonprefix([x["file"] for x in json.loads(open("compile_commands.json").read()) if "sw/BUILD" not in x["file"] and "G__" not in x["file"] and x["file"].endswith(".cxx")]))'
++ O2_SRC=/sw/SOURCES/O2/13763-slc9_x86-64/0/
++ [[ -e /sw/SOURCES/O2/13763-slc9_x86-64/0//CMakeLists.txt ]]

Full log here.

@alibuild
Copy link
Collaborator

alibuild commented Feb 3, 2025

Error while checking build/O2/fullCI_slc9 for 1fe4d36 at 2025-02-03 22:41:

++ cp /sw/slc9_x86-64/O2/13763-slc9_x86-64-local11/compile_commands.json .
+++ python3 -c 'import json, os; print(os.path.commonprefix([x["file"] for x in json.loads(open("compile_commands.json").read()) if "sw/BUILD" not in x["file"] and "G__" not in x["file"] and x["file"].endswith(".cxx")]))'
++ O2_SRC=/sw/SOURCES/O2/13763-slc9_x86-64/0/
++ [[ -e /sw/SOURCES/O2/13763-slc9_x86-64/0//CMakeLists.txt ]]

Full log here.

@alibuild
Copy link
Collaborator

alibuild commented Feb 4, 2025

Error while checking build/O2/fullCI for 1fe4d36 at 2025-02-04 07:17:

## sw/BUILD/O2-latest/log
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
c++: error: unrecognized command-line option '--rtlib=compiler-rt'


## sw/BUILD/O2Physics-latest/log
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:


## sw/BUILD/O2-full-system-test-latest/log
command alien-token-init had nonzero exit code 2


## sw/BUILD/o2checkcode-latest/log
--
========== List of errors found ==========
++ GRERR=0
++ grep -v clang-diagnostic-error error-log.txt
++ grep ' error:'
++ GRERR=1
++ [[ 1 == 0 ]]
++ mkdir -p /sw/INSTALLROOT/23150a5bca513bcd7dbc1772ddbed9f5bd4d900b/slc8_x86-64/o2checkcode/1.0-local41/etc/modulefiles
++ cat
--

Full log here.

@ktf ktf force-pushed the pr13763 branch 3 times, most recently from 78d334e to e9b282d Compare February 4, 2025 15:11
@alibuild
Copy link
Collaborator

alibuild commented Feb 5, 2025

Error while checking build/O2/fullCI for e9b282d at 2025-02-11 22:07:

## sw/BUILD/O2-latest/log
c++: error: unrecognized command-line option '--rtlib=compiler-rt'
c++: error: unrecognized command-line option '--rtlib=compiler-rt'


## sw/BUILD/O2Physics-latest/log
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:


## sw/BUILD/O2-full-system-test-latest/log
Detected critical problem in logfile digi.log
digi.log:[24852:internal-dpl-ccdb-backend]: [21:07:40][ERROR] Exception while running: Fa
[24852:internal-dpl-ccdb-backend]: [21:07:38][ERROR] CCDBDownloader CURL transfer error - Timeout was reached
[24852:internal-dpl-ccdb-backend]: [21:07:38][ERROR] CcdbDownloader finished transfer http://alice-ccdb.cern.ch/CTP/Calib/OrbitReset for 1550600800000 (agent_id: alimetal03.cern.ch-1739308052-SgX4rd) with http code: 0
[24852:internal-dpl-ccdb-backend]: [21:07:38][ERROR] File CTP/Calib/OrbitReset could not be retrieved. No more hosts to try.
[24852:internal-dpl-ccdb-backend]: [21:07:38][FATAL] Unable to find object CTP/Calib/OrbitReset/1550600800000
[24852:internal-dpl-ccdb-backend]: [21:07:40][ERROR] Exception while running: Fatal error. Rethrowing.
[24852:internal-dpl-ccdb-backend]: [21:07:40][FATAL] Unhandled o2::framework::runtime_error reached the top of main of o2-sim-digitizer-workflow, device shutting down. Reason: Fatal error
[ERROR] Workflow crashed - PID 24852 (internal-dpl-ccdb-backend) did not exit correctly however it's not clear why. Exit code forced to 128.


## sw/BUILD/o2checkcode-latest/log
--
========== List of errors found ==========
++ GRERR=0
++ grep -v clang-diagnostic-error error-log.txt
++ grep ' error:'
++ GRERR=1
++ [[ 1 == 0 ]]
++ mkdir -p /sw/INSTALLROOT/9f89cd828542dc5abcdcd47749a39843becdc62e/slc8_x86-64/o2checkcode/1.0-local86/etc/modulefiles
++ cat
--

Full log here.

@alibuild
Copy link
Collaborator

alibuild commented Feb 5, 2025

Error while checking build/O2/fullCI_slc9 for e9b282d at 2025-02-05 10:26:

## sw/BUILD/O2Physics-latest/log
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:
Error in cling::AutoLoadingVisitor::InsertIntoAutoLoadingState:


## sw/BUILD/O2-sim-challenge-test-latest/log
./tpcreco.log[7160:internal-dpl-ccdb-backend]: [10:26:17][ERROR] CCDBDownloader CURL transfer error - Unsupported protocol
./tpcreco.log[7160:internal-dpl-ccdb-backend]: [10:26:17][ERROR] CcdbDownloader finished transfer http://alice-ccdb.cern.ch/GLO/Param/MatLUT/1546300800000/3f0d0f81-99d9-11ee-b9a2-200114580202 for 1546300800000 (agent_id: alimetal08.cern.ch-1738747575-Tghzbj) with http code: 0
./tpcreco.log[7160:internal-dpl-ccdb-backend]: [10:26:17][FATAL] Unable to find object GLO/Param/MatLUT/1546300800000
./tpcreco.log[7160:internal-dpl-ccdb-backend]: [10:26:18][ERROR] Exception while running: Fatal error. Rethrowing.
./tpcreco.log[7160:internal-dpl-ccdb-backend]: [10:26:18][FATAL] Unhandled o2::framework::runtime_error reached the top of main of o2-tpc-reco-workflow, device shutting down. Reason: Fatal error
./tpcreco.log[ERROR] Workflow crashed - PID 7160 (internal-dpl-ccdb-backend) did not exit correctly however it's not clear why. Exit code forced to 128.
./tpcreco.log[ERROR]  - Device internal-dpl-ccdb-backend: pid 7160 (exit 128)
./tpcreco.log[INFO]    - First error: [10:26:17][FATAL] Unable to find object GLO/Param/MatLUT/1546300800000
./tpcreco.log[ERROR] SEVERE: Device internal-dpl-ccdb-backend (7160) had at least one message above severity 5: Unable to find object GLO/Param/MatLUT/1546300800000
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/37}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/38}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/40}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/42}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/43}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/45}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/46}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/47}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/48}
./digi.log[ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/49}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/37}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/38}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/40}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/42}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/43}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/45}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/46}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/47}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/48}
./digi.log[4770:Digitizations]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/49}
./digi.log[4781:TPCDigitizer_15]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/37}
./digi.log[4781:TPCDigitizer_15]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/38}
./digi.log[4781:TPCDigitizer_15]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/40}
./digi.log[4781:TPCDigitizer_15]: [ERROR] Found duplicate input binding with different spec.:collisioncontext {SIM/COLLISIONCONTEXT/42}
[0 more errors; see full log]

Full log here.

@ktf ktf changed the title DPL: Move DataInputDirector to arrow::Dataset API DPL: add support for decompressing directly to shared memory Feb 19, 2025
ktf added 3 commits February 19, 2025 14:28
This PR postpones the read operations which would usually populate an intermediate
RecordBatch and it performs them directly on its subsequent shared memory
serialization. Doing so avoids having the intermediate representation allocate most
of the memory.

For the moment this is only done for TTree. RNtuple support will come in a subsequent PR.
@ktf ktf merged commit 5d76679 into AliceO2Group:dev Mar 2, 2025
19 checks passed
@ktf ktf deleted the pr13763 branch March 2, 2025 08:09
@ktf
Copy link
Member Author

ktf commented Mar 2, 2025

Tested on hyperloop, including using a workflows from a few usual suspects and actually submitting on the Grid. Merging to get it in tomorrow tag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants