From be3892d0851de24fe5f0af85b45089b84c9772f2 Mon Sep 17 00:00:00 2001
From: Menglin Xu <mexu@cern.ch>
Date: Tue, 25 Feb 2025 11:22:33 +0100
Subject: [PATCH 1/4] use explicit int type instead of bool type for debugging

---
 Detector/UP/src/UP_geo.cpp | 39 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/Detector/UP/src/UP_geo.cpp b/Detector/UP/src/UP_geo.cpp
index efcb2886d..d5ce925a3 100644
--- a/Detector/UP/src/UP_geo.cpp
+++ b/Detector/UP/src/UP_geo.cpp
@@ -75,41 +75,42 @@ namespace {
       for ( xml_coll_t i( x_dbg, _U( item ) ); i; ++i ) {
         xml_comp_t  c( i );
         std::string n = c.nameStr();
-        if ( n == "Build_Sides" )
-          m_build_sides = c.attr<bool>( _U( value ) );
+        if ( n == "debug" )
+          debug = c.attr<int>( _U( value ) ) !=0;
+        else if ( n == "Build_Sides" )
+          m_build_sides = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Aside" )
-          m_build_aside = c.attr<bool>( _U( value ) );
+          m_build_aside = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside_UPaX" )
-          m_build_aside_upax = c.attr<bool>( _U( value ) );
+          m_build_aside_upax = c.attr<int>( _U( value ) ) !=0;
         else if ( n == "Build_Aside_UPaU" )
-          m_build_aside_upau = c.attr<bool>( _U( value ) );
+          m_build_aside_upau = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Aside_UPbV" )
-          m_build_aside_upbv = c.attr<bool>( _U( value ) );
+          m_build_aside_upbv = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Aside_UPbX" )
-          m_build_aside_upbx = c.attr<bool>( _U( value ) );
+          m_build_aside_upbx = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Cside" )
-          m_build_cside = c.attr<bool>( _U( value ) );
+          m_build_cside = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Cside_UPaX" )
-          m_build_cside_upax = c.attr<bool>( _U( value ) );
+          m_build_cside_upax = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Cside_UPaU" )
-          m_build_cside_upau = c.attr<bool>( _U( value ) );
+          m_build_cside_upau = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Cside_UPbV" )
-          m_build_cside_upbv = c.attr<bool>( _U( value ) );
+          m_build_cside_upbv = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Cside_UPbX" )
-          m_build_cside_upbx = c.attr<bool>( _U( value ) );
+          m_build_cside_upbx = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Frame" )
-          m_build_frame = c.attr<bool>( _U( value ) );
+          m_build_frame = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Jacket" )
-          m_build_jacket = c.attr<bool>( _U( value ) );
+          m_build_jacket = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_PipeHeater" )
-          m_build_pipeheater = c.attr<bool>( _U( value ) );
+          m_build_pipeheater = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_Box" )
-          m_build_box = c.attr<bool>( _U( value ) );
+          m_build_box = c.attr<int>( _U( value ) )!=0;
         else if ( n == "Build_BoxPlug" )
-          m_build_boxplug = c.attr<bool>( _U( value ) );
+          m_build_boxplug = c.attr<int>( _U( value ) )!=0;
         else if ( n == "select_volume" )
           select_volume = c.attr<std::string>( _U( value ) );
-        else if ( n == "debug" ) { debug = c.attr<bool>( _U( value ) ); }
       }
     }
   }
@@ -128,12 +129,10 @@ namespace {
     deSensor = DetElement( de_onesector, "sensor0", 0 );
     deSensor.setPlacement( pv );
 
-    // de_onegroup     = DetElement( "Group" );
     lvonechip = volume( "lvOnePixelGroup" );
     pv        = lvonechip.placeVolume(
         lvSector, Position( 0, _toDouble( "-UPPixelLong/2+UPPixelBufferLong+UPPixelSideLong+UPPixelTrueLong/2" ), 0 ) );
     pv->SetName( "pvSectorOnePixelGroup" );
-    // pv.addPhysVolID( "sector", 0 );
     deSector = de_onesector.clone( "Sector0", 0 );
     deSector.setPlacement( pv );
 
-- 
GitLab


From adfe841600692967580a8b0c7776563194b5eb01 Mon Sep 17 00:00:00 2001
From: Menglin Xu <mexu@cern.ch>
Date: Wed, 26 Feb 2025 10:18:05 +0100
Subject: [PATCH 2/4] polish LvGroup placeVolume part

---
 Detector/UP/src/UP_geo.cpp | 99 ++++++--------------------------------
 1 file changed, 15 insertions(+), 84 deletions(-)

diff --git a/Detector/UP/src/UP_geo.cpp b/Detector/UP/src/UP_geo.cpp
index d5ce925a3..eb6ba148c 100644
--- a/Detector/UP/src/UP_geo.cpp
+++ b/Detector/UP/src/UP_geo.cpp
@@ -389,93 +389,24 @@ namespace {
     deGroup           = DetElement( de_pixel_module_g, "PixelGroupB", 0 );
     lvGroup           = volume( "lvPixelGroupB" );
 
-    pv = lvGroup.placeVolume(
-        lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                        dd4hep::Position( _toDouble( "SetMGpvChipA1X" ), _toDouble( "SetMGpvChipA1Y" ),
-                                                          _toDouble( "UPSensorSiZ" ) ) ) );
-    pv->SetName( "pvChipA1" );
-    pv.addPhysVolID( "chip", 0 );
-    deSector = de_onesector.clone( "chip0", 0 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( "SetMGpvChipA2X" ), _toDouble( "SetMGpvChipA2Y" ),
-                                                   _toDouble( "UPSensorSiZ" ) ) );
-    pv->SetName( "pvChipA2" );
-    pv.addPhysVolID( "chip", 1 );
-    deSector = de_onesector.clone( "chip01", 1 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume(
-        lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                        dd4hep::Position( _toDouble( "SetMGpvChipA3X" ), _toDouble( "SetMGpvChipA3Y" ),
-                                                          _toDouble( "UPSensorSiZ" ) ) ) );
-    pv->SetName( "pvChipA3" );
-    pv.addPhysVolID( "chip", 2 );
-    deSector = de_onesector.clone( "chip02", 2 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( "SetMGpvChipA4X" ), _toDouble( "SetMGpvChipA4Y" ),
-                                                   _toDouble( "UPSensorSiZ" ) ) );
-    pv->SetName( "pvChipA4" );
-    pv.addPhysVolID( "chip", 3 );
-    deSector = de_onesector.clone( "chip03", 3 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume(
-        lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                        dd4hep::Position( _toDouble( "SetMGpvChipA5X" ), _toDouble( "SetMGpvChipA5Y" ),
-                                                          _toDouble( "UPSensorSiZ" ) ) ) );
-    pv->SetName( "pvChipA5" );
-    pv.addPhysVolID( "chip", 4 );
-    deSector = de_onesector.clone( "chip04", 4 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( "SetMGpvChipA6X" ), _toDouble( "SetMGpvChipA6Y" ),
-                                                   _toDouble( "UPSensorSiZ" ) ) );
-    pv->SetName( "pvChipA6" );
-    pv.addPhysVolID( "chip", 5 );
-    deSector = de_onesector.clone( "chip05", 5 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume(
-        lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ), dd4hep::Position( 0, _toDouble( "SetMGpvChipA7Y" ),
-                                                                                     _toDouble( "UPSensorSiZ" ) ) ) );
-    pv->SetName( "pvChipA7" );
-    pv.addPhysVolID( "chip", 6 );
-    deSector = de_onesector.clone( "chip06", 6 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume( lvonechip, Position( 0, _toDouble( "SetMGpvChipA8Y" ), _toDouble( "UPSensorSiZ" ) ) );
-    pv->SetName( "pvChipA8" );
-    pv.addPhysVolID( "chip", 7 );
-    deSector = de_onesector.clone( "chip07", 7 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
-
-    pv = lvGroup.placeVolume(
+    // Loop through chips
+    for (int i = 1; i < 11; i++) {
+      if (i%2==0){
+         pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( _toString(i,"SetMGpvChipA%02dX").c_str() ), _toDouble( _toString(i,"SetMpvChipA%02dY").c_str()),
+                                                   _toDouble( "UPSensorSiZ" ) ) );}
+                                                   else{
+      pv = lvGroup.placeVolume(
         lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                        dd4hep::Position( _toDouble( "SetMGpvChipA9X" ), _toDouble( "SetMGpvChipA9Y" ),
+                                        dd4hep::Position( _toDouble( _toString(i,"SetMGpvChipA%02dX").c_str()), _toDouble(_toString(i,"SetMpvChipA%02dY").c_str()),
                                                           _toDouble( "UPSensorSiZ" ) ) ) );
-    pv->SetName( "pvChipA9" );
-    pv.addPhysVolID( "chip", 8 );
-    deSector = de_onesector.clone( "chip08", 8 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
+      }
+      pv->SetName(_toString(i, "pvChipA%02d" ).c_str());
+      pv.addPhysVolID( "chip", i-1 );
+      deSector = de_onesector.clone( _toString(i-1,"chip%02d"), 0 );
+      deSector.setPlacement( pv );
+      deGroup.add( deSector );
+    }
 
-    pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( "SetMGpvChipA10X" ), _toDouble( "SetMGpvChipA10Y" ),
-                                                   _toDouble( "UPSensorSiZ" ) ) );
-    pv->SetName( "pvChipA10" );
-    pv.addPhysVolID( "chip", 9 );
-    deSector = de_onesector.clone( "chip09", 9 );
-    deSector.setPlacement( pv );
-    deGroup.add( deSector );
 
     lvModule = volume( "lvPixelModuleG" );
     pv       = lvModule.placeVolume( lvGroup, Position( 0, _toDouble( "UPPixelYELL" ), _toDouble( "UPPixelZ" ) ) );
-- 
GitLab


From bb8042db901419cbf63b6adc606ca2bc0f698e07 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Thu, 27 Feb 2025 09:35:47 +0000
Subject: [PATCH 3/4] Fixed formatting

patch generated by https://gitlab.cern.ch/lhcb/Detector/-/jobs/52023571
---
 Detector/UP/src/UP_geo.cpp | 59 +++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 29 deletions(-)

diff --git a/Detector/UP/src/UP_geo.cpp b/Detector/UP/src/UP_geo.cpp
index eb6ba148c..ec1097ac0 100644
--- a/Detector/UP/src/UP_geo.cpp
+++ b/Detector/UP/src/UP_geo.cpp
@@ -76,39 +76,39 @@ namespace {
         xml_comp_t  c( i );
         std::string n = c.nameStr();
         if ( n == "debug" )
-          debug = c.attr<int>( _U( value ) ) !=0;
+          debug = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Sides" )
-          m_build_sides = c.attr<int>( _U( value ) )!=0;
+          m_build_sides = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside" )
           m_build_aside = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside_UPaX" )
-          m_build_aside_upax = c.attr<int>( _U( value ) ) !=0;
+          m_build_aside_upax = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside_UPaU" )
-          m_build_aside_upau = c.attr<int>( _U( value ) )!=0;
+          m_build_aside_upau = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside_UPbV" )
-          m_build_aside_upbv = c.attr<int>( _U( value ) )!=0;
+          m_build_aside_upbv = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside_UPbX" )
-          m_build_aside_upbx = c.attr<int>( _U( value ) )!=0;
+          m_build_aside_upbx = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Cside" )
-          m_build_cside = c.attr<int>( _U( value ) )!=0;
+          m_build_cside = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Cside_UPaX" )
-          m_build_cside_upax = c.attr<int>( _U( value ) )!=0;
+          m_build_cside_upax = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Cside_UPaU" )
-          m_build_cside_upau = c.attr<int>( _U( value ) )!=0;
+          m_build_cside_upau = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Cside_UPbV" )
-          m_build_cside_upbv = c.attr<int>( _U( value ) )!=0;
+          m_build_cside_upbv = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Cside_UPbX" )
-          m_build_cside_upbx = c.attr<int>( _U( value ) )!=0;
+          m_build_cside_upbx = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Frame" )
-          m_build_frame = c.attr<int>( _U( value ) )!=0;
+          m_build_frame = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Jacket" )
-          m_build_jacket = c.attr<int>( _U( value ) )!=0;
+          m_build_jacket = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_PipeHeater" )
-          m_build_pipeheater = c.attr<int>( _U( value ) )!=0;
+          m_build_pipeheater = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Box" )
-          m_build_box = c.attr<int>( _U( value ) )!=0;
+          m_build_box = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_BoxPlug" )
-          m_build_boxplug = c.attr<int>( _U( value ) )!=0;
+          m_build_boxplug = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "select_volume" )
           select_volume = c.attr<std::string>( _U( value ) );
       }
@@ -390,24 +390,25 @@ namespace {
     lvGroup           = volume( "lvPixelGroupB" );
 
     // Loop through chips
-    for (int i = 1; i < 11; i++) {
-      if (i%2==0){
-         pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( _toString(i,"SetMGpvChipA%02dX").c_str() ), _toDouble( _toString(i,"SetMpvChipA%02dY").c_str()),
-                                                   _toDouble( "UPSensorSiZ" ) ) );}
-                                                   else{
-      pv = lvGroup.placeVolume(
-        lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                        dd4hep::Position( _toDouble( _toString(i,"SetMGpvChipA%02dX").c_str()), _toDouble(_toString(i,"SetMpvChipA%02dY").c_str()),
-                                                          _toDouble( "UPSensorSiZ" ) ) ) );
+    for ( int i = 1; i < 11; i++ ) {
+      if ( i % 2 == 0 ) {
+        pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( _toString( i, "SetMGpvChipA%02dX" ).c_str() ),
+                                                       _toDouble( _toString( i, "SetMpvChipA%02dY" ).c_str() ),
+                                                       _toDouble( "UPSensorSiZ" ) ) );
+      } else {
+        pv = lvGroup.placeVolume(
+            lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
+                                            dd4hep::Position( _toDouble( _toString( i, "SetMGpvChipA%02dX" ).c_str() ),
+                                                              _toDouble( _toString( i, "SetMpvChipA%02dY" ).c_str() ),
+                                                              _toDouble( "UPSensorSiZ" ) ) ) );
       }
-      pv->SetName(_toString(i, "pvChipA%02d" ).c_str());
-      pv.addPhysVolID( "chip", i-1 );
-      deSector = de_onesector.clone( _toString(i-1,"chip%02d"), 0 );
+      pv->SetName( _toString( i, "pvChipA%02d" ).c_str() );
+      pv.addPhysVolID( "chip", i - 1 );
+      deSector = de_onesector.clone( _toString( i - 1, "chip%02d" ), 0 );
       deSector.setPlacement( pv );
       deGroup.add( deSector );
     }
 
-
     lvModule = volume( "lvPixelModuleG" );
     pv       = lvModule.placeVolume( lvGroup, Position( 0, _toDouble( "UPPixelYELL" ), _toDouble( "UPPixelZ" ) ) );
     pv->SetName( "pvPixelModuleG" );
-- 
GitLab


From 4d32f5b7851d49dcd0456d4f4038d7d57252451a Mon Sep 17 00:00:00 2001
From: Menglin Xu <mexu@cern.ch>
Date: Thu, 27 Feb 2025 11:36:45 +0100
Subject: [PATCH 4/4] fix the failed pip as SetMGpvChipA7X and SetMGpvChipA8X
 is not defind

---
 Detector/UP/src/UP_geo.cpp                       | 16 +++++++---------
 .../UP/branch-run5-baseline/parameters.xml       |  2 ++
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/Detector/UP/src/UP_geo.cpp b/Detector/UP/src/UP_geo.cpp
index ec1097ac0..a99afffcc 100644
--- a/Detector/UP/src/UP_geo.cpp
+++ b/Detector/UP/src/UP_geo.cpp
@@ -75,9 +75,7 @@ namespace {
       for ( xml_coll_t i( x_dbg, _U( item ) ); i; ++i ) {
         xml_comp_t  c( i );
         std::string n = c.nameStr();
-        if ( n == "debug" )
-          debug = c.attr<int>( _U( value ) ) != 0;
-        else if ( n == "Build_Sides" )
+        if ( n == "Build_Sides" )
           m_build_sides = c.attr<int>( _U( value ) ) != 0;
         else if ( n == "Build_Aside" )
           m_build_aside = c.attr<int>( _U( value ) ) != 0;
@@ -392,19 +390,19 @@ namespace {
     // Loop through chips
     for ( int i = 1; i < 11; i++ ) {
       if ( i % 2 == 0 ) {
-        pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( _toString( i, "SetMGpvChipA%02dX" ).c_str() ),
-                                                       _toDouble( _toString( i, "SetMpvChipA%02dY" ).c_str() ),
+        pv = lvGroup.placeVolume( lvonechip, Position( _toDouble( _toString( i, "SetMGpvChipA%dX" ).c_str() ),
+                                                       _toDouble( _toString( i, "SetMGpvChipA%dY" ).c_str() ),
                                                        _toDouble( "UPSensorSiZ" ) ) );
       } else {
         pv = lvGroup.placeVolume(
             lvonechip, dd4hep::Transform3D( RotationZYX( M_PI, 0, 0 ),
-                                            dd4hep::Position( _toDouble( _toString( i, "SetMGpvChipA%02dX" ).c_str() ),
-                                                              _toDouble( _toString( i, "SetMpvChipA%02dY" ).c_str() ),
+                                            dd4hep::Position( _toDouble( _toString( i, "SetMGpvChipA%dX" ).c_str() ),
+                                                              _toDouble( _toString( i, "SetMGpvChipA%dY" ).c_str() ),
                                                               _toDouble( "UPSensorSiZ" ) ) ) );
       }
-      pv->SetName( _toString( i, "pvChipA%02d" ).c_str() );
+      pv->SetName( _toString( i, "pvChipA%d" ).c_str() );
       pv.addPhysVolID( "chip", i - 1 );
-      deSector = de_onesector.clone( _toString( i - 1, "chip%02d" ), 0 );
+      deSector = de_onesector.clone( _toString( i - 1, "chip%d" ), 0 );
       deSector.setPlacement( pv );
       deGroup.add( deSector );
     }
diff --git a/compact/components/UP/branch-run5-baseline/parameters.xml b/compact/components/UP/branch-run5-baseline/parameters.xml
index cbf649825..14ddb20f2 100644
--- a/compact/components/UP/branch-run5-baseline/parameters.xml
+++ b/compact/components/UP/branch-run5-baseline/parameters.xml
@@ -362,7 +362,9 @@
                 <constant name="SetMGpvChipA5Y" value="UPPixelLong/2+UPPixelGap/2" />
                 <constant name="SetMGpvChipA6X" value="-UPPixelWide-UPPixelGap" />
                 <constant name="SetMGpvChipA6Y" value="-(UPPixelLong/2+UPPixelGap/2)" />
+                <constant name="SetMGpvChipA7X" value="0" />
                 <constant name="SetMGpvChipA7Y" value="UPPixelLong/2+UPPixelGap/2" />
+                <constant name="SetMGpvChipA8X" value="0" />
                 <constant name="SetMGpvChipA8Y" value="-(UPPixelLong/2+UPPixelGap/2)" />
                 <constant name="SetMGpvChipA9X" value="UPPixelWide+UPPixelGap" />
                 <constant name="SetMGpvChipA9Y" value="UPPixelLong/2+UPPixelGap/2" />
-- 
GitLab