11 #include "GaudiKernel/ITHistSvc.h"
42 #include "CLHEP/Vector/LorentzVector.h"
43 using CLHEP::HepLorentzVector;
47 m_ValidationNtupleTools(),
48 m_ValTrkParticleNtupleTool(
"Trk::BasicValTrkParticleNtupleTool/BasicValTrkParticleNtupleTool"),
49 m_truthNtupleTool(
"Trk::TruthNtupleTool/TruthNtupleTool"),
50 m_jetTruthNtupleTool(
""),
51 m_trackTruthClassifierHandles(),
52 m_trackTruthClassifiers(0),
53 m_eventPropertyNtupleHandles(),
54 m_eventPropertyNtupleTools(0),
55 m_inputTrackCollection(0),
56 m_trackTruthCollectionName(0),
57 m_McEventCollectionName(
"TruthEvent"),
58 m_inputPrimaryVertexCollection(
""),
59 m_ntupleFileName(
"TRKVAL"),
60 m_ntupleDirName(
"Validation"),
61 m_truthToTrack(
"Trk::TruthToTrack/TruthToTrack"),
62 m_trackSelector(
"InDet::InDetTrackSelectorTool/InDetTrackSelectorTool"),
63 m_genPartSelector(
"Trk::InDetReconstructableSelector/InDetReconstructableSelector"),
64 m_genJetFinder(
"Trk::GenParticleJetFinder/GenParticleJetFinder"),
65 m_useExternalEventLinkTree(false),
67 m_doTrackParticle(false),
68 m_visibleParticleWithoutTruth(nullptr),
69 m_nTrackTreeRecords(0),
71 m_eventLinkTree(nullptr)
89 declareProperty(
"PrimaryVertexCollection",
m_inputPrimaryVertexCollection,
"SG key of input PrimaryVertex collection (needed for TrackSelector, if no vertex collection is given, the selector will not use the vertex position)");
112 msg(MSG::INFO) <<
"TrackValidationNtupleWriter initialize()" <<
endmsg;
115 if (m_doTruth && (m_inputTrackCollection.size() != m_trackTruthCollectionName.size())) {
116 msg(
MSG::FATAL) <<
"joboptions TrackCollection and TrackTruthCollection have different sizes!" <<
endmsg;
118 msg(
MSG::FATAL) <<
" please make sure to set for each TrackCollection the corresponding TrackTruthCollection" <<
endmsg;
119 return StatusCode::FAILURE;
124 if (
sc.isFailure()) {
125 msg(
MSG::FATAL) <<
"Could not retrieve "<< m_ValidationNtupleTools <<
" (to write validation ntuple) "<<
endmsg;
128 if(m_doTrackParticle){
130 sc = m_ValTrkParticleNtupleTool.retrieve();
131 if (
sc.isFailure()) {
132 msg(
MSG::FATAL) <<
"Could not retrieve "<< m_ValTrkParticleNtupleTool <<
" (to write TrackParticle validation ntuple) "<<
endmsg;
138 if ( !m_trackSelector.empty() ) {
139 sc = m_trackSelector.retrieve();
140 if (
sc.isFailure()) {
141 msg(
MSG::FATAL) <<
"Could not retrieve "<< m_trackSelector <<
" (to select the tracks which are written to the ntuple) "<<
endmsg;
142 msg(MSG::INFO) <<
"Set the ToolHandle to None if track selection is supposed to be disabled" <<
endmsg;
147 msg(MSG::INFO) <<
"Track Selector retrieved" <<
endmsg;
151 if ( m_eventPropertyNtupleHandles.retrieve().isFailure() ) {
152 msg(MSG::ERROR) <<
"Failed to retreive " << m_eventPropertyNtupleHandles <<
endmsg;
154 msg(MSG::INFO) <<
"Retrieved " << m_eventPropertyNtupleHandles <<
endmsg;
159 itTools = m_eventPropertyNtupleHandles.begin();
160 for ( ; itTools != m_eventPropertyNtupleHandles.end(); ++itTools ) {
162 m_eventPropertyNtupleTools.push_back(&(*(*itTools)));
167 sc = m_truthToTrack.retrieve();
168 if (
sc.isFailure()) {
174 sc = m_genPartSelector.retrieve();
175 if (
sc.isFailure()) {
183 if ( m_trackTruthClassifierHandles.retrieve().isFailure() ) {
184 msg(MSG::ERROR) <<
"Failed to retreive " << m_trackTruthClassifierHandles <<
endmsg;
186 msg(MSG::INFO) <<
"Retrieved " << m_trackTruthClassifierHandles <<
endmsg;
189 itTools = m_trackTruthClassifierHandles.begin();
190 for ( ; itTools != m_trackTruthClassifierHandles.end(); ++itTools ) {
192 m_trackTruthClassifiers.push_back(&(*(*itTools)));
197 if (! m_jetTruthNtupleTool.empty()) {
198 sc = m_jetTruthNtupleTool.retrieve();
199 if (
sc.isFailure()) {
200 msg(MSG::ERROR) <<
"Could not retrieve "<< m_jetTruthNtupleTool
201 <<
" (to write jet data)."<<
endmsg <<
"--> Instead configure "
202 <<
"to empty string if jet data not desired." <<
endmsg;
205 sc = m_genJetFinder.retrieve();
206 if (
sc.isFailure()) {
207 msg(MSG::ERROR) <<
"Could not retrieve "<< m_genJetFinder
208 <<
" (to find jets at truth level)."<<
endmsg;
214 sc = m_truthNtupleTool.retrieve();
215 if (
sc.isFailure()) {
216 msg(
MSG::FATAL) <<
"Could not retrieve "<< m_truthNtupleTool <<
" (to write truth data) "<<
endmsg;
219 bool include_jets = (! m_jetTruthNtupleTool.empty());
220 sc = m_truthNtupleTool->initBranches(m_trackTruthClassifiers, include_jets, m_inputTrackCollection);
221 if (
sc.isFailure())
return sc;
229 SmartIF<ITHistSvc> tHistSvc{service(
"THistSvc")};
234 std::vector<std::string>::const_iterator trackColNameIter = m_inputTrackCollection.begin();
236 for (; trackColNameIter != m_inputTrackCollection.end(); ++trackColNameIter) {
237 TTree*
tree =
new TTree((*trackColNameIter).c_str(), ((*trackColNameIter)+
" Validation").c_str());
238 m_trees.push_back(
tree);
239 std::string fullNtupleName =
"/"+m_ntupleFileName+
"/"+m_ntupleDirName+
"/"+(*trackColNameIter);
240 sc = tHistSvc->regTree(fullNtupleName,
tree);
241 if (
sc.isFailure()) {
242 msg(MSG::ERROR) <<
"Unable to register TTree : " << fullNtupleName <<
endmsg;
247 itTools = m_ValidationNtupleTools.begin();
248 for ( ; itTools != m_ValidationNtupleTools.end(); ++itTools ) {
249 if (((*itTools)->addNtupleItems(
tree)).isFailure()) {
250 msg(MSG::ERROR) <<
"ValidationNtupleTool could not add its branches"
251 <<
" for tree " << fullNtupleName <<
endmsg;
252 return StatusCode::FAILURE;
256 m_nTrackTreeRecords.push_back( 0 );
261 std::vector<std::string>::const_iterator trackParticleColNameIter = m_inputTrackParticleCollection.begin();
263 for (; trackParticleColNameIter != m_inputTrackParticleCollection.end(); ++trackParticleColNameIter ) {
264 TTree*
tree =
new TTree((*trackParticleColNameIter).c_str(), ((*trackParticleColNameIter)+
" Validation").c_str());
265 m_trees.push_back(
tree);
266 std::string fullNtupleName =
"/"+m_ntupleFileName+
"/"+m_ntupleDirName+
"/"+(*trackParticleColNameIter);
267 sc = tHistSvc->regTree(fullNtupleName,
tree);
268 if (
sc.isFailure()) {
269 msg(MSG::ERROR) <<
"Unable to register TTree : " << fullNtupleName <<
endmsg;
273 sc = m_ValTrkParticleNtupleTool->addNtupleItems(
tree);
274 if (
sc.isFailure()) {
275 msg(MSG::ERROR) <<
"ValidationNtupleTool could not add its branches for tree " << fullNtupleName <<
endmsg;
281 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ) {
282 if( m_eventPropertyNtupleTools[toolIndex]->isTrackLinkTool( ) ) {
283 m_eventPropertyNtupleTools[toolIndex]->registerTrackCollections( m_inputTrackCollection,
286 else if(m_eventPropertyNtupleTools[toolIndex]->isTrkParticleLinkTool() )
287 m_eventPropertyNtupleTools[toolIndex]->registerTrackCollections( m_inputTrackParticleCollection, m_doTruth );
292 if (!m_useExternalEventLinkTree) {
293 m_eventLinkTree =
new TTree(
"EventToTrackLink",
"Event to track entry link");
294 std::string fullNtupleName =
"/"+m_ntupleFileName+
"/"+m_ntupleDirName+
"/EventToTrackLink";
295 sc = tHistSvc->regTree(fullNtupleName, m_eventLinkTree);
296 if (
sc.isFailure()) {
297 msg(MSG::ERROR) <<
"Unable to register TTree : " << fullNtupleName <<
endmsg;
301 for (
unsigned int toolIndex=0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ) {
302 if( m_eventPropertyNtupleTools[toolIndex]->isTrkParticleLinkTool() ||
303 m_eventPropertyNtupleTools[toolIndex]->isTrackLinkTool( ) ||
304 m_eventPropertyNtupleTools[toolIndex]->isEvtPropertyTool( ) ) {
305 if( m_eventPropertyNtupleTools[toolIndex]->addNtupleItems( m_eventLinkTree ).isFailure() )
307 msg(MSG::ERROR) <<
"Unable to add items into the event tree: " << m_eventLinkTree->GetTitle() <<
endmsg;
308 return StatusCode::SUCCESS;
313 return StatusCode::SUCCESS;
322 ATH_MSG_DEBUG (
"TrackValidationNtupleWriter execute() start");
325 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ) {
326 if (m_eventPropertyNtupleTools[toolIndex]->resetVariables( ).isFailure()){};
331 unsigned int nTruthTreeRecordsAtCurrentEvent = 0;
332 std::vector<Trk::ValidationTrackTruthData> truthData;
333 std::vector<HepMC::ConstGenParticlePtr>* selecParticles =
nullptr;
336 std::vector< Trk::GenParticleJet >* genParticleJets =
nullptr;
341 if (evtStore()->
retrieve(mcEventColl, m_McEventCollectionName).isFailure())
343 std::string
key =
"G4Truth";
344 if (evtStore()->
retrieve(mcEventColl,
key).isFailure())
346 msg(MSG::WARNING) <<
"Could not find the McEventCollection" <<
endmsg;
347 return StatusCode::SUCCESS;
354 selecParticles = m_genPartSelector->selectGenSignal(mcEventColl);
363 for (
unsigned int toolIndex = 0 ; toolIndex < m_trackTruthClassifiers.size(); ++toolIndex )
365 m_trackTruthClassifiers[toolIndex]->initClassification(*mcEventColl, selecParticles);
368 for (
const auto& genParticle: *selecParticles)
375 if ( genParticle->production_vertex() )
377 generatedTrackPerigee = m_truthToTrack->makePerigeeParameters( genParticle );
379 ATH_MSG_DEBUG (
"No perigee available for interacting truth particle."
380 <<
" -> This is OK for particles from the TrackRecord, but probably"
381 <<
" a bug for production vertex particles.");
388 for (
unsigned int toolIndex = 0 ; toolIndex < m_trackTruthClassifiers.size(); ++toolIndex )
395 truthData.push_back(partData);
401 if (! m_jetTruthNtupleTool.empty()) {
404 genParticleJets = m_genJetFinder->jetMCFinder(*selecParticles);
406 else ATH_MSG_DEBUG (
"jets found: " << genParticleJets->size());
411 nTruthTreeRecordsAtCurrentEvent = m_truthNtupleTool->getNumberOfTreeRecords();
417 const VxContainer* primaryVertexContainer =
nullptr;
418 if (!m_trackSelector.empty() && !m_inputPrimaryVertexCollection.empty()) {
419 sc = evtStore()->retrieve(primaryVertexContainer, m_inputPrimaryVertexCollection);
420 if ( !primaryVertexContainer ||
sc.isFailure() ) {
421 ATH_MSG_ERROR(
" Primary Vertex container (" << m_inputPrimaryVertexCollection <<
") not found in StoreGate" );
422 delete genParticleJets;
423 return StatusCode::FAILURE;
427 if (primaryVertexContainer) {
428 if (!primaryVertexContainer->
empty())
vertex = &((*primaryVertexContainer)[0]->recVertex());
432 for (
unsigned int trackColIndex = 0; trackColIndex<m_inputTrackCollection.size(); trackColIndex++)
434 sc = writeTrackData(trackColIndex, truthData,
vertex);
435 if (
sc.isFailure()) {
436 ATH_MSG_ERROR (
"Failure when writing track data for collection " << m_inputTrackCollection[trackColIndex]);
437 delete genParticleJets;
443 if(m_doTrackParticle){
444 for (
unsigned int trackParticleColIndex = 0; trackParticleColIndex<m_inputTrackParticleCollection.size(); trackParticleColIndex++)
446 sc = writeTrackParticleData(trackParticleColIndex);
447 if (
sc.isFailure()) {
448 msg(MSG::ERROR) <<
"Failure when writing TrackParticle data for collection " << m_inputTrackParticleCollection[trackParticleColIndex] <<
endmsg;
449 delete genParticleJets;
455 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex )
456 if( m_eventPropertyNtupleTools[toolIndex]->isTrackLinkTool() ) {
457 m_eventPropertyNtupleTools[toolIndex]->setGenParticleTreeIndices
458 (nTruthTreeRecordsAtCurrentEvent,
459 selecParticles ? (
int)selecParticles->size() : 0);
464 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ) {
465 sc = m_eventPropertyNtupleTools[toolIndex]->fillEventData( );
466 if (
sc.isFailure()) {
467 msg(MSG::ERROR) <<
"Failure when filling event data." <<
endmsg;
468 delete genParticleJets;
473 if (!m_useExternalEventLinkTree) m_eventLinkTree->Fill();
476 std::vector<unsigned int> truthToJetIndices(selecParticles ? selecParticles->size() : 0);
477 if (m_doTruth && selecParticles && genParticleJets && !m_jetTruthNtupleTool.empty() ) {
479 const unsigned int nJetTruthTreeRecordsAtCurrentEvent
480 = m_jetTruthNtupleTool->getNumberOfTreeRecords();
483 itrMcJet < genParticleJets->
end() ; ++itrMcJet) {
485 std::vector<int>
indices = (*itrMcJet).getIndicesInEvent();
487 for (std::vector<int>::const_iterator
k =
indices.begin();
k !=
indices.end(); ++
k) {
488 if (*
k >= 0 && *
k <= (
int)selecParticles->size() ) {
489 truthData[*
k].truthToJetIndex = nJetTruthTreeRecordsAtCurrentEvent
490 +
int(itrMcJet - genParticleJets->begin()) + 1;
492 msg(MSG::WARNING) <<
" mistake with jet::indexInEvent !! " << *
k <<
endmsg;
496 sc = m_jetTruthNtupleTool->writeJetTruthData(*genParticleJets,
497 nTruthTreeRecordsAtCurrentEvent);
498 if (
sc.isFailure() ){
499 msg(MSG::ERROR) <<
"Jet Truth Ntuple Tool could not fill data" <<
endmsg;
500 delete genParticleJets;
501 return StatusCode::FAILURE;
506 if (m_doTruth && selecParticles){
507 sc = m_truthNtupleTool->writeTruthData( truthData );
508 if (
sc.isFailure() ){
509 msg(MSG::ERROR) <<
"Truth Ntuple Tool could not fill data" <<
endmsg;
510 delete genParticleJets;
511 return StatusCode::FAILURE;
515 delete selecParticles;
516 delete genParticleJets;
518 for (; truthDataIter != truthData.end(); ++truthDataIter) {
519 delete (*truthDataIter).truthPerigee;
520 (*truthDataIter).truthPerigee =
nullptr;
522 return StatusCode::SUCCESS;
526 std::vector<Trk::ValidationTrackTruthData>& truthData,
531 if (!m_inputTrackCollection[trackColIndex].
empty() && evtStore()->contains<TrackCollection>(m_inputTrackCollection[trackColIndex])) {
532 sc = evtStore()->retrieve(tracks, m_inputTrackCollection[trackColIndex]);
533 if (
sc.isFailure()) {
534 msg(MSG::WARNING) <<
"Tracks not found: " << m_inputTrackCollection[trackColIndex] <<
endmsg;
535 return StatusCode::SUCCESS;
540 msg(MSG::WARNING) <<
"TrackCollection " << m_inputTrackCollection[trackColIndex] <<
" not found in StoreGate." <<
endmsg;
541 return StatusCode::SUCCESS;
547 if (!m_trackTruthCollectionName[trackColIndex].
empty() && evtStore()->contains<TrackTruthCollection>(m_trackTruthCollectionName[trackColIndex])) {
548 sc = evtStore()->retrieve(trackTruthCollection, m_trackTruthCollectionName[trackColIndex]);
549 if (
sc.isFailure()) {
550 msg(MSG::WARNING) <<
"TrackTruthCollection not found: " << m_trackTruthCollectionName[trackColIndex] <<
endmsg;
552 return StatusCode::SUCCESS;
554 ATH_MSG_DEBUG (
"TrackTruthColl found: " << m_trackTruthCollectionName[trackColIndex]);
558 msg(MSG::WARNING) <<
"TrackTruthCollection " << m_trackTruthCollectionName[trackColIndex] <<
" not found in StoreGate." <<
endmsg;
560 return StatusCode::SUCCESS;
564 const unsigned int nTruthTreeRecordsAtCurrentEvent =
565 (m_doTruth ? m_truthNtupleTool->getNumberOfTreeRecords() : 0 );
567 int trackTreeIndexBegin = m_trees[trackColIndex]->GetEntries();
568 int nTracksPerEvent = 0;
572 for ( ; trackIterator < (*tracks).end(); ++trackIterator) {
573 if (!((*trackIterator))) {
574 msg(MSG::WARNING) <<
"TrackCollection " << m_inputTrackCollection[trackColIndex] <<
"contains empty entries" <<
endmsg;
577 if (m_trackSelector.empty() || m_trackSelector->decision(*(*trackIterator), primaryVertex)) {
580 itTools = m_ValidationNtupleTools.begin();
581 for ( ; itTools != m_ValidationNtupleTools.end(); ++itTools ) {
582 if (((*itTools)->fillTrackData( *(*trackIterator), 0 )).isFailure()) {
583 ATH_MSG_ERROR (
"Validation Ntuple Tool could not fill track data.");
584 return StatusCode::FAILURE;
587 nTracksPerEvent += 1;
593 TrackTruthCollection::const_iterator truthIterator = trackTruthCollection->find( trackIterator - (*tracks).begin() );
594 if ( truthIterator == trackTruthCollection->end() ){
595 ATH_MSG_DEBUG (
"No matching truth particle found for track");
597 trackTruth = &((*truthIterator).second);
599 if (msgLvl(
MSG::DEBUG))
msg(
MSG::DEBUG) <<
"Link to generated particle information is not there - assuming a lost G4 particle ('fake fake')." <<
endmsg;
600 genParticle = m_visibleParticleWithoutTruth;
607 if ( genParticle!=
nullptr && genParticle->pdg_id() == 0 ) {
609 <<
" does not conform to PDG requirements... ignore it!" <<
endmsg;
610 genParticle =
nullptr;
623 for (; matchedPartIter != truthData.end(); ++matchedPartIter) {
625 if ((*matchedPartIter).genParticle == genParticle)
break;
627 if (matchedPartIter == truthData.end()) {
631 if ( genParticle->production_vertex() ) {
632 newTrackPerigee = m_truthToTrack->makePerigeeParameters( genParticle );
633 generatedTrackPerigee = newTrackPerigee;
637 (*matchedPartIter).truthToTrackIndices[trackColIndex].push_back(m_nTrackTreeRecords[trackColIndex]);
638 (*matchedPartIter).truthToTrackMatchingProbabilities[trackColIndex].push_back(trackTruth->
probability());
639 generatedTrackPerigee = (*matchedPartIter).truthPerigee;
641 truthIndex += nTruthTreeRecordsAtCurrentEvent;
644 itTools = m_ValidationNtupleTools.begin();
645 for ( ; itTools != m_ValidationNtupleTools.end(); ++itTools ) {
646 if (((*itTools)->fillTrackTruthData( generatedTrackPerigee, *trackTruth, truthIndex )).isFailure()) {
647 ATH_MSG_ERROR (
"Validation Ntuple Tool could not fill track truth data.");
648 delete newTrackPerigee;
649 return StatusCode::FAILURE;
653 delete newTrackPerigee;
658 m_trees[trackColIndex]->Fill();
659 itTools = m_ValidationNtupleTools.begin();
660 for ( ; itTools != m_ValidationNtupleTools.end(); ++itTools )
661 (*itTools)->resetVariables();
664 m_nTrackTreeRecords[trackColIndex]++;
670 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex )
671 if( m_eventPropertyNtupleTools[toolIndex]->isTrackLinkTool() ) m_eventPropertyNtupleTools[toolIndex]->setTrackTreeIndices
672 (trackColIndex, trackTreeIndexBegin, nTracksPerEvent );
674 return StatusCode::SUCCESS;
684 if (!m_inputTrackParticleCollection[trackParticleColIndex].
empty() &&
685 evtStore()->contains<Trk::TrackParticleBaseCollection>(m_inputTrackParticleCollection[trackParticleColIndex])) {
686 if (evtStore()->
retrieve(trackParticles, m_inputTrackParticleCollection[trackParticleColIndex]).isFailure()) {
687 msg(MSG::WARNING) <<
"Trk::TrackParticleBasesContainer not found:" << m_inputTrackParticleCollection[trackParticleColIndex] <<
endmsg;
688 return StatusCode::SUCCESS;
690 if (msgLvl(
MSG::DEBUG))
msg(
MSG::DEBUG) <<
"Trk::TrackParticleBasesContainer found: "<< m_inputTrackParticleCollection[trackParticleColIndex] <<
endmsg;
693 msg(MSG::WARNING) <<
"Trk::TrackParticleBasesContainer " << m_inputTrackParticleCollection[trackParticleColIndex] <<
" not found in StoreGate." <<
endmsg;
694 return StatusCode::SUCCESS;
698 int trackTreeIndexBegin = m_trees[trackParticleColIndex + m_inputTrackCollection.size()]->GetEntries();
699 int nTrkParticlesPerEvent = 0;
703 for ( ; trackParticleIterator < (*trackParticles).end(); ++trackParticleIterator) {
704 if (!((*trackParticleIterator))) {
705 msg(MSG::WARNING) <<
"TrackParticleCollection " << m_inputTrackParticleCollection[trackParticleColIndex] <<
"contains empty entries" <<
endmsg;
709 if ( m_ValTrkParticleNtupleTool->fillTrackParticleData( *(*trackParticleIterator) ).isFailure() ){
710 msg(MSG::ERROR) <<
"Validation Ntuple Tool could not fill track data." <<
endmsg;
711 return StatusCode::FAILURE;
713 nTrkParticlesPerEvent += 1;
715 if ( m_ValTrkParticleNtupleTool->writeRecord(m_trees[trackParticleColIndex + m_inputTrackCollection.size()]).isFailure() ){
716 msg(MSG::ERROR) <<
"Validation Ntuple Tool could not write track data." <<
endmsg;
717 return StatusCode::FAILURE;
722 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ){
723 if( m_eventPropertyNtupleTools[toolIndex]->isTrkParticleLinkTool() )
724 m_eventPropertyNtupleTools[toolIndex]->setTrackTreeIndices(trackParticleColIndex, trackTreeIndexBegin, nTrkParticlesPerEvent );
728 return StatusCode::SUCCESS;
734 msg(MSG::INFO) <<
"TrackValidationNtupleWriter finalize()" <<
endmsg;
739 delete m_visibleParticleWithoutTruth;
741 for (
unsigned int toolIndex = 0 ; toolIndex < m_eventPropertyNtupleTools.size(); ++toolIndex ){
742 if (m_eventPropertyNtupleTools[toolIndex]->resetVariables( ).isFailure()){};
745 return StatusCode::SUCCESS;