#include <CrystalPad.h>
Classes | |
class | padEqual |
equality operator More... | |
Public Types | |
typedef ROOT::Math::Transform3DPJ::Point | Point |
typedef ROOT::Math::Transform3DPJ | Transform3D |
typedef math::XYZVector | XYZPoint |
typedef math::XYZVector | XYZVector |
Public Member Functions | |
const CLHEP::Hep2Vector & | center () const |
get the center | |
CrystalPad () | |
CrystalPad (unsigned number, const std::vector< XYZPoint > &corners, const Transform3D &, double scaf=1., bool bothdirections=false) | |
CrystalPad (unsigned number, const std::vector< CLHEP::Hep2Vector > &corners) | |
Order matters. 1234 2341 3412 4123 are ok but not 1324 .... | |
CrystalPad (const CrystalPad &right) | |
CrystalPad (unsigned number, int onEcal, const std::vector< XYZPoint > &corners, const XYZPoint &origin, const XYZVector &vec1, const XYZVector &vec2) | |
CLHEP::Hep2Vector & | edge (unsigned iside, int n) |
access to the corners in direction iside; n=0,1 | |
CLHEP::Hep2Vector & | edge (CaloDirection) |
access to one corner (NE,NW,SE,SW) | |
void | extrems (double &xmin, double &xmax, double &ymin, double &ymax) const |
xmin xmax, ymin ymax of the quad | |
const std::vector < CLHEP::Hep2Vector > & | getCorners () const |
Check that the point (in the global frame) is inside the crystal. | |
void | getDrawingCoordinates (std::vector< float > &x, std::vector< float > &y) const |
for graphic debugging | |
unsigned | getNumber () const |
access to the number | |
bool | inside (const CLHEP::Hep2Vector &point, bool debug=false) const |
Check that the point (in the local frame) is inside the crystal. | |
bool | operator< (const CrystalPad &quad) const |
CrystalPad & | operator= (const CrystalPad &rhs) |
bool | operator== (const CrystalPad &quad) const |
get the coordinates in the original frame | |
void | print () const |
print | |
void | resetCorners () |
Rescale the Quad to allow for some inaccuracy ... | |
void | setSurvivalProbability (double val) |
double | survivalProbability () const |
access methods to the survivalProbability | |
~CrystalPad () | |
Private Attributes | |
CLHEP::Hep2Vector | center_ |
std::vector< CLHEP::Hep2Vector > | corners_ |
std::vector< CLHEP::Hep2Vector > | dir_ |
bool | dummy_ |
double | epsilon_ |
unsigned | number_ |
ROOT::Math::Rotation3D | rotation_ |
double | survivalProbability_ |
Transform3D | trans_ |
XYZVector | translation_ |
double | yscalefactor_ |
Static Private Attributes | |
static std::vector < CLHEP::Hep2Vector > | aVector |
Definition at line 14 of file CrystalPad.h.
Definition at line 21 of file CrystalPad.h.
Definition at line 20 of file CrystalPad.h.
typedef math::XYZVector CrystalPad::XYZPoint |
Definition at line 19 of file CrystalPad.h.
typedef math::XYZVector CrystalPad::XYZVector |
Definition at line 18 of file CrystalPad.h.
CrystalPad::CrystalPad | ( | ) | [inline] |
CrystalPad::CrystalPad | ( | unsigned | number, |
const std::vector< CLHEP::Hep2Vector > & | corners | ||
) |
Order matters. 1234 2341 3412 4123 are ok but not 1324 ....
Definition at line 33 of file CrystalPad.cc.
References center_, corners_, gather_cfg::cout, dir_, and dummy_.
: corners_(corners), dir_(aVector), number_(number), survivalProbability_(1.), center_(0.,0.), epsilon_(0.001) { // std::cout << " Hello " << std::endl; if(corners.size()!=4) { std::cout << " Try to construct a quadrilateral with " << corners.size() << " points ! " << std::endl; dummy_=true; } else { dummy_=false; // Set explicity the z to 0 ! for(unsigned ic=0; ic<4;++ic) { dir_[ic] = (corners[(ic+1)%4]-corners[ic]).unit(); center_+=corners_[ic]; } center_*=0.25; } // std::cout << " End of 1 constructor " << std::endl; // std::cout << " Ncorners " << corners_.size() << std::endl; // std::cout << " Ndirs " << dir_.size() << std::endl; }
CrystalPad::CrystalPad | ( | unsigned | number, |
int | onEcal, | ||
const std::vector< XYZPoint > & | corners, | ||
const XYZPoint & | origin, | ||
const XYZVector & | vec1, | ||
const XYZVector & | vec2 | ||
) |
Constructor from space points, with the description of the local frame (origin,vec1,vec2) where vec1 is normal to the plane and vec2 in the plane
Definition at line 66 of file CrystalPad.cc.
References center_, corners_, gather_cfg::cout, dir_, dummy_, ROOT::Math::Transform3DPJ::GetDecomposition(), rotation_, trans_, and translation_.
: corners_(aVector), dir_(aVector), number_(number), survivalProbability_(1.), center_(0.,0.), epsilon_(0.001) { // std::cout << " We are in the 2nd constructor " << std::endl; if(corners.size()!=4) { std::cout << " Try to construct a quadrilateral with " << corners.size() << " points ! " << std::endl; dummy_=true; } else { dummy_=false; double sign=(onEcal==1) ? -1.: 1.; // the good one in the central trans_=Transform3D((Point)origin, (Point)(origin+vec1), (Point)(origin+vec2), Point(0.,0.,0.), Point(0.,0.,sign), Point(0.,1.,0.)); trans_.GetDecomposition(rotation_,translation_); // std::cout << " Constructor 2; input corners " << std::endl; for(unsigned ic=0;ic<4;++ic) { // std::cout << corners[ic]<< " " ; XYZPoint corner = rotation_(corners[ic])+translation_; // std::cout << corner << std::endl ; corners_[ic] = CLHEP::Hep2Vector(corner.X(),corner.Y()); center_+=corners_[ic]; } for(unsigned ic=0;ic<4;++ic) { dir_[ic] = (corners_[(ic+1)%4]-corners_[ic]).unit(); } center_*=0.25; } // std::cout << " End of 2 constructor " << std::endl; // std::cout << " Corners(constructor) " ; // std::cout << corners_[0] << std::endl; // std::cout << corners_[1] << std::endl; // std::cout << corners_[2] << std::endl; // std::cout << corners_[3] << std::endl; }
CrystalPad::CrystalPad | ( | unsigned | number, |
const std::vector< XYZPoint > & | corners, | ||
const Transform3D & | trans, | ||
double | scaf = 1. , |
||
bool | bothdirections = false |
||
) |
Definition at line 121 of file CrystalPad.cc.
References center_, corners_, gather_cfg::cout, dir_, dummy_, ROOT::Math::Transform3DPJ::GetDecomposition(), rotation_, trans_, translation_, and yscalefactor_.
: corners_(aVector), dir_(aVector), number_(number), survivalProbability_(1.), center_(0.,0.), epsilon_(0.001), yscalefactor_(scaf) { // std::cout << " We are in the 2nd constructor " << std::endl; if(corners.size()!=4) { std::cout << " Try to construct a quadrilateral with " << corners.size() << " points ! " << std::endl; dummy_=true; } else { dummy_=false; // the good one in the central trans_=trans; // std::cout << " Constructor 2; input corners " << std::endl; trans_.GetDecomposition(rotation_,translation_); for(unsigned ic=0;ic<4;++ic) { XYZPoint corner=rotation_(corners[ic])+translation_; // std::cout << corner << std::endl ; double xscalefactor=(bothdirections) ? yscalefactor_:1.; corners_[ic] = CLHEP::Hep2Vector(corner.X()*xscalefactor,corner.Y()*yscalefactor_); center_+=corners_[ic]; } for(unsigned ic=0;ic<4;++ic) { dir_[ic] = (corners_[(ic+1)%4]-corners_[ic]).unit(); } center_*=0.25; } }
CrystalPad::CrystalPad | ( | const CrystalPad & | right | ) |
Definition at line 8 of file CrystalPad.cc.
References center_, corners_, dir_, dummy_, epsilon_, number_, and survivalProbability_.
CrystalPad::~CrystalPad | ( | ) | [inline] |
Definition at line 45 of file CrystalPad.h.
{;};
const CLHEP::Hep2Vector& CrystalPad::center | ( | ) | const [inline] |
get the center
Definition at line 101 of file CrystalPad.h.
References center_.
Referenced by operator<().
{return center_;}
CLHEP::Hep2Vector & CrystalPad::edge | ( | CaloDirection | dir | ) |
access to one corner (NE,NW,SE,SW)
Definition at line 268 of file CrystalPad.cc.
References corners_, gather_cfg::cout, NORTHEAST, NORTHWEST, SOUTHEAST, and SOUTHWEST.
{ switch(dir) { case NORTHWEST: return corners_[0]; break; case NORTHEAST: return corners_[1]; break; case SOUTHEAST: return corners_[2]; break; case SOUTHWEST: return corners_[3]; break; default: { std::cout << " Serious problem in CrystalPad ! " << dir << std::endl; return corners_[0]; } } return corners_[0]; }
CLHEP::Hep2Vector & CrystalPad::edge | ( | unsigned | iside, |
int | n | ||
) |
access to the corners in direction iside; n=0,1
Definition at line 263 of file CrystalPad.cc.
Referenced by EcalHitMaker::cracksPads(), EcalHitMaker::gapsLifting(), and operator<<().
void CrystalPad::extrems | ( | double & | xmin, |
double & | xmax, | ||
double & | ymin, | ||
double & | ymax | ||
) | const |
xmin xmax, ymin ymax of the quad
Definition at line 295 of file CrystalPad.cc.
References corners_, x, and detailsBasic3DVector::y.
const std::vector<CLHEP::Hep2Vector>& CrystalPad::getCorners | ( | ) | const [inline] |
Check that the point (in the global frame) is inside the crystal.
coordinates of the point in the local frame get the corners
Definition at line 56 of file CrystalPad.h.
References corners_.
{return corners_;}
void CrystalPad::getDrawingCoordinates | ( | std::vector< float > & | x, |
std::vector< float > & | y | ||
) | const |
for graphic debugging
Definition at line 335 of file CrystalPad.cc.
References corners_, x, and detailsBasic3DVector::y.
{ x.clear(); y.clear(); x.push_back(corners_[0].x()); x.push_back(corners_[1].x()); x.push_back(corners_[2].x()); x.push_back(corners_[3].x()); x.push_back(corners_[0].x()); y.push_back(corners_[0].y()); y.push_back(corners_[1].y()); y.push_back(corners_[2].y()); y.push_back(corners_[3].y()); y.push_back(corners_[0].y()); }
unsigned CrystalPad::getNumber | ( | ) | const [inline] |
access to the number
Definition at line 75 of file CrystalPad.h.
References number_.
Referenced by CrystalPad::padEqual::operator()(), operator<<(), and operator==().
{return number_;};
bool CrystalPad::inside | ( | const CLHEP::Hep2Vector & | point, |
bool | debug = false |
||
) | const |
Check that the point (in the local frame) is inside the crystal.
Definition at line 166 of file CrystalPad.cc.
References corners_, and dir_.
{ // std::cout << "Inside " << ppoint <<std::endl; // std::cout << "Corners " << corners_.size() << std::endl; // std::cout << corners_[0] << std::endl; // std::cout << corners_[1] << std::endl; // std::cout << corners_[2] << std::endl; // std::cout << corners_[3] << std::endl; // std::cout << " Got the 2D point " << std::endl; CLHEP::Hep2Vector pv0(ppoint-corners_[0]); CLHEP::Hep2Vector pv2(ppoint-corners_[2]); CLHEP::Hep2Vector n1(pv0-(pv0*dir_[0])*dir_[0]); CLHEP::Hep2Vector n2(pv2-(pv2*dir_[2])*dir_[2]); // double N1(n1.mag()); // double N2(n2.mag()); double r1(n1*n2); bool inside1(r1<=0.); if (!inside1) return false; // if(debug) // { // std::cout << n1 << std::endl; // std::cout << n2 << std::endl; // std::cout << r1 << std::endl; // std::cout << inside1 << std::endl; // } // bool close1=(N1<epsilon_||N2<epsilon_); // // if(!close1&&!inside1) return false; // std::cout << " First calculation " << std::endl; CLHEP::Hep2Vector pv1(ppoint-corners_[1]); CLHEP::Hep2Vector pv3(ppoint-corners_[3]); CLHEP::Hep2Vector n3(pv1-(pv1*dir_[1])*dir_[1]); CLHEP::Hep2Vector n4(pv3-(pv3*dir_[3])*dir_[3]); // double N3(n3.mag()); // double N4(n4.mag()); // bool close2=(N3<epsilon_||N4<epsilon_); double r2(n3*n4); bool inside2(r2<=0.); // // std::cout << " pv1 & pv3 " << pv1.mag() << " " << pv3.mag() << std::endl; // // double tmp=(pv1-(pv1*dir_[1])*dir_[1])*(pv3-(pv3*dir_[3])*dir_[3]); // // std::cout << " Computed tmp " << tmp << std::endl; // if(debug) // { // std::cout << n3 << std::endl; // std::cout << n4 << std::endl; // std::cout << r2 << std::endl; // std::cout << inside2 << std::endl; // } // if(!close2&&!inside2) return false; // std::cout << " Second calculation " << std::endl; // std::cout << " True " << std::endl; // return (!close1&&!close2||(close2&&inside1||close1&&inside2)); return inside2; }
bool CrystalPad::operator< | ( | const CrystalPad & | quad | ) | const [inline] |
CrystalPad & CrystalPad::operator= | ( | const CrystalPad & | rhs | ) |
Definition at line 20 of file CrystalPad.cc.
References center_, corners_, dir_, dummy_, epsilon_, number_, and survivalProbability_.
bool CrystalPad::operator== | ( | const CrystalPad & | quad | ) | const [inline] |
get the coordinates in the original frame
Definition at line 86 of file CrystalPad.h.
References getNumber().
void CrystalPad::print | ( | void | ) | const |
void CrystalPad::resetCorners | ( | ) |
Rescale the Quad to allow for some inaccuracy ...
Definition at line 309 of file CrystalPad.cc.
References center_, and corners_.
{ // Find the centre-of-gravity of the Quad (after re-organization) center_ = CLHEP::Hep2Vector(0.,0.); for(unsigned ic=0;ic<4;++ic) center_ += corners_[ic]; center_ *= 0.25; // Rescale the corners to allow for some inaccuracies in // in the inside test for(unsigned ic=0;ic<4;++ic) corners_[ic] += 0.001 * (corners_[ic] - center_) ; }
void CrystalPad::setSurvivalProbability | ( | double | val | ) | [inline] |
Definition at line 66 of file CrystalPad.h.
References survivalProbability_.
Referenced by EcalHitMaker::cracksPads().
{survivalProbability_=val;};
double CrystalPad::survivalProbability | ( | ) | const [inline] |
access methods to the survivalProbability
Definition at line 65 of file CrystalPad.h.
References survivalProbability_.
{ return survivalProbability_;};
std::vector< CLHEP::Hep2Vector > CrystalPad::aVector [static, private] |
Definition at line 109 of file CrystalPad.h.
CLHEP::Hep2Vector CrystalPad::center_ [private] |
Definition at line 118 of file CrystalPad.h.
Referenced by center(), CrystalPad(), operator<(), operator=(), and resetCorners().
std::vector<CLHEP::Hep2Vector> CrystalPad::corners_ [private] |
Definition at line 111 of file CrystalPad.h.
Referenced by CrystalPad(), edge(), extrems(), getCorners(), getDrawingCoordinates(), inside(), operator=(), print(), and resetCorners().
std::vector<CLHEP::Hep2Vector> CrystalPad::dir_ [private] |
Definition at line 112 of file CrystalPad.h.
Referenced by CrystalPad(), inside(), and operator=().
bool CrystalPad::dummy_ [private] |
Definition at line 120 of file CrystalPad.h.
Referenced by CrystalPad(), and operator=().
double CrystalPad::epsilon_ [private] |
Definition at line 119 of file CrystalPad.h.
Referenced by CrystalPad(), and operator=().
unsigned CrystalPad::number_ [private] |
Definition at line 113 of file CrystalPad.h.
Referenced by CrystalPad(), getNumber(), and operator=().
ROOT::Math::Rotation3D CrystalPad::rotation_ [private] |
Definition at line 115 of file CrystalPad.h.
Referenced by CrystalPad().
double CrystalPad::survivalProbability_ [private] |
Definition at line 117 of file CrystalPad.h.
Referenced by CrystalPad(), operator=(), setSurvivalProbability(), and survivalProbability().
Transform3D CrystalPad::trans_ [private] |
Definition at line 114 of file CrystalPad.h.
Referenced by CrystalPad().
XYZVector CrystalPad::translation_ [private] |
Definition at line 116 of file CrystalPad.h.
Referenced by CrystalPad().
double CrystalPad::yscalefactor_ [private] |
Definition at line 121 of file CrystalPad.h.
Referenced by CrystalPad().