14 #include <CLHEP/Vector/EulerAngles.h>
15 #include <CLHEP/Vector/Rotation.h>
18 #include <gear/BField.h>
20 #include <gearimpl/FTDParametersImpl.h>
21 #include <gearimpl/FTDLayerLayoutImpl.h>
22 #include <gearimpl/Vector3D.h>
25 #include <marlin/Global.h>
26 #include <streamlog/streamlog.h>
29 #include "UTIL/LCTrackerConf.h"
30 #include <UTIL/ILDConf.h>
38 const double & pitchRear):
39 SiStripGeom(detector),_ftdParams(0),_ftdLayer(0),_pitchFront(pitchFront),
44 streamlog_out(ERROR) <<
"Wrong instantiation of the class. " <<
45 "See SiStripBuilder class, should have an incoherence!" <<
63 const gear::BField & bField = marlin::Global::GEAR->getBField();
67 _magField.setX( (bField.at( auxvec )).x() *
T);
68 _magField.setY( (bField.at( auxvec )).y() *
T);
69 _magField.setZ( (bField.at( auxvec )).z() *
T);
71 catch(gear::UnknownParameterException&
e)
73 std::cout <<
"No magnetic field found in gear file!" << std::endl;
79 _ftdParams =
const_cast<gear::FTDParameters *
>(
80 &(marlin::Global::GEAR->getFTDParameters()) );
82 catch(gear::UnknownParameterException& e)
84 std::cout <<
"No FTD found in gear file" << std::endl;
90 _ftdLayer =
const_cast<gear::FTDLayerLayout *
>(
93 catch(gear::UnknownParameterException & e)
95 std::cout <<
"Unexpected Error! No FTDLayerLayout found in"
96 <<
" FTDParameters class" << std::endl;
145 for(
unsigned int i=0; i < ridsize; ++i)
180 const double xmaxsensorup =
_ftdLayer->getSensitiveLengthMax(i)*
mm;
181 const double ymiddlesensorup =
_ftdLayer->getSensitiveWidth(i)*
mm/2.0;
182 const double widthmiddle = xmaxsensorup-
183 (2.0*tan(
_ftdLayer->getPhiHalfDistance(i))*ymiddlesensorup);
196 const int & stripID, UTIL::BitField64 * cellEnc)
199 (*cellEnc)[
"subdet"]=ILDDetID::FTD;
200 short int layer = bfmap[
"layer"];
201 short int module= bfmap[
"module"];
202 short int sensor= bfmap[
"sensor"];
208 (*cellEnc)[
"side"]=abs(realLayer)/realLayer;
209 (*cellEnc)[
"layer"]=abs(realLayer);
210 (*cellEnc)[
"module"]=module+1;
211 (*cellEnc)[
"sensor"]=sensor;
212 (*cellEnc)[
"stripType"]=stripType;
213 (*cellEnc)[
"stripID"]=stripID;
220 UTIL::BitField64 cellDec(LCTrackerCellID::encoding_string());
221 cellDec.setValue((lcio::long64)cellID0);
223 cellDec[
"sensor"] = 0;
225 return cellDec.lowWord();
232 UTIL::BitField64 cellDec(
"stripType:2,stripID:11");
233 cellDec.setValue((lcio::long64)cellID1);
236 int stripID = cellDec[
"stripID"];
238 return std::pair<StripType,int>(stripType,stripID);
245 if(cellDec[
"subdet"] != ILDDetID::FTD)
247 streamlog_out(ERROR) <<
"SiStripGeomFTD::decodeStripID "
248 <<
" - subdetector is not FTD!!"
254 int stripID = cellDec[
"stripID"];
256 return std::pair<StripType,int>(stripType,stripID);
269 UTIL::BitField64 cellDec(LCTrackerCellID::encoding_string());
270 cellDec.setValue((lcio::long64)cellID);
299 if(cellDec[
"subdet"] != ILDDetID::FTD)
301 streamlog_out(ERROR) <<
"SiStripGeomFTD::decodeCellID0 "
302 <<
" - subdetector is not FTD!!"
309 std::map<std::string,int> codmap;
311 codmap[
"module"]= cellDec[
"module"]-1;
312 codmap[
"sensor"]= cellDec[
"sensor"];
323 streamlog_out(ERROR) <<
324 "SiStripGeomFTD::getLadderOffsetX - layerID: " <<
325 layerID <<
" out of range!!!" << std::endl;
364 CLHEP::Hep3Vector localPoint(globalPoint);
367 const double phi0 =
_ftdLayer->getPhiPetalCd(diskID,petalID);
374 const double zsensorCd =
_ftdLayer->getSensitiveZposition(diskID,petalID,sensorID)*
mm;
375 const int zsign = (int)(zsensorCd/fabs(zsensorCd));
376 const double sensorthickness =
_ftdLayer->getSensitiveThickness(diskID)*
mm;
378 double zsensor = zsensorCd+zsign*sensorthickness/2.0;
382 zsensor = zsensorCd-zsign*sensorthickness/2.0;
386 const int xsign = (int)(fabs(globalPoint.getX())/globalPoint.getX());
387 const double xsensorCd = xsign*(
_ftdLayer->getSensitiveRinner(diskID)*
mm)*
390 const int ysign = (int)(fabs(globalPoint.getY())/globalPoint.getY());
391 const double ysensorCd = ysign*(
_ftdLayer->getSensitiveRinner(diskID)*
mm)*
395 CLHEP::Hep3Vector localOrigin(xsensorCd, ysensorCd, zsensor);
398 localPoint -= localOrigin;
406 double rotZangle = -phi0;
407 double rotYangle = -M_PI/2.0;
408 if( (sensorID < 3 && zsign > 0) ||
409 (sensorID > 2 && zsign < 0) )
411 rotZangle = M_PI-phi0;
412 rotYangle = M_PI/2.0;
414 localPoint.rotateZ(rotZangle);
415 localPoint.rotateY(rotYangle);
419 const double longtrapezoidedge =
_ftdLayer->getSensitiveLengthMax(diskID)*
mm;
420 localPoint += CLHEP::Hep3Vector(0.0,longtrapezoidedge/2.,0.0);
422 streamlog_out(DEBUG4) <<
423 "============================================\n"
424 <<
"SiStripGeomFTD::transformPointToLocal \n"
425 <<
" Sensor ID (C-vector style): \n "
426 <<
" DISK: "<<diskID<<
" PETAL: "<<petalID<<
" SENSOR: " << sensorID <<
"\n"
427 <<
" Petal Phi: " << phi0*180.0/M_PI <<
"\n"
428 << std::setprecision(3)
429 <<
" Origen of Local frame [mm]: (" << xsensorCd/
mm <<
","
430 << ysensorCd/
mm <<
"," << zsensor/
mm <<
")\n"
431 <<
" Hit (Global ref. frame) [mm]:" << globalPoint/
mm <<
"\n"
432 <<
" Hit (Local ref. frame) [mm]:" << localPoint/
mm <<
"\n"
433 <<
" Maximum dimensions: x < " << sensorthickness/
mm
434 <<
", y < " << longtrapezoidedge/
mm <<
", z < "
436 <<
"============================================" << std::endl;
447 short int sensorID,
const CLHEP::Hep3Vector & globalVec)
450 CLHEP::Hep3Vector localVec(globalVec);
452 const double phi0 =
_ftdLayer->getPhiPetalCd(diskID,petalID);
455 const int zsign = abs(realLayerID)/realLayerID;
457 double rotZangle = -phi0;
458 double rotYangle = -M_PI/2.0;
460 if( (sensorID < 3 && zsign > 0) ||
461 (sensorID > 2 && zsign < 0) )
463 rotZangle = M_PI-phi0;
464 rotYangle = M_PI/2.0;
466 localVec.rotateZ(rotZangle);
467 localVec.rotateY(rotYangle);
480 std::cout <<
"SiStripGeomFTD::transformMatxToLocal -- METHOD NOT IMPLEMENTED"
484 CLHEP::HepMatrix localMatrix(3,3,0);
487 CLHEP::HepMatrix rotMatrix(3,3,0);
488 CLHEP::HepMatrix rotMatrixT(3,3,0);
498 CLHEP::HepRotation rotMatrixZ(CLHEP::Hep3Vector(0,0,1),-phi);
499 CLHEP::HepRotation rotMatrixY(CLHEP::Hep3Vector(0,1,0),+theta);
500 CLHEP::HepRotation rotMatrixHelp(rotMatrixY*rotMatrixZ);
502 CLHEP::HepRotation rotMatrixHelpT(rotMatrixHelp.inverse());
504 for (
int i=0; i<3; ++i) {
505 for (
int j=0; j<3; ++j) {
506 rotMatrix[i][j] = rotMatrixHelp[i][j];
507 rotMatrixT[i][j] = rotMatrixHelpT[i][j];
514 streamlog_out(ERROR) <<
"Unknown gear type!"
521 localMatrix = rotMatrix*globalMatrix*rotMatrixT;
535 short int petalID,
short int sensorID,
const CLHEP::Hep3Vector & localPoint)
538 CLHEP::Hep3Vector globalPoint(localPoint);
546 const int zsign = abs(realLayerID)/realLayerID;
547 double rotZangle = -phi;
548 double rotYangle = -theta;
549 if( (sensorID < 3 && zsign > 0) ||
550 (sensorID > 2 && zsign < 0) )
552 rotZangle = M_PI-phi;
559 const double xlocalCd = 0.0;
560 const double ylocalCd =
_ftdLayer->getSensitiveLengthMax(diskID)/2.0*
mm;
561 const double zlocalCd = 0.0;
563 globalPoint -= CLHEP::Hep3Vector(xlocalCd,ylocalCd,zlocalCd);
566 globalPoint.rotateY(-rotYangle);
567 globalPoint.rotateZ(-rotZangle);
573 const double zsensorCd =
_ftdLayer->getSensitiveZposition(diskID,petalID,sensorID)*
mm;
574 const double sensorthickness =
_ftdLayer->getSensitiveThickness(diskID)*
mm;
576 double zsensor = zsensorCd+zsign*sensorthickness/2.0;
580 zsensor = zsensorCd-zsign*sensorthickness/2.0;
590 const double xsensorCd =
_ftdLayer->getSensitiveRinner(diskID)*
mm*cos(phi);
591 const double ysensorCd =
_ftdLayer->getSensitiveRinner(diskID)*
mm*sin(phi);
592 CLHEP::Hep3Vector localOrigin(xsensorCd,ysensorCd,zsensor);
595 globalPoint += localOrigin;
597 streamlog_out(DEBUG4) <<
598 "============================================\n"
599 <<
"SiStripGeomFTD::transformPointToGlobal \n"
600 <<
" Sensor ID (C-vector style): \n "
601 <<
" DISK: "<<diskID<<
" PETAL: "<<petalID<<
" SENSOR: " << sensorID <<
"\n"
602 <<
" Petal Phi: " << phi*180.0/M_PI <<
"\n"
603 << std::setprecision(3)
604 <<
" Origen of Local frame [mm]: (" << xsensorCd/
mm <<
","
605 << ysensorCd/
mm <<
"," << zsensor/
mm <<
")\n"
606 <<
" Hit (Global ref. frame) [mm]:" << globalPoint/
mm <<
"\n"
607 <<
" Hit (Local ref. frame) [mm]:" << localPoint/
mm <<
"\n"
608 <<
"============================================" << std::endl;
619 short int sensorID,
const CLHEP::Hep3Vector & localVec)
622 CLHEP::Hep3Vector globalVec(localVec);
630 const int zsign = abs(realLayerID)/realLayerID;
631 double rotZangle = -phi;
632 double rotYangle = -theta;
633 if( (sensorID < 3 && zsign > 0) ||
634 (sensorID > 2 && zsign < 0) )
636 rotZangle = M_PI-phi;
639 globalVec.rotateY(-rotYangle);
640 globalVec.rotateZ(-rotZangle);
653 std::cout <<
"SiStripGeomFTD::transformMatxToGlobal -- METHOD NOT IMPLEMENTED"
657 CLHEP::HepMatrix globalMatrix(3,3,0);
660 CLHEP::HepMatrix rotMatrix(3,3,0);
661 CLHEP::HepMatrix rotMatrixT(3,3,0);
671 CLHEP::HepRotation rotMatrixY(CLHEP::Hep3Vector(0,1,0),-theta);
672 CLHEP::HepRotation rotMatrixZ(CLHEP::Hep3Vector(0,0,1),+phi);
673 CLHEP::HepRotation rotMatrixHelp(rotMatrixZ*rotMatrixY);
675 CLHEP::HepRotation rotMatrixHelpT(rotMatrixHelp.inverse());
677 for (
int i=0; i<3; ++i) {
678 for (
int j=0; j<3; ++j) {
679 rotMatrix[i][j] = rotMatrixHelp[i][j];
680 rotMatrixT[i][j] = rotMatrixHelpT[i][j];
687 streamlog_out(ERROR) <<
"Unknown gear type!"
694 globalMatrix = rotMatrix*localMatrix*rotMatrixT;
708 short int sensorID,
const CLHEP::Hep3Vector & point)
const
711 const double phi0 =
_ftdLayer->getPhiHalfDistance(diskID);
714 const double xmax =
_ftdLayer->getSensitiveThickness(diskID)*
mm;
715 const double ygap = (
_ftdLayer->getSensitiveWidth(diskID)*
mm - point.getZ())*tan(phi0);
716 const double ymax =
_ftdLayer->getSensitiveLengthMax(diskID)*
mm-ygap;
717 const double zmax =
_ftdLayer->getSensitiveWidth(diskID)*
mm;
721 if( (point.getX() > xmax+
EPS*
um) || (point.getX() < -
EPS*
um) )
723 streamlog_out(ERROR) << std::setprecision(3)
724 <<
" position out of sensor! X [um] = "
725 << point.getX()/
um <<
" (Maximum x: " << xmax/
um <<
")" << std::endl;
729 if( (point.getY() > ymax+
EPS*
um) || (point.getY() < ygap-
EPS*
um) )
732 streamlog_out(ERROR) << std::setprecision(3)
733 <<
" position out of sensor! Y [mm] = "
734 << point.getY()/
mm <<
" (Maximum y: " << ymax/
mm
735 <<
", Minimum y:" << ygap/
mm <<
")" << std::endl;
739 if( (point.getZ() > zmax+
EPS*
um) || (point.getZ() < -
EPS*
um) )
741 streamlog_out(ERROR) << std::setprecision(3)
742 <<
" position out of sensor! Z [mm] = "
743 << point.getZ()/
mm <<
" (Maximum z: " << zmax/
mm <<
")" << std::endl;
766 double actualSensorWidth = (
getSensorWidthMax(layerID) - 2*tanAlpha*point.getZ());
769 CLHEP::Hep3Vector recalcPoint(point.getX(), point.getY() -
773 (recalcPoint.getX() < (-
EPS*
um)) ||
774 (recalcPoint.getY() > (actualSensorWidth+
EPS*
um))
775 || (recalcPoint.getY() < (-
EPS*
um)) ||
777 (recalcPoint.getZ() < (-
EPS*
um)) )
792 std::vector<int>
const * sensorNStrips = 0;
794 if(sensorID == 1 || sensorID == 2)
798 else if(sensorID == 3 || sensorID == 4)
804 streamlog_out(ERROR) <<
"SiStripGeomFTD::getSensorNStrips "
805 <<
" - Inconsistent ID of sensor: '" << sensorID <<
"'" << std::endl;
809 if(sensorNStrips->size()>(
unsigned short int)diskID)
811 return (*sensorNStrips)[diskID];
874 const int & stripID)
const
877 const double yatz0 =
getStripPosY(diskID,sensorID,stripID,0.0);
880 const double Dy = yatzL-yatz0;
881 const int u_sign = fabs(Dy)/Dy;
886 return CLHEP::Hep3Vector(0.0,((
double)u_sign)*sin(alpha),cos(alpha));
894 const int & stripIDFront,
const int & stripIDRear)
const
897 const double yatz0Front =
getStripPosY(diskID,1,stripIDFront,0.0);
898 const double yatz0Rear =
getStripPosY(diskID,3,stripIDRear,0.0);
906 uRear.rotateZ(-M_PI);
909 const double extProd = uFront.getY()*uRear.getZ()-uFront.getZ()*uRear.getY();
910 const double tR = (yatz0RearPrime-yatz0Front)*uFront.getZ()/extProd;
912 const double y = yatz0RearPrime+tR*uRear.getY();
913 const double z = tR*uRear.getZ();
924 double stAngle = 0.0;
926 if(sensorID == 3 || sensorID == 4)
942 const double & posRPhi,
const double & posZ)
const
946 double posRPhiRot=0.;
950 if(sensPitch < 1
e-40)
952 streamlog_out(ERROR) <<
"SiStripGeomFTD::getStripID "
953 <<
"- division by zero (sensPitch is zero)!!!"
969 CLHEP::Hep3Vector(0.0,posRPhi,posZ) );
970 posRPhiRot = pointRot.getY();
971 zRot = pointRot.getZ();
974 const double tanPhi = tan(
_ftdLayer->getPhiHalfDistance(diskID));
977 stripID = floor((posRPhiRot-yorigen)/sensPitch);
978 if(stripID >= sensNStrips)
980 stripID = sensNStrips - 1;
984 if(stripID >= sensNStrips)
986 streamlog_out(ERROR) <<
"SiStripGeom::getStripID "
987 <<
"- stripID in RPhi greater than number of strips!!!"
1050 const double & posZ)
const
1054 streamlog_out(ERROR)
1055 << std::setiosflags(std::ios::fixed | std::ios::internal )
1056 << std::setprecision(2)
1057 <<
"SiStripGeomFTD::getSensorPitch - posZ: "
1058 << std::setw(4) << posZ <<
" out of range!!!"
1059 << std::resetiosflags(std::ios::showpos)
1060 << std::setprecision(0)
1067 const double tanPhi = tan(
_ftdLayer->getPhiHalfDistance(diskID));
1069 CLHEP::Hep3Vector(0.,0.0,posZ) );
1072 const double width_z = 2.0*(
getSensorLength(diskID)-point.getZ())*tanPhi;
1084 const int & stripID,
const double & posZ)
const
1089 streamlog_out(ERROR) <<
"SoStripGeomFTD::getStripPosY "
1090 <<
"- incoherent stripID=" << stripID <<
"!!"
1097 sensorID, CLHEP::Hep3Vector(0.0,0.0,posZ) ).getZ();
1099 const double tanPhi = tan(
_ftdLayer->getPhiHalfDistance(diskID));
1104 if(sensPitch < 1
e-40)
1106 streamlog_out(ERROR) <<
"SiStripGeomFTD::getStripPosY "
1107 <<
"- division by zero (sensPitch is zero)!!!"
1113 double posRPhi = yorigen+sensPitch*(stripID + 0.5);
1117 streamlog_out(ERROR)
1118 <<
"SiStripGeomFTD::getStripPosY - position out of sensor!!!"
1125 sensorID,CLHEP::Hep3Vector(0.0,posRPhi,zPosPrime));
1127 return pointInSRL.getY();
1136 const int & sensorID,
const CLHEP::Hep3Vector & point)
const
1138 CLHEP::Hep3Vector pointPrime(point);
1148 CLHEP::Hep3Vector rotcentre(0.0,ycentre,zcentre);
1150 pointPrime -= rotcentre;
1157 rotcentre.rotateX(-stAngle);
1159 pointPrime += rotcentre;
1176 const int & sensorID,
const CLHEP::Hep3Vector & pointPrime)
const
1178 CLHEP::Hep3Vector point(pointPrime);
1186 CLHEP::Hep3Vector rotcentre(0.0,ycentre,zcentre);
1187 rotcentre.rotateX(-stAngle);
1193 point += CLHEP::Hep3Vector(0.0,ycentre,zcentre);
1211 streamlog_out(MESSAGE3) << std::endl
1215 <<
"Gear parameters:"
1218 << std::endl << std::endl;
1221 streamlog_out(MESSAGE3) <<
" B field [T]: "
1223 << std::endl << std::endl;
1231 streamlog_out(MESSAGE2) << std::endl;
1232 streamlog_out(MESSAGE2) <<
" Layer: " <<
_layerRealID[i] << std::endl;
1234 streamlog_out(MESSAGE2) <<
" LayerType: " <<
"pixel" << std::endl;
1237 streamlog_out(MESSAGE2) <<
" LayerType: " <<
"strip" << std::endl;
1239 streamlog_out(MESSAGE2) <<
" NumberOfLadders: " <<
_numberOfLadders[i] << std::endl;
1240 streamlog_out(MESSAGE2) <<
" Radius[mm]: " <<
_layerRadius[i]/
mm << std::endl;
1241 streamlog_out(MESSAGE2) <<
" Width[mm]: " <<
_ladderWidth[i]/
mm << std::endl;
1242 streamlog_out(MESSAGE2) <<
" Length[mm]: " <<
_ladderLength[i]/
mm << std::endl;
1243 streamlog_out(MESSAGE2) <<
" Petal SemiAngle: " <<
_layerHalfPhi[i] << std::endl;
1244 streamlog_out(MESSAGE2) <<
" Phi0: " <<
_layerPhi0[i] << std::endl;
1245 streamlog_out(MESSAGE2) <<
" Theta: " <<
_layerTheta[i] << std::endl;
1246 streamlog_out(MESSAGE2) <<
" OffsetY[mm]: " <<
_ladderOffsetY[i]/
mm << std::endl;
1253 streamlog_out(ERROR) <<
"Unknown gear type!"
1265 streamlog_out(MESSAGE2) <<
" * Parameters: " <<
_sensorThick[layerID]/
um <<
"um thick, "
std::vector< double > _sensorWidth
virtual double getSensorThick(short int layerID) const
Get sensor thickness.
virtual double getLadderPhi(short int layerID, short int ladderID) const
Get ladder rotation - phi angle.
virtual ~SiStripGeomFTD()
Destructor.
std::vector< int > _sensorNStripsInRear
std::vector< double > _ladderOffsetZ
std::vector< double > _ladderThick
virtual bool isPointOutOfSensor(short int layerID, const CLHEP::Hep3Vector &point) const
Get info whether the given point is out of Si sensor (parameters: layerID, space point in local ref...
std::vector< int > _numberOfLadders
CLHEP::Hep3Vector Vector3D
virtual int cellID0withSensor0(const int &cellID0) const
Returns the input cellID0 where the field sensor is put to 0.
gear::FTDLayerLayout * _ftdLayer
double getLadderOffsetX(const short int &layerID) const
virtual double getSensorLength(short int layerID) const
Get sensor length.
CLHEP::Hep3Vector _magField
std::vector< double > _layerHalfPhi
virtual double getLadderTheta(short int diskID) const
Method impossed by consistent with the mother class.
Gear geometry class - holds all geometry information about silicon strip sensors. ...
std::vector< int > _layerRealID
virtual CLHEP::Hep3Vector transformPointToGlobal(short int layerID, short int ladderID, short int sensorID, const CLHEP::Hep3Vector &point)
Transform given point from local ref. system (sensor) to global ref. system.
virtual short int getLayerIDCTypeNo(int realLayerID) const
Transform real layer ID to C-type numbering 0 - n ...
std::vector< double > _ladderOffsetY
virtual double getSensorWidthMin(short int layerID) const
Get sensor width 2 (the narrower one for forward-type sensors)
virtual CLHEP::Hep3Vector getCrossLinePoint(const int &diskID, const int &sensorID, const int &stripIDFront, const int &stripIDRear) const
Get the point which crosses two strips.
virtual double getSensorPitch(const int &diskID, const int &sensorID, const double &posZ) const
Get sensor pitch for strips in the local ref.
std::vector< double > _sensorPitchInRear
virtual CLHEP::Hep3Vector transformVecToGlobal(short int layerID, short int ladderID, short int sensorID, const CLHEP::Hep3Vector &vec)
Transform given vector from local ref. system (sensor) to global ref. system.
virtual CLHEP::HepMatrix transformMatxToGlobal(short int layerID, short int ladderID, const CLHEP::HepMatrix &matrix)
Transform given diagonal matrix from local ref. system (sensor) to global ref. system.
std::vector< double > _layerTheta
std::vector< int > _layerType
std::vector< double > _sensorThick
virtual std::pair< StripType, int > decodeStripID(const int &encodedStripID) const
Method to extract strip and strip type (cellID1)
double getStereoAngle(const int &diskID, const int &sensorID) const
Get the stereo angle of the strips.
virtual bool isPointInsideSensor(short int layerID, short int ladderID, short int sensorID, const CLHEP::Hep3Vector &point) const
Get info whether the given point is inside of Si sensor.
std::vector< double > _layerZ
virtual CLHEP::Hep3Vector transformVecToLocal(short int layerID, short int ladderID, short int sensorID, const CLHEP::Hep3Vector &vec)
Transform given vector from global ref. system to local ref. system (sensor)
std::vector< double > _ladderLength
std::vector< double > _ladderZOffsetSign0
virtual CLHEP::HepMatrix transformMatxToLocal(short int layerID, short int ladderID, const CLHEP::HepMatrix &matrix)
Transform given matrix from global ref. system to local ref. system (sensor)
short int _numberOfLayers
std::vector< int > _sensorNStripsInFront
virtual CLHEP::Hep3Vector transformPointToRotatedLocal(const int &diskID, const int &sensorID, const CLHEP::Hep3Vector &point) const
Transforming a given point to the local ref.
std::vector< double > _sensorWidth2
virtual double getStripPosY(const int &diskID, const int &sensorID, const int &stripID, const double &posZ) const
Get Y-centered position in the local ref. system for the stripID.
std::vector< double > _ladderWidth
SiStripGeomFTD(const std::string &, const double &pitchFront, const double &pitchRear)
Constructor.
virtual void updateCanonicalCellID(const int &cellID, const int &stripType, const int &stripID, UTIL::BitField64 *bf)
Stores the cellID0 and cellID1 of the LCIO object to the file.
std::vector< double > _layerRadius
virtual void printGearParams() const
Method printing general Gear parameters.
std::vector< double > _sensorPitchInFront
virtual std::map< std::string, int > decodeCellID(const UTIL::BitField64 &cellID) const
Method to extract codification ID,.
virtual int getStripID(const int &diskID, const int &sensorID, const double &posRPhi, const double &posZ) const
Get strip ID (in Phi), points are given in local ref.
virtual CLHEP::Hep3Vector transformPointFromRotatedLocal(const int &diskID, const int &sensorID, const CLHEP::Hep3Vector &point) const
Transforming a given point from the reference system rotated around the center of a petal to its loca...
std::vector< double > _layerPetalOpAngle
gear::FTDParameters * _ftdParams
std::vector< double > _sensorLength
virtual void printSensorParams(short int layerID) const
Method printing sensor Gear parameters.
virtual int getSensorNStrips(const int &diskID, const int &sensorID) const
Get number of strips per sensor.
virtual int getLayerRealID(short int layerID) const
Get layer real ID.
virtual double getSensorWidthMax(short int layerID) const
Get sensor width (the wider one for forward-type sensors)
std::vector< double > _layerPhi0
virtual void initGearParams()
Method initializing class - reads Gear parameters from XML file.
virtual CLHEP::Hep3Vector getStripUnitVector(const int &diskID, const int &sensorID, const int &stripID) const
Get director vector of a strip (inside the local Ref.
virtual CLHEP::Hep3Vector transformPointToLocal(short int layerID, short int ladderID, short int sensorID, const CLHEP::Hep3Vector &point)
Transform given point from global ref. system to local ref. system (sensor)
std::vector< double > _layerOuterRadius