#include <MdcHit.h>
Inheritance diagram for MdcHit:
Public Types | |
typedef TrkHitOnTrkIter< TrkFundHit > | hot_iterator |
typedef TrkHitOnTrkIter< TrkFundHit > | hot_iterator |
Public Member Functions | |
unsigned | adcIndex () const |
unsigned | adcIndex () const |
TrkFundHit::hot_iterator | begin () const |
TrkFundHit::hot_iterator | begin () const |
const MdcCalibFunSvc * | calibSvc () const |
const MdcCalibFunSvc * | calibSvc () const |
double | charge () const |
double | charge () const |
const MdcDigi * | digi () const |
const MdcDigi * | digi () const |
double | driftDist (double bunchTime, int ambig) const |
double | driftDist (double, int, double, double, double) const |
double | driftDist (double bunchTime, int ambig) const |
double | driftDist (double, int, double, double, double) const |
double | driftTime (double tof, double z) const |
double | driftTime (double tof, double z) const |
TrkFundHit::hot_iterator | end () const |
TrkFundHit::hot_iterator | end () const |
const MdcDetector * | geom () const |
const MdcDetector * | geom () const |
const TrkHitOnTrk * | getHitOnTrack (const TrkRecoTrk *trk) const |
const TrkHitOnTrk * | getHitOnTrack (const TrkRecoTrk *trk) const |
std::pair< TrkFundHit::hot_iterator, TrkFundHit::hot_iterator > | getUsedHits () const |
std::pair< TrkFundHit::hot_iterator, TrkFundHit::hot_iterator > | getUsedHits () const |
const Trajectory * | hitTraj () const |
const Trajectory * | hitTraj () const |
bool | isCosmicFit () const |
bool | isCosmicFit () const |
const MdcLayer * | layer () const |
const MdcLayer * | layer () const |
unsigned | layernumber () const |
unsigned | layernumber () const |
MdcHit (const MdcHit &) | |
MdcHit (const MdcDigi *&digi, const MdcDetector *&det) | |
MdcHit (const MdcHit &) | |
MdcHit (const MdcDigi *&digi, const MdcDetector *&det) | |
Identifier | mdcId () const |
Identifier | mdcId () const |
int | nUsedHits () const |
int | nUsedHits () const |
MdcHit & | operator= (const MdcHit &) |
MdcHit & | operator= (const MdcHit &) |
bool | operator== (const MdcHit &) const |
bool | operator== (const MdcHit &) const |
const double | phi (double z) const |
double | phi () const |
const double | phi (double z) const |
double | phi () const |
void | print (std::ostream &o) const |
void | print (std::ostream &o) const |
void | printAll (std::ostream &o) const |
void | printAll (std::ostream &o) const |
double | rawTime () const |
double | rawTime () const |
double | rMid () const |
double | rMid () const |
void | setCalibSvc (const MdcCalibFunSvc *calibSvc) |
void | setCalibSvc (const MdcCalibFunSvc *calibSvc) |
void | setCosmicFit (const bool cosmicfit) |
void | setCosmicFit (const bool cosmicfit) |
void | setCountPropTime (const bool count) |
void | setCountPropTime (const bool count) |
const TrkHitOnTrk * | setUnusedHit (const TrkHitOnTrk *hit) |
const TrkHitOnTrk * | setUnusedHit (const TrkHitOnTrk *hit) |
const TrkHitOnTrk * | setUsedHit (const TrkHitOnTrk *hit) |
const TrkHitOnTrk * | setUsedHit (const TrkHitOnTrk *hit) |
double | sigma (double driftdist, int ambig=0) const |
double | sigma (double, int, double, double, double) const |
double | sigma (double driftdist, int ambig=0) const |
double | sigma (double, int, double, double, double) const |
unsigned | status () const |
unsigned | status () const |
unsigned | tdcIndex () const |
unsigned | tdcIndex () const |
bool | usedHit (void) const |
bool | usedHit (void) const |
bool | usedOnTrack (const TrkRecoTrk *t) const |
bool | usedOnTrack (const TrkRecoTrk *t) const |
TrkEnums::TrkViewInfo | whatView () const |
TrkEnums::TrkViewInfo | whatView () const |
int | whichView () const |
int | whichView () const |
const MdcSWire * | wire () const |
const MdcSWire * | wire () const |
unsigned | wirenumber () const |
unsigned | wirenumber () const |
double | x (double z) const |
double | x () const |
double | x (double z) const |
double | x () const |
double | y (double z) const |
double | y () const |
double | y (double z) const |
double | y () const |
double | zlen () const |
double | zlen () const |
virtual | ~MdcHit () |
virtual | ~MdcHit () |
Protected Types | |
typedef std::vector< const TrkHitOnTrk * >::iterator | iterator_implementation |
typedef std::vector< const TrkHitOnTrk * >::iterator | iterator_implementation |
typedef const TrkHitOnTrk | iterator_value_type |
typedef const TrkHitOnTrk | iterator_value_type |
Protected Attributes | |
std::vector< const TrkHitOnTrk * > | _hitList |
std::vector< const TrkHitOnTrk * > | _hitList |
Private Member Functions | |
double | crudeTof () const |
double | crudeTof () const |
MdcHit () | |
MdcHit () | |
Private Attributes | |
double | _charge |
double | _cosphi |
const MdcDigi * | _digiPtr |
const MdcDigi * | _digiPtr |
const MdcDetector * | _geomPtr |
const MdcDetector * | _geomPtr |
unsigned | _iAdc |
Identifier | _id |
unsigned | _iTdc |
unsigned | _layer |
const MdcLayer * | _layerPtr |
const MdcLayer * | _layerPtr |
double | _phi |
double | _rawTime |
double | _rmid |
double | _sinphi |
unsigned | _status |
double | _T0Walk |
unsigned | _wire |
const MdcSWire * | _wirePtr |
const MdcSWire * | _wirePtr |
double | _zlen |
const MdcCalibFunSvc * | m_mdcCalibFunSvc |
const MdcCalibFunSvc * | m_mdcCalibFunSvc |
Static Private Attributes | |
bool | m_cosmicFit = false |
bool | m_countPropTime = true |
Friends | |
class | MdcMakeHits |
class | TrkHitOnTrkIter<TrkFundHit> |
|
|
|
|
|
|
|
|
|
|
|
|
|
00034 : 00035 TrkFundHit(), _digiPtr(aDigi), _geomPtr(det) 00036 { 00037 _digiPtr = aDigi; 00038 _geomPtr = det; 00039 assert( _digiPtr != NULL); 00040 assert( _geomPtr != NULL); 00041 _id = aDigi->identify(); 00042 _layerPtr = det->Layer(_id); 00043 _wirePtr = det->Wire(_id); 00044 assert( _layerPtr != NULL); 00045 assert( _wirePtr != NULL); 00046 m_mdcCalibFunSvc = NULL; 00047 _layer = MdcID::layer(_id); 00048 _wire = MdcID::wire (_id); 00049 _iTdc = _digiPtr->getTimeChannel(); 00050 _iAdc = _digiPtr->getChargeChannel(); 00051 _rawTime = RawDataUtil::MdcTime(_iTdc); 00052 _charge = RawDataUtil::MdcCharge(_iAdc); 00053 _rmid = _wirePtr->rMid(); 00054 _zlen = _layerPtr->zLength(); 00055 _phi = _wirePtr->phi(); 00056 _cosphi = cos(_phi); 00057 _sinphi = sin(_phi); 00058 _status = 0; 00059 }
|
|
00061 : 00062 TrkFundHit() , _digiPtr(other._digiPtr), _geomPtr(other._geomPtr), 00063 _layerPtr(other._layerPtr), _wirePtr(other._wirePtr), _id(other._id), 00064 _layer(other._layer), _wire(other._wire), 00065 _iTdc(other._iTdc), _iAdc(other._iAdc), 00066 _rawTime(other._rawTime), _charge(other._charge), 00067 _rmid(other._rmid), _zlen(other._zlen), 00068 _phi(other._phi), _cosphi(other._cosphi), _sinphi(other._sinphi), 00069 _status(other._status), _T0Walk(other._T0Walk) 00070 { 00071 m_mdcCalibFunSvc = other.m_mdcCalibFunSvc; 00072 }
|
|
00103 { 00104 // This is ugly and inefficient. This, along with the rest of 00105 // the hitList mess, should be cleaned up by handling the 00106 // association in an external map 00107 00108 // Not written as a loop because removeHit() modifies TrkFundHit::_hitList 00109 short count = 0; 00110 while (nUsedHits() > count) { 00111 bool removed = _hitList[count]->parentTrack()->hits()->removeHit(this); 00112 if (!removed) count++; 00113 } 00114 }
|
|
|
|
|
|
|
|
|
|
|
|
00064 { return _iAdc; }
|
|
00064 { return _iAdc; }
|
|
|
|
00114 { 00115 return TrkFundHit::hot_iterator(const_cast<std::vector<const TrkHitOnTrk*>&>(_hitList).begin()); 00116 }
|
|
00059 { return m_mdcCalibFunSvc; }
|
|
00059 { return m_mdcCalibFunSvc; }
|
|
00065 { return _charge; }
|
|
00065 { return _charge; }
|
|
00098 { return _rmid/Constants::c; }
|
|
00098 { return _rmid/Constants::c; }
|
|
00055 { return _digiPtr; }
|
|
00055 { return _digiPtr; }
|
|
|
|
|
|
|
|
00160 { 00161 double driftD; 00162 //drift time ns, layer id begin with 0, entrance angle rads, 00163 //lr ambig: wire ambig 1,-1,0 -> Calib 0,1,2 00164 int lrCalib=2; 00165 if (ambig==1) lrCalib = 0; 00166 else if (ambig==-1) lrCalib = 1; 00167 double eAngle = EntranceAngle(entranceAngle); 00168 00169 // tof in s, driftDist in cm, dirftTime in ns 00170 driftD = 0.1 * m_mdcCalibFunSvc->driftTimeToDist(driftTime(tof,z),_layer,_wire,lrCalib,eAngle);//to cm 00171 00172 //if(driftD >10000){ 00173 // std::cout<<__FILE__<<"("<<_layer <<","<<_wire 00174 // <<") lrCalib "<<lrCalib <<" dd "<<driftTime(tof,z) 00175 // <<" tof "<<tof <<" z "<<z <<" eAngle "<<eAngle 00176 // <<std::endl; 00177 //} 00178 00179 if (driftD<0.00001) driftD = 0.001; 00180 return driftD; 00181 }
|
|
|
|
00143 { 00144 // t prop 00145 double tprop = 0.; 00146 if (m_countPropTime){ tprop = m_mdcCalibFunSvc->getTprop(_layer,z*10.); } 00147 00148 //yzhang FIXME use fabs() of drift time 00149 //tof in s, driftTime in ns, _T0Walk in ns 00150 double driftT; 00151 driftT = fabs(_rawTime - _T0Walk -1.e9*tof - tprop); 00152 00153 //if(driftT >10000)std::cout<< "lay "<<_layer<<" cell "<<_wire<<"_rawTime "<<_rawTime<<" zhit "<<z<<" tprop "<<tprop <<" t0walk"<<_T0Walk<<" tof "<<tof<< std::endl;//yzhang debug 00154 return driftT; 00155 }
|
|
|
|
00120 { 00121 return TrkFundHit::hot_iterator(const_cast<std::vector<const TrkHitOnTrk*>&>(_hitList).end()); 00122 }
|
|
00058 { return _geomPtr; }
|
|
00058 { return _geomPtr; }
|
|
|
|
00087 { 00088 hot_iterator i = std::find_if(begin(), end(), 00089 std::bind2nd(TrkBase::Predicates::isHotOnTrack(),trk)); 00090 return (i==end()?0:i.get()); 00091 }
|
|
00060 { 00061 return std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator >(begin(),end()); 00062 }
|
|
00060 { 00061 return std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator >(begin(),end()); 00062 }
|
|
|
|
00232 { 00233 return layer()->makeHitTrajInGlobalCoords(wirenumber(),0.0); 00234 }
|
|
00088 { return m_cosmicFit; }
|
|
00088 { return m_cosmicFit; }
|
|
00056 { return _layerPtr; }
|
|
00056 { return _layerPtr; }
|
|
00061 { return _layer; }
|
|
00061 { return _layer; }
|
|
00060 { return _id; }
|
|
00060 { return _id; }
|
|
|
|
00081 { 00082 return _hitList.size(); 00083 }
|
|
|
|
00075 { 00076 if(&other != this){ 00077 _digiPtr = other._digiPtr; 00078 _geomPtr = other._geomPtr; 00079 _layerPtr = other._layerPtr; 00080 _wirePtr = other._wirePtr; 00081 m_mdcCalibFunSvc = other.m_mdcCalibFunSvc; 00082 _id = other._id; 00083 _layer = other._layer; 00084 _wire = other._wire; 00085 _iTdc = other._iTdc; 00086 _iAdc = other._iAdc; 00087 _rawTime = other._rawTime; 00088 _charge = other._charge; 00089 _digiPtr = other._digiPtr; 00090 _rmid = other._rmid; 00091 _zlen = other._zlen; 00092 _phi = other._phi; 00093 _cosphi = other._cosphi; 00094 _sinphi = other._sinphi; 00095 _status = other._status; 00096 _T0Walk = other._T0Walk; 00097 } 00098 return *this; 00099 }
|
|
|
|
00117 { 00118 return (this == &rhs); 00119 }
|
|
|
|
00075 { return _phi;} // phi at chamber center
|
|
|
|
00075 { return _phi;} // phi at chamber center
|
|
|
|
|
|
Reimplemented from TrkFundHit. |
|
Reimplemented from TrkFundHit. 00127 { 00128 o << "Hit:(" << _layer << "," << _wire 00129 << ") x:" << x() << " y:" << y() 00130 << " rt:" << rawTime() 00131 << " dt:" <<driftTime(0.0,0) 00132 << " dd:" <<driftDist(0.0,1) 00133 << endl; 00134 }
|
|
00066 { return _rawTime; }
|
|
00066 { return _rawTime; }
|
|
00081 { return _rmid; } // R at chamber center
|
|
00081 { return _rmid; } // R at chamber center
|
|
|
|
00137 { 00138 m_mdcCalibFunSvc = calibSvc; 00139 _T0Walk = m_mdcCalibFunSvc->getT0(_layer,_wire) + m_mdcCalibFunSvc->getTimeWalk(_layer, _iAdc); 00140 }
|
|
00087 { m_cosmicFit = cosmicfit; }
|
|
00087 { m_cosmicFit = cosmicfit; }
|
|
00086 { m_countPropTime = count;}
|
|
00086 { m_countPropTime = count;}
|
|
|
|
00068 { 00069 if (_hitList.empty()) return 0; 00070 std::vector<const TrkHitOnTrk*>::iterator i=std::find(_hitList.begin(),_hitList.end(),hit); 00071 if (i==_hitList.end()) return 0; 00072 assert(*i==hit); 00073 // std::cout << "TrkFundHit setUnusedHit "<<((MdcHit*)(hit->hit()))->layernumber()<<" "<<((MdcHit*)(hit->hit()))->wirenumber()<<endl; 00074 //this->printAll(std::cout);//yzhang debug 00075 _hitList.erase(i); 00076 return hit; 00077 }
|
|
|
|
00051 { 00052 // if (hitList->contains(hit)) { 00053 // return; 00054 // } 00055 //FIXME: check hot corresponds to this hit?? 00056 // std::cout << "TrkFundHit setUsedHit "<<((MdcHit*)(hit->hit()))->layernumber()<<" "<<((MdcHit*)(hit->hit()))->wirenumber()<<endl; 00057 // this->printAll(std::cout);//yzhang debug 00058 _hitList.push_back(hit); 00059 // std::cout << "after push_bak " << std::endl;//yzhang debug 00060 // printAll(std::cout);//yzhang debug 00061 00062 return hit; 00063 }
|
|
|
|
|
|
00227 { 00228 return sigma(driftdist, ambig, 0., 0., 0.);// cm 00229 }
|
|
00191 { 00192 double sig = 9999.; 00193 00194 #ifdef MDCPATREC_RESLAYER 00195 if (_layer == m_resLayer){ 00196 //give a huge sigma to skip this layer when fit track 00197 return 9999.; 00198 } 00199 #endif 00200 if ( m_mdcCalibFunSvc ) { 00201 //layid begin with 0, entrance angle in rads, 00202 //distance: cm ->Calib mm //z: cm -> Calib mm 00203 //Q: MonteCalo eV -> Calib fC FIXME 00204 //lr ambig: wire ambig 1,-1,0 -> Calib 0,1,2 00205 int lrCalib=2; 00206 if (ambig==1) lrCalib = 0; 00207 else if (ambig==-1) lrCalib = 1; 00208 00209 double eAngle = EntranceAngle(entranceAngle); 00210 sig = 0.1 * m_mdcCalibFunSvc->getSigma(_layer,lrCalib,driftdist*10.,eAngle, 00211 tan(dipAngle),z*10.,_iAdc); //Calib special resolution mm -> cm 00212 00213 if(sig<Constants::epsilon){ 00214 sig = 999.; 00215 } 00216 //if(sig<=0){ 00217 //std::cout<<__FILE__<<" "<<__LINE__ <<" sigma "<<sig 00218 //<<" layer "<<_layer <<" lrCalib "<<lrCalib <<" driftdist "<<driftdist*10 00219 //<<" eAngle "<<eAngle <<" dipAngle "<<(dipAngle) <<" tanl "<<tan(dipAngle) 00220 //<<" z "<<z <<" iAdc "<<_iAdc <<std::endl; 00221 //} 00222 } 00223 return sig; 00224 }
|
|
00083 { return _status;}// status
|
|
00083 { return _status;}// status
|
|
00063 { return _iTdc; }
|
|
00063 { return _iTdc; }
|
|
00057 {return !_hitList.empty();}
|
|
00057 {return !_hitList.empty();}
|
|
00067 {return getHitOnTrack(t) != 0;}
|
|
00067 {return getHitOnTrack(t) != 0;}
|
|
Implements TrkFundHit. 00074 { return whichView()==0?TrkEnums::xyView:TrkEnums::bothView; }
|
|
Implements TrkFundHit. 00074 { return whichView()==0?TrkEnums::xyView:TrkEnums::bothView; }
|
|
|
|
|
|
00057 { return _wirePtr; }
|
|
00057 { return _wirePtr; }
|
|
00062 { return _wire; }
|
|
00062 { return _wire; }
|
|
|
|
00076 { return _rmid*_cosphi; } // x at chamber center
|
|
|
|
00076 { return _rmid*_cosphi; } // x at chamber center
|
|
|
|
00077 { return _rmid*_sinphi; } // y at chamber center
|
|
|
|
00077 { return _rmid*_sinphi; } // y at chamber center
|
|
00082 { return _zlen; } // chamber extent in z
|
|
00082 { return _zlen; } // chamber extent in z
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|