ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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.                  *
 **************************************************************************/

/* $Id$ */

//-------------------------------------------------------------------------
//     base class for ESD and AOD particles
//     Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------

#include "AliVParticle.h"
#include "TMath.h"

ClassImp(AliVParticle)

AliVParticle::AliVParticle(const AliVParticle& vPart) :
  TObject(vPart) { } // Copy constructor

AliVParticle& AliVParticle::operator=(const AliVParticle& vPart)
{ if (this!=&vPart) { 
    TObject::operator=(vPart); 
  }
  
  return *this; 
}

Bool_t AliVParticle::Local2GlobalMomentum(Double_t p[3], Double_t alpha) const {
  //----------------------------------------------------------------
  // This function performs local->global transformation of the
  // track momentum.
  // When called, the arguments are:
  //    p[0] = 1/pt * charge of the track;
  //    p[1] = sine of local azim. angle of the track momentum;
  //    p[2] = tangent of the track momentum dip angle;
  //   alpha - rotation angle. 
  // The result is returned as:
  //    p[0] = px
  //    p[1] = py
  //    p[2] = pz
  // Results for (nearly) straight tracks are meaningless !
  //----------------------------------------------------------------
  if (TMath::Abs(p[0])<=kAlmost0) return kFALSE;
  if (TMath::Abs(p[1])> kAlmost1) return kFALSE;

  Double_t pt=1./TMath::Abs(p[0]);
  Double_t cs=TMath::Cos(alpha), sn=TMath::Sin(alpha);
  Double_t r=TMath::Sqrt((1. - p[1])*(1. + p[1]));
  p[0]=pt*(r*cs - p[1]*sn); p[1]=pt*(p[1]*cs + r*sn); p[2]=pt*p[2];

  return kTRUE;
}

Bool_t AliVParticle::Local2GlobalPosition(Double_t r[3], Double_t alpha) const {
  //----------------------------------------------------------------
  // This function performs local->global transformation of the
  // track position.
  // When called, the arguments are:
  //    r[0] = local x
  //    r[1] = local y
  //    r[2] = local z
  //   alpha - rotation angle. 
  // The result is returned as:
  //    r[0] = global x
  //    r[1] = global y
  //    r[2] = global z
  //----------------------------------------------------------------
  Double_t cs=TMath::Cos(alpha), sn=TMath::Sin(alpha), x=r[0];
  r[0]=x*cs - r[1]*sn; r[1]=x*sn + r[1]*cs;

  return kTRUE;
}

Bool_t AliVParticle::Global2LocalMomentum(Double_t p[3], Short_t charge, Double_t &alpha) const {
  //----------------------------------------------------------------
  // This function performs global->local transformation of the
  // track momentum.
  // When called, the arguments are:
  //    p[0] = px
  //    p[1] = py
  //    p[2] = pz
  //   charge - of the track
  //   alpha - rotation angle. 
  // The result is returned as:
  //    p[0] = 1/pt * charge of the track;
  //    p[1] = sine of local azim. angle of the track momentum;
  //    p[2] = tangent of the track momentum dip angle;
  // Results for (nearly) straight tracks are meaningless !
  //----------------------------------------------------------------
  double pt = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]);
  if (pt == 0.) return kFALSE;
  alpha = TMath::Pi() + TMath::ATan2(-p[1], -p[0]);
  
  p[0] = 1./pt * (float)charge;
  p[1] = 0.;
  p[2] = p[2]/pt;

  return kTRUE;
}

Bool_t AliVParticle::Global2LocalPosition(Double_t r[3], Double_t alpha) const {
  return Local2GlobalPosition(r, -alpha);
}


Int_t AliVParticle::Compare( const TObject* obj) const {

  // 
  // see header file for class documentation
  //

  if (this == obj)
    return 0;
  // check type
  if ( Pt() < ((AliVParticle*)(obj))->Pt())
    return 1;
  else
    return -1;
}

 AliVParticle.cxx:1
 AliVParticle.cxx:2
 AliVParticle.cxx:3
 AliVParticle.cxx:4
 AliVParticle.cxx:5
 AliVParticle.cxx:6
 AliVParticle.cxx:7
 AliVParticle.cxx:8
 AliVParticle.cxx:9
 AliVParticle.cxx:10
 AliVParticle.cxx:11
 AliVParticle.cxx:12
 AliVParticle.cxx:13
 AliVParticle.cxx:14
 AliVParticle.cxx:15
 AliVParticle.cxx:16
 AliVParticle.cxx:17
 AliVParticle.cxx:18
 AliVParticle.cxx:19
 AliVParticle.cxx:20
 AliVParticle.cxx:21
 AliVParticle.cxx:22
 AliVParticle.cxx:23
 AliVParticle.cxx:24
 AliVParticle.cxx:25
 AliVParticle.cxx:26
 AliVParticle.cxx:27
 AliVParticle.cxx:28
 AliVParticle.cxx:29
 AliVParticle.cxx:30
 AliVParticle.cxx:31
 AliVParticle.cxx:32
 AliVParticle.cxx:33
 AliVParticle.cxx:34
 AliVParticle.cxx:35
 AliVParticle.cxx:36
 AliVParticle.cxx:37
 AliVParticle.cxx:38
 AliVParticle.cxx:39
 AliVParticle.cxx:40
 AliVParticle.cxx:41
 AliVParticle.cxx:42
 AliVParticle.cxx:43
 AliVParticle.cxx:44
 AliVParticle.cxx:45
 AliVParticle.cxx:46
 AliVParticle.cxx:47
 AliVParticle.cxx:48
 AliVParticle.cxx:49
 AliVParticle.cxx:50
 AliVParticle.cxx:51
 AliVParticle.cxx:52
 AliVParticle.cxx:53
 AliVParticle.cxx:54
 AliVParticle.cxx:55
 AliVParticle.cxx:56
 AliVParticle.cxx:57
 AliVParticle.cxx:58
 AliVParticle.cxx:59
 AliVParticle.cxx:60
 AliVParticle.cxx:61
 AliVParticle.cxx:62
 AliVParticle.cxx:63
 AliVParticle.cxx:64
 AliVParticle.cxx:65
 AliVParticle.cxx:66
 AliVParticle.cxx:67
 AliVParticle.cxx:68
 AliVParticle.cxx:69
 AliVParticle.cxx:70
 AliVParticle.cxx:71
 AliVParticle.cxx:72
 AliVParticle.cxx:73
 AliVParticle.cxx:74
 AliVParticle.cxx:75
 AliVParticle.cxx:76
 AliVParticle.cxx:77
 AliVParticle.cxx:78
 AliVParticle.cxx:79
 AliVParticle.cxx:80
 AliVParticle.cxx:81
 AliVParticle.cxx:82
 AliVParticle.cxx:83
 AliVParticle.cxx:84
 AliVParticle.cxx:85
 AliVParticle.cxx:86
 AliVParticle.cxx:87
 AliVParticle.cxx:88
 AliVParticle.cxx:89
 AliVParticle.cxx:90
 AliVParticle.cxx:91
 AliVParticle.cxx:92
 AliVParticle.cxx:93
 AliVParticle.cxx:94
 AliVParticle.cxx:95
 AliVParticle.cxx:96
 AliVParticle.cxx:97
 AliVParticle.cxx:98
 AliVParticle.cxx:99
 AliVParticle.cxx:100
 AliVParticle.cxx:101
 AliVParticle.cxx:102
 AliVParticle.cxx:103
 AliVParticle.cxx:104
 AliVParticle.cxx:105
 AliVParticle.cxx:106
 AliVParticle.cxx:107
 AliVParticle.cxx:108
 AliVParticle.cxx:109
 AliVParticle.cxx:110
 AliVParticle.cxx:111
 AliVParticle.cxx:112
 AliVParticle.cxx:113
 AliVParticle.cxx:114
 AliVParticle.cxx:115
 AliVParticle.cxx:116
 AliVParticle.cxx:117
 AliVParticle.cxx:118
 AliVParticle.cxx:119
 AliVParticle.cxx:120
 AliVParticle.cxx:121
 AliVParticle.cxx:122
 AliVParticle.cxx:123
 AliVParticle.cxx:124
 AliVParticle.cxx:125
 AliVParticle.cxx:126
 AliVParticle.cxx:127
 AliVParticle.cxx:128
 AliVParticle.cxx:129
 AliVParticle.cxx:130
 AliVParticle.cxx:131