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

//-------------------------------------------------------------------------
//     AOD cluster base class
//     Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------

#include "AliAODCluster.h"

ClassImp(AliAODCluster)

//______________________________________________________________________________
AliAODCluster::AliAODCluster() :
  AliVCluster(),
  fEnergy(0),
  fChi2(-999.),
  fID(-999),
  fNLabel(0),
  fLabel(0x0),
  fFilterMap(0),
  fType(kUndef),
  fMCEnergyFraction(0.)
{
  // default constructor

  SetPosition(NULL);
  SetPID(NULL);
}

//______________________________________________________________________________
AliAODCluster::AliAODCluster(Int_t id,
			     UInt_t nLabel,
			     Int_t *label, 
			     Double_t energy,
			     Double_t x[3],
			     Double_t pid[13],
			     Char_t ttype,
			     UInt_t selectInfo) :
  AliVCluster(),
  fEnergy(energy),
  fChi2(-999.),
  fID(id),
  fNLabel(0),
  fLabel(0x0),
  fFilterMap(selectInfo),
  fType(ttype),
  fMCEnergyFraction(0.)
{
  // constructor
  for (Int_t i = 0; i <  3; i++) fPosition[i] = 0.;
  for (Int_t i = 0; i < 13; i++) fPID[i]      = 0;
 
  if(x)   {for (Int_t i = 0; i < 3  ; i++) SetPositionAt(x[i]  ,i);}
  if(pid) {for (Int_t i = 0; i < 13 ; i++) SetPIDAt     (pid[i],i);}
  SetLabel(label, nLabel);
}

//______________________________________________________________________________
AliAODCluster::AliAODCluster(Int_t id,
			     UInt_t nLabel,
			     Int_t *label, 
			     Float_t energy,
			     Float_t x[3],
			     Float_t pid[13],
			     Char_t ttype,
			     UInt_t selectInfo) :
  AliVCluster(),
  fEnergy(energy),
  fChi2(-999.),
  fID(id),
  fNLabel(0),
  fLabel(0x0),
  fFilterMap(selectInfo),
  fType(ttype),
  fMCEnergyFraction(0.)
{
  // constructor
  for (Int_t i = 0; i <  3; i++) fPosition[i] = 0.;
  for (Int_t i = 0; i < 13; i++) fPID[i]      = 0;

  if(x)   {for (Int_t i = 0; i < 3  ; i++) SetPositionAt(x[i]  ,i);}
  if(pid) {for (Int_t i = 0; i < 13 ; i++) SetPIDAt     (pid[i],i);}
  SetLabel(label, nLabel);
}


//______________________________________________________________________________
AliAODCluster::~AliAODCluster() 
{
  // destructor

  RemoveLabel();
}

//______________________________________________________________________________
void AliAODCluster::Clear(const Option_t*) 
{
  // Clear
  
  RemoveLabel();
}


//______________________________________________________________________________
AliAODCluster::AliAODCluster(const AliAODCluster& clus) :
  AliVCluster(clus),
  fEnergy(clus.fEnergy),
  fChi2(clus.fChi2),
  fID(clus.fID),
  fNLabel(0),
  fLabel(0x0),
  fFilterMap(clus.fFilterMap),
  fType(clus.fType),
  fMCEnergyFraction(clus.fMCEnergyFraction)
{
  // Copy constructor

  for(Int_t i = 0; i < 3  ; i++) fPosition[i]  = clus.fPosition[i];
  for(Int_t i = 0; i < 13 ; i++)  fPID[i]      = clus.fPID[i];

  SetLabel(clus.fLabel, clus.fNLabel);
}

//______________________________________________________________________________
AliAODCluster& AliAODCluster::operator=(const AliAODCluster& clus)
{
  // Assignment operator
  if(this!=&clus) {
    
	for(Int_t i = 0; i < 3 ;  i++) fPosition[i] = clus.fPosition[i];
	for(Int_t i = 0; i < 13 ; i++) fPID[i]      = clus.fPID[i];
    
    fEnergy = clus.fEnergy;
    fChi2 = clus.fChi2;

    fID = clus.fID;
    SetLabel(clus.fLabel, clus.fNLabel);
    fFilterMap = clus.fFilterMap;

    fType = clus.fType;

    fMCEnergyFraction = clus.fMCEnergyFraction;
  }

  return *this;
}

//______________________________________________________________________________
void AliAODCluster::SetPosition(Float_t *x) 
{
  // set the position
  
  if (x) {
    fPosition[0] = x[0];
    fPosition[1] = x[1];
    fPosition[2] = x[2];
  } else {
    fPosition[0] = -999.;
    fPosition[1] = -999.;
    fPosition[2] = -999.;
  }
}

//______________________________________________________________________________
UShort_t AliAODCluster::GetMostProbablePID() const 
{
  // Returns the most probable PID array element.
  
  Int_t nPID = 13;
  UShort_t unknown = AliVCluster::kUnknown;
  
  UShort_t loc = unknown;
  Double_t max = 0.;
  Bool_t allTheSame = kTRUE;
  
  for (Int_t iPID = 0; iPID < nPID; iPID++) {
    if (fPID[iPID] >= max) {
      if (fPID[iPID] > max) {
	allTheSame = kFALSE;
	max = fPID[iPID];
	loc = (UShort_t)iPID;
      } else {
	allTheSame = kTRUE;
      }
    }
  }
  return allTheSame ? unknown : loc;
}

//______________________________________________________________________________
void AliAODCluster::SetLabel(Int_t *label, UInt_t size) 
{
  if (label && size>0) {
    if (size != (UInt_t)fNLabel) {
      RemoveLabel();
      fNLabel = size;
      fLabel = new Int_t[fNLabel];
    }
    
    for (Int_t i = 0; i < fNLabel; i++) {
      fLabel[i] = label[i];
    }
  } else {
    RemoveLabel();
  }

  return;
}

//______________________________________________________________________________
Int_t AliAODCluster::GetLabelAt(UInt_t i) const
{
  if (fLabel && i < (UInt_t)fNLabel) {
    return fLabel[i];
  } else {
    return -999;
  }
}

//______________________________________________________________________________
void AliAODCluster::RemoveLabel()
{
  delete[] fLabel;
  fLabel = 0x0;
  fNLabel = 0;

  return;
}

//______________________________________________________________________________
void AliAODCluster::Print(Option_t* /* option */) const
{
  // prints information about AliAODCluster

  printf("Cluster type: %d\n", GetType()); 
  printf("     energy = %f\n", E());
  printf("       chi2 = %f\n", Chi2());
  const Double_t *pid = GetPID();
  printf("PID weights: photon %0.2f, pi0 %0.2f, electron %0.2f, conversion electron %0.2f\n, hadrons: pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
	 pid[AliVCluster::kPhoton],   pid[AliVCluster::kPi0],
	 pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
	 pid[AliVCluster::kPion],     pid[AliVCluster::kKaon],   pid[AliVCluster::kProton],
	 pid[AliVCluster::kNeutron],  pid[AliVCluster::kKaon0]);
}
 AliAODCluster.cxx:1
 AliAODCluster.cxx:2
 AliAODCluster.cxx:3
 AliAODCluster.cxx:4
 AliAODCluster.cxx:5
 AliAODCluster.cxx:6
 AliAODCluster.cxx:7
 AliAODCluster.cxx:8
 AliAODCluster.cxx:9
 AliAODCluster.cxx:10
 AliAODCluster.cxx:11
 AliAODCluster.cxx:12
 AliAODCluster.cxx:13
 AliAODCluster.cxx:14
 AliAODCluster.cxx:15
 AliAODCluster.cxx:16
 AliAODCluster.cxx:17
 AliAODCluster.cxx:18
 AliAODCluster.cxx:19
 AliAODCluster.cxx:20
 AliAODCluster.cxx:21
 AliAODCluster.cxx:22
 AliAODCluster.cxx:23
 AliAODCluster.cxx:24
 AliAODCluster.cxx:25
 AliAODCluster.cxx:26
 AliAODCluster.cxx:27
 AliAODCluster.cxx:28
 AliAODCluster.cxx:29
 AliAODCluster.cxx:30
 AliAODCluster.cxx:31
 AliAODCluster.cxx:32
 AliAODCluster.cxx:33
 AliAODCluster.cxx:34
 AliAODCluster.cxx:35
 AliAODCluster.cxx:36
 AliAODCluster.cxx:37
 AliAODCluster.cxx:38
 AliAODCluster.cxx:39
 AliAODCluster.cxx:40
 AliAODCluster.cxx:41
 AliAODCluster.cxx:42
 AliAODCluster.cxx:43
 AliAODCluster.cxx:44
 AliAODCluster.cxx:45
 AliAODCluster.cxx:46
 AliAODCluster.cxx:47
 AliAODCluster.cxx:48
 AliAODCluster.cxx:49
 AliAODCluster.cxx:50
 AliAODCluster.cxx:51
 AliAODCluster.cxx:52
 AliAODCluster.cxx:53
 AliAODCluster.cxx:54
 AliAODCluster.cxx:55
 AliAODCluster.cxx:56
 AliAODCluster.cxx:57
 AliAODCluster.cxx:58
 AliAODCluster.cxx:59
 AliAODCluster.cxx:60
 AliAODCluster.cxx:61
 AliAODCluster.cxx:62
 AliAODCluster.cxx:63
 AliAODCluster.cxx:64
 AliAODCluster.cxx:65
 AliAODCluster.cxx:66
 AliAODCluster.cxx:67
 AliAODCluster.cxx:68
 AliAODCluster.cxx:69
 AliAODCluster.cxx:70
 AliAODCluster.cxx:71
 AliAODCluster.cxx:72
 AliAODCluster.cxx:73
 AliAODCluster.cxx:74
 AliAODCluster.cxx:75
 AliAODCluster.cxx:76
 AliAODCluster.cxx:77
 AliAODCluster.cxx:78
 AliAODCluster.cxx:79
 AliAODCluster.cxx:80
 AliAODCluster.cxx:81
 AliAODCluster.cxx:82
 AliAODCluster.cxx:83
 AliAODCluster.cxx:84
 AliAODCluster.cxx:85
 AliAODCluster.cxx:86
 AliAODCluster.cxx:87
 AliAODCluster.cxx:88
 AliAODCluster.cxx:89
 AliAODCluster.cxx:90
 AliAODCluster.cxx:91
 AliAODCluster.cxx:92
 AliAODCluster.cxx:93
 AliAODCluster.cxx:94
 AliAODCluster.cxx:95
 AliAODCluster.cxx:96
 AliAODCluster.cxx:97
 AliAODCluster.cxx:98
 AliAODCluster.cxx:99
 AliAODCluster.cxx:100
 AliAODCluster.cxx:101
 AliAODCluster.cxx:102
 AliAODCluster.cxx:103
 AliAODCluster.cxx:104
 AliAODCluster.cxx:105
 AliAODCluster.cxx:106
 AliAODCluster.cxx:107
 AliAODCluster.cxx:108
 AliAODCluster.cxx:109
 AliAODCluster.cxx:110
 AliAODCluster.cxx:111
 AliAODCluster.cxx:112
 AliAODCluster.cxx:113
 AliAODCluster.cxx:114
 AliAODCluster.cxx:115
 AliAODCluster.cxx:116
 AliAODCluster.cxx:117
 AliAODCluster.cxx:118
 AliAODCluster.cxx:119
 AliAODCluster.cxx:120
 AliAODCluster.cxx:121
 AliAODCluster.cxx:122
 AliAODCluster.cxx:123
 AliAODCluster.cxx:124
 AliAODCluster.cxx:125
 AliAODCluster.cxx:126
 AliAODCluster.cxx:127
 AliAODCluster.cxx:128
 AliAODCluster.cxx:129
 AliAODCluster.cxx:130
 AliAODCluster.cxx:131
 AliAODCluster.cxx:132
 AliAODCluster.cxx:133
 AliAODCluster.cxx:134
 AliAODCluster.cxx:135
 AliAODCluster.cxx:136
 AliAODCluster.cxx:137
 AliAODCluster.cxx:138
 AliAODCluster.cxx:139
 AliAODCluster.cxx:140
 AliAODCluster.cxx:141
 AliAODCluster.cxx:142
 AliAODCluster.cxx:143
 AliAODCluster.cxx:144
 AliAODCluster.cxx:145
 AliAODCluster.cxx:146
 AliAODCluster.cxx:147
 AliAODCluster.cxx:148
 AliAODCluster.cxx:149
 AliAODCluster.cxx:150
 AliAODCluster.cxx:151
 AliAODCluster.cxx:152
 AliAODCluster.cxx:153
 AliAODCluster.cxx:154
 AliAODCluster.cxx:155
 AliAODCluster.cxx:156
 AliAODCluster.cxx:157
 AliAODCluster.cxx:158
 AliAODCluster.cxx:159
 AliAODCluster.cxx:160
 AliAODCluster.cxx:161
 AliAODCluster.cxx:162
 AliAODCluster.cxx:163
 AliAODCluster.cxx:164
 AliAODCluster.cxx:165
 AliAODCluster.cxx:166
 AliAODCluster.cxx:167
 AliAODCluster.cxx:168
 AliAODCluster.cxx:169
 AliAODCluster.cxx:170
 AliAODCluster.cxx:171
 AliAODCluster.cxx:172
 AliAODCluster.cxx:173
 AliAODCluster.cxx:174
 AliAODCluster.cxx:175
 AliAODCluster.cxx:176
 AliAODCluster.cxx:177
 AliAODCluster.cxx:178
 AliAODCluster.cxx:179
 AliAODCluster.cxx:180
 AliAODCluster.cxx:181
 AliAODCluster.cxx:182
 AliAODCluster.cxx:183
 AliAODCluster.cxx:184
 AliAODCluster.cxx:185
 AliAODCluster.cxx:186
 AliAODCluster.cxx:187
 AliAODCluster.cxx:188
 AliAODCluster.cxx:189
 AliAODCluster.cxx:190
 AliAODCluster.cxx:191
 AliAODCluster.cxx:192
 AliAODCluster.cxx:193
 AliAODCluster.cxx:194
 AliAODCluster.cxx:195
 AliAODCluster.cxx:196
 AliAODCluster.cxx:197
 AliAODCluster.cxx:198
 AliAODCluster.cxx:199
 AliAODCluster.cxx:200
 AliAODCluster.cxx:201
 AliAODCluster.cxx:202
 AliAODCluster.cxx:203
 AliAODCluster.cxx:204
 AliAODCluster.cxx:205
 AliAODCluster.cxx:206
 AliAODCluster.cxx:207
 AliAODCluster.cxx:208
 AliAODCluster.cxx:209
 AliAODCluster.cxx:210
 AliAODCluster.cxx:211
 AliAODCluster.cxx:212
 AliAODCluster.cxx:213
 AliAODCluster.cxx:214
 AliAODCluster.cxx:215
 AliAODCluster.cxx:216
 AliAODCluster.cxx:217
 AliAODCluster.cxx:218
 AliAODCluster.cxx:219
 AliAODCluster.cxx:220
 AliAODCluster.cxx:221
 AliAODCluster.cxx:222
 AliAODCluster.cxx:223
 AliAODCluster.cxx:224
 AliAODCluster.cxx:225
 AliAODCluster.cxx:226
 AliAODCluster.cxx:227
 AliAODCluster.cxx:228
 AliAODCluster.cxx:229
 AliAODCluster.cxx:230
 AliAODCluster.cxx:231
 AliAODCluster.cxx:232
 AliAODCluster.cxx:233
 AliAODCluster.cxx:234
 AliAODCluster.cxx:235
 AliAODCluster.cxx:236
 AliAODCluster.cxx:237
 AliAODCluster.cxx:238
 AliAODCluster.cxx:239
 AliAODCluster.cxx:240
 AliAODCluster.cxx:241
 AliAODCluster.cxx:242
 AliAODCluster.cxx:243
 AliAODCluster.cxx:244
 AliAODCluster.cxx:245
 AliAODCluster.cxx:246
 AliAODCluster.cxx:247
 AliAODCluster.cxx:248
 AliAODCluster.cxx:249
 AliAODCluster.cxx:250
 AliAODCluster.cxx:251
 AliAODCluster.cxx:252
 AliAODCluster.cxx:253
 AliAODCluster.cxx:254
 AliAODCluster.cxx:255
 AliAODCluster.cxx:256
 AliAODCluster.cxx:257
 AliAODCluster.cxx:258
 AliAODCluster.cxx:259