Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • EIC/detectors/athena
  • zwzhao/athena
  • FernandoTA/athena
  • palspeic/athena
4 results
Show changes
Commits on Source (4)
......@@ -172,7 +172,7 @@
<documentation level="10">
### PID detectors
</documentation>
<include ref="compact/pid_config_acadia.xml" />
<!--include ref="compact/pid_config_acadia.xml" /-->
<documentation level="10">
## Central calorimetry
......
......@@ -203,6 +203,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
inner_r="TrackerBarrelInner_rmin1-TrackerBarrelLayer_rOffset"
outer_r="TrackerBarrelInner_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelInner_thickness-1.0*mm"
z_length="TrackerBarrelInner_length1"/>
<layer_material surface="outer" binning="binPhi,binZ" bins0="100*TrackerBarrelInner_NModules1" bins1="100" />
<rphi_layout phi_tilt="TrackerBarrel_StaveTiltAngle" nphi="TrackerBarrelInner_NModules1" phi0="0.0" rc="TrackerBarrelInner_rmin1" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -211,6 +212,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
inner_r="TrackerBarrelInner_rmin2-TrackerBarrelLayer_rOffset"
outer_r="TrackerBarrelInner_rmin2-TrackerBarrelLayer_rOffset + TrackerBarrelInner_thickness"
z_length="TrackerBarrelInner_length2"/>
<layer_material surface="outer" binning="binPhi,binZ" bins0="100*TrackerBarrelInner_NModules2" bins1="100" />
<rphi_layout phi_tilt="TrackerBarrel_StaveTiltAngle" nphi="TrackerBarrelInner_NModules2" phi0="0.0" rc="TrackerBarrelInner_rmin2" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -249,6 +251,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapInner_rmax1"
length="TrackerEndcapInnerLayer_thickness"
zstart="TrackerEndcapInner_zmin" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0"
zstart="0.0"
......@@ -289,6 +292,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapInner_rmax1"
length="TrackerEndcapInnerLayer_thickness"
zstart="TrackerEndcapInner_zmin" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapInner_rmin1+TrackerEndcapInnerMod1_y/2.0"
zstart="0"
......@@ -350,6 +354,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
inner_r="TrackerBarrelOuter_rmin1-TrackerBarrelLayer_rOffset"
outer_r="TrackerBarrelOuter_rmin1-TrackerBarrelLayer_rOffset + TrackerBarrelOuter_thickness-1.0*mm"
z_length="TrackerBarrelOuter_length1"/>
<layer_material surface="outer" binning="binPhi,binZ" bins0="100*TrackerBarrelOuter_NModules1" bins1="100" />
<rphi_layout phi_tilt="TrackerBarrel_StaveTiltAngle" nphi="TrackerBarrelOuter_NModules1" phi0="0.0" rc="TrackerBarrelOuter_rmin1" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -358,6 +363,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
inner_r="TrackerBarrelOuter_rmin2-TrackerBarrelLayer_rOffset"
outer_r="TrackerBarrelOuter_rmin2-TrackerBarrelLayer_rOffset + TrackerBarrelOuter_thickness"
z_length="TrackerBarrelOuter_length2"/>
<layer_material surface="outer" binning="binPhi,binZ" bins0="100*TrackerBarrelOuter_NModules2" bins1="100" />
<rphi_layout phi_tilt="TrackerBarrel_StaveTiltAngle" nphi="TrackerBarrelOuter_NModules2" phi0="0.0" rc="TrackerBarrelOuter_rmin2" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -415,6 +421,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax1"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin1" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0"
zstart="0.0*mm"
......@@ -426,6 +433,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax2"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin2" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin2+TrackerEndcapOuterMod2_y/2.0"
zstart="0.0*mm"
......@@ -437,6 +445,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax3"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin3" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin3+TrackerEndcapOuterMod3_y/2.0"
zstart="0.0*mm"
......@@ -498,6 +507,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax1"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin1" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin1+TrackerEndcapOuterMod1_y/2.0"
zstart="0.0*mm"
......@@ -509,6 +519,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax2"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin2" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin2+TrackerEndcapOuterMod2_y/2.0"
zstart="0.0*mm"
......@@ -520,6 +531,7 @@ total X0 0.24% per disk layer (4 sectors per disk):
rmax="TrackerEndcapOuter_rmax3"
length="TrackerEndcapOuterLayer_thickness"
zstart="TrackerEndcapOuter_zmin3" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*TrackerEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="TrackerEndcapOuter_rmin3+TrackerEndcapOuterMod3_y/2.0"
zstart="0.0*mm"
......
......@@ -330,8 +330,8 @@ Examples:
<constant name="VertexTrackerEndcapP_rmax" value="VertexTrackerBarrel_rmax"/>
<constant name="VertexTrackerEndcapN_rmax" value="VertexTrackerBarrel_rmax"/>
<constant name="VertexTrackerEndcapP_rmin" value="Beampipe_rmax + 5.0*mm"/>
<constant name="VertexTrackerEndcapN_rmin" value="Beampipe_rmax + 5.0*mm"/>
<constant name="VertexTrackerEndcapP_rmin" value="Beampipe_rmax + 1.0*mm"/>
<constant name="VertexTrackerEndcapN_rmin" value="Beampipe_rmax + 1.0*mm"/>
<constant name="VertexTrackerEndcapP_zmax" value="300.0*mm"/>
<constant name="VertexTrackerEndcapN_zmax" value="300.0*mm"/>
......@@ -373,8 +373,8 @@ Examples:
<constant name="BackwardPID_rmax" value="TrackerBarrel_rmax"/>
<comment> Note: PID has space for DIRC, ExtraSpace has room for other detectors past the PID</comment>
<constant name="BarrelPIDThickness" value="10.0 * cm"/>
<constant name="BarrelExtraSpaceThickness" value="7.0 * cm"/>
<constant name="BarrelPIDThickness" value="8.0 * cm"/>
<constant name="BarrelExtraSpaceThickness" value="0.0 * cm"/>
<documentation level="0">
### Extra tracking region behind the endcap PID system
......@@ -401,10 +401,6 @@ Service gaps in FW direction (before endcapP ECAL) and BW direction (before endc
<constant name="BackwardTracking_zmin" value="BackwardPID_zmin + BackwardPID_length"/>
<constant name="ForwardTracking_zmin" value="ForwardPID_zmin + ForwardPID_length"/>
<comment> These are used by ddsim </comment>
<constant name="tracker_region_rmax" value="CentralTracking_rmax"/>
<constant name="tracker_region_zmax" value="max(BackwardPID_zmin, ForwardPID_zmin)"/>
<comment> Total length of the endcap detectors in front of the calorimeter</comment>
<constant name="BackwardInnerEndcap_length" value="BackwardPID_length + BackwardTracking_length"/>
<constant name="ForwardInnerEndcap_length" value="ForwardPID_length + ForwardTracking_length"/>
......@@ -424,9 +420,9 @@ Service gaps in FW direction (before endcapP ECAL) and BW direction (before endc
<constant name="EcalEndcapN_rmin" value="max((EcalEndcapN_zmin + EcalEndcapN_length) * tan(abs(CrossingAngle)) + 12.5 * mm, 5*cm)"/>
<constant name="EcalEndcapN_rmax" value="TrackerBarrel_rmax"/>
<constant name="EcalBarrelEnvelope_thickness" value="40.0*cm"/>
<constant name="EcalBarrelEnvelope_thickness" value="45.0*cm"/>
<constant name="EcalBarrel_rmin" value="CentralTracking_rmax + BarrelPIDThickness + BarrelExtraSpaceThickness"/>
<constant name="EcalBarrelForward_length" value="-21*cm"/>
<constant name="EcalBarrelForward_length" value="-20*cm"/>
<constant name="EcalBarrelForward_zmax" value="ForwardPID_zmin + EcalBarrelForward_length"/>
<constant name="EcalBarrelBackward_zmax" value="BackwardPID_zmin + BackwardInnerEndcap_length + EcalEndcapN_length"/>
<constant name="EcalBarrel_length" value="EcalBarrelForward_zmax + EcalBarrelBackward_zmax"/>
......@@ -464,4 +460,14 @@ Service gaps in FW direction (before endcapP ECAL) and BW direction (before endc
<constant name="HcalBarrel_rmax" value="HcalBarrel_rmin + HcalBarrel_thickness"/>
<constant name="HcalBarrel_length" value="HcalEndcapP_zmin + HcalEndcapN_zmin "/>
<comment>
These are used by ddsim, the region where we store all secondaries
For now they are forced to be symmetric, and we cover up to the start of the backward ECAL.
(this means in the forward region we stop in the middle of the RICH).
</comment>
<constant name="tracker_region_rmax" value="EcalBarrel_rmin"/>
<constant name="tracker_region_zmax" value="EcalEndcapN_zmin"/>
</define>
<lccdd>
<comment>
DIRC consists of 16 (default) identical modules making a barrel.
</comment>
<define>
<constant name="DIRCModule_count" value="16" comment="Number of DIRC boxes per... DIRC. 16 - default"/>
<constant name="DIRCModule_count" value="CaloSides" />
<constant name="DIRCBar_thickness" value="17*mm" />
<constant name="DIRCBar_length" value="DIRC_length-8*cm" />
......@@ -21,7 +17,7 @@
<constant name="DIRCModule_thickness" value="DIRCModule_rmax - DIRC_rmin" />
<constant name="DIRCFrame_rmax" value="DIRC_rmin + DIRCFrame_thickness" />
<constant name="DIRCModule_halfangle" value="180*degree/DIRCModule_count" />
<constant name="DIRCModule_halfangle" value="180*degree/DIRCModule_count" />
<constant name="DIRCModule_width" value="2*DIRC_rmin * tan(DIRCModule_halfangle)"/>
<constant name="DIRCModule_rmin" value="DIRC_rmin + 1*cm"/>
......
......@@ -138,6 +138,7 @@
rmax = "GEMTrackerEndcapP_rmax"
length="GEMTrackerEndcapP_thickness"
zstart="GEMTrackerEndcapP_zmin" />
<layer_material surface="representing" binning="binPhi,binR" bins0="40*12" bins1="1024"/>
<ring vis="TrackerVis" module="GEMModule1"
r="GEMTrackerEndcapP_rmin+GEMTrackerEndcapP_y/2.0"
zstart="0"
......@@ -201,6 +202,7 @@
rmax = "GEMTrackerEndcapN_rmax"
length="GEMTrackerEndcapN_thickness"
zstart="GEMTrackerEndcapN_zmin" />
<layer_material surface="representing" binning="binPhi,binR" bins0="40*12" bins1="1024"/>
<ring vis="TrackerVis" module="GEMModule1"
r="GEMTrackerEndcapN_rmin+GEMTrackerEndcapN_y/2.0"
zstart="0.1"
......
......@@ -130,7 +130,7 @@ Simple carbon fiber support shell.
<module name="SupportShell" vis="VertexSupportVis">
<module_component name="CF Shell"
material="CarbonFiber"
sensitive="true"
sensitive="false"
width="VertexBarrelShellStave_width"
length="VertexBarrelShell_length"
thickness="VertexBarrelShell_thickness"
......@@ -142,6 +142,7 @@ Simple carbon fiber support shell.
inner_r="VertexBarrelLayer_rmin1"
outer_r="VertexBarrelLayer_rmax1"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<comment>
phi0 : Starting phi of first module.
phi_tilt : Phi tilt of a module.
......@@ -160,6 +161,7 @@ Simple carbon fiber support shell.
inner_r="VertexBarrelLayer_rmin2"
outer_r="VertexBarrelLayer_rmax2"
z_length="VertexBarrelLayer_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelMod2_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -168,6 +170,7 @@ Simple carbon fiber support shell.
inner_r="VertexBarrelSupport_rmin"
outer_r="VertexBarrelSupport_rmax"
z_length="VertexBarrelSupport_length" />
<layer_material surface="outer" binning="binPhi,binZ" bins0="VertexBarrelStave_count" bins1="100" />
<rphi_layout phi_tilt="0.0*degree" nphi="VertexBarrelStave_count" phi0="0.0" rc="VertexBarrelShell_rmin" dr="0.0 * mm"/>
<z_layout dr="0.0 * mm" z0="0.0 * mm" nz="1"/>
</layer>
......@@ -207,6 +210,7 @@ Simple carbon fiber support shell.
rmax="VertexTrackerEndcapP_rmax"
length="VertexEndcapLayer_thickness"
zstart="VertexTrackerEndcapP_zmin + VertexEndcapLayer_dz/2.0" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*VertexEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="VertexTrackerEndcapP_rmin+VertexEndcapMod1_y/2.0"
zstart="0.0"
......@@ -248,6 +252,7 @@ Simple carbon fiber support shell.
rmax="VertexTrackerEndcapN_rmax"
length="VertexEndcapLayer_thickness"
zstart="VertexTrackerEndcapN_zmin + VertexEndcapLayer_dz/2.0" />
<layer_material surface="representing" binning="binPhi,binR" bins0="20*VertexEndcap_NModules" bins1="256"/>
<ring vis="TrackerVis"
r="VertexTrackerEndcapN_rmin+VertexEndcapMod1_y/2.0"
zstart="0.0"
......
R__LOAD_LIBRARY(libDDCore.so)
// R__LOAD_LIBRARY(libActsPluginDD4hep.so)
R__LOAD_LIBRARY(libDDG4.so)
R__LOAD_LIBRARY(libDDG4IO.so)
#include "DD4hep/Detector.h"
#include "DD4hep/DetElement.h"
#include "DD4hep/Objects.h"
#include "DD4hep/Detector.h"
#include "DDG4/Geant4Data.h"
#include "DDRec/CellIDPositionConverter.h"
#include "DDRec/SurfaceManager.h"
#include "DDRec/Surface.h"
#include "TCanvas.h"
#include "TChain.h"
#include "TGeoMedium.h"
#include "TGeoManager.h"
#include "DDRec/MaterialScan.h"
#include "DDRec/MaterialManager.h"
#include "DD4hep/Detector.h"
#include "DD4hep/Printout.h"
#include "fmt/core.h"
#include <iostream>
#include <fstream>
// #include "Acts/Geometry/TrackingGeometry.hpp"
// #include "Acts/Geometry/TrackingVolume.hpp"
// #include "Acts/Plugins/DD4hep/ConvertDD4hepDetector.hpp"
using namespace dd4hep;
using namespace dd4hep::rec;
void test_matscan(const char* compact = "athena.xml", TString face="z"){
dd4hep::Detector& detector = dd4hep::Detector::getInstance();
detector.fromCompact(compact);
MaterialScan matscan(detector);
fmt::print("\n");
fmt::print("All detector subsystem names:\n");
for(const auto& d : detector.detectors() ) {
fmt::print(" {}\n", d.first);
}
return;
TString det_list[14]={"TrackerBarrel_Inner","TrackerBarrel_Outer","TrackerEndcapN_Inner","TrackerEndcapN_Outer","TrackerEndcapP_Inner","TrackerEndcapP_Outer","TrackerSubAssembly_Inner","TrackerSubAssembly_Outer","VertexBarrel","VertexBarrelSubAssembly","VertexEndcapN","VertexEndcapP","VertexEndcapSubAssembly","cb_DIRC"};
for (int dd=0;dd<14;dd++){
TString detname = det_list[dd];
matscan.setDetector(detname.Data());
double x0=0,y0=0,z0=0,x1,y1,z1; // cm
double epsilon=1e-4; // (mm) default 1e-4: Materials with a thickness smaller than epsilon (default 1e-4=1mu
const char* fmt1 = "%7.2f %7.2f %7.2f %5d %-20s %3.0f %8.3f %8.4f %11.4f %11.4f %10.3f %8.2f %11.6f %11.6f %7.2f %7.2f %7.2f\n";
const char* fmt2 = "%7.2f %7.2f %7.2f %5d %-20s %3.0f %8.3f %8.4f %11.6g %11.6g %10.3f %8.2f %11.6f %11.6f %7.2f %7.2f %7.2f\n";
// x1 = 100; y1 = 100; z1 = 100;
// y1 = 100;
double a1,a2,a3;
for(a3=-100;a3<101;a3=a3+200){
TString fname = Form("/global/u2/s/shujie/eic/output/matscan/%s_%s%g.dat",detname.Data(),face.Data(),a3);
FILE * pFile;
pFile = fopen (fname,"w");
for(a1=-100;a1<100;a1=a1+1){
for(a2=-100;a2<100;a2=a2+1){
if (face=="x"){
y1=a1; z1=a2; x1=a3;
}
else if (face=="y"){
x1=a1; z1=a2; y1=a3;
}
else if (face=="z"){
x1=a1; y1=a2; z1=a3;
}
Vector3D p0(x0, y0, z0), p1(x1, y1, z1);
Vector3D end, direction;
direction = (p1-p0).unit();
const auto& placements = matscan.scan(x0,y0,z0,x1,y1,z1,epsilon);
// matscan.print(x0,y0,z0,x1,y1,z1,epsilon);
// return;
// Vector3D end, direction;
double sum_x0 = 0;
double sum_lambda = 0;
double path_length = 0, total_length = 0;
// TString fname = Form("/global/u2/s/shujie/eic_dir/matscan_%g_%g_%g.dat",x1,y1,z1);
for (unsigned i=0;i<placements.size();i++){
TGeoMaterial* mat=placements[i].first->GetMaterial();
double length = placements[i].second;
double nx0 = length / mat->GetRadLen();
double nLambda = length / mat->GetIntLen();
sum_x0 += nx0;
sum_lambda += nLambda;
path_length += length;
total_length += length;
end = p0 + total_length * direction;
const char* fmt = mat->GetRadLen() >= 1e5 ? fmt2 : fmt1;
// fprintf(pFile, "%d\n",i+1);
fprintf(pFile, fmt,x1, y1, z1, i+1, mat->GetName(), mat->GetZ(), mat->GetA(),
mat->GetDensity(), mat->GetRadLen(), mat->GetIntLen(),
length, path_length, sum_x0, sum_lambda, end[0], end[1], end[2]);
// ::printf(fmt, i+1, mat->GetName(), mat->GetZ(), mat->GetA(),
// mat->GetDensity(), mat->GetRadLen(), mat->GetIntLen(),
// length, path_length, sum_x0, sum_lambda, end[0], end[1], end[2]);
// // mat->Print();
}
}
cout<<detname<<" "<<x1<<","<<y1<<","<<z1<<endl;
// cout<<x1<<","<<y1<<","<<z1<<": "<<placements.size()<<" "<<sum_x0<<" "<<total_length<<endl;
}
fclose (pFile);
}
}
}
/*
<!-- <include ref="ecal_barrel_hybrid.xml"/> -->
<TGeoManager::CountLevels>: max level = 5, max placements = 2796
Error in <TGeoVoxelFinder::SortAll>: Volume B0Tracker: Cannot make slices on any axis
Error in <TGeoVoxelFinder::SortAll>: Volume ForwardRomanPot_Station_1: Cannot make slices on any axis
{ B0APF_BeamlineMagnet
B0PF_BeamlineMagnet
B0Tracker
B1APF_BeamlineMagnet
B1PF_BeamlineMagnet
B2PF_BeamlineMagnet
BPFR1_BeamlineMagnet
BackwardTOF
BarrelTOF
BeamPipe
EcalEndcapN
EcalEndcapP
ForwardOffMTracker
ForwardRomanPot_Station_1
ForwardTOF
ForwardTRD
GaseousRICH
HcalBarrel
HcalEndcapN
HcalEndcapP
Q1APF_BeamlineMagnet
Q1BPF_BeamlineMagnet
Q2PF_BeamlineMagnet
QPFC1_BeamlineMagnet
QPFC2_BeamlineMagnet
QPFC3_BeamlineMagnet
QPFC4_BeamlineMagnet
QPFR1_BeamlineMagnet
QPFR2_BeamlineMagnet
SolenoidCoilBarrel
SolenoidCoilEndcapN
SolenoidCoilEndcapP
TOFSubAssembly
TrackerBarrel_Inner
TrackerBarrel_Outer
TrackerEndcapN_Inner
TrackerEndcapN_Outer
TrackerEndcapP_Inner
TrackerEndcapP_Outer
TrackerSubAssembly_Inner
TrackerSubAssembly_Outer
VertexBarrel
VertexBarrelSubAssembly
VertexEndcapN
VertexEndcapP
VertexEndcapSubAssembly
cb_DIRC
ce_MRICH
ffi_ZDC_ECAL
ffi_ZDC_HCAL}
*/
......@@ -13,11 +13,9 @@
#include "DDRec/DetectorData.h"
#include "XML/Layering.h"
#include "XML/Utilities.h"
#include "Acts/Plugins/DD4hep/ActsExtension.hpp"
#include "Acts/Surfaces/PlanarBounds.hpp"
#include "Acts/Surfaces/RectangleBounds.hpp"
#include "Acts/Surfaces/TrapezoidBounds.hpp"
#include "Acts/Definitions/Units.hpp"
#include "Acts/Plugins/DD4hep/ConvertDD4hepMaterial.hpp"
using namespace std;
......@@ -62,9 +60,18 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi
PlacedVolume pv;
dd4hep::xml::Dimension dimensions(x_det.dimensions());
Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
detWorldExt->addType("barrel", "detector");
sdet.addExtension<Acts::ActsExtension>(detWorldExt);
// ACTS extension
{
Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
detWorldExt->addType("barrel", "detector");
// Add the volume boundary material if configured
for (xml_coll_t bmat(x_det, _Unicode(boundary_material)); bmat; ++bmat) {
xml_comp_t x_boundary_material = bmat;
Acts::xmlToProtoSurfaceMaterial(x_boundary_material, *detWorldExt, "boundary_material");
}
sdet.addExtension<Acts::ActsExtension>(detWorldExt);
}
Tube topVolumeShape(dimensions.rmin(), dimensions.rmax(), dimensions.length() * 0.5);
Volume assembly(det_name,topVolumeShape,air);
......@@ -238,19 +245,22 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi
double z_dr = z_layout.dr(); // Radial displacement parameter, of every other module.
Volume module_env = volumes[m_nam];
DetElement lay_elt(sdet, _toString(x_layer.id(), "layer%d"), lay_id);
DetElement lay_elt(sdet, lay_nam, lay_id);
Placements& sensVols = sensitives[m_nam];
// the local coordinate systems of modules in dd4hep and acts differ
// see http://acts.web.cern.ch/ACTS/latest/doc/group__DD4hepPlugins.html
Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
layerExtension->addType("sensitive cylinder", "layer");
//layerExtension->addValue(0, "r_min", "envelope");
//layerExtension->addValue(0, "r_max", "envelope");
//layerExtension->addValue(0, "z_min", "envelope");
//layerExtension->addValue(0, "z_max", "envelope");
//layerExtension->addType("axes", "definitions", "XzY");
lay_elt.addExtension<Acts::ActsExtension>(layerExtension);
{
Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
// layer is simple tube so no need to set envelope
layerExtension->addType("sensitive cylinder", "layer");
// Add the proto layer material
for(xml_coll_t lmat(x_layer, _Unicode(layer_material)); lmat; ++lmat) {
xml_comp_t x_layer_material = lmat;
xmlToProtoSurfaceMaterial(x_layer_material, *layerExtension, "layer_material");
}
lay_elt.addExtension<Acts::ActsExtension>(layerExtension);
}
// Z increment for module placement along Z axis.
// Adjust for z0 at center of module rather than
......@@ -282,9 +292,12 @@ static Ref_t create_BarrelTrackerWithFrame(Detector& description, xml_h e, Sensi
PlacedVolume sens_pv = sensVols[ic];
DetElement comp_de(mod_elt, std::string("de_") + sens_pv.volume().name(), module);
comp_de.setPlacement(sens_pv);
Acts::ActsExtension* sensorExtension = new Acts::ActsExtension();
//sensorExtension->addType("sensor", "detector");
comp_de.addExtension<Acts::ActsExtension>(sensorExtension);
// ACTS extension
{
Acts::ActsExtension* sensorExtension = new Acts::ActsExtension();
//sensorExtension->addType("sensor", "detector");
comp_de.addExtension<Acts::ActsExtension>(sensorExtension);
}
//comp_de.setAttributes(description, sens_pv.volume(), x_layer.regionStr(), x_layer.limitsStr(),
// xml_det_t(xmleles[m_nam]).visStr());
//
......
......@@ -16,7 +16,7 @@
#include "XML/Layering.h"
#include "Acts/Plugins/DD4hep/ActsExtension.hpp"
#include "Acts/Definitions/Units.hpp"
#include "Acts/Plugins/DD4hep/ConvertDD4hepMaterial.hpp"
using namespace std;
using namespace dd4hep;
......@@ -50,9 +50,21 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
PlacedVolume pv;
Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
detWorldExt->addType("endcap", "detector");
sdet.addExtension<Acts::ActsExtension>(detWorldExt);
// ACTS extension
{
Acts::ActsExtension* detWorldExt = new Acts::ActsExtension();
detWorldExt->addType("endcap", "detector");
// SJJ probably need to set the envelope here, as ACTS can't figure
// that out for Assembly volumes. May also need binning to properly pick up
// on the support material @TODO
//
// Add the volume boundary material if configured
for (xml_coll_t bmat(x_det, _Unicode(boundary_material)); bmat; ++bmat) {
xml_comp_t x_boundary_material = bmat;
Acts::xmlToProtoSurfaceMaterial(x_boundary_material, *detWorldExt, "boundary_material");
}
sdet.addExtension<Acts::ActsExtension>(detWorldExt);
}
assembly.setVisAttributes(description.invisible());
sens.setType("tracker");
......@@ -233,12 +245,18 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
}
DetElement layer_element(sdet, layer_name, l_id);
layer_element.setPlacement(layer_pv);
Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
layerExtension->addType("layer", "layer");
//layerExtension->addType("axes", "definitions", "XZY");
//layerExtension->addType("sensitive disk", "layer");
//layerExtension->addType("axes", "definitions", "XZY");
layer_element.addExtension<Acts::ActsExtension>(layerExtension);
// ACTS extension
{
Acts::ActsExtension* layerExtension = new Acts::ActsExtension();
// layer is simple tube so no need to set envelope
layerExtension->addType("layer", "layer");
// Add the proto layer material
for (xml_coll_t lmat(x_layer, _Unicode(layer_material)); lmat; ++lmat) {
xml_comp_t x_layer_material = lmat;
xmlToProtoSurfaceMaterial(x_layer_material, *layerExtension, "layer_material");
}
layer_element.addExtension<Acts::ActsExtension>(layerExtension);
}
for (xml_coll_t ri(x_layer, _U(ring)); ri; ++ri) {
xml_comp_t x_ring = ri;
......