#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)
{
InitME();
}
AliMCInfoCuts::~AliMCInfoCuts()
{
if(aTrackParticles != 0)
{
delete aTrackParticles;
aTrackParticles = 0;
}
}
void AliMCInfoCuts::InitME()
{
SetMinRowsWithDigits();
SetMaxR();
SetMaxVz();
SetRangeTPCSignal();
SetMinTrackLength();
aTrackParticles = new TArrayI(kNParticles);
aTrackParticles->Reset(0);
if(aTrackParticles != 0)
{
AddPdgParticle(0,ep);
AddPdgParticle(1,em);
AddPdgParticle(2,mup);
AddPdgParticle(3,mum);
AddPdgParticle(4,pip);
AddPdgParticle(5,pim);
AddPdgParticle(6,kp);
AddPdgParticle(7,km);
AddPdgParticle(8,prot);
AddPdgParticle(9,protbar);
}
}
void AliMCInfoCuts::AddPdgParticle(Int_t idx, Int_t pdgcode) const
{
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
{
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
{
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 > 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)
{
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;
}