//this file looks like plain C, but it's actually -*- c++ -*-
#ifndef __TQUniqueCut__
#define __TQUniqueCut__

#include "QFramework/TQObservable.h"
#include "QFramework/TQCompiledCut.h"

class TQUniqueCut : public TQCompiledCut {
protected:
  TString runNumberBranch;
  TString eventNumberBranch;
  TQObservable* runNumberObservable; //!
  TQObservable* eventNumberObservable; //!

  mutable std::vector<long> runNumbers;
  mutable std::vector<std::set<long> >eventNumbers;

  bool enabled;

  void initUniqueCut();

  virtual bool initializeObservables() override;
  virtual bool finalizeObservables() override;
  virtual bool initializeSelfSampleFolder(TQSampleFolder* sf) override;
  virtual bool finalizeSelfSampleFolder(TQSampleFolder* sf) override;
  
  virtual TObjArray* getOwnBranches() override;

public:
  static bool printOnVeto;
  
  static bool checkUnique(std::set<long>& entries, long newEntry);
  static long getIndex(std::vector<long>& entries, long entry);

  void clear();
  void setActive(bool active);

  bool isMergeable() const override;
  bool setBranchNames(const TString& runBranch, const TString& evtBranch);
  TQUniqueCut();
  TQUniqueCut(const TString& name);
  TQUniqueCut(const TString& runBranch, const TString& evtBranch);
  TQUniqueCut(const TString& name, const TString& runBranch, const TString& evtBranch);
  
  const TString& getRunNumberExpression() const;
  const TString& getEventNumberExpression() const;
  
  virtual bool passed(bool doPrint) const override;
  
  void printLists() const;

  ClassDefOverride(TQUniqueCut, 0); // cut to remove duplicate events
};

 
#endif
 TQUniqueCut.h:1
 TQUniqueCut.h:2
 TQUniqueCut.h:3
 TQUniqueCut.h:4
 TQUniqueCut.h:5
 TQUniqueCut.h:6
 TQUniqueCut.h:7
 TQUniqueCut.h:8
 TQUniqueCut.h:9
 TQUniqueCut.h:10
 TQUniqueCut.h:11
 TQUniqueCut.h:12
 TQUniqueCut.h:13
 TQUniqueCut.h:14
 TQUniqueCut.h:15
 TQUniqueCut.h:16
 TQUniqueCut.h:17
 TQUniqueCut.h:18
 TQUniqueCut.h:19
 TQUniqueCut.h:20
 TQUniqueCut.h:21
 TQUniqueCut.h:22
 TQUniqueCut.h:23
 TQUniqueCut.h:24
 TQUniqueCut.h:25
 TQUniqueCut.h:26
 TQUniqueCut.h:27
 TQUniqueCut.h:28
 TQUniqueCut.h:29
 TQUniqueCut.h:30
 TQUniqueCut.h:31
 TQUniqueCut.h:32
 TQUniqueCut.h:33
 TQUniqueCut.h:34
 TQUniqueCut.h:35
 TQUniqueCut.h:36
 TQUniqueCut.h:37
 TQUniqueCut.h:38
 TQUniqueCut.h:39
 TQUniqueCut.h:40
 TQUniqueCut.h:41
 TQUniqueCut.h:42
 TQUniqueCut.h:43
 TQUniqueCut.h:44
 TQUniqueCut.h:45
 TQUniqueCut.h:46
 TQUniqueCut.h:47
 TQUniqueCut.h:48
 TQUniqueCut.h:49
 TQUniqueCut.h:50
 TQUniqueCut.h:51
 TQUniqueCut.h:52
 TQUniqueCut.h:53
 TQUniqueCut.h:54
 TQUniqueCut.h:55
 TQUniqueCut.h:56