Go to the documentation of this file.00001 #include "RecoEcal/EgammaCoreTools/plugins/EcalClusterEnergyUncertaintyObjectSpecific.h"
00002 #include "TMath.h"
00003
00004 float EcalClusterEnergyUncertaintyObjectSpecific::getValue( const reco::SuperCluster & superCluster, const int mode ) const
00005 {
00006 checkInit();
00007
00008
00009
00010 float en = superCluster.energy();
00011 float eta = fabs(superCluster.eta());
00012 float et = en/cosh(eta);
00013 float brem = superCluster.phiWidth()/superCluster.etaWidth();
00014
00015
00016 const int nBinsEta=6;
00017 const float EtaBins[nBinsEta+1] = {0.0, 0.7, 1.15, 1.44, 1.56, 2.0, 2.5};
00018
00019 const int nBinsBrem=6;
00020 const float BremBins [nBinsBrem+1]= {0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0};
00021
00022 float par0[nBinsEta][nBinsBrem];
00023 float par1[nBinsEta][nBinsBrem];
00024 float par2[nBinsEta][nBinsBrem];
00025 float par3[nBinsEta][nBinsBrem];
00026
00027 par0[0][0]=0.00640519;
00028 par1[0][0]=0.257578;
00029 par2[0][0]=1.72437;
00030 par3[0][0]=4.04686e-06;
00031
00032 par0[0][1]=0.00709569;
00033 par1[0][1]=0.279844;
00034 par2[0][1]=1.13789;
00035 par3[0][1]=1.16239e-05;
00036
00037 par0[0][2]=0.0075544;
00038 par1[0][2]=0.341346;
00039 par2[0][2]=0.513396;
00040 par3[0][2]=2.90054e-06;
00041
00042 par0[0][3]=0.00659365;
00043 par1[0][3]=0.517649;
00044 par2[0][3]=-3.1847;
00045 par3[0][3]=7.37152e-07;
00046
00047 par0[0][4]=0.00771696;
00048 par1[0][4]=0.492897;
00049 par2[0][4]=-1.42222;
00050 par3[0][4]=0.000358677;
00051
00052 par0[0][5]=0.00561532;
00053 par1[0][5]=0.655138;
00054 par2[0][5]=-3.29839;
00055 par3[0][5]=6.25898e-07;
00056
00057 par0[1][0]=0.00273646;
00058 par1[1][0]=0.714568;
00059 par2[1][0]=-4.82956;
00060 par3[1][0]=4.45878e-07;
00061
00062 par0[1][1]=0.00679797;
00063 par1[1][1]=0.472856;
00064 par2[1][1]=-0.281699;
00065 par3[1][1]=5.46479e-05;
00066
00067 par0[1][2]=0.00845532;
00068 par1[1][2]=0.611624;
00069 par2[1][2]=-1.10104;
00070 par3[1][2]=1.16803e-05;
00071
00072 par0[1][3]=0.00831068;
00073 par1[1][3]=0.853653;
00074 par2[1][3]=-4.23761;
00075 par3[1][3]=2.61247e-05;
00076
00077 par0[1][4]=0.00845457;
00078 par1[1][4]=0.984985;
00079 par2[1][4]=-5.19548;
00080 par3[1][4]=2.05044e-07;
00081
00082 par0[1][5]=0.0110227;
00083 par1[1][5]=1.00356;
00084 par2[1][5]=-4.31936;
00085 par3[1][5]=0.14384;
00086
00087 par0[2][0]=-0.00192618;
00088 par1[2][0]=1.69986;
00089 par2[2][0]=-16.4355;
00090 par3[2][0]=1.94946e-06;
00091
00092 par0[2][1]=0.0067622;
00093 par1[2][1]=0.792209;
00094 par2[2][1]=-1.18521;
00095 par3[2][1]=0.066577;
00096
00097 par0[2][2]=0.00761595;
00098 par1[2][2]=1.03058;
00099 par2[2][2]=-4.17237;
00100 par3[2][2]=0.168543;
00101
00102 par0[2][3]=0.0119179;
00103 par1[2][3]=0.910145;
00104 par2[2][3]=-2.14122;
00105 par3[2][3]=0.00342264;
00106
00107 par0[2][4]=0.0139921;
00108 par1[2][4]=1.01488;
00109 par2[2][4]=-2.46637;
00110 par3[2][4]=0.0458434;
00111
00112 par0[2][5]=0.013724;
00113 par1[2][5]=1.49078;
00114 par2[2][5]=-6.60661;
00115 par3[2][5]=0.297821;
00116
00117 par0[3][0]=-0.00197909;
00118 par1[3][0]=4.40696;
00119 par2[3][0]=-4.88737;
00120 par3[3][0]=4.99999;
00121
00122 par0[3][1]=0.0340196;
00123 par1[3][1]=3.86278;
00124 par2[3][1]=-10.899;
00125 par3[3][1]=0.130098;
00126
00127 par0[3][2]=0.0102397;
00128 par1[3][2]=8.99643;
00129 par2[3][2]=-31.5122;
00130 par3[3][2]=0.00118335;
00131
00132 par0[3][3]=0.0110891;
00133 par1[3][3]=8.01794;
00134 par2[3][3]=-21.9038;
00135 par3[3][3]=0.000245975;
00136
00137 par0[3][4]=0.0328931;
00138 par1[3][4]=4.73441;
00139 par2[3][4]=-12.1148;
00140 par3[3][4]=3.01721e-05;
00141
00142 par0[3][5]=0.0395614;
00143 par1[3][5]=3.54327;
00144 par2[3][5]=-12.6514;
00145 par3[3][5]=0.119761;
00146
00147 par0[4][0]=0.0121809;
00148 par1[4][0]=0.965608;
00149 par2[4][0]=-4.19667;
00150 par3[4][0]=0.129896;
00151
00152 par0[4][1]=0.0168951;
00153 par1[4][1]=1.0218;
00154 par2[4][1]=-4.03078;
00155 par3[4][1]=0.374291;
00156
00157 par0[4][2]=0.0213549;
00158 par1[4][2]=1.29613;
00159 par2[4][2]=-4.89024;
00160 par3[4][2]=0.0297165;
00161
00162 par0[4][3]=0.0262602;
00163 par1[4][3]=1.41674;
00164 par2[4][3]=-5.94928;
00165 par3[4][3]=0.19298;
00166
00167 par0[4][4]=0.0334892;
00168 par1[4][4]=1.48572;
00169 par2[4][4]=-5.3175;
00170 par3[4][4]=0.0157013;
00171
00172 par0[4][5]=0.0347093;
00173 par1[4][5]=1.63127;
00174 par2[4][5]=-7.27426;
00175 par3[4][5]=0.201164;
00176
00177 par0[5][0]=0.0185321;
00178 par1[5][0]=0.255205;
00179 par2[5][0]=1.56798;
00180 par3[5][0]=5.07655e-11;
00181
00182 par0[5][1]=0.0182718;
00183 par1[5][1]=0.459086;
00184 par2[5][1]=-0.48198;
00185 par3[5][1]=0.00114946;
00186
00187 par0[5][2]=0.0175505;
00188 par1[5][2]=0.92848;
00189 par2[5][2]=-4.52737;
00190 par3[5][2]=0.154827;
00191
00192 par0[5][3]=0.0233833;
00193 par1[5][3]=0.804105;
00194 par2[5][3]=-3.75131;
00195 par3[5][3]=2.84172;
00196
00197 par0[5][4]=0.0334892;
00198 par1[5][4]=1.48572;
00199 par2[5][4]=-5.3175;
00200 par3[5][4]=0.0157013;
00201
00202 par0[5][5]=0.0347093;
00203 par1[5][5]=1.63127;
00204 par2[5][5]=-7.27426;
00205 par3[5][5]=0.201164;
00206
00207
00208 int iEtaSl = -1;
00209 for (int iEta = 0; iEta < nBinsEta; ++iEta){
00210 if ( EtaBins[iEta] <= TMath::Abs(eta) && TMath::Abs(eta) <EtaBins[iEta+1] ){
00211 iEtaSl = iEta;
00212 }
00213 }
00214
00215
00216 int iBremSl = -1;
00217 for (int iBrem = 0; iBrem < nBinsBrem; ++iBrem){
00218 if ( BremBins[iBrem] <= brem && brem <BremBins[iBrem+1] ){
00219 iBremSl = iBrem;
00220 }
00221 }
00222
00223 if (TMath::Abs(eta)>2.5) iEtaSl = nBinsEta-1;
00224 if (brem<BremBins[0]) iBremSl = 0;
00225 if (brem>BremBins[nBinsBrem-1]) iBremSl = nBinsBrem-1;
00226
00227 float uncertainty = 0;
00228 if (et<=5) uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl]/(5-par2[iEtaSl][iBremSl]) + par3[iEtaSl][iBremSl]/((5-par2[iEtaSl][iBremSl])*(5-par2[iEtaSl][iBremSl]));
00229 if (et>=200) uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl]/(200-par2[iEtaSl][iBremSl]) + par3[iEtaSl][iBremSl]/((200-par2[iEtaSl][iBremSl])*(200-par2[iEtaSl][iBremSl]));
00230
00231 if (et>5 && et<200) uncertainty = par0[iEtaSl][iBremSl] + par1[iEtaSl][iBremSl]/(et-par2[iEtaSl][iBremSl]) + par3[iEtaSl][iBremSl]/((et-par2[iEtaSl][iBremSl])*(et-par2[iEtaSl][iBremSl]));
00232
00233
00234 return (uncertainty*en);
00235
00236
00237 }
00238
00239 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterFunctionFactory.h"
00240 DEFINE_EDM_PLUGIN( EcalClusterFunctionFactory, EcalClusterEnergyUncertaintyObjectSpecific, "EcalClusterEnergyUncertaintyObjectSpecific");