Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "DDGear.h"
#include "DD4hep/LCDD.h"
#include "DD4hep/TGeoUnits.h"
#include "DD4hep/Fields.h"
// ROOT
//#include "TGeoManager.h"
//---- GEAR ----
#include "gear/GEAR.h"
#include "gearxml/GearXML.h"
#include "gearimpl/Util.h"
#include "gearimpl/ConstantBField.h"
#include "gearimpl/GearMgrImpl.h"
#include "geartgeo/TGeoGearPointProperties.h"
#include "geartgeo/TGeoGearDistanceProperties.h"
namespace DD4hep{
using namespace Geometry ;
gear::GearMgr* createGearMgr( const Geometry::LCDD& lcdd ){
DetElement world = lcdd.world() ;
gear::GearMgrImpl* gearMgr = new gear::GearMgrImpl() ;
gearMgr->setDetectorName( lcdd.header().name() ) ;
std::cout << " **** will convert detector " << lcdd.header().name() << " to Gear \n"
<< " Iterating over all subdetectors: " << std::endl ;
//------------------ SubdetectorParamters ----------------------------------
typedef std::map<std::string, DetElement> DEMap ;
DEMap chMap = world.children() ;
for ( DEMap::const_iterator it=chMap.begin() ; it != chMap.end() ; ++it ){
DetElement subDet = (*it).second ;
std::cout << " *** subdetector : " << subDet.name() << std::endl ;
DD4hep::GearHandle* gearH = 0 ;
try{
gearH = subDet.extension<DD4hep::GearHandle>() ;
} catch( std::exception& e) {
std::cout << " *** " << e.what() << std::endl ;
continue ; // with next DetElement
}
// --- check for canonical names of GearHandle objects :
// (fixme: will have to iterate over daughters as well ... )
if ( gearH->name() == "TPCParameters" ) { gearMgr->setTPCParameters ( dynamic_cast<gear::TPCParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "EcalBarrelParameters" ) { gearMgr->setEcalBarrelParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "EcalEndcapParameters" ) { gearMgr->setEcalEndcapParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "EcalPlugParameters" ) { gearMgr->setEcalPlugParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "YokeBarrelParameters" ) { gearMgr->setYokeBarrelParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "YokeEndcapParameters" ) { gearMgr->setYokeEndcapParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "YokePlugParameters" ) { gearMgr->setYokePlugParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "HcalBarrelParameters" ) { gearMgr->setHcalBarrelParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "HcalEndcapParameters" ) { gearMgr->setHcalEndcapParameters( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "HcalRingParameters" ) { gearMgr->setHcalRingParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "LcalParameters" ) { gearMgr->setLcalParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "LHcalParameters" ) { gearMgr->setLHcalParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "BeamCalParameters" ) { gearMgr->setBeamCalParameters ( dynamic_cast<gear::CalorimeterParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "VXDParameters" ) { gearMgr->setVXDParameters ( dynamic_cast<gear::ZPlanarParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "FTDParameters" ) { gearMgr->setFTDParameters ( dynamic_cast<gear::FTDParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "SITParameters" ) { gearMgr->setSITParameters ( dynamic_cast<gear::ZPlanarParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "SETParameters" ) { gearMgr->setSETParameters ( dynamic_cast<gear::ZPlanarParameters* >( gearH->takeGearObject() ) ) ; }
else if( gearH->name() == "SiPlanesParameters" ) { gearMgr->setSiPlanesParameters ( dynamic_cast<gear::SiPlanesParameters* >( gearH->takeGearObject() ) ) ; }
else {
gearMgr->setGearParameters( gearH->name() , gearH->takeGearObject() ) ;
}
}
std::cout << std::endl ;
//------------------ Bfield ----------------------------------
// fixme: for now we just assume a constant field - should be a real field map ...
double origin[3] = { 0., 0., 0. } ;
double bfield[3] ;
OverlayedField ovField = lcdd.field() ;
ovField.magneticField( origin , bfield ) ;
gearMgr->setBField( new gear::ConstantBField( gear::Vector3D( bfield[0]/ tgeo::tesla , bfield[1]/ tgeo::tesla , bfield[2] / tgeo::tesla ) ) ) ;
//----------------- PointProperties and DistanceProperties -------------------------
TGeoManager *geoManager = world.volume()->GetGeoManager();
gearMgr->setPointProperties( new gear::TGeoGearPointProperties( geoManager ) ) ;
gearMgr->setDistanceProperties( new gear::TGeoGearDistanceProperties( geoManager ) ) ;
//----------------------------------------------------------------------------------
return gearMgr ;
}
}