//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlTau.h,v 1.9 2015/04/22 22:22:26 stamm Exp $
// Copyright: 2008 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlTau
#define ATLAS_AtlTau
#ifndef HEP_HepTau
#include <HepTau.h>
#endif
#ifndef ATLAS_AtlTriggerMatch
#include <AtlTriggerMatch.h>
#endif
#ifndef ATLAS_AtlMETWeights
#include <AtlMETWeights.h>
#endif

class AtlTau : public HepTau, public AtlTriggerMatch, public AtlMETWeights {
  
 public:
  enum EAuthor { kInvalidAuthor = BIT(0),
		 kTauRec        = BIT(1),   // CAL-based reconstruction
  		 kTau1P3P       = BIT(2) }; // Track-based reconstruction
  // Details can be found at the Tau working group wiki page
  // BEGIN_HTML
  // <a href="https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TauWG">
  // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TauWG</a>
  // END_HTML

  static const Int_t fgNAuthors;
  static const char* fgAuthorNames[];
  
  enum ETauFlag { kInvalidTauFlag     = BIT(0),
		  kMuonVeto           = BIT(1),
		  kElectronVetoLoose  = BIT(2),
		  kElectronVetoMedium = BIT(3),
		  kElectronVetoTight  = BIT(4),
		  kJetVetoLoose       = BIT(5),
		  kJetVetoMedium      = BIT(6),
		  kJetVetoTight       = BIT(7)
  };

  static const Int_t fgNTauFlags;
  static const char* fgTauFlagNames[];
  
 private:
  EAuthor  fAuthor;  // Reconstruction algorithm(s) used
  ETauFlag fTauFlag; // Tau quality flag

 public:
  AtlTau();
  AtlTau(Int_t Id, Float_t Px, Float_t Py, Float_t Pz, Float_t E,
	 Bool_t IsTauPlus, EAuthor Author, ETauFlag TauFlag);
  virtual ~AtlTau();
  virtual void Clear(Option_t *option = "");
  virtual void Print(Option_t *option = "");
  static void PrintHeader();
  static void PrintFooter();
  const char* NameOfAuthor();
  void PrintTauFlag();

  inline EAuthor GetAuthor()   const { return fAuthor; }
  inline ETauFlag GetTauFlag() const { return fTauFlag; }
  
  inline Bool_t IsInvalidAuthor() const { return fAuthor & kInvalidAuthor; }
  inline Bool_t IsTauRec()        const { return fAuthor & kTauRec; }
  inline Bool_t IsTau1P3P()       const { return fAuthor & kTau1P3P; }

  inline Bool_t IsInvalidTauFlag()     const { return fTauFlag & kInvalidTauFlag; }
  inline Bool_t IsMuonVeto()           const { return fTauFlag & kMuonVeto; }
  inline Bool_t IsElectronVetoLoose()  const { return fTauFlag & kElectronVetoLoose; }
  inline Bool_t IsElectronVetoMedium() const { return fTauFlag & kElectronVetoMedium; }
  inline Bool_t IsElectronVetoTight()  const { return fTauFlag & kElectronVetoTight; }
  inline Bool_t IsJetVetoLoose()       const { return fTauFlag & kJetVetoLoose; }
  inline Bool_t IsJetVetoMedium()      const { return fTauFlag & kJetVetoMedium; }
  inline Bool_t IsJetVetoTight()       const { return fTauFlag & kJetVetoTight; }

  ClassDef(AtlTau,3) // Atlas tau class
};
#endif
 AtlTau.h:1
 AtlTau.h:2
 AtlTau.h:3
 AtlTau.h:4
 AtlTau.h:5
 AtlTau.h:6
 AtlTau.h:7
 AtlTau.h:8
 AtlTau.h:9
 AtlTau.h:10
 AtlTau.h:11
 AtlTau.h:12
 AtlTau.h:13
 AtlTau.h:14
 AtlTau.h:15
 AtlTau.h:16
 AtlTau.h:17
 AtlTau.h:18
 AtlTau.h:19
 AtlTau.h:20
 AtlTau.h:21
 AtlTau.h:22
 AtlTau.h:23
 AtlTau.h:24
 AtlTau.h:25
 AtlTau.h:26
 AtlTau.h:27
 AtlTau.h:28
 AtlTau.h:29
 AtlTau.h:30
 AtlTau.h:31
 AtlTau.h:32
 AtlTau.h:33
 AtlTau.h:34
 AtlTau.h:35
 AtlTau.h:36
 AtlTau.h:37
 AtlTau.h:38
 AtlTau.h:39
 AtlTau.h:40
 AtlTau.h:41
 AtlTau.h:42
 AtlTau.h:43
 AtlTau.h:44
 AtlTau.h:45
 AtlTau.h:46
 AtlTau.h:47
 AtlTau.h:48
 AtlTau.h:49
 AtlTau.h:50
 AtlTau.h:51
 AtlTau.h:52
 AtlTau.h:53
 AtlTau.h:54
 AtlTau.h:55
 AtlTau.h:56
 AtlTau.h:57
 AtlTau.h:58
 AtlTau.h:59
 AtlTau.h:60
 AtlTau.h:61
 AtlTau.h:62
 AtlTau.h:63
 AtlTau.h:64
 AtlTau.h:65
 AtlTau.h:66
 AtlTau.h:67
 AtlTau.h:68
 AtlTau.h:69
 AtlTau.h:70
 AtlTau.h:71
 AtlTau.h:72
 AtlTau.h:73
 AtlTau.h:74
 AtlTau.h:75
 AtlTau.h:76
 AtlTau.h:77
 AtlTau.h:78
 AtlTau.h:79
 AtlTau.h:80