#include "QFramework/TQEventIndexObservable.h"
#include <limits>

// uncomment the following line to enable debug printouts
// #define _DEBUG_
// you can perform debug printouts with statements like this
// DEBUG("error number %d occurred",someInteger);

// be careful to not move the _DEBUG_ flag behind the following line
// otherwise, it will show no effect
#include "QFramework/TQLibrary.h"

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQEventIndexObservable
//
// The TQEventIndexObservable is a variant of TQObservable that simply
// returns the index of the current event in the tree.
//
////////////////////////////////////////////////////////////////////////////////////////////////

/*@observable: [TQEventIndexObservable] The TQEventIndexObservable allows to retrieve the index of the current TTree entry (please not that this is *not* the event/run number!). It needs to be instantiated by the user, typically via an Observable snippet. The name that is passed to its contructor is the expression that matches to this observable. 

Example: 

  Observable Snippet (python):
    from QFramework import *
    from ROOT import *
    def addObservables():
      obs = TQEventIndexObservable("treeindex")
      if not TQObservable.addObservable(obs):
        return False
      return True
  
  Expression (e.g. cut only accepting every second event):
  "[treeindex]%2 == 0"
*/

ClassImp(TQEventIndexObservable)

//______________________________________________________________________________________________

TQEventIndexObservable::TQEventIndexObservable(){
  // default constructor
  DEBUGclass("default constructor called");
}

//______________________________________________________________________________________________

TQEventIndexObservable::~TQEventIndexObservable(){
  // default destructor
  DEBUGclass("destructor called");
} 

//______________________________________________________________________________________________

bool TQEventIndexObservable::initializeSelf(){
  // initialize this observable on a sample/tree
  DEBUGclass("initializing");

  // since this function is only called once per sample, we can
  // perform any checks that seem necessary
  if(!this->fTree){
    DEBUGclass("no tree, terminating");
    return false;
  }
  return true;
}

//______________________________________________________________________________________________

bool TQEventIndexObservable::finalizeSelf(){
  // finalize this observable on a sample/tree
  DEBUGclass("finalizing");
  return true;
}

//______________________________________________________________________________________________

TObjArray* TQEventIndexObservable::getBranchNames() const {
  // retrieve the list of branch names 
  // ownership of the list belongs to the caller of the function
  DEBUGclass("retrieving branch names");
  return NULL;
}

//______________________________________________________________________________________________

double TQEventIndexObservable::getValue() const {
  // retrieve the index of the current event in the tree
  DEBUGclass("returning");
  return this->getCurrentEntry();
}
//______________________________________________________________________________________________

TQEventIndexObservable::TQEventIndexObservable(const TString& name):
TQTreeObservable(name)
{
  // constructor with name argument
  DEBUGclass("constructor called with '%s'",name.Data());
}
 TQEventIndexObservable.cxx:1
 TQEventIndexObservable.cxx:2
 TQEventIndexObservable.cxx:3
 TQEventIndexObservable.cxx:4
 TQEventIndexObservable.cxx:5
 TQEventIndexObservable.cxx:6
 TQEventIndexObservable.cxx:7
 TQEventIndexObservable.cxx:8
 TQEventIndexObservable.cxx:9
 TQEventIndexObservable.cxx:10
 TQEventIndexObservable.cxx:11
 TQEventIndexObservable.cxx:12
 TQEventIndexObservable.cxx:13
 TQEventIndexObservable.cxx:14
 TQEventIndexObservable.cxx:15
 TQEventIndexObservable.cxx:16
 TQEventIndexObservable.cxx:17
 TQEventIndexObservable.cxx:18
 TQEventIndexObservable.cxx:19
 TQEventIndexObservable.cxx:20
 TQEventIndexObservable.cxx:21
 TQEventIndexObservable.cxx:22
 TQEventIndexObservable.cxx:23
 TQEventIndexObservable.cxx:24
 TQEventIndexObservable.cxx:25
 TQEventIndexObservable.cxx:26
 TQEventIndexObservable.cxx:27
 TQEventIndexObservable.cxx:28
 TQEventIndexObservable.cxx:29
 TQEventIndexObservable.cxx:30
 TQEventIndexObservable.cxx:31
 TQEventIndexObservable.cxx:32
 TQEventIndexObservable.cxx:33
 TQEventIndexObservable.cxx:34
 TQEventIndexObservable.cxx:35
 TQEventIndexObservable.cxx:36
 TQEventIndexObservable.cxx:37
 TQEventIndexObservable.cxx:38
 TQEventIndexObservable.cxx:39
 TQEventIndexObservable.cxx:40
 TQEventIndexObservable.cxx:41
 TQEventIndexObservable.cxx:42
 TQEventIndexObservable.cxx:43
 TQEventIndexObservable.cxx:44
 TQEventIndexObservable.cxx:45
 TQEventIndexObservable.cxx:46
 TQEventIndexObservable.cxx:47
 TQEventIndexObservable.cxx:48
 TQEventIndexObservable.cxx:49
 TQEventIndexObservable.cxx:50
 TQEventIndexObservable.cxx:51
 TQEventIndexObservable.cxx:52
 TQEventIndexObservable.cxx:53
 TQEventIndexObservable.cxx:54
 TQEventIndexObservable.cxx:55
 TQEventIndexObservable.cxx:56
 TQEventIndexObservable.cxx:57
 TQEventIndexObservable.cxx:58
 TQEventIndexObservable.cxx:59
 TQEventIndexObservable.cxx:60
 TQEventIndexObservable.cxx:61
 TQEventIndexObservable.cxx:62
 TQEventIndexObservable.cxx:63
 TQEventIndexObservable.cxx:64
 TQEventIndexObservable.cxx:65
 TQEventIndexObservable.cxx:66
 TQEventIndexObservable.cxx:67
 TQEventIndexObservable.cxx:68
 TQEventIndexObservable.cxx:69
 TQEventIndexObservable.cxx:70
 TQEventIndexObservable.cxx:71
 TQEventIndexObservable.cxx:72
 TQEventIndexObservable.cxx:73
 TQEventIndexObservable.cxx:74
 TQEventIndexObservable.cxx:75
 TQEventIndexObservable.cxx:76
 TQEventIndexObservable.cxx:77
 TQEventIndexObservable.cxx:78
 TQEventIndexObservable.cxx:79
 TQEventIndexObservable.cxx:80
 TQEventIndexObservable.cxx:81
 TQEventIndexObservable.cxx:82
 TQEventIndexObservable.cxx:83
 TQEventIndexObservable.cxx:84
 TQEventIndexObservable.cxx:85
 TQEventIndexObservable.cxx:86
 TQEventIndexObservable.cxx:87
 TQEventIndexObservable.cxx:88
 TQEventIndexObservable.cxx:89
 TQEventIndexObservable.cxx:90
 TQEventIndexObservable.cxx:91
 TQEventIndexObservable.cxx:92
 TQEventIndexObservable.cxx:93
 TQEventIndexObservable.cxx:94
 TQEventIndexObservable.cxx:95
 TQEventIndexObservable.cxx:96
 TQEventIndexObservable.cxx:97
 TQEventIndexObservable.cxx:98
 TQEventIndexObservable.cxx:99
 TQEventIndexObservable.cxx:100
 TQEventIndexObservable.cxx:101