From 82c3cef9b8b11722d3a330f47e1403478a59b614 Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Tue, 10 May 2022 05:49:21 -0700
Subject: [PATCH] VetoNu working at some level [skip ci]

---
 .../FaserGeoAdaptors/GeoScintHit.icc          |  4 ++--
 .../FaserGeoModel/python/GeoModelInit.py      |  2 +-
 README.md                                     |  2 +-
 .../ScintDetectorElement.h                    |  2 ++
 .../src/ScintDetectorElement.cxx              | 20 ++++++++++++++----
 .../src/VetoNuDetectorManager.cxx             |  2 +-
 .../VTI12GeometrySystems/VP1GeoFlags.h        | 13 ++++++------
 .../src/GeoSysController.cxx                  |  1 +
 .../src/VP1GeometrySystem.cxx                 |  7 +++++++
 .../src/VisAttributes.cxx                     |  1 +
 .../src/VolumeTreeModel.cxx                   |  1 +
 .../src/geometrysystemcontroller.ui           | 15 +++++++++----
 .../src/VP1SimHitSystem.cxx                   | 21 +++++++++++++++++++
 .../src/simhitcontrollerform.ui               |  9 +++++++-
 .../src/TrackCollHandle_TruthTracks.cxx       |  6 ++++--
 .../VP1WaveformHitSystem.h                    |  1 +
 .../VTI12WaveformSystems/VP1WaveformSystem.h  |  1 +
 .../WaveformSysController.h                   |  3 +++
 .../src/VP1WaveformHitSystem.cxx              | 15 +++++++++++++
 .../src/VP1WaveformSystem.cxx                 | 14 +++++++++++++
 .../src/WaveformSysController.cxx             | 12 +++++++++++
 .../src/waveformcontrollerform.ui             | 20 +++++++++++++-----
 .../VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h  |  4 ++++
 .../VTI12Utils/VTI12Utils/VP1JobConfigInfo.h  |  1 +
 graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx  | 10 +++++++++
 .../VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx |  6 ++++++
 26 files changed, 166 insertions(+), 27 deletions(-)

diff --git a/DetectorDescription/GeoModel/FaserGeoAdaptors/FaserGeoAdaptors/GeoScintHit.icc b/DetectorDescription/GeoModel/FaserGeoAdaptors/FaserGeoAdaptors/GeoScintHit.icc
index ce5f6950..ad053437 100644
--- a/DetectorDescription/GeoModel/FaserGeoAdaptors/FaserGeoAdaptors/GeoScintHit.icc
+++ b/DetectorDescription/GeoModel/FaserGeoAdaptors/FaserGeoAdaptors/GeoScintHit.icc
@@ -22,7 +22,7 @@ inline void GeoScintHit::init() {
   if (detStore.retrieve().isSuccess()) {
     if(detStore->retrieve(s_veto,"Veto").isFailure())
       s_veto = 0;
-    if(detStore->retrieve(s_veto,"VetoNu").isFailure())
+    if(detStore->retrieve(s_vetonu,"VetoNu").isFailure())
       s_vetonu = 0;
     if(detStore->retrieve(s_trigger,"Trigger").isFailure())
       s_trigger = 0;
@@ -30,7 +30,7 @@ inline void GeoScintHit::init() {
       s_preshower = 0;
     if(detStore->retrieve(s_vID,"VetoID").isFailure())
       s_vID = 0;
-    if(detStore->retrieve(s_vID,"VetoNuID").isFailure())
+    if(detStore->retrieve(s_vnID,"VetoNuID").isFailure())
       s_vnID = 0;
     if(detStore->retrieve(s_tID,"TriggerID").isFailure())
       s_tID = 0;
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
index f44e3533..5e47a915 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
@@ -48,7 +48,7 @@ def _setupGeoModel():
         geoModelSvc.DetectorTools += [ emulsionDetectorTool ]
 
     if "FASERNU-03" in DDversion:
-        from VetoGeoNuModel.VetoNuGeoModelConf import VetoNuDetectorTool
+        from VetoNuGeoModel.VetoNuGeoModelConf import VetoNuDetectorTool
         vetoNuDetectorTool = VetoNuDetectorTool( DetectorName = "VetoNu",
                                             Alignable = True,
                                             RDBAccessSvc = "RDBAccessSvc",
diff --git a/README.md b/README.md
index 07806385..2d7e57ab 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ source ./setup.sh
 
 Don't omit the dot in the `source ./setup.sh` command! 
 
-It can be convenient to alias the "asetup --input=calypso/asetup.faser" to something like "fsetup"
+It can be convenient to alias the command "asetup --input=calypso/asetup.faser" to something like "fsetup"
 
 **Lxplus/afs setup**
 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
index 2f1e7c0a..6711c085 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
@@ -156,6 +156,7 @@ namespace ScintDD {
       bool isVeto() const;
       bool isTrigger() const;
       bool isPreshower() const;
+      bool isVetoNu() const;
 
       // Identifier <-> pmt 
     
@@ -458,6 +459,7 @@ namespace ScintDD {
       bool m_isVeto;
       bool m_isTrigger;
       bool m_isPreshower;
+      bool m_isVetoNu;
       
       //
       // Cached values.
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
index 3b4a0c48..e06fa948 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
@@ -14,6 +14,7 @@
 #include "ScintIdentifier/VetoID.h"
 #include "ScintIdentifier/TriggerID.h"
 #include "ScintIdentifier/PreshowerID.h"
+#include "ScintIdentifier/VetoNuID.h"
 
 #include "GeoModelKernel/GeoVFullPhysVol.h"
 #include "GeoModelFaserUtilities/GeoAlignmentStore.h"
@@ -93,13 +94,14 @@ ScintDetectorElement::commonConstructor()
   m_isVeto = getIdHelper()->is_veto(m_id);
   m_isTrigger = getIdHelper()->is_trigger(m_id);
   m_isPreshower = getIdHelper()->is_preshower(m_id);
-  if (!m_isVeto && !m_isTrigger && !m_isPreshower)
+  m_isVetoNu = getIdHelper()->is_vetonu(m_id);
+  if (!m_isVeto && !m_isTrigger && !m_isPreshower && !m_isVetoNu)
   {
-    if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Element id is not for veto, trigger or preshower" << endmsg;
+    if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Element id is not for veto, trigger, preshower or vetonu" << endmsg;
   }
-  else if ((m_isVeto && m_isTrigger) || (m_isVeto && m_isPreshower) || (m_isTrigger && m_isPreshower))
+  else if ((m_isVeto && m_isTrigger) || (m_isVeto && m_isPreshower) || (m_isTrigger && m_isPreshower) || (m_isVetoNu && (m_isVeto || m_isTrigger || m_isPreshower)))
   {
-    if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Element id belongs to more than one of veto, trigger or preshower" << endmsg;
+    if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Element id belongs to more than one of veto, trigger, preshower or vetonu" << endmsg;
   }
   
   // Set IdHash.
@@ -118,6 +120,11 @@ ScintDetectorElement::commonConstructor()
       const PreshowerID* preshowerId = dynamic_cast<const PreshowerID* >(getIdHelper());
       m_idHash = preshowerId->plate_hash(m_id);
   }
+  else if (isVetoNu())
+  {
+      const VetoNuID* vetoNuId = dynamic_cast<const VetoNuID* >(getIdHelper());
+      m_idHash = vetoNuId->plate_hash(m_id);
+  }
   
   if (!m_idHash.is_valid()) throw std::runtime_error("ScintDetectorElement: Unable to set IdentifierHash");
 
@@ -599,6 +606,11 @@ bool ScintDetectorElement::isPreshower() const
   return m_isPreshower;
 }
 
+bool ScintDetectorElement::isVetoNu() const
+{
+  return m_isVetoNu;
+}
+
 Trk::Surface & 
 ScintDetectorElement::surface()
 {
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoNuDetectorManager.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoNuDetectorManager.cxx
index eb17df41..b7990ebc 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoNuDetectorManager.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoNuDetectorManager.cxx
@@ -260,7 +260,7 @@ namespace ScintDD {
   bool
   VetoNuDetectorManager::identifierBelongs(const Identifier & id) const
   {
-    return getIdHelper()->is_veto(id);
+    return getIdHelper()->is_vetonu(id);
   }
 
 
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
index a50cf0d1..0ec7c0ef 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/VTI12GeometrySystems/VP1GeoFlags.h
@@ -27,14 +27,15 @@ public:
     
     None                    = 0x00000000,
     Emulsion                = 0x00000001,
-    Veto                    = 0x00000002,
-    Trigger                 = 0x00000004,
-    Preshower               = 0x00000008,
+    VetoNu                  = 0x00000002,
+    Veto                    = 0x00000004,
+    Trigger                 = 0x00000008,
+    Preshower               = 0x00000010,
 
-    SCT                     = 0x00000010,
-    Dipole                  = 0x00000020,
+    SCT                     = 0x00000020,
+    Dipole                  = 0x00000040,
 
-    Ecal                    = 0x00000040,
+    Ecal                    = 0x00000080,
     // Pixel                   = 0x00000001, // bit 0
     // SCT                     = 0x00000002, // 1
     // TRT                     = 0x00000004, // 2
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
index e6325f8f..dd4c44c1 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/GeoSysController.cxx
@@ -150,6 +150,7 @@ GeoSysController::GeoSysController(IVP1System * sys)
   m_d->subSysCheckBoxMap[VP1GeoFlags::Emulsion] = m_d->ui.checkBox_Emulsion;
 
   // SCINTILLATOR
+  m_d->subSysCheckBoxMap[VP1GeoFlags::VetoNu] = m_d->ui.checkBox_VetoNu;
   m_d->subSysCheckBoxMap[VP1GeoFlags::Veto] = m_d->ui.checkBox_Veto;
   m_d->subSysCheckBoxMap[VP1GeoFlags::Trigger] = m_d->ui.checkBox_Trigger;
   m_d->subSysCheckBoxMap[VP1GeoFlags::Preshower] = m_d->ui.checkBox_Preshower;
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
index 8e4b6192..dfcff299 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VP1GeometrySystem.cxx
@@ -329,6 +329,7 @@ QWidget * VP1GeometrySystem::buildController()
                           bool negategrandchildrenregexp = false // wheter we want to negate teh granchildren regex
    */
     m_d->addSubSystem( VP1GeoFlags::Emulsion, "Emulsion");
+    m_d->addSubSystem( VP1GeoFlags::VetoNu,   "VetoNu");
     m_d->addSubSystem( VP1GeoFlags::Veto,     "Veto");
     m_d->addSubSystem( VP1GeoFlags::Trigger,  "Trigger");
     m_d->addSubSystem( VP1GeoFlags::Preshower,"Preshower");
@@ -1109,6 +1110,12 @@ void VP1GeometrySystem::Imp::createPathExtras(const VolumeHandle* volhandle, QSt
       entries.push("Veto::Veto");
       return;
     }
+    case VP1GeoFlags::VetoNu:{
+      prefix = QString("VetoNu::");
+      entries.push("SCINT::SCINT");
+      entries.push("VetoNu::VetoNu");
+      return;
+    }
     case VP1GeoFlags::Trigger:{
       prefix = QString("Trigger::");
       entries.push("SCINT::SCINT");
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx
index 82825c71..27fd3362 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VisAttributes.cxx
@@ -160,6 +160,7 @@ DetVisAttributes::DetVisAttributes() {
     material->specularColor.setValue(.915152, .915152, .915152);
     material->shininess.setValue(0.642424);
     add("Veto",material);
+    add("VetoNu",material);
     add("Trigger",material);
     add("Preshower",material);
   }
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
index b1aff16c..eae1d4d8 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
@@ -116,6 +116,7 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::defineSubSystem(VP1GeoFlags::Emulsion,  "Emulsion",  Imp::NEUTRINO);
     // Scintillator
     Imp::defineSubSystem(VP1GeoFlags::Veto,      "Veto",      Imp::SCINT);
+    Imp::defineSubSystem(VP1GeoFlags::VetoNu,    "VetoNu",    Imp::SCINT);
     Imp::defineSubSystem(VP1GeoFlags::Trigger,   "Trigger",   Imp::SCINT);
     Imp::defineSubSystem(VP1GeoFlags::Preshower, "Preshower", Imp::SCINT);
     // Tracker
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/geometrysystemcontroller.ui b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/geometrysystemcontroller.ui
index be9ac807..a5ef9228 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/geometrysystemcontroller.ui
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/geometrysystemcontroller.ui
@@ -239,20 +239,27 @@
              <number>0</number>
             </property>
             <item row="0" column="0">
+             <widget class="QCheckBox" name="checkBox_VetoNu">
+              <property name="text">
+               <string>VetoNu</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
              <widget class="QCheckBox" name="checkBox_Veto">
               <property name="text">
                <string>Veto</string>
               </property>
              </widget>
             </item>
-            <item row="0" column="1">
+            <item row="1" column="0">
              <widget class="QCheckBox" name="checkBox_Trigger">
               <property name="text">
                <string>Trigger</string>
               </property>
              </widget>
             </item>
-            <item row="0" column="2">
+            <item row="1" column="1">
              <widget class="QCheckBox" name="checkBox_Preshower">
               <property name="text">
                <string>Preshower</string>
@@ -333,7 +340,7 @@
          <property name="title">
           <string>Calorimeter</string>
          </property>
-         <layout class="QVBoxLayout" name="_12">
+         <layout class="QVBoxLayout" name="_121">
           <property name="spacing">
            <number>0</number>
           </property>
@@ -350,7 +357,7 @@
            <number>4</number>
           </property>
           <item>
-           <layout class="QHBoxLayout" name="_14">
+           <layout class="QHBoxLayout" name="_141">
             <item>
              <widget class="QCheckBox" name="checkBox_Ecal">
               <property name="text">
diff --git a/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/VP1SimHitSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/VP1SimHitSystem.cxx
index 19634a20..a9eec098 100755
--- a/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/VP1SimHitSystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/VP1SimHitSystem.cxx
@@ -64,6 +64,7 @@ QWidget* VP1SimHitSystem::buildController()
 
   // Populate Check Box Names Map
   m_clockwork->checkBoxNamesMap.insert(ui.chbxEmulsionHits,"Emulsion");
+  m_clockwork->checkBoxNamesMap.insert(ui.chbxVetoNuHits,"VetoNu");
   m_clockwork->checkBoxNamesMap.insert(ui.chbxVetoHits,"Veto");
   m_clockwork->checkBoxNamesMap.insert(ui.chbxTriggerHits,"Trigger");
   m_clockwork->checkBoxNamesMap.insert(ui.chbxPreshowerHits,"Preshower");
@@ -84,6 +85,7 @@ void VP1SimHitSystem::systemcreate(StoreGateSvc* /*detstore*/)
 {
   // Populate Color Map
   m_clockwork->colorMap.insert("Emulsion",SbColor(1,0,1));
+  m_clockwork->colorMap.insert("VetoNu",SbColor(0,1,1));
   m_clockwork->colorMap.insert("Veto",SbColor(0,0,1));
   m_clockwork->colorMap.insert("Trigger",SbColor(1,1,1));
   m_clockwork->colorMap.insert("Preshower",SbColor(1,0,0));
@@ -227,6 +229,25 @@ void VP1SimHitSystem::buildHitTree(const QString& detector)
     else
       message("Unable to retrieve Veto Hits");
   }
+  else if(detector=="VetoNu")
+  {
+    //
+    // VetoNu:
+    //
+    const ScintHitCollection* p_collection = nullptr;
+    if(sg->retrieve(p_collection, "VetoNuHits")==StatusCode::SUCCESS)
+    {
+      for(ScintHitConstIterator i_hit=p_collection->begin(); i_hit!=p_collection->end(); ++i_hit)
+      {
+        GeoScintHit ghit(*i_hit);
+        if(!ghit) continue;
+        HepGeom::Point3D<double> u = ghit.getGlobalPosition();
+        hitVtxProperty->vertex.set1Value(hitCount++,u.x(),u.y(),u.z());
+      }
+    }
+    else
+      message("Unable to retrieve VetoNu Hits");
+  }
   else if(detector=="Trigger")
   {
     //
diff --git a/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/simhitcontrollerform.ui b/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/simhitcontrollerform.ui
index 67f62d51..b9797015 100755
--- a/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/simhitcontrollerform.ui
+++ b/graphics/VTI12/VTI12Systems/VTI12SimHitSystems/src/simhitcontrollerform.ui
@@ -106,6 +106,13 @@
             <string>Scintillator</string>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout">
+            <item>
+             <widget class="QCheckBox" name="chbxVetoNuHits">
+              <property name="text">
+               <string>VetoNu Hits</string>
+              </property>
+             </widget>
+            </item>
             <item>
              <widget class="QCheckBox" name="chbxVetoHits">
               <property name="text">
@@ -181,7 +188,7 @@
        <property name="title">
         <string>Calorimeter</string>
        </property>
-       <layout class="QVBoxLayout" name="verticalLayout_3">
+       <layout class="QVBoxLayout" name="verticalLayout_31">
         <item>
          <widget class="QCheckBox" name="chbxCaloHits">
           <property name="text">
diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
index ef731fa9..eedf4ed4 100644
--- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
@@ -127,8 +127,9 @@ QStringList TrackCollHandle_TruthTracks::availableCollections( IVP1System*sys )
 
   if (VP1JobConfigInfo::hasVetoGeometry() ||
       VP1JobConfigInfo::hasTriggerGeometry() ||
-      VP1JobConfigInfo::hasPreshowerGeometry())
-    keys_scintillatorhits = sgcont.getKeys<ScintHitCollection>();//"VetoHits", "TriggerHits" and "PreshowerHits"
+      VP1JobConfigInfo::hasPreshowerGeometry() ||
+      VP1JobConfigInfo::hasVetoNuGeometry())
+    keys_scintillatorhits = sgcont.getKeys<ScintHitCollection>();//"VetoHits", "VetoNuHits", "TriggerHits" and "PreshowerHits"
   if (VP1JobConfigInfo::hasSCTGeometry())
     keys_siliconhits = sgcont.getKeys<FaserSiHitCollection>();//"SCT_Hits"
   if (VP1JobConfigInfo::hasEcalGeometry())
@@ -264,6 +265,7 @@ bool TrackCollHandle_TruthTracks::Imp::loadHitLists(std::map<SimBarCode,SimHitLi
    if (VP1JobConfigInfo::hasEmulsionGeometry())
      addHitCollections<NeutrinoHitCollection>(hitLists);
    if (VP1JobConfigInfo::hasVetoGeometry() || 
+      VP1JobConfigInfo::hasVetoNuGeometry() ||
       VP1JobConfigInfo::hasTriggerGeometry() || 
       VP1JobConfigInfo::hasPreshowerGeometry())
       // std::cout << "Called addHitCollections" << std::endl;
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h
index fa0831b3..52312553 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformHitSystem.h
@@ -45,6 +45,7 @@ public:
 public slots:
 
   void updateVetoElements(bool);
+  void updateVetoNuElements(bool);
   void updateTriggerElements(bool);
   void updatePreshowerElements(bool);
   void updateCalorimeterElements(bool);
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h
index d17e3b60..73535d6a 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/VP1WaveformSystem.h
@@ -45,6 +45,7 @@ public:
 public slots:
 
   void updateVetoElements(bool);
+  void updateVetoNuElements(bool);
   void updateTriggerElements(bool);
   void updatePreshowerElements(bool);
   void updateCalorimeterElements(bool);
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h
index ebb3c4c3..74a2191c 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/VTI12WaveformSystems/WaveformSysController.h
@@ -40,6 +40,7 @@ public:
   ///////////////////////////////////
 
   bool vetoEnabled() const;
+  bool vetoNuEnabled() const;
   bool triggerEnabled() const;
   bool preshowerEnabled() const;
   bool calorimeterEnabled() const;
@@ -52,6 +53,7 @@ public:
   ///////////////////////////////////////
 signals:
   void vetoEnabledChanged(bool);
+  void vetoNuEnabledChanged(bool);
   void triggerEnabledChanged(bool);
   void preshowerEnabledChanged(bool);
   void calorimeterEnabledChanged(bool);
@@ -65,6 +67,7 @@ private:
 
 private slots:
   void possibleChange_vetoEnabled();
+  void possibleChange_vetoNuEnabled();
   void possibleChange_triggerEnabled();
   void possibleChange_preshowerEnabled();
   void possibleChange_calorimeterEnabled();
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx
index 7d0c07c9..c46089cf 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformHitSystem.cxx
@@ -46,6 +46,7 @@ public:
   VP1WaveformHitSystem *theclass;
   WaveformSysController * controller;
   std::vector<QChart*> vetoCharts;
+  std::vector<QChart*> vetoNuCharts;
   std::vector<QChart*> triggerCharts;
   std::vector<QChart*> preshowerCharts;
   std::vector<QChart*> calorimeterCharts;
@@ -82,6 +83,7 @@ QWidget * VP1WaveformHitSystem::buildController()
   m_d->controller = new WaveformSysController(this);
 
   connect(m_d->controller,SIGNAL(vetoEnabledChanged(bool)),this,SLOT(updateVetoElements(bool)));
+  connect(m_d->controller,SIGNAL(vetoNuEnabledChanged(bool)),this,SLOT(updateVetoNuElements(bool)));
   connect(m_d->controller,SIGNAL(triggerEnabledChanged(bool)),this,SLOT(updateTriggerElements(bool)));
   connect(m_d->controller,SIGNAL(preshowerEnabledChanged(bool)),this,SLOT(updatePreshowerElements(bool)));
   connect(m_d->controller,SIGNAL(calorimeterEnabledChanged(bool)),this,SLOT(updateCalorimeterElements(bool)));
@@ -99,6 +101,7 @@ void VP1WaveformHitSystem::buildEventItemCollection(StoreGateSvc* sg, VP1Graphic
   }
 
   m_d->vetoCharts.clear();
+  m_d->vetoNuCharts.clear();
   m_d->triggerCharts.clear();
   m_d->preshowerCharts.clear();
   m_d->calorimeterCharts.clear();
@@ -107,6 +110,7 @@ void VP1WaveformHitSystem::buildEventItemCollection(StoreGateSvc* sg, VP1Graphic
 //   m_d->nCharts = 0;
 
   m_d->createCharts(sg, root, m_d->controller->vetoEnabled(), m_d->vetoCharts, "VetoWaveformHits");
+  m_d->createCharts(sg, root, m_d->controller->vetoNuEnabled(), m_d->vetoNuCharts, "VetoNuWaveformHits");
   m_d->createCharts(sg, root, m_d->controller->triggerEnabled(), m_d->triggerCharts, "TriggerWaveformHits");
   m_d->createCharts(sg, root, m_d->controller->preshowerEnabled(), m_d->preshowerCharts, "PreshowerWaveformHits");
   m_d->createCharts(sg, root, m_d->controller->calorimeterEnabled(), m_d->calorimeterCharts, "CaloWaveformHits");
@@ -264,6 +268,7 @@ QChart* VP1WaveformHitSystem::Imp::createChart(const std::vector<float>& times,
 void VP1WaveformHitSystem::Imp::getVisible()
 {
     visibleCharts.clear();
+    getVisible(vetoNuCharts);
     getVisible(vetoCharts);
     getVisible(triggerCharts);
     getVisible(preshowerCharts);
@@ -356,6 +361,16 @@ void VP1WaveformHitSystem::updateVetoElements(bool enabled)
     m_d->layoutCharts();
 }
 
+void VP1WaveformHitSystem::updateVetoNuElements(bool enabled)
+{
+    for (QChart* c : m_d->vetoNuCharts)
+    {
+        c->setVisible(enabled);
+    }
+    m_d->layoutCharts();
+}
+
+
 void VP1WaveformHitSystem::updateTriggerElements(bool enabled)
 {
     for (QChart* c : m_d->triggerCharts)
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx
index ffe6bd00..172bdebd 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/VP1WaveformSystem.cxx
@@ -45,6 +45,7 @@ public:
   VP1WaveformSystem *theclass;
   WaveformSysController * controller;
   std::vector<QChart*> vetoCharts;
+  std::vector<QChart*> vetoNuCharts;
   std::vector<QChart*> triggerCharts;
   std::vector<QChart*> preshowerCharts;
   std::vector<QChart*> calorimeterCharts;
@@ -80,6 +81,7 @@ QWidget * VP1WaveformSystem::buildController()
   m_d->controller = new WaveformSysController(this);
 
   connect(m_d->controller,SIGNAL(vetoEnabledChanged(bool)),this,SLOT(updateVetoElements(bool)));
+  connect(m_d->controller,SIGNAL(vetoNuEnabledChanged(bool)),this,SLOT(updateVetoNuElements(bool)));
   connect(m_d->controller,SIGNAL(triggerEnabledChanged(bool)),this,SLOT(updateTriggerElements(bool)));
   connect(m_d->controller,SIGNAL(preshowerEnabledChanged(bool)),this,SLOT(updatePreshowerElements(bool)));
   connect(m_d->controller,SIGNAL(calorimeterEnabledChanged(bool)),this,SLOT(updateCalorimeterElements(bool)));
@@ -97,6 +99,7 @@ void VP1WaveformSystem::buildEventItemCollection(StoreGateSvc* sg, VP1GraphicsIt
   }
 
   m_d->vetoCharts.clear();
+  m_d->vetoNuCharts.clear();
   m_d->triggerCharts.clear();
   m_d->preshowerCharts.clear();
   m_d->calorimeterCharts.clear();
@@ -105,6 +108,7 @@ void VP1WaveformSystem::buildEventItemCollection(StoreGateSvc* sg, VP1GraphicsIt
 //   m_d->nCharts = 0;
 
   m_d->createCharts(sg, root, m_d->controller->vetoEnabled(), m_d->vetoCharts, "VetoWaveforms");
+  m_d->createCharts(sg, root, m_d->controller->vetoNuEnabled(), m_d->vetoNuCharts, "VetoNuWaveforms");
   m_d->createCharts(sg, root, m_d->controller->triggerEnabled(), m_d->triggerCharts, "TriggerWaveforms");
   m_d->createCharts(sg, root, m_d->controller->preshowerEnabled(), m_d->preshowerCharts, "PreshowerWaveforms");
   m_d->createCharts(sg, root, m_d->controller->calorimeterEnabled(), m_d->calorimeterCharts, "CaloWaveforms");
@@ -194,6 +198,7 @@ void VP1WaveformSystem::Imp::getVisible()
 {
     visibleCharts.clear();
     getVisible(vetoCharts);
+    getVisible(vetoNuCharts);
     getVisible(triggerCharts);
     getVisible(preshowerCharts);
     getVisible(calorimeterCharts);
@@ -286,6 +291,15 @@ void VP1WaveformSystem::updateVetoElements(bool enabled)
     m_d->layoutCharts();
 }
 
+void VP1WaveformSystem::updateVetoNuElements(bool enabled)
+{
+    for (QChart* c : m_d->vetoNuCharts)
+    {
+        c->setVisible(enabled);
+    }
+    m_d->layoutCharts();
+}
+
 void VP1WaveformSystem::updateTriggerElements(bool enabled)
 {
     for (QChart* c : m_d->triggerCharts)
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx
index 765ce0d4..856fc007 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/WaveformSysController.cxx
@@ -45,6 +45,7 @@ public:
   }
 
   bool last_vetoEnabled;
+  bool last_vetoNuEnabled;
   bool last_triggerEnabled;
   bool last_preshowerEnabled;
   bool last_calorimeterEnabled;
@@ -62,6 +63,9 @@ WaveformSysController::WaveformSysController(IVP1System * sys)
   addUpdateSlot(SLOT(possibleChange_vetoEnabled()));
   connectToLastUpdateSlot(m_d->ui.checkBox_vetoEnabled);
 
+  addUpdateSlot(SLOT(possibleChange_vetoNuEnabled()));
+  connectToLastUpdateSlot(m_d->ui.checkBox_vetoNuEnabled);
+
   addUpdateSlot(SLOT(possibleChange_triggerEnabled()));
   connectToLastUpdateSlot(m_d->ui.checkBox_triggerEnabled);
 
@@ -91,6 +95,11 @@ bool WaveformSysController::vetoEnabled() const
   return m_d->ui.checkBox_vetoEnabled->isChecked();
 }
 
+bool WaveformSysController::vetoNuEnabled() const
+{
+  return m_d->ui.checkBox_vetoNuEnabled->isChecked();
+}
+
 bool WaveformSysController::triggerEnabled() const
 {
   return m_d->ui.checkBox_triggerEnabled->isChecked();
@@ -126,6 +135,7 @@ void WaveformSysController::actualSaveSettings(VP1Serialise&s) const
 {
 
   s.save(m_d->ui.checkBox_vetoEnabled);
+  s.save(m_d->ui.checkBox_vetoNuEnabled);
   s.save(m_d->ui.checkBox_triggerEnabled);
   s.save(m_d->ui.checkBox_preshowerEnabled);
   s.save(m_d->ui.checkBox_calorimeterEnabled);
@@ -143,6 +153,7 @@ void WaveformSysController::actualRestoreSettings(VP1Deserialise& s)
   }
 
   s.restore(m_d->ui.checkBox_vetoEnabled);
+  s.restore(m_d->ui.checkBox_vetoNuEnabled);
   s.restore(m_d->ui.checkBox_triggerEnabled);
   s.restore(m_d->ui.checkBox_preshowerEnabled);
   s.restore(m_d->ui.checkBox_calorimeterEnabled);
@@ -157,6 +168,7 @@ void WaveformSysController::actualRestoreSettings(VP1Deserialise& s)
 #define VP1CONTROLLERCLASSNAME WaveformSysController
 #include "VP1Base/VP1ControllerMacros.h"
 POSSIBLECHANGE_IMP(vetoEnabled)
+POSSIBLECHANGE_IMP(vetoNuEnabled)
 POSSIBLECHANGE_IMP(triggerEnabled)
 POSSIBLECHANGE_IMP(preshowerEnabled)
 POSSIBLECHANGE_IMP(calorimeterEnabled)
diff --git a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui
index cb854170..a9093387 100644
--- a/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui
+++ b/graphics/VTI12/VTI12Systems/VTI12WaveformSystems/src/waveformcontrollerform.ui
@@ -32,6 +32,16 @@
       <number>0</number>
      </property>
      <item row="0" column="0">
+      <widget class="QCheckBox" name="checkBox_vetoNuEnabled">
+       <property name="text">
+        <string>VetoNu</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QCheckBox" name="checkBox_vetoEnabled">
        <property name="text">
         <string>Veto</string>
@@ -41,7 +51,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="0">
       <widget class="QCheckBox" name="checkBox_triggerEnabled">
        <property name="text">
         <string>Trigger</string>
@@ -51,7 +61,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QCheckBox" name="checkBox_preshowerEnabled">
        <property name="text">
         <string>Preshower</string>
@@ -61,7 +71,7 @@
        </property>
       </widget>
      </item>
-     <item row="3" column="0">
+     <item row="4" column="0">
       <widget class="QCheckBox" name="checkBox_calorimeterEnabled">
        <property name="text">
         <string>Calorimeter</string>
@@ -71,7 +81,7 @@
        </property>
       </widget>
      </item>
-     <item row="4" column="0">
+     <item row="5" column="0">
       <widget class="QCheckBox" name="checkBox_clockEnabled">
        <property name="text">
         <string>Clock</string>
@@ -81,7 +91,7 @@
        </property>
       </widget>
      </item>
-     <item row="5" column="0">
+     <item row="6" column="0">
       <widget class="QCheckBox" name="checkBox_testEnabled">
        <property name="text">
         <string>Test</string>
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
index ff521e60..46ae0c23 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
@@ -23,6 +23,7 @@ class StoreGateSvc;
 namespace NeutrinoDD { class EmulsionDetectorManager; }
 namespace TrackerDD { class SCT_DetectorManager; }
 namespace ScintDD { class VetoDetectorManager; }
+namespace ScintDD { class VetoNuDetectorManager; }
 namespace ScintDD { class TriggerDetectorManager; }
 namespace ScintDD { class PreshowerDetectorManager; }
 namespace CaloDD  { class EcalDetectorManager; }
@@ -31,6 +32,7 @@ class FaserDetectorID;
 class EmulsionDetectorID;
 class ScintDetectorID;
 class VetoID;
+class VetoNuID;
 class TriggerID;
 class PreshowerID;
 class FaserSCT_ID;
@@ -51,6 +53,7 @@ public:
   static const NeutrinoDD::EmulsionDetectorManager * emulsionDetMgr();
 
   static const ScintDD::VetoDetectorManager * vetoDetMgr();
+  static const ScintDD::VetoNuDetectorManager * vetoNuDetMgr();
   static const ScintDD::TriggerDetectorManager * triggerDetMgr();
   static const ScintDD::PreshowerDetectorManager * preshowerDetMgr();
 
@@ -66,6 +69,7 @@ public:
    static const EmulsionID * emulsionIDHelper();
 
    static const VetoID * vetoIDHelper();
+   static const VetoNuID * vetoNuIDHelper();
    static const TriggerID * triggerIDHelper();
    static const PreshowerID * preshowerIDHelper();
 
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
index a9091090..97ae89cc 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1JobConfigInfo.h
@@ -35,6 +35,7 @@ public:
   static bool hasEmulsionGeometry();
 
   static bool hasVetoGeometry();
+  static bool hasVetoNuGeometry();
   static bool hasTriggerGeometry();
   static bool hasPreshowerGeometry();
 
diff --git a/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx b/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
index ba2ecb3f..b92e7cf2 100644
--- a/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
+++ b/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
@@ -25,6 +25,7 @@
 #include "NeutrinoReadoutGeometry/EmulsionDetectorManager.h"
 
 #include "ScintReadoutGeometry/VetoDetectorManager.h"
+#include "ScintReadoutGeometry/VetoNuDetectorManager.h"
 #include "ScintReadoutGeometry/TriggerDetectorManager.h"
 #include "ScintReadoutGeometry/PreshowerDetectorManager.h"
 
@@ -37,6 +38,7 @@
 #include "NeutrinoIdentifier/EmulsionID.h"
 
 #include "ScintIdentifier/VetoID.h"
+#include "ScintIdentifier/VetoNuID.h"
 #include "ScintIdentifier/TriggerID.h"
 #include "ScintIdentifier/PreshowerID.h"
 
@@ -58,6 +60,7 @@ public:
   static const NeutrinoDD::EmulsionDetectorManager * m_emulsionDetMgr;
 
   static const ScintDD::VetoDetectorManager * m_vetoDetMgr;
+  static const ScintDD::VetoNuDetectorManager * m_vetoNuDetMgr;
   static const ScintDD::TriggerDetectorManager * m_triggerDetMgr;
   static const ScintDD::PreshowerDetectorManager * m_preshowerDetMgr;
 
@@ -70,6 +73,7 @@ public:
   static const EmulsionID *   m_emulsionIDHelper;
 
   static const VetoID *       m_vetoIDHelper;
+  static const VetoNuID *     m_vetoNuIDHelper;
   static const TriggerID *    m_triggerIDHelper;
   static const PreshowerID *  m_preshowerIDHelper;
 
@@ -84,6 +88,7 @@ const char VP1DetInfo::Imp::m_badInitFlag = ' ';
 const NeutrinoDD::EmulsionDetectorManager * VP1DetInfo::Imp::m_emulsionDetMgr = 0;
 
 const ScintDD::VetoDetectorManager * VP1DetInfo::Imp::m_vetoDetMgr = 0;
+const ScintDD::VetoNuDetectorManager * VP1DetInfo::Imp::m_vetoNuDetMgr = 0;
 const ScintDD::TriggerDetectorManager * VP1DetInfo::Imp::m_triggerDetMgr = 0;
 const ScintDD::PreshowerDetectorManager * VP1DetInfo::Imp::m_preshowerDetMgr = 0;
 
@@ -96,6 +101,7 @@ const FaserDetectorID * VP1DetInfo::Imp::m_faserIDHelper = 0;
 const EmulsionID * VP1DetInfo::Imp::m_emulsionIDHelper = 0;
 
 const VetoID * VP1DetInfo::Imp::m_vetoIDHelper = 0;
+const VetoNuID * VP1DetInfo::Imp::m_vetoNuIDHelper = 0;
 const TriggerID * VP1DetInfo::Imp::m_triggerIDHelper = 0;
 const PreshowerID * VP1DetInfo::Imp::m_preshowerIDHelper = 0;
 
@@ -144,6 +150,7 @@ const T * VP1DetInfo::Imp::cachedRetrieve(const T*& cachedPtr, const char* prefe
 const NeutrinoDD::EmulsionDetectorManager * VP1DetInfo::emulsionDetMgr() { return Imp::cachedRetrieve(Imp::m_emulsionDetMgr,"Emulsion",VP1JobConfigInfo::hasEmulsionGeometry()); }
 
 const ScintDD::VetoDetectorManager * VP1DetInfo::vetoDetMgr() { return Imp::cachedRetrieve(Imp::m_vetoDetMgr,"Veto",VP1JobConfigInfo::hasVetoGeometry()); }
+const ScintDD::VetoNuDetectorManager * VP1DetInfo::vetoNuDetMgr() { return Imp::cachedRetrieve(Imp::m_vetoNuDetMgr,"VetoNu",VP1JobConfigInfo::hasVetoNuGeometry()); }
 const ScintDD::TriggerDetectorManager * VP1DetInfo::triggerDetMgr() { return Imp::cachedRetrieve(Imp::m_triggerDetMgr,"Trigger",VP1JobConfigInfo::hasTriggerGeometry()); }
 const ScintDD::PreshowerDetectorManager * VP1DetInfo::preshowerDetMgr() { return Imp::cachedRetrieve(Imp::m_preshowerDetMgr,"Preshower",VP1JobConfigInfo::hasPreshowerGeometry()); }
 
@@ -156,6 +163,7 @@ const FaserDetectorID * VP1DetInfo::faserIDHelper() { return Imp::cachedRetrieve
 const EmulsionID * VP1DetInfo::emulsionIDHelper() { return Imp::cachedRetrieve(Imp::m_emulsionIDHelper,"EmulsionID",VP1JobConfigInfo::hasEmulsionGeometry()); }
 
 const VetoID * VP1DetInfo::vetoIDHelper() { return Imp::cachedRetrieve(Imp::m_vetoIDHelper,"VetoID",VP1JobConfigInfo::hasVetoGeometry()); }
+const VetoNuID * VP1DetInfo::vetoNuIDHelper() { return Imp::cachedRetrieve(Imp::m_vetoNuIDHelper,"VetoNuID",VP1JobConfigInfo::hasVetoNuGeometry()); }
 const TriggerID * VP1DetInfo::triggerIDHelper() { return Imp::cachedRetrieve(Imp::m_triggerIDHelper,"TriggerID",VP1JobConfigInfo::hasTriggerGeometry()); }
 const PreshowerID * VP1DetInfo::preshowerIDHelper() { return Imp::cachedRetrieve(Imp::m_preshowerIDHelper,"PreshowerID",VP1JobConfigInfo::hasPreshowerGeometry()); }
 
@@ -179,6 +187,8 @@ bool VP1DetInfo::isUnsafe( const Identifier& id ) {
   if (idhelper->is_scint(id)) {
     if (!VP1JobConfigInfo::hasVetoGeometry() && idhelper->is_veto(id))
       return true;
+    if (!VP1JobConfigInfo::hasVetoNuGeometry() && idhelper->is_vetonu(id))
+      return true;
     if (!VP1JobConfigInfo::hasTriggerGeometry() && idhelper->is_trigger(id))
       return true;
     if (!VP1JobConfigInfo::hasPreshowerGeometry() && idhelper->is_preshower(id))
diff --git a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
index 03a305c6..f5723561 100644
--- a/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
+++ b/graphics/VTI12/VTI12Utils/src/VP1JobConfigInfo.cxx
@@ -37,6 +37,7 @@ public:
   static bool hasGeoModelExperiment;
   static bool hasEmulsionGeometry;
   static bool hasVetoGeometry;
+  static bool hasVetoNuGeometry;
   static bool hasTriggerGeometry;
   static bool hasPreshowerGeometry;
   static bool hasSCTGeometry;
@@ -52,6 +53,7 @@ bool VP1JobConfigInfo::Imp::initialised = false;
 bool VP1JobConfigInfo::Imp::hasGeoModelExperiment = false;
 bool VP1JobConfigInfo::Imp::hasEmulsionGeometry = false;
 bool VP1JobConfigInfo::Imp::hasVetoGeometry = false;
+bool VP1JobConfigInfo::Imp::hasVetoNuGeometry = false;
 bool VP1JobConfigInfo::Imp::hasTriggerGeometry = false;
 bool VP1JobConfigInfo::Imp::hasPreshowerGeometry = false;
 bool VP1JobConfigInfo::Imp::hasSCTGeometry = false;
@@ -64,6 +66,7 @@ void VP1JobConfigInfo::Imp::turnOffAll()
   hasGeoModelExperiment = false;
   hasEmulsionGeometry = false;
   hasVetoGeometry = false;
+  hasVetoNuGeometry = false;
   hasTriggerGeometry = false;
   hasPreshowerGeometry = false;
   hasSCTGeometry = false;
@@ -89,6 +92,7 @@ void VP1JobConfigInfo::Imp::ensureInit()
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasGeoModelExperiment = "+QString(hasGeoModelExperiment?"On":"Off"));
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasEmulsionGeometry = "+QString(hasEmulsionGeometry?"On":"Off"));
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasVetoGeometry = "+QString(hasVetoGeometry?"On":"Off"));
+    VP1Msg::messageVerbose("VTI12JobConfigInfo => hasVetoNuGeometry = "+QString(hasVetoNuGeometry?"On":"Off"));
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasTriggerGeometry = "+QString(hasTriggerGeometry?"On":"Off"));
     VP1Msg::messageVerbose("VTI12JobConfigInfo => hasPreshowerGeometry = "+QString(hasPreshowerGeometry?"On":"Off"));
 
@@ -103,6 +107,7 @@ void VP1JobConfigInfo::Imp::ensureInit()
 bool VP1JobConfigInfo::hasGeoModelExperiment() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasGeoModelExperiment; }
 bool VP1JobConfigInfo::hasEmulsionGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasEmulsionGeometry; }
 bool VP1JobConfigInfo::hasVetoGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasVetoGeometry; }
+bool VP1JobConfigInfo::hasVetoNuGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasVetoNuGeometry; }
 bool VP1JobConfigInfo::hasTriggerGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasTriggerGeometry; }
 bool VP1JobConfigInfo::hasPreshowerGeometry() { if (!Imp::initialised) Imp::ensureInit(); return Imp::hasPreshowerGeometry; }
 
@@ -159,6 +164,7 @@ bool VP1JobConfigInfo::Imp::actualInit( StoreGateSvc* detStore )
     VP1Msg::message( QString { name.c_str() } );
     if ( !hasEmulsionGeometry && name=="Emulsion") hasEmulsionGeometry = true;
     if ( !hasVetoGeometry && name=="Veto") hasVetoGeometry = true;
+    if ( !hasVetoNuGeometry && name=="VetoNu") hasVetoNuGeometry = true;
     if ( !hasTriggerGeometry && name=="Trigger") hasTriggerGeometry = true;
     if ( !hasPreshowerGeometry && name=="Preshower") hasPreshowerGeometry = true;
     if ( !hasSCTGeometry && name=="SCT") hasSCTGeometry = true;
-- 
GitLab