37#include <TStopwatch.h> 
   48  std::vector<OutputSpec> outputs;
 
   49  outputs.emplace_back(detOrig, 
"DIGITS", 0, Lifetime::Timeframe);
 
   50  outputs.emplace_back(detOrig, 
"DIGITSROF", 0, Lifetime::Timeframe);
 
   52    outputs.emplace_back(detOrig, 
"DIGITSMC2ROF", 0, Lifetime::Timeframe);
 
   53    outputs.emplace_back(detOrig, 
"DIGITSMCTR", 0, Lifetime::Timeframe);
 
   55  outputs.emplace_back(detOrig, 
"ROMode", 0, Lifetime::Timeframe);
 
   72    mDisableQED = ic.
options().
get<
bool>(
"disable-qed");
 
 
   83      LOGP(info, 
"Applying misalignment to ITS3 Hits");
 
   90    const bool withQED = context->isQEDProvided() && !mDisableQED;
 
   91    auto& timesview = context->getEventRecords(withQED);
 
   92    LOG(info) << 
"GOT " << timesview.size() << 
" COLLISSION TIMES";
 
   93    LOG(info) << 
"SIMCHAINS " << mSimChains.size();
 
   96    if (timesview.empty()) {
 
  101    LOG(info) << 
" CALLING ITS3 DIGITIZATION ";
 
  108    auto& digitsAccum = pc.
outputs().
make<std::vector<itsmft::Digit>>(
Output{mOrigin, 
"DIGITS", 0});
 
  110    auto accumulate = [
this, &digitsAccum]() {
 
  113      if (mDigits.empty()) {
 
  116      auto ndigAcc = digitsAccum.size();
 
  117      std::copy(mDigits.begin(), mDigits.end(), std::back_inserter(digitsAccum));
 
  120      auto nROFRecsOld = mROFRecordsAccum.size();
 
  122      for (
int i = 0; 
i < mROFRecords.size(); 
i++) {
 
  123        auto& rof = mROFRecords[
i];
 
  124        rof.setFirstEntry(ndigAcc + rof.getFirstEntry());
 
  127        if (mFixMC2ROF < mMC2ROFRecordsAccum.size()) { 
 
  128          for (
int m2rid = mFixMC2ROF; m2rid < mMC2ROFRecordsAccum.size(); m2rid++) {
 
  130            auto& mc2rof = mMC2ROFRecordsAccum[m2rid];
 
  131            if (rof.getROFrame() == mc2rof.minROF) {
 
  133              mc2rof.rofRecordID = nROFRecsOld + 
i;
 
  140      std::copy(mROFRecords.begin(), mROFRecords.end(), std::back_inserter(mROFRecordsAccum));
 
  144      LOG(info) << 
"Added " << mDigits.size() << 
" digits ";
 
  151    auto& eventParts = context->getEventParts(withQED);
 
  155    for (
size_t collID = 0; collID < timesview.size(); ++collID) {
 
  156      auto irt = timesview[collID];
 
  157      if (irt.toLong() < bcShift) { 
 
  166      for (
auto& part : eventParts[collID]) {
 
  172        if (!mHits.empty()) {
 
  173          LOG(
debug) << 
"For collision " << collID << 
" eventID " << part.entryID
 
  174                     << 
" found " << mHits.size() << 
" hits ";
 
  175          mDigitizer.
process(&mHits, part.entryID, part.sourceID); 
 
  195    LOG(info) << mID.
getName() << 
": Sending ROMode= " << mROMode << 
" to GRPUpdater";
 
  199    LOG(info) << 
"Digitization took " << timer.CpuTime() << 
"s";
 
 
  209    static bool initOnce{
false};
 
  223      digipar.setContinuous(dopt.continuous);
 
  225      if (dopt.continuous) {
 
  228        digipar.setROFrameLength(frameNS);                                                                       
 
  237      digipar.getSignalShape().setParameters(dopt.strobeFlatTop, dopt.strobeMaxRiseTime, dopt.strobeQRiseTime0);
 
  238      digipar.setChargeThreshold(dopt.chargeThreshold); 
 
  239      digipar.setNoisePerPixel(dopt.noisePerPixel);     
 
  240      digipar.setTimeOffset(dopt.timeOffset);
 
  241      digipar.setNSimSteps(dopt.nSimSteps);
 
  244      digipar.setIBChargeThreshold(doptIB.IBChargeThreshold);
 
  245      digipar.setIBNSimSteps(doptIB.nIBSimSteps);
 
  246      digipar.setIBNoisePerPixel(doptIB.IBNoisePerPixel);
 
  249      LOG(info) << mID.
getName() << 
" simulated in " 
 
  266      LOG(info) << mID.
getName() << 
" Alpide param updated";
 
  268      par.printKeyValues();
 
  272      LOG(info) << mID.
getName() << 
" static dead map updated";
 
 
  279  bool mWithMCTruth{
true};
 
  280  bool mFinished{
false};
 
  281  bool mDisableQED{
false};
 
  285  std::vector<o2::itsmft::Digit> mDigits{};
 
  286  std::vector<o2::itsmft::ROFRecord> mROFRecords{};
 
  287  std::vector<o2::itsmft::ROFRecord> mROFRecordsAccum{};
 
  288  std::vector<o2::itsmft::Hit> mHits{};
 
  289  std::vector<o2::itsmft::Hit>* mHitsP{&mHits};
 
  292  std::vector<o2::itsmft::MC2ROFRecord> mMC2ROFRecordsAccum{};
 
  293  std::vector<TChain*> mSimChains{};
 
 
  303  std::vector<InputSpec> inputs;
 
  304  inputs.emplace_back(
"collisioncontext", 
"SIM", 
"COLLISIONCONTEXT", 
static_cast<SubSpecificationType>(channel), Lifetime::Timeframe);
 
  305  inputs.emplace_back(
"ITS_alppar", 
"ITS", 
"ALPIDEPARAM", 0, Lifetime::Condition, 
ccdbParamSpec(
"ITS/Config/AlpideParam"));
 
  307    inputs.emplace_back(
"IT3_dead", 
"IT3", 
"DEADMAP", 0, Lifetime::Condition, 
ccdbParamSpec(
"IT3/Calib/DeadMap"));
 
  311                           inputs, makeOutChannels(detOrig, mctruth),
 
 
Definition of the base digitizer task class.
 
A const (ready only) version of MCTruthContainer.
 
o2::framework::DataAllocator::SubSpecificationType SubSpecificationType
 
Header of the General Run Parameters object.
 
Definition of the GeometryTGeo class.
 
Definition of the ITS digitizer.
 
virtual void init(o2::framework::InitContext &) final
 
static const ITS3Params & Instance()
 
Static class with identifiers, bitmasks and names for ALICE detectors.
 
static constexpr const char * getName(ID id)
names of defined detectors
 
static const std::array< std::vector< std::string >, DetID::nDetectors > DETECTORBRANCHNAMES
 
T get(const char *key) const
 
void snapshot(const Output &spec, T const &object)
 
o2::header::DataHeader::SubSpecificationType SubSpecificationType
 
decltype(auto) make(const Output &spec, Args... args)
 
ConfigParamRegistry const & options()
 
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
 
InputRecord & inputs()
The inputs associated with this processing context.
 
ServiceRegistryRef services()
The services registry associated with this processing context.
 
uint32_t getEventROFrameMax() const
 
void setEventTime(const o2::InteractionTimeRecord &irt)
 
void setDeadChannelsMap(const o2::itsmft::NoiseMap *mp)
 
void setROFRecords(std::vector< o2::itsmft::ROFRecord > *rec)
 
uint32_t getEventROFrameMin() const
 
void setDigits(std::vector< o2::itsmft::Digit > *dig)
 
void setGeometry(const o2::its::GeometryTGeo *gm)
 
void process(const std::vector< itsmft::Hit > *hits, int evID, int srcID)
Steer conversion of hits to digits.
 
o2::its3::DigiParams & getParams()
 
void fillOutputContainer(uint32_t maxFrame=0xffffffff)
 
void resetEventROFrames()
 
void setMCLabels(o2::dataformats::MCTruthContainer< o2::MCCompLabel > *mclb)
 
void run(framework::ProcessingContext &pc)
 
void finaliseCCDB(ConcreteDataMatcher &matcher, void *obj)
 
ITS3DPLDigitizerTask(bool mctruth=true)
 
void initDigitizerTask(framework::InitContext &ic) override
 
void updateTimeDependentParams(ProcessingContext &pc)
 
static GeometryTGeo * Instance()
 
void fillMatrixCache(int mask) override
 
int getROFrameBiasInBC() const
 
NoiseMap class for the ITS and MFT.
 
bool initSimChains(o2::detectors::DetID detid, std::vector< TChain * > &simchains) const
 
constexpr o2::header::DataOrigin gDataOriginIT3
 
constexpr double LHCBunchSpacingNS
 
Defining PrimaryVertex explicitly as messageable.
 
std::vector< ConfigParamSpec > ccdbParamSpec(std::string const &path, int runDependent, std::vector< CCDBMetadata > metadata={}, int qrate=0)
 
std::vector< ConfigParamSpec > Options
 
header::DataHeader::SubSpecificationType SubSpecificationType
 
DataProcessorSpec getITS3DigitizerSpec(int channel, bool mctruth)
 
class listing possible services
 
static void misalignHits()
 
int roFrameBiasInBC
bias of the start of ROF wrt orbit start: t_irof = (irof*roFrameLengthInBC + roFrameBiasInBC)*BClengt...
 
float strobeDelay
strobe start (in ns) wrt ROF start
 
int roFrameLengthInBC
ROF length in BC for continuos mode.
 
float strobeLengthCont
if < 0, full ROF length - delay
 
float strobeLengthTrig
length of the strobe in ns (sig. over threshold checked in this window only)
 
float roFrameLengthTrig
length of RO frame in ns for triggered mode
 
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"