00001
00002 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00003
00004 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00005 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00006 #include "DataFormats/DetId/interface/DetId.h"
00007 #include "CondFormats/EcalObjects/interface/EcalIntercalibConstants.h"
00008 #include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h"
00009 #include "Calibration/Tools/interface/calibXMLwriter.h"
00010 #include "Calibration/Tools/interface/CalibrationCluster.h"
00011 #include "Calibration/Tools/interface/HouseholderDecomposition.h"
00012 #include "Calibration/Tools/interface/MinL3Algorithm.h"
00013 #include "Calibration/EcalCalibAlgos/interface/ElectronCalibrationUniv.h"
00014 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00015 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00016 #include "DataFormats/TrackReco/interface/Track.h"
00017 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00018 #include "DataFormats/TrackReco/interface/TrackExtraFwd.h"
00019 #include "TFile.h"
00020 #include "TH1.h"
00021 #include "TH2.h"
00022 #include "TF1.h"
00023 #include "TRandom.h"
00024
00025 #include <iostream>
00026 #include <string>
00027 #include <stdexcept>
00028 #include <vector>
00029
00030 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00031 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
00032
00033 ElectronCalibrationUniv::ElectronCalibrationUniv(const edm::ParameterSet& iConfig)
00034 {
00035
00036 rootfile_ = iConfig.getParameter<std::string>("rootfile");
00037 EBrecHitLabel_ = iConfig.getParameter< edm::InputTag > ("ebRecHitsLabel");
00038 EErecHitLabel_ = iConfig.getParameter< edm::InputTag > ("eeRecHitsLabel");
00039 electronLabel_ = iConfig.getParameter< edm::InputTag > ("electronLabel");
00040 trackLabel_ = iConfig.getParameter< edm::InputTag > ("trackLabel");
00041 calibAlgo_ = iConfig.getParameter<std::string>("CALIBRATION_ALGO");
00042 keventweight_ = iConfig.getParameter<int>("keventweight");
00043 ClusterSize_ = iConfig.getParameter<int>("Clustersize");
00044 ElePt_ = iConfig.getParameter<double>("ElePt");
00045 maxeta_ = iConfig.getParameter<int>("maxeta");
00046 mineta_ = iConfig.getParameter<int>("mineta");
00047 maxphi_ = iConfig.getParameter<int>("maxphi");
00048 minphi_ = iConfig.getParameter<int>("minphi");
00049 cut1_ = iConfig.getParameter<double>("cut1");
00050 cut2_ = iConfig.getParameter<double>("cut2");
00051 cut3_ = iConfig.getParameter<double>("cut3");
00052 elecclass_ = iConfig.getParameter<int>("elecclass");
00053 numevent_ = iConfig.getParameter<int>("numevent");
00054 miscalibfile_ = iConfig.getParameter<std::string>("miscalibfile");
00055 miscalibfileEndCap_ = iConfig.getParameter<std::string>("miscalibfileEndCap");
00056
00057 cutEPCalo1_ = iConfig.getParameter<double>("cutEPCaloMin");
00058 cutEPCalo2_ = iConfig.getParameter<double>("cutEPCaloMax");
00059 cutEPin1_ = iConfig.getParameter<double>("cutEPinMin");
00060 cutEPin2_ = iConfig.getParameter<double>("cutEPinMax");
00061 cutCalo1_ = iConfig.getParameter<double>("cutCaloMin");
00062 cutCalo2_ = iConfig.getParameter<double>("cutCaloMax");
00063
00064 cutESeed_ = iConfig.getParameter<double>("cutESeed");
00065
00066
00067 }
00068
00069
00070 ElectronCalibrationUniv::~ElectronCalibrationUniv()
00071 {
00072 }
00073
00074
00075 void ElectronCalibrationUniv::beginJob() {
00076
00077 f = new TFile(rootfile_.c_str(),"RECREATE");
00078 f->cd();
00079 EventsAfterCuts = new TH1F("EventsAfterCuts","Events After Cuts",30,0,30);
00080
00081
00082 e9 = new TH1F("e9","E9 energy", 300, 0., 150.);
00083 e25 = new TH1F("e25","E25 energy", 300, 0., 150.);
00084 scE = new TH1F("scE","SC energy", 300, 0., 150.);
00085 trP = new TH1F("trP","Trk momentum", 300, 0., 150.);
00086 EoP = new TH1F("EoP","EoP", 600, 0., 3.);
00087 EoP_all = new TH1F("EoP_all","EoP_all",600, 0., 3.);
00088
00089 calibs = new TH1F("calib","Calibration constants", 800, 0.5, 2.);
00090 calibsEndCapMinus = new TH1F("calibEndCapMinus","Calibration constants EE-", 800, 0.5, 2.);
00091 calibsEndCapPlus = new TH1F("calibEndCapPlus","Calibration constants EE+", 800, 0.5, 2.);
00092
00093 e25OverScE = new TH1F("e25OverscE","E25 / SC energy", 400, 0., 2.);
00094 E25oP = new TH1F("E25oP","E25 / P", 750, 0., 1.5);
00095
00096 Map = new TH2F("Map","Nb Events in Crystal",173 ,-86 ,86,362, 0, 361 );
00097 e9Overe25 = new TH1F("e9Overe25","E9 / E25", 400, 0., 2.);
00098 Map3Dcalib = new TH2F("3Dcalib", "3Dcalib",173 ,-86 ,86,362, 0, 361 );
00099 Map3DcalibEndCapMinus = new TH2F("3DcalibEndCapMinus", "3Dcalib EE-",100 ,0 ,100,100, 0, 100 );
00100 Map3DcalibEndCapPlus = new TH2F("3DcalibEndCapPlus", "3Dcalib EE+",100 ,0 ,100,100, 0, 100 );
00101
00102 MapCor1 = new TH2F ("MapCor1", "Correlation E25/Pcalo versus E25/Pin",100 ,0. ,5. ,100,0.,5. );
00103 MapCor2 = new TH2F ("MapCor2", "Correlation E25/Pcalo versus E/P",100 ,0. ,5. ,100,0.,5. );
00104 MapCor3 = new TH2F ("MapCor3", "Correlation E25/Pcalo versus Pout/Pin",100 ,0. ,5. ,100,0.,5. );
00105 MapCor4 = new TH2F ("MapCor4", "Correlation E25/Pcalo versus E25/highestP",100 ,0. ,5. ,100,0.,5. );
00106 MapCor5 = new TH2F ("MapCor5", "Correlation E25/Pcalo versus Pcalo/Pout",100 ,0. ,5. ,100,0.,5. );
00107 MapCor6 = new TH2F ("MapCor6", "Correlation Pout/Pin versus E25/Pin",100 ,0. ,5. ,100,0.,5. );
00108 MapCor7 = new TH2F ("MapCor7", "Correlation Pout/Pin versus Pcalo/Pout",100 ,0. ,5. ,100,0.,5. );
00109 MapCor8 = new TH2F ("MapCor8", "Correlation E25/Pin versus Pcalo/Pout",100 ,0. ,5. ,100,0.,5. );
00110 MapCor9 = new TH2F ("MapCor9", "Correlation E25/Pcalo versus Eseed/Pout",100 ,0. ,5. ,100,0.,5. );
00111 MapCor10 = new TH2F ("MapCor10", "Correlation Eseed/Pout versus Pout/Pin",100 ,0. ,5. ,100,0.,5. );
00112 MapCor11 = new TH2F ("MapCor11", "Correlation Eseed/Pout versus E25/Pin",100 ,0. ,5. ,100,0.,5. );
00113
00114
00115 E25oPvsEta = new TH2F ("E25oPvsEta", "E/P vs Eta", 173, -86, 86, 600, 0.7,1.3);
00116 E25oPvsEtaEndCapMinus = new TH2F ("E25oPvsEtaEndCapMinus", "E/P vs R EE-", 100, 0, 100, 600, 0.7,1.3);
00117 E25oPvsEtaEndCapPlus = new TH2F ("E25oPvsEtaEndCapPlus", "E/P vs R EE+", 100, 0, 100, 600, 0.7,1.3);
00118
00119 PinMinPout = new TH1F("PinMinPout","(Pin - Pout)/Pin",600,-2.0,2.0);
00120
00121 calibinter = new TH1F("calibinter", "internal calibration constants", 800 , 0.5,2.);
00122 PinOverPout= new TH1F("PinOverPout", "pinOverpout", 600,0., 3.);
00123 eSeedOverPout= new TH1F("eSeedOverPout", "eSeedOverpout ", 600, 0., 3.);
00124
00125
00126
00127 calibinterEndCapMinus = new TH1F("calibinterEndCapMinus", "internal calibration constants", 800 , 0.5,2.);
00128 calibinterEndCapPlus = new TH1F("calibinterEndCapPlus", "internal calibration constants", 800 , 0.5,2.);
00129
00130
00131
00132
00133
00134
00135 Error1 = new TH1F ("Error1","DeltaP/Pin",800 ,-1.0,1.0 );
00136 Error2 = new TH1F ("Error2","DeltaP/Pout",800 ,-1.0,1.0 );
00137 Error3 = new TH1F ("Error3","DeltaP/Pcalo",800 ,-1.0,1.0 );
00138 eSeedOverPout2= new TH1F("eSeedOverPout2", "eSeedOverpout (No Supercluster)", 600, 0., 4.);
00139 hadOverEm= new TH1F("hadOverEm", "Had/EM distribution", 600, -2., 2.);
00140
00141
00142 Map3DcalibNoCuts = new TH2F("3DcalibNoCuts", "3Dcalib (Before Cuts)",173 ,-86 ,86,362, 0, 361 );
00143 e9NoCuts = new TH1F("e9NoCuts","E9 energy (Before Cuts)",300, 0., 150.);
00144 e25NoCuts = new TH1F("e25NoCuts","E25 energy (Before Cuts)", 300, 0., 150.);
00145 scENoCuts = new TH1F("scENoCuts","SC energy (Before Cuts)", 300, 0., 150.);
00146 trPNoCuts = new TH1F("trPNoCuts","Trk momentum (Before Cuts)", 300, 0., 150.);
00147 EoPNoCuts = new TH1F("EoPNoCuts","EoP (Before Cuts)", 600, 0., 3.);
00148 calibsNoCuts = new TH1F("calibNoCuts","Calibration constants (Before Cuts)", 800, 0., 2.);
00149 e25OverScENoCuts = new TH1F("e25OverscENoCuts","E25 / SC energy (Before Cuts)", 400, 0., 2.);
00150 E25oPNoCuts = new TH1F("E25oPNoCuts","E25 / P (Before Cuts)", 750, 0., 1.5);
00151 MapEndCapMinus = new TH2F("MapEndCapMinus","Nb Events in Crystal (EndCap)",100 ,0 ,100,100, 0, 100 );
00152 MapEndCapPlus = new TH2F("MapEndCapPlus","Nb Events in Crystal (EndCap)",100 ,0 ,100,100, 0, 100 );
00153 e9Overe25NoCuts = new TH1F("e9Overe25NoCuts","E9 / E25 (Before Cuts)", 400, 0., 2.);
00154 PinOverPoutNoCuts = new TH1F("PinOverPoutNoCuts", "pinOverpout (Before Cuts)", 600,0., 3.);
00155 eSeedOverPoutNoCuts = new TH1F(" eSeedOverPoutNoCuts", "eSeedOverpout (Before Cuts) ", 600, 0., 4.);
00156 PinMinPoutNoCuts = new TH1F("PinMinPoutNoCuts","(Pin - Pout)/Pin (Before Cuts)",600,-2.0,2.0);
00157
00158
00159
00160 calibinterNoCuts = new TH1F("calibinterNoCuts", "internal calibration constants", 2000 , 0.5,2.);
00161
00162 MapCor1NoCuts = new TH2F ("MapCor1NoCuts", "Correlation E25/PatCalo versus E25/Pin (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00163 MapCor2NoCuts = new TH2F ("MapCor2NoCuts", "Correlation E25/PatCalo versus E/P (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00164 MapCor3NoCuts = new TH2F ("MapCor3NoCuts", "Correlation E25/PatCalo versus Pout/Pin (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00165 MapCor4NoCuts = new TH2F ("MapCor4NoCuts", "Correlation E25/PatCalo versus E25/highestP (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00166 MapCor5NoCuts = new TH2F ("MapCor5NoCuts", "Correlation E25/Pcalo versus Pcalo/Pout (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00167 MapCor6NoCuts = new TH2F ("MapCor6NoCuts", "Correlation Pout/Pin versus E25/Pin (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00168 MapCor7NoCuts = new TH2F ("MapCor7NoCuts", "Correlation Pout/Pin versus Pcalo/Pout (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00169 MapCor8NoCuts = new TH2F ("MapCor8NoCuts", "Correlation E25/Pin versus Pcalo/Pout (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00170 MapCor9NoCuts = new TH2F ("MapCor9NoCuts", "Correlation E25/Pcalo versus Eseed/Pout (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00171 MapCor10NoCuts = new TH2F ("MapCor10NoCuts", "Correlation Eseed/Pout versus Pout/Pin (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00172 MapCor11NoCuts = new TH2F ("MapCor11NoCuts", "Correlation Eseed/Pout versus E25/Pin (Before Cuts)",100 ,0. ,5. ,100,0.,5. );
00173
00174
00175
00176 Error1NoCuts = new TH1F ("Eror1NoCuts","DeltaP/Pin (Before Cuts)",800 ,-1.0,1.0 );
00177 Error2NoCuts = new TH1F ("Error2NoCuts","DeltaP/Pout (Before Cuts)",800 ,-1.0,1.0 );
00178 Error3NoCuts = new TH1F ("Error3NoCuts","DeltaP/Pcalo (Before Cuts)",800 ,-1.0, 1.0);
00179 eSeedOverPout2NoCuts= new TH1F("eSeedOverPout2NoCuts", "eSeedOverpout (No Supercluster, Before Cuts)", 600, 0., 4.);
00180 hadOverEmNoCuts= new TH1F("hadOverEmNoCuts", "Had/EM distribution (Before Cuts)", 600, -2., 2.);
00181
00182
00183 MapCor1ESeed = new TH2F ("MapCor1ESeed", "Correlation E25/Pcalo versus E25/Pin (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00184 MapCor2ESeed = new TH2F ("MapCor2ESeed", "Correlation E25/Pcalo versus E/P (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00185 MapCor3ESeed = new TH2F ("MapCor3ESeed", "Correlation E25/Pcalo versus Pout/Pin (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00186 MapCor4ESeed = new TH2F ("MapCor4ESeed", "Correlation E25/Pcalo versus E25/highestP (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00187 MapCor5ESeed = new TH2F ("MapCor5ESeed", "Correlation E25/Pcalo versus Pcalo/Pout (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00188 MapCor6ESeed = new TH2F ("MapCor6ESeed", "Correlation Pout/Pin versus E25/Pin (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00189 MapCor7ESeed = new TH2F ("MapCor7ESeed", "Correlation Pout/Pin versus Pcalo/Pout (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00190 MapCor8ESeed = new TH2F ("MapCor8ESeed", "Correlation E25/Pin versus Pcalo/Pout (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00191 MapCor9ESeed = new TH2F ("MapCor9ESeed", "Correlation E25/Pcalo versus Eseed/Pout (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00192 MapCor10ESeed = new TH2F ("MapCor10ESeed", "Correlation Eseed/Pout versus Pout/Pin (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00193 MapCor11ESeed = new TH2F ("MapCor11ESeed", "Correlation Eseed/Pout versus E25/Pin (after Eseed/Pout cut)",100 ,0. ,5. ,100,0.,5. );
00194
00195 eSeedOverPout2ESeed= new TH1F("eSeedOverPout2ESeed", "eSeedOverpout (No Supercluster, after Eseed/Pout cut)", 600, 0., 4.);
00196
00197 hadOverEmESeed= new TH1F("hadOverEmESeed", "Had/EM distribution (after Eseed/Pout cut)", 600, -2., 2.);
00198
00199
00200 GeneralMap = new TH2F("GeneralMap","Map without any cuts",173 ,-86 ,86,362, 0, 361 );
00201 GeneralMapEndCapMinus = new TH2F("GeneralMapEndCapMinus","Map without any cuts",100 ,0 ,100,100, 0, 100 );
00202 GeneralMapEndCapPlus = new TH2F("GeneralMapEndCapPlus","Map without any cuts",100 ,0 ,100,100, 0, 100 );
00203 GeneralMapBeforePt = new TH2F("GeneralMapBeforePt","Map without any cuts",173 ,-86 ,86,362, 0, 361 );
00204 GeneralMapEndCapMinusBeforePt = new TH2F("GeneralMapEndCapMinusBeforePt","Map without any cuts",100 ,0 ,100,100, 0, 100 );
00205 GeneralMapEndCapPlusBeforePt = new TH2F("GeneralMapEndCapPlusBeforePt","Map without any cuts",100 ,0 ,100,100, 0, 100 );
00206
00207 calibClusterSize=ClusterSize_;
00208 etaMin = int(mineta_);
00209 etaMax = int(maxeta_);
00210 phiMin = int(minphi_);
00211 phiMax = int(maxphi_);
00212 if(calibAlgo_=="L3"){
00213 MyL3Algo1 = new MinL3Algorithm(keventweight_,calibClusterSize, etaMin, etaMax, phiMin, phiMax);
00214 }else{
00215 if(calibAlgo_=="L3Univ"){
00216 UnivL3 = new MinL3AlgoUniv<DetId>(keventweight_);
00217 }else{
00218 if(calibAlgo_=="HH" || calibAlgo_=="HHReg"){
00219 MyHH = new HouseholderDecomposition(calibClusterSize, etaMin,etaMax, phiMin, phiMax);
00220 }else{
00221 std::cout<<" Name of Algorithm is not recognize "<<calibAlgo_<<" Should be either L3, HH or HHReg. Abort! "<<std::endl;
00222 }
00223 }
00224 }
00225 read_events=0;
00226 }
00227
00228
00229 void ElectronCalibrationUniv::beginRun(edm::Run const &, edm::EventSetup const& iSetup) {
00230
00231
00232
00233
00234 iSetup.get<CaloTopologyRecord>().get(theCaloTopology);
00235
00236
00237 }
00238
00239
00240
00241
00242 void
00243 ElectronCalibrationUniv::endJob() {
00244
00245
00246 f->cd();
00247 time_t start, end;
00248 time_t cpu_time_used;
00249 start = time(NULL);
00250
00251
00252 int nIterations =10;
00253 if(calibAlgo_=="L3"){
00254 solution = MyL3Algo1->iterate(EventMatrix, MaxCCeta, MaxCCphi, EnergyVector,nIterations);
00255 }else{
00256 if(calibAlgo_=="L3Univ"){
00257
00258
00259 Univsolution= UnivL3->iterate(EventMatrix, UnivEventIds, EnergyVector, nIterations);
00260
00261 }else {
00262 if(calibAlgo_=="HH"){
00263 solution = MyHH->iterate(EventMatrix, MaxCCeta, MaxCCphi,EnergyVector,1,false);
00264 }else{
00265 if(calibAlgo_=="HHReg"){
00266 solution = MyHH->runRegional(EventMatrix, MaxCCeta, MaxCCphi,EnergyVector, 2);
00267 }else{
00268 std::cout<<" Calibration not run due to problem in Algo Choice..."<<std::endl;
00269 return ;
00270 }
00271 }
00272 }
00273 }
00274 end = time(NULL);
00275 cpu_time_used = end - start;
00276
00277
00278
00279 calibXMLwriter write_calibrations;
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291 std::map<EBDetId,float> OldCoeff;
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 std::map<EEDetId,float> OldCoeffEndCap;
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 std::map<DetId,float>::const_iterator itmap;
00324 for (itmap = Univsolution.begin(); itmap != Univsolution.end(); itmap++){
00325 const DetId Id(itmap->first);
00326 if(Id.subdetId()==1){
00327 const EBDetId IChannelDetId(itmap->first);
00328 if (IChannelDetId.ieta()< mineta_){continue;}
00329 if (IChannelDetId.ieta()> maxeta_){continue;}
00330 if (IChannelDetId.iphi()< minphi_){continue;}
00331 if (IChannelDetId.iphi()> maxphi_){continue;}
00332
00333
00334
00335 Map3Dcalib->Fill(IChannelDetId.ieta(),IChannelDetId.iphi(),itmap->second) ;
00336 calibs->Fill(itmap->second);
00337
00338
00339 if (IChannelDetId.ieta()< mineta_+2){continue;}
00340 if (IChannelDetId.ieta()> maxeta_-2){continue;}
00341 if (IChannelDetId.iphi()< minphi_+2){continue;}
00342 if (IChannelDetId.iphi()> maxphi_-2){continue;}
00343 write_calibrations.writeLine(IChannelDetId,itmap->second);
00344 calibinter->Fill(itmap->second);
00345
00346
00347
00348 }else{
00349 const EEDetId IChannelDetId(itmap->first);
00350
00351
00352
00353
00354
00355
00356
00357 if(IChannelDetId.zside()<0){
00358 Map3DcalibEndCapMinus->Fill(IChannelDetId.ix(),IChannelDetId.iy(),itmap->second) ;
00359 calibsEndCapMinus->Fill(itmap->second);
00360 calibinterEndCapMinus->Fill(itmap->second);
00361
00362
00363
00364 }else{
00365 Map3DcalibEndCapPlus->Fill(IChannelDetId.ix(),IChannelDetId.iy(),itmap->second) ;
00366 calibsEndCapPlus->Fill(itmap->second);
00367 calibinterEndCapPlus->Fill(itmap->second);
00368
00369
00370
00371 }
00372 write_calibrations.writeLine(IChannelDetId,itmap->second);
00373 }
00374 }
00375 EventsAfterCuts->Write();
00376
00377
00378 e25->Write();
00379 e9->Write();
00380 scE->Write();
00381 trP->Write();
00382 EoP->Write();
00383 EoP_all->Write();
00384 calibs->Write();
00385 calibsEndCapMinus->Write();
00386 calibsEndCapPlus->Write();
00387 e9Overe25->Write();
00388 e25OverScE->Write();
00389 Map->Write();
00390 E25oP->Write();
00391
00392 PinOverPout->Write();
00393 eSeedOverPout->Write();
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406 e25NoCuts->Write();
00407 e9NoCuts->Write();
00408 scENoCuts->Write();
00409 trPNoCuts->Write();
00410 EoPNoCuts->Write();
00411 calibsNoCuts->Write();
00412 e9Overe25NoCuts->Write();
00413 e25OverScENoCuts->Write();
00414 MapEndCapMinus->Write();
00415 MapEndCapPlus->Write();
00416 E25oPNoCuts->Write();
00417 Map3Dcalib->Write();
00418 Map3DcalibEndCapMinus->Write();
00419 Map3DcalibEndCapPlus->Write();
00420 Map3DcalibNoCuts->Write();
00421 calibinter->Write();
00422 calibinterEndCapMinus->Write();
00423 calibinterEndCapPlus->Write();
00424 calibinterNoCuts->Write();
00425 PinOverPoutNoCuts->Write();
00426 eSeedOverPoutNoCuts->Write();
00427
00428 GeneralMap->Write();
00429 GeneralMapEndCapMinus->Write();
00430 GeneralMapEndCapPlus->Write();
00431 GeneralMapBeforePt->Write();
00432 GeneralMapEndCapMinusBeforePt->Write();
00433 GeneralMapEndCapPlusBeforePt->Write();
00434
00435 MapCor1->Write();
00436 MapCor2->Write();
00437 MapCor3->Write();
00438 MapCor4->Write();
00439 MapCor5->Write();
00440 MapCor6->Write();
00441 MapCor7->Write();
00442 MapCor8->Write();
00443 MapCor9->Write();
00444 MapCor10->Write();
00445 MapCor11->Write();
00446
00447
00448 MapCor1NoCuts->Write();
00449 MapCor2NoCuts->Write();
00450 MapCor3NoCuts->Write();
00451 MapCor4NoCuts->Write();
00452 MapCor5NoCuts->Write();
00453 MapCor6NoCuts->Write();
00454 MapCor7NoCuts->Write();
00455 MapCor8NoCuts->Write();
00456 MapCor9NoCuts->Write();
00457 MapCor10NoCuts->Write();
00458 MapCor11NoCuts->Write();
00459
00460
00461
00462 MapCor1ESeed->Write();
00463 MapCor2ESeed->Write();
00464 MapCor3ESeed->Write();
00465 MapCor4ESeed->Write();
00466 MapCor5ESeed->Write();
00467 MapCor6ESeed->Write();
00468 MapCor7ESeed->Write();
00469 MapCor8ESeed->Write();
00470 MapCor9ESeed->Write();
00471 MapCor10ESeed->Write();
00472 MapCor11ESeed->Write();
00473
00474 E25oPvsEta->Write();
00475 E25oPvsEtaEndCapMinus->Write();
00476 E25oPvsEtaEndCapPlus->Write();
00477
00478 PinMinPout->Write();
00479 PinMinPoutNoCuts->Write();
00480
00481 Error1->Write();
00482 Error2->Write();
00483 Error3->Write();
00484 Error1NoCuts->Write();
00485 Error2NoCuts->Write();
00486 Error3NoCuts->Write();
00487
00488 eSeedOverPout2->Write();
00489 eSeedOverPout2NoCuts->Write();
00490 eSeedOverPout2ESeed->Write();
00491
00492 hadOverEm->Write();
00493 hadOverEmNoCuts->Write();
00494 hadOverEmESeed->Write();
00495
00496 f->Write();
00497
00498 f->Close();
00499
00500
00501
00502
00504
00505 std::cout << " " << std::endl;
00506 std::cout << "************* STATISTICS **************" << std::endl;
00507 std::cout << " Events Studied "<<read_events << std::endl;
00508 std::cout << "Timing info:" << std::endl;
00509 std::cout << "CPU time usage -- calibrating: " << cpu_time_used << " sec." << std::endl;
00510
00512 }
00513
00514
00515 DetId ElectronCalibrationUniv::findMaxHit(const std::vector<DetId> & v1,const EBRecHitCollection *EBhits,const EERecHitCollection *EEhits) {
00516
00517
00518 double currEnergy = 0.;
00519 DetId maxHit;
00520
00521 for( std::vector<DetId>::const_iterator idsIt = v1.begin(); idsIt != v1.end(); ++idsIt) {
00522 if(idsIt->subdetId()==1){
00523 EBRecHitCollection::const_iterator itrechit;
00524 itrechit = EBhits->find(*idsIt);
00525 if(itrechit==EBhits->end()){
00526 std::cout << "ElectronCalibration::findMaxHit: rechit not found! " << (EBDetId)(*idsIt)<<std::endl;
00527 continue;
00528 }
00529 if(itrechit->energy() > currEnergy) {
00530 currEnergy=itrechit->energy();
00531 maxHit= *idsIt;
00532 }
00533 }else{
00534 EERecHitCollection::const_iterator itrechit;
00535 itrechit = EEhits->find(*idsIt);
00536 if(itrechit==EEhits->end()){
00537 std::cout << "ElectronCalibration::findMaxHit: rechit not found! idsIt = " << (EEDetId)(*idsIt)<< std::endl;
00538 continue;
00539 }
00540
00541 if(itrechit->energy() > currEnergy) {
00542 currEnergy=itrechit->energy();
00543 maxHit= *idsIt;
00544 }
00545 }
00546 }
00547
00548 return maxHit;
00549
00550 }
00551
00552 bool ElectronCalibrationUniv::TestEEvalidDetId(int crystal_ix, int crystal_iy, int iz) {
00553
00554 bool valid = false;
00555 if (crystal_ix < 1 || crystal_ix > 100 ||
00556 crystal_iy < 1 || crystal_iy > 100 || abs(iz) != 1 )
00557 { return valid; }
00558 if ( (crystal_ix >= 1 && crystal_ix <= 3 && (crystal_iy <= 40 || crystal_iy > 60) ) ||
00559 (crystal_ix >= 4 && crystal_ix <= 5 && (crystal_iy <= 35 || crystal_iy > 65) ) ||
00560 (crystal_ix >= 6 && crystal_ix <= 8 && (crystal_iy <= 25 || crystal_iy > 75) ) ||
00561 (crystal_ix >= 9 && crystal_ix <= 13 && (crystal_iy <= 20 || crystal_iy > 80) ) ||
00562 (crystal_ix >= 14 && crystal_ix <= 15 && (crystal_iy <= 15 || crystal_iy > 85) ) ||
00563 (crystal_ix >= 16 && crystal_ix <= 20 && (crystal_iy <= 13 || crystal_iy > 87) ) ||
00564 (crystal_ix >= 21 && crystal_ix <= 25 && (crystal_iy <= 8 || crystal_iy > 92) ) ||
00565 (crystal_ix >= 26 && crystal_ix <= 35 && (crystal_iy <= 5 || crystal_iy > 95) ) ||
00566 (crystal_ix >= 36 && crystal_ix <= 39 && (crystal_iy <= 3 || crystal_iy > 97) ) ||
00567 (crystal_ix >= 98 && crystal_ix <= 100 && (crystal_iy <= 40 || crystal_iy > 60) ) ||
00568 (crystal_ix >= 96 && crystal_ix <= 97 && (crystal_iy <= 35 || crystal_iy > 65) ) ||
00569 (crystal_ix >= 93 && crystal_ix <= 95 && (crystal_iy <= 25 || crystal_iy > 75) ) ||
00570 (crystal_ix >= 88 && crystal_ix <= 92 && (crystal_iy <= 20 || crystal_iy > 80) ) ||
00571 (crystal_ix >= 86 && crystal_ix <= 87 && (crystal_iy <= 15 || crystal_iy > 85) ) ||
00572 (crystal_ix >= 81 && crystal_ix <= 85 && (crystal_iy <= 13 || crystal_iy > 87) ) ||
00573 (crystal_ix >= 76 && crystal_ix <= 80 && (crystal_iy <= 8 || crystal_iy > 92) ) ||
00574 (crystal_ix >= 66 && crystal_ix <= 75 && (crystal_iy <= 5 || crystal_iy > 95) ) ||
00575 (crystal_ix >= 62 && crystal_ix <= 65 && (crystal_iy <= 3 || crystal_iy > 97) ) ||
00576 ( (crystal_ix == 40 || crystal_ix == 61) && ( (crystal_iy >= 46 && crystal_iy <= 55 ) || crystal_iy <= 3 || crystal_iy > 97 )) ||
00577 ( (crystal_ix == 41 || crystal_ix == 60) && crystal_iy >= 44 && crystal_iy <= 57 ) ||
00578 ( (crystal_ix == 42 || crystal_ix == 59) && crystal_iy >= 43 && crystal_iy <= 58 ) ||
00579 ( (crystal_ix == 43 || crystal_ix == 58) && crystal_iy >= 42 && crystal_iy <= 59 ) ||
00580 ( (crystal_ix == 44 || crystal_ix == 45 || crystal_ix == 57 || crystal_ix == 56) && crystal_iy >= 41 && crystal_iy <= 60 ) ||
00581 ( crystal_ix >= 46 && crystal_ix <= 55 && crystal_iy >= 40 && crystal_iy <= 61 )
00582 )
00583 { return valid; }
00584 valid = true;
00585 return valid;
00586 }
00587
00588
00589
00590 void
00591 ElectronCalibrationUniv::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00592 {
00593
00594 using namespace edm;
00595
00596
00597 edm::Handle<EBRecHitCollection> EBphits;
00598 iEvent.getByLabel( EBrecHitLabel_, EBphits);
00599 if (!EBphits.isValid()) {
00600 std::cerr << "Error! can't get the product EBRecHitCollection: " << std::endl;
00601 }
00602 const EBRecHitCollection* EBhits = EBphits.product();
00603
00604
00605 edm::Handle<EERecHitCollection> EEphits;
00606
00607 iEvent.getByLabel( EErecHitLabel_, EEphits);
00608 if (!EEphits.isValid()) {
00609 std::cerr << "Error! can't get the product EERecHitCollection: " << std::endl;
00610 }
00611 const EERecHitCollection* EEhits = EEphits.product();
00612
00613
00614 edm::Handle<reco::GsfElectronCollection> pElectrons;
00615 iEvent.getByLabel(electronLabel_, pElectrons);
00616 if (!pElectrons.isValid()) {
00617 std::cerr << "Error! can't get the product ElectronCollection: " << std::endl;
00618 }
00619 const reco::GsfElectronCollection* electronCollection = pElectrons.product();
00620 read_events++;
00621 if(read_events%1000 ==0)std::cout << "read_events = " << read_events << std::endl;
00622
00623 EventsAfterCuts->Fill(1);
00624 if (!EBhits || !EEhits)return;
00625 EventsAfterCuts->Fill(2);
00626 if (EBhits->size() == 0 && EEhits->size() == 0 ) return ;
00627 EventsAfterCuts->Fill(3);
00628 if (!electronCollection) return ;
00629 EventsAfterCuts->Fill(4);
00630 if (electronCollection->size() == 0) return;
00631
00632
00633
00637
00638 reco::GsfElectronCollection::const_iterator eleIt = electronCollection->begin();
00639
00640 reco::GsfElectron highPtElectron;
00641
00642 float highestElePt=0.;
00643 bool found=false;
00644 for (eleIt=electronCollection->begin(); eleIt!=electronCollection->end(); eleIt++) {
00645
00646 if(fabs(eleIt->eta())>2.4) continue;
00647
00648
00649 if(eleIt->pt()>highestElePt) {
00650 highestElePt=eleIt->pt();
00651 highPtElectron = *eleIt;
00652 found =true;
00653
00654 }
00655
00656 }
00657 EventsAfterCuts->Fill(5);
00658 if(!found) return ;
00659
00660 const reco::SuperCluster & sc = *(highPtElectron.superCluster()) ;
00661
00662
00663
00664 std::vector<DetId> v1;
00665
00666 for (std::vector<std::pair<DetId,float> >::const_iterator idsIt = sc.hitsAndFractions().begin();
00667 idsIt != sc.hitsAndFractions().end ();++idsIt)
00668 {v1.push_back(idsIt->first);
00669 }
00670
00671 DetId maxHitId;
00672
00673 maxHitId = findMaxHit(v1,(EBhits),(EEhits));
00674
00675
00676 EventsAfterCuts->Fill(6);
00677 if(maxHitId.null()){std::cout<<" Null "<<std::endl; return ;}
00678
00679 int maxCC_Eta = 0;
00680 int maxCC_Phi = 0;
00681 int Zside =0 ;
00682 if(maxHitId.subdetId()!=1) {
00683 maxCC_Eta = ((EEDetId)maxHitId).ix();
00684 maxCC_Phi = ((EEDetId)maxHitId).iy();
00685 Zside = ((EEDetId)maxHitId).zside();
00686
00687 }else{
00688 maxCC_Eta = ((EBDetId)maxHitId).ieta();
00689 maxCC_Phi = ((EBDetId)maxHitId).iphi();
00690 }
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 std::vector<float> energy;
00705 float energy3x3=0.;
00706 float energy5x5=0.;
00707
00708 int ClusterSize = ClusterSize_;
00709
00710 const CaloSubdetectorTopology* topology=theCaloTopology->getSubdetectorTopology(DetId::Ecal,maxHitId.subdetId());
00711 std::vector<DetId> NxNaroundMax = topology->getWindow(maxHitId,ClusterSize,ClusterSize);
00712
00713 std::vector<DetId> S9aroundMax = topology->getWindow(maxHitId,3,3);
00714
00715 EventsAfterCuts->Fill(7);
00716 if((int)NxNaroundMax.size()!=ClusterSize*ClusterSize)return;
00717 EventsAfterCuts->Fill(8);
00718 if(S9aroundMax.size()!=9)return;
00719
00720
00721
00722 EventsAfterCuts->Fill(9);
00723 for (int icry=0;icry<ClusterSize*ClusterSize;icry++){
00724 if (NxNaroundMax[icry].subdetId() == EcalBarrel) {
00725 EBRecHitCollection::const_iterator itrechit;
00726 itrechit = EBhits->find(NxNaroundMax[icry]);
00727 if(itrechit==EBhits->end()){
00728
00729 energy.push_back(0.);
00730 energy5x5 += 0.;
00731 continue;
00732 }
00733
00734 if (std::isnan(itrechit->energy())){std::cout<<" nan energy "<<std::endl; return;}
00735 energy.push_back(itrechit->energy());
00736 energy5x5 += itrechit->energy();
00737
00738
00739 for (int tt=0;tt<9;tt++){
00740 if(NxNaroundMax[icry]==S9aroundMax[tt])energy3x3+=itrechit->energy();
00741 }
00742 }else{
00743 EERecHitCollection::const_iterator itrechit;
00744
00745 itrechit = EEhits->find(NxNaroundMax[icry]);
00746
00747 if(itrechit==EEhits->end()){
00748
00749
00750 energy.push_back(0.);
00751 energy5x5 += 0.;
00752 continue;
00753 }
00754
00755 if (std::isnan(itrechit->energy())){std::cout<<" nan energy "<<std::endl; return;}
00756 energy.push_back(itrechit->energy());
00757 energy5x5 += itrechit->energy();
00758
00759
00760 for (int tt=0;tt<9;tt++){
00761 if(NxNaroundMax[icry]==S9aroundMax[tt])energy3x3+=itrechit->energy();
00762 }
00763 }
00764 }
00765
00766 EventsAfterCuts->Fill(10);
00767
00768
00769 if((int)energy.size()!=ClusterSize*ClusterSize) return ;
00770
00771 if(maxHitId.subdetId() == EcalBarrel){
00772 GeneralMapBeforePt->Fill(maxCC_Eta,maxCC_Phi);
00773 }else{
00774 if(Zside<0){
00775 GeneralMapEndCapMinusBeforePt->Fill(maxCC_Eta,maxCC_Phi);
00776 }else{
00777 GeneralMapEndCapPlusBeforePt->Fill(maxCC_Eta,maxCC_Phi);
00778 }
00779 }
00780
00781 EventsAfterCuts->Fill(11);
00782 if(highestElePt<ElePt_)return ;
00783
00784 if(maxHitId.subdetId() == EcalBarrel){
00785 GeneralMap->Fill(maxCC_Eta,maxCC_Phi);
00786 }else{
00787 if(Zside<0){
00788 GeneralMapEndCapMinus->Fill(maxCC_Eta,maxCC_Phi);
00789 }else{
00790 GeneralMapEndCapPlus->Fill(maxCC_Eta,maxCC_Phi);
00791 }
00792 }
00793
00794 EventsAfterCuts->Fill(12);
00795 if(highPtElectron.classification()!=elecclass_ && elecclass_!= -1 ) return;
00796
00797 float Ptrack_in=sqrt( pow(highPtElectron.trackMomentumAtVtx().X(),2) +pow(highPtElectron.trackMomentumAtVtx().Y(),2) + pow(highPtElectron.trackMomentumAtVtx().Z(),2) );
00798
00799 float UncorrectedPatCalo = sqrt(pow(highPtElectron.trackMomentumAtCalo().X(),2)+pow(highPtElectron.trackMomentumAtCalo().Y(),2)+pow(highPtElectron.trackMomentumAtCalo().Z(),2));
00800
00801 float Ptrack_out = sqrt( pow(highPtElectron.trackMomentumOut().X(),2)+ pow(highPtElectron.trackMomentumOut().Y(),2)+ pow(highPtElectron.trackMomentumOut().Z(),2) );
00802
00803 e9NoCuts->Fill(energy3x3);
00804 e25NoCuts->Fill(energy5x5);
00805 e9Overe25NoCuts->Fill(energy3x3/energy5x5);
00806 scENoCuts->Fill(sc.energy());
00807
00808 trPNoCuts->Fill(UncorrectedPatCalo);
00809
00810 EoPNoCuts->Fill(highPtElectron.eSuperClusterOverP());
00811 e25OverScENoCuts->Fill(energy5x5/sc.energy());
00812
00813 E25oPNoCuts->Fill(energy5x5/UncorrectedPatCalo);
00814
00815 PinOverPoutNoCuts->Fill( sqrt( pow(highPtElectron.trackMomentumAtVtx().X(),2) +pow(highPtElectron.trackMomentumAtVtx().Y(),2) + pow(highPtElectron.trackMomentumAtVtx().Z(),2) )/sqrt( pow(highPtElectron.trackMomentumOut().X(),2)+ pow(highPtElectron.trackMomentumOut().Y(),2)+ pow(highPtElectron.trackMomentumOut().Z(),2) ) );
00816 eSeedOverPoutNoCuts->Fill(highPtElectron.eSuperClusterOverP());
00817
00818 MapCor1NoCuts->Fill(energy5x5/UncorrectedPatCalo,energy5x5/Ptrack_in);
00819 MapCor2NoCuts->Fill(energy5x5/UncorrectedPatCalo,highPtElectron.eSuperClusterOverP());
00820 MapCor3NoCuts->Fill(energy5x5/UncorrectedPatCalo,Ptrack_out/Ptrack_in);
00821 MapCor4NoCuts->Fill(energy5x5/UncorrectedPatCalo,energy5x5/highPtElectron.p());
00822 MapCor5NoCuts->Fill(energy5x5/UncorrectedPatCalo,UncorrectedPatCalo/Ptrack_out);
00823 MapCor6NoCuts->Fill(Ptrack_out/Ptrack_in,energy5x5/Ptrack_in);
00824 MapCor7NoCuts->Fill(Ptrack_out/Ptrack_in,UncorrectedPatCalo/Ptrack_out);
00825 MapCor8NoCuts->Fill(energy5x5/Ptrack_in,UncorrectedPatCalo/Ptrack_out);
00826 MapCor9NoCuts->Fill(energy5x5/UncorrectedPatCalo,highPtElectron.eSeedClusterOverPout());
00827 MapCor10NoCuts->Fill(highPtElectron.eSeedClusterOverPout(),Ptrack_out/Ptrack_in);
00828 MapCor11NoCuts->Fill(highPtElectron.eSeedClusterOverPout(),energy5x5/Ptrack_in);
00829
00830 PinMinPoutNoCuts->Fill((Ptrack_in-Ptrack_out)/Ptrack_in);
00831
00832 Error1NoCuts-> Fill(highPtElectron.trackMomentumError()/Ptrack_in);
00833 Error2NoCuts->Fill(highPtElectron.trackMomentumError()/Ptrack_out);
00834 Error3NoCuts->Fill(highPtElectron.trackMomentumError()/UncorrectedPatCalo);
00835 eSeedOverPout2NoCuts->Fill(highPtElectron.eSeedClusterOverPout());
00836
00837 hadOverEmNoCuts->Fill(highPtElectron.hadronicOverEm());
00838
00839
00840
00841 if((energy3x3/energy5x5)<cut1_)return ;
00842 if((Ptrack_out/Ptrack_in)< cut2_ || (Ptrack_out/Ptrack_in)> cut3_ )return;
00843 if((energy5x5/Ptrack_in)< cutEPin1_ || (energy5x5/Ptrack_in)> cutEPin2_ )return;
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916 if(maxHitId.subdetId() == EcalBarrel){
00917 E25oPvsEta->Fill(maxCC_Eta,energy5x5/UncorrectedPatCalo);
00918 }else{
00919 float Radius = sqrt((maxCC_Eta)*(maxCC_Eta) + (maxCC_Phi)*(maxCC_Phi));
00920 if(Zside<0){
00921 E25oPvsEtaEndCapMinus->Fill(Radius,energy5x5/UncorrectedPatCalo);
00922 }else{
00923 E25oPvsEtaEndCapPlus->Fill(Radius,energy5x5/UncorrectedPatCalo);
00924 }
00925 }
00926 e9->Fill(energy3x3);
00927 e25->Fill(energy5x5);
00928 e9Overe25->Fill(energy3x3/energy5x5);
00929 scE->Fill(sc.energy());
00930 trP->Fill(UncorrectedPatCalo);
00931
00932 EoP->Fill(highPtElectron.eSuperClusterOverP());
00933 e25OverScE->Fill(energy5x5/sc.energy());
00934
00935 E25oP->Fill(energy5x5/UncorrectedPatCalo);
00936
00937 if(maxHitId.subdetId() == EcalBarrel){
00938 Map->Fill(maxCC_Eta,maxCC_Phi);
00939 }else{
00940 if(Zside<0){
00941 MapEndCapMinus->Fill(maxCC_Eta,maxCC_Phi);
00942 }else{
00943 MapEndCapPlus->Fill(maxCC_Eta,maxCC_Phi);
00944 }
00945 }
00946
00947
00948 PinOverPout->Fill( sqrt( pow(highPtElectron.trackMomentumAtVtx().X(),2) +pow(highPtElectron.trackMomentumAtVtx().Y(),2) + pow(highPtElectron.trackMomentumAtVtx().Z(),2) )/sqrt( pow(highPtElectron.trackMomentumOut().X(),2)+ pow(highPtElectron.trackMomentumOut().Y(),2)+ pow(highPtElectron.trackMomentumOut().Z(),2) ) );
00949 eSeedOverPout->Fill(highPtElectron.eSuperClusterOverP());
00950
00951 MapCor1->Fill(energy5x5/UncorrectedPatCalo,energy5x5/Ptrack_in);
00952 MapCor2->Fill(energy5x5/UncorrectedPatCalo,highPtElectron.eSuperClusterOverP());
00953 MapCor3->Fill(energy5x5/UncorrectedPatCalo,Ptrack_out/Ptrack_in);
00954 MapCor4->Fill(energy5x5/UncorrectedPatCalo,energy5x5/highPtElectron.p());
00955 MapCor5->Fill(energy5x5/UncorrectedPatCalo,UncorrectedPatCalo/Ptrack_out);
00956 MapCor6->Fill(Ptrack_out/Ptrack_in,energy5x5/Ptrack_in);
00957 MapCor7->Fill(Ptrack_out/Ptrack_in,UncorrectedPatCalo/Ptrack_out);
00958 MapCor8->Fill(energy5x5/Ptrack_in,UncorrectedPatCalo/Ptrack_out);
00959 MapCor9->Fill(energy5x5/UncorrectedPatCalo,highPtElectron.eSeedClusterOverPout());
00960 MapCor10->Fill(highPtElectron.eSeedClusterOverPout(),Ptrack_out/Ptrack_in);
00961 MapCor11->Fill(highPtElectron.eSeedClusterOverPout(),energy5x5/Ptrack_in);
00962
00963 PinMinPout->Fill((Ptrack_in-Ptrack_out)/Ptrack_in);
00964
00965 Error1-> Fill(highPtElectron.trackMomentumError()/Ptrack_in);
00966 Error2->Fill(highPtElectron.trackMomentumError()/Ptrack_out);
00967 Error3->Fill(highPtElectron.trackMomentumError()/UncorrectedPatCalo);
00968
00969 eSeedOverPout2->Fill(highPtElectron.eSeedClusterOverPout());
00970 hadOverEm->Fill(highPtElectron.hadronicOverEm());
00971
00972
00973 UnivEventIds.push_back(NxNaroundMax);
00974 EventMatrix.push_back(energy);
00975 EnergyVector.push_back(UncorrectedPatCalo);
00976
00977 EventsAfterCuts->Fill(14);
00978
00979 if(!highPtElectron.ecalDrivenSeed())EventsAfterCuts->Fill(15);
00980
00981
00982 return;
00983 }
00984
00985 DEFINE_FWK_MODULE(ElectronCalibrationUniv);