51   fUncompressedSize = 0;
 
   53   for (
const auto &
colDesc : fDescriptor.GetColumnIterable()) {
 
   76         if (!fCompressionSettings && 
columnRange.GetCompressionSettings()) {
 
   77            fCompressionSettings = *
columnRange.GetCompressionSettings();
 
   78         } 
else if (fCompressionSettings && 
columnRange.GetCompressionSettings() &&
 
   79                    (*fCompressionSettings != *
columnRange.GetCompressionSettings())) {
 
   84                                     std::to_string(*fCompressionSettings) + 
" vs " +
 
   85                                     std::to_string(*
columnRange.GetCompressionSettings()) +
 
   86                                     ") for column with physical ID " + std::to_string(
colId)));
 
 
  129std::vector<ROOT::DescriptorId_t>
 
  132   std::vector<ROOT::DescriptorId_t> 
colIds;
 
  139      for (
const auto &col : fDescriptor.GetColumnIterable(
currId)) {
 
  140         if (col.IsAliasColumn()) {
 
  144         colIds.emplace_back(col.GetPhysicalId());
 
  147      for (
const auto &
fld : fDescriptor.GetFieldIterable(
currId)) {
 
 
  155std::unique_ptr<ROOT::Experimental::RNTupleInspector>
 
  162std::unique_ptr<ROOT::Experimental::RNTupleInspector>
 
  171   if (!fCompressionSettings)
 
  174   int algorithm = *fCompressionSettings / 100;
 
  175   int level = *fCompressionSettings - (
algorithm * 100);
 
  178          " (level " + std::to_string(level) + 
")";
 
 
  206std::vector<ROOT::DescriptorId_t>
 
  209   std::vector<ROOT::DescriptorId_t> 
colIds;
 
 
  221   std::set<ROOT::ENTupleColumnType> 
colTypes;
 
 
  237      std::uint32_t count = 0;
 
  242         this->nElems += 
colInfo.GetNElements();
 
  243         this->compressedSize += 
colInfo.GetCompressedSize();
 
  244         this->uncompressedSize += 
colInfo.GetUncompressedSize();
 
  245         this->nPages += 
colInfo.GetNPages();
 
  249      float GetCompressionFactor()
 const 
  257   std::map<ENTupleColumnType, ColumnTypeInfo> 
colTypeInfo;
 
  266      output << 
" column type    | count   | # elements  | compressed bytes | uncompressed bytes | compression ratio | " 
  268             << 
"----------------|---------|-------------|------------------|--------------------|-------------------|-" 
  273                << 
typeInfo.count << 
" |" << std::setw(12) << 
typeInfo.nElems << 
" |" << std::setw(17)
 
  274                << 
typeInfo.compressedSize << 
" |" << std::setw(19) << 
typeInfo.uncompressedSize << 
" |" << std::fixed
 
  275                << std::setprecision(3) << std::setw(18) << 
typeInfo.GetCompressionFactor() << 
" |" << std::setw(6)
 
  276                << 
typeInfo.nPages << 
" " << std::endl;
 
  279      output << 
"columnType,count,nElements,compressedSize,uncompressedSize,compressionFactor,nPages" << std::endl;
 
  282                << 
"," << 
typeInfo.compressedSize << 
"," << 
typeInfo.uncompressedSize << 
"," << std::fixed
 
  283                << std::setprecision(3) << 
typeInfo.GetCompressionFactor() << 
"," << 
typeInfo.nPages << std::endl;
 
  286   default: 
R__ASSERT(
false && 
"Invalid print format");
 
 
  292                                                              std::string_view histName, std::string_view 
histTitle)
 
  294   if (histName.empty()) {
 
  314   auto hist = std::make_unique<TH1D>(std::string(histName).c_str(), std::string(
histTitle).c_str(), 1, 0, 1);
 
 
  334                                                              std::string histName, std::string 
histTitle, 
size_t nBins)
 
 
  343                                                                                    std::string histName,
 
  346   if (histName.empty())
 
  355      return std::make_unique<TH1D>(histName.c_str(), 
histTitle.c_str(), 64, 0, 0);
 
  357   auto hist = std::unique_ptr<TH1D>(
dynamic_cast<TH1D *
>(
perTypeHist->GetHists()->First()));
 
  359   hist->SetName(histName.c_str());
 
  361   hist->SetXTitle(
"Page size (B)");
 
  362   hist->SetYTitle(
"N_{pages}");
 
 
  368                                                              std::string histName, std::string 
histTitle, 
size_t nBins)
 
  370   auto hist = std::make_unique<TH1D>();
 
  372   if (histName.empty())
 
  373      histName = 
"pageSizeHist";
 
  374   hist->SetName(histName.c_str());
 
  378   hist->SetXTitle(
"Page size (B)");
 
  379   hist->SetYTitle(
"N_{pages}");
 
  383      auto colInfo = GetColumnInspector(colId);
 
  384      pageSizes.insert(pageSizes.end(), colInfo.GetCompressedPageSizes().begin(),
 
  385                       colInfo.GetCompressedPageSizes().end());
 
 
  401std::unique_ptr<THStack>
 
  403                                                              std::string histName, std::string 
histTitle, 
size_t nBins)
 
  405   if (histName.empty())
 
  406      histName = 
"pageSizeHist";
 
  408      histTitle = 
"Per-column type page size distribution";
 
  412   double histMin = std::numeric_limits<double>::max();
 
  414   std::map<ROOT::ENTupleColumnType, std::vector<std::uint64_t>> 
pageSizes;
 
  429         auto colInfo = GetColumnInspector(colId);
 
  430         pageSizesForColType.insert(pageSizesForColType.end(), colInfo.GetCompressedPageSizes().begin(),
 
  431                                    colInfo.GetCompressedPageSizes().end());
 
  444      auto hist = std::make_unique<TH1D>(
 
 
  464   if (
fieldId >= fDescriptor.GetNFields()) {
 
  468   return fFieldTreeInfo.at(
fieldId);
 
 
  480   return GetFieldTreeInspector(
fieldId);
 
 
  501std::vector<ROOT::DescriptorId_t>
 
  504   std::vector<ROOT::DescriptorId_t> 
fieldIds;
 
 
  521                                                               std::ostream &
output)
 const 
  526      output << 
"digraph D {\n";
 
  527      output << 
"node[shape=box]\n";
 
  533   auto htmlEscape = [&](
const std::string &
in) -> std::string {
 
  535      out.reserve(
in.size());
 
  536      for (
const char &
c : 
in) {
 
  538         case '&': out += 
"&"; 
break;
 
  539         case '<': out += 
"<"; 
break;
 
  540         case '>': out += 
">"; 
break;
 
  541         case '\"': out += 
"""; 
break;
 
  542         case '\'': out += 
"'"; 
break;
 
  543         default: out += 
c; 
break;
 
  559      output << 
"<b>RFieldZero</b>";
 
 
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
 
std::string & operator+=(std::string &left, const TString &right)
 
The available trivial, native content types of a column.
 
Provides column-level storage information.
 
Provides field-level storage information.
 
Inspect on-disk and storage-related information of an RNTuple.
 
std::vector< ROOT::DescriptorId_t > GetFieldsByName(const std::regex &fieldNamePattern, bool searchInSubfields=true) const
Get the IDs of (sub-)fields whose name matches the given string.
 
const RFieldTreeInspector & GetFieldTreeInspector(ROOT::DescriptorId_t fieldId) const
Get storage information for a given (sub)field by ID.
 
std::unique_ptr< TH1D > GetPageSizeDistribution(ROOT::DescriptorId_t physicalColumnId, std::string histName="", std::string histTitle="", size_t nBins=64)
Get a histogram containing the size distribution of the compressed pages for an individual column.
 
size_t GetColumnCountByType(ROOT::ENTupleColumnType colType) const
Get the number of columns of a given type present in the RNTuple.
 
std::vector< ROOT::ENTupleColumnType > GetColumnTypes()
Get all column types present in the RNTuple being inspected.
 
size_t GetFieldCountByType(const std::regex &typeNamePattern, bool searchInSubfields=true) const
Get the number of fields of a given type or class present in the RNTuple.
 
std::vector< ROOT::DescriptorId_t > GetColumnsByType(ROOT::ENTupleColumnType colType)
Get the IDs of all columns with the given type.
 
std::string GetCompressionSettingsAsString() const
Get a string describing compression settings of the RNTuple being inspected.
 
RFieldTreeInspector CollectFieldTreeInfo(ROOT::DescriptorId_t fieldId)
Recursively gather field-level information.
 
RNTupleInspector(std::unique_ptr< ROOT::Internal::RPageSource > pageSource)
 
void PrintColumnTypeInfo(ENTupleInspectorPrintFormat format=ENTupleInspectorPrintFormat::kTable, std::ostream &output=std::cout)
Print storage information per column type.
 
const RColumnInspector & GetColumnInspector(ROOT::DescriptorId_t physicalColumnId) const
Get storage information for a given column.
 
std::unique_ptr< ROOT::Internal::RPageSource > fPageSource
 
static std::unique_ptr< RNTupleInspector > Create(const RNTuple &sourceNTuple)
Create a new RNTupleInspector.
 
void CollectColumnInfo()
Gather column-level and RNTuple-level information.
 
void PrintFieldTreeAsDot(const ROOT::RFieldDescriptor &fieldDescriptor, std::ostream &output=std::cout) const
Print a .dot string that represents the tree of the (sub)fields of an RNTuple.
 
std::vector< ROOT::DescriptorId_t > GetAllColumnsOfField(ROOT::DescriptorId_t fieldId) const
Get the columns that make up the given field, including its subfields.
 
std::unique_ptr< TH1D > GetColumnTypeInfoAsHist(ENTupleInspectorHist histKind, std::string_view histName="", std::string_view histTitle="")
Get a histogram showing information for each column type present,.
 
ROOT::RNTupleDescriptor fDescriptor
 
A column element encapsulates the translation between basic C++ types and their column representation...
 
static const char * GetColumnTypeName(ROOT::ENTupleColumnType type)
 
static std::unique_ptr< RColumnElementBase > Generate(ROOT::ENTupleColumnType type)
If CppT == void, use the default C++ type for the given column type.
 
static std::unique_ptr< RPageSourceFile > CreateFromAnchor(const RNTuple &anchor, const ROOT::RNTupleReadOptions &options=ROOT::RNTupleReadOptions())
Used from the RNTuple class to build a datasource if the anchor is already available.
 
static std::unique_ptr< RPageSource > Create(std::string_view ntupleName, std::string_view location, const ROOT::RNTupleReadOptions &options=ROOT::RNTupleReadOptions())
Guess the concrete derived page source from the file name (location)
 
Base class for all ROOT issued exceptions.
 
Metadata stored for every field of an RNTuple.
 
ROOT::DescriptorId_t GetFieldZeroId() const
Returns the logical parent of all top-level RNTuple data fields.
 
Representation of an RNTuple data set in a ROOT file.
 
const_iterator begin() const
 
const_iterator end() const
 
1-D histogram with a double per channel (see TH1 documentation)
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
ENTupleInspectorPrintFormat
 
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
 
constexpr DescriptorId_t kInvalidDescriptorId
 
EValues
Note: this is only temporarily a struct and will become a enum class hence the name convention used.
 
static std::string AlgorithmToString(EAlgorithm::EValues algorithm)