_x; /// local X-coordinate of this track (reference plane) y(x) = y_0 - (1 - (C*x - eta)**2)**1/2/C _p0; /// local Y-coordinate of this track (reference plane) z(x) = z_0 - tan(lambda)/C*arcsin(C*x - eta) _p1; /// local Z-coordinate of this track (reference plane) //eta = C*x_0 _p2; /// (signed curvature)*(local X-coordinate of helix axis) eta = C*(x_0-x) = -sin(Psi) _p2; /// (signed curvature)*(local X-coordinate of helix axis) C _p3; /// signed curvature [sign = sign(-qB)] tan(lambda) _p4; /// tangent of the track momentum dip angle /// covariance matrix of the track parameters /// y z eta C tan(lambda) double _c00; double _c10, _c11; double _c20, _c21, _c22; double _c30, _c31, _c32, _c33; double _c40, _c41, _c42, _c43, _c44; MCS: _c33 += _p3*_p4*_p3*_p4*theta2; _c32 += _p3*_p4*_p4*_p3*_x*theta2; _c43 += _p3*_p4*(_p4*_p4+1)*theta2; _c22 += (2*(_p3*_x-_p2)*_p4*_p4*_p2+1-(_p3*_x-_p2)*(_p3*_x-_p2)+_p4*_p4+_p2*_p2*_p4*_p4)*theta2; _c42 += _p4*(_p4*_p4+1)*_p3*_x*theta2; _c44 += (_p4*_p4+1)*(_p4*_p4+1)*theta2; ----------------------------------------------------- 05/24/06 StiNodePars { // E P T _x, _y, _z, _eta, _ptin, _tanl, _curv, _hz } StiNodeMtx { double A[kNPars][kNPars]; } StiNodeErrs { union{double A[1];double _cXX;}; double _cYX,_cYY; double _cZX,_cZY, _cZZ; double _cEX,_cEY, _cEZ, _cEE; double _cPX,_cPY, _cPZ, _cPE, _cPP; double _cTX,_cTY, _cTZ, _cTE, _cTP, _cTT; }; } StiNodePars mFP; // fitPars StiNodeErrs mFE; // fitErrs StiNodeExt *_ext; {mPP, mPE, mMtx, // ? Prediction ________________________________________________________________________________ StiMaker::Init _loaderHitFilter = 0 _loaderTrackFilter = new StiDefaultTrackFilter("LoaderTrackFilter","MC Tracks Filter"); _loaderTrackFilter->add(new EditableParameter(..) instead of StiDefaultTrackFilter::initialize() initialize parameters for _loaderTrackFilter->add(....) ... _loaderTrackFilter = StiDefaultTrackFilter InitDetectors() _toolkit->add(group = new StiTpcDetectorGroup(bool active,...)) active?new StiTpcHitLoader():0, new StiTpcDetectorBuilder(active,inputFile) _toolkit->add(group = new StiSvtDetectorGroup(...)) _toolkit->add(group = new StiSsdDetectorGroup(...)) _toolkit->add(group = new StiFtpcDetectorGroup(...)) _toolkit->add(group = new StiPixelDetectorGroup(...)) ... StiMaker::InitRun StiDetectorContainer * detectorContainer = _toolkit->getDetectorContainer(); detectorContainer->initialize(); // order detector in R and Phi detectorContainer->reset(); .. _seedFinder->initialize(); _hitLoader = _toolkit->getHitLoader(); masterBuilder->build(*this); (*iter)->build(source) // loop over DetectorGroups buildDetectors(StMaker&) - beam pipe ; radius = 4; thickness = 0.076; PN pipegeo.g: BeInnR = 3.9l BeOutR = 4.0 BeLeng = 76.2 Al : S1InnR = 3.875 S1OutR = 4.0 S1Leng = 153.4 setThickness(thickness) setOuterRadius(radius+thickness/2.) StiDetectorBuilder data members int _groupId; bool _active; materialMap mMaterialMap; shapeMap mShapeMap; detectorMap mDetectorMap; detectorIterator mDetectorIterator; unsigned int _nRows; vector< unsigned int> _nSectors; vector< vector > _detectors; Factory*_detectorFactory; StiTrackingParameters _trackingParameters; // ? string _inputFile; StiTpcDetectorBuilder::buildDetectors // only 12 sectors, alignment West used for East StiDetectorBuilder::load Loadable::loadM StiTpcDetectorBuilder::loadDS ... StiMaker::Make // StiLocalTrackSeedFinder* _seedFinder // StiLocalTrackSeedFinder* _trackSeedFinder // StiKalmanTrackFinder* _tracker; // StiKalmanTrackFitter* _fitter // 04/23/09 StiHitLoader::loadEvent(event,_loaderTrackFilter,_loaderHitFilter); StiKalmanTrackFinder::clear() loadHits(); // 04/23/09 MyClear() StiKalmanTrackFinder::reset() StiKalmanTrackFinder::findTracks() StiTrackFinder::reset() StiTrackContainer::clear() StiKalmanTrackFinder::findTpcTracks() StiKalmanTrackFinder::findAllTracks() StiKalmanTrackFinder::extendSeeds(rMin=0) StiLocalTrackSeedFinder::findTrack(rMin) < StiLocalTrackSeedFinder::makeTrack StiLocalTrackSeedFinder::extendHit StiLocalTrackSeedFinder::extrapolate StiLocalTrackSeedFinder::initializeTrack StiLocalTrackSeedFinder::fit StiKalmanTrack::initialize(vector &hits) StiKalmanTrackNode::initialize(hit) StiKalmanTrackNode::setHit(hit) StiKalmanTrackNode::setHitErrors() StiTrackNodeHelper::getHitErrors(hit,&mFP,&mHrr); calc = StiDetector::getHitErrorCalculator if (calc) calc->calculateError(pars,hrr->hYY,hrr->hZZ); else hrr->A[i]=hit->errMtx() [6] StiHitErrs::rotate(_alpha); StiKalmanTrack::add(StiTrackNode * node,int direction) track->setFlag(-1); track->approx(0); StiTrack::fit(kInsideOut) StiKalmanTrackFitter::fit(track,fitDirection) // refit for (source=first;source!=last;source++) { targetNode = &(*source); targetDet = targetNode->getDetector(); targetHit = targetNode->getHit(); } StiKalmanTrackFinder::extendTrack(track,rMin); StiKalmanTrackFinder::find(track,kOutsideIn,rMin) StiKalmanTrackFinder::StiKalmanTrackFinder::find(track,direction,leadNode,qa) StiKalmanTrackFinder::find(track,kInsideOut); track->StiKalmanTrack::approx(); // track->StiKalmanTrack::refit() StiTrackNode *extenDca = track->extendToVertex(&dcaHit); track->add(extenDca,kOutsideIn); track->reduce(); track->setFlag(1); _trackContainer->push_back(track); track->setId(_trackContainer->size()); track->reserveHits(); BFactory::Free(track); StiStEventFiller::fillEvent(event, _trackContainer); "GenericVertex"::fit(event); /// findVertex() StiKalmanTrackFinder::extendTracksToVertex(vertex) ======================================================================== StiTrackFinder::findTrack(double rMin) StiLocalTrackSeedFinder::findTrack(rMin) StiKalmanTrack::find(); <<<<<<<<<<<<<<<<<<<< ? 3 breakpoint keep y 0x06b172cf in StiKalmanTrackFinder::findTrack(double) at .sl44_gcc346/obj/StRoot/Sti/StiKalmanTrackFinder.cxx:810 4 breakpoint keep y 0x06b0d12e in StiKalmanTrack::find(int) at .sl44_gcc346/obj/StRoot/Sti/StiKalmanTrack.cxx:1128 track->StiKalmanTrackFinder::find(); // direction=kOutsideIn fit() if(StiTrackFinder::find(this,kOutsideIn,radSvt)) { StiKalmanTrack::approx(1); StiKalmanTrack::refit() StiKalmanTrack::refitL() StiTrackNodeHelper::set(pNode,targetNode) StiTrackNodeHelper::makeFit(0) StiTrackNodeHelper::propagatePars StiTrackNodeHelper::propagateMtx StiTrackNodeHelper::propagateMCS StiTrackNodeHelper::propagateFitd StiTrackNodeHelper::propagateError StiTrackNodeHelper::resetError StiTrackNodeHelper::setHitErrs() StiTrackNodeHelper::evalChi2() StiTrackNodeHelper::updateNode() StiTrackNodeHelper::makeFit(1) } if (trackFinder->find(this,kOutsideIn,0.)) { StiKalmanTrack::refit() } if (trackExtendedOut= trackFinder->find(this,kInsideOut)) { StiKalmanTrack::refit() } ======================================================================== // PREDICTION // ---------- // extrapolation of the covariance matrix // form matrix C^k-1_k[p,p] = F_k-1[p,p] * C_k-1[p,p] * FT_k[p,p] + Q_k[p,p] // covariance matrix of predicted residuals: // R^k-1_k[m,m] = V_k[m,m] + H_k[m,p] * C^k-1_k[p,p] * HT_k[m,p] // // FILTER // -------- // "Filter" (kalman gain matrix formalism) // K_k[p,m] = C^k-1_k[p,p] * HT_k[m,p] * (R^k-1_k)^-1[m,m] // P[p,m] = C^k-1_k[p,p] * HT_k[m,p] // K[p,m] = P[p,m]*G[m,m] // update of the covariance matrix: // C_k = (I - K_k * H_k) * C^k-1_k * (I - K_k * H_k)T + K_k * V_k * KT_k // P* C^k-1_k * PT // fitted residual r_k = m_k - H_k * x_k {= (I - H_k*K_k) r^k-1_k} // R_k = V_k - H_k * C_k * HT_k // chi^2 = rT_k * G_k * r_k // SMOOTHER: loop over accepted track segments // -------- // Smoother gain matrix: A_k = C_k * FT_k+1 * (C^k_k+1)^-1 // Smoothed state vector: x^n_k = x_k + A_k * ( x^n_k+1 - x^k_k+1) // Covariance matrix of smoothed state vector: // C^n_k = C_k + A_k * (C^n_k+1 - C"^k_k+1) * AT_k // new residual r^n_k = m_k - H_k * x^n_k // const TRVector vH1 = XXk.xR()->Prediction(); // const TRMatrix vvH1 = XXk.xR()->Derivatives(); // Transformation to scaling variables: H_k => H_k * R // h_k => h_k + H_k * x_k // R^n_k = V_k - H_k * C^n_k * HT_k //------------------------------ typedef enum { kFailed = -1, // could not find intersection kHit = 0, kEdgePhiPlus = 1, kEdgeZminus = 2, kEdgePhiMinus = 3, kEdgeZplus = 4, kMissPhiPlus = 5, kMissZminus = 6, kMissPhiMinus = 7, kMissZplus = 8 } StiIntersection; ================================================================================ StiDefaultToolKit.h StiDetectorGroups *_detectorGroups; add => _detectorGroups->push_back(detectorGroup); StiMasterHitLoader: typedef vector< HitLoaderKey > HitLoaderVector; masterLoader->addLoader(loader); ================================================================================ StiMaker::Make _tracker->clear(); //============ StiMasterHitLoade _hitLoader->loadEvent(event,_loaderTrackFilter,_loaderHitFilter); HitLoaderConstIter iter; for (iter=begin();iter!=end();iter++) (*iter)->loadHits(source1,trackFilter, hitFilter); {... StiHitContainer * _hitContainer->add( stiHit ); ...} _hitContainer->sortHits(); _hitContainer->reset();//declare all hits as unused... //============= _seedFinder->reset(); //========================================================================================== class StiDetectorGroups : public Named, public Described, public vector* > class StiDetectorGroup : public Named ... StiHitLoader * _hitLoader; StiDetectorBuilder * _detectorBuilder; StiDedxCalculator * _dedxCalculator; StiElossCalculator * _elossCalculator; /// Detector group identifier. int _groupId; ... class StiDetector : public Named ... const StiHitErrorCalculator * _hitErrorCalculator; StiMaterial *gas; StiMaterial *material; StiShape *shape; StiPlacement *placement; /// Pointer to the parent detector node. StiCompositeTreeNode * mNode; int _groupId; int _groupId; const StiTrackingParameters * _pars; int _key1, _key2; StiElossCalculator * _elossCalculator; ... template class StiCompositeTreeNode ... vec_type mVec; ///The vector of children StiCompositeTreeNode* mparent; ///A pointer to the parent of this node T* mdata; ///A pointer to the data to hung on this node StiOrderKey mkey; ///The order key association with this node string mname; ///The name of the node. ... class StiHitLoader : public Named ... StiHitContainer * _hitContainer; StiTrackContainer * _trackContainer; Factory * _hitFactory; Factory * _trackFactory; Detector * _detector; StiDetectorFinder * _detectorFinder; .... //================================================================================ struct VectorAndEnd { VectorAndEnd() {theEffectiveEnd=theHitVec.end();} vector theHitVec; vector::iterator theEffectiveEnd; }; typedef map HitMapToVectorAndEndType; typedef HitMapToVectorAndEndType::value_type HitMapToVectorAndEndTypeValType; class StiHitContainer : public Named, public Described .... // Utility key used in hit retrieval (avoid constructor call per search) HitMapToVectorAndEndType::key_type _key; // Utility hit used as a minimum position in searches StiHit _minPoint; // Utility hit used as a maximum position in searches StiHit _maxPoint; // Utility hit used as the reference in searches StiHit _utilityHit; // Utility iterator to mark the position of a hit vector (avoid constructor call per search) vector::iterator _start; // Utility iterator to mark the position of a hit vector (avoid constructor call per search) vector::iterator _stop; // Utility hit vector used to return hits (avoid constructor call per search) vector _selectedHits; //! // Actual Hit container used for storage of all hits HitMapToVectorAndEndType _map; //! Factory * _hitFactory; ================================================================================ _tracker = dynamic_cast(_toolkit->getTrackFinder()); _tracker->findTracks(); _trackSeedFinder = new StiLocalTrackSeedFinder track = _trackSeedFinder->findTrack(); _fitter = dynamic_cast(_toolkit->getTrackFitter()); _tracker->load("trackFinderPars.dat",*this); _fitter->load("trackFitterPars.dat",*this); ... ================================================================================ class StiSortedHitIterator : public forward_iterator ================================================================================ StiHit float mrefangle; float mposition; float mx; float my; float mz; float msxx; float msyy; float mszz; float msxy; float msxz; float msyz; // global position float _xg,_yg,_zg; unsigned int mTimesUsed; const StiDetector* mdetector; <============ const StMeasuredPoint * msthit; float _energy; ================================================================================ class StiTreeNode ... StiTreeNode *parent; StiTreeNode *children[2]; ... class StiTrackNode : public StiTreeNode ... const StiDetector * _detector; StiHit* _hit; ... class StiKalmanTrackNode : public StiTrackNode ================================================================================ Detectors ========= detectorContainer->initialize(); // order detector in R and Phi detectorContainer->reset(); ... masterBuilder->build(*this); (*iter)->build(source) // loop over DetectorGroups Tracks ======= StiMaker::Make StiKalmanTrackFinder::findTracks() StiKalmanTrackFinder::extendSeeds(rMin=0) track = StiLocalTrackSeedFinder::findTrack(rMin) StiLocalTrackSeedFinder::makeTrack(&*_hitIter) StiLocalTrackSeedFinder::extendHit( *_seedHits.back() ) ... if (p->getLayerRadius() < fRxyMin) return false; StiHit* closestHit = _hitContainer->getNearestHit(p->getLayerRadius(), p->getLayerAngle(), ... hit.y(), hit.z(),_pars._deltaY, _pars._deltaZ); StiLocalTrackSeedFinder::extrapolate() StiLocalTrackSeedFinder::initializeTrack(_trackFactory->getInstance()); StiTrack::fit(kInsideOut) StiKalmanTrackFitter::fit(track,fitDirection) StiKalmanTrackFinder::extendTrack(track,rMin); StiKalmanTrackFinder::find(track,kOutsideIn,rMin) StiKalmanTrackFinder::StiKalmanTrackFinder::find(track,direction,leadNode,qa) StiKalmanTrackFinder::find(track,kInsideOut); track->StiKalmanTrack::approx(); // track->StiKalmanTrack::refit() ________________________________________________________________________________ StiDetectorBuilder::load Loadable::loadM StiTpcDetectorBuilder::loadDS -------------------------------------------------------------------------------- StiStEvent: StiKalmanTrackNode::getGlobalTpt(float x[6],float e[15]) getGlobalRadial(xx,ee); { get(alpha,xRef,xx,ee,chi2); { xx = (_x, _y, _z,| _eta, _ptin, _tanl|) from StiNodePars ee = () from mFE.A StiNodeErrsunion double _cXX; _x double _cYX,_cYY; _y 0 double _cZX,_cZY, _cZZ; _z 1 2 double _cEX,_cEY, _cEZ,|_cEE; _eta 3 4 5 double _cPX,_cPY, _cPZ,|_cPE, _cPP; _ptin 6 7 8 9 double _cTX,_cTY, _cTZ,|_cTE, _cTP, _cTT; _tanl } 10 11 12 13 14 enum {jRad=0,jPhi,jZ,jTan,jPsi,jCur, kX=0,kY,kZ,kE,kC,kT}; x[jRad] = sqrt(pow(xx[kX],2)+pow(xx[kY],2)); x[jPhi] = atan2(xx[kY],xx[kX]) + alpha; x[jZ ] = xx[kZ]; x[jTan] = xx[kT]; x[jPsi] = xx[kE] + alpha; x[jCur] = xx[kC]; double F[kNErrs][kNErrs]; memset(F,0,sizeof(F)); F[jPhi][kX] = -1e5; F[jPhi][kY] = 1e5; if (fabs(xx[kY])>1e-5) F[jPhi][kX] = -1./(xx[kY]); if (fabs(xx[kX])>1e-5) F[jPhi][kY] = 1./(xx[kX]); F[jZ][kZ] = 1.; F[jTan][kT] = 1; F[jPsi][kE] = 1; F[jCur][kC] = 1; memset(e,0,sizeof(*e)*15); static const int idx33[3][3] = {{0,1,3}, {1,2,4}, {3,4,5}}; static const int idx55[5][5] = {{0,1,3,6,10}, 0 {1,2,4,7,11}, 1 2 {3,4,5,8,12}, 3 4 5 {6,7, 8, 9,13}, 6 7 8 9 {10,11,12,13,14}}; 10 11 12 13 14 static const int idx55tpt[5][5] = {{0, 1, 2, 3, 4}, {1, 5, 6, 7, 8}, {2, 6, 9,10,11}, {3, 7,10,12,13}, {4, 8,11,13,14}}; static const int idx66[6][6] = {{ 0, 1, 3, 6,10,15},{ 1, 2, 4, 7,11,16},{ 3, 4, 5, 8,12,17} ,{ 6, 7, 8, 9,13,18},{10,11,12,13,14,19},{15,16,17,18,19,20}}; for (int k1=0;k1 SD * FROM SC (PC) VARIABLES (1/P,LAMBDA,PHI,YT,ZT) * TO SD VARIABLES (1/P,V',W',V,W) (at fixed U) * SPU = sign of u-component of particle momentum (output) * ERPLI(1,1) = DJ - unit vector in v-direction * ERPLI(1,2) = DK - unit vector in w-direction of detector system * PC RC=covPC PD RD=covPD, CALL TRSCSD (ERPIN(1), DUM(1), ERPIN(1), DUM(1), HI(1), + CHARGE, IERR, SPU, ERPLI(1,1), ERPLI(1,2)) Calculate A(5,5) and RD = ATxRCxA * Transforms Parameters and Error Matrix SD => SC * FROM SD VARIABLES (1/P,V',W',V,W) * TO SC VARIABLES (1/P,LAMBDA,PHI,YT,ZT) * SPU sign of u-component of particle momentum (input) * PD RD=covPD PC RC=covPC CALL TRSDSC (ERPIN(1), ERRIN(1), DUM(1), ERRIN(1), HI(1), + CHARGE, IERR, SPU, ERPLI(1,1), ERPLI(1,2)) Calculate A(5,5) and RC = ATxRDxA ASDSC = A ! SD => SC } IF (BACKTR .LT. 0.) CALL ERBCER (ERRIN(1)) ! reverse EI = ERRIN ! Error matrix into double precision IF (.NOT.LEONLY) CALL ERPINI ! Additional EMC initialization does nothing ? check! MVAR = 0 ! SPECIFIES TYPE OF EXTERNAL VARIABLES ( 1/P,LAMBDA,PHI,YT, ZT ; SC ) IFLAG =-1 ! INITIALIZATION, TRANSFORMATION OF ERROR MATRIX FROM EXTERNAL TO SC VARIABLES ITRAN = 0 ! TRANSFORMATION MATRIX IS UPDATED ,BUT ERROR MATRIX IS NOT TRANSFORMED ! X1, P1, H1, X2, P2, H2, CH, XL, R, MVAR, IFLAG, ITRAN, IERR CALL TRPROP (XI, PPI, HI, DUM, DUM, HI, CHTR, DUM, DUMM, MVAR, IFLAG, ITRAN, IERR) PS = (1/p, pY/p, pZ/p) == (1/p, tY, tZ) ! (PS,RS,PC,RC,H ,CH,IERR,SPX) CALL TRSPSC(PS,RS,PC,RC,H1,CH,IERR,SPX) ! transforms error matrix from spline variables (1/P,Y',Z',Y,Z) ! to sc variables (1/P,LAMBDA,PHI,YT,ZT) TN = (1, tY, tZ)/sqrt(1 + tY**2 + tZ**2) Calculate A and RC = ATxRSxA EF = EI CALL ERTRGO CALL ERTRCH CALL ERPROP MVAR = 0 ! specifies type of external variables = 0 => ( 1/P,LAMBDA,PHI,YT, ZT ; SC ) IFLAG = 0 ! ERROR PROPAGATION FROM X1 TO X2 ITRAN = 0 ! TRANSFORMATION MATRIX IS UPDATED ,BUT ERROR MATRIX IS NOT RANSFORMED IF (.NOT.LEEXAC) THEN CALL TRPROP (XI ,PPI, HI, XF, PF, HF, CHTR, STEP, DUM, & MVAR, IFLAG, ITRAN, IERR) ELSE CALL TRPRFN (XI ,PPI, HI, XF, PF, HF, CHTR, STEP, DUM, & MVAR, IFLAG, ITRAN, IERR) ENDIF Calc. A (!new B = A) B = B x A IF (ITRAN != 0) R = BTxRxB EF = ATxEFxA CALL ERSTOR CALL ERSTOR C(I,J) = B(I,J) ! Leave B-matrix intact for eventual further tracking ERROUT(I,ILPRED) = EF(I) ! Error matrix into single precision IF (BACKTR.LT.0.) THEN CALL ERBCER (ERROUT(1,ILPRED)) CALL ERBCTR (C) ENDIF IF (LEPLAN) THEN * PC RC=covPC PD RD=covPD, CALL TRSCSD (PF, ERROUT(1,ILPRED), PF ,ERROUT(1,ILPRED), HF, + CHARGE, IER ,SPU, ERPLO(1,1,INLIST), + ERPLO(1,2,INLIST)) IF (LEONLY) GOTO 25 CALL DMM55 (A, C, DUM) DUM = A x C CALL DMM55 (DUM, ASDSC, C) C = A x C x ASDSC ENDIF ================================================================================ ================================================================================ ================================================================================ Detectors and Hits ================================================================================ StiDefaultToolkit (StiToolkit) Factory< Filter > *_trackFilterFactory; Factory *_parameterFactory; Factory *_hitFactory; Factory *_trackFactory; Factory *_detectorFactory; Factory< StiCompositeTreeNode > *_detectorNodeFactory; Factory *_trackNodeFactory; Factory *_trackNodeExtFactory; Factory *_trackNodeInfFactory; // common object containers StiMasterDetectorBuilder *_detectorBuilder; StiDetectorContainer *_detectorContainer; StiDetectorGroups *_detectorGroups; StiHitContainer *_hitContainer; StiTrackContainer *_trackContainer; // service and convenience class objects. StiTrackFinder *_trackSeedFinder; StiTrackFinder *_trackFinder; StiTrackFitter *_trackFitter; StiVertexFinder *_vertexFinder; StiHitLoader *_hitLoader; EditableFilter *_loaderHitFilter; EditableFilter *_loaderTrackFilter; EditableFilter *_finderTrackFilter; StiToolkit StiToolkit * _instance; StiDetectorGroups => vector StiGenericDetectorGroup StiDetectorBuilder * _detectorBuilder; StiElossCalculator * _elossCalculator; int _groupId; StiDetectorGroup (StiGenericDetectorGroup) => StiDetectorBuilder StiMasterDetectorBuilder => vector StiDetectorBuilder => vector< vector > _detectors StiDetector => StiCompositeTreeNode Pointer to the parent detector node StiDetectorBuilder typedef map materialMap; typedef materialMap::value_type materialMapValType; typedef map shapeMap; typedef shapeMap::value_type shapeMapValType; typedef map detectorMap; typedef detectorMap::const_iterator detectorIterator; typedef detectorMap::value_type detectorMapValType; int _groupId; bool _active; materialMap mMaterialMap; shapeMap mShapeMap; detectorMap mDetectorMap; detectorIterator mDetectorIterator; vector< vector > _detectors; Factory*_detectorFactory; StiTrackingParameters *_trackingParameters; string _inputFile; static StiDetectorBuilder* fCurrentDetectorBuilder; StiMaterial * _gasMat; // Mother Volume material StiDetectorContainer.h => StiDetectorNode* mroot; => vector _sortedDetectors; => vector _selectedDetectors; => StiMasterDetectorBuilder * _masterDetectorBuilder ? StiDetectorTreeBuilder.h StiGenericDetectorGroup.h VectorAndEnd => vector theHitVec; typedef map HitMapToVectorAndEndType; typedef HitMapToVectorAndEndType::value_type HitMapToVectorAndEndTypeValType; StiHitContainer => vector _selectedHits; HitMapToVectorAndEndType _map; StiMaker InitDetectors: -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- common blocks <==> accessor / modifier routine erwork.inc DOUBLE PRECISION EI, EF, ASDSC COMMON /ERWORK/ EI(15), EF(15), ASDSC(5,5), + XI(3), PPI(3), HI(9), + XF(3), PF(3), HF(9), + CHTR, DEDX2, BACKTR, CUTEK, TLGCM2, TLRAD trcom3.inc DOUBLE PRECISION A, B, S, TN, T, COSL, SINL, COSP, SINP, COSL1 INTEGER NEW COMMON /TRCOM3/ A(5,5), B(5,5), S(15), + TN(3), T(5), COSL, SINL, COSP, SINP, COSL1, NEW ================================================================================ StiTpcSeedFinder::findTpcTracks HitMapToVectorAndEndType& map = StiToolkit::instance()->getHitContainer()->hits(); StiTPCCATrackerInterface::SetHits(map); StiTPCCATrackerInterface::Run() StiTPCCATrackerInterface::MakeSettings() StiTPCCATrackerInterface::MakeHits(); <<++ real hit errors AliHLTTPCCAGBTracker::FindTracks(); // AliHLTTPCCAGBTracker std::sort( fHits.Data(), fHits.Data() + fNHits, AliHLTTPCCAGBHit::Compare ); sort over sector, row, Z loop over sectors AliHLTTPCCAClusterData::readEvent AliHLTTPCCATracker::StartEvent AliHLTTPCCASliceData::InitFromClusterData loop over sectors AliHLTTPCCATracker::Reconstruct AliHLTTPCCATracker::Reconstructor::execute AliHLTTPCCATracker::NeighboursFinder StiTPCCATrackerInterface::MakeSeeds