Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions Detectors/TRD/calibration/src/KrClusterFinder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ void KrClusterFinder::setInput(const gsl::span<const Digit>& digitsIn, const gsl

void KrClusterFinder::findClusters()
{
if (mDigits.size() == 0 || mTriggerRecords.size() == 0) {
return;
}
int nClsTotal = 0;
int nClsDropped = 0;
int nClsInvalidFit = 0;
Expand Down Expand Up @@ -396,9 +399,9 @@ void KrClusterFinder::findClusters()
} else {
//mFitResult->Print(std::cout);
++nClsDropped;
LOG(DEBUG) << "Kr cluster cannot be added because values are out of range";
LOGF(DEBUG, "sumOfAllTimeBins(%i), sumAdcA(%f), sumAdcB(%f), clSizeRow(%i), clSizeCol(%i), clSizeTime(%i), maxTbA(%i), maxTbB(%i)", sumOfAllTimeBins, sumAdcA, sumAdcB, clSizeRow, clSizeCol, clSizeTime, maxTbA, maxTbB);
LOGF(DEBUG, "rmsAdc(%f), rmsTime(%f), nUsedADCsInCl(%i), sumOfAllTimeBinsAboveThreshold(%i), integralLandauFit(%f), sumOfAdcTrunc(%u)", rmsAdc, rmsTime, nUsedADCsInCl, sumOfAllTimeBinsAboveThreshold, integralLandauFit, sumOfAdcTrunc);
LOG(debug) << "Kr cluster cannot be added because values are out of range";
LOGF(debug, "sumOfAllTimeBins(%i), sumAdcA(%f), sumAdcB(%f), clSizeRow(%i), clSizeCol(%i), clSizeTime(%i), maxTbA(%i), maxTbB(%i)", sumOfAllTimeBins, sumAdcA, sumAdcB, clSizeRow, clSizeCol, clSizeTime, maxTbA, maxTbB);
LOGF(debug, "rmsAdc(%f), rmsTime(%f), nUsedADCsInCl(%i), sumOfAllTimeBinsAboveThreshold(%i), integralLandauFit(%f), sumOfAdcTrunc(%u)", rmsAdc, rmsTime, nUsedADCsInCl, sumOfAllTimeBinsAboveThreshold, integralLandauFit, sumOfAdcTrunc);
}
}
} // end cluster search
Expand All @@ -407,5 +410,5 @@ void KrClusterFinder::findClusters()

// we don't need the exact BC time, just use first interaction record within this TF
mTrigRecs.emplace_back(mTriggerRecords[0].getBCData(), nClsTotal);
LOGF(INFO, "Number of Kr clusters with a) invalid fit (%i) b) out-of-range values which were dropped (%i)", nClsInvalidFit, nClsDropped);
LOGF(info, "Number of Kr clusters with a) invalid fit (%i) b) out-of-range values which were dropped (%i)", nClsInvalidFit, nClsDropped);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@

#include "Framework/DataProcessorSpec.h"
#include "Framework/Task.h"
#include "DataFormatsTRD/Digit.h"
#include "DataFormatsTRD/TriggerRecord.h"
#include <SimulationDataFormat/IOMCTruthContainerView.h>

#include "TFile.h"
#include "TTree.h"
Expand All @@ -35,12 +38,18 @@ class TRDDigitReaderSpec : public o2::framework::Task
void run(o2::framework::ProcessingContext& pc) override;

private:
void connectTree();
bool mUseMC = false;
std::unique_ptr<TFile> mFile = nullptr;
std::unique_ptr<TFile> mFile;
std::unique_ptr<TTree> mTreeDigits;
std::string mFileName = "trddigits.root";
std::string mDigitTreeName = "o2sim";
std::string mDigitBranchName = "TRDDigit";
std::string mTriggerRecordBranchName = "TriggerRecord";
std::string mMCLabelsBranchName = "TRDMCLabels";
std::vector<o2::trd::Digit> mDigits, *mDigitsPtr = &mDigits;
std::vector<o2::trd::TriggerRecord> mTriggerRecords, *mTriggerRecordsPtr = &mTriggerRecords;
o2::dataformats::IOMCTruthContainerView* mLabels = nullptr;
};

o2::framework::DataProcessorSpec getTRDDigitReaderSpec(bool useMC);
Expand Down
74 changes: 31 additions & 43 deletions Detectors/TRD/workflow/io/src/TRDDigitReaderSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@

#include <SimulationDataFormat/MCCompLabel.h>
#include <SimulationDataFormat/ConstMCTruthContainer.h>
#include <SimulationDataFormat/IOMCTruthContainerView.h>

#include "DataFormatsTRD/Digit.h"
#include "DataFormatsTRD/TriggerRecord.h"

using namespace o2::framework;

Expand All @@ -34,51 +30,43 @@ namespace trd
void TRDDigitReaderSpec::init(InitContext& ic)
{

auto filename = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")),
ic.options().get<std::string>("digitsfile"));
mFileName = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")),
ic.options().get<std::string>("digitsfile"));
connectTree();
}

mFile = std::make_unique<TFile>(filename.c_str(), "OLD");
if (!(mFile && !mFile->IsZombie())) {
throw std::runtime_error("Error opening TRD digits file");
void TRDDigitReaderSpec::connectTree()
{
mTreeDigits.reset(nullptr); // in case it was already loaded
mFile.reset(TFile::Open(mFileName.c_str()));
assert(mFile && !mFile->IsZombie());
mTreeDigits.reset((TTree*)mFile->Get(mDigitTreeName.c_str()));
assert(mTreeDigits);
mTreeDigits->SetBranchAddress(mDigitBranchName.c_str(), &mDigitsPtr);
mTreeDigits->SetBranchAddress(mTriggerRecordBranchName.c_str(), &mTriggerRecordsPtr);
if (mUseMC) {
mTreeDigits->SetBranchAddress(mMCLabelsBranchName.c_str(), &mLabels);
}
LOG(info) << "Loaded tree from " << mFileName << " with " << mTreeDigits->GetEntries() << " entries";
}

void TRDDigitReaderSpec::run(ProcessingContext& pc)
{
auto DPLTree = ((TTree*)mFile->Get(mDigitTreeName.c_str()));
if (DPLTree) {
std::vector<o2::trd::Digit>* digits = nullptr;
o2::dataformats::IOMCTruthContainerView* ioLabels = nullptr;
std::vector<o2::trd::TriggerRecord>* triggerRecords = nullptr;

auto getFromBranch = [DPLTree](const char* name, void** ptr) {
auto br = DPLTree->GetBranch(name);
br->SetAddress(ptr);
br->GetEntry(0);
br->ResetAddress();
};
getFromBranch(mDigitBranchName.c_str(), (void**)&digits);
getFromBranch(mTriggerRecordBranchName.c_str(), (void**)&triggerRecords);
if (mUseMC) {
getFromBranch(mMCLabelsBranchName.c_str(), (void**)&ioLabels);
// publish labels in shared memory
auto& sharedlabels = pc.outputs().make<o2::dataformats::ConstMCTruthContainer<o2::MCCompLabel>>(Output{"TRD", "LABELS", 0, Lifetime::Timeframe});
ioLabels->copyandflatten(sharedlabels);
LOG(INFO) << "Labels size (in bytes) = " << sharedlabels.size();
}

pc.outputs().snapshot(Output{"TRD", "DIGITS", 0, Lifetime::Timeframe}, *digits);
pc.outputs().snapshot(Output{"TRD", "TRGRDIG", 0, Lifetime::Timeframe}, *triggerRecords);
LOG(INFO) << "Digits size=" << digits->size() << " triggerrecords size=" << triggerRecords->size();
} else {
LOG(ERROR) << "Error opening TTree";
auto currEntry = mTreeDigits->GetReadEntry() + 1;
assert(currEntry < mTreeDigits->GetEntries()); // this should not happen
mTreeDigits->GetEntry(currEntry);
LOG(info) << "Pushing " << mTriggerRecords.size() << " TRD trigger records at entry " << currEntry;
LOG(info) << "Pushing " << mDigits.size() << " digits for these trigger records";
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "DIGITS", 0, Lifetime::Timeframe}, mDigits);
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRGRDIG", 0, Lifetime::Timeframe}, mTriggerRecords);
if (mUseMC) {
auto& sharedlabels = pc.outputs().make<o2::dataformats::ConstMCTruthContainer<o2::MCCompLabel>>(Output{o2::header::gDataOriginTRD, "LABELS", 0, Lifetime::Timeframe});
mLabels->copyandflatten(sharedlabels);
}
if (mTreeDigits->GetReadEntry() + 1 >= mTreeDigits->GetEntries()) {
pc.services().get<ControlService>().endOfStream();
pc.services().get<ControlService>().readyToQuit(QuitRequest::Me);
}

mFile->Close();

// send endOfData control event and mark the reader as ready to finish
pc.services().get<ControlService>().endOfStream();
pc.services().get<ControlService>().readyToQuit(QuitRequest::Me);
}

DataProcessorSpec getTRDDigitReaderSpec(bool useMC)
Expand All @@ -94,7 +82,7 @@ DataProcessorSpec getTRDDigitReaderSpec(bool useMC)
outputs,
AlgorithmSpec{adaptFromTask<TRDDigitReaderSpec>(useMC)},
Options{
{"digitsfile", VariantType::String, "trddigits.root", {"Input data file containing run3 digitizer going into Trap Simulator"}},
{"digitsfile", VariantType::String, "trddigits.root", {"Input data file containing TRD digits"}},
{"input-dir", VariantType::String, "none", {"Input directory"}}}};
};

Expand Down
19 changes: 9 additions & 10 deletions Detectors/TRD/workflow/io/src/TRDTrackletReaderSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,10 @@ namespace trd
void TRDTrackletReader::init(InitContext& ic)
{
// get the option from the init context
LOG(INFO) << "Init TRD tracklet reader!";
LOG(info) << "Init TRD tracklet reader!";
mInFileNameTrklt = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")),
ic.options().get<std::string>("trd-tracklet-infile"));
mInTreeNameTrklt = o2::utils::Str::concat_string(o2::utils::Str::rectifyDirectory(ic.options().get<std::string>("input-dir")),
ic.options().get<std::string>("treename"));
mInTreeNameTrklt = ic.options().get<std::string>("treename");
connectTree();
if (mUseTrackletTransform) {
connectTreeCTracklet();
Expand All @@ -48,7 +47,7 @@ void TRDTrackletReader::connectTreeCTracklet()
assert(mTreeCTrklt);
mTreeCTrklt->SetBranchAddress("CTracklets", &mTrackletsCalPtr);
mTreeCTrklt->SetBranchAddress("TrigRecMask", &mTrigRecMaskPtr);
LOG(INFO) << "Loaded tree from trdcalibratedtracklets.root with " << mTreeCTrklt->GetEntries() << " entries";
LOG(info) << "Loaded tree from trdcalibratedtracklets.root with " << mTreeCTrklt->GetEntries() << " entries";
}

void TRDTrackletReader::connectTree()
Expand All @@ -63,29 +62,29 @@ void TRDTrackletReader::connectTree()
if (mUseMC) {
mTreeTrklt->SetBranchAddress("TRKLabels", &mLabelsPtr);
}
LOG(INFO) << "Loaded tree from " << mInFileNameTrklt << " with " << mTreeTrklt->GetEntries() << " entries";
LOG(info) << "Loaded tree from " << mInFileNameTrklt << " with " << mTreeTrklt->GetEntries() << " entries";
}

void TRDTrackletReader::run(ProcessingContext& pc)
{
auto currEntry = mTreeTrklt->GetReadEntry() + 1;
assert(currEntry < mTreeTrklt->GetEntries()); // this should not happen
mTreeTrklt->GetEntry(currEntry);
LOG(INFO) << "Pushing " << mTriggerRecords.size() << " TRD trigger records at entry " << currEntry;
LOG(INFO) << "Pushing " << mTracklets.size() << " uncalibrated TRD tracklets for these trigger records";
LOG(info) << "Pushing " << mTriggerRecords.size() << " TRD trigger records at entry " << currEntry;
LOG(info) << "Pushing " << mTracklets.size() << " uncalibrated TRD tracklets for these trigger records";
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRACKLETS", 0, Lifetime::Timeframe}, mTracklets);
if (mUseTrackletTransform) {
assert(mTreeTrklt->GetEntries() == mTreeCTrklt->GetEntries());
mTreeCTrklt->GetEntry(currEntry);
LOG(INFO) << "Pushing " << mTrackletsCal.size() << " calibrated TRD tracklets for these trigger records";
LOG(INFO) << "Pushing " << mTrigRecMask.size() << " flags for the given TRD trigger records";
LOG(info) << "Pushing " << mTrackletsCal.size() << " calibrated TRD tracklets for these trigger records";
LOG(info) << "Pushing " << mTrigRecMask.size() << " flags for the given TRD trigger records";
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "CTRACKLETS", 0, Lifetime::Timeframe}, mTrackletsCal);
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRIGRECMASK", 0, Lifetime::Timeframe}, mTrigRecMask);
}

pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRKTRGRD", 0, Lifetime::Timeframe}, mTriggerRecords);
if (mUseMC) {
LOG(INFO) << "Pushing " << mLabels.getNElements() << " TRD tracklet labels";
LOG(info) << "Pushing " << mLabels.getNElements() << " TRD tracklet labels";
pc.outputs().snapshot(Output{"TRD", "TRKLABELS", 0, Lifetime::Timeframe}, mLabels);
}

Expand Down
6 changes: 3 additions & 3 deletions Detectors/TRD/workflow/src/KrClustererSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,16 @@ void TRDKrClustererDevice::run(ProcessingContext& pc)
mKrClFinder.findClusters();
timer.Stop();

LOGF(INFO, "TRD Krypton cluster finder total timing: Cpu: %.3e Real: %.3e s", timer.CpuTime(), timer.RealTime());
LOGF(INFO, "Found %lu Kr clusters in %lu input trigger records.", mKrClFinder.getKrClusters().size(), triggerRecords.size());
LOGF(info, "TRD Krypton cluster finder total timing: Cpu: %.3e Real: %.3e s", timer.CpuTime(), timer.RealTime());
LOGF(info, "Found %lu Kr clusters in %lu input trigger records.", mKrClFinder.getKrClusters().size(), triggerRecords.size());

pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "KRCLUSTER", 0, Lifetime::Timeframe}, mKrClFinder.getKrClusters());
pc.outputs().snapshot(Output{o2::header::gDataOriginTRD, "TRGKRCLS", 0, Lifetime::Timeframe}, mKrClFinder.getKrTrigRecs());
}

void TRDKrClustererDevice::endOfStream(EndOfStreamContext& ec)
{
LOG(INFO) << "Done with the cluster finding (EoS received)";
LOG(info) << "Done with the cluster finding (EoS received)";
}

DataProcessorSpec getKrClustererSpec(bool digitTrigRec)
Expand Down