#include "AliCFCutBase.h"
#include "AliCFManager.h"
ClassImp(AliCFManager)
AliCFManager::AliCFManager() :
TNamed(),
fNStepEvt(0),
fNStepPart(0),
fEvtContainer(0x0),
fPartContainer(0x0),
fEvtCutList(0x0),
fPartCutList(0x0)
{
}
AliCFManager::AliCFManager(Char_t* name, Char_t* title) :
TNamed(name,title),
fNStepEvt(0),
fNStepPart(0),
fEvtContainer(0x0),
fPartContainer(0x0),
fEvtCutList(0x0),
fPartCutList(0x0)
{
}
AliCFManager::AliCFManager(const AliCFManager& c) :
TNamed(c),
fNStepEvt(c.fNStepEvt),
fNStepPart(c.fNStepPart),
fEvtContainer(c.fEvtContainer),
fPartContainer(c.fPartContainer),
fEvtCutList(c.fEvtCutList),
fPartCutList(c.fPartCutList)
{
}
AliCFManager& AliCFManager::operator=(const AliCFManager& c)
{
if (this != &c) {
TNamed::operator=(c) ;
}
this->fNStepEvt=c.fNStepEvt;
this->fNStepPart=c.fNStepPart;
this->fEvtContainer=c.fEvtContainer;
this->fPartContainer=c.fPartContainer;
this->fEvtCutList=c.fEvtCutList;
this->fPartCutList=c.fPartCutList;
return *this ;
}
AliCFManager::~AliCFManager() {
}
Bool_t AliCFManager::CheckParticleCuts(Int_t isel, TObject *obj, const TString &selcuts) const {
if(isel>=fNStepPart){
AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepPart));
return kTRUE;
}
if(!fPartCutList[isel])return kTRUE;
TObjArrayIter iter(fPartCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
TString cutName=cut->GetName();
Bool_t checkCut=CompareStrings(cutName,selcuts);
if(checkCut && !cut->IsSelected(obj)) return kFALSE;
}
return kTRUE;
}
Bool_t AliCFManager::CheckEventCuts(Int_t isel, TObject *obj, const TString &selcuts) const{
if(isel>=fNStepEvt){
AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepEvt));
return kTRUE;
}
if(!fEvtCutList[isel])return kTRUE;
TObjArrayIter iter(fEvtCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
TString cutName=cut->GetName();
Bool_t checkCut=CompareStrings(cutName,selcuts);
if(checkCut && !cut->IsSelected(obj)) return kFALSE;
}
return kTRUE;
}
void AliCFManager::SetMCEventInfo(const TObject *obj) const {
if (!fPartCutList) {
AliWarning("No particle cut list found");
}
else {
for(Int_t isel=0;isel<fNStepPart; isel++){
if(!fPartCutList[isel])continue;
TObjArrayIter iter(fPartCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
cut->SetMCEventInfo(obj);
}
}
}
if (!fEvtCutList) {
AliWarning("No event cut list found");
}
else {
for(Int_t isel=0;isel<fNStepEvt; isel++){
if(!fEvtCutList[isel])continue;
TObjArrayIter iter(fEvtCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
cut->SetMCEventInfo(obj);
}
}
}
}
void AliCFManager::SetRecEventInfo(const TObject *obj) const {
if (!fPartCutList) {
AliWarning("No particle cut list found");
}
else {
for(Int_t isel=0;isel<fNStepPart; isel++){
if(!fPartCutList[isel])continue;
TObjArrayIter iter(fPartCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
cut->SetRecEventInfo(obj);
}
}
}
if (!fEvtCutList) {
AliWarning("No event cut list found");
}
else {
for(Int_t isel=0;isel<fNStepEvt; isel++){
if(!fEvtCutList[isel])continue;
TObjArrayIter iter(fEvtCutList[isel]);
AliCFCutBase *cut = 0;
while ( (cut = (AliCFCutBase*)iter.Next()) ) {
cut->SetRecEventInfo(obj);
}
}
}
}
Bool_t AliCFManager::CompareStrings(const TString &cutname,const TString &selcuts) const{
if(selcuts.Contains("all"))return kTRUE;
if ( selcuts.CompareTo(cutname) == 0 ||
selcuts.BeginsWith(cutname+" ") ||
selcuts.EndsWith(" "+cutname) ||
selcuts.Contains(" "+cutname+" ")) return kTRUE;
return kFALSE;
}
void AliCFManager::SetEventCutsList(Int_t isel, TObjArray* array) {
if (!fEvtContainer) {
AliWarning("No event container defined, you may need to set it first!");
}
Int_t nstep = fNStepEvt;
if (!fEvtCutList) {
fEvtCutList = new TObjArray*[nstep] ;
for (Int_t i=0; i<nstep; ++i) fEvtCutList[i] = 0;
}
if (isel >= nstep) {
AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
return;
}
fEvtCutList[isel] = array;
}
void AliCFManager::SetParticleCutsList(Int_t isel, TObjArray* array) {
if (!fPartContainer) {
AliWarning("No particle container defined, you may need to set it first!");
}
Int_t nstep = fNStepPart ;
if (!fPartCutList) {
fPartCutList = new TObjArray*[nstep] ;
for (Int_t istep = 0; istep < nstep; istep++) fPartCutList[istep] = 0;
}
if (isel >= nstep) {
AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
return;
}
fPartCutList[isel] = array;
}