From f26b973a958290d72c871faccd87c3cf905315b5 Mon Sep 17 00:00:00 2001
From: Abhijit Mathad <abhijit.mathad@cern.ch>
Date: Tue, 7 Jun 2022 18:26:01 +0200
Subject: [PATCH] Test of FunTuple with v2 Composites and ChargedBasic

---
 .../options/option_davinci_v2_composites.py   |  76 +++++++
 .../options/option_davinci_v2_composites.yaml |  21 ++
 .../test_davinci_v2_composites.qmt            |  78 +++++++
 .../tests/refs/test_davinci_v2_composites.ref | 195 ++++++++++++++++++
 4 files changed, 370 insertions(+)
 create mode 100644 DaVinciTests/tests/options/option_davinci_v2_composites.py
 create mode 100644 DaVinciTests/tests/options/option_davinci_v2_composites.yaml
 create mode 100755 DaVinciTests/tests/qmtest/davinci.qms/test_davinci_v2_composites.qmt
 create mode 100644 DaVinciTests/tests/refs/test_davinci_v2_composites.ref

diff --git a/DaVinciTests/tests/options/option_davinci_v2_composites.py b/DaVinciTests/tests/options/option_davinci_v2_composites.py
new file mode 100644
index 000000000..9f48db5c2
--- /dev/null
+++ b/DaVinciTests/tests/options/option_davinci_v2_composites.py
@@ -0,0 +1,76 @@
+###############################################################################
+# (c) Copyright 2021-2022 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+
+from PyConf.Algorithms import ChargedBasicsProducer, UniqueIDGeneratorAlg
+from PyConf.Algorithms import ThOrCombiner__2ChargedBasics
+from PyConf.Algorithms import ThOrCombiner__CompositesChargedBasics
+import Functors as F
+from FunTuple import FunctorCollection
+from FunTuple import FunTuple_Composites
+from FunTuple import FunTuple_ChargedBasics
+from DaVinci import options
+
+#make unique_id_generator
+unique_id_gen = UniqueIDGeneratorAlg()
+
+#produce charged basic particles
+produce_muons = ChargedBasicsProducer(
+    InputUniqueIDGenerator=unique_id_gen, ParticleID='muon')
+
+produce_jpsi = ThOrCombiner__2ChargedBasics(
+    InputUniqueIDGenerator=unique_id_gen,
+    DecayDescriptor="J/psi(1S) -> mu+ mu-",
+    Input1=produce_muons.Particles,
+    Input2=produce_muons.Particles)
+
+produce_kaons = ChargedBasicsProducer(
+    InputUniqueIDGenerator=unique_id_gen, ParticleID='kaon')
+
+produce_B = ThOrCombiner__CompositesChargedBasics(
+    InputUniqueIDGenerator=unique_id_gen,
+    DecayDescriptor="[B+ -> J/psi(1S) K+]cc",
+    Input1=produce_jpsi.Output,
+    Input2=produce_kaons.Particles)
+
+#define FunTuple instance
+# Cannot yet use CHILD functors with v2.
+variables = FunctorCollection({"PX": F.PX, "PY": F.PY, "PZ": F.PZ})
+
+#Note CC here and cc (small case) above in the decay descriptor. Needs to be uniform.
+# Decay descriptor parsing is not yet available with v2 Composites.
+# Hence, we are simply running over all particles in TES and not selecting any subset using the decay descriptor for the moment.
+bfields = {"B": "[B+ -> J/psi(1S) K+]CC"}
+bvars = {"B": variables}
+ntuple_composite = FunTuple_Composites(
+    name="TupleB",
+    tuple_name="DecayTree",
+    fields=bfields,
+    variables=bvars,
+    inputs=produce_B.Output)
+
+# Decay descriptor parsing is not yet available with v2 Composites or ChargedBasic (see above comment).
+kfields = {"K": "[B+ -> J/psi(1S) ^K+]CC"}
+kvars = {"K": variables}
+ntuple_charged_basic = FunTuple_ChargedBasics(
+    name="TupleK",
+    tuple_name="DecayTree",
+    fields=kfields,
+    variables=kvars,
+    inputs=produce_kaons.Particles)
+
+options.evt_max = 2
+
+
+def main():
+    return {
+        "UserAlgs_1": [ntuple_composite],
+        'UserAlgs_2': {ntuple_charged_basic}
+    }, []
diff --git a/DaVinciTests/tests/options/option_davinci_v2_composites.yaml b/DaVinciTests/tests/options/option_davinci_v2_composites.yaml
new file mode 100644
index 000000000..8bcdef5c8
--- /dev/null
+++ b/DaVinciTests/tests/options/option_davinci_v2_composites.yaml
@@ -0,0 +1,21 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+
+#non-sense json file
+annsvc_config: 'root://eoslhcb.cern.ch//eos/lhcb/wg/dpa/wp3/NovemberFEST/hlt2_D0_Kpi_10evts_newPacking.tck.json'
+evt_max: -1
+histo_file: 'v2_example.root'
+lumi: false
+ntuple_file: 'v2_example.root'
+print_freq: 1
+#non-sense process
+process: 'Hlt2'
+stream: 'default'
\ No newline at end of file
diff --git a/DaVinciTests/tests/qmtest/davinci.qms/test_davinci_v2_composites.qmt b/DaVinciTests/tests/qmtest/davinci.qms/test_davinci_v2_composites.qmt
new file mode 100755
index 000000000..1c8acaf55
--- /dev/null
+++ b/DaVinciTests/tests/qmtest/davinci.qms/test_davinci_v2_composites.qmt
@@ -0,0 +1,78 @@
+<?xml version="1.0" ?>
+<!--
+###############################################################################
+# (c) Copyright 2021-2022 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+-->
+<!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+#######################################################
+# SUMMARY OF THIS TEST
+# ...................
+# Author: Abhijit Mathad
+# Purpose: Test for the new DaVinci configuration checking the correct processing v2 composites
+# Prerequisites: None
+# inputfiledb FEST_November_2021_dst_newPacking $DAVINCIROOT/options/DaVinciDB-Example.yaml
+# joboptfile ../options/option_davinci_v2_composites.yaml
+# user_algorithms ../options/option_davinci_v2_composites:main
+#######################################################
+-->
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+  <argument name="program"><text>davinci</text></argument>
+  <argument name="args"><set>
+  <text>--inputfiledb</text>
+  <text>FEST_November_2021_dst_newPacking</text>
+  <text>$DAVINCIROOT/options/DaVinciDB-Example.yaml</text>
+  <text>--joboptfile</text>
+  <text>../options/option_davinci_v2_composites.yaml</text>
+  <text>--user_algorithms</text>
+  <text>../options/option_davinci_v2_composites:main</text>
+  </set></argument>
+  <argument name="reference"><text>../refs/test_davinci_v2_composites.ref</text></argument>
+  <argument name="error_reference"><text>../refs/empty.ref</text></argument>
+  <argument name="validator"><text>
+#from DaVinciTests.QMTest.DaVinciExclusions import preprocessor
+#validateWithReference(preproc = preprocessor)
+import sys, os, glob
+from ROOT import TFile
+
+B_vars_stored =['B_PX', 'B_PY', 'B_PZ']
+K_vars_stored =['K_PX', 'K_PY', 'K_PZ']
+
+#sort the expected vars
+B_vars_stored = sorted(B_vars_stored)
+
+#open the TFile and TTree
+ntuple = './v2_example.root'
+if not os.path.isfile(ntuple): raise Exception(f"File: {ntuple} does not exist!")
+f      = TFile.Open(ntuple)
+t_B    = f.Get('TupleB/DecayTree')
+t_K    = f.Get('TupleK/DecayTree')
+
+#sort the stores vars
+b_names = sorted([b.GetName() for b in t_B.GetListOfLeaves()])
+K_names = sorted([K.GetName() for K in t_K.GetListOfLeaves()])
+
+B_excluded_1 = set(B_vars_stored) - set(b_names)
+B_excluded_2 = set(b_names) - set(B_vars_stored)
+if len(B_excluded_1) != 0: raise Exception('Number of stored variables is less than what is expected. The extra variables expected are: ' , B_excluded_1)
+if len(B_excluded_2) != 0: raise Exception('Number of stored variables is greater than what is expected. The extra variables stored are: ', B_excluded_2)
+
+K_excluded_1 = set(K_vars_stored) - set(K_names)
+K_excluded_2 = set(K_names) - set(K_vars_stored)
+if len(K_excluded_1) != 0: raise Exception('Number of stored variables is less than what is expected. The extra variables expected are: ' , K_excluded_1)
+if len(K_excluded_2) != 0: raise Exception('Number of stored variables is greater than what is expected. The extra variables stored are: ', K_excluded_2)
+
+f.Close()
+print('Test successfully completed!')
+os.system(f"rm {ntuple}")
+#countErrorLines({"FATAL":0, "ERROR":0})
+  </text></argument>
+</extension>
diff --git a/DaVinciTests/tests/refs/test_davinci_v2_composites.ref b/DaVinciTests/tests/refs/test_davinci_v2_composites.ref
new file mode 100644
index 000000000..16be0b525
--- /dev/null
+++ b/DaVinciTests/tests/refs/test_davinci_v2_composites.ref
@@ -0,0 +1,195 @@
+INFO User algorithm option_davinci_v2_composites.main imported successfully!
+ApplicationMgr    SUCCESS
+====================================================================================================================================
+====================================================================================================================================
+ApplicationMgr       INFO Application Manager Configured successfully
+DetectorPersistencySvc                 INFO Added successfully Conversion service:XmlCnvSvc
+DetectorDataSvc                     SUCCESS Detector description database: git:/lhcb.xml
+NTupleSvc                              INFO Added stream file:v2_example.root as FILE1
+RootHistSvc                            INFO Writing ROOT histograms to: v2_example.root
+HistogramPersistencySvc                INFO Added successfully Conversion service:RootHistSvc
+FSROutputStreamDstWriter               INFO Data source: EventDataSvc output: SVC='Gaudi::RootCnvSvc'
+EventClockSvc.FakeEventTime            INFO Event times generated from 0 with steps of 0
+ChargedBasicsProducer                  INFO Initialising ChargedBasicsProducer
+ChargedBasicsProducer#1                INFO Initialising ChargedBasicsProducer
+ApplicationMgr                         INFO Application Manager Initialized successfully
+DeFTDetector                           INFO Current FT geometry version =   64
+ApplicationMgr                         INFO Application Manager Started successfully
+EventPersistencySvc                    INFO Added successfully Conversion service:RootCnvSvc
+EventSelector                       SUCCESS Reading Event record 1. Record number within stream 1: 1
+ChargedBasicsProducer#1                INFO Executing ChargedBasicsProducer
+TupleK                                 INFO find_candidates: For v2 Composites, the decay descriptor parsing is not implemented. Running over all particles in TES.
+RFileCnv                               INFO opening Root file "v2_example.root" for writing
+RCWNTupleCnv                           INFO Booked TTree with ID: DecayTree "DecayTree" in directory v2_example.root:/TupleK
+ChargedBasicsProducer                  INFO Executing ChargedBasicsProducer
+TupleB                                 INFO find_candidates: For v2 Composites, the decay descriptor parsing is not implemented. Running over all particles in TES.
+RCWNTupleCnv                           INFO Booked TTree with ID: DecayTree "DecayTree" in directory v2_example.root:/TupleB
+EventSelector                       SUCCESS Reading Event record 2. Record number within stream 1: 2
+ChargedBasicsProducer#1                INFO Executing ChargedBasicsProducer
+TupleK                                 INFO find_candidates: For v2 Composites, the decay descriptor parsing is not implemented. Running over all particles in TES.
+ChargedBasicsProducer                  INFO Executing ChargedBasicsProducer
+TupleB                                 INFO find_candidates: For v2 Composites, the decay descriptor parsing is not implemented. Running over all particles in TES.
+ApplicationMgr                         INFO Application Manager Stopped successfully
+FSROutputStreamDstWriter               INFO Set up File Summary Record
+FSROutputStreamDstWriter               INFO Events output: 1
+TupleB                              SUCCESS Booked 1 N-Tuples and 0 Event Tag Collections
+TupleB                              SUCCESS List of booked N-Tuples in directory "FILE1/TupleB"
+TupleB                              SUCCESS  ID=DecayTree     Title="DecayTree"                               #items=3  {B_PX,B_PY,B_PZ}
+TupleK                              SUCCESS Booked 1 N-Tuples and 0 Event Tag Collections
+TupleK                              SUCCESS List of booked N-Tuples in directory "FILE1/TupleK"
+TupleK                              SUCCESS  ID=DecayTree     Title="DecayTree"                               #items=3  {K_PX,K_PY,K_PZ}
+LAZY_AND: DaVinci                                   #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+ NONLAZY_OR: FileSummaryRecords                     #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+  LAZY_AND: GenFSR                                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecordStream/FSROutputStreamDstWriter            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+ NONLAZY_OR: UserAnalysis                           #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+  LAZY_AND: UserAlgs_1                              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   LHCb__UnpackRawEvent/LHCb__UnpackRawEvent        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   HltPackedBufferDecoder/HltPackedBufferDecoder    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   UnpackMCParticle/UnpackMCParticle                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   UnpackMCVertex/UnpackMCVertex                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#1            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#2            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#3            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#4            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#5            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#1                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#2                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#3                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#4                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#5                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker                      #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#1                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#2                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#3                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#4                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#5                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#6                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#7                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#8                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#1                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#2                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#3                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker#1                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker#2                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#1              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#2              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#3              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ProtoParticleUnpacker/ProtoParticleUnpacker      #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ProtoParticleUnpacker/ProtoParticleUnpacker#1    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#1              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#2              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#3              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#4              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#5              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker          #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#1        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#2        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#3        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#4        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#5        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   PP2MCPRelationUnpacker/PP2MCPRelationUnpacker    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   PP2MCPRelationUnpacker/PP2MCPRelationUnpacker#1  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   FunTupleBase_Composites/TupleB                   #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+  LAZY_AND: UserAlgs_2                              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   LHCb__UnpackRawEvent/LHCb__UnpackRawEvent        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   HltPackedBufferDecoder/HltPackedBufferDecoder    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   UnpackMCParticle/UnpackMCParticle                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   UnpackMCVertex/UnpackMCVertex                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#1            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#2            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#3            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#4            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RecVertexUnpacker/RecVertexUnpacker#5            #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#1                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#2                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#3                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#4                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   VertexUnpacker/VertexUnpacker#5                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker                      #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#1                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#2                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#3                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#4                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#5                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#6                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#7                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   TrackUnpacker/TrackUnpacker#8                    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#1                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#2                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   RichPIDUnpacker/RichPIDUnpacker#3                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker                  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker#1                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   MuonPIDUnpacker/MuonPIDUnpacker#2                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#1              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#2              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   CaloHypoUnpacker/CaloHypoUnpacker#3              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ProtoParticleUnpacker/ProtoParticleUnpacker      #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ProtoParticleUnpacker/ProtoParticleUnpacker#1    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#1              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#2              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#3              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#4              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   ParticleUnpacker/ParticleUnpacker#5              #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker          #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#1        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#2        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#3        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#4        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   P2VRelationUnpacker/P2VRelationUnpacker#5        #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   PP2MCPRelationUnpacker/PP2MCPRelationUnpacker    #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   PP2MCPRelationUnpacker/PP2MCPRelationUnpacker#1  #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+   FunTupleBase_ChargedBasics/TupleK                #=2       Sum=2           Eff=|( 100.0000 +- 0.00000 )%|
+ToolSvc                                INFO Removing all tools created by ToolSvc
+RFileCnv                               INFO dumping contents of /NTUPLES/FILE1
+TFile: name=v2_example.root, title=Gaudi Trees, option=CREATE
+NTupleSvc                              INFO NTuples saved successfully
+ApplicationMgr                         INFO Application Manager Finalized successfully
+ApplicationMgr                         INFO Application Manager Terminated successfully
+ChargedBasicsProducer                  INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Event"                                         |         2 |
+ | "Nb created anti-particles"                     |         9 |          0 |      0.0000 |      0.0000 |  4.2950e+09 |       0.0000 |
+ | "Nb created particles"                          |        11 |          0 |      0.0000 |      0.0000 |  4.2950e+09 |       0.0000 |
+ChargedBasicsProducer#1                INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Event"                                         |         2 |
+ | "Nb created anti-particles"                     |         9 |          0 |      0.0000 |      0.0000 |  4.2950e+09 |       0.0000 |
+ | "Nb created particles"                          |        11 |          0 |      0.0000 |      0.0000 |  4.2950e+09 |       0.0000 |
+ThOrCombiner__2ChargedBasics           INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"# output reallocations"                        |         2 |          0 |(  0.000000 +-  0.000000)% |
+ |*"# passed CombinationCut"                       |        49 |         49 |( 100.0000 +-  0.000000)% |
+ |*"# passed CompositeCut"                         |        49 |         49 |( 100.0000 +-  0.000000)% |
+ |*"# passed vertex fit"                           |        49 |         49 |( 100.0000 +-  0.000000)% |
+ | "# shuffled in 2-particle buffer"               |         3 |          6 |     2.0000 |
+ |*"CombinationCut SIMD utilisation"               |        64 |         49 |( 76.56250 +- 5.295094)% |
+ |*"CombinationCut ideal SIMD utilisation"         |        52 |         49 |( 94.23077 +- 3.233357)% |
+ |*"CompositeCut SIMD utilisation"                 |        52 |         49 |( 94.23077 +- 3.233357)% |
+ThOrCombiner__CompositesChargedB...    INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"# output reallocations"                        |         2 |          2 |( 100.0000 +-  0.000000)% |
+ |*"# passed CombinationCut"                       |       490 |        490 |( 100.0000 +-  0.000000)% |
+ |*"# passed CompositeCut"                         |       143 |        143 |( 100.0000 +-  0.000000)% |
+ |*"# passed vertex fit"                           |       490 |        143 |( 29.18367 +- 2.053708)% |
+ | "# shuffled in 2-particle buffer"               |        49 |         97 |     1.9796 |
+ |*"CombinationCut SIMD utilisation"               |       688 |        490 |( 71.22093 +- 1.726029)% |
+ |*"CombinationCut ideal SIMD utilisation"         |       492 |        490 |( 99.59350 +- 0.2868570)% |
+ |*"CompositeCut SIMD utilisation"                 |       376 |        143 |( 38.03191 +- 2.503596)% |
+TupleB                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# processed events"                            |         2 |
+TupleK                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# processed events"                            |         2 |
-- 
GitLab