CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
tnp::BaseTreeFiller Class Reference

#include <BaseTreeFiller.h>

Inheritance diagram for tnp::BaseTreeFiller:
tnp::TPTreeFiller

Public Member Functions

 BaseTreeFiller (const char *name, const edm::ParameterSet &config, edm::ConsumesCollector &&iC)
 specify the name of the TTree, and the configuration for it More...
 
 BaseTreeFiller (const char *name, const edm::ParameterSet &config, edm::ConsumesCollector &iC)
 
 BaseTreeFiller (BaseTreeFiller &main, const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC, const std::string &branchNamePrefix)
 Add branches to an existing TTree managed by another BaseTreeFiller. More...
 
void fill (const reco::CandidateBaseRef &probe) const
 To be called once per probe, to fill the values for this probe. More...
 
void init (const edm::Event &iEvent) const
 To be called once per event, to load possible external variables. More...
 
void writeProvenance (const edm::ParameterSet &pset) const
 
 ~BaseTreeFiller ()
 Destructor, does nothing but it's out-of-line as we have complex data members. More...
 

Protected Types

enum  WeightMode { None, Fixed, External }
 How event weights are defined: 'None' = no weights, 'Fixed' = one value specified in cfg file, 'External' = read weight from the event (as double) More...
 

Protected Member Functions

void addBranches_ (TTree *tree, const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC, const std::string &branchNamePrefix="")
 

Protected Attributes

bool addEventVariablesInfo_
 Add branches with event variables: met, sum ET, .. etc. More...
 
bool addRunLumiInfo_
 Add branches with run and lumisection number. More...
 
edm::EDGetTokenT< reco::BeamSpotbeamSpotToken_
 
uint32_t event_
 
std::vector< ProbeFlagflags_
 
bool ignoreExceptions_
 Ignore exceptions when evaluating variables. More...
 
uint32_t lumi_
 
float mBSx_
 
float mBSy_
 
float mBSz_
 
edm::EDGetTokenT
< reco::CaloMETCollection
metToken_
 
float mMET_
 
float mMETSign_
 
uint32_t mNPV_
 
float mpfMET_
 
float mpfMETSign_
 
float mpfSumET_
 
float mPVx_
 
float mPVy_
 
float mPVz_
 
float mSumET_
 
float mtcMET_
 
float mtcMETSign_
 
float mtcSumET_
 
edm::EDGetTokenT
< reco::PFMETCollection
pfmetToken_
 
edm::EDGetTokenT
< reco::VertexCollection
recVtxsToken_
 
uint32_t run_
 
edm::EDGetTokenT
< reco::METCollection
tcmetToken_
 
TTree * tree_
 
std::vector< ProbeVariablevars_
 
float weight_
 
WeightMode weightMode_
 
edm::EDGetTokenT< double > weightSrcToken_
 

Detailed Description

Definition at line 137 of file BaseTreeFiller.h.

Member Enumeration Documentation

How event weights are defined: 'None' = no weights, 'Fixed' = one value specified in cfg file, 'External' = read weight from the event (as double)

Enumerator
None 
Fixed 
External 

Definition at line 167 of file BaseTreeFiller.h.

Constructor & Destructor Documentation

tnp::BaseTreeFiller::BaseTreeFiller ( const char *  name,
const edm::ParameterSet config,
edm::ConsumesCollector &&  iC 
)
inline

specify the name of the TTree, and the configuration for it

Definition at line 140 of file BaseTreeFiller.h.

140 : BaseTreeFiller(name, config, iC) {};
BaseTreeFiller(const char *name, const edm::ParameterSet &config, edm::ConsumesCollector &&iC)
specify the name of the TTree, and the configuration for it
tnp::BaseTreeFiller::BaseTreeFiller ( const char *  name,
const edm::ParameterSet config,
edm::ConsumesCollector iC 
)

Definition at line 32 of file BaseTreeFiller.cc.

References edm::ConsumesCollector::consumes(), event_(), edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), TFileService::make(), and mergeVDriftHistosByStation::name.

32  {
33  // make trees as requested
35  tree_ = fs->make<TTree>(name,name);
36 
37  // add the branches
38  addBranches_(tree_, iConfig, iC, "");
39 
40  // set up weights, if needed
41  if (iConfig.existsAs<double>("eventWeight")) {
43  weight_ = iConfig.getParameter<double>("eventWeight");
44  } else if (iConfig.existsAs<edm::InputTag>("eventWeight")) {
46  weightSrcToken_ = iC.consumes<double>(iConfig.getParameter<edm::InputTag>("eventWeight"));
47  } else {
48  weightMode_ = None;
49  }
50  if (weightMode_ != None) {
51  tree_->Branch("weight", &weight_, "weight/F");
52  }
53 
54  addRunLumiInfo_ = iConfig.existsAs<bool>("addRunLumiInfo") ? iConfig.getParameter<bool>("addRunLumiInfo") : false;
55  if (addRunLumiInfo_) {
56  tree_->Branch("run", &run_, "run/i");
57  tree_->Branch("lumi", &lumi_, "lumi/i");
58  tree_->Branch("event", &event_, "event/i");
59  }
60  addEventVariablesInfo_ = iConfig.existsAs<bool>("addEventVariablesInfo") ? iConfig.getParameter<bool>("addEventVariablesInfo") : false;
62  recVtxsToken_ = iC.consumes<reco::VertexCollection>(edm::InputTag("offlinePrimaryVertices"));
63  beamSpotToken_ = iC.consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"));
67  tree_->Branch("event_nPV" ,&mNPV_ ,"mNPV/I");
68  tree_->Branch("event_met_calomet" ,&mMET_ ,"mMET/F");
69  tree_->Branch("event_met_calosumet" ,&mSumET_ ,"mSumET/F");
70  tree_->Branch("event_met_calometsignificance",&mMETSign_ ,"mMETSign/F");
71  tree_->Branch("event_met_tcmet" ,&mtcMET_ ,"mtcMET/F");
72  tree_->Branch("event_met_tcsumet" ,&mtcSumET_ ,"mtcSumET/F");
73  tree_->Branch("event_met_tcmetsignificance",&mtcMETSign_ ,"mtcMETSign/F");
74  tree_->Branch("event_met_pfmet" ,&mpfMET_ ,"mpfMET/F");
75  tree_->Branch("event_met_pfsumet" ,&mpfSumET_ ,"mpfSumET/F");
76  tree_->Branch("event_met_pfmetsignificance",&mpfMETSign_ ,"mpfMETSign/F");
77  tree_->Branch("event_PrimaryVertex_x" ,&mPVx_ ,"mPVx/F");
78  tree_->Branch("event_PrimaryVertex_y" ,&mPVy_ ,"mPVy/F");
79  tree_->Branch("event_PrimaryVertex_z" ,&mPVz_ ,"mPVz/F");
80  tree_->Branch("event_BeamSpot_x" ,&mBSx_ ,"mBSx/F");
81  tree_->Branch("event_BeamSpot_y" ,&mBSy_ ,"mBSy/F");
82  tree_->Branch("event_BeamSpot_z" ,&mBSz_ ,"mBSz/F");
83  }
84 
85  ignoreExceptions_ = iConfig.existsAs<bool>("ignoreExceptions") ? iConfig.getParameter<bool>("ignoreExceptions") : false;
86 }
bool addEventVariablesInfo_
Add branches with event variables: met, sum ET, .. etc.
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< reco::PFMETCollection > pfmetToken_
bool addRunLumiInfo_
Add branches with run and lumisection number.
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
std::vector< reco::MET > METCollection
collection of MET objects
Definition: METCollection.h:23
edm::EDGetTokenT< reco::CaloMETCollection > metToken_
edm::EDGetTokenT< reco::METCollection > tcmetToken_
void addBranches_(TTree *tree, const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC, const std::string &branchNamePrefix="")
std::vector< reco::CaloMET > CaloMETCollection
collection of CaloMET objects
edm::EDGetTokenT< reco::VertexCollection > recVtxsToken_
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
bool ignoreExceptions_
Ignore exceptions when evaluating variables.
edm::EDGetTokenT< double > weightSrcToken_
tnp::BaseTreeFiller::BaseTreeFiller ( BaseTreeFiller main,
const edm::ParameterSet iConfig,
edm::ConsumesCollector &&  iC,
const std::string &  branchNamePrefix 
)

Add branches to an existing TTree managed by another BaseTreeFiller.

Definition at line 88 of file BaseTreeFiller.cc.

References addBranches_(), and tree_.

88  :
90  tree_(0)
91 {
92  addBranches_(main.tree_, iConfig, iC, branchNamePrefix);
93 }
bool addEventVariablesInfo_
Add branches with event variables: met, sum ET, .. etc.
int main(int argc, char **argv)
void addBranches_(TTree *tree, const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC, const std::string &branchNamePrefix="")
tnp::BaseTreeFiller::~BaseTreeFiller ( )

Destructor, does nothing but it's out-of-line as we have complex data members.

Definition at line 133 of file BaseTreeFiller.cc.

133 { }

Member Function Documentation

void tnp::BaseTreeFiller::addBranches_ ( TTree *  tree,
const edm::ParameterSet iConfig,
edm::ConsumesCollector iC,
const std::string &  branchNamePrefix = "" 
)
protected

Definition at line 96 of file BaseTreeFiller.cc.

References edm::ConsumesCollector::consumes(), flags, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), AlCaHLTBitMon_QueryRunRegistry::string, and makeLayoutFileForGui::variables.

Referenced by BaseTreeFiller().

96  {
97  // set up variables
99  //.. the ones that are strings
100  std::vector<std::string> stringVars = variables.getParameterNamesForType<std::string>();
101  for (std::vector<std::string>::const_iterator it = stringVars.begin(), ed = stringVars.end(); it != ed; ++it) {
102  vars_.push_back(tnp::ProbeVariable(branchNamePrefix + *it, variables.getParameter<std::string>(*it)));
103  }
104  //.. the ones that are InputTags
105  std::vector<std::string> inputTagVars = variables.getParameterNamesForType<edm::InputTag>();
106  for (std::vector<std::string>::const_iterator it = inputTagVars.begin(), ed = inputTagVars.end(); it != ed; ++it) {
107  vars_.push_back(tnp::ProbeVariable(branchNamePrefix + *it, iC.consumes<edm::ValueMap<float> >(variables.getParameter<edm::InputTag>(*it))));
108  }
109  // set up flags
111  //.. the ones that are strings
112  std::vector<std::string> stringFlags = flags.getParameterNamesForType<std::string>();
113  for (std::vector<std::string>::const_iterator it = stringFlags.begin(), ed = stringFlags.end(); it != ed; ++it) {
114  flags_.push_back(tnp::ProbeFlag(branchNamePrefix + *it, flags.getParameter<std::string>(*it)));
115  }
116  //.. the ones that are InputTags
117  std::vector<std::string> inputTagFlags = flags.getParameterNamesForType<edm::InputTag>();
118  for (std::vector<std::string>::const_iterator it = inputTagFlags.begin(), ed = inputTagFlags.end(); it != ed; ++it) {
119  flags_.push_back(tnp::ProbeFlag(branchNamePrefix + *it, iC.consumes<edm::View<reco::Candidate> >(flags.getParameter<edm::InputTag>(*it))));
120  }
121 
122  // then make all the variables in the trees
123  for (std::vector<tnp::ProbeVariable>::iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
124  tree->Branch(it->name().c_str(), it->address(), (it->name()+"/F").c_str());
125  }
126 
127  for (std::vector<tnp::ProbeFlag>::iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
128  tree->Branch(it->name().c_str(), it->address(), (it->name()+"/I").c_str());
129  }
130 
131 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
std::vector< ProbeVariable > vars_
std::vector< Variable::Flags > flags
Definition: MVATrainer.cc:135
A variable for the probe: can be a string expression or an external ValueMap&lt;float&gt; ...
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:192
std::vector< ProbeFlag > flags_
void tnp::BaseTreeFiller::fill ( const reco::CandidateBaseRef probe) const

To be called once per probe, to fill the values for this probe.

Definition at line 229 of file BaseTreeFiller.cc.

Referenced by tnp::TPTreeFiller::fill().

229  {
230  for (std::vector<tnp::ProbeVariable>::const_iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
231  if (ignoreExceptions_) {
232  try{ it->fill(probe); } catch(cms::Exception &ex ){}
233  } else {
234  it->fill(probe);
235  }
236  }
237 
238  for (std::vector<tnp::ProbeFlag>::const_iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
239  if (ignoreExceptions_) {
240  try{ it->fill(probe); } catch(cms::Exception &ex ){}
241  } else {
242  it->fill(probe);
243  }
244  }
245  if (tree_) tree_->Fill();
246 }
std::vector< ProbeVariable > vars_
std::vector< ProbeFlag > flags_
bool ignoreExceptions_
Ignore exceptions when evaluating variables.
void tnp::BaseTreeFiller::init ( const edm::Event iEvent) const

To be called once per event, to load possible external variables.

*********** store some event variables: MET, SumET ******

///////// Primary vertex //////////////

Definition at line 135 of file BaseTreeFiller.cc.

References SiPixelRawToDigiRegional_cfi::beamSpot, edm::EventID::event(), event_(), edm::Event::getByToken(), edm::EventBase::id(), edm::EventID::luminosityBlock(), CaloMET_cfi::met, edm::EventID::run(), histoStyle::weight, and detailsBasic3DVector::z.

Referenced by tnp::TPTreeFiller::init().

135  {
136  run_ = iEvent.id().run();
137  lumi_ = iEvent.id().luminosityBlock();
138  event_ = iEvent.id().event();
139 
140  for (std::vector<tnp::ProbeVariable>::const_iterator it = vars_.begin(), ed = vars_.end(); it != ed; ++it) {
141  it->init(iEvent);
142  }
143  for (std::vector<tnp::ProbeFlag>::const_iterator it = flags_.begin(), ed = flags_.end(); it != ed; ++it) {
144  it->init(iEvent);
145  }
146  if (weightMode_ == External) {
148  iEvent.getByToken(weightSrcToken_, weight);
149  weight_ = *weight;
150  }
151 
156  iEvent.getByToken(recVtxsToken_,recVtxs);
157  mNPV_ = 0;
158  mPVx_ = 100.0;
159  mPVy_ = 100.0;
160  mPVz_ = 100.0;
161 
162  for(unsigned int ind=0;ind<recVtxs->size();ind++) {
163  if (!((*recVtxs)[ind].isFake()) && ((*recVtxs)[ind].ndof()>4)
164  && (fabs((*recVtxs)[ind].z())<=24.0) &&
165  ((*recVtxs)[ind].position().Rho()<=2.0) ) {
166  mNPV_++;
167  if(mNPV_==1) { // store the first good primary vertex
168  mPVx_ = (*recVtxs)[ind].x();
169  mPVy_ = (*recVtxs)[ind].y();
170  mPVz_ = (*recVtxs)[ind].z();
171  }
172  }
173  }
174 
175 
178  iEvent.getByToken(beamSpotToken_, beamSpot);
179  mBSx_ = beamSpot->position().X();
180  mBSy_ = beamSpot->position().Y();
181  mBSz_ = beamSpot->position().Z();
182 
183 
186  iEvent.getByToken(metToken_,met);
187  if (met->size() == 0) {
188  mMET_ = -1;
189  mSumET_ = -1;
190  mMETSign_ = -1;
191  }
192  else {
193  mMET_ = (*met)[0].et();
194  mSumET_ = (*met)[0].sumEt();
195  mMETSign_ = (*met)[0].significance();
196  }
197 
200  iEvent.getByToken(tcmetToken_, tcmet);
201  if (tcmet->size() == 0) {
202  mtcMET_ = -1;
203  mtcSumET_ = -1;
204  mtcMETSign_ = -1;
205  }
206  else {
207  mtcMET_ = (*tcmet)[0].et();
208  mtcSumET_ = (*tcmet)[0].sumEt();
209  mtcMETSign_ = (*tcmet)[0].significance();
210  }
211 
214  iEvent.getByToken(pfmetToken_, pfmet);
215  if (pfmet->size() == 0) {
216  mpfMET_ = -1;
217  mpfSumET_ = -1;
218  mpfMETSign_ = -1;
219  }
220  else {
221  mpfMET_ = (*pfmet)[0].et();
222  mpfSumET_ = (*pfmet)[0].sumEt();
223  mpfMETSign_ = (*pfmet)[0].significance();
224  }
225  }
226 
227 }
RunNumber_t run() const
Definition: EventID.h:42
bool addEventVariablesInfo_
Add branches with event variables: met, sum ET, .. etc.
EventNumber_t event() const
Definition: EventID.h:44
edm::EDGetTokenT< reco::PFMETCollection > pfmetToken_
tuple met
____________________________________________________________________________||
Definition: CaloMET_cfi.py:4
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
std::vector< ProbeVariable > vars_
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:43
float float float z
std::vector< ProbeFlag > flags_
edm::EDGetTokenT< reco::CaloMETCollection > metToken_
edm::EDGetTokenT< reco::METCollection > tcmetToken_
edm::EDGetTokenT< reco::VertexCollection > recVtxsToken_
edm::EventID id() const
Definition: EventBase.h:56
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
int weight
Definition: histoStyle.py:50
edm::EDGetTokenT< double > weightSrcToken_
void tnp::BaseTreeFiller::writeProvenance ( const edm::ParameterSet pset) const

Write a string dump of this PSet into the TTree header. see macro in test directory for how to retrieve it from the output root file

Definition at line 247 of file BaseTreeFiller.cc.

References edm::ParameterSet::dump(), and list().

247  {
248  TList *list = tree_->GetUserInfo();
249  list->Add(new TObjString(pset.dump().c_str()));
250 }
std::string dump(unsigned int indent=0) const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run

Member Data Documentation

bool tnp::BaseTreeFiller::addEventVariablesInfo_
protected

Add branches with event variables: met, sum ET, .. etc.

Definition at line 183 of file BaseTreeFiller.h.

bool tnp::BaseTreeFiller::addRunLumiInfo_
protected

Add branches with run and lumisection number.

Definition at line 180 of file BaseTreeFiller.h.

edm::EDGetTokenT<reco::BeamSpot> tnp::BaseTreeFiller::beamSpotToken_
protected

Definition at line 171 of file BaseTreeFiller.h.

uint32_t tnp::BaseTreeFiller::event_
mutableprotected

Definition at line 190 of file BaseTreeFiller.h.

std::vector<ProbeFlag> tnp::BaseTreeFiller::flags_
protected

Definition at line 164 of file BaseTreeFiller.h.

bool tnp::BaseTreeFiller::ignoreExceptions_
protected

Ignore exceptions when evaluating variables.

Definition at line 177 of file BaseTreeFiller.h.

uint32_t tnp::BaseTreeFiller::lumi_
mutableprotected

Definition at line 190 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mBSx_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mBSy_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mBSz_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

edm::EDGetTokenT<reco::CaloMETCollection> tnp::BaseTreeFiller::metToken_
protected

Definition at line 172 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mMET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mMETSign_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

uint32_t tnp::BaseTreeFiller::mNPV_
mutableprotected

Definition at line 190 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mpfMET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mpfMETSign_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mpfSumET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mPVx_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mPVy_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mPVz_
mutableprotected

Definition at line 192 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mSumET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mtcMET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mtcMETSign_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::mtcSumET_
mutableprotected

Definition at line 194 of file BaseTreeFiller.h.

edm::EDGetTokenT<reco::PFMETCollection> tnp::BaseTreeFiller::pfmetToken_
protected

Definition at line 174 of file BaseTreeFiller.h.

edm::EDGetTokenT<reco::VertexCollection> tnp::BaseTreeFiller::recVtxsToken_
protected

Definition at line 170 of file BaseTreeFiller.h.

uint32_t tnp::BaseTreeFiller::run_
mutableprotected

Definition at line 190 of file BaseTreeFiller.h.

edm::EDGetTokenT<reco::METCollection> tnp::BaseTreeFiller::tcmetToken_
protected

Definition at line 173 of file BaseTreeFiller.h.

TTree* tnp::BaseTreeFiller::tree_
mutableprotected

Definition at line 188 of file BaseTreeFiller.h.

Referenced by BaseTreeFiller(), and tnp::TPTreeFiller::TPTreeFiller().

std::vector<ProbeVariable> tnp::BaseTreeFiller::vars_
protected

Definition at line 163 of file BaseTreeFiller.h.

float tnp::BaseTreeFiller::weight_
mutableprotected

Definition at line 189 of file BaseTreeFiller.h.

WeightMode tnp::BaseTreeFiller::weightMode_
protected

Definition at line 168 of file BaseTreeFiller.h.

edm::EDGetTokenT<double> tnp::BaseTreeFiller::weightSrcToken_
protected

Definition at line 169 of file BaseTreeFiller.h.