Skip to content
Merged
10 changes: 5 additions & 5 deletions tree/dataframe/inc/ROOT/RNTupleProcessorDS.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ class RNTupleProcessorDS final : public ROOT::RDF::RDataSource {
std::string fFieldName;
std::string fTypeName;
std::size_t fNRepetitions;
RNTupleProcessorEntry::FieldIndex_t fEntryFieldIdx;
ROOT::Internal::RNTupleProcessorEntry::FieldIndex_t fEntryFieldIdx;
// Enable `std::vector::emplace_back` for this type
RFieldInfo(ROOT::DescriptorId_t onDiskId, std::string_view fieldName, std::string_view typeName,
std::size_t nRepetitions, Internal::RNTupleProcessorEntry::FieldIndex_t entryFieldIdx)
std::size_t nRepetitions, ROOT::Internal::RNTupleProcessorEntry::FieldIndex_t entryFieldIdx)
: fOnDiskId(onDiskId),
fFieldName(fieldName),
fTypeName(typeName),
Expand Down Expand Up @@ -97,11 +97,11 @@ class RNTupleProcessorDS final : public ROOT::RDF::RDataSource {
/// be added as `ROOT::VecOps::RVec` (e.g., `std::set<Jet> will be added as a `std::set`, but `Jet.[pt|eta] will be
/// added as `ROOT::VecOps::RVec<float>).
void AddField(const ROOT::RFieldBase &field, std::string_view colName,
Internal::RNTupleProcessorProvenance procProvenance, std::deque<RFieldInfo> &fieldInfos,
ROOT::Internal::RNTupleProcessorProvenance procProvenance, std::deque<RFieldInfo> &fieldInfos,
bool convertToRVec = true);

public:
RNTupleProcessorDS(std::unique_ptr<ROOT::Experimental::RNTupleProcessor> processor);
RNTupleProcessorDS(std::unique_ptr<ROOT::RNTupleProcessor> processor);
RNTupleProcessorDS(const RNTupleProcessorDS &) = delete;
RNTupleProcessorDS &operator=(const RNTupleProcessorDS &) = delete;
RNTupleProcessorDS(RNTupleProcessorDS &&) = delete;
Expand Down Expand Up @@ -137,7 +137,7 @@ protected:
} // namespace ROOT::Experimental::Internal::RDF

namespace ROOT::Experimental::RDF {
RDataFrame FromRNTupleProcessor(std::unique_ptr<ROOT::Experimental::RNTupleProcessor> processor);
RDataFrame FromRNTupleProcessor(std::unique_ptr<ROOT::RNTupleProcessor> processor);
} // namespace ROOT::Experimental::RDF

#endif // ROOT_RNTupleProcessorDS
23 changes: 11 additions & 12 deletions tree/dataframe/src/RNTupleProcessorDS.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@
namespace ROOT::Experimental::Internal::RDF {
/// Every RDF column is represented by exactly one RNTuple field
class RNTupleProcessorColumnReader : public ROOT::Detail::RDF::RColumnReaderBase {
RNTupleProcessorOptionalPtr<void> fValuePtr; ///< Container for the value of the column
RNTupleProcessorValuePtr<void> fValuePtr; ///< Container for the value of the column
Long64_t fLastLoadedEntry = ROOT::kInvalidNTupleIndex;

public:
RNTupleProcessorColumnReader(RNTupleProcessorOptionalPtr<void> &valuePtr) : fValuePtr(std::move(valuePtr)) {}
RNTupleProcessorColumnReader(RNTupleProcessorValuePtr<void> &valuePtr) : fValuePtr(std::move(valuePtr)) {}
~RNTupleProcessorColumnReader() override = default;

void *GetImpl(Long64_t entry) final
Expand All @@ -49,7 +49,7 @@ RNTupleProcessorDS::~RNTupleProcessorDS() = default;

// TODO: see if common parts of this and RNTupleDS::AddField can be factored out.
void RNTupleProcessorDS::AddField(const ROOT::RFieldBase &field, std::string_view colName,
Internal::RNTupleProcessorProvenance procProvenance,
ROOT::Internal::RNTupleProcessorProvenance procProvenance,
std::deque<RNTupleProcessorDS::RFieldInfo> &fieldInfos, bool convertToRVec)
{
// As an example for the mapping of RNTuple fields to RDF columns, let's consider an RNTuple
Expand Down Expand Up @@ -215,13 +215,13 @@ void RNTupleProcessorDS::AddField(const ROOT::RFieldBase &field, std::string_vie
fColumnNames.emplace_back(canonicalName);
fColumnTypes.emplace_back(valueField->GetTypeName());

RNTupleProcessorEntry::FieldIndex_t fieldIdx;
ROOT::Internal::RNTupleProcessorEntry::FieldIndex_t fieldIdx;
if (auto optFieldIdx = fProcessor->GetEntry().FindFieldIndex(canonicalName);
optFieldIdx && fProcessor->GetEntry().GetField(*optFieldIdx).GetTypeName() == field.GetTypeName()) {
fieldIdx = *optFieldIdx;
} else {
fieldIdx = fProcessor->AddFieldToEntry(std::move(valueField), canonicalName, nullptr,
Internal::RNTupleProcessorProvenance());
ROOT::Internal::RNTupleProcessorProvenance());
}

if (cardinalityField) {
Expand All @@ -231,7 +231,7 @@ void RNTupleProcessorDS::AddField(const ROOT::RFieldBase &field, std::string_vie
fColumnNames.emplace_back(cardinalityFieldName);
fColumnTypes.emplace_back(cardinalityField->GetTypeName());
auto cardinalityFieldIdx = fProcessor->AddFieldToEntry(std::move(cardinalityField), cardinalityFieldName, nullptr,
Internal::RNTupleProcessorProvenance());
ROOT::Internal::RNTupleProcessorProvenance());
if (!fieldInfos.empty()) {
const auto &fieldInfo = fieldInfos.back();
fieldIdx = fieldInfo.fEntryFieldIdx;
Expand All @@ -244,11 +244,11 @@ void RNTupleProcessorDS::AddField(const ROOT::RFieldBase &field, std::string_vie
}
}

RNTupleProcessorDS::RNTupleProcessorDS(std::unique_ptr<ROOT::Experimental::RNTupleProcessor> processor)
RNTupleProcessorDS::RNTupleProcessorDS(std::unique_ptr<ROOT::RNTupleProcessor> processor)
: fProcessor(std::move(processor))
{
// Do not add the subfields now, this is handled by AddField.
fProcessor->AddAllFieldsToEntry(Internal::RNTupleProcessorProvenance(), /*includeSubfields=*/false);
fProcessor->AddAllFieldsToEntry(ROOT::Internal::RNTupleProcessorProvenance(), /*includeSubfields=*/false);
const auto &entry = fProcessor->GetEntry();
for (auto fieldIdx : entry.GetFieldIndices()) {
const auto &field = entry.GetValue(fieldIdx).GetField();
Expand Down Expand Up @@ -337,7 +337,7 @@ RNTupleProcessorDS::GetColumnReaders(unsigned int /* slot */, std::string_view n
newField->SetOnDiskId(field.GetOnDiskId());

try {
fProcessor->AddFieldToEntry(std::move(newField), strName, nullptr, Internal::RNTupleProcessorProvenance());
fProcessor->AddFieldToEntry(std::move(newField), strName, nullptr, ROOT::Internal::RNTupleProcessorProvenance());
} catch (const ROOT::RException &) {
std::string msg = "RNTupleProcessorDS: invalid type \"" + requestedType + "\" for column \"" + strName +
"\" with on-disk type \"" + field.GetTypeName() + "\"";
Expand Down Expand Up @@ -391,7 +391,7 @@ bool RNTupleProcessorDS::HasColumn(std::string_view colName) const
void RNTupleProcessorDS::Initialize()
{
fCurrentRanges.clear();
fProcessor->Connect(fProcessor->GetEntry().GetFieldIndices(), Internal::RNTupleProcessorProvenance(),
fProcessor->Connect(fProcessor->GetEntry().GetFieldIndices(), ROOT::Internal::RNTupleProcessorProvenance(),
/*updateFields=*/false);
}

Expand Down Expand Up @@ -441,8 +441,7 @@ ROOT::RDF::RSampleInfo RNTupleProcessorDS::CreateSampleInfo(
}
} // namespace ROOT::Experimental::Internal::RDF

ROOT::RDataFrame
ROOT::Experimental::RDF::FromRNTupleProcessor(std::unique_ptr<ROOT::Experimental::RNTupleProcessor> processor)
ROOT::RDataFrame ROOT::Experimental::RDF::FromRNTupleProcessor(std::unique_ptr<ROOT::RNTupleProcessor> processor)
{
return ROOT::RDataFrame(
std::make_unique<ROOT::Experimental::Internal::RDF::RNTupleProcessorDS>(std::move(processor)));
Expand Down
6 changes: 3 additions & 3 deletions tree/dataframe/test/datasource_ntuple_processor.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
using ROOT::TestSupport::FileRaii;

using ROOT::RNTupleModel;
using ROOT::RNTupleProcessor;
using ROOT::RNTupleWriter;
using ROOT::Experimental::CreateRNTupleJoinProcessor;
using ROOT::Experimental::RNTupleProcessor;
using ROOT::Experimental::Internal::RDF::RNTupleProcessorDS;

/*
Expand Down Expand Up @@ -235,8 +235,8 @@ static void ChainTest(const std::string &name, const std::string &fname)
// Causes "Too many open files" errors on Windows
// TODO(fdegeus) Investigate root cause + fix
#if !defined(_MSC_VER) || defined(R__ENABLE_BROKEN_WIN_TESTS)
std::vector<ROOT::Experimental::RNTupleOpenSpec> openSpecs(1000, {name, fname});
auto proc1000 = RNTupleProcessor::CreateChain(openSpecs);
std::vector<ROOT::RNTupleInputSpec> inputSpecs(1000, {name, fname});
auto proc1000 = RNTupleProcessor::CreateChain(inputSpecs);
auto df1000 = ROOT::Experimental::RDF::FromRNTupleProcessor(std::move(proc1000));
EXPECT_DOUBLE_EQ(42000.0, df1000.Sum<float>("pt").GetValue());
#endif
Expand Down
Loading
Loading