44 mOccupancyThreshold = ic.options().get<
float>(
"occupancy-threshold");
45 mAdcValueThreshold = ic.options().get<
float>(
"adc-threshold");
46 mMinimumTimeStamp = ic.options().get<
long>(
"min-timestamp");
47 mFilterAdcValue = ic.options().get<
bool>(
"filter-adc");
48 mFilterTimeStamp = ic.options().get<
bool>(
"filter-timestamp");
49 LOGP(
debug,
"got minimum timestamp {}", mMinimumTimeStamp);
55 auto const* sectorHeader = DataRefUtils::getHeader<TPCSectorHeader*>(inputRef);
56 if (sectorHeader ==
nullptr) {
57 LOGP(error,
"sector header missing on header stack for input on ", inputRef.spec->binding);
61 const int sector = sectorHeader->sector();
62 auto inDigitsO = pc.inputs().get<std::vector<o2::tpc::Digit>>(inputRef);
63 LOGP(
debug,
"processing sector {} with {} input digits", sector, inDigitsO.size());
65 std::vector<size_t> digitsPerTimeBin(
int(128 * 445.5));
67 for (
const auto& digit : inDigitsO) {
68 if ((digit.getChargeFloat() > mAdcValueThreshold) && (digit.getTimeStamp() > mMinimumTimeStamp)) {
69 ++digitsPerTimeBin[digit.getTimeStamp()];
73 bool isAboveThreshold{
false};
74 for (
const auto& timeBinOccupancy : digitsPerTimeBin) {
75 if (timeBinOccupancy > mOccupancyThreshold) {
76 LOGP(info,
"Sector {}, timeBinOccupancy {} > occupancy-threshold {}", sector, timeBinOccupancy, mOccupancyThreshold);
77 isAboveThreshold =
true;
82 std::vector<o2::tpc::Digit> cpDigits;
83 if (isAboveThreshold) {
84 std::copy_if(inDigitsO.begin(), inDigitsO.end(), std::back_inserter(cpDigits),
85 [
this](
const auto& digit) {
86 return (!mFilterTimeStamp || (digit.getTimeStamp() > mMinimumTimeStamp)) && (!mFilterAdcValue || (digit.getChargeFloat() > mAdcValueThreshold));
89 snapshot(pc.outputs(), cpDigits, sector);
92 LOGP(info,
"Number of processed time frames: {}", mProcessedTFs);