Setting of aliases to rawReader done only once. Base decision on cosmic or calib...
[u/mrichter/AliRoot.git] / STEER / STEER / AliCluster3D.cxx
CommitLineData
39d4ae58 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//-------------------------------------------------------------------------
17// Class AliCluster3D
18// This is an extension of the AliCluster class for the case when
19// the sensitive plane this cluster belongs to is arbitrarily oriented
20// in space. This class can serve as the base for the TOF and HMPID
21// clusters.
22//
23// cvetan.cheshkov@cern.ch & jouri.belikov@cern.ch 5/3/2007
24//-------------------------------------------------------------------------
25#include <TGeoManager.h>
26#include <TGeoMatrix.h>
27
28#include "AliCluster3D.h"
29#include "AliLog.h"
30
31ClassImp(AliCluster3D)
32
33//______________________________________________________________________________
34AliCluster3D::AliCluster3D():
35 AliCluster(),
36 fSigmaX2(0),
37 fSigmaXY(0),
38 fSigmaXZ(0)
39{
40 // Default constructor
41}
42
43//______________________________________________________________________________
44AliCluster3D::AliCluster3D(UShort_t volId,
45 Float_t x, Float_t y, Float_t z,
46 Float_t sx2, Float_t sxy, Float_t sxz,
47 Float_t sy2, Float_t syz,
48 Float_t sz2, const Int_t *lab):
49 AliCluster(volId,x,y,z,sy2,sz2,syz,lab),
50 fSigmaX2(sx2),
51 fSigmaXY(sxy),
52 fSigmaXZ(sxz)
53{
54//-------------------------------------------------------------------------
55// The main constructor
56//-------------------------------------------------------------------------
57}
58
59//______________________________________________________________________________
60AliCluster3D::AliCluster3D(const AliCluster3D& cluster):
61 AliCluster(cluster),
62 fSigmaX2(cluster.fSigmaX2),
63 fSigmaXY(cluster.fSigmaXY),
64 fSigmaXZ(cluster.fSigmaXZ)
65{
66 // Copy constructor
67}
68
69//______________________________________________________________________________
70Bool_t AliCluster3D::GetGlobalCov(Float_t cov[6]) const
71{
72
73 // Get the covariance matrix in the global coordinate system.
74 // All the needed information is taken only
75 // from TGeo.
76
77 if (!gGeoManager || !gGeoManager->IsClosed()) {
78 AliError("gGeoManager doesn't exist or it is still opened !");
79 return kFALSE;
80 }
81
82 const TGeoHMatrix *mt = GetTracking2LocalMatrix();
83 if (!mt) return kFALSE;
84
85 TGeoHMatrix *ml = GetMatrix();
86 if (!ml) return kFALSE;
87
88 TGeoHMatrix m;
89 Double_t tcov[9] = { fSigmaX2, fSigmaXY, fSigmaXZ,
90 fSigmaXY, GetSigmaY2(), GetSigmaYZ(),
91 fSigmaXZ, GetSigmaYZ(), GetSigmaZ2()};
92 m.SetRotation(tcov);
93 m.Multiply(&mt->Inverse());
94 m.Multiply(&ml->Inverse());
95 m.MultiplyLeft(mt);
96 m.MultiplyLeft(ml);
97 Double_t *ncov = m.GetRotationMatrix();
98 cov[0] = ncov[0]; cov[1] = ncov[1]; cov[2] = ncov[2];
99 cov[3] = ncov[4]; cov[4] = ncov[5];
100 cov[5] = ncov[8];
101
102 return kTRUE;
103}