ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-------------------------------------------------------------------------
//                         Class AliCluster3D
//  This is an extension of the AliCluster class for the case when
//  the sensitive plane this cluster belongs to is arbitrarily oriented
//  in space.  This class can serve as the base for the TOF and HMPID
//  clusters.
//
// cvetan.cheshkov@cern.ch & jouri.belikov@cern.ch    5/3/2007
//-------------------------------------------------------------------------
#include <TGeoManager.h>
#include <TGeoMatrix.h>

#include "AliCluster3D.h"
#include "AliLog.h"

ClassImp(AliCluster3D)

//______________________________________________________________________________
AliCluster3D::AliCluster3D():
  AliCluster(),
  fSigmaX2(0),
  fSigmaXY(0),
  fSigmaXZ(0)
{
  // Default constructor
}

//______________________________________________________________________________
AliCluster3D::AliCluster3D(UShort_t volId, 
   Float_t x,   Float_t y,   Float_t z,
   Float_t sx2, Float_t sxy, Float_t sxz,
                Float_t sy2, Float_t syz, 
                             Float_t sz2, const Int_t *lab):
  AliCluster(volId,x,y,z,sy2,sz2,syz,lab),
  fSigmaX2(sx2),
  fSigmaXY(sxy),
  fSigmaXZ(sxz)
{
//-------------------------------------------------------------------------
// The main constructor
//-------------------------------------------------------------------------
}

//______________________________________________________________________________
AliCluster3D::AliCluster3D(const AliCluster3D& cluster):
  AliCluster(cluster),
  fSigmaX2(cluster.fSigmaX2),
  fSigmaXY(cluster.fSigmaXY),
  fSigmaXZ(cluster.fSigmaXZ)
{
  // Copy constructor
}

//______________________________________________________________________________
Bool_t AliCluster3D::GetGlobalCov(Float_t cov[6]) const
{

  // Get the covariance matrix in the global coordinate system.
  // All the needed information is taken only
  // from TGeo.

  if (!gGeoManager || !gGeoManager->IsClosed()) {
    AliError("gGeoManager doesn't exist or it is still opened !");
    return kFALSE;
  }

  const TGeoHMatrix *mt = GetTracking2LocalMatrix();
  if (!mt) return kFALSE;

  TGeoHMatrix *ml = GetMatrix();
  if (!ml) return kFALSE;

  TGeoHMatrix m;
  Double_t tcov[9] = { fSigmaX2, fSigmaXY,     fSigmaXZ, 
  	               fSigmaXY, GetSigmaY2(), GetSigmaYZ(), 
  	               fSigmaXZ, GetSigmaYZ(), GetSigmaZ2()};
  m.SetRotation(tcov);
  m.Multiply(&mt->Inverse());
  m.Multiply(&ml->Inverse());
  m.MultiplyLeft(mt);
  m.MultiplyLeft(ml);
  Double_t *ncov = m.GetRotationMatrix();
  cov[0] = ncov[0]; cov[1] = ncov[1]; cov[2] = ncov[2];
  cov[3] = ncov[4]; cov[4] = ncov[5];
  cov[5] = ncov[8];

  return kTRUE;
}
 AliCluster3D.cxx:1
 AliCluster3D.cxx:2
 AliCluster3D.cxx:3
 AliCluster3D.cxx:4
 AliCluster3D.cxx:5
 AliCluster3D.cxx:6
 AliCluster3D.cxx:7
 AliCluster3D.cxx:8
 AliCluster3D.cxx:9
 AliCluster3D.cxx:10
 AliCluster3D.cxx:11
 AliCluster3D.cxx:12
 AliCluster3D.cxx:13
 AliCluster3D.cxx:14
 AliCluster3D.cxx:15
 AliCluster3D.cxx:16
 AliCluster3D.cxx:17
 AliCluster3D.cxx:18
 AliCluster3D.cxx:19
 AliCluster3D.cxx:20
 AliCluster3D.cxx:21
 AliCluster3D.cxx:22
 AliCluster3D.cxx:23
 AliCluster3D.cxx:24
 AliCluster3D.cxx:25
 AliCluster3D.cxx:26
 AliCluster3D.cxx:27
 AliCluster3D.cxx:28
 AliCluster3D.cxx:29
 AliCluster3D.cxx:30
 AliCluster3D.cxx:31
 AliCluster3D.cxx:32
 AliCluster3D.cxx:33
 AliCluster3D.cxx:34
 AliCluster3D.cxx:35
 AliCluster3D.cxx:36
 AliCluster3D.cxx:37
 AliCluster3D.cxx:38
 AliCluster3D.cxx:39
 AliCluster3D.cxx:40
 AliCluster3D.cxx:41
 AliCluster3D.cxx:42
 AliCluster3D.cxx:43
 AliCluster3D.cxx:44
 AliCluster3D.cxx:45
 AliCluster3D.cxx:46
 AliCluster3D.cxx:47
 AliCluster3D.cxx:48
 AliCluster3D.cxx:49
 AliCluster3D.cxx:50
 AliCluster3D.cxx:51
 AliCluster3D.cxx:52
 AliCluster3D.cxx:53
 AliCluster3D.cxx:54
 AliCluster3D.cxx:55
 AliCluster3D.cxx:56
 AliCluster3D.cxx:57
 AliCluster3D.cxx:58
 AliCluster3D.cxx:59
 AliCluster3D.cxx:60
 AliCluster3D.cxx:61
 AliCluster3D.cxx:62
 AliCluster3D.cxx:63
 AliCluster3D.cxx:64
 AliCluster3D.cxx:65
 AliCluster3D.cxx:66
 AliCluster3D.cxx:67
 AliCluster3D.cxx:68
 AliCluster3D.cxx:69
 AliCluster3D.cxx:70
 AliCluster3D.cxx:71
 AliCluster3D.cxx:72
 AliCluster3D.cxx:73
 AliCluster3D.cxx:74
 AliCluster3D.cxx:75
 AliCluster3D.cxx:76
 AliCluster3D.cxx:77
 AliCluster3D.cxx:78
 AliCluster3D.cxx:79
 AliCluster3D.cxx:80
 AliCluster3D.cxx:81
 AliCluster3D.cxx:82
 AliCluster3D.cxx:83
 AliCluster3D.cxx:84
 AliCluster3D.cxx:85
 AliCluster3D.cxx:86
 AliCluster3D.cxx:87
 AliCluster3D.cxx:88
 AliCluster3D.cxx:89
 AliCluster3D.cxx:90
 AliCluster3D.cxx:91
 AliCluster3D.cxx:92
 AliCluster3D.cxx:93
 AliCluster3D.cxx:94
 AliCluster3D.cxx:95
 AliCluster3D.cxx:96
 AliCluster3D.cxx:97
 AliCluster3D.cxx:98
 AliCluster3D.cxx:99
 AliCluster3D.cxx:100
 AliCluster3D.cxx:101
 AliCluster3D.cxx:102
 AliCluster3D.cxx:103