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.                  *
 **************************************************************************/


//-------------------------------------------------------------------------
//     Realisation of AliVParticle for MC Particles
//     Basically a stripped down AliMCParicle / TParticle
//     with minimum information on MC tracks
//     Author: Christian Klein-Bösing, CERN
//-------------------------------------------------------------------------


#include "AliAODMCParticle.h"
#include "AliAODEvent.h"

#include "TDatabasePDG.h"
#include "TParticle.h"
#include "TClonesArray.h"


ClassImp(AliAODMCParticle)

TString AliAODMCParticle::fgkStdBranchName("mcparticles");

AliAODMCParticle::AliAODMCParticle():
AliVParticle(),
  fPdgCode(0),
  fFlag(0),
  fLabel(0),
  fMother(0),
  fPx(0),
  fPy(0),
  fPz(0),
  fE(0),
  fVx(0),
  fVy(0),
  fVz(0),
  fVt(0),
  fGeneratorIndex(-1)
{
  // Default Constructor
  fDaughter[0] =   fDaughter[1] = 0;
}

    
AliAODMCParticle::AliAODMCParticle(const AliMCParticle* mcpart, Int_t label,Int_t flag):
    AliVParticle(*mcpart),
    fPdgCode(mcpart->Particle()->GetPdgCode()),
    fFlag(flag),
    fLabel(label),
    fMother(mcpart->GetMother()),
    fPx(mcpart->Particle()->Px()),
    fPy(mcpart->Particle()->Py()),
    fPz(mcpart->Particle()->Pz()),
    fE(mcpart->Particle()->Energy()),
    fVx(mcpart->Particle()->Vx()),
    fVy(mcpart->Particle()->Vy()),
    fVz(mcpart->Particle()->Vz()),
    fVt(mcpart->Particle()->T()),
    fGeneratorIndex(mcpart->GetGeneratorIndex())
{
    // Constructor
  fDaughter[0] =  mcpart->GetFirstDaughter(); 
  fDaughter[1] =  mcpart->GetLastDaughter();
}
    
    
AliAODMCParticle::AliAODMCParticle(const AliAODMCParticle& mcPart) :
    AliVParticle(mcPart),
    fPdgCode(mcPart.fPdgCode),
    fFlag(mcPart.fFlag),
    fLabel(mcPart.fLabel),
    fMother(mcPart.fMother),
    fPx(mcPart.fPx),
    fPy(mcPart.fPy),
    fPz(mcPart.fPz),
    fE(mcPart.fE),
    fVx(mcPart.fVx),
    fVy(mcPart.fVy),
    fVz(mcPart.fVz),
    fVt(mcPart.fVt),
    fGeneratorIndex(-1)
{
  // Copy constructor
  fDaughter[0] = mcPart.fDaughter[0]; 
  fDaughter[1] = mcPart.fDaughter[1]; 
}

AliAODMCParticle& AliAODMCParticle::operator=(const AliAODMCParticle& mcPart)
{ 
  //
  // assignment operator
  //
  if (this!=&mcPart) { 
    AliVParticle::operator=(mcPart);
    fPdgCode    = mcPart.fPdgCode;
    fFlag       = mcPart.fFlag;
    fLabel      = mcPart.fLabel;
    fMother     = mcPart.fMother;
    fPx         = mcPart.fPx;
    fPy         = mcPart.fPy;
    fPz         = mcPart.fPz;
    fE          = mcPart.fE;
    fVx         = mcPart.fVx;
    fVy         = mcPart.fVy;
    fVz         = mcPart.fVz;
    fVt         = mcPart.fVt;
    fGeneratorIndex = mcPart.fGeneratorIndex;
    fDaughter[0] = mcPart.fDaughter[0]; 
    fDaughter[1] = mcPart.fDaughter[1]; 
  }  
  
  return *this;

}

Double_t AliAODMCParticle::M()         const
{
  //
  // return the mass 
  //
    TParticlePDG* pdg =  TDatabasePDG::Instance()->GetParticle(fPdgCode);
    if (pdg) {
	return (pdg->Mass());
    } else {
	return GetCalcMass();
    }
}


Short_t AliAODMCParticle::Charge()     const
{
  //
  // return tha charge
  //
    TParticlePDG* pdg =  TDatabasePDG::Instance()->GetParticle(fPdgCode);
    if (pdg) {
	return (Short_t (pdg->Charge()));
    } else {
	return -99;
    }
}

void AliAODMCParticle::Print(const Option_t */*opt*/) const {
// Print particle information
  if(TDatabasePDG::Instance()->GetParticle(fPdgCode)){
    Printf(">>> PDG (%d) : %s",fPdgCode,TDatabasePDG::Instance()->GetParticle(fPdgCode)->GetName());
  }
  else{
    Printf(">>> PDG (%d) : %s",fPdgCode,"Unknown");
  }
  Printf(">>  P(%3.3f,%3.3f,%3.3f) V((%3.3f,%3.3f,%3.3f,%3.3f)",fPx,fPy,fPz,fVx,fVy,fVz,fVt);  
  Printf(">   Mother %d, First Daughter %d Last Daughter %d , Status %d, PhysicalPrimary %d",
	 fMother,fDaughter[0],fDaughter[1],GetStatus(),
	 IsPhysicalPrimary());
}
 AliAODMCParticle.cxx:1
 AliAODMCParticle.cxx:2
 AliAODMCParticle.cxx:3
 AliAODMCParticle.cxx:4
 AliAODMCParticle.cxx:5
 AliAODMCParticle.cxx:6
 AliAODMCParticle.cxx:7
 AliAODMCParticle.cxx:8
 AliAODMCParticle.cxx:9
 AliAODMCParticle.cxx:10
 AliAODMCParticle.cxx:11
 AliAODMCParticle.cxx:12
 AliAODMCParticle.cxx:13
 AliAODMCParticle.cxx:14
 AliAODMCParticle.cxx:15
 AliAODMCParticle.cxx:16
 AliAODMCParticle.cxx:17
 AliAODMCParticle.cxx:18
 AliAODMCParticle.cxx:19
 AliAODMCParticle.cxx:20
 AliAODMCParticle.cxx:21
 AliAODMCParticle.cxx:22
 AliAODMCParticle.cxx:23
 AliAODMCParticle.cxx:24
 AliAODMCParticle.cxx:25
 AliAODMCParticle.cxx:26
 AliAODMCParticle.cxx:27
 AliAODMCParticle.cxx:28
 AliAODMCParticle.cxx:29
 AliAODMCParticle.cxx:30
 AliAODMCParticle.cxx:31
 AliAODMCParticle.cxx:32
 AliAODMCParticle.cxx:33
 AliAODMCParticle.cxx:34
 AliAODMCParticle.cxx:35
 AliAODMCParticle.cxx:36
 AliAODMCParticle.cxx:37
 AliAODMCParticle.cxx:38
 AliAODMCParticle.cxx:39
 AliAODMCParticle.cxx:40
 AliAODMCParticle.cxx:41
 AliAODMCParticle.cxx:42
 AliAODMCParticle.cxx:43
 AliAODMCParticle.cxx:44
 AliAODMCParticle.cxx:45
 AliAODMCParticle.cxx:46
 AliAODMCParticle.cxx:47
 AliAODMCParticle.cxx:48
 AliAODMCParticle.cxx:49
 AliAODMCParticle.cxx:50
 AliAODMCParticle.cxx:51
 AliAODMCParticle.cxx:52
 AliAODMCParticle.cxx:53
 AliAODMCParticle.cxx:54
 AliAODMCParticle.cxx:55
 AliAODMCParticle.cxx:56
 AliAODMCParticle.cxx:57
 AliAODMCParticle.cxx:58
 AliAODMCParticle.cxx:59
 AliAODMCParticle.cxx:60
 AliAODMCParticle.cxx:61
 AliAODMCParticle.cxx:62
 AliAODMCParticle.cxx:63
 AliAODMCParticle.cxx:64
 AliAODMCParticle.cxx:65
 AliAODMCParticle.cxx:66
 AliAODMCParticle.cxx:67
 AliAODMCParticle.cxx:68
 AliAODMCParticle.cxx:69
 AliAODMCParticle.cxx:70
 AliAODMCParticle.cxx:71
 AliAODMCParticle.cxx:72
 AliAODMCParticle.cxx:73
 AliAODMCParticle.cxx:74
 AliAODMCParticle.cxx:75
 AliAODMCParticle.cxx:76
 AliAODMCParticle.cxx:77
 AliAODMCParticle.cxx:78
 AliAODMCParticle.cxx:79
 AliAODMCParticle.cxx:80
 AliAODMCParticle.cxx:81
 AliAODMCParticle.cxx:82
 AliAODMCParticle.cxx:83
 AliAODMCParticle.cxx:84
 AliAODMCParticle.cxx:85
 AliAODMCParticle.cxx:86
 AliAODMCParticle.cxx:87
 AliAODMCParticle.cxx:88
 AliAODMCParticle.cxx:89
 AliAODMCParticle.cxx:90
 AliAODMCParticle.cxx:91
 AliAODMCParticle.cxx:92
 AliAODMCParticle.cxx:93
 AliAODMCParticle.cxx:94
 AliAODMCParticle.cxx:95
 AliAODMCParticle.cxx:96
 AliAODMCParticle.cxx:97
 AliAODMCParticle.cxx:98
 AliAODMCParticle.cxx:99
 AliAODMCParticle.cxx:100
 AliAODMCParticle.cxx:101
 AliAODMCParticle.cxx:102
 AliAODMCParticle.cxx:103
 AliAODMCParticle.cxx:104
 AliAODMCParticle.cxx:105
 AliAODMCParticle.cxx:106
 AliAODMCParticle.cxx:107
 AliAODMCParticle.cxx:108
 AliAODMCParticle.cxx:109
 AliAODMCParticle.cxx:110
 AliAODMCParticle.cxx:111
 AliAODMCParticle.cxx:112
 AliAODMCParticle.cxx:113
 AliAODMCParticle.cxx:114
 AliAODMCParticle.cxx:115
 AliAODMCParticle.cxx:116
 AliAODMCParticle.cxx:117
 AliAODMCParticle.cxx:118
 AliAODMCParticle.cxx:119
 AliAODMCParticle.cxx:120
 AliAODMCParticle.cxx:121
 AliAODMCParticle.cxx:122
 AliAODMCParticle.cxx:123
 AliAODMCParticle.cxx:124
 AliAODMCParticle.cxx:125
 AliAODMCParticle.cxx:126
 AliAODMCParticle.cxx:127
 AliAODMCParticle.cxx:128
 AliAODMCParticle.cxx:129
 AliAODMCParticle.cxx:130
 AliAODMCParticle.cxx:131
 AliAODMCParticle.cxx:132
 AliAODMCParticle.cxx:133
 AliAODMCParticle.cxx:134
 AliAODMCParticle.cxx:135
 AliAODMCParticle.cxx:136
 AliAODMCParticle.cxx:137
 AliAODMCParticle.cxx:138
 AliAODMCParticle.cxx:139
 AliAODMCParticle.cxx:140
 AliAODMCParticle.cxx:141
 AliAODMCParticle.cxx:142
 AliAODMCParticle.cxx:143
 AliAODMCParticle.cxx:144
 AliAODMCParticle.cxx:145
 AliAODMCParticle.cxx:146
 AliAODMCParticle.cxx:147
 AliAODMCParticle.cxx:148
 AliAODMCParticle.cxx:149
 AliAODMCParticle.cxx:150
 AliAODMCParticle.cxx:151
 AliAODMCParticle.cxx:152
 AliAODMCParticle.cxx:153
 AliAODMCParticle.cxx:154
 AliAODMCParticle.cxx:155
 AliAODMCParticle.cxx:156
 AliAODMCParticle.cxx:157
 AliAODMCParticle.cxx:158
 AliAODMCParticle.cxx:159
 AliAODMCParticle.cxx:160
 AliAODMCParticle.cxx:161
 AliAODMCParticle.cxx:162
 AliAODMCParticle.cxx:163
 AliAODMCParticle.cxx:164
 AliAODMCParticle.cxx:165
 AliAODMCParticle.cxx:166
 AliAODMCParticle.cxx:167
 AliAODMCParticle.cxx:168