00001 #ifndef NEWETAPHI_BINNING_CLASS_H
00002 #define NEWETAPHI_BINNING_CLASS_H
00003
00004 #include "TLorentzVector.h"
00005 #include "TH2Poly.h"
00006 #include <iostream>
00007 #include <map>
00008
00013
00014 class fineEtaPhiBinning {
00015
00016 public:
00017 fineEtaPhiBinning();
00018 ~fineEtaPhiBinning() {
00019 }
00020 ;
00021
00022
00023 int bin(const TLorentzVector & m) const {
00024 return getPhiSector(m) + nphibins() * getEtaBin(m);
00025 }
00026
00027 int nabsetabins() const {
00028 return m_abs_eta_bins.size();
00029 }
00030
00031 int netabins() const {
00032 return 2 * nabsetabins() - 1;
00033 }
00034
00035 int nphibins() const {
00036 return m_phi_upper_BAR.size();
00037 }
00038
00039 int nbins() const {
00040 return netabins() * nphibins();
00041 }
00042
00043 int firstbin() const {
00044 return 1 - (nphibins() * (nabsetabins() - 1));
00045 }
00046
00047 int lastbin() const {
00048 return nphibins() + (nphibins() * (nabsetabins() - 1));
00049 }
00050
00051
00052
00053
00054
00055
00056 TH2Poly* getPolyHist(const std::string & name, const std::string & title) const;
00057
00058 int getPolyBin(const int & binnumber) const;
00059
00060 private:
00061
00062
00063
00064 int getPhiSector(const TLorentzVector & m) const;
00065
00066 int getEtaBin(const TLorentzVector & mst) const;
00067
00068 int getAbsEtaBin(double eta) const;
00069
00070
00071 int getECSector(double phi) const;
00072
00073 int getSector(double phi) const;
00074
00075 float m_barrel_endcap_transition;
00076
00077 std::vector<float> m_abs_eta_bins;
00078
00079 std::vector<float> m_phi_upper_BAR;
00080 std::vector<float> m_phi_lower_BAR;
00081
00082 std::vector<float> m_phi_upper_EC;
00083 std::vector<float> m_phi_lower_EC;
00084
00085 };
00086 #endif