#include #include #include "Track.h" #include "TVirtualGeoTrack.h" #include "VirtSpacePointRecoHit.h" Track::Track(AbsTrackRep* defaultRep) : trackReps(NULL),_cardinal_rep(0), _nextHitToFit(0) { addTrackRep(defaultRep); } Track::Track() : trackReps(NULL), _cardinal_rep(0), _nextHitToFit(0) { //trackReps = new TObjArray(defNumTrackReps); } Track::~Track() { if(trackReps!=NULL){ for(int i=0;iAt(i); } delete trackReps; } for(unsigned int i=0;iclone()); } trackReps = NULL; for(int i=0; i<_tr.getNumReps();i++) { addTrackRep( (_tr.getTrackRep(i))->clone() ); } for(int i=0; i<_bookkeeping.size(); ++i) delete _bookkeeping[i]; _bookkeeping.clear(); for(unsigned int i=0;i<_tr._bookkeeping.size();++i){ assert(_tr._bookkeeping.at(i)!= NULL) ; _bookkeeping.push_back(new Bookkeeping(*(_tr._bookkeeping.at(i)))); } _repAtHit = _tr._repAtHit; } void Track::reset(){ if(trackReps!=NULL){ for(int i=0;iAt(i); delete _bookkeeping.at(i); } } for(unsigned int i=0;igetNumHits(); for(unsigned int i=0;igetCand().getHit(i,detId,hitId); AbsRecoHit* hit=trk->getHit(i); addHit(hit,detId,hitId); } trk->hits.clear(); } void Track::setCandidate(const TrackCand& cand, bool reset) { _cand=cand; // reset fits if(reset) { for(int i=0;iAt(i))->reset(); } } } void Track::fillGeoTrack(TVirtualGeoTrack* geotrk,unsigned int repid) const { AbsTrackRep* rep=getTrackRep(repid); unsigned int n=_cand.getNHits(); rep->getState().Print(); for(unsigned int i=0; igetDetPlane(rep); TVector3 pos=rep->getPos(pl); std::cout<AddPoint(pos.X(),pos.Y(),pos.Z(),0); }// end loop over hits } void Track::getResiduals(unsigned int detId, // which detector? unsigned int dim, // which projection? unsigned int repid, // which trackrep ? std::vector& result) { unsigned int nhits=getNumHits(); if(repid>=getNumReps())return; AbsTrackRep* rep=getTrackRep(repid);//->clone(); assert(rep->getState()==getTrackRep(repid)->getState()); for(unsigned int ih=0; ihgetDim(); TMatrixT state(repDim,1); DetPlane pl=hit->getDetPlane(rep); rep->extrapolate(pl,state); //rep->setState(state); //rep->setReferencePlane(pl); double res=hit->residualVector(rep,state,pl)[dim][0]; //std::cout<extrapolate(pl); } } void Track::stepalong(double h){ getCardinalRep()->stepalong(h); TVector3 pos=getCardinalRep()->getPos(); // take the other reps with you! if(getNumReps()>1)gotoPoint(pos); } void Track::printBookkeeping(){ std::cout << "Track::printBookkeeping()" << std::endl; for(unsigned int i=0;iprint(); } } ClassImp(Track)