Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include "CommonDataFormat/InteractionRecord.h"
#include "DataFormatsFV0/Digit.h"
#include "DataFormatsFIT/DeadChannelMap.h"
#include "DataFormatsFV0/ChannelData.h"
#include "DataFormatsFV0/MCLabel.h"
#include "FV0Simulation/Detector.h"
Expand Down Expand Up @@ -51,6 +52,7 @@ class Digitizer
void setEventId(Int_t id) { mEventId = id; }
void setSrcId(Int_t id) { mSrcId = id; }
void setInteractionRecord(const InteractionTimeRecord& ir) { mIntRecord = ir; }
void setDeadChannelMap(o2::fit::DeadChannelMap const* deadChannelMap) { mDeadChannelMap = deadChannelMap; };

void process(const std::vector<o2::fv0::Hit>& hits, std::vector<o2::fv0::Digit>& digitsBC,
std::vector<o2::fv0::ChannelData>& digitsCh, std::vector<o2::fv0::DetTrigInput>& digitsTrig,
Expand Down Expand Up @@ -132,6 +134,8 @@ class Digitizer
BCCache mLastBCCache; // buffer for the last BC
std::array<int, Constants::nFv0Channels> mCfdStartIndex; // start indices for the CFD detector

o2::fit::DeadChannelMap const* mDeadChannelMap = nullptr;

/// Internal helper methods related to conversion of energy-deposition into el. signal
Int_t SimulateLightYield(Int_t pmt, Int_t nPhot) const;
Float_t SimulateTimeCfd(int& startIndex, const ChannelDigitF& pulseLast, const ChannelDigitF& pulse) const;
Expand Down
5 changes: 5 additions & 0 deletions Detectors/FIT/FV0/simulation/src/Digitizer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ void Digitizer::process(const std::vector<o2::fv0::Hit>& hits,
for (auto ids : hitIdx) {
const auto& hit = hits[ids];
Int_t detId = hit.GetDetectorID();

if (mDeadChannelMap && !mDeadChannelMap->isChannelAlive(detId)) {
continue;
}

Double_t hitEdep = hit.GetHitValue() * 1e3; // convert to MeV
Float_t const hitTime = hit.GetTime() * 1e9; // convert to ns
// TODO: check how big is inaccuracy if more than 1 'below-threshold' particles hit the same detector cell
Expand Down
30 changes: 26 additions & 4 deletions Steer/DigitizerWorkflow/src/FV0DigitizerSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "FV0DigitizerSpec.h"
#include "DataFormatsFV0/ChannelData.h"
#include "DataFormatsFIT/DeadChannelMap.h"
#include "DataFormatsFV0/Digit.h"
#include "Framework/ControlService.h"
#include "Framework/ConfigParamRegistry.h"
Expand All @@ -30,6 +31,7 @@
#include "SimulationDataFormat/MCCompLabel.h"
#include "DetectorsBase/BaseDPLDigitizer.h"
#include "DetectorsRaw/HBFUtils.h"
#include "Framework/CCDBParamSpec.h"
#include <TFile.h>

using namespace o2::framework;
Expand All @@ -53,6 +55,16 @@ class FV0DPLDigitizerTask : public o2::base::BaseDPLDigitizer
LOG(debug) << "FV0DPLDigitizerTask:init";
mDigitizer.init();
mDisableQED = ic.options().get<bool>("disable-qed"); //TODO: QED implementation to be tested
mUseDeadChannelMap = !ic.options().get<bool>("disable-dead-channel-map");
mUpdateDeadChannelMap = mUseDeadChannelMap;
}

void finaliseCCDB(ConcreteDataMatcher& matcher, void* obj)
{
// Initialize the dead channel map only once
if (matcher == ConcreteDataMatcher("FV0", "DeadChannelMap", 0)) {
mUpdateDeadChannelMap = false;
}
}

void run(framework::ProcessingContext& pc)
Expand All @@ -67,6 +79,11 @@ class FV0DPLDigitizerTask : public o2::base::BaseDPLDigitizer
context->initSimChains(o2::detectors::DetID::FV0, mSimChains);
const bool withQED = context->isQEDProvided() && !mDisableQED; //TODO: QED implementation to be tested

if (mUseDeadChannelMap && mUpdateDeadChannelMap) {
auto deadChannelMap = pc.inputs().get<o2::fit::DeadChannelMap*>("fv0deadchannelmap");
mDigitizer.setDeadChannelMap(deadChannelMap.get());
}

mDigitizer.setTimeStamp(context->getGRP().getTimeStart());

auto& irecords = context->getEventRecords(withQED); //TODO: QED implementation to be tested
Expand Down Expand Up @@ -131,6 +148,8 @@ class FV0DPLDigitizerTask : public o2::base::BaseDPLDigitizer

private:
bool mFinished = false;
bool mUseDeadChannelMap = true;
bool mUpdateDeadChannelMap = true;
Digitizer mDigitizer;
std::vector<TChain*> mSimChains;
std::vector<o2::fv0::ChannelData> mDigitsCh;
Expand Down Expand Up @@ -159,16 +178,19 @@ o2::framework::DataProcessorSpec getFV0DigitizerSpec(int channel, bool mctruth)
}
outputs.emplace_back("FV0", "ROMode", 0, Lifetime::Timeframe);

std::vector<InputSpec> inputs;
inputs.emplace_back("fv0deadchannelmap", "FV0", "DeadChannelMap", 0, Lifetime::Condition, ccdbParamSpec("FV0/Calib/DeadChannelMap"));
inputs.emplace_back("collisioncontext", "SIM", "COLLISIONCONTEXT", static_cast<SubSpecificationType>(channel), Lifetime::Timeframe);
return DataProcessorSpec{
"FV0Digitizer",
Inputs{InputSpec{"collisioncontext", "SIM", "COLLISIONCONTEXT", static_cast<SubSpecificationType>(channel), Lifetime::Timeframe}},

inputs,
outputs,

AlgorithmSpec{adaptFromTask<FV0DPLDigitizerTask>()},
Options{{"pileup", VariantType::Int, 1, {"whether to run in continuous time mode"}},
{"disable-qed", o2::framework::VariantType::Bool, false, {"disable QED handling"}}}};
//Options{{"pileup", VariantType::Int, 1, {"whether to run in continuous time mode"}}}};
{"disable-qed", o2::framework::VariantType::Bool, false, {"disable QED handling"}},
{"disable-dead-channel-map", o2::framework::VariantType::Bool, false, {"Don't mask dead channels"}}}};
// Options{{"pileup", VariantType::Int, 1, {"whether to run in continuous time mode"}}}};
}

} // end namespace fv0
Expand Down