Skip to content
Snippets Groups Projects
Commit 0dae1a03 authored by FU Chengdong's avatar FU Chengdong
Browse files

default use extension data

parent ec50a325
No related branches found
No related tags found
No related merge requests found
...@@ -12,11 +12,13 @@ ...@@ -12,11 +12,13 @@
#include "gearimpl/FixedPadSizeDiskLayout.h" #include "gearimpl/FixedPadSizeDiskLayout.h"
#include "gearimpl/CalorimeterParametersImpl.h" #include "gearimpl/CalorimeterParametersImpl.h"
#include "gearimpl/SimpleMaterialImpl.h" #include "gearimpl/SimpleMaterialImpl.h"
#include "gear/VXDLayerLayout.h"
#include "gearxml/tinyxml.h" #include "gearxml/tinyxml.h"
#include "DD4hep/Detector.h" #include "DD4hep/Detector.h"
#include "DD4hep/DetElement.h" #include "DD4hep/DetElement.h"
#include "DDRec/DetectorData.h" #include "DDRec/DetectorData.h"
#include "DDRec/MaterialManager.h"
#include "DD4hep/DD4hepUnits.h" #include "DD4hep/DD4hepUnits.h"
#include "CLHEP/Units/SystemOfUnits.h" #include "CLHEP/Units/SystemOfUnits.h"
...@@ -194,6 +196,49 @@ StatusCode GearSvc::convertVXD(dd4hep::DetElement& vxd){ ...@@ -194,6 +196,49 @@ StatusCode GearSvc::convertVXD(dd4hep::DetElement& vxd){
extensionDataValid = false; extensionDataValid = false;
info() << e.what() << " " << vxdData << endmsg; info() << e.what() << " " << vxdData << endmsg;
} }
if(vxdData){
int vxdType = gear::ZPlanarParameters::CMOS;
gear::ZPlanarParametersImpl* gearVXD = new gear::ZPlanarParametersImpl( vxdType, vxdData->rInnerShell/dd4hep::mm, vxdData->rOuterShell/dd4hep::mm,
vxdData->zHalfShell/dd4hep::mm , vxdData->gapShell/dd4hep::mm , 0. ) ;
for(unsigned i=0,n=vxdData->layers.size() ; i<n; ++i){
const dd4hep::rec::ZPlanarData::LayerLayout& l = vxdData->layers[i];
// FIXME set rad lengths to 0 -> need to get from dd4hep ....
gearVXD->addLayer(l.ladderNumber, l.phi0,
l.distanceSupport/dd4hep::mm, l.offsetSupport/dd4hep::mm, l.thicknessSupport/dd4hep::mm, l.zHalfSupport/dd4hep::mm, l.widthSupport/dd4hep::mm, 0.,
l.distanceSensitive/dd4hep::mm, l.offsetSensitive/dd4hep::mm, l.thicknessSensitive/dd4hep::mm, l.zHalfSensitive/dd4hep::mm, l.widthSensitive/dd4hep::mm, 0.);
}
m_gearMgr->setVXDParameters(gearVXD);
dd4hep::rec::MaterialManager matMgr( dd4hep::Detector::getInstance().world().volume() ) ;
const dd4hep::rec::ZPlanarData::LayerLayout& l = vxdData->layers[0] ;
dd4hep::rec::Vector3D a( l.distanceSensitive + l.thicknessSensitive, l.phi0 , 0. , dd4hep::rec::Vector3D::cylindrical ) ;
dd4hep::rec::Vector3D b( l.distanceSupport + l.thicknessSupport, l.phi0 , 0. , dd4hep::rec::Vector3D::cylindrical ) ;
const dd4hep::rec::MaterialVec& materials = matMgr.materialsBetween( a , b ) ;
dd4hep::rec::MaterialData mat = ( materials.size() > 1 ? matMgr.createAveragedMaterial( materials ) : materials[0].first ) ;
std::cout << " ####### found materials between points : " << a << " and " << b << " : " ;
for( unsigned i=0,n=materials.size();i<n;++i){
std::cout << materials[i].first.name() << "[" << materials[i].second << "], " ;
}
std::cout << std::endl ;
std::cout << " averaged material : " << mat << std::endl ;
gear::SimpleMaterialImpl* VXDSupportMaterial = new gear::SimpleMaterialImpl("VXDSupportMaterial", mat.A(), mat.Z(),
mat.density()/(dd4hep::kg/(dd4hep::g*dd4hep::m3)),
mat.radiationLength()/dd4hep::mm,
mat.interactionLength()/dd4hep::mm);
m_gearMgr->registerSimpleMaterial(VXDSupportMaterial);
info() << vxdData->rInnerShell << " " << vxdData->rOuterShell << " " << vxdData->zHalfShell << " " << vxdData->gapShell << endmsg;
for(int i=0,n=vxdData->layers.size(); i<n; i++){
const dd4hep::rec::ZPlanarData::LayerLayout& thisLayer = vxdData->layers[i];
info() << i << ": " << thisLayer.ladderNumber << "," << thisLayer.phi0 << ","
<< thisLayer.distanceSupport/dd4hep::mm << "," << thisLayer.offsetSupport/dd4hep::mm << "," << thisLayer.thicknessSupport/dd4hep::mm << ","
<< thisLayer.zHalfSupport/dd4hep::mm << "," << thisLayer.widthSupport/dd4hep::mm << "," << "NULL,"
<< thisLayer.distanceSensitive/dd4hep::mm << "," << thisLayer.offsetSensitive/dd4hep::mm << "," << thisLayer.thicknessSensitive/dd4hep::mm << ","
<< thisLayer.zHalfSensitive/dd4hep::mm << "," << thisLayer.widthSensitive/dd4hep::mm << ",NULL" << endmsg;
}
return sc;
}
std::vector<helpLayer> helpSensitives; std::vector<helpLayer> helpSensitives;
std::vector<helpLayer> helpLadders; std::vector<helpLayer> helpLadders;
...@@ -575,30 +620,34 @@ StatusCode GearSvc::convertVXD(dd4hep::DetElement& vxd){ ...@@ -575,30 +620,34 @@ StatusCode GearSvc::convertVXD(dd4hep::DetElement& vxd){
gearParameters->setDoubleVal("CryostatAlHalfZ", dzSty+drSty); gearParameters->setDoubleVal("CryostatAlHalfZ", dzSty+drSty);
m_gearMgr->setGearParameters("VXDInfra", gearParameters); m_gearMgr->setGearParameters("VXDInfra", gearParameters);
} }
dd4hep::rec::MaterialManager matMgr( dd4hep::Detector::getInstance().world().volume() ) ;
const gear::VXDLayerLayout& l = m_gearMgr->getVXDParameters().getVXDLayerLayout();
dd4hep::rec::Vector3D a( l.getSensitiveDistance(0)+l.getSensitiveThickness(0), l.getPhi0(0), 0. , dd4hep::rec::Vector3D::cylindrical ) ;
dd4hep::rec::Vector3D b( l.getLadderDistance(0)+l.getLadderThickness(0), l.getPhi0(0), 0. , dd4hep::rec::Vector3D::cylindrical ) ;
const dd4hep::rec::MaterialVec& materials = matMgr.materialsBetween( a , b ) ;
dd4hep::rec::MaterialData mat = ( materials.size() > 1 ? matMgr.createAveragedMaterial( materials ) : materials[0].first ) ;
std::cout << " ####### found materials between points : " << a << " and " << b << " : " ;
for( unsigned i=0,n=materials.size();i<n;++i){
std::cout << materials[i].first.name() << "[" << materials[i].second << "], " ;
}
std::cout << std::endl ;
std::cout << " averaged material : " << mat << std::endl ;
gear::SimpleMaterialImpl* VXDSupportMaterial = new gear::SimpleMaterialImpl("VXDSupportMaterial", mat.A(), mat.Z(),
mat.density()/(dd4hep::kg/(dd4hep::g*dd4hep::m3)),
mat.radiationLength()/dd4hep::mm,
mat.interactionLength()/dd4hep::mm);
//effective A different with what in Mokka, fix them as Mokka's //effective A different with what in Mokka, fix them as Mokka's
gear::SimpleMaterialImpl* VXDFoamShellMaterial_old = new gear::SimpleMaterialImpl("VXDFoamShellMaterial_old", 1.043890843e+01, 5.612886646e+00, 2.500000000e+01, 1.751650267e+04, 0); gear::SimpleMaterialImpl* VXDFoamShellMaterial_old = new gear::SimpleMaterialImpl("VXDFoamShellMaterial_old", 1.043890843e+01, 5.612886646e+00, 2.500000000e+01, 1.751650267e+04, 0);
m_gearMgr->registerSimpleMaterial(VXDFoamShellMaterial_old); m_gearMgr->registerSimpleMaterial(VXDFoamShellMaterial_old);
gear::SimpleMaterialImpl* VXDFoamShellMaterial = new gear::SimpleMaterialImpl("VXDFoamShellMaterial", styAeff, styZeff, styDensity*(CLHEP::g/CLHEP::cm3)/(CLHEP::kg/CLHEP::m3), gear::SimpleMaterialImpl* VXDFoamShellMaterial = new gear::SimpleMaterialImpl("VXDFoamShellMaterial", styAeff, styZeff, styDensity*(CLHEP::g/CLHEP::cm3)/(CLHEP::kg/CLHEP::m3),
styRadLen, styIntLen); styRadLen, styIntLen);
m_gearMgr->registerSimpleMaterial(VXDFoamShellMaterial); m_gearMgr->registerSimpleMaterial(VXDFoamShellMaterial);
gear::SimpleMaterialImpl* VXDSupportMaterial_old = new gear::SimpleMaterialImpl("VXDSupportMaterial_old", 2.075865162e+01, 1.039383117e+01, 2.765900000e+02, 1.014262421e+03, 3.341388059e+03);
m_gearMgr->registerSimpleMaterial(VXDSupportMaterial_old);
gear::SimpleMaterialImpl* VXDSupportMaterial = new gear::SimpleMaterialImpl("VXDSupportMaterial", VXDSupportAeff, VXDSupportZeff, VXDSupportDensity, VXDSupportRadLen, VXDSupportIntLen);
m_gearMgr->registerSimpleMaterial(VXDSupportMaterial); m_gearMgr->registerSimpleMaterial(VXDSupportMaterial);
info() << "=====================from ZPlanarData==============================" << endmsg; info() << "cryostat parameters: " << rAlu << " " << drAlu << " " << rInner << " " << aluEndcapZ << " " << aluHalfZ << endmsg;
if(vxdData){
info() << vxdData->rInnerShell << " " << vxdData->rOuterShell << " " << vxdData->zHalfShell << " " << vxdData->gapShell << endmsg;
const std::vector<dd4hep::rec::ZPlanarData::LayerLayout>& layers = vxdData->layers;
for(int i=0;i<layers.size();i++){
const dd4hep::rec::ZPlanarData::LayerLayout& thisLayer = layers[i];
info() << i << ": " << thisLayer.ladderNumber << "," << thisLayer.phi0 << "," << thisLayer.distanceSupport << "," << thisLayer.offsetSupport << ","
<< thisLayer.thicknessSupport << "," << thisLayer.zHalfSupport << "," << thisLayer.widthSupport << "," << "NULL,"
<< thisLayer.distanceSensitive << "," << thisLayer.offsetSensitive << "," << thisLayer.thicknessSensitive << "," << thisLayer.zHalfSensitive << ","
<< thisLayer.widthSensitive << ",NULL" << endmsg;
}
}
info() << rAlu << " " << drAlu << " " << rInner << " " << aluEndcapZ << " " << aluHalfZ << endmsg;
//info() << m_materials["VXDSupportMaterial"] << endmsg;
return sc; return sc;
} }
...@@ -853,7 +902,7 @@ StatusCode GearSvc::convertDC(dd4hep::DetElement& dc){ ...@@ -853,7 +902,7 @@ StatusCode GearSvc::convertDC(dd4hep::DetElement& dc){
} }
info() << (*dcData) << endmsg; info() << (*dcData) << endmsg;
} }
debug() << dcData->maxRow << ": " << dcData->rMinReadout*CLHEP::cm << " " << dcData->rMaxReadout*CLHEP::cm << endmsg;
// regard as TPCParameters, TODO: drift chamber parameters // regard as TPCParameters, TODO: drift chamber parameters
gear::TPCParametersImpl *tpcParameters = new gear::TPCParametersImpl(); gear::TPCParametersImpl *tpcParameters = new gear::TPCParametersImpl();
gear::PadRowLayout2D *padLayout = new gear::FixedPadSizeDiskLayout(dcData->rMinReadout*CLHEP::cm, dcData->rMaxReadout*CLHEP::cm, gear::PadRowLayout2D *padLayout = new gear::FixedPadSizeDiskLayout(dcData->rMinReadout*CLHEP::cm, dcData->rMaxReadout*CLHEP::cm,
......
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