6#include "GaudiKernel/ISvcLocator.h"
8#include "MdcGeomSvc/IMdcGeomSvc.h"
10FTGeom::FTGeom() : m_virtualWire( new
FTWire() ) {
11 m_geom_relationship.clear();
12 m_layerGeomInfo.clear();
13 m_superLayerGeomInfo.clear();
15 auto mdcGeomSvc = Gaudi::svcLocator()->service<
IMdcGeomSvc>(
"MdcGeomSvc" );
18 std::cerr <<
"FTGeom::FTGeom: can't get MdcGeomSvc" << std::endl;
23 const int Nlyr = mdcGeomSvc->getLayerSize();
24 const int Nsup = mdcGeomSvc->getSuperLayerSize();
26 if ( !Nwire || !Nlyr )
28 std::cerr <<
"FTFINDER::GEOCDC not found (please put cdctable before l4)" << std::endl;
29 std::cerr <<
"JOB will stop" << std::endl;
45 for (
int wire_id = 0; wire_id < Nwire; wire_id++ )
47 int layer_id = mdcGeomSvc->Wire( wire_id )->Layer();
48 int superLayer_id = mdcGeomSvc->Layer( layer_id )->Sup()->Id();
49 m_geom_relationship.push_back( std::make_tuple( wire_id, layer_id, superLayer_id ) );
52 if ( layer_superLayerId[layer_id] < 0 ) layer_superLayerId[layer_id] = superLayer_id;
53 layer_wireStart[layer_id] = std::min( layer_wireStart[layer_id], wire_id );
54 layer_wireEnd[layer_id] = std::max( layer_wireEnd[layer_id], wire_id );
57 super_layerStart[superLayer_id] = std::min( super_layerStart[superLayer_id], layer_id );
58 super_layerEnd[superLayer_id] = std::max( super_layerEnd[superLayer_id], layer_id );
59 super_wireStart[superLayer_id] = std::min( super_wireStart[superLayer_id], wire_id );
60 super_wireEnd[superLayer_id] = std::max( super_wireEnd[superLayer_id], wire_id );
64 for (
int layer_id = 0; layer_id < Nlyr; layer_id++ )
67 layer_superLayerId[layer_id],
68 layer_wireStart[layer_id],
69 layer_wireEnd[layer_id]
73 for (
int superLayer_id = 0; superLayer_id < Nsup; superLayer_id++ )
77 super_layerStart[superLayer_id],
78 super_layerEnd[superLayer_id],
79 super_wireStart[superLayer_id],
80 super_wireEnd[superLayer_id]
85 for (
int superLayer_id = 0; superLayer_id < Nsup; superLayer_id++ )
87 const MdcGeoSuper* superLayer = mdcGeomSvc->SuperLayer( superLayer_id );
88 m_superLayers.push_back(
new FTSuperLayer( superLayer_id,
89 superLayer2layerStart( superLayer_id ),
90 superLayer2wireStart( superLayer_id ),
91 superLayer2nLayers( superLayer_id ),
92 superLayer2nWires( superLayer_id ) ) );
96 for (
int layer_id = 0; layer_id < Nlyr; layer_id++ )
98 const MdcGeoLayer* layer = mdcGeomSvc->Layer( layer_id );
101 0.1 * ( +layer->
Length() / 2 ),
102 0.1 * ( -layer->
Length() / 2 ),
105 this->layer2layerIndex( layer_id ),
106 this->layer2nWires( layer_id ) ) );
110 for (
auto row : m_geom_relationship )
112 int wire_id = std::get<0>( row );
113 int superLayer_id = std::get<2>( row );
115 const MdcGeoWire* wire = mdcGeomSvc->Wire( wire_id );
116 FTLayer* layer = getLayer( wire2layer( wire_id ) );
117 const float phi = (
const float)2 *
M_PI * wire2wireIndexLayer( wire_id ) /
118 (float)getLayer( wire2layer( wire_id ) )->NWire() +
119 getLayer( wire2layer( wire_id ) )->offset();
121 if ( superLayer_id == 2 || superLayer_id == 3 || superLayer_id == 4 ||
122 superLayer_id == 9 || superLayer_id == 10 )
148 auto mdcGeomSvc = Gaudi::svcLocator()->service<
IMdcGeomSvc>(
"MdcGeomSvc" );
151 std::cerr <<
"FTGeom::FTGeom: can't get MdcGeomSvc" << std::endl;
157 for (
int wire_id = 0; wire_id < Nwire; wire_id++ ) { m_wires[wire_id]->initNeighbor(); }
160static FTGeom* instance_ptr =
nullptr;
165 instance_ptr =
new FTGeom();
166 instance_ptr->init();
static FTGeom * instance()
virtual const int getWireSize()=0
double Radius(void) const
double Length(void) const
double Offset(void) const
HepPoint3D Forward(void) const
HepPoint3D Backward(void) const