void sbox(uint8_t which, const uint32_t in[4], uint32_t out[4]) { uint32_t a[4]; uint32_t b[4]; uint32_t c[4]; uint32_t d[4]; perm(in, a); s_hat(which, a, b); t_hat(b, c); perm_inv(c, d); trans_inv(d, out); }
//_____________________________________________________________________________ bool THaSpectrometerDetector::CalcTrackIntercept(THaTrack* theTrack, Double_t& t, Double_t& xcross, Double_t& ycross) { // projects a given track on to the plane of the detector // xcross and ycross are the x and y coords of this intersection // t is the distance from the origin of the track to the given plane. // // If a hit is NOT found, then t, xcross, and ycross are unchanged. TVector3 t0( theTrack->GetX(), theTrack->GetY(), 0.0 ); Double_t norm = TMath::Sqrt(1.0 + theTrack->GetTheta()*theTrack->GetTheta() + theTrack->GetPhi()*theTrack->GetPhi()); TVector3 t_hat( theTrack->GetTheta()/norm, theTrack->GetPhi()/norm, 1.0/norm ); TVector3 v; if( !IntersectPlaneWithRay( fXax, fYax, fOrigin, t0, t_hat, t, v )) return false; v -= fOrigin; xcross = v.Dot(fXax); ycross = v.Dot(fYax); return true; }