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.                  *
**************************************************************************/
//
// Cut step class
// Select all tracks surviving cuts in one special cut step
// Used in AliHFEtrackFilter
// 
// Author:
//   Markus Fasel <M.Fasel@gsi.de>
//
#include <TObjArray.h>

#include "AliAnalysisCuts.h"
#include "AliCFCutBase.h"
#include "AliHFEcutStep.h"
#include "AliLog.h"
#include "AliMCEvent.h"

ClassImp(AliHFEcutStep)

//__________________________________________________________________
AliHFEcutStep::AliHFEcutStep(const Char_t *name):
  TNamed(name, ""),
  fCuts(NULL)
{
  //
  // Default Constructor
  //
  fCuts = new TObjArray;
}

//__________________________________________________________________
AliHFEcutStep::AliHFEcutStep(const AliHFEcutStep &o):
  TNamed(o),
  fCuts(NULL)
{
  //
  // Copy constructor
  //
  o.Copy(*this);
}

//__________________________________________________________________
AliHFEcutStep &AliHFEcutStep::operator=(const AliHFEcutStep &o){
  //
  // Assignment operator
  //
  if(this != &o)
    o.Copy(*this);
  return *this;
}
 
//__________________________________________________________________
AliHFEcutStep::~AliHFEcutStep(){
  //
  // destructor
  //
  delete fCuts;
}

//__________________________________________________________________
void AliHFEcutStep::Copy(TObject &o) const{
  //
  // Copy into content into object o
  //
  TNamed::Copy(o);
  AliHFEcutStep &target = dynamic_cast<AliHFEcutStep &>(o);

  // Make copy
  target.fCuts = dynamic_cast<TObjArray *>(fCuts->Clone());
}

//__________________________________________________________________
Bool_t AliHFEcutStep::IsSelected(TObject *o){
  //
  // Filter tracks in the given cut step
  // Apply all cut objects
  //
  AliDebug(1, Form("Cut Step %s: Number of cut objects: %d", GetName(), fCuts->GetEntriesFast()));
  if(!fCuts->GetEntriesFast()) return kTRUE;
  Bool_t isSelected = kTRUE;
  AliAnalysisCuts *cuts = NULL;
  for(Int_t iCut = 0; iCut < fCuts->GetEntriesFast(); iCut++){
    cuts = dynamic_cast<AliAnalysisCuts *>(fCuts->UncheckedAt(iCut));
    if(cuts && (!cuts->IsSelected(o))) isSelected = kFALSE;
  }
  AliDebug(1, Form("Accepted: %s", isSelected ? "yes" : "no"));
  return isSelected;
} 

//__________________________________________________________________
AliAnalysisCuts *AliHFEcutStep::GetCut(const Char_t *cutName){
  //
  // return cut object
  //
  return dynamic_cast<AliAnalysisCuts *>(fCuts->FindObject(cutName));
}

//__________________________________________________________________
void AliHFEcutStep::AddCut(AliAnalysisCuts *cut){
  //
  // Add cut object to the cut step
  //
  fCuts->Add(cut);
}

//__________________________________________________________________
void AliHFEcutStep::SetMC(const AliMCEvent *mc){
  //
  // Set MC information to the cuts in the cut step
  //
  AliCFCutBase *cfc = NULL;
  for(Int_t icut = 0; icut < fCuts->GetEntriesFast(); icut++){
    if((cfc = dynamic_cast<AliCFCutBase *>(fCuts->UncheckedAt(icut)))) cfc->SetMCEventInfo(mc);
  }
}

//__________________________________________________________________
void AliHFEcutStep::SetRecEvent(const AliVEvent *rec){
  //
  // Publish rec event to the cut step
  //
  AliCFCutBase *cfc = NULL;
  for(Int_t icut = 0; icut < fCuts->GetEntriesFast(); icut++){
    if((cfc = dynamic_cast<AliCFCutBase *>(fCuts->UncheckedAt(icut)))) cfc->SetRecEventInfo(rec);
  }
}

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