00001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00002
00003 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterLazyTools.h"
00004 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
00005
00006 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00007 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00008
00009 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00010 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00011 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00012 #include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
00013
00014 #include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h"
00015 #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h"
00016 #include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h"
00017
00018 #include "CommonTools/Utils/interface/StringToEnumValue.h"
00019 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h"
00020 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
00021
00022
00023 EcalClusterLazyTools::EcalClusterLazyTools( const edm::Event &ev, const edm::EventSetup &es, edm::InputTag redEBRecHits, edm::InputTag redEERecHits)
00024 {
00025 getGeometry( es );
00026 getTopology( es );
00027 getEBRecHits( ev, redEBRecHits );
00028 getEERecHits( ev, redEERecHits );
00029 getIntercalibConstants( es );
00030 getADCToGeV ( es );
00031 getLaserDbService ( es );
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 }
00057
00058 EcalClusterLazyTools::EcalClusterLazyTools( const edm::Event &ev, const edm::EventSetup &es, edm::InputTag redEBRecHits, edm::InputTag redEERecHits,const edm::ParameterSet& config)
00059 {
00060 getGeometry( es );
00061 getTopology( es );
00062 getEBRecHits( ev, redEBRecHits );
00063 getEERecHits( ev, redEERecHits );
00064 getIntercalibConstants( es );
00065 getADCToGeV ( es );
00066 getLaserDbService ( es );
00067
00068
00069
00070
00071 }
00072
00073
00074 EcalClusterLazyTools::~EcalClusterLazyTools()
00075 {
00076 }
00077
00078
00079
00080 void EcalClusterLazyTools::getGeometry( const edm::EventSetup &es )
00081 {
00082 edm::ESHandle<CaloGeometry> pGeometry;
00083 es.get<CaloGeometryRecord>().get(pGeometry);
00084 geometry_ = pGeometry.product();
00085 }
00086
00087
00088
00089 void EcalClusterLazyTools::getTopology( const edm::EventSetup &es )
00090 {
00091 edm::ESHandle<CaloTopology> pTopology;
00092 es.get<CaloTopologyRecord>().get(pTopology);
00093 topology_ = pTopology.product();
00094 }
00095
00096
00097
00098 void EcalClusterLazyTools::getEBRecHits( const edm::Event &ev, edm::InputTag redEBRecHits )
00099 {
00100 edm::Handle< EcalRecHitCollection > pEBRecHits;
00101 ev.getByLabel( redEBRecHits, pEBRecHits );
00102 ebRecHits_ = pEBRecHits.product();
00103 }
00104
00105
00106
00107 void EcalClusterLazyTools::getEERecHits( const edm::Event &ev, edm::InputTag redEERecHits )
00108 {
00109 edm::Handle< EcalRecHitCollection > pEERecHits;
00110 ev.getByLabel( redEERecHits, pEERecHits );
00111 eeRecHits_ = pEERecHits.product();
00112 }
00113
00114
00115
00116 void EcalClusterLazyTools::getIntercalibConstants( const edm::EventSetup &es )
00117 {
00118
00119 es.get<EcalIntercalibConstantsRcd>().get(ical);
00120 icalMap = ical->getMap();
00121 }
00122
00123
00124
00125 void EcalClusterLazyTools::getADCToGeV( const edm::EventSetup &es )
00126 {
00127
00128 es.get<EcalADCToGeVConstantRcd>().get(agc);
00129 }
00130
00131
00132
00133 void EcalClusterLazyTools::getLaserDbService ( const edm::EventSetup &es ){
00134
00135 es.get<EcalLaserDbRecord>().get(laser);
00136 }
00137
00138
00139 const EcalRecHitCollection * EcalClusterLazyTools::getEcalRecHitCollection( const reco::BasicCluster &cluster )
00140 {
00141 if ( cluster.size() == 0 ) {
00142 throw cms::Exception("InvalidCluster") << "The cluster has no crystals!";
00143 }
00144 DetId id = (cluster.hitsAndFractions()[0]).first;
00145 const EcalRecHitCollection *recHits = 0;
00146 if ( id.subdetId() == EcalBarrel ) {
00147 recHits = ebRecHits_;
00148 } else if ( id.subdetId() == EcalEndcap ) {
00149 recHits = eeRecHits_;
00150 } else {
00151 throw cms::Exception("InvalidSubdetector") << "The subdetId() " << id.subdetId() << " does not correspond to EcalBarrel neither EcalEndcap";
00152 }
00153 return recHits;
00154 }
00155
00156
00157
00158 float EcalClusterLazyTools::e1x3( const reco::BasicCluster &cluster )
00159 {
00160 return EcalClusterTools::e1x3( cluster, getEcalRecHitCollection(cluster), topology_ );
00161 }
00162
00163
00164 float EcalClusterLazyTools::e1x3( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00165 {
00166 return EcalClusterTools::e1x3( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00167 }
00168
00169
00170
00171 float EcalClusterLazyTools::e3x1( const reco::BasicCluster &cluster )
00172 {
00173 return EcalClusterTools::e3x1( cluster, getEcalRecHitCollection(cluster), topology_ );
00174 }
00175
00176 float EcalClusterLazyTools::e3x1( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00177 {
00178 return EcalClusterTools::e3x1( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00179 }
00180
00181
00182 float EcalClusterLazyTools::e1x5( const reco::BasicCluster &cluster )
00183 {
00184 return EcalClusterTools::e1x5( cluster, getEcalRecHitCollection(cluster), topology_ );
00185 }
00186
00187 float EcalClusterLazyTools::e1x5( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00188 {
00189 return EcalClusterTools::e1x5( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00190 }
00191
00192
00193
00194 float EcalClusterLazyTools::e5x1( const reco::BasicCluster &cluster )
00195 {
00196 return EcalClusterTools::e5x1( cluster, getEcalRecHitCollection(cluster), topology_ );
00197 }
00198
00199 float EcalClusterLazyTools::e5x1( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00200 {
00201 return EcalClusterTools::e5x1( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00202 }
00203
00204
00205 float EcalClusterLazyTools::e2x2( const reco::BasicCluster &cluster )
00206 {
00207 return EcalClusterTools::e2x2( cluster, getEcalRecHitCollection(cluster), topology_ );
00208 }
00209
00210 float EcalClusterLazyTools::e2x2( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00211 {
00212 return EcalClusterTools::e2x2( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00213 }
00214
00215
00216 float EcalClusterLazyTools::e3x2( const reco::BasicCluster &cluster )
00217 {
00218 return EcalClusterTools::e3x2( cluster, getEcalRecHitCollection(cluster), topology_ );
00219 }
00220
00221 float EcalClusterLazyTools::e3x2( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00222 {
00223 return EcalClusterTools::e3x2( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00224 }
00225
00226
00227 float EcalClusterLazyTools::e3x3( const reco::BasicCluster &cluster )
00228 {
00229 return EcalClusterTools::e3x3( cluster, getEcalRecHitCollection(cluster), topology_ );
00230 }
00231
00232 float EcalClusterLazyTools::e3x3( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00233 {
00234 return EcalClusterTools::e3x3( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00235 }
00236
00237
00238 float EcalClusterLazyTools::e4x4( const reco::BasicCluster &cluster )
00239 {
00240 return EcalClusterTools::e4x4( cluster, getEcalRecHitCollection(cluster), topology_ );
00241 }
00242
00243 float EcalClusterLazyTools::e4x4( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00244 {
00245 return EcalClusterTools::e4x4( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00246 }
00247
00248
00249 float EcalClusterLazyTools::e5x5( const reco::BasicCluster &cluster )
00250 {
00251 return EcalClusterTools::e5x5( cluster, getEcalRecHitCollection(cluster), topology_ );
00252 }
00253
00254 float EcalClusterLazyTools::e5x5( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00255 {
00256 return EcalClusterTools::e5x5( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00257 }
00258
00259
00260 float EcalClusterLazyTools::e2x5Right( const reco::BasicCluster &cluster )
00261 {
00262 return EcalClusterTools::e2x5Right( cluster, getEcalRecHitCollection(cluster), topology_ );
00263 }
00264
00265 float EcalClusterLazyTools::e2x5Right( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00266 {
00267 return EcalClusterTools::e2x5Right( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00268 }
00269
00270
00271 float EcalClusterLazyTools::e2x5Left( const reco::BasicCluster &cluster )
00272 {
00273 return EcalClusterTools::e2x5Left( cluster, getEcalRecHitCollection(cluster), topology_ );
00274 }
00275
00276 float EcalClusterLazyTools::e2x5Left( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00277 {
00278 return EcalClusterTools::e2x5Left( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00279 }
00280
00281
00282 float EcalClusterLazyTools::e2x5Top( const reco::BasicCluster &cluster )
00283 {
00284 return EcalClusterTools::e2x5Top( cluster, getEcalRecHitCollection(cluster), topology_ );
00285 }
00286
00287 float EcalClusterLazyTools::e2x5Top( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00288 {
00289 return EcalClusterTools::e2x5Top( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00290 }
00291
00292
00293 float EcalClusterLazyTools::e2x5Bottom( const reco::BasicCluster &cluster )
00294 {
00295 return EcalClusterTools::e2x5Bottom( cluster, getEcalRecHitCollection(cluster), topology_ );
00296 }
00297
00298 float EcalClusterLazyTools::e2x5Bottom( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00299 {
00300 return EcalClusterTools::e2x5Bottom( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00301 }
00302
00303
00304 float EcalClusterLazyTools::e2x5Max( const reco::BasicCluster &cluster )
00305 {
00306 return EcalClusterTools::e2x5Max( cluster, getEcalRecHitCollection(cluster), topology_ );
00307 }
00308
00309 float EcalClusterLazyTools::e2x5Max( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00310 {
00311 return EcalClusterTools::e2x5Max( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00312 }
00313
00314
00315 float EcalClusterLazyTools::eLeft( const reco::BasicCluster &cluster )
00316 {
00317 return EcalClusterTools::eLeft( cluster, getEcalRecHitCollection(cluster), topology_ );
00318 }
00319
00320 float EcalClusterLazyTools::eLeft( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00321 {
00322 return EcalClusterTools::eLeft( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00323 }
00324
00325
00326 float EcalClusterLazyTools::eRight( const reco::BasicCluster &cluster )
00327 {
00328 return EcalClusterTools::eRight( cluster, getEcalRecHitCollection(cluster), topology_ );
00329 }
00330
00331 float EcalClusterLazyTools::eRight( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00332 {
00333 return EcalClusterTools::eRight( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00334 }
00335
00336
00337 float EcalClusterLazyTools::eTop( const reco::BasicCluster &cluster )
00338 {
00339 return EcalClusterTools::eTop( cluster, getEcalRecHitCollection(cluster), topology_ );
00340 }
00341
00342 float EcalClusterLazyTools::eTop( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00343 {
00344 return EcalClusterTools::eTop( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00345 }
00346
00347
00348 float EcalClusterLazyTools::eBottom( const reco::BasicCluster &cluster )
00349 {
00350 return EcalClusterTools::eBottom( cluster, getEcalRecHitCollection(cluster), topology_ );
00351 }
00352
00353 float EcalClusterLazyTools::eBottom( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00354 {
00355 return EcalClusterTools::eBottom( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv );
00356 }
00357
00358
00359 float EcalClusterLazyTools::eMax( const reco::BasicCluster &cluster )
00360 {
00361 return EcalClusterTools::eMax( cluster, getEcalRecHitCollection(cluster) );
00362 }
00363
00364 float EcalClusterLazyTools::eMax( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00365 {
00366 return EcalClusterTools::eMax( cluster, getEcalRecHitCollection(cluster), flagsexcl, severitiesexcl, sevLv );
00367 }
00368
00369
00370 float EcalClusterLazyTools::e2nd( const reco::BasicCluster &cluster )
00371 {
00372 return EcalClusterTools::e2nd( cluster, getEcalRecHitCollection(cluster) );
00373 }
00374
00375 float EcalClusterLazyTools::e2nd( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00376 {
00377 return EcalClusterTools::e2nd( cluster, getEcalRecHitCollection(cluster), flagsexcl, severitiesexcl, sevLv );
00378 }
00379
00380 std::pair<DetId, float> EcalClusterLazyTools::getMaximum( const reco::BasicCluster &cluster )
00381 {
00382 return EcalClusterTools::getMaximum( cluster, getEcalRecHitCollection(cluster) );
00383 }
00384
00385 std::pair<DetId, float> EcalClusterLazyTools::getMaximum( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00386 {
00387 return EcalClusterTools::getMaximum( cluster, getEcalRecHitCollection(cluster), flagsexcl, severitiesexcl, sevLv );
00388 }
00389
00390
00391 std::vector<float> EcalClusterLazyTools::energyBasketFractionEta( const reco::BasicCluster &cluster )
00392 {
00393 return EcalClusterTools::energyBasketFractionEta( cluster, getEcalRecHitCollection(cluster) );
00394 }
00395
00396 std::vector<float> EcalClusterLazyTools::energyBasketFractionEta( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00397 {
00398 return EcalClusterTools::energyBasketFractionEta( cluster, getEcalRecHitCollection(cluster), flagsexcl, severitiesexcl, sevLv );
00399 }
00400
00401
00402 std::vector<float> EcalClusterLazyTools::energyBasketFractionPhi( const reco::BasicCluster &cluster )
00403 {
00404 return EcalClusterTools::energyBasketFractionPhi( cluster, getEcalRecHitCollection(cluster) );
00405 }
00406
00407 std::vector<float> EcalClusterLazyTools::energyBasketFractionPhi( const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00408 {
00409 return EcalClusterTools::energyBasketFractionPhi( cluster, getEcalRecHitCollection(cluster), flagsexcl, severitiesexcl, sevLv );
00410 }
00411
00412
00413 std::vector<float> EcalClusterLazyTools::lat( const reco::BasicCluster &cluster, bool logW, float w0 )
00414 {
00415 return EcalClusterTools::lat( cluster, getEcalRecHitCollection(cluster), geometry_, logW, w0 );
00416 }
00417
00418
00419
00420
00421
00422
00423
00424 std::vector<float> EcalClusterLazyTools::covariances(const reco::BasicCluster &cluster, float w0 )
00425 {
00426 return EcalClusterTools::covariances( cluster, getEcalRecHitCollection(cluster), topology_, geometry_, w0 );
00427 }
00428
00429 std::vector<float> EcalClusterLazyTools::covariances(const reco::BasicCluster &cluster,std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv, float w0 )
00430 {
00431 return EcalClusterTools::covariances( cluster, getEcalRecHitCollection(cluster), topology_, geometry_, flagsexcl, severitiesexcl, sevLv, w0 );
00432 }
00433
00434 std::vector<float> EcalClusterLazyTools::localCovariances(const reco::BasicCluster &cluster, float w0 )
00435 {
00436 return EcalClusterTools::localCovariances( cluster, getEcalRecHitCollection(cluster), topology_, w0 );
00437 }
00438
00439 std::vector<float> EcalClusterLazyTools::localCovariances(const reco::BasicCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv, float w0 )
00440 {
00441 return EcalClusterTools::localCovariances( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv, w0 );
00442 }
00443
00444 std::vector<float> EcalClusterLazyTools::scLocalCovariances(const reco::SuperCluster &cluster, float w0 )
00445 {
00446 return EcalClusterTools::scLocalCovariances( cluster, getEcalRecHitCollection(cluster), topology_, w0 );
00447 }
00448
00449 std::vector<float> EcalClusterLazyTools::scLocalCovariances(const reco::SuperCluster &cluster, std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv, float w0 )
00450 {
00451 return EcalClusterTools::scLocalCovariances( cluster, getEcalRecHitCollection(cluster), topology_, flagsexcl, severitiesexcl, sevLv, w0 );
00452 }
00453
00454 double EcalClusterLazyTools::zernike20( const reco::BasicCluster &cluster, double R0, bool logW, float w0 )
00455 {
00456 return EcalClusterTools::zernike20( cluster, getEcalRecHitCollection(cluster), geometry_, R0, logW, w0 );
00457 }
00458
00459
00460 double EcalClusterLazyTools::zernike42( const reco::BasicCluster &cluster, double R0, bool logW, float w0 )
00461 {
00462 return EcalClusterTools::zernike42( cluster, getEcalRecHitCollection(cluster), geometry_, R0, logW, w0 );
00463 }
00464
00465 std::vector<DetId> EcalClusterLazyTools::matrixDetId( DetId id, int ixMin, int ixMax, int iyMin, int iyMax )
00466 {
00467 return EcalClusterTools::matrixDetId( topology_, id, ixMin, ixMax, iyMin, iyMax );
00468 }
00469
00470 float EcalClusterLazyTools::matrixEnergy( const reco::BasicCluster &cluster, DetId id, int ixMin, int ixMax, int iyMin, int iyMax )
00471 {
00472 return EcalClusterTools::matrixEnergy( cluster, getEcalRecHitCollection(cluster), topology_, id, ixMin, ixMax, iyMin, iyMax );
00473 }
00474
00475 float EcalClusterLazyTools::matrixEnergy( const reco::BasicCluster &cluster, DetId id, int ixMin, int ixMax, int iyMin, int iyMax,std::vector<int> flagsexcl, std::vector<int> severitiesexcl, const EcalSeverityLevelAlgo *sevLv )
00476 {
00477 return EcalClusterTools::matrixEnergy( cluster, getEcalRecHitCollection(cluster), topology_, id, ixMin, ixMax, iyMin, iyMax, flagsexcl, severitiesexcl, sevLv );
00478 }
00479
00480
00481
00482 float EcalClusterLazyTools::BasicClusterSeedTime(const reco::BasicCluster &cluster)
00483 {
00484
00485 const EcalRecHitCollection *recHits = getEcalRecHitCollection( cluster );
00486
00487 DetId id = cluster.seed();
00488 EcalRecHitCollection::const_iterator theSeedHit = recHits->find (id);
00489
00490
00491
00492
00493
00494 return (*theSeedHit).time();
00495 }
00496
00497
00498
00499 float EcalClusterLazyTools::BasicClusterTime(const reco::BasicCluster &cluster, const edm::Event &ev)
00500 {
00501
00502 std::vector<std::pair<DetId, float> > clusterComponents = (cluster).hitsAndFractions() ;
00503
00504
00505 const EcalRecHitCollection *recHits = getEcalRecHitCollection( cluster );
00506
00507
00508
00509 float weightedTsum = 0;
00510 float sumOfWeights = 0;
00511
00512 for (std::vector<std::pair<DetId, float> >::const_iterator detitr = clusterComponents.begin(); detitr != clusterComponents.end(); detitr++ )
00513 {
00514
00515 EcalRecHitCollection::const_iterator oneHit = recHits->find( (detitr -> first) ) ;
00516
00517
00518
00519 float lasercalib = 1.;
00520 lasercalib = laser->getLaserCorrection( detitr->first, ev.time());
00521
00522 EcalIntercalibConstantMap::const_iterator icalit = icalMap.find(detitr->first);
00523 EcalIntercalibConstant icalconst = 1.;
00524 if( icalit!=icalMap.end() ) {
00525 icalconst = (*icalit);
00526
00527 } else {
00528 edm::LogError("EcalClusterLazyTools") << "No intercalib const found for xtal " << (detitr->first).rawId() << "bailing out";
00529 assert(0);
00530 }
00531
00532 float adcToGeV = 1.;
00533 if ( (detitr -> first).subdetId() == EcalBarrel ) adcToGeV = float(agc->getEBValue());
00534 else if ( (detitr -> first).subdetId() == EcalEndcap ) adcToGeV = float(agc->getEEValue());
00535 float adc = 2.;
00536 if (icalconst>0 && lasercalib>0 && adcToGeV>0) adc= (*oneHit).energy()/(icalconst*lasercalib*adcToGeV);
00537
00538
00539 if( (detitr -> first).subdetId() == EcalBarrel && adc< (1.1*20) ) continue;
00540 if( (detitr -> first).subdetId() == EcalEndcap && adc< (2.2*20) ) continue;
00541
00542
00543 if(! (*oneHit).isTimeErrorValid()) continue;
00544
00545 float timeError = (*oneHit).timeError();
00546
00547
00548 if (timeError>0.6) timeError = sqrt( timeError*timeError - 0.6*0.6 + 0.15*0.15);
00549 else timeError = sqrt( timeError*timeError + 0.15*0.15);
00550
00551
00552 weightedTsum += (*oneHit).time() / (timeError*timeError);
00553 sumOfWeights += 1. / (timeError*timeError);
00554
00555 }
00556
00557
00558 if ( sumOfWeights ==0 ) return -999;
00559 else return ( weightedTsum / sumOfWeights);
00560
00561 }
00562
00563
00564
00565 float EcalClusterLazyTools::SuperClusterSeedTime(const reco::SuperCluster &cluster){
00566
00567 return BasicClusterSeedTime ( (*cluster.seed()) );
00568
00569 }
00570
00571
00572
00573 float EcalClusterLazyTools::SuperClusterTime(const reco::SuperCluster &cluster, const edm::Event &ev){
00574
00575 return BasicClusterTime ( (*cluster.seed()) , ev);
00576
00577 }