CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes
edm::RootOutputTree Class Reference

#include <RootOutputTree.h>

Public Member Functions

template<typename T >
void addAuxiliary (std::string const &branchName, T *&pAux, int bufSize, bool allowCloning=true)
 
template<typename T >
void addAuxiliary (std::string const &branchName, T const *&pAux, int bufSize, bool allowCloning=true)
 
void addBranch (std::string const &branchName, std::string const &className, void const *&pProd, int splitLevel, int basketSize, bool produced)
 
bool checkEntriesInReadBranches (Long64_t expectedNumberOfEntries) const
 
bool checkIfFastClonable (TTree *inputTree) const
 
bool checkSplitLevelsAndBasketSizes (TTree *inputTree) const
 
void close ()
 
void fastCloneTTree (TTree *in, std::string const &option)
 
void fillTree ()
 
bool isValid () const
 
void maybeFastCloneTree (bool canFastClone, bool canFastCloneAux, TTree *tree, std::string const &option)
 
RootOutputTreeoperator= (RootOutputTree const &)=delete
 
void optimizeBaskets (ULong64_t size)
 
 RootOutputTree (RootOutputTree const &)=delete
 
 RootOutputTree (std::shared_ptr< TFile > filePtr, BranchType const &branchType, int splitLevel, int treeMaxVirtualSize)
 
void setAutoFlush (Long64_t size)
 
void setEntries ()
 
TTree * tree ()
 
TTree const * tree () const
 
bool uncloned (std::string const &branchName) const
 
void writeTree ()
 
 ~RootOutputTree ()
 

Static Public Member Functions

static TTree * assignTTree (TFile *file, TTree *tree)
 
static TTree * makeTTree (TFile *filePtr, std::string const &name, int splitLevel)
 
static void writeTTree (TTree *tree)
 

Static Private Member Functions

static void fillTTree (std::vector< TBranch * > const &branches)
 

Private Attributes

std::vector< TBranch * > auxBranches_
 
std::set< std::string > clonedReadBranchNames_
 
bool currentlyFastCloning_
 
bool fastCloneAuxBranches_
 
edm::propagate_const< std::shared_ptr< TFile > > filePtr_
 
std::vector< TBranch * > producedBranches_
 
std::vector< TBranch * > readBranches_
 
edm::propagate_const< TTree * > tree_
 
std::vector< TBranch * > unclonedAuxBranches_
 
std::vector< TBranch * > unclonedReadBranches_
 

Detailed Description

Definition at line 24 of file RootOutputTree.h.

Constructor & Destructor Documentation

◆ RootOutputTree() [1/2]

edm::RootOutputTree::RootOutputTree ( std::shared_ptr< TFile >  filePtr,
BranchType const &  branchType,
int  splitLevel,
int  treeMaxVirtualSize 
)

Definition at line 96 of file RootOutputTree.cc.

100  : filePtr_(filePtr),
101  tree_(makeTTree(filePtr.get(), BranchTypeToProductTreeName(branchType), splitLevel)),
103  readBranches_(),
104  auxBranches_(),
108  fastCloneAuxBranches_(false) {
109  if (treeMaxVirtualSize >= 0)
110  tree_->SetMaxVirtualSize(treeMaxVirtualSize);
111  }

References tree_.

◆ ~RootOutputTree()

edm::RootOutputTree::~RootOutputTree ( )
inline

Definition at line 28 of file RootOutputTree.h.

28 {}

◆ RootOutputTree() [2/2]

edm::RootOutputTree::RootOutputTree ( RootOutputTree const &  )
delete

Member Function Documentation

◆ addAuxiliary() [1/2]

template<typename T >
void edm::RootOutputTree::addAuxiliary ( std::string const &  branchName,
T *&  pAux,
int  bufSize,
bool  allowCloning = true 
)
inline

Definition at line 43 of file RootOutputTree.h.

43  {
44  if (allowCloning) {
45  auxBranches_.push_back(tree_->Branch(branchName.c_str(), &pAux, bufSize, 0));
46  } else {
47  unclonedAuxBranches_.push_back(tree_->Branch(branchName.c_str(), &pAux, bufSize, 0));
48  }
49  }

References auxBranches_, electrons_cff::branchName, tree_, and unclonedAuxBranches_.

◆ addAuxiliary() [2/2]

template<typename T >
void edm::RootOutputTree::addAuxiliary ( std::string const &  branchName,
T const *&  pAux,
int  bufSize,
bool  allowCloning = true 
)
inline

Definition at line 34 of file RootOutputTree.h.

34  {
35  if (allowCloning) {
36  auxBranches_.push_back(tree_->Branch(branchName.c_str(), &pAux, bufSize, 0));
37  } else {
38  unclonedAuxBranches_.push_back(tree_->Branch(branchName.c_str(), &pAux, bufSize, 0));
39  }
40  }

References auxBranches_, electrons_cff::branchName, tree_, and unclonedAuxBranches_.

Referenced by edm::RootOutputFile::RootOutputFile().

◆ addBranch()

void edm::RootOutputTree::addBranch ( std::string const &  branchName,
std::string const &  className,
void const *&  pProd,
int  splitLevel,
int  basketSize,
bool  produced 
)

Definition at line 328 of file RootOutputTree.cc.

333  {
336  TBranch* branch = tree_->Branch(branchName.c_str(), className.c_str(), &pProd, basketSize, splitLevel);
337  assert(branch != nullptr);
338  /*
339  if(pProd != nullptr) {
340  // Delete the product that ROOT has allocated.
341  WrapperBase const* edp = static_cast<WrapperBase const *>(pProd);
342  delete edp;
343  pProd = nullptr;
344  }
345 */
346  if (produced) {
347  producedBranches_.push_back(branch);
348  } else {
349  readBranches_.push_back(branch);
350  }
351  }

References cms::cuda::assert(), MicroEventContent_cff::branch, electrons_cff::branchName, className(), edm::BranchDescription::invalidBasketSize, edm::BranchDescription::invalidSplitLevel, producedBranches_, readBranches_, filterRecHits_cfg::splitLevel, and tree_.

Referenced by edm::RootOutputFile::RootOutputFile().

◆ assignTTree()

TTree * edm::RootOutputTree::assignTTree ( TFile *  file,
TTree *  tree 
)
static

Definition at line 113 of file RootOutputTree.cc.

113  {
114  tree->SetDirectory(filePtr);
115  // Turn off autosaving because it is such a memory hog and we are not using
116  // this check-pointing feature anyway.
118  return tree;
119  }

References SiStripPI::max, and tree().

Referenced by makeTTree().

◆ checkEntriesInReadBranches()

bool edm::RootOutputTree::checkEntriesInReadBranches ( Long64_t  expectedNumberOfEntries) const

Definition at line 202 of file RootOutputTree.cc.

202  {
203  for (auto const& readBranch : readBranches_) {
204  if (readBranch->GetEntries() != expectedNumberOfEntries) {
205  return false;
206  }
207  }
208  return true;
209  }

References readBranches_.

Referenced by edm::RootOutputFile::writeIndexIntoFile().

◆ checkIfFastClonable()

bool edm::RootOutputTree::checkIfFastClonable ( TTree *  inputTree) const

Definition at line 180 of file RootOutputTree.cc.

180  {
181  if (inputTree == nullptr)
182  return false;
183 
184  // Do the sub-branches match in the input and output. Extra sub-branches in the input are OK for fast cloning, but not in the output.
185  for (auto const& outputBr : readBranches_) {
186  TBranchElement* outputBranch = dynamic_cast<TBranchElement*>(outputBr);
187  if (outputBranch != nullptr) {
188  TBranchElement* inputBranch = dynamic_cast<TBranchElement*>(inputTree->GetBranch(outputBranch->GetName()));
189  if (inputBranch != nullptr) {
190  // We have a matching top level branch. Do the recursive check on subbranches.
191  if (!checkMatchingBranches(inputBranch, outputBranch)) {
192  LogInfo("FastCloning") << "Fast Cloning disabled because a data member has been added to split branch: "
193  << inputBranch->GetName() << "\n.";
194  return false;
195  }
196  }
197  }
198  }
199  return true;
200  }

References readBranches_.

Referenced by edm::RootOutputFile::beginInputFile().

◆ checkSplitLevelsAndBasketSizes()

bool edm::RootOutputTree::checkSplitLevelsAndBasketSizes ( TTree *  inputTree) const

Definition at line 132 of file RootOutputTree.cc.

132  {
133  assert(inputTree != nullptr);
134 
135  // Do the split level and basket size match in the input and output?
136  for (auto const& outputBranch : readBranches_) {
137  if (outputBranch != nullptr) {
138  TBranch* inputBranch = inputTree->GetBranch(outputBranch->GetName());
139 
140  if (inputBranch != nullptr) {
141  if (inputBranch->GetSplitLevel() != outputBranch->GetSplitLevel() ||
142  inputBranch->GetBasketSize() != outputBranch->GetBasketSize()) {
143  return false;
144  }
145  }
146  }
147  }
148  return true;
149  }

References cms::cuda::assert(), and readBranches_.

Referenced by edm::RootOutputFile::beginInputFile().

◆ close()

void edm::RootOutputTree::close ( void  )

Definition at line 353 of file RootOutputTree.cc.

353  {
354  // The TFile was just closed.
355  // Just to play it safe, zero all pointers to quantities in the file.
356  auxBranches_.clear();
357  unclonedAuxBranches_.clear();
358  producedBranches_.clear();
359  readBranches_.clear();
360  unclonedReadBranches_.clear();
361  tree_ = nullptr; // propagate_const<T> has no reset() function
362  filePtr_ = nullptr; // propagate_const<T> has no reset() function
363  }

References auxBranches_, filePtr_, producedBranches_, readBranches_, tree_, unclonedAuxBranches_, and unclonedReadBranches_.

Referenced by esMonitoring.AsyncLineReaderMixin::handle_close(), and esMonitoring.FDJsonServer::handle_close().

◆ fastCloneTTree()

void edm::RootOutputTree::fastCloneTTree ( TTree *  in,
std::string const &  option 
)

Definition at line 211 of file RootOutputTree.cc.

211  {
212  if (in->GetEntries() != 0) {
213  TObjArray* branches = tree_->GetListOfBranches();
214  // If any products were produced (not just event products), the EventAuxiliary will be modified.
215  // In that case, don't fast copy auxiliary branches. Remove them, and add back after fast copying.
216  std::map<Int_t, TBranch*> auxIndexes;
217  bool mustRemoveSomeAuxs = false;
218  if (!fastCloneAuxBranches_) {
219  for (auto const& auxBranch : auxBranches_) {
220  int auxIndex = branches->IndexOf(auxBranch);
221  assert(auxIndex >= 0);
222  auxIndexes.insert(std::make_pair(auxIndex, auxBranch));
223  branches->RemoveAt(auxIndex);
224  }
225  mustRemoveSomeAuxs = true;
226  }
227 
228  //Deal with any aux branches which can never be cloned
229  for (auto const& auxBranch : unclonedAuxBranches_) {
230  int auxIndex = branches->IndexOf(auxBranch);
231  assert(auxIndex >= 0);
232  auxIndexes.insert(std::make_pair(auxIndex, auxBranch));
233  branches->RemoveAt(auxIndex);
234  mustRemoveSomeAuxs = true;
235  }
236 
237  if (mustRemoveSomeAuxs) {
238  branches->Compress();
239  }
240 
241  DuplicateTreeSentry dupTree(in);
242  TTreeCloner cloner(
243  dupTree.tree(), tree_, option.c_str(), TTreeCloner::kNoWarnings | TTreeCloner::kIgnoreMissingTopLevel);
244 
245  if (!cloner.IsValid()) {
246  // Let's check why
247  static const char* okerror = "One of the export branch";
248  if (strncmp(cloner.GetWarning(), okerror, strlen(okerror)) == 0) {
249  // That's fine we will handle it;
250  } else {
251  throw edm::Exception(errors::FatalRootError) << "invalid TTreeCloner (" << cloner.GetWarning() << ")\n";
252  }
253  }
254  tree_->SetEntries(tree_->GetEntries() + in->GetEntries());
255  Service<RootHandlers> rootHandler;
256  rootHandler->ignoreWarningsWhileDoing([&cloner] { cloner.Exec(); });
257 
258  if (mustRemoveSomeAuxs) {
259  for (auto const& auxIndex : auxIndexes) {
260  // Add the auxiliary branches back after fast copying the rest of the tree.
261  Int_t last = branches->GetLast();
262  if (last >= 0) {
263  branches->AddAtAndExpand(branches->At(last), last + 1);
264  for (Int_t ind = last - 1; ind >= auxIndex.first; --ind) {
265  branches->AddAt(branches->At(ind), ind + 1);
266  };
267  branches->AddAt(auxIndex.second, auxIndex.first);
268  } else {
269  branches->Add(auxIndex.second);
270  }
271  }
272  }
273  }
274  }

References cms::cuda::assert(), auxBranches_, Exception, fastCloneAuxBranches_, edm::errors::FatalRootError, recoMuon::in, dqmdumpme::last, fileinputsource_cfi::option, edm::DuplicateTreeSentry::tree(), tree_, and unclonedAuxBranches_.

Referenced by maybeFastCloneTree().

◆ fillTree()

void edm::RootOutputTree::fillTree ( )

Definition at line 314 of file RootOutputTree.cc.

314  {
315  if (currentlyFastCloning_) {
321  } else {
322  // Isolate the fill operation so that IMT doesn't grab other large tasks
323  // that could lead to PoolOutputModule stalling
324  tbb::this_task_arena::isolate([&] { tree_->Fill(); });
325  }
326  }

References auxBranches_, currentlyFastCloning_, fastCloneAuxBranches_, fillTTree(), producedBranches_, tree_, unclonedAuxBranches_, and unclonedReadBranches_.

Referenced by core.AutoFillTreeProducer.AutoFillTreeProducer::process().

◆ fillTTree()

void edm::RootOutputTree::fillTTree ( std::vector< TBranch * > const &  branches)
staticprivate

Definition at line 286 of file RootOutputTree.cc.

286  {
287  for_all(branches, std::bind(&TBranch::Fill, std::placeholders::_1));
288  }

References HcalObjRepresent::Fill(), and edm::for_all().

Referenced by fillTree().

◆ isValid()

bool edm::RootOutputTree::isValid ( ) const

◆ makeTTree()

TTree * edm::RootOutputTree::makeTTree ( TFile *  filePtr,
std::string const &  name,
int  splitLevel 
)
static

Definition at line 121 of file RootOutputTree.cc.

121  {
122  TTree* tree = new TTree(name.c_str(), "", splitLevel);
123  if (!tree)
124  throw edm::Exception(errors::FatalRootError) << "Failed to create the tree: " << name << "\n";
125  if (tree->IsZombie())
126  throw edm::Exception(errors::FatalRootError) << "Tree: " << name << " is a zombie."
127  << "\n";
128 
129  return assignTTree(filePtr, tree);
130  }

References assignTTree(), Exception, edm::errors::FatalRootError, Skims_PA_cff::name, and filterRecHits_cfg::splitLevel.

Referenced by edm::RootOutputFile::RootOutputFile().

◆ maybeFastCloneTree()

void edm::RootOutputTree::maybeFastCloneTree ( bool  canFastClone,
bool  canFastCloneAux,
TTree *  tree,
std::string const &  option 
)

Definition at line 292 of file RootOutputTree.cc.

295  {
296  unclonedReadBranches_.clear();
297  clonedReadBranchNames_.clear();
298  currentlyFastCloning_ = canFastClone && !readBranches_.empty();
299  if (currentlyFastCloning_) {
300  fastCloneAuxBranches_ = canFastCloneAux;
302  for (auto const& branch : readBranches_) {
303  if (branch->GetEntries() == tree_->GetEntries()) {
304  clonedReadBranchNames_.insert(std::string(branch->GetName()));
305  } else {
306  unclonedReadBranches_.push_back(branch);
307  }
308  }
309  Service<JobReport> reportSvc;
310  reportSvc->reportFastClonedBranches(clonedReadBranchNames_, tree_->GetEntries());
311  }
312  }

References MicroEventContent_cff::branch, clonedReadBranchNames_, currentlyFastCloning_, fastCloneAuxBranches_, fastCloneTTree(), fileinputsource_cfi::option, readBranches_, AlCaHLTBitMon_QueryRunRegistry::string, tree_, and unclonedReadBranches_.

Referenced by edm::RootOutputFile::beginInputFile().

◆ operator=()

RootOutputTree& edm::RootOutputTree::operator= ( RootOutputTree const &  )
delete

◆ optimizeBaskets()

void edm::RootOutputTree::optimizeBaskets ( ULong64_t  size)
inline

Definition at line 95 of file RootOutputTree.h.

95 { tree_->OptimizeBaskets(size); }

References findQualityFiles::size, and tree_.

Referenced by edm::RootOutputFile::writeLuminosityBlock(), and edm::RootOutputFile::writeRun().

◆ setAutoFlush()

void edm::RootOutputTree::setAutoFlush ( Long64_t  size)
inline

Definition at line 97 of file RootOutputTree.h.

97 { tree_->SetAutoFlush(size); }

References findQualityFiles::size, and tree_.

Referenced by edm::RootOutputFile::RootOutputFile().

◆ setEntries()

void edm::RootOutputTree::setEntries ( )
inline

Definition at line 84 of file RootOutputTree.h.

84  {
85  if (tree_->GetNbranches() != 0)
86  tree_->SetEntries(-1);
87  }

References tree_.

Referenced by edm::RootOutputFile::respondToCloseInputFile(), and edm::RootOutputFile::writeEventAuxiliary().

◆ tree() [1/2]

TTree* edm::RootOutputTree::tree ( )
inline

◆ tree() [2/2]

TTree const* edm::RootOutputTree::tree ( ) const
inline

◆ uncloned()

bool edm::RootOutputTree::uncloned ( std::string const &  branchName) const
inline

Definition at line 89 of file RootOutputTree.h.

89  {
91  }

References electrons_cff::branchName, and clonedReadBranchNames_.

◆ writeTree()

void edm::RootOutputTree::writeTree ( )

Definition at line 290 of file RootOutputTree.cc.

290 { writeTTree(tree()); }

References tree(), and writeTTree().

◆ writeTTree()

void edm::RootOutputTree::writeTTree ( TTree *  tree)
static

Definition at line 276 of file RootOutputTree.cc.

276  {
277  if (tree->GetNbranches() != 0) {
278  // This is required when Fill is called on individual branches
279  // in the TTree instead of calling Fill once for the entire TTree.
280  tree->SetEntries(-1);
281  }
282  setRefCoreStreamer(true);
283  tree->AutoSave("FlushBaskets");
284  }

References edm::setRefCoreStreamer().

Referenced by edm::RootOutputFile::finishEndFile(), and writeTree().

Member Data Documentation

◆ auxBranches_

std::vector<TBranch*> edm::RootOutputTree::auxBranches_
private

Definition at line 109 of file RootOutputTree.h.

Referenced by addAuxiliary(), close(), fastCloneTTree(), and fillTree().

◆ clonedReadBranchNames_

std::set<std::string> edm::RootOutputTree::clonedReadBranchNames_
private

Definition at line 113 of file RootOutputTree.h.

Referenced by maybeFastCloneTree(), and uncloned().

◆ currentlyFastCloning_

bool edm::RootOutputTree::currentlyFastCloning_
private

Definition at line 114 of file RootOutputTree.h.

Referenced by fillTree(), and maybeFastCloneTree().

◆ fastCloneAuxBranches_

bool edm::RootOutputTree::fastCloneAuxBranches_
private

Definition at line 115 of file RootOutputTree.h.

Referenced by fastCloneTTree(), fillTree(), and maybeFastCloneTree().

◆ filePtr_

edm::propagate_const<std::shared_ptr<TFile> > edm::RootOutputTree::filePtr_
private

Definition at line 104 of file RootOutputTree.h.

Referenced by close().

◆ producedBranches_

std::vector<TBranch*> edm::RootOutputTree::producedBranches_
private

Definition at line 107 of file RootOutputTree.h.

Referenced by addBranch(), close(), and fillTree().

◆ readBranches_

std::vector<TBranch*> edm::RootOutputTree::readBranches_
private

◆ tree_

edm::propagate_const<TTree*> edm::RootOutputTree::tree_
private

◆ unclonedAuxBranches_

std::vector<TBranch*> edm::RootOutputTree::unclonedAuxBranches_
private

Definition at line 110 of file RootOutputTree.h.

Referenced by addAuxiliary(), close(), fastCloneTTree(), and fillTree().

◆ unclonedReadBranches_

std::vector<TBranch*> edm::RootOutputTree::unclonedReadBranches_
private

Definition at line 111 of file RootOutputTree.h.

Referenced by close(), fillTree(), and maybeFastCloneTree().

edm::RootOutputTree::fastCloneAuxBranches_
bool fastCloneAuxBranches_
Definition: RootOutputTree.h:115
edm::RootOutputTree::unclonedReadBranches_
std::vector< TBranch * > unclonedReadBranches_
Definition: RootOutputTree.h:111
edm::RootOutputTree::producedBranches_
std::vector< TBranch * > producedBranches_
Definition: RootOutputTree.h:107
edm::RootOutputTree::fillTTree
static void fillTTree(std::vector< TBranch * > const &branches)
Definition: RootOutputTree.cc:286
filterRecHits_cfg.splitLevel
splitLevel
Definition: filterRecHits_cfg.py:41
MicroEventContent_cff.branch
branch
Definition: MicroEventContent_cff.py:169
electrons_cff.branchName
branchName
Definition: electrons_cff.py:521
tree
Definition: tree.py:1
cms::cuda::assert
assert(be >=bs)
edm::propagate_const::get
constexpr element_type const * get() const
Definition: propagate_const.h:64
edm::BranchTypeToProductTreeName
std::string const & BranchTypeToProductTreeName(BranchType const &branchType)
Definition: BranchType.cc:93
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
edm::RootOutputTree::writeTTree
static void writeTTree(TTree *tree)
Definition: RootOutputTree.cc:276
fileinputsource_cfi.option
option
Definition: fileinputsource_cfi.py:94
edm::Exception
Definition: EDMException.h:77
edm::for_all
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:14
edm::RootOutputTree::assignTTree
static TTree * assignTTree(TFile *file, TTree *tree)
Definition: RootOutputTree.cc:113
edm::RootOutputTree::tree_
edm::propagate_const< TTree * > tree_
Definition: RootOutputTree.h:105
dqmdumpme.last
last
Definition: dqmdumpme.py:56
edm::RootOutputTree::unclonedAuxBranches_
std::vector< TBranch * > unclonedAuxBranches_
Definition: RootOutputTree.h:110
edm::errors::FatalRootError
Definition: EDMException.h:51
edm::BranchDescription::invalidSplitLevel
static const int invalidSplitLevel
Definition: BranchDescription.h:34
edm::RootOutputTree::readBranches_
std::vector< TBranch * > readBranches_
Definition: RootOutputTree.h:108
Service
edm::RootOutputTree::fastCloneTTree
void fastCloneTTree(TTree *in, std::string const &option)
Definition: RootOutputTree.cc:211
edm::RootOutputTree::clonedReadBranchNames_
std::set< std::string > clonedReadBranchNames_
Definition: RootOutputTree.h:113
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::RootOutputTree::makeTTree
static TTree * makeTTree(TFile *filePtr, std::string const &name, int splitLevel)
Definition: RootOutputTree.cc:121
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
recoMuon::in
Definition: RecoMuonEnumerators.h:6
HcalObjRepresent::Fill
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
Definition: HcalObjRepresent.h:1053
edm::RootOutputTree::tree
TTree const * tree() const
Definition: RootOutputTree.h:80
edm::RootOutputTree::filePtr_
edm::propagate_const< std::shared_ptr< TFile > > filePtr_
Definition: RootOutputTree.h:104
Exception
Definition: hltDiff.cc:245
edm::BranchDescription::invalidBasketSize
static const int invalidBasketSize
Definition: BranchDescription.h:35
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
edm::setRefCoreStreamer
void setRefCoreStreamer(bool resetAll=false)
Definition: RefCoreStreamer.cc:83
className
std::string className(const T &t)
Definition: ClassName.h:31
edm::RootOutputTree::auxBranches_
std::vector< TBranch * > auxBranches_
Definition: RootOutputTree.h:109
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
edm::RootOutputTree::currentlyFastCloning_
bool currentlyFastCloning_
Definition: RootOutputTree.h:114