From 1c3c59d8c34e3170a78207403932eb9693a3faba Mon Sep 17 00:00:00 2001
From: myliu <201916234@mail.sdu.edu.cn>
Date: Fri, 18 Dec 2020 15:07:41 +0800
Subject: [PATCH] Put in the field wire

---
 .../src/driftchamber/DriftChamber.cpp         | 84 +++++++++++++------
 1 file changed, 59 insertions(+), 25 deletions(-)

diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
index 2575d679..178a39ce 100644
--- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
@@ -16,6 +16,9 @@
 #include "DDSegmentation/Segmentation.h"
 #include "DetSegmentation/GridDriftChamber.h"
 
+#include "TFile.h"
+#include "TTree.h"
+
 using namespace dd4hep;
 using namespace dd4hep::detail;
 using namespace dd4hep::rec ;
@@ -94,7 +97,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
 
    // - wire
     dd4hep::Volume module_vol;
-//    dd4hep::Volume Module_vol;
+    dd4hep::Volume Module_vol;
     for(xml_coll_t c(x_det,_U(module)); c; ++c) {
       xml_comp_t x_module = c;
       double  module_rmin = x_module.rmin();
@@ -103,30 +106,31 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
       dd4hep::Tube module_solid(module_rmin,module_rmax,chamber_length*0.5);
       if(x_module.id()==0) {
          module_vol = dd4hep::Volume(module_name,module_solid,det_mat);
-      }// else {
-//         Module_vol = dd4hep::Volume(module_name,module_solid,det_mat);
-//      }
-
-         for(xml_coll_t l(x_module,_U(tubs)); l; ++l) {
-            xml_comp_t x_tube =l;
-            double tube_rmin = x_tube.rmin();
-            double tube_rmax = x_tube.rmax();
-            std::string tube_name = x_tube.nameStr();
-            std::string wire_name= module_name + tube_name;
-            dd4hep::Material tube_mat = theDetector.material(x_tube.materialStr());
-            dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_length*0.5);
-            dd4hep::Volume wire_vol(wire_name,wire_solid,tube_mat);
-            dd4hep::Transform3D transform_wire(dd4hep::Rotation3D(),dd4hep::Position(0.,0.,0.));
-            dd4hep::PlacedVolume wire_phy;
-            if(x_module.id()==0) {
-               wire_phy = module_vol.placeVolume(wire_vol,transform_wire);
-            }// else {
-//               wire_phy = Module_vol.placeVolume(wire_vol,transform_wire);
-//            }
+         module_vol.setVisAttributes(theDetector.visAttributes(x_module.visStr()));
+      } else {
+         Module_vol = dd4hep::Volume(module_name,module_solid,det_mat);
+         Module_vol.setVisAttributes(theDetector.visAttributes(x_module.visStr()));
+      }
+
+      for(xml_coll_t l(x_module,_U(tubs)); l; ++l) {
+         xml_comp_t x_tube =l;
+         double tube_rmin = x_tube.rmin();
+         double tube_rmax = x_tube.rmax();
+         std::string tube_name = x_tube.nameStr();
+         std::string wire_name= module_name + tube_name;
+         dd4hep::Material tube_mat = theDetector.material(x_tube.materialStr());
+         dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_length*0.5);
+         dd4hep::Volume wire_vol(wire_name,wire_solid,tube_mat);
+         dd4hep::Transform3D transform_wire(dd4hep::Rotation3D(),dd4hep::Position(0.,0.,0.));
+         dd4hep::PlacedVolume wire_phy;
+         if(x_module.id()==0) {
+            wire_phy = module_vol.placeVolume(wire_vol,transform_wire);
+         } else {
+            wire_phy = Module_vol.placeVolume(wire_vol,transform_wire);
          }
+      }
   }
 
-
     //Initialize the segmentation
     dd4hep::Readout readout = sd.readout();
     dd4hep::Segmentation geomseg = readout.segmentation();
@@ -171,13 +175,43 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         layer_vol.setAttributes(theDetector,x_det.regionStr(),x_det.limitsStr(),x_det.visStr());
 
         // - wire vol
-//     if(layer_id == 1) {
+        //phi <-------------------> -phi
+        //    |       F3        F4|   Only on the outermost layer
+        //    |                   |
+        //    |       S         F2|
+        //    |                   |
+        //    |       F0        F1|
+        //    --------------------
+//     if(layer_id == 66) {
         for(int icell=0; icell< numWire; icell++) {
             double wire_phi = (icell+0.5)*layer_Phi + offset;
+            // - signal wire
             dd4hep::Transform3D transform_module(dd4hep::Rotation3D(),dd4hep::Position(rmid*std::cos(wire_phi),rmid*std::sin(wire_phi),0.));
-//            dd4hep::Transform3D transform_Module(dd4hep::Rotation3D(),dd4hep::Position((rmid+chamber_layer_width*0.5)*std::cos(wire_phi),(rmid+chamber_layer_width*0.5)*std::sin(wire_phi),0.));
             dd4hep::PlacedVolume module_phy = layer_vol.placeVolume(module_vol,transform_module);
-//            dd4hep::PlacedVolume Module_phy = layer_vol.placeVolume(Module_vol,transform_Module);
+           // - Field wire
+            dd4hep::PlacedVolume Module_phy;
+           // - Field wire 0
+            dd4hep::Position tr3D_0 = Position((rmid-chamber_layer_width*0.5)*std::cos(wire_phi),(rmid-chamber_layer_width*0.5)*std::sin(wire_phi),0.);
+            dd4hep::Transform3D transform_Module_0(dd4hep::Rotation3D(),tr3D_0);
+            Module_phy = layer_vol.placeVolume(Module_vol,transform_Module_0);
+            // - Field wire 1
+            dd4hep::Position tr3D_1 = Position((rmid-chamber_layer_width*0.5)*std::cos(wire_phi+layer_Phi*0.5),(rmid-chamber_layer_width*0.5)*std::sin(wire_phi+layer_Phi*0.5),0.);
+            dd4hep::Transform3D transform_Module_1(dd4hep::Rotation3D(),tr3D_1);
+            Module_phy = layer_vol.placeVolume(Module_vol,transform_Module_1);
+            // - Field wire 2
+            dd4hep::Position tr3D_2 = Position(rmid*std::cos(wire_phi+layer_Phi*0.5),rmid*std::sin(wire_phi+layer_Phi*0.5),0.);
+            dd4hep::Transform3D transform_Module_2(dd4hep::Rotation3D(),tr3D_2);
+            Module_phy = layer_vol.placeVolume(Module_vol,transform_Module_2);
+            if(layer_id==66 || layer_id==129) {
+               // - Field wire 3
+               dd4hep::Position tr3D_3 = Position((rmid+chamber_layer_width*0.5)*std::cos(wire_phi),(rmid+chamber_layer_width*0.5)*std::sin(wire_phi),0.);
+               dd4hep::Transform3D transform_Module_3(dd4hep::Rotation3D(),tr3D_3);
+               Module_phy = layer_vol.placeVolume(Module_vol,transform_Module_3);
+               // - Field wire 4
+               dd4hep::Position tr3D_4 = Position((rmid+chamber_layer_width*0.5)*std::cos(wire_phi+layer_Phi*0.5),(rmid+chamber_layer_width*0.5)*std::sin(wire_phi+layer_Phi*0.5),0.);
+               dd4hep::Transform3D transform_Module_4(dd4hep::Rotation3D(),tr3D_4);
+               Module_phy = layer_vol.placeVolume(Module_vol,transform_Module_4);
+            }
         }
 //  }
 
-- 
GitLab