#ifndef L1Algo_h #define L1Algo_h 1 #include "L1Field.h" #include "L1Station.h" #include "L1StsHit.h" #include "L1Triplet.h" #include "L1Branch.h" #include #include class L1Algo{ public: L1Station vStations[20] _fvecalignment; L1FieldRegion vtxFieldRegion _fvecalignment; L1FieldValue vtxFieldValue _fvecalignment; void CATrackFinder(); void KFTrackFitter(); void FitTrack( L1TrackPar &T, short unsigned int* vHits, int NHits, bool downstream ); void CAFindTrack( int ista, const L1Triplet* ptrip, L1Branch& newtrack, unsigned char &new_L, fscal &new_chi2, L1Branch ¤ttrack, unsigned char &curr_L, fscal &curr_chi2, int &NCalls); void Init( fscal geo[] ); //local copy of measurements arranged vs station/planes int NStations, fTrackingLevel, fGhostSuppression, bla3; double TRACK_CHI2_CUT; double CATime; double fMomentumCutOff; double bla; std::vector< fscal > vStsStrips, vStsStripsB; std::vector< L1StsHit > vStsHits; std::vector< unsigned char > vSFlag; // = iStation*4 + used*2 + used_by_duplets; std::vector< unsigned char > vSFlagB; std::vector< unsigned short int > vRecoHits; std::vector< L1Track > vTracks; std::vector vTriplets; int StsHitsStartIndex[20], StsHitsStopIndex[20]; int TripStartIndex[20], TripStopIndex[20]; unsigned char GetFStation( unsigned char flag ){ return flag/4; } bool GetFUsed ( unsigned char flag ){ return (flag&0x02)!=0; } bool GetFUsedD ( unsigned char flag ){ return (flag&0x01)!=0; } void SetFStation ( unsigned char &flag, unsigned iStation ){ flag = iStation*4 + (flag%4); } void SetFUsed ( unsigned char &flag ){ flag |= 0x02; } void SetFUsedD ( unsigned char &flag ){ flag |= 0x01; } void SetFUnUsed ( unsigned char &flag ){ flag &= 0xFC; } void SetFUnUsedD ( unsigned char &flag ){ flag &= 0xFE; } } _fvecalignment; inline void L1Algo::Init( fscal geo[] ) { int ind=0; { L1FieldValue B[3]; fvec z[3]; for( int i=0; i<3; i++){ z[i] = geo[ind++]; B[i].x = geo[ind++]; B[i].y = geo[ind++]; B[i].z = geo[ind++]; std::cout<<"L1Algo Input Magnetic field:"<=0; i-- ){ L1Station &st = vStations[i]; fvec dz = st.z-z0; fvec By = vStations[i].fieldSlice.cy[0]; Sy += dz*sy + dz*dz*By/2.; sy += dz*By; st.Sy = Sy; z0 = st.z; } } std::cout<<"L1Algo initialized"<