ROOT logo
/*************************************************************************
 * Copyright(c) 1998-2009, 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.                  *
 **************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                           CutGroup                                   //
//                                                                      //
//                                                                      //
//   Allow to define groups of cut conditions which are tested with     //
//      an OR condition between groups and an AND within groups         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "AliDielectronCutGroup.h"

ClassImp(AliDielectronCutGroup)

AliDielectronCutGroup::AliDielectronCutGroup(Bool_t compOperator /*=kCompOR*/) :
  AliAnalysisCuts(),
  fCutGroupList(0x0),
  fCompOperator(compOperator)
{
  //
  // Default constructor
  //
}

//_____________________________________________________________________
AliDielectronCutGroup::AliDielectronCutGroup(const char* name, const char* title, Bool_t compOperator /*=kCompOR*/) :
  AliAnalysisCuts(name, title),
  fCutGroupList(0x0),
  fCompOperator(compOperator)
{
  //
  // Named Constructor
  //
}

//_____________________________________________________________________
AliDielectronCutGroup::~AliDielectronCutGroup() 
{
  //
  //Default Destructor
  //
}

//_____________________________________________________________________
void AliDielectronCutGroup::Init()
{
    // Loop over all cuts and call Init
  TIter next(&fCutGroupList);
  while (AliAnalysisCuts *thisCut = (AliAnalysisCuts*) next())    thisCut->Init();
}

//_____________________________________________________________________
Bool_t AliDielectronCutGroup::IsSelected(TObject* track) 
{
  //
  // Selection-finder handling different comparison operations
  //
  
  
  //Different init for and/or makes code shorter
  Bool_t selectionResult=fCompOperator;
  
  TIter listIterator(&fCutGroupList);
  while (AliAnalysisCuts *thisCut = (AliAnalysisCuts*) listIterator()) {
    if (fCompOperator == kCompOR) {
      selectionResult = (selectionResult || thisCut->IsSelected(track));
    }
    else { //kCompAND
      selectionResult = (selectionResult && thisCut->IsSelected(track));
      //      if (selectionResult==kFALSE) break; //Save loops vs. additional check?
    }
  }
  return selectionResult;
}

//_____________________________________________________________________

void AliDielectronCutGroup::AddCut(AliAnalysisCuts* fCut) 
{
  //
  // Add a defined cut to the list
  //
  
  fCutGroupList.Add(fCut);
}

//_____________________________________________________________________
void AliDielectronCutGroup::SetCompOperator(Bool_t compOperator) 
{
  //
  // Switch between AND/OR
  //
  
  fCompOperator = compOperator;
}

//________________________________________________________________________
void AliDielectronCutGroup::Print(const Option_t* /*option*/) const
{
  //
  // Print cuts and the range
  //

  // TODO: add compOperator printout
  TIter listIterator(&fCutGroupList);
  while (AliAnalysisCuts *thisCut = (AliAnalysisCuts*) listIterator()) {
    thisCut->Print();
  }

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