@@ -249,8 +249,11 @@ class TrackParametrization
249249 GPUd () bool isValid () const ;
250250 GPUd () void invalidate ();
251251
252- GPUhd () uint16_t getUserField () const ;
253- GPUhd () void setUserField (uint16_t v);
252+ GPUhd () uint8_t getUserField () const ;
253+ GPUhd () void setUserField (uint8_t v);
254+
255+ GPUhd () void setPerProjection (bool v) { setBit (0 ); } // request perform operations per projection
256+ GPUhd () bool isPerProjection () const { return testBit (0 ); } // perform operations per projection?
254257
255258 GPUd () void printParam () const ;
256259 GPUd () void printParamHexadecimal ();
@@ -268,6 +271,11 @@ class TrackParametrization
268271
269272 GPUd () yzerr_t getVertexInTrackFrame (const o2::dataformats::VertexBase& vtx) const ;
270273
274+ protected:
275+ GPUhd () void setBit (uint8_t b, bool v = true );
276+ GPUhd () bool testBit (uint8_t b) const ;
277+ GPUhd () uint8_t getBits () const ;
278+
271279 private:
272280 //
273281 static constexpr value_t InvalidX = -99999 .f;
@@ -740,16 +748,43 @@ GPUdi() void TrackParametrization<value_T>::invalidate()
740748 mX = InvalidX;
741749}
742750
751+ // ____________________________________________________________
743752template <typename value_T>
744- GPUhdi () uint16_t TrackParametrization<value_T>::getUserField() const
753+ GPUhdi () void TrackParametrization<value_T>::setBit( uint8_t b, bool v)
745754{
746- return mUserField ;
755+ if (v) {
756+ mUserField |= ((0x1 << b) & 0xff );
757+ } else {
758+ mUserField &= ~((0x1 << b) & 0xff );
759+ }
747760}
748761
762+ // ____________________________________________________________
763+ template <typename value_T>
764+ GPUhdi () bool TrackParametrization<value_T>::testBit(uint8_t b) const
765+ {
766+ return mUserField & ((0x1 << b) & 0xff );
767+ }
768+
769+ // ____________________________________________________________
770+ template <typename value_T>
771+ GPUhdi () uint8_t TrackParametrization<value_T>::getBits() const
772+ {
773+ return (mUserField & 0xff );
774+ }
775+
776+ // ____________________________________________________________
777+ template <typename value_T>
778+ GPUhdi () uint8_t TrackParametrization<value_T>::getUserField() const
779+ {
780+ return ((mUserField >> 8 ) & 0xff );
781+ }
782+
783+ // ____________________________________________________________
749784template <typename value_T>
750- GPUhdi () void TrackParametrization<value_T>::setUserField(uint16_t v)
785+ GPUhdi () void TrackParametrization<value_T>::setUserField(uint8_t v)
751786{
752- mUserField = v ;
787+ mUserField |= uint16_t (v & 0xff ) << 8 ;
753788}
754789
755790// ____________________________________________________________
0 commit comments