Rotate z axis to point into myvector direction

Hi guys,

I have several vectors in xyz space, vector1, vector2, vector3, etc.
I need to rotate the whole system so that the z-axis of my new system points in the direction of vector1. Is there a good way to do this? I have found the following from RotateAxes, but not sure how to define the newX and newY. I’d assume my newZ is my vector1.

          vector1.SetPxPyPzE( px1, py1,pz1, ee1  );
          vector2.SetPxPyPzE( px2, py2,pz2, ee2  );
          vector3.SetPxPyPzE( px3, py3,pz3, ee2  );
         TVector3 newX(0,1,0); //not sure what should come here
         TVector3 newY(0,0,1); //nor here.
         TVector3 newZ(vector1);
         a.RotateAxes(newX,newY,newZ);

What is a in this case? It’s not specified in the documentation, and when passing a vector it returns

error:class TVector3’ has no member named ‘RotateAxes’;

Thanks.

See the documentation of TVector3

I’m sorry, I am new to this. From this documentation:
TVector3 objects can be rotated by objects of the TRotation class using the Transform()member functions,

And when checking the TRotation class I again find the function I have tried to use:

Rotation of local axes

Member function RotateAxes() adds a rotation of local axes to the current rotation and returns the result:

TVector3 newX(0,1,0);

TVector3 newY(0,0,1);

TVector3 newZ(1,0,0);

a.RotateAxes(newX,newY,newZ);

My question again is: What is a in the last line of the example?

Thanks.

Hover the mouse over it and you’ll see it’s a TArc, with a link. With the pop-up tips it’s not always easy to click on those links, but eventually you should get to this example and then the TArc documentation.

I am also quite a new to Root and therefor my help might not be as good as others, but I think you have a simpler problem. You have to create a TRotation “a” and can afterwards apply this “a” to a vector. I think it should be something like:

TVector3 newX(0,1,0);
TVector3 newY(0,0,1);
TVector3 newZ(1,0,0);

TRotation a;
a.RotateAxes(newX,newY,newZ);

TVector3 ThisGetsRotated(2,1,3);
std::cout<<ThisGetsRotated.X()<<" "<<ThisGetsRotated.Y()<<" "<<ThisGetsRotated.Z()<<std::endl;
ThisGetsRotated.Transform(a);
std::cout<<ThisGetsRotated.X()<<" "<<ThisGetsRotated.Y()<<" "<<ThisGetsRotated.Z()<<std::endl;

This code should just permutate the coordinates. “a” is a matrix (a Rotation Object) and has to be defined with RotateAxes. Afterwards it can be applied to a Vector with Transform or simply by multiplying.
Hope that helps.