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

//------------------------------------------------------------------------------
// Impementation of AliMCInfoCuts class. It keeps selection cuts for MC tracks. 
// 
// 
// Author: J.Otwinowski 04/02/2008 
//------------------------------------------------------------------------------

#include <iostream>
#include <TArrayI.h>
#include <TList.h>

#include "AliLog.h"
#include "AliMCInfoCuts.h"

using namespace std;

ClassImp(AliMCInfoCuts)

//_____________________________________________________________________________
AliMCInfoCuts::AliMCInfoCuts(const Char_t* name,const Char_t *title) : 
AliAnalysisCuts(name, title)
, fMinRowsWithDigits(0)
, fMaxR(0)
, fMaxVz(0)
, fMinTPCSignal(0)
, fMaxTPCSignal(0)
, fMinTrackLength(0)
, aTrackParticles(0)
{
  // default constructor 
  
  // init data members with defaults
  InitME();
}

//_____________________________________________________________________________
AliMCInfoCuts::~AliMCInfoCuts()  
{
  // destructor
  if(aTrackParticles != 0) 
  {
    delete aTrackParticles;
	aTrackParticles = 0;
  }
}

//_____________________________________________________________________________
void AliMCInfoCuts::InitME()  
{
  // set default values
  SetMinRowsWithDigits();
  SetMaxR();
  SetMaxVz();
  SetRangeTPCSignal();
  SetMinTrackLength();

  // create aTrackParticles array
  aTrackParticles = new TArrayI(kNParticles); // max nb. of particles
  aTrackParticles->Reset(0);

  // create an array of track particles: e, muons, pions, kaons, protons
  if(aTrackParticles != 0)
  {
     // keep order adding a new particles
     AddPdgParticle(0,ep);   // e+
     AddPdgParticle(1,em);   // e-
     AddPdgParticle(2,mup);  // mu+
     AddPdgParticle(3,mum);  // mu-
     AddPdgParticle(4,pip);  // pi+ 
     AddPdgParticle(5,pim);  // pi-
     AddPdgParticle(6,kp);   // K+ 
     AddPdgParticle(7,km);   // K-
     AddPdgParticle(8,prot);    // p 
     AddPdgParticle(9,protbar); // p_bar
  }
}

//_____________________________________________________________________________
void AliMCInfoCuts::AddPdgParticle(Int_t idx, Int_t pdgcode) const
{
  // add particle to the array
  if(aTrackParticles != 0) aTrackParticles->AddAt(pdgcode,idx);
  else AliDebug(AliLog::kError, "ERROR: Cannot add particle to the array");
}

//_____________________________________________________________________________
Bool_t AliMCInfoCuts::IsPdgParticle(Int_t pdgcode) const
{
  // check PDG particle 
  if(aTrackParticles == 0) { 
    AliDebug(AliLog::kError, "ERROR: Cannot get particle array");
    return kFALSE;
  }

  Int_t size = aTrackParticles->GetSize();
  for(int i=0; i<size; ++i) {
    if(pdgcode == aTrackParticles->At(i)) return kTRUE;
  }
  return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliMCInfoCuts::IsPosPdgParticle(Int_t pdgcode) const
{
  // check PDG particle (only positive charged) 
  if(aTrackParticles == 0) { 
    AliDebug(AliLog::kError, "ERROR: Cannot get particle array");
    return kFALSE;
  }

  Int_t size = aTrackParticles->GetSize();
  for(int i=0; i<size; ++i) {
    // leptons have oposite pdg convension from hadrons (e+/e- = -11/11)
    if(pdgcode > 0 && (pdgcode == 11 || pdgcode == 13)) return kFALSE; 
    if(pdgcode < 0 && (pdgcode != -11 || pdgcode != -13) ) return kFALSE; 
	// 
    if(pdgcode == aTrackParticles->At(i)) return kTRUE;
  }
  return kFALSE;
}


//_____________________________________________________________________________
Long64_t AliMCInfoCuts::Merge(TCollection* list) 
{
  // Merge list of objects (needed by PROOF)
  if (!list)
  return 0;

  if (list->IsEmpty())
  return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj = 0;

  Int_t count=0;
  while((obj = iter->Next()) != 0) 
  {
    AliMCInfoCuts* entry = dynamic_cast<AliMCInfoCuts*>(obj);
    if (entry == 0)  
      continue; 

  count++;
  }

return count;
}
 AliMCInfoCuts.cxx:1
 AliMCInfoCuts.cxx:2
 AliMCInfoCuts.cxx:3
 AliMCInfoCuts.cxx:4
 AliMCInfoCuts.cxx:5
 AliMCInfoCuts.cxx:6
 AliMCInfoCuts.cxx:7
 AliMCInfoCuts.cxx:8
 AliMCInfoCuts.cxx:9
 AliMCInfoCuts.cxx:10
 AliMCInfoCuts.cxx:11
 AliMCInfoCuts.cxx:12
 AliMCInfoCuts.cxx:13
 AliMCInfoCuts.cxx:14
 AliMCInfoCuts.cxx:15
 AliMCInfoCuts.cxx:16
 AliMCInfoCuts.cxx:17
 AliMCInfoCuts.cxx:18
 AliMCInfoCuts.cxx:19
 AliMCInfoCuts.cxx:20
 AliMCInfoCuts.cxx:21
 AliMCInfoCuts.cxx:22
 AliMCInfoCuts.cxx:23
 AliMCInfoCuts.cxx:24
 AliMCInfoCuts.cxx:25
 AliMCInfoCuts.cxx:26
 AliMCInfoCuts.cxx:27
 AliMCInfoCuts.cxx:28
 AliMCInfoCuts.cxx:29
 AliMCInfoCuts.cxx:30
 AliMCInfoCuts.cxx:31
 AliMCInfoCuts.cxx:32
 AliMCInfoCuts.cxx:33
 AliMCInfoCuts.cxx:34
 AliMCInfoCuts.cxx:35
 AliMCInfoCuts.cxx:36
 AliMCInfoCuts.cxx:37
 AliMCInfoCuts.cxx:38
 AliMCInfoCuts.cxx:39
 AliMCInfoCuts.cxx:40
 AliMCInfoCuts.cxx:41
 AliMCInfoCuts.cxx:42
 AliMCInfoCuts.cxx:43
 AliMCInfoCuts.cxx:44
 AliMCInfoCuts.cxx:45
 AliMCInfoCuts.cxx:46
 AliMCInfoCuts.cxx:47
 AliMCInfoCuts.cxx:48
 AliMCInfoCuts.cxx:49
 AliMCInfoCuts.cxx:50
 AliMCInfoCuts.cxx:51
 AliMCInfoCuts.cxx:52
 AliMCInfoCuts.cxx:53
 AliMCInfoCuts.cxx:54
 AliMCInfoCuts.cxx:55
 AliMCInfoCuts.cxx:56
 AliMCInfoCuts.cxx:57
 AliMCInfoCuts.cxx:58
 AliMCInfoCuts.cxx:59
 AliMCInfoCuts.cxx:60
 AliMCInfoCuts.cxx:61
 AliMCInfoCuts.cxx:62
 AliMCInfoCuts.cxx:63
 AliMCInfoCuts.cxx:64
 AliMCInfoCuts.cxx:65
 AliMCInfoCuts.cxx:66
 AliMCInfoCuts.cxx:67
 AliMCInfoCuts.cxx:68
 AliMCInfoCuts.cxx:69
 AliMCInfoCuts.cxx:70
 AliMCInfoCuts.cxx:71
 AliMCInfoCuts.cxx:72
 AliMCInfoCuts.cxx:73
 AliMCInfoCuts.cxx:74
 AliMCInfoCuts.cxx:75
 AliMCInfoCuts.cxx:76
 AliMCInfoCuts.cxx:77
 AliMCInfoCuts.cxx:78
 AliMCInfoCuts.cxx:79
 AliMCInfoCuts.cxx:80
 AliMCInfoCuts.cxx:81
 AliMCInfoCuts.cxx:82
 AliMCInfoCuts.cxx:83
 AliMCInfoCuts.cxx:84
 AliMCInfoCuts.cxx:85
 AliMCInfoCuts.cxx:86
 AliMCInfoCuts.cxx:87
 AliMCInfoCuts.cxx:88
 AliMCInfoCuts.cxx:89
 AliMCInfoCuts.cxx:90
 AliMCInfoCuts.cxx:91
 AliMCInfoCuts.cxx:92
 AliMCInfoCuts.cxx:93
 AliMCInfoCuts.cxx:94
 AliMCInfoCuts.cxx:95
 AliMCInfoCuts.cxx:96
 AliMCInfoCuts.cxx:97
 AliMCInfoCuts.cxx:98
 AliMCInfoCuts.cxx:99
 AliMCInfoCuts.cxx:100
 AliMCInfoCuts.cxx:101
 AliMCInfoCuts.cxx:102
 AliMCInfoCuts.cxx:103
 AliMCInfoCuts.cxx:104
 AliMCInfoCuts.cxx:105
 AliMCInfoCuts.cxx:106
 AliMCInfoCuts.cxx:107
 AliMCInfoCuts.cxx:108
 AliMCInfoCuts.cxx:109
 AliMCInfoCuts.cxx:110
 AliMCInfoCuts.cxx:111
 AliMCInfoCuts.cxx:112
 AliMCInfoCuts.cxx:113
 AliMCInfoCuts.cxx:114
 AliMCInfoCuts.cxx:115
 AliMCInfoCuts.cxx:116
 AliMCInfoCuts.cxx:117
 AliMCInfoCuts.cxx:118
 AliMCInfoCuts.cxx:119
 AliMCInfoCuts.cxx:120
 AliMCInfoCuts.cxx:121
 AliMCInfoCuts.cxx:122
 AliMCInfoCuts.cxx:123
 AliMCInfoCuts.cxx:124
 AliMCInfoCuts.cxx:125
 AliMCInfoCuts.cxx:126
 AliMCInfoCuts.cxx:127
 AliMCInfoCuts.cxx:128
 AliMCInfoCuts.cxx:129
 AliMCInfoCuts.cxx:130
 AliMCInfoCuts.cxx:131
 AliMCInfoCuts.cxx:132
 AliMCInfoCuts.cxx:133
 AliMCInfoCuts.cxx:134
 AliMCInfoCuts.cxx:135
 AliMCInfoCuts.cxx:136
 AliMCInfoCuts.cxx:137
 AliMCInfoCuts.cxx:138
 AliMCInfoCuts.cxx:139
 AliMCInfoCuts.cxx:140
 AliMCInfoCuts.cxx:141
 AliMCInfoCuts.cxx:142
 AliMCInfoCuts.cxx:143
 AliMCInfoCuts.cxx:144
 AliMCInfoCuts.cxx:145
 AliMCInfoCuts.cxx:146
 AliMCInfoCuts.cxx:147
 AliMCInfoCuts.cxx:148
 AliMCInfoCuts.cxx:149
 AliMCInfoCuts.cxx:150
 AliMCInfoCuts.cxx:151
 AliMCInfoCuts.cxx:152
 AliMCInfoCuts.cxx:153
 AliMCInfoCuts.cxx:154
 AliMCInfoCuts.cxx:155
 AliMCInfoCuts.cxx:156
 AliMCInfoCuts.cxx:157
 AliMCInfoCuts.cxx:158
 AliMCInfoCuts.cxx:159
 AliMCInfoCuts.cxx:160
 AliMCInfoCuts.cxx:161
 AliMCInfoCuts.cxx:162