00001
00002
00003 #ifndef JETTILECORRECTION_JETTILECORRECTIONTOOL_H
00004 #define JETTILECORRECTION_JETTILECORRECTIONTOOL_H
00005
00006
00007 #include "AsgTools/AsgMetadataTool.h"
00008
00009
00010
00011
00012 #include "JetCPInterfaces/IJetTileCorrectionTool.h"
00013 #include "xAODJet/JetContainer.h"
00014 #include "xAODJet/JetConstituentVector.h"
00015
00016 #include "TFile.h"
00017 #include "TSystem.h"
00018 #include "TProfile.h"
00019 #include <iostream>
00020 #include <stdlib.h>
00021 #include <set>
00022 #include <vector>
00023 #include <boost/unordered_map.hpp>
00024
00025
00026 #define PIXWIDTH 0.1
00027 #define RINGWIDTH 0.1
00028 #define RJET 0.4
00029 #define NPIX 16
00030 #define OUT 99
00031 #define Pix_eta 17
00032 #define Pix_phi 6
00033
00034
00035
00036
00037 namespace CP {
00038
00039 class JetTileCorrectionTool : public virtual IJetTileCorrectionTool,
00040 public asg::AsgMetadataTool
00041 {
00043 ASG_TOOL_CLASS2( JetTileCorrectionTool, CP::IJetTileCorrectionTool, CP::ISystematicsTool )
00044
00045 public:
00047 JetTileCorrectionTool( const std::string& name );
00048
00050 virtual ~JetTileCorrectionTool();
00051
00053 virtual StatusCode initialize();
00054
00056 virtual CorrectionCode applyCorrection( xAOD::Jet& object );
00057
00059 virtual CorrectionCode correctedCopy( const xAOD::Jet& input, xAOD::Jet*& output );
00060
00061
00063 virtual bool
00064 isAffectedBySystematic( const SystematicVariation& systematic ) const;
00065
00067 virtual SystematicSet
00068 affectingSystematics() const;
00069
00071 virtual SystematicSet
00072 recommendedSystematics() const;
00073
00075 const CP::SystematicSet& appliedSystematics() const {
00076 return *m_appliedSystematics;
00077 }
00078
00079 virtual SystematicCode applySystematicVariation
00080 ( const SystematicSet& systConfig );
00081
00082 CP::SystematicCode registerSystematics();
00083
00084
00085
00086 JTC::TS getTileStatus(const xAOD::Jet& jet);
00087 StatusCode addTileStatus(const xAOD::Jet& jet);
00088
00089
00090 void setRJET(float r);
00091
00092 protected:
00093
00094 bool m_isData;
00095
00096 private:
00097
00098
00099 void loadDeadUser();
00100 void loadDeadDB();
00101
00102 std::vector<float> getCorrections(const xAOD::Jet& j);
00103
00104 JTC::TS overlap(const xAOD::Jet& j, JTC::Hole region);
00105
00106 int getPtBin(float pt);
00107
00108 bool inIOV(JTC::Hole region, int run);
00109
00110 bool inHole(const xAOD::Jet& j, JTC::Hole rdead);
00111 bool inHole(float eta, float phi, JTC::Hole rdead);
00112
00113 IPair getModulePosition(const xAOD::Jet& jet, JTC::Hole module);
00114
00115 void loadModulesFromMap(const xAOD::Jet& jet, JTC::TS& status, std::map<std::string,JTC::Hole> hmap, JTC::PART part=JTC::PART::LB, JTC::TYPE type=JTC::TYPE::DB);
00116 StatusCode loadAllModules(const xAOD::Jet& jet, JTC::TS& status);
00117
00118 JTC::Hole partModToHole(int part, int mod);
00119
00120 bool m_constScale = false;
00121 bool m_isMC = false;
00122
00123 int m_current_run = -1;
00124
00125
00126 int m_NbinsPt = -1;
00127
00128 std::vector<std::string> m_v_user_dead;
00129
00130 TFile* m_rootFile = 0;
00131 std::string m_rootFileName;
00132
00133 std::string m_bd_dead_mapFile;
00134
00135 std::vector<JTC::Region> m_position_masked;
00136
00137
00138 TH1F* m_core_sys_LB = 0;
00139 TH1F* m_core_sys_EB = 0;
00140
00141
00142 std::map<int,TH1F*> m_pars_LB;
00143 std::map<int,TH1F*> m_pars_EB;
00144 std::map<std::string,JTC::Hole> m_db_dead_LB;
00145 std::map<std::string,JTC::Hole> m_db_dead_EB;
00146 std::map<std::string,JTC::Hole> m_user_dead_LB;
00147 std::map<std::string,JTC::Hole> m_user_dead_EB;
00148
00149 float m_RJET;
00150
00152 boost::unordered_map<CP::SystematicSet, CP::SystematicSet> m_systFilter;
00153
00155 CP::SystematicSet* m_appliedSystematics = 0;
00156
00157 };
00158
00159 }
00160
00161 #endif // JETTILECORRECTION_JETTILECORRECTIONTOOL_H