00001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00002 #include "FWCore/ServiceRegistry/interface/Service.h"
00003 #include "FWCore/Framework/interface/MakerMacros.h"
00004
00005 #include "Validation/HcalDigis/interface/HcalDigiTester.h"
00006 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00007 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
00008 #include "DataFormats/HcalDetId/interface/HcalElectronicsId.h"
00009 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
00010 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00011 #include "DataFormats/HcalDigi/interface/HcalQIESample.h"
00012
00013 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00014 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00015 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
00016 #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h"
00017
00018 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00019 #include "CalibFormats/HcalObjects/interface/HcalCoderDb.h"
00020 #include "CalibFormats/HcalObjects/interface/HcalCalibrations.h"
00021
00022 #include "DQMServices/Core/interface/DQMStore.h"
00023
00024 #include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
00025 #include "DataFormats/HcalDigi/interface/HFDataFrame.h"
00026 #include "DataFormats/HcalDigi/interface/HODataFrame.h"
00027 #include <vector>
00028 #include <utility>
00029 #include <ostream>
00030 #include <string>
00031 #include <algorithm>
00032 #include <cmath>
00033
00034 #include "CondFormats/HcalObjects/interface/HcalGain.h"
00035 #include "CondFormats/HcalObjects/interface/HcalGainWidth.h"
00036 #include "CondFormats/HcalObjects/interface/HcalPedestal.h"
00037 #include "CondFormats/HcalObjects/interface/HcalPedestalWidth.h"
00038
00039 template<class Digi>
00040
00041 void HcalDigiTester::reco(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
00042
00043
00044 typename edm::Handle<edm::SortedCollection<Digi> > digiCollection;
00045 typename edm::SortedCollection<Digi>::const_iterator digiItr;
00046
00047
00048 const HcalQIEShape* shape = conditions->getHcalShape();
00049 HcalCalibrations calibrations;
00050 CaloSamples tool;
00051
00052
00053 iEvent.getByLabel (inputTag_, digiCollection);
00054
00055 int subdet = 0;
00056 if (hcalselector_ == "HB" ) subdet = 1;
00057 if (hcalselector_ == "HE" ) subdet = 2;
00058 if (hcalselector_ == "HO" ) subdet = 3;
00059 if (hcalselector_ == "HF" ) subdet = 4;
00060
00061 if(subdet == 1) nevent1++;
00062 if(subdet == 2) nevent2++;
00063 if(subdet == 3) nevent3++;
00064 if(subdet == 4) nevent4++;
00065
00066 int zsign = 0;
00067 if (zside_ == "+") zsign = 1;
00068 if (zside_ == "-") zsign = -1;
00069
00070 int ndigis = 0;
00071
00072 double ampl1_c = 0.;
00073 double ampl2_c = 0.;
00074 double ampl3_c = 0.;
00075 double ampl4_c = 0.;
00076 double ampl_c = 0.;
00077
00078
00079 int seedSimHit = 0;
00080
00081
00082
00083
00084 int ieta_Sim = 9999;
00085 int iphi_Sim = 9999;
00086 double emax_Sim = -9999.;
00087
00088
00089
00090 if( mc_ == "yes") {
00091 edm::Handle<edm::PCaloHitContainer> hcalHits ;
00092 iEvent.getByLabel("g4SimHits","HcalHits",hcalHits);
00093 const edm::PCaloHitContainer * simhitResult = hcalHits.product () ;
00094
00095
00096 if ( subdet != 0 && noise_ == 0) {
00097
00098 for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin (); simhits != simhitResult->end () ; ++simhits) {
00099
00100 HcalDetId cell(simhits->id());
00101 double en = simhits->energy();
00102 int sub = cell.subdet();
00103 int ieta = cell.ieta();
00104 if(ieta > 0) ieta--;
00105 int iphi = cell.iphi()-1;
00106
00107
00108 if(en > emax_Sim && sub == subdet) {
00109 emax_Sim = en;
00110 ieta_Sim = ieta;
00111 iphi_Sim = iphi;
00112
00113 if (mode_ == "multi" &&
00114 ((sub == 4 && en < 100. && en > 1.)
00115 || ((sub !=4) && en < 1. && en > 0.02)))
00116 {
00117 seedSimHit = 1;
00118 break;
00119 }
00120 }
00121
00122 }
00123
00124
00125
00126 if(mode_ != "multi" && emax_Sim > 0.) seedSimHit = 1;
00127 }
00128
00129 }
00130
00131
00132 int Ndig = 0;
00133
00134
00135
00136
00137
00138
00139
00140 for (digiItr=digiCollection->begin();digiItr!=digiCollection->end();digiItr++) {
00141
00142 HcalDetId cell(digiItr->id());
00143 int depth = cell.depth();
00144 int iphi = cell.iphi()-1;
00145 int ieta = cell.ieta();
00146 if(ieta > 0) ieta--;
00147 int sub = cell.subdet();
00148
00149
00150
00151 double ampl = 0.;
00152 double ampl1 = 0.;
00153 double ampl2 = 0.;
00154 double ampl3 = 0.;
00155 double ampl4 = 0.;
00156
00157
00158 if ( ((nevent1 == 1 && subdet == 1) ||
00159 (nevent2 == 1 && subdet == 2) ||
00160 (nevent3 == 1 && subdet == 3) ||
00161 (nevent4 == 1 && subdet == 4)) && noise_ == 1 && sub == subdet) {
00162
00163 HcalGenericDetId hcalGenDetId(digiItr->id());
00164 const HcalPedestal* pedestal = conditions->getPedestal(hcalGenDetId);
00165 const HcalGain* gain = conditions->getGain(hcalGenDetId);
00166 const HcalGainWidth* gainWidth =
00167 conditions->getGainWidth(hcalGenDetId);
00168 const HcalPedestalWidth* pedWidth =
00169 conditions-> getPedestalWidth(hcalGenDetId);
00170
00171 double gainValue0 = gain->getValue(0);
00172 double gainValue1 = gain->getValue(1);
00173 double gainValue2 = gain->getValue(2);
00174 double gainValue3 = gain->getValue(3);
00175
00176 double gainWidthValue0 = gainWidth->getValue(0);
00177 double gainWidthValue1 = gainWidth->getValue(1);
00178 double gainWidthValue2 = gainWidth->getValue(2);
00179 double gainWidthValue3 = gainWidth->getValue(3);
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192 double pedValue0 = pedestal->getValue(0);
00193 double pedValue1 = pedestal->getValue(1);
00194 double pedValue2 = pedestal->getValue(2);
00195 double pedValue3 = pedestal->getValue(3);
00196
00197 double pedWidth0 = pedWidth->getWidth(0);
00198 double pedWidth1 = pedWidth->getWidth(1);
00199 double pedWidth2 = pedWidth->getWidth(2);
00200 double pedWidth3 = pedWidth->getWidth(3);
00201
00202 if (depth == 1) {
00203
00204
00205
00206 monitor()->fillmeGain0Depth1(gainValue0);
00207 monitor()->fillmeGain1Depth1(gainValue1);
00208 monitor()->fillmeGain2Depth1(gainValue2);
00209 monitor()->fillmeGain3Depth1(gainValue3);
00210
00211 monitor()->fillmeGainWidth0Depth1(gainWidthValue0);
00212 monitor()->fillmeGainWidth1Depth1(gainWidthValue1);
00213 monitor()->fillmeGainWidth2Depth1(gainWidthValue2);
00214 monitor()->fillmeGainWidth3Depth1(gainWidthValue3);
00215
00216 monitor()->fillmePed0Depth1(pedValue0);
00217 monitor()->fillmePed1Depth1(pedValue1);
00218 monitor()->fillmePed2Depth1(pedValue2);
00219 monitor()->fillmePed3Depth1(pedValue3);
00220
00221 monitor()->fillmePedWidth0Depth1(pedWidth0);
00222 monitor()->fillmePedWidth1Depth1(pedWidth1);
00223 monitor()->fillmePedWidth2Depth1(pedWidth2);
00224 monitor()->fillmePedWidth3Depth1(pedWidth3);
00225
00226 monitor()->fillmeGainMap1 (double(ieta), double(iphi), gainValue0);
00227 monitor()->fillmePwidthMap1(double(ieta), double(iphi), pedWidth0) ;
00228 }
00229
00230 if (depth == 2) {
00231
00232
00233
00234 monitor()->fillmeGain0Depth2(gainValue0);
00235 monitor()->fillmeGain1Depth2(gainValue1);
00236 monitor()->fillmeGain2Depth2(gainValue2);
00237 monitor()->fillmeGain3Depth2(gainValue3);
00238
00239 monitor()->fillmeGainWidth0Depth2(gainWidthValue0);
00240 monitor()->fillmeGainWidth1Depth2(gainWidthValue1);
00241 monitor()->fillmeGainWidth2Depth2(gainWidthValue2);
00242 monitor()->fillmeGainWidth3Depth2(gainWidthValue3);
00243
00244 monitor()->fillmePed0Depth2(pedValue0);
00245 monitor()->fillmePed1Depth2(pedValue1);
00246 monitor()->fillmePed2Depth2(pedValue2);
00247 monitor()->fillmePed3Depth2(pedValue3);
00248
00249 monitor()->fillmePedWidth0Depth2(pedWidth0);
00250 monitor()->fillmePedWidth1Depth2(pedWidth1);
00251 monitor()->fillmePedWidth2Depth2(pedWidth2);
00252 monitor()->fillmePedWidth3Depth2(pedWidth3);
00253
00254 monitor()->fillmeGainMap2 (double(ieta), double(iphi), gainValue0);
00255 monitor()->fillmePwidthMap2(double(ieta), double(iphi), pedWidth0) ;
00256 }
00257
00258 if (depth == 3) {
00259
00260
00261
00262 monitor()->fillmeGain0Depth3(gainValue0);
00263 monitor()->fillmeGain1Depth3(gainValue1);
00264 monitor()->fillmeGain2Depth3(gainValue2);
00265 monitor()->fillmeGain3Depth3(gainValue3);
00266
00267 monitor()->fillmeGainWidth0Depth3(gainWidthValue0);
00268 monitor()->fillmeGainWidth1Depth3(gainWidthValue1);
00269 monitor()->fillmeGainWidth2Depth3(gainWidthValue2);
00270 monitor()->fillmeGainWidth3Depth3(gainWidthValue3);
00271
00272 monitor()->fillmePed0Depth3(pedValue0);
00273 monitor()->fillmePed1Depth3(pedValue1);
00274 monitor()->fillmePed2Depth3(pedValue2);
00275 monitor()->fillmePed3Depth3(pedValue3);
00276
00277 monitor()->fillmePedWidth0Depth3(pedWidth0);
00278 monitor()->fillmePedWidth1Depth3(pedWidth1);
00279 monitor()->fillmePedWidth2Depth3(pedWidth2);
00280 monitor()->fillmePedWidth3Depth3(pedWidth3);
00281
00282 monitor()->fillmeGainMap3 (double(ieta), double(iphi), gainValue0);
00283 monitor()->fillmePwidthMap3(double(ieta), double(iphi), pedWidth0) ;
00284 }
00285
00286 if (depth == 4) {
00287
00288
00289
00290 monitor()->fillmeGain0Depth4(gainValue0);
00291 monitor()->fillmeGain1Depth4(gainValue1);
00292 monitor()->fillmeGain2Depth4(gainValue2);
00293 monitor()->fillmeGain3Depth4(gainValue3);
00294
00295 monitor()->fillmeGainWidth0Depth4(gainWidthValue0);
00296 monitor()->fillmeGainWidth1Depth4(gainWidthValue1);
00297 monitor()->fillmeGainWidth2Depth4(gainWidthValue2);
00298 monitor()->fillmeGainWidth3Depth4(gainWidthValue3);
00299
00300 monitor()->fillmePed0Depth4(pedValue0);
00301 monitor()->fillmePed1Depth4(pedValue1);
00302 monitor()->fillmePed2Depth4(pedValue2);
00303 monitor()->fillmePed3Depth4(pedValue3);
00304
00305 monitor()->fillmePedWidth0Depth4(pedWidth0);
00306 monitor()->fillmePedWidth1Depth4(pedWidth1);
00307 monitor()->fillmePedWidth2Depth4(pedWidth2);
00308 monitor()->fillmePedWidth3Depth4(pedWidth3);
00309
00310 monitor()->fillmeGainMap4 (double(ieta), double(iphi), gainValue0);
00311 monitor()->fillmePwidthMap4(double(ieta), double(iphi), pedWidth0) ;
00312
00313 }
00314
00315 }
00316
00317
00318
00319
00320 if ( sub == subdet) Ndig++;
00321
00322
00323
00324 if ( sub == subdet && noise_ == 0 ) {
00325
00326
00327 HcalCalibrations calibrations = conditions->getHcalCalibrations(cell);
00328
00329 const HcalQIECoder* channelCoder = conditions->getHcalCoder(cell);
00330 HcalCoderDb coder (*channelCoder, *shape);
00331 coder.adc2fC(*digiItr,tool);
00332
00333 double noiseADC = (*digiItr)[0].adc();
00334 double noisefC = tool[0];
00335
00336
00337 if(depth == 1) {
00338 monitor()->fillmeADC0_depth1 (noiseADC);
00339 monitor()->fillmeADC0fC_depth1(noisefC);
00340 }
00341 if(depth == 2) {
00342 monitor()->fillmeADC0_depth2 (noiseADC);
00343 monitor()->fillmeADC0fC_depth2(noisefC);
00344 }
00345 if(depth == 3) {
00346 monitor()->fillmeADC0_depth3 (noiseADC);
00347 monitor()->fillmeADC0fC_depth3(noisefC);
00348 }
00349 if(depth == 4) {
00350 monitor()->fillmeADC0_depth4 (noiseADC);
00351 monitor()->fillmeADC0fC_depth4(noisefC);
00352 }
00353
00354
00355 double deta = double(ieta);
00356 double dphi = double(iphi);
00357 if(depth == 1)
00358 monitor()->fillmeOccupancy_map_depth1(deta, dphi);
00359 if(depth == 2)
00360 monitor()->fillmeOccupancy_map_depth2(deta, dphi);
00361 if(depth == 3)
00362 monitor()->fillmeOccupancy_map_depth3(deta, dphi);
00363 if(depth == 4)
00364 monitor()->fillmeOccupancy_map_depth4(deta, dphi);
00365
00366
00367
00368
00369
00370 int closen = 0;
00371 if(ieta == ieta_Sim && iphi == iphi_Sim ) closen = seedSimHit;
00372
00373 for (int ii=0;ii<tool.size();ii++) {
00374 int capid = (*digiItr)[ii].capid();
00375
00376 double val = (tool[ii]-calibrations.pedestal(capid));
00377
00378 if (val > 10.) monitor()->fillmeAll10slices(double(ii), val);
00379 if (val > 100.) monitor()->fillmeAll10slices1D(double(ii), val);
00380
00381 if( closen == 1 &&( ieta * zsign >= 0 )) {
00382 monitor()->fillmeSignalTimeSlice(double(ii), val);
00383 }
00384
00385
00386
00387 if (subdet != 4 && ii>=4 && ii<=7) {
00388 ampl += val;
00389 if(depth == 1) ampl1 += val;
00390 if(depth == 2) ampl2 += val;
00391 if(depth == 3) ampl3 += val;
00392 if(depth == 4) ampl4 += val;
00393
00394 if( closen == 1 && ( ieta * zsign >= 0 )) {
00395 ampl_c += val;
00396 if(depth == 1) ampl1_c += val;
00397 if(depth == 2) ampl2_c += val;
00398 if(depth == 3) ampl3_c += val;
00399 if(depth == 4) ampl4_c += val;
00400
00401 }
00402 }
00403
00404
00405 if (subdet == 4 && ii==3 ) {
00406 ampl += val;
00407 if(depth == 1) ampl1 += val;
00408 if(depth == 2) ampl2 += val;
00409 if(depth == 3) ampl3 += val;
00410 if(depth == 4) ampl4 += val;
00411 if( closen == 1 && ( ieta * zsign >= 0 )) {
00412 ampl_c += val;
00413 if(depth == 1) ampl1_c += val;
00414 if(depth == 2) ampl2_c += val;
00415 if(depth == 3) ampl3_c += val;
00416 if(depth == 4) ampl4_c += val;
00417
00418 }
00419 }
00420 }
00421
00422
00423 monitor()->fillmeAmplIetaIphi1(double(ieta),double(iphi), ampl1);
00424 monitor()->fillmeAmplIetaIphi2(double(ieta),double(iphi), ampl2);
00425 monitor()->fillmeAmplIetaIphi3(double(ieta),double(iphi), ampl3);
00426 monitor()->fillmeAmplIetaIphi4(double(ieta),double(iphi), ampl4);
00427 monitor()->fillmeSumAmp (ampl);
00428
00429
00430 if(ampl1 > 10. || ampl2 > 10. || ampl3 > 10. || ampl4 > 10. ) ndigis++;
00431
00432
00433 if(ampl1 > 30. && depth == 1 && closen == 1 ) {
00434 double fBin5 = tool[4] - calibrations.pedestal((*digiItr)[4].capid());
00435 double fBin67 = tool[5] + tool[6]
00436 - calibrations.pedestal((*digiItr)[5].capid())
00437 - calibrations.pedestal((*digiItr)[6].capid());
00438 fBin5 /= ampl1;
00439 fBin67 /= ampl1;
00440 monitor()->fillmeBin5Frac (fBin5);
00441 monitor()->fillmeBin67Frac(fBin67);
00442 }
00443
00444 monitor()->fillmeSignalAmp (ampl);
00445 monitor()->fillmeSignalAmp1(ampl1);
00446 monitor()->fillmeSignalAmp2(ampl2);
00447 monitor()->fillmeSignalAmp3(ampl3);
00448 monitor()->fillmeSignalAmp4(ampl4);
00449
00450
00451 }
00452 }
00453
00454
00455 if ( subdet != 0 && noise_ == 0) {
00456
00457 monitor()->fillmenDigis(ndigis);
00458
00459
00460 double eps = 1.e-3;
00461 double ehits = 0.;
00462 double ehits1 = 0.;
00463 double ehits2 = 0.;
00464 double ehits3 = 0.;
00465 double ehits4 = 0.;
00466
00467 if(mc_ == "yes") {
00468 edm::Handle<edm::PCaloHitContainer> hcalHits ;
00469 iEvent.getByLabel("g4SimHits","HcalHits",hcalHits);
00470 const edm::PCaloHitContainer * simhitResult = hcalHits.product () ;
00471 for (std::vector<PCaloHit>::const_iterator simhits = simhitResult->begin (); simhits != simhitResult->end () ; ++simhits) {
00472
00473 HcalDetId cell(simhits->id());
00474 int ieta = cell.ieta();
00475 if(ieta > 0) ieta--;
00476 int iphi = cell.iphi()-1;
00477 int sub = cell.subdet();
00478
00479
00480 if (sub == subdet && ieta == ieta_Sim && iphi == iphi_Sim){
00481 int depth = cell.depth();
00482 double en = simhits->energy();
00483
00484 ehits += en;
00485 if(depth == 1) ehits1 += en;
00486 if(depth == 2) ehits2 += en;
00487 if(depth == 3) ehits3 += en;
00488 if(depth == 4) ehits4 += en;
00489 }
00490 }
00491
00492 if(ehits > eps) monitor()->fillmeDigiSimhit (ehits, ampl_c );
00493 if(ehits1 > eps) monitor()->fillmeDigiSimhit1(ehits1, ampl1_c);
00494 if(ehits2 > eps) monitor()->fillmeDigiSimhit2(ehits2, ampl2_c);
00495 if(ehits3 > eps) monitor()->fillmeDigiSimhit3(ehits3, ampl3_c);
00496 if(ehits4 > eps) monitor()->fillmeDigiSimhit4(ehits4, ampl4_c);
00497
00498 if(ehits > eps) monitor()->fillmeDigiSimhitProfile (ehits, ampl_c );
00499 if(ehits1 > eps) monitor()->fillmeDigiSimhitProfile1(ehits1, ampl1_c);
00500 if(ehits2 > eps) monitor()->fillmeDigiSimhitProfile2(ehits2, ampl2_c);
00501 if(ehits3 > eps) monitor()->fillmeDigiSimhitProfile3(ehits3, ampl3_c);
00502 if(ehits4 > eps) monitor()->fillmeDigiSimhitProfile4(ehits4, ampl4_c);
00503
00504 if(ehits > eps) monitor()->fillmeRatioDigiSimhit (ampl_c / ehits);
00505 if(ehits1 > eps) monitor()->fillmeRatioDigiSimhit1(ampl1_c / ehits1);
00506 if(ehits2 > eps) monitor()->fillmeRatioDigiSimhit2(ampl2_c / ehits2);
00507 if(ehits3 > eps) monitor()->fillmeRatioDigiSimhit3(ampl3_c / ehits3);
00508 if(ehits4 > eps) monitor()->fillmeRatioDigiSimhit4(ampl4_c / ehits4);
00509 }
00510
00511 monitor()->fillmeNdigis(double(Ndig));
00512
00513 }
00514
00515 }
00516
00517
00518 HcalDigiTester::HcalDigiTester(const edm::ParameterSet& iConfig)
00519 : dbe_(edm::Service<DQMStore>().operator->()),
00520 inputTag_(iConfig.getParameter<edm::InputTag>("digiLabel")),
00521 outputFile_(iConfig.getUntrackedParameter<std::string>("outputFile", "")),
00522 hcalselector_(iConfig.getUntrackedParameter<std::string>("hcalselector", "all")),
00523 zside_(iConfig.getUntrackedParameter<std::string>("zside", "*")),
00524 mode_(iConfig.getUntrackedParameter<std::string>("mode", "multi")),
00525 mc_(iConfig.getUntrackedParameter<std::string>("mc", "no")),
00526 monitors_()
00527 {
00528 if ( outputFile_.size() != 0 ) {
00529 edm::LogInfo("OutputInfo") << " Hcal Digi Task histograms will be saved to '" << outputFile_.c_str() << "'";
00530 } else {
00531 edm::LogInfo("OutputInfo") << " Hcal Digi Task histograms will NOT be saved";
00532 }
00533
00534
00535 }
00536
00537
00538 HcalDigiTester::~HcalDigiTester() { }
00539
00540
00541 void HcalDigiTester::endRun() {
00542
00543 if(noise_ != 1) {
00544
00545 if( hcalselector_ == "all") {
00546 hcalselector_ = "HB";
00547 eval_occupancy();
00548 hcalselector_ = "HE";
00549 eval_occupancy();
00550 hcalselector_ = "HO";
00551 eval_occupancy();
00552 hcalselector_ = "HF";
00553 eval_occupancy();
00554 }
00555 else
00556 eval_occupancy();
00557 }
00558
00559 }
00560
00561
00562
00563 void HcalDigiTester::endJob() {
00564
00565 if ( outputFile_.size() != 0 && dbe_ ) dbe_->save(outputFile_);
00566
00567 }
00568
00569
00570
00571 void HcalDigiTester::eval_occupancy() {
00572
00573 int nx = 82;
00574 int ny = 72;
00575 float cnorm;
00576 float fev = float (nevtot);
00577
00578
00579 float sumphi_1, sumphi_2, sumphi_3, sumphi_4;
00580 float phi_factor;
00581
00582 for (int i = 1; i <= nx; i++) {
00583 sumphi_1 = 0.;
00584 sumphi_2 = 0.;
00585 sumphi_3 = 0.;
00586 sumphi_4 = 0.;
00587
00588 for (int j = 1; j <= ny; j++) {
00589
00590
00591 cnorm = monitor()->getBinContent_depth1(i,j) / fev;
00592 monitor()->setBinContent_depth1(i,j,cnorm);
00593 cnorm = monitor()->getBinContent_depth2(i,j) / fev;
00594 monitor()->setBinContent_depth2(i,j,cnorm);
00595 cnorm = monitor()->getBinContent_depth3(i,j) / fev;
00596 monitor()->setBinContent_depth3(i,j,cnorm);
00597 cnorm = monitor()->getBinContent_depth4(i,j) / fev;
00598 monitor()->setBinContent_depth4(i,j,cnorm);
00599
00600 sumphi_1 += monitor()->getBinContent_depth1(i,j);
00601 sumphi_2 += monitor()->getBinContent_depth2(i,j);
00602 sumphi_3 += monitor()->getBinContent_depth3(i,j);
00603 sumphi_4 += monitor()->getBinContent_depth4(i,j);
00604
00605 }
00606
00607 int ieta = i - 42;
00608 if(ieta >=0 ) ieta +=1;
00609
00610 if(ieta >= -20 && ieta <= 20 )
00611 {phi_factor = 72.;}
00612 else {
00613 if(ieta >= 40 || ieta <= -40 ) {phi_factor = 18.;}
00614 else
00615 phi_factor = 36.;
00616 }
00617
00618
00619 if(ieta >= 0) ieta -= 1;
00620 double deta = double(ieta);
00621
00622 cnorm = sumphi_1 / phi_factor;
00623 monitor() -> fillmeOccupancy_vs_ieta_depth1(deta, cnorm);
00624 cnorm = sumphi_2 / phi_factor;
00625 monitor() -> fillmeOccupancy_vs_ieta_depth2(deta, cnorm);
00626 cnorm = sumphi_3 / phi_factor;
00627 monitor() -> fillmeOccupancy_vs_ieta_depth3(deta, cnorm);
00628 cnorm = sumphi_4 / phi_factor;
00629 monitor() -> fillmeOccupancy_vs_ieta_depth4(deta, cnorm);
00630
00631
00632 }
00633
00634 }
00635
00636 void HcalDigiTester::beginJob() {
00637
00638 nevent1 = 0;
00639 nevent2 = 0;
00640 nevent3 = 0;
00641 nevent4 = 0;
00642
00643 nevtot = 0;
00644
00645 }
00646
00647
00648 HcalSubdetDigiMonitor * HcalDigiTester::monitor()
00649 {
00650 std::map<std::string, HcalSubdetDigiMonitor*>::iterator monitorItr
00651 = monitors_.find(hcalselector_);
00652
00653 if(monitorItr == monitors_.end())
00654 {
00655 HcalSubdetDigiMonitor* m = new HcalSubdetDigiMonitor(dbe_, hcalselector_, noise_);
00656 std::pair<std::string, HcalSubdetDigiMonitor*> mapElement(
00657 hcalselector_, m);
00658 monitorItr = monitors_.insert(mapElement).first;
00659 }
00660 return monitorItr->second;
00661 }
00662
00663 void
00664 HcalDigiTester::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00665 {
00666
00667
00668 iSetup.get<CaloGeometryRecord>().get (geometry);
00669 iSetup.get<HcalDbRecord>().get(conditions);
00670
00671
00672
00673
00674
00675 if( hcalselector_ != "all") {
00676 noise_ = 0;
00677
00678
00679
00680 if (hcalselector_ == "HB" ) reco<HBHEDataFrame>(iEvent,iSetup);
00681 if (hcalselector_ == "HE" ) reco<HBHEDataFrame>(iEvent,iSetup);
00682 if (hcalselector_ == "HO" ) reco<HODataFrame>(iEvent,iSetup);
00683 if (hcalselector_ == "HF" ) reco<HFDataFrame>(iEvent,iSetup);
00684
00685 if (hcalselector_ == "noise") {
00686 noise_ = 1;
00687
00688
00689
00690
00691
00692 hcalselector_ = "HB";
00693 reco<HBHEDataFrame>(iEvent,iSetup);
00694 hcalselector_ = "HE";
00695 reco<HBHEDataFrame>(iEvent,iSetup);
00696 hcalselector_ = "HO";
00697 reco<HODataFrame>(iEvent,iSetup);
00698 hcalselector_ = "HF";
00699 reco<HFDataFrame>(iEvent,iSetup);
00700 hcalselector_ = "noise";
00701 }
00702 }
00703
00704 else {
00705 noise_ = 0;
00706
00707 hcalselector_ = "HB";
00708 reco<HBHEDataFrame>(iEvent,iSetup);
00709 hcalselector_ = "HE";
00710 reco<HBHEDataFrame>(iEvent,iSetup);
00711 hcalselector_ = "HO";
00712 reco<HODataFrame>(iEvent,iSetup);
00713 hcalselector_ = "HF";
00714 reco<HFDataFrame>(iEvent,iSetup);
00715 hcalselector_ = "all";
00716 }
00717
00718 nevtot++;
00719
00720 }
00721
00722 double HcalDigiTester::dR(double eta1, double phi1, double eta2, double phi2) {
00723 double PI = 3.1415926535898;
00724 double deltaphi= phi1 - phi2;
00725 if( phi2 > phi1 ) { deltaphi= phi2 - phi1;}
00726 if(deltaphi > PI) { deltaphi = 2.*PI - deltaphi;}
00727 double deltaeta = eta2 - eta1;
00728 double tmp = sqrt(deltaeta* deltaeta + deltaphi*deltaphi);
00729 return tmp;
00730 }
00731
00732
00733 DEFINE_FWK_MODULE (HcalDigiTester) ;