Skip to content
Snippets Groups Projects
Commit 7fe41849 authored by lintao@ihep.ac.cn's avatar lintao@ihep.ac.cn
Browse files

WIP: start to port Chunxiu Liu's code to dd4hep.

parent b7c1b9e9
No related branches found
No related tags found
No related merge requests found
###############################################################################
# Package: DetEcalMatrix
# Based on package: lcgeo
################################################################################
gaudi_subdir(DetEcalMatrix v0r0)
gaudi_depends_on_subdirs(GaudiKernel)
find_package(DD4hep COMPONENTS DDRec DDG4 DDParsers REQUIRED)
find_package(Geant4)
include(${Geant4_USE_FILE})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake )
include( DD4hep )
find_package(ROOT COMPONENTS MathCore GenVector Geom REQUIRED)
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/compact DESTINATION Detector/DetEcalMatrix)
set(DetEcalMatrix_src
src/calorimeter/EcalMatrix.cpp
)
gaudi_add_module(DetEcalMatrix
${DetEcalMatrix_src}
INCLUDE_DIRS DD4hep ROOT Geant4 src/include
LINK_LIBRARIES GaudiKernel DD4hep ${DD4hep_COMPONENT_LIBRARIES} ROOT Geant4)
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
message(STATUS "LIBRARY_OUTPUT_PATH -> ${LIBRARY_OUTPUT_PATH}")
dd4hep_generate_rootmap(DetEcalMatrix)
<?xml version="1.0" encoding="UTF-8"?>
<lccdd>
<info name="EcalMatrix"
title="Test with Chunxiu Liu's EcalMatrix"
author="Tao Lin"
url="http://cepcgit.ihep.ac.cn"
status="development"
version="v0">
<comment>Test with Chunxiu Liu's EcalMatrix</comment>
</info>
<includes>
<gdmlFile ref="${DD4hepINSTALL}/DDDetectors/compact/elements.xml"/>
<gdmlFile ref="${DD4hepINSTALL}/DDDetectors/compact/materials.xml"/>
</includes>
<define>
<constant name="world_size" value="30*m"/>
<constant name="world_x" value="world_size"/>
<constant name="world_y" value="world_size"/>
<constant name="world_z" value="world_size"/>
</define>
<display>
<vis name="Invisible" showDaughters="false" visible="false"/>
<vis name="InvisibleWithChildren" showDaughters="true" visible="false"/>
<vis name="VisibleRed" r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
<vis name="VisibleBlue" r="0.0" g="0.0" b="1.0" showDaughters="false" visible="true"/>
<vis name="VisibleGreen" alpha="1.0" r="0.0" g="1.0" b="0.0" drawingStyle="solid" lineStyle="solid" showDaughters="true" visible="true"/>
</display>
<detectors>
<detector id="1" name="CaloDetector" type="EcalMatrix" readout="CaloHits" vis="VisibleGreen" sensitive="true">
<position x="0" y="0" z="1800*mm"/>
</detector>
</detectors>
<readouts>
<readout name="CaloHits">
<id>system:8</id>
</readout>
</readouts>
</lccdd>
//====================================================================
// Detector description implementation for Chunxiu Liu's EcalMatrix
//--------------------------------------------------------------------
//
// Author : Tao Lin
// Examples from lcgeo
// lcgeo/detector/calorimeter/
//
//====================================================================
#include "DD4hep/DetFactoryHelper.h"
#include "XML/Layering.h"
#include "XML/Utilities.h"
#include "DDRec/DetectorData.h"
#include "DDSegmentation/Segmentation.h"
#define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
xml_h e,
dd4hep::SensitiveDetector sens) {
xml_det_t x_det = e;
std::string det_name = x_det.nameStr();
std::string det_type = x_det.typeStr();
MYDEBUGVAL(det_name);
MYDEBUGVAL(det_type);
xml_dim_t pos (x_det.child(_U(position)));
dd4hep::DetElement sdet(det_name, x_det.id());
dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet);
dd4hep::Material det_mat(theDetector.material("Air"));
dd4hep::Volume det_vol(det_name+"_vol", dd4hep::Box(60, 60, 60), det_mat);
dd4hep::Transform3D transform(dd4hep::Rotation3D(),
dd4hep::Position(pos.x(),pos.y(),pos.z()));
dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform);
if ( x_det.isSensitive() ) {
dd4hep::SensitiveDetector sd = sens;
det_vol.setSensitiveDetector(sens);
sd.setType("calorimeter");
}
if ( x_det.hasAttr(_U(id)) ) {
phv.addPhysVolID("system",x_det.id());
}
sdet.setPlacement(phv);
MYDEBUG("create_detector DONE. ");
return sdet;
}
DECLARE_DETELEMENT(EcalMatrix, create_detector)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment