Possibility to get the rotation angle of cluster's reference plane
authorbelikov <Iouri.Belikov@cern.ch>
Sat, 3 May 2014 11:42:42 +0000 (13:42 +0200)
committerbelikov <Iouri.Belikov@cern.ch>
Sat, 3 May 2014 11:42:42 +0000 (13:42 +0200)
STEER/STEER/AliCluster.cxx
STEER/STEER/AliCluster.h

index 4dca160..7206d4a 100644 (file)
@@ -29,6 +29,7 @@
 #include <TGeoManager.h>
 #include <TGeoMatrix.h>
 #include <TGeoPhysicalNode.h>
+#include <TMath.h>
 
 #include "AliCluster.h"
 #include "AliLog.h"
@@ -241,6 +242,34 @@ Bool_t AliCluster::GetXRefPlane(Float_t &xref) const
 }
 
 //______________________________________________________________________________
+Bool_t AliCluster::GetXAlphaRefPlane(Float_t &x, Float_t &alpha) const
+{
+  // Get the distance between the origin and the ref. plane together with
+  // the rotation anlge of the ref. plane.
+  // All the needed information is taken only
+  // from TGeo.
+  const TGeoHMatrix *mt = GetTracking2LocalMatrix();
+  if (!mt) return kFALSE;
+
+  const TGeoHMatrix *ml = GetMatrix();
+  if (!ml) return kFALSE;
+
+  TGeoHMatrix m(*ml);
+  m.Multiply(mt);
+  const Double_t txyz[3]={0.}; Double_t xyz[3]={0.};
+  m.LocalToMaster(txyz,xyz);
+    
+  x=TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]);
+    
+  Double_t a=TMath::ATan2(xyz[1],xyz[0]);
+  if (a<0) a+=TMath::TwoPi();
+  else if (a>=TMath::TwoPi()) a-=TMath::TwoPi();
+  alpha=a;
+
+  return kTRUE;
+}
+
+//______________________________________________________________________________
 Bool_t AliCluster::Misalign()
 {
   // ...
index e9ea130..4f73a95 100644 (file)
@@ -58,6 +58,7 @@ class AliCluster : public TObject {
   virtual  Bool_t   GetGlobalXYZ(Float_t xyz[3]) const;
   virtual  Bool_t   GetGlobalCov(Float_t cov[6]) const;
   virtual  Bool_t   GetXRefPlane(Float_t &xref) const;
+  virtual  Bool_t   GetXAlphaRefPlane(Float_t &x, Float_t &alpha) const;
 
   Bool_t   Misalign();