13#define TMDCWire_INLINE_DEFINE_HERE
18#include "TrkReco/TMDCWire.h"
19#include "MdcGeomSvc/IMdcGeomSvc.h"
20#include "TrkReco/TMDC.h"
21#include "TrkReco/TMDCTsf.h"
22#include "TrkReco/TMDCUtil.h"
24TMDC* TMDCWire::_cdc = 0;
32 : _forwardPosition(
w->Backward() * 0.1 )
33 , _backwardPosition(
w->Forward() * 0.1 )
34 , _tension(
w->Tension() )
35 , _direction(
w->Backward() -
w->Forward() ) {
43 _layerId =
w->Layer();
47 _xyPosition = 0.5 * ( _forwardPosition + _backwardPosition );
48 _xyPosition.setZ( 0. );
49 _direction = _direction.unit();
56 std::cout <<
"w " << _id;
57 std::cout <<
",local " << _localId;
58 std::cout <<
",layer " << _layerId;
61 std::cout << std::endl;
62 if ( msg.find(
"neighbor" ) != std::string::npos ||
63 msg.find(
"detail" ) != std::string::npos )
65 for (
unsigned i = 0; i < 6; i++ )
68 if ( msg.find(
"tsf" ) != std::string::npos || msg.find(
"detail" ) != std::string::npos )
70 if ( _tsf ) _tsf->dump(
"", pre +
" " );
75 double A = 47.35E-6 / _tension;
77 ( z - _backwardPosition.z() ) / _direction.z() * _direction + _backwardPosition;
79 double zinit = x0.z();
81 wire.setX( _forwardPosition.x() - _backwardPosition.x() );
82 wire.setY( _forwardPosition.y() - _backwardPosition.y() );
83 wire.setZ( _forwardPosition.z() - _backwardPosition.z() );
84 double lxz = sqrt( wire.z() * wire.z() + wire.x() * wire.x() );
85 double Zp = ( zinit - _backwardPosition.z() ) * lxz / wire.z();
86 double x = _direction.x() * ( zinit - _backwardPosition.z() ) / _direction.z() +
87 _backwardPosition.x();
88 double y = ( A * ( Zp - lxz ) + wire.y() / lxz ) * Zp + _backwardPosition.y();
96 static const unsigned nLayers = _cdc->nLayers();
101 float phi0 = _cdc->layer( l )->offset();
102 int nWir = (int)_cdc->layer( l )->nWires();
103 float phi = phi0 + local * 2 *
M_PI / nWir;
110 if ( l == 0 )
return 0;
112 if ( _cdc->layer( l )->superLayerId() !=
s )
return 0;
113 phi0 = _cdc->layer( l )->offset();
114 nWir = _cdc->layer( l )->nWires();
115 local = (int)( ( phi - phi0 ) / ( 2 *
M_PI / nWir ) );
129 else return _cdc->wire( l, local + 1 );
141 if ( i ==
WireLeft )
return _cdc->wire( l, local - 1 );
142 else return _cdc->wire( l, local + 1 );
146 if ( l == nLayers - 1 )
return 0;
148 if ( _cdc->layer( l )->superLayerId() !=
s )
return 0;
149 phi0 = _cdc->layer( l )->offset();
150 nWir = _cdc->layer( l )->nWires();
151 local = (int)( ( phi - phi0 ) / ( 2 *
M_PI / nWir ) );
164 else return _cdc->wire( l, local + 1 );
242 if ( _localId == 39 )
return -1;
243 else return _localId;
248 if ( _localId == 43 )
return -1;
249 else return _localId;
254 if ( _localId == 47 )
return -1;
255 else return _localId;
260 if ( _localId == 55 )
return -1;
261 else return _localId;
266 if ( _localId == 63 )
return -1;
267 else return _localId;
272 if ( _localId == 71 )
return -1;
273 else return _localId;
276 if ( _layerId == 6 || _layerId == 7 )
278 if ( _localId == 79 )
return -1;
279 else return _localId;
282 if ( _layerId == 8 || _layerId == 9 )
284 if ( _localId == 75 )
return -1;
285 else return _localId;
288 if ( _layerId == 10 || _layerId == 11 )
290 if ( _localId == 87 )
return -1;
291 else return _localId;
294 if ( _layerId == 12 || _layerId == 13 )
296 if ( _localId == 99 )
return -1;
297 else return _localId;
300 if ( _layerId == 14 || _layerId == 15 )
302 if ( _localId == 111 )
return -1;
303 else return _localId;
306 if ( _layerId == 16 || _layerId == 17 )
308 if ( _localId == 127 )
return -1;
309 else return _localId;
312 if ( _layerId == 18 || _layerId == 19 )
314 if ( _localId == 139 )
return -1;
315 else return _localId;
318 if ( _layerId >= 20 && _layerId <= 23 )
320 if ( _localId == 159 )
return -1;
321 else return _localId;
324 if ( _layerId >= 24 && _layerId <= 27 )
326 if ( _localId == 175 )
return -1;
327 else return _localId;
330 if ( _layerId >= 28 && _layerId <= 31 )
332 if ( _localId == 207 )
return -1;
333 else return _localId;
336 if ( _layerId >= 32 && _layerId <= 35 )
338 if ( _localId == 239 )
return -1;
339 else return _localId;
342 if ( _layerId >= 36 && _layerId <= 39 )
344 if ( _localId == 255 )
return -1;
345 else return _localId;
348 if ( _layerId >= 40 && _layerId <= 42 )
350 if ( _localId == 287 )
return -1;
351 else return _localId;
428 if ( _localId == 0 )
return 40;
429 else return _localId;
434 if ( _localId == 0 )
return 44;
435 else return _localId;
440 if ( _localId == 0 )
return 48;
441 else return _localId;
446 if ( _localId == 0 )
return 56;
447 else return _localId;
452 if ( _localId == 0 )
return 64;
453 else return _localId;
458 if ( _localId == 0 )
return 72;
459 else return _localId;
462 if ( _layerId == 6 || _layerId == 7 )
464 if ( _localId == 0 )
return 80;
465 else return _localId;
468 if ( _layerId == 8 || _layerId == 9 )
470 if ( _localId == 0 )
return 76;
471 else return _localId;
474 if ( _layerId == 10 || _layerId == 11 )
476 if ( _localId == 0 )
return 88;
477 else return _localId;
480 if ( _layerId == 12 || _layerId == 13 )
482 if ( _localId == 0 )
return 100;
483 else return _localId;
486 if ( _layerId == 14 || _layerId == 15 )
488 if ( _localId == 0 )
return 112;
489 else return _localId;
492 if ( _layerId == 16 || _layerId == 17 )
494 if ( _localId == 0 )
return 128;
495 else return _localId;
498 if ( _layerId == 18 || _layerId == 19 )
500 if ( _localId == 0 )
return 140;
501 else return _localId;
504 if ( _layerId >= 20 && _layerId <= 23 )
506 if ( _localId == 0 )
return 160;
507 else return _localId;
510 if ( _layerId >= 24 && _layerId <= 27 )
512 if ( _localId == 0 )
return 176;
513 else return _localId;
516 if ( _layerId >= 28 && _layerId <= 31 )
518 if ( _localId == 0 )
return 208;
519 else return _localId;
522 if ( _layerId >= 32 && _layerId <= 35 )
524 if ( _localId == 0 )
return 240;
525 else return _localId;
528 if ( _layerId >= 36 && _layerId <= 39 )
530 if ( _localId == 0 )
return 256;
531 else return _localId;
534 if ( _layerId >= 40 && _layerId <= 42 )
536 if ( _localId == 0 )
return 288;
537 else return _localId;
544 back = _backwardPosition;
547 if ( !( z > _backwardPosition.z() && z < _forwardPosition.z() ) )
567 back.setY( (
double)ybSag );
568 HepVector3D v_aux( _forwardPosition.x() - _backwardPosition.x(), yfSag - ybSag,
569 _forwardPosition.z() - _backwardPosition.z() );
577#ifdef TRKRECO_DEBUG_DETAIL
580 std::cout <<
"TMDCWire::localIdDifference !!!";
581 std::cout <<
"super layer assumption violation" << std::endl;
589 int difR = nWires - diff;
590 if ( diff < difR )
return diff;
595 int difR = nWires + diff;
596 if ( -diff < difR )
return diff;
HepGeom::Point3D< double > HepPoint3D
HepGeom::Vector3D< double > HepVector3D
A class to represent a wire layer.
unsigned nWires(void) const
returns # of wires.
unsigned id(void) const
returns id.
unsigned localLayerId(void) const
returns local layer id in a super layer.
const TMDCLayer *const layer(void) const
returns a pointer to a layer.
virtual ~TMDCWire()
Destructor.
unsigned localId(void) const
returns local id in a wire layer.
unsigned layerId(void) const
returns layer id.
TMDCWire(const MdcGeoWire *, TMDCLayer *)
Constructor.
const HepPoint3D & xyPosition(void) const
returns middle position of a wire. z componet is 0.
unsigned superLayerId(void) const
returns super layer id.
const TMDCWire *const neighbor(unsigned) const
returns a pointer to a neighbor wire.
int localIdForMinus(void) const
returns localId but if 0, return maxLocalId + 1.
int localIdDifference(const TMDCWire &) const
returns local id difference.
void dump(const std::string &message=std::string(""), const std::string &prefix=std::string("")) const
dumps debug information.
int localIdForPlus(void) const
returns localId but if maxLocalId, return -1.
void wirePosition(float zPosition, HepPoint3D &xyPosition, HepPoint3D &backwardPosition, HepVector3D &direction) const
calculates position and direction vector with sag correction.
static TMDC * getTMDC(void)