From b140a9b8987cb2b58c7d6938eb8d5673e71f8bf5 Mon Sep 17 00:00:00 2001
From: lintao <lintao51@gmail.com>
Date: Sat, 22 Aug 2020 23:39:29 +0800
Subject: [PATCH] WIP: use ntuplesvc to store the id.

---
 Examples/src/DumpIDAlg/DumpIDAlg.cpp | 60 ++++++++++++++++++++--------
 Examples/src/DumpIDAlg/DumpIDAlg.h   | 14 +++++++
 2 files changed, 58 insertions(+), 16 deletions(-)

diff --git a/Examples/src/DumpIDAlg/DumpIDAlg.cpp b/Examples/src/DumpIDAlg/DumpIDAlg.cpp
index 3d99477f..1ae59e33 100644
--- a/Examples/src/DumpIDAlg/DumpIDAlg.cpp
+++ b/Examples/src/DumpIDAlg/DumpIDAlg.cpp
@@ -37,6 +37,29 @@ StatusCode DumpIDAlg::initialize()
         return StatusCode::FAILURE;
     }
 
+    //  Book N-tuple 1
+    NTuplePtr nt1( ntupleSvc(), "MyTuples/1" );
+    if ( nt1 ) {
+        m_tuple_id = nt1;
+    } else {
+        m_tuple_id = ntupleSvc()->book( "MyTuples/1", CLID_RowWiseTuple, "Row-wise N-Tuple example" );
+        if ( m_tuple_id ) {
+            m_tuple_id->addItem( "system", m_id_system ).ignore();
+            m_tuple_id->addItem( "module", m_id_module ).ignore();
+            m_tuple_id->addItem( "stave", m_id_stave ).ignore();
+            m_tuple_id->addItem( "tower", m_id_tower ).ignore();
+            m_tuple_id->addItem( "layer", m_id_layer ).ignore();
+            m_tuple_id->addItem( "wafer", m_id_wafer ).ignore();
+            m_tuple_id->addItem( "cellX", m_id_cellX ).ignore();
+            m_tuple_id->addItem( "cellY", m_id_cellY ).ignore();
+
+        } else { // did not manage to book the N tuple....
+            error() << "    Cannot book N-tuple:" << long( m_tuple_id ) << endmsg;
+            return StatusCode::FAILURE;
+        }
+    }
+
+
     return GaudiAlgorithm::initialize();
 }
 
@@ -48,25 +71,30 @@ StatusCode DumpIDAlg::execute()
     for (auto calohit: *ecalBarrelCol) {
         auto cellid = calohit.getCellID();
 
-        int id_system = m_decoder->get(cellid, "system");
-        int id_module = m_decoder->get(cellid, "module");
-        int id_stave = m_decoder->get(cellid, "stave");
-        int id_tower = m_decoder->get(cellid, "tower");
-        int id_layer = m_decoder->get(cellid, "layer");
-        int id_wafer = m_decoder->get(cellid, "wafer");
-        int id_cellX = m_decoder->get(cellid, "cellX");
-        int id_cellY = m_decoder->get(cellid, "cellY");
+        m_id_system = m_decoder->get(cellid, "system");
+        m_id_module = m_decoder->get(cellid, "module");
+        m_id_stave = m_decoder->get(cellid, "stave");
+        m_id_tower = m_decoder->get(cellid, "tower");
+        m_id_layer = m_decoder->get(cellid, "layer");
+        m_id_wafer = m_decoder->get(cellid, "wafer");
+        m_id_cellX = m_decoder->get(cellid, "cellX");
+        m_id_cellY = m_decoder->get(cellid, "cellY");
 
         info() << "Calo hit cellid: " << cellid
-               << " system: " << id_system
-               << " module: " << id_module
-               << " stave: " << id_stave
-               << " tower: " << id_tower
-               << " layer: " << id_layer
-               << " wafer: " << id_wafer
-               << " cellX: " << id_cellX
-               << " cellY: " << id_cellY
+               << " system: " << m_id_system
+               << " module: " << m_id_module
+               << " stave: " << m_id_stave
+               << " tower: " << m_id_tower
+               << " layer: " << m_id_layer
+               << " wafer: " << m_id_wafer
+               << " cellX: " << m_id_cellX
+               << " cellY: " << m_id_cellY
                << endmsg;
+
+        // calculate I/J/K 
+
+        m_tuple_id->write();
+
     }
     return StatusCode::SUCCESS;
 }
diff --git a/Examples/src/DumpIDAlg/DumpIDAlg.h b/Examples/src/DumpIDAlg/DumpIDAlg.h
index 04277437..20bb9469 100644
--- a/Examples/src/DumpIDAlg/DumpIDAlg.h
+++ b/Examples/src/DumpIDAlg/DumpIDAlg.h
@@ -3,6 +3,7 @@
 
 #include "FWCore/DataHandle.h"
 #include "GaudiAlg/GaudiAlgorithm.h"
+#include "GaudiKernel/NTuple.h"
 
 #include "DetInterface/IGeoSvc.h"
 
@@ -33,6 +34,19 @@ private:
     DataHandle<edm4hep::SimCalorimeterHitCollection> m_EcalBarrelCol{"EcalBarrelCollection", 
             Gaudi::DataHandle::Reader, this};
 
+private:
+    // strore all the id for later analysis
+    NTuple::Tuple* m_tuple_id = nullptr;
+
+    NTuple::Item<int> m_id_system;
+    NTuple::Item<int> m_id_module;
+    NTuple::Item<int> m_id_stave;
+    NTuple::Item<int> m_id_tower;
+    NTuple::Item<int> m_id_layer;
+    NTuple::Item<int> m_id_wafer;
+    NTuple::Item<int> m_id_cellX;
+    NTuple::Item<int> m_id_cellY;
+    
 };
 
 
-- 
GitLab