ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////
//
//  AliEveEventSelector class
//  selects events according to given criteria
//
//  origin: Mikolaj Krzewicki, Nikhef, Mikolaj.Krzewicki@cern.ch
//
////////////////////////////////////////////////////////////////////////////

#ifndef AliEveEventSelector_H
#define AliEveEventSelector_H

#include "AliEveEventManager.h"
#include <TObject.h>
#include <TString.h>

class TTree;
class TList;
class AliESDEvent;
class TEntryList;
class AliEveEventManager;
class TString;
class TObjArray;

class AliEveEventSelector : public TObject
{
public:
  AliEveEventSelector(AliEveEventManager* evman);
  void SetEventManager(AliEveEventManager* evman) { fPEventManager = evman; }
  AliEveEventManager* GetEventManager() { return fPEventManager; }
  TTree* GetESDTree() const { return fPEventManager->GetESDTree(); }

  Bool_t FindNext(Int_t& i);
  Bool_t FindPrev(Int_t& i);
  
  void SetSelectionString( const TString& str );
  void SetSelectionString( const char* str );
  TString GetSelectionString() {return fString;}
  Bool_t GetSelectOnString() {return fSelectOnString;}
  void SetSelectOnString( const Bool_t b = kTRUE ) {fSelectOnString = b;}
  void SetWrapAround( const Bool_t b = kTRUE ) {fWrapAround = b;}
  Bool_t GetWrapAround() const { return fWrapAround; }
  void Update();

  void SetSelectOnTriggerType( const Bool_t b = kTRUE ) {fSelectOnTriggerType = b;}
  void SetTriggerType( const TString& type );
  void SetTriggerType( const char* type );
  TString GetTriggerType() const {return fTriggerType;}
  Bool_t GetSelectOnTriggerType() {return fSelectOnTriggerType;}

  void SetSelectOnTriggerString( const Bool_t b=kTRUE ) { fSelectOnTriggerString = b; }
  void SetTriggerSelectionString( const TString m );
  TString GetTriggerSelectionString() const { return fTriggerSelectionString; }
  Bool_t GetSelectOnTriggerString() const { return fSelectOnTriggerString; }
  void SetTriggerMaskPatternString( TString str) { fTriggerMaskPatternString = str; }
  TString GetTriggerMaskPatternString() const { return fTriggerMaskPatternString; }

  void SetSelectOnMultiplicity( const Bool_t b = kTRUE) { fSelectOnMultiplicity = b; }
  Bool_t GetSelectOnMultiplicity() { return fSelectOnMultiplicity; }
  void SetMultiplicityLow( const Int_t low ) { fMultiplicityLow = low; }
  void SetMultiplicityHigh( const Int_t high ) { fMultiplicityHigh = high; }
  Int_t GetMultiplicityLow() { return fMultiplicityLow; }
  Int_t GetMultiplicityHigh() { return fMultiplicityHigh; }
  
protected:
  void UpdateEntryList();
  Bool_t CheckOtherSelection(AliESDEvent* ESD);

  Bool_t FindNextInTree(TTree* tree, Int_t& i);
  Bool_t FindPrevInTree(TTree* tree, Int_t& i);
  
private:
  AliEveEventSelector(const AliEveEventSelector&);
  AliEveEventSelector& operator=(const AliEveEventSelector&);

  AliEveEventManager *fPEventManager; //event manager
  Bool_t fWrapAround;                 //go back to the first event after the last?
  
  Bool_t  fSelectOnString;            //whether to select on string expression
  TString fString;                    //expression to select on
  TEntryList* fPEntryList;            //list of enry numbers after selection
  Int_t  fEntryListId;                //current entry no. in entry list
  Int_t  fLastTreeSize;               //stores the last treesize

  Bool_t  fSelectOnTriggerType;       //whether to select on trigger type
  TString fTriggerType;               //trigger type

  Bool_t  fSelectOnTriggerString;     //whether to select on trigger type with a formula
  TString fTriggerSelectionString;    //trigger selection formula
  TString fTriggerMaskPatternString;  //trigger mask placeholder for evaluation

  Bool_t fSelectOnMultiplicity;       //whether to select on multiplicity
  Int_t  fMultiplicityLow;            //lower bound on multiplicity
  Int_t  fMultiplicityHigh;           //higher bound on multiplicity


  ClassDef(AliEveEventSelector, 2); 
};

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