#ifndef TMBBCETagger_H
#define TMBBCETagger_H

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TMBTree class for the BCJet electron tagger                          //
//                                                                      //
// Created: 18-JUL-2002  A. Naumann (axel@fnal.gov)                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef TMBBCJet_H
#include "tmb_tree/TMBBCJet.hpp"
#endif
#ifndef TMBBCTagger_H
#include "tmb_tree/TMBBCTagger.hpp"
#endif

class TMBEmcl;

class TMBBCETagger : public TMBBCTagger {
public:
  typedef enum _EEParameter {
    paramPtRel,
    paramDr,
//    paramChiSq,
    paramDCA,
    paramDCAz,
    paramSEMMatchQual,
    paramRoadEMF,
    paramRoadEoP,
    paramPoE,
    paramCombined,
    numParameters
  } EEParameter;

  inline TMBBCETagger(UInt_t numElectrons=0);
  inline virtual ~TMBBCETagger();
	
  // Accessors
  inline virtual Float_t GetCombinedOutput(UInt_t obj);

  inline Float_t GetPtRel(UInt_t iElectron);  
  inline Float_t GetPtRelError(UInt_t iElectron);
  inline Float_t GetDr(UInt_t iElectron);
  inline Float_t GetDrError(UInt_t iElectron);
  inline Float_t GetDCA(UInt_t iElectron);
  inline Float_t GetDCAError(UInt_t iElectron);
  inline Float_t GetDCAz(UInt_t iElectron);
  inline Float_t GetDCAzError(UInt_t iElectron);
  inline Float_t GetSEMMatchQual(UInt_t iElectron);
  inline Float_t GetRoadEMF(UInt_t iElectron);
  inline Float_t GetRoadEoP(UInt_t iElectron);
  inline Float_t GetPoE(UInt_t iElectron);
  inline Float_t GetPoEError(UInt_t iElectron);

  inline UInt_t GetNumElectrons();
  inline TMBEmcl* GetElectron(UInt_t iElectron) const;

private:
  ClassDef(TMBBCETagger, 0) // thumbnail data of muon bc jet id tagger 
};

TMBBCETagger::TMBBCETagger(UInt_t numElectrons):
    TMBBCTagger(numParameters, numElectrons) {}

TMBBCETagger::~TMBBCETagger(){}

Float_t TMBBCETagger::GetCombinedOutput(UInt_t obj){
    return GetParameterOutput(paramCombined, obj);
}

Float_t TMBBCETagger::GetPtRel(UInt_t iElectron) {
    return GetParameterOutput(paramPtRel, iElectron);
}
  
Float_t TMBBCETagger::GetPtRelError(UInt_t iElectron){
    return GetParameterError(paramPtRel, iElectron);
}

Float_t TMBBCETagger::GetDr(UInt_t iElectron){
    return GetParameterOutput(paramDr, iElectron);
}

Float_t TMBBCETagger::GetDrError(UInt_t iElectron){
    return GetParameterError(paramDr, iElectron);
}

Float_t TMBBCETagger::GetDCA(UInt_t iElectron){
    return GetParameterOutput(paramDCA, iElectron);
}

Float_t TMBBCETagger::GetDCAError(UInt_t iElectron){
    return GetParameterError(paramDCA, iElectron);
}

Float_t TMBBCETagger::GetDCAz(UInt_t iElectron){
    return GetParameterOutput(paramDCAz, iElectron);
}

Float_t TMBBCETagger::GetDCAzError(UInt_t iElectron){
    return GetParameterError(paramDCAz, iElectron);
}

Float_t TMBBCETagger::GetSEMMatchQual(UInt_t iElectron){
    return GetParameterOutput(paramSEMMatchQual, iElectron);
}

Float_t TMBBCETagger::GetRoadEMF(UInt_t iElectron){
    return GetParameterOutput(paramRoadEMF, iElectron);
}

Float_t TMBBCETagger::GetRoadEoP(UInt_t iElectron){
    return GetParameterOutput(paramRoadEoP, iElectron);
}

Float_t TMBBCETagger::GetPoE(UInt_t iElectron){
    return GetParameterOutput(paramPoE, iElectron);
}

Float_t TMBBCETagger::GetPoEError(UInt_t iElectron){
    return GetParameterError(paramPoE, iElectron);
}

UInt_t TMBBCETagger::GetNumElectrons() {
    return GetNumTags();
}

TMBEmcl* TMBBCETagger::GetElectron(UInt_t iElectron) const {
    return (TMBEmcl*) GetTagObject(iElectron);
}

#endif // ifndef TMBBCETagger_H