//-*- Mode: C++ -*- // ***************************************************************************** // * // @Autors: I.Kulakov; M.Zyzak; I.Kisel * // @e-mail: I.Kulakov@gsi.de; M.Zyzak@gsi.de; I.Kisel@compeng.uni-frankfurt.de * // * // ***************************************************************************** #ifndef ITSCANPletsV_H #define ITSCANPletsV_H #include using std::vector; #include "ITSCAStationArray.h" #include "AliHLTTPCCATrackParamVector.h" class ITSCANPletV { //* Parameters of N-plet in vectors public: ITSCANPletV( int n = 0 ):fParam(),fIsValid(false){ fIHit.resize(n); } ITSCANPletV( const ushort_v& ihit, const short_v& ista, const AliHLTTPCCATrackParamVector& param, const sfloat_m& isValid ): fParam(param), fIsValid(isValid) { fIHit.resize( 1, TESV(ista,ihit) ); } ITSCANPletV( const ITSCANPletV& s1, const ITSCANPletV& s2, const int iV, const AliHLTTPCCATrackParamVector& param, const sfloat_m isValid ):fParam(param), fIsValid(isValid) { fIHit.resize( s1.N() + 1 ); assert( s1.N() == s2.N() ); for( int i=0; i < N()-1; i++) fIHit[i] = s1.IHit(i); fIHit[N()-1] = s2.IHit(N()-2)[iV]; } int N() const { return fIHit.size(); } const TESV& IHit( int IH ) const { return fIHit[IH]; } const vector& IHit() const { return fIHit; } const AliHLTTPCCATrackParamVector& Param() const { return fParam; } AliHLTTPCCATrackParamVector& Param() { return fParam; } sfloat_m IsValid() const { return fIsValid; } // check wether a is neighbour from the right to this sfloat_m IsRightNeighbour( const ITSCANPletV& a, unsigned int iV ) const { sfloat_m active = fIsValid; assert( a.N() >= N() - 1 ); for( int i = 0; i < N() - 1; i++ ) { active &= IHit(i+1) == a.IHit(i)[iV]; } return active; } void CopyOne( int iV, ITSCANPletV a, int iVa ) { for( int i = 0; i < N(); i++ ) { fIHit[i].s[iV] = a.fIHit[i].s[iVa]; fIHit[i].e[iV] = a.fIHit[i].e[iVa]; } fParam.SetTrackParamOne( iV, a.fParam, iVa ); fIsValid = (sfloat_m(ushort_v(Vc::IndexesFromZero) == ushort_v(iV)) && sfloat_m(a.fIsValid[iVa])) || (!sfloat_m(ushort_v(Vc::IndexesFromZero) == ushort_v(iV)) && fIsValid); } private: vector fIHit; // index of hit on station AliHLTTPCCATrackParamVector fParam; sfloat_m fIsValid; }; class ITSCANPletsV: public ITSCAStationArray { public: ITSCANPletsV(){}; ITSCANPletsV( int nSta, const ITSCAHits* hits ):ITSCAStationArray( nSta,hits ){}; }; #endif