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

/* $Id$ */

//
// Manager class for filter decisions based on cuts
// The filter contains a list of sets of cuts.
// A bit field is filled in order to store the decision of each cut-set. 
// Author: Andreas Morsch
// andreas.morsch@cern.ch

#include <TObject.h>
#include <TList.h>
#include "AliAnalysisFilter.h"
#include "AliAnalysisCuts.h"


ClassImp(AliAnalysisFilter)


////////////////////////////////////////////////////////////////////////

AliAnalysisFilter::AliAnalysisFilter():
    TNamed(),
    fCuts(0)
{
  // Default constructor
}

AliAnalysisFilter::AliAnalysisFilter(const char* name, const char* title):
    TNamed(name, title),
    fCuts(new TList())
{
  // Constructor
}

AliAnalysisFilter::AliAnalysisFilter(const AliAnalysisFilter& obj):
    TNamed(obj),
    fCuts(0)
{
// Copy constructor
    fCuts = obj.fCuts;
}

AliAnalysisFilter::~AliAnalysisFilter()
{
// Destructor
   if (fCuts) fCuts->Delete("slow");
   delete fCuts;
}   

AliAnalysisFilter& AliAnalysisFilter::operator=(const AliAnalysisFilter& other)
{
// Assignment
   if (&other != this) {
	   TNamed::operator=(other);
	   fCuts = other.fCuts;
   }
   return *this;
   }
   
UInt_t AliAnalysisFilter::IsSelected(TObject* obj)
{
    //
    // Loop over all set of cuts
    // and store the decision
    UInt_t result = 0;
    UInt_t filterMask;
    
    TIter next(fCuts);
    AliAnalysisCuts *cuts;
    Int_t iCutB = 1;
	
    while((cuts = (AliAnalysisCuts*)next())) {
	Bool_t acc = cuts->IsSelected(obj);
	if ((filterMask = cuts->GetFilterMask()) > 0) {
	    acc = (acc && (filterMask == result));
	}
	cuts->SetSelected(acc);
	if (acc) {result |= iCutB & 0x00ffffff;}
	iCutB *= 2;
    }  

    return result;
}

UInt_t AliAnalysisFilter::IsSelected(TList* list)
{
    //
    // Loop over all set of cuts
    // and store the decision
    UInt_t result = 0;
    UInt_t filterMask;

    TIter next(fCuts);
    AliAnalysisCuts *cuts;
    Int_t iCutB = 1;
	
    while((cuts = (AliAnalysisCuts*)next())) {
	Bool_t acc = cuts->IsSelected(list);
	if ((filterMask = cuts->GetFilterMask()) > 0) {
	    acc = (acc && (filterMask & result));
	}
	cuts->SetSelected(acc);
	if (acc) {result |= iCutB & 0x00ffffff;}
	iCutB *= 2;
    }  

    return result;
}

void AliAnalysisFilter::Init()
{
    //
    // Loop over all set of cuts and call Init
    TIter next(fCuts);
    AliAnalysisCuts *cuts;
    while((cuts = (AliAnalysisCuts*)next())) cuts->Init();
}

void AliAnalysisFilter::AddCuts(AliAnalysisCuts* cuts)
{
    // Add a set of cuts
    fCuts->Add(cuts);
}

Bool_t AliAnalysisFilter::IsSelected(char* name)
{
    //
    // Returns current result for cut with name
    AliAnalysisCuts* cut = (AliAnalysisCuts*) (fCuts->FindObject(name));
    if (cut) {
      return (cut->Selected());
    } else  {
      return 0;
    }
}
 AliAnalysisFilter.cxx:1
 AliAnalysisFilter.cxx:2
 AliAnalysisFilter.cxx:3
 AliAnalysisFilter.cxx:4
 AliAnalysisFilter.cxx:5
 AliAnalysisFilter.cxx:6
 AliAnalysisFilter.cxx:7
 AliAnalysisFilter.cxx:8
 AliAnalysisFilter.cxx:9
 AliAnalysisFilter.cxx:10
 AliAnalysisFilter.cxx:11
 AliAnalysisFilter.cxx:12
 AliAnalysisFilter.cxx:13
 AliAnalysisFilter.cxx:14
 AliAnalysisFilter.cxx:15
 AliAnalysisFilter.cxx:16
 AliAnalysisFilter.cxx:17
 AliAnalysisFilter.cxx:18
 AliAnalysisFilter.cxx:19
 AliAnalysisFilter.cxx:20
 AliAnalysisFilter.cxx:21
 AliAnalysisFilter.cxx:22
 AliAnalysisFilter.cxx:23
 AliAnalysisFilter.cxx:24
 AliAnalysisFilter.cxx:25
 AliAnalysisFilter.cxx:26
 AliAnalysisFilter.cxx:27
 AliAnalysisFilter.cxx:28
 AliAnalysisFilter.cxx:29
 AliAnalysisFilter.cxx:30
 AliAnalysisFilter.cxx:31
 AliAnalysisFilter.cxx:32
 AliAnalysisFilter.cxx:33
 AliAnalysisFilter.cxx:34
 AliAnalysisFilter.cxx:35
 AliAnalysisFilter.cxx:36
 AliAnalysisFilter.cxx:37
 AliAnalysisFilter.cxx:38
 AliAnalysisFilter.cxx:39
 AliAnalysisFilter.cxx:40
 AliAnalysisFilter.cxx:41
 AliAnalysisFilter.cxx:42
 AliAnalysisFilter.cxx:43
 AliAnalysisFilter.cxx:44
 AliAnalysisFilter.cxx:45
 AliAnalysisFilter.cxx:46
 AliAnalysisFilter.cxx:47
 AliAnalysisFilter.cxx:48
 AliAnalysisFilter.cxx:49
 AliAnalysisFilter.cxx:50
 AliAnalysisFilter.cxx:51
 AliAnalysisFilter.cxx:52
 AliAnalysisFilter.cxx:53
 AliAnalysisFilter.cxx:54
 AliAnalysisFilter.cxx:55
 AliAnalysisFilter.cxx:56
 AliAnalysisFilter.cxx:57
 AliAnalysisFilter.cxx:58
 AliAnalysisFilter.cxx:59
 AliAnalysisFilter.cxx:60
 AliAnalysisFilter.cxx:61
 AliAnalysisFilter.cxx:62
 AliAnalysisFilter.cxx:63
 AliAnalysisFilter.cxx:64
 AliAnalysisFilter.cxx:65
 AliAnalysisFilter.cxx:66
 AliAnalysisFilter.cxx:67
 AliAnalysisFilter.cxx:68
 AliAnalysisFilter.cxx:69
 AliAnalysisFilter.cxx:70
 AliAnalysisFilter.cxx:71
 AliAnalysisFilter.cxx:72
 AliAnalysisFilter.cxx:73
 AliAnalysisFilter.cxx:74
 AliAnalysisFilter.cxx:75
 AliAnalysisFilter.cxx:76
 AliAnalysisFilter.cxx:77
 AliAnalysisFilter.cxx:78
 AliAnalysisFilter.cxx:79
 AliAnalysisFilter.cxx:80
 AliAnalysisFilter.cxx:81
 AliAnalysisFilter.cxx:82
 AliAnalysisFilter.cxx:83
 AliAnalysisFilter.cxx:84
 AliAnalysisFilter.cxx:85
 AliAnalysisFilter.cxx:86
 AliAnalysisFilter.cxx:87
 AliAnalysisFilter.cxx:88
 AliAnalysisFilter.cxx:89
 AliAnalysisFilter.cxx:90
 AliAnalysisFilter.cxx:91
 AliAnalysisFilter.cxx:92
 AliAnalysisFilter.cxx:93
 AliAnalysisFilter.cxx:94
 AliAnalysisFilter.cxx:95
 AliAnalysisFilter.cxx:96
 AliAnalysisFilter.cxx:97
 AliAnalysisFilter.cxx:98
 AliAnalysisFilter.cxx:99
 AliAnalysisFilter.cxx:100
 AliAnalysisFilter.cxx:101
 AliAnalysisFilter.cxx:102
 AliAnalysisFilter.cxx:103
 AliAnalysisFilter.cxx:104
 AliAnalysisFilter.cxx:105
 AliAnalysisFilter.cxx:106
 AliAnalysisFilter.cxx:107
 AliAnalysisFilter.cxx:108
 AliAnalysisFilter.cxx:109
 AliAnalysisFilter.cxx:110
 AliAnalysisFilter.cxx:111
 AliAnalysisFilter.cxx:112
 AliAnalysisFilter.cxx:113
 AliAnalysisFilter.cxx:114
 AliAnalysisFilter.cxx:115
 AliAnalysisFilter.cxx:116
 AliAnalysisFilter.cxx:117
 AliAnalysisFilter.cxx:118
 AliAnalysisFilter.cxx:119
 AliAnalysisFilter.cxx:120
 AliAnalysisFilter.cxx:121
 AliAnalysisFilter.cxx:122
 AliAnalysisFilter.cxx:123
 AliAnalysisFilter.cxx:124
 AliAnalysisFilter.cxx:125
 AliAnalysisFilter.cxx:126
 AliAnalysisFilter.cxx:127
 AliAnalysisFilter.cxx:128
 AliAnalysisFilter.cxx:129
 AliAnalysisFilter.cxx:130
 AliAnalysisFilter.cxx:131
 AliAnalysisFilter.cxx:132
 AliAnalysisFilter.cxx:133
 AliAnalysisFilter.cxx:134
 AliAnalysisFilter.cxx:135
 AliAnalysisFilter.cxx:136
 AliAnalysisFilter.cxx:137
 AliAnalysisFilter.cxx:138
 AliAnalysisFilter.cxx:139
 AliAnalysisFilter.cxx:140
 AliAnalysisFilter.cxx:141
 AliAnalysisFilter.cxx:142
 AliAnalysisFilter.cxx:143
 AliAnalysisFilter.cxx:144
 AliAnalysisFilter.cxx:145
 AliAnalysisFilter.cxx:146
 AliAnalysisFilter.cxx:147
 AliAnalysisFilter.cxx:148
 AliAnalysisFilter.cxx:149
 AliAnalysisFilter.cxx:150