File indexing completed on 2024-04-06 12:00:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include "CaloOnlineTools/EcalTools/plugins/EcalDisplaysByEvent.h"
0020 #include "RecoCaloTools/Navigation/interface/CaloNavigator.h"
0021 #include "TLatex.h"
0022 #include "TLine.h"
0023 #include "TProfile2D.h"
0024 #include <utility>
0025 using namespace edm;
0026 using namespace std;
0027
0028
0029
0030
0031
0032
0033
0034
0035 float EcalDisplaysByEvent::gainRatio[3] = {1., 2., 12.};
0036 edm::Service<TFileService> EcalDisplaysByEvent::fileService;
0037
0038
0039
0040
0041 EcalDisplaysByEvent::EcalDisplaysByEvent(const edm::ParameterSet& iConfig)
0042 : EBRecHitCollection_(iConfig.getParameter<edm::InputTag>("EcalRecHitCollectionEB")),
0043 EERecHitCollection_(iConfig.getParameter<edm::InputTag>("EcalRecHitCollectionEE")),
0044 EBDigis_(iConfig.getParameter<edm::InputTag>("EBDigiCollection")),
0045 EEDigis_(iConfig.getParameter<edm::InputTag>("EEDigiCollection")),
0046 headerProducer_(iConfig.getParameter<edm::InputTag>("headerProducer")),
0047 rawDataToken_(consumes<EcalRawDataCollection>(headerProducer_)),
0048 ebRecHitToken_(consumes<EcalRecHitCollection>(EBRecHitCollection_)),
0049 eeRecHitToken_(consumes<EcalRecHitCollection>(EERecHitCollection_)),
0050 ebDigiToken_(consumes<EBDigiCollection>(EBDigis_)),
0051 eeDigiToken_(consumes<EEDigiCollection>(EEDigis_)),
0052 ecalMappingToken_(esConsumes<edm::Transition::BeginRun>()),
0053 topologyToken_(esConsumes()),
0054 runNum_(-1),
0055 side_(iConfig.getUntrackedParameter<int>("side", 3)),
0056 threshold_(iConfig.getUntrackedParameter<double>("amplitudeThreshold", 0.5)),
0057 minTimingAmp_(iConfig.getUntrackedParameter<double>("minimumTimingAmplitude", 0.100)),
0058 makeDigiGraphs_(iConfig.getUntrackedParameter<bool>("makeDigiGraphs", false)),
0059 makeTimingHistos_(iConfig.getUntrackedParameter<bool>("makeTimingHistos", true)),
0060 makeEnergyHistos_(iConfig.getUntrackedParameter<bool>("makeEnergyHistos", true)),
0061 makeOccupancyHistos_(iConfig.getUntrackedParameter<bool>("makeOccupancyHistos", true)),
0062 histRangeMin_(iConfig.getUntrackedParameter<double>("histogramMinRange", 0.0)),
0063 histRangeMax_(iConfig.getUntrackedParameter<double>("histogramMaxRange", 1.8)),
0064 minTimingEnergyEB_(iConfig.getUntrackedParameter<double>("minTimingEnergyEB", 0.0)),
0065 minTimingEnergyEE_(iConfig.getUntrackedParameter<double>("minTimingEnergyEE", 0.0)) {
0066 vector<int> listDefaults;
0067 listDefaults.push_back(-1);
0068
0069 maskedChannels_ = iConfig.getUntrackedParameter<vector<int> >("maskedChannels", listDefaults);
0070 maskedFEDs_ = iConfig.getUntrackedParameter<vector<int> >("maskedFEDs", listDefaults);
0071 seedCrys_ = iConfig.getUntrackedParameter<vector<int> >("seedCrys", listDefaults);
0072
0073 vector<string> defaultMaskedEBs;
0074 defaultMaskedEBs.push_back("none");
0075 maskedEBs_ = iConfig.getUntrackedParameter<vector<string> >("maskedEBs", defaultMaskedEBs);
0076
0077 fedMap_ = new EcalFedMap();
0078
0079 string title1 = "Jitter for all FEDs all events";
0080 string name1 = "JitterAllFEDsAllEvents";
0081 allFedsTimingHist_ = fileService->make<TH1F>(name1.c_str(), title1.c_str(), 150, -7, 7);
0082
0083
0084 if (maskedFEDs_[0] == -1) {
0085
0086 if (maskedEBs_[0] != "none") {
0087 maskedFEDs_.clear();
0088 for (vector<string>::const_iterator ebItr = maskedEBs_.begin(); ebItr != maskedEBs_.end(); ++ebItr) {
0089 maskedFEDs_.push_back(fedMap_->getFedFromSlice(*ebItr));
0090 }
0091 }
0092 }
0093
0094 for (int i = 0; i < 10; i++)
0095 abscissa[i] = i;
0096
0097 naiveEvtNum_ = 0;
0098
0099 initAllEventHistos();
0100 }
0101
0102 EcalDisplaysByEvent::~EcalDisplaysByEvent() {}
0103
0104
0105
0106
0107
0108
0109 void EcalDisplaysByEvent::beginRun(edm::Run const&, edm::EventSetup const& c) {
0110 ecalElectronicsMap_ = &c.getData(ecalMappingToken_);
0111 }
0112
0113 void EcalDisplaysByEvent::endRun(edm::Run const&, edm::EventSetup const& c) {}
0114
0115
0116 void EcalDisplaysByEvent::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) {
0117
0118
0119 edm::Handle<EcalRawDataCollection> DCCHeaders;
0120 iEvent.getByToken(rawDataToken_, DCCHeaders);
0121
0122 for (EcalRawDataCollection::const_iterator headerItr = DCCHeaders->begin(); headerItr != DCCHeaders->end();
0123 ++headerItr) {
0124 FEDsAndDCCHeaders_[headerItr->id() + 600] = *headerItr;
0125 }
0126
0127 int ievt = iEvent.id().event();
0128 naiveEvtNum_++;
0129
0130 if (runNum_ == -1) {
0131 runNum_ = iEvent.id().run();
0132 canvasNames_ = fileService->make<TTree>("canvasNames", "Names of written canvases");
0133 names = new std::vector<string>();
0134 canvasNames_->Branch("names", "vector<string>", &names);
0135
0136 histoCanvasNames_ = fileService->make<TTree>("histoCanvasNames", "Names of written canvases with histos");
0137 histoCanvasNamesVector = new std::vector<string>();
0138 histoCanvasNames_->Branch("histoCanvasNamesVector", "vector<string>", &histoCanvasNamesVector);
0139 }
0140
0141
0142 listEBChannels.clear();
0143 listEEChannels.clear();
0144
0145
0146 caloTopo_ = &iSetup.getData(topologyToken_);
0147
0148 Handle<EcalRecHitCollection> EBhits;
0149 Handle<EcalRecHitCollection> EEhits;
0150 iEvent.getByToken(ebRecHitToken_, EBhits);
0151 iEvent.getByToken(eeRecHitToken_, EEhits);
0152 iEvent.getByToken(ebDigiToken_, EBdigisHandle);
0153 iEvent.getByToken(eeDigiToken_, EEdigisHandle);
0154
0155
0156 initEvtByEvtHists(naiveEvtNum_, ievt);
0157
0158 bool hasEBdigis = false;
0159 bool hasEEdigis = false;
0160 if (!EBdigisHandle->empty())
0161 hasEBdigis = true;
0162 if (!EEdigisHandle->empty())
0163 hasEEdigis = true;
0164
0165
0166 if (makeDigiGraphs_) {
0167 if (hasEBdigis)
0168 selectHits(EBhits, ievt);
0169 if (hasEEdigis)
0170 selectHits(EEhits, ievt);
0171 }
0172
0173
0174 if (hasEBdigis) {
0175 makeHistos(EBdigisHandle);
0176 makeHistos(EBhits);
0177 }
0178 if (hasEEdigis) {
0179 makeHistos(EEdigisHandle);
0180 makeHistos(EEhits);
0181 }
0182
0183 if (hasEBdigis || hasEEdigis)
0184 drawHistos();
0185
0186 deleteEvtByEvtHists();
0187 }
0188
0189 void EcalDisplaysByEvent::selectHits(Handle<EcalRecHitCollection> hits, int ievt) {
0190 for (EcalRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr) {
0191 EcalRecHit hit = (*hitItr);
0192 DetId det = hit.id();
0193 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
0194 int FEDid = 600 + elecId.dccId();
0195 bool isBarrel = true;
0196 if (FEDid < 610 || FEDid > 645)
0197 isBarrel = false;
0198 int cryIndex = isBarrel ? ((EBDetId)det).hashedIndex() : getEEIndex(elecId);
0199 int ic = isBarrel ? ((EBDetId)det).ic() : getEEIndex(elecId);
0200
0201 float ampli = hit.energy();
0202
0203 vector<int>::iterator result;
0204 result = find(maskedFEDs_.begin(), maskedFEDs_.end(), FEDid);
0205 if (result != maskedFEDs_.end()) {
0206
0207 continue;
0208 }
0209 result = find(maskedChannels_.begin(), maskedChannels_.end(), cryIndex);
0210 if (result != maskedChannels_.end()) {
0211
0212 continue;
0213 }
0214 bool cryIsInList = false;
0215 result = find(seedCrys_.begin(), seedCrys_.end(), cryIndex);
0216 if (result != seedCrys_.end())
0217 cryIsInList = true;
0218
0219
0220
0221 if (cryIsInList || (seedCrys_.empty() && ampli > threshold_)) {
0222
0223 crysAndAmplitudesMap_[cryIndex] = ampli;
0224 string name = "Digis_Event" + intToString(naiveEvtNum_) + "_ic" + intToString(ic) + "_FED" + intToString(FEDid);
0225 string title = "Digis";
0226 string seed = "ic" + intToString(ic) + "_FED" + intToString(FEDid);
0227 int freq = 1;
0228 pair<map<string, int>::iterator, bool> pair = seedFrequencyMap_.insert(make_pair(seed, freq));
0229 if (!pair.second) {
0230 ++(pair.first->second);
0231 }
0232
0233
0234 TCanvas can(name.c_str(), title.c_str(), 200, 50, 900, 900);
0235 can.Divide(side_, side_);
0236 TGraph* myGraph;
0237
0238 CaloNavigator<DetId> cursor = CaloNavigator<DetId>(det, caloTopo_->getSubdetectorTopology(det));
0239
0240 for (int j = side_ / 2; j >= -side_ / 2; --j) {
0241 for (int i = -side_ / 2; i <= side_ / 2; ++i) {
0242 cursor.home();
0243 cursor.offsetBy(i, j);
0244 can.cd(i + 1 + side_ / 2 + side_ * (1 - j));
0245 myGraph = selectDigi(*cursor, ievt);
0246 myGraph->Draw("A*");
0247 }
0248 }
0249 can.Write();
0250 names->push_back(name);
0251 }
0252 }
0253 }
0254
0255 TGraph* EcalDisplaysByEvent::selectDigi(DetId thisDet, int ievt) {
0256 int emptyY[10];
0257 for (int i = 0; i < 10; i++)
0258 emptyY[i] = 0;
0259 TGraph* emptyGraph = fileService->make<TGraph>(10, abscissa, emptyY);
0260 emptyGraph->SetTitle("NOT ECAL");
0261
0262
0263 if (thisDet.det() != DetId::Ecal)
0264 return emptyGraph;
0265
0266 emptyGraph->SetTitle("NO DIGIS");
0267
0268 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(thisDet);
0269 int FEDid = 600 + elecId.dccId();
0270 bool isBarrel = true;
0271 if (FEDid < 610 || FEDid > 645)
0272 isBarrel = false;
0273 int cryIndex = isBarrel ? ((EBDetId)thisDet).hashedIndex() : getEEIndex(elecId);
0274 int ic = isBarrel ? ((EBDetId)thisDet).ic() : cryIndex;
0275
0276 string sliceName = fedMap_->getSliceFromFed(FEDid);
0277 EcalDataFrame df;
0278 if (isBarrel) {
0279 EBDigiCollection::const_iterator digiItr = EBdigisHandle->begin();
0280 while (digiItr != EBdigisHandle->end() && ((*digiItr).id() != (EBDetId)thisDet)) {
0281 ++digiItr;
0282 }
0283 if (digiItr == EBdigisHandle->end()) {
0284
0285
0286 return emptyGraph;
0287 } else
0288 df = *digiItr;
0289 } else {
0290 EEDigiCollection::const_iterator digiItr = EEdigisHandle->begin();
0291 while (digiItr != EEdigisHandle->end() && ((*digiItr).id() != (EEDetId)thisDet)) {
0292 ++digiItr;
0293 }
0294 if (digiItr == EEdigisHandle->end()) {
0295
0296
0297 return emptyGraph;
0298 } else
0299 df = *digiItr;
0300 }
0301
0302 int gainId = FEDsAndDCCHeaders_[FEDid].getMgpaGain();
0303 int gainHuman;
0304 if (gainId == 1)
0305 gainHuman = 12;
0306 else if (gainId == 2)
0307 gainHuman = 6;
0308 else if (gainId == 3)
0309 gainHuman = 1;
0310 else
0311 gainHuman = -1;
0312
0313 double pedestal = 200;
0314
0315 emptyGraph->SetTitle("FIRST TWO SAMPLES NOT GAIN12");
0316 if (df.sample(0).gainId() != 1 || df.sample(1).gainId() != 1)
0317 return emptyGraph;
0318 else {
0319 ordinate[0] = df.sample(0).adc();
0320 ordinate[1] = df.sample(1).adc();
0321 pedestal = (double)(ordinate[0] + ordinate[1]) / (double)2;
0322 }
0323
0324 for (int i = 0; i < df.size(); ++i) {
0325 if (df.sample(i).gainId() != 0)
0326 ordinate[i] = (int)(pedestal + (df.sample(i).adc() - pedestal) * gainRatio[df.sample(i).gainId() - 1]);
0327 else
0328 ordinate[i] = 49152;
0329 }
0330
0331 TGraph* oneGraph = fileService->make<TGraph>(10, abscissa, ordinate);
0332 string name = "Graph_ev" + intToString(naiveEvtNum_) + "_ic" + intToString(ic) + "_FED" + intToString(FEDid);
0333 string gainString = (gainId == 1) ? "Free" : intToString(gainHuman);
0334 string title = "Event" + intToString(naiveEvtNum_) + "_lv1a" + intToString(ievt) + "_ic" + intToString(ic) + "_" +
0335 sliceName + "_gain" + gainString;
0336
0337 float energy = 0;
0338 map<int, float>::const_iterator itr;
0339 itr = crysAndAmplitudesMap_.find(cryIndex);
0340 if (itr != crysAndAmplitudesMap_.end()) {
0341
0342 energy = (float)itr->second;
0343 }
0344
0345
0346
0347 title += "_Energy" + floatToString(round(energy * 1000));
0348
0349 oneGraph->SetTitle(title.c_str());
0350 oneGraph->SetName(name.c_str());
0351 oneGraph->GetXaxis()->SetTitle("sample");
0352 oneGraph->GetYaxis()->SetTitle("ADC");
0353 return oneGraph;
0354 }
0355
0356 int EcalDisplaysByEvent::getEEIndex(EcalElectronicsId elecId) {
0357 int FEDid = 600 + elecId.dccId();
0358 return 10000 * FEDid + 100 * elecId.towerId() + 5 * (elecId.stripId() - 1) + elecId.xtalId();
0359 }
0360
0361 void EcalDisplaysByEvent::makeHistos(Handle<EBDigiCollection> ebDigiHandle) {
0362 const EBDigiCollection* ebDigis = ebDigiHandle.product();
0363 for (EBDigiCollection::const_iterator digiItr = ebDigis->begin(); digiItr != ebDigis->end(); ++digiItr) {
0364 EBDetId digiId = digiItr->id();
0365 int ieta = digiId.ieta();
0366 int iphi = digiId.iphi();
0367 digiOccupancyEBAll_->Fill(iphi, ieta);
0368 digiOccupancyEBcoarseAll_->Fill(iphi, ieta);
0369 if (makeOccupancyHistos_) {
0370 digiOccupancyEB_->Fill(iphi, ieta);
0371 digiOccupancyEBcoarse_->Fill(iphi, ieta);
0372 }
0373 }
0374 }
0375
0376 void EcalDisplaysByEvent::makeHistos(Handle<EEDigiCollection> eeDigiHandle) {
0377 const EEDigiCollection* eeDigis = eeDigiHandle.product();
0378 for (EEDigiCollection::const_iterator digiItr = eeDigis->begin(); digiItr != eeDigis->end(); ++digiItr) {
0379 DetId det = digiItr->id();
0380 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
0381 size_t FEDid = 600 + elecId.dccId();
0382 bool isEEM = false;
0383 if (FEDid < 610)
0384 isEEM = true;
0385 EEDetId digiId = digiItr->id();
0386 int ieta = digiId.iy();
0387 int iphi = digiId.ix();
0388 if (isEEM) {
0389 digiOccupancyEEMAll_->Fill(iphi, ieta);
0390 digiOccupancyEEMcoarseAll_->Fill(iphi, ieta);
0391 if (makeOccupancyHistos_) {
0392 digiOccupancyEEMcoarse_->Fill(iphi, ieta);
0393 digiOccupancyEEM_->Fill(iphi, ieta);
0394 }
0395 } else {
0396 digiOccupancyEEPAll_->Fill(iphi, ieta);
0397 digiOccupancyEEPcoarseAll_->Fill(iphi, ieta);
0398 if (makeOccupancyHistos_) {
0399 digiOccupancyEEP_->Fill(iphi, ieta);
0400 digiOccupancyEEPcoarse_->Fill(iphi, ieta);
0401 }
0402 }
0403 }
0404 }
0405
0406 void EcalDisplaysByEvent::makeHistos(Handle<EcalRecHitCollection> hits) {
0407 for (EcalRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr) {
0408 EcalRecHit hit = (*hitItr);
0409 DetId det = hit.id();
0410 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
0411 int FEDid = 600 + elecId.dccId();
0412 bool isBarrel = true;
0413 bool isEEM = false;
0414 if (FEDid < 610 || FEDid > 645) {
0415 isBarrel = false;
0416 if (FEDid < 610)
0417 isEEM = true;
0418 }
0419 int iphi = isBarrel ? ((EBDetId)det).iphi() : ((EEDetId)det).ix();
0420 int ieta = isBarrel ? ((EBDetId)det).ieta() : ((EEDetId)det).iy();
0421 float energy = hit.energy();
0422 float time = hit.time();
0423
0424
0425 if (makeEnergyHistos_) {
0426 if (isBarrel) {
0427 energyEB_->Fill(energy);
0428 energyMapEB_->Fill(iphi, ieta, energy);
0429 energyMapEBcoarse_->Fill(iphi, ieta, energy);
0430 } else if (isEEM) {
0431 energyEEM_->Fill(energy);
0432 energyMapEEM_->Fill(iphi, ieta, energy);
0433 energyMapEEMcoarse_->Fill(iphi, ieta, energy);
0434 } else {
0435 energyEEP_->Fill(energy);
0436 energyMapEEP_->Fill(iphi, ieta, energy);
0437 energyMapEEPcoarse_->Fill(iphi, ieta, energy);
0438 }
0439 }
0440
0441 if (makeOccupancyHistos_) {
0442 if (isBarrel) {
0443 recHitOccupancyEB_->Fill(iphi, ieta);
0444 recHitOccupancyEBcoarse_->Fill(iphi, ieta);
0445 } else if (isEEM) {
0446 recHitOccupancyEEM_->Fill(iphi, ieta);
0447 recHitOccupancyEEMcoarse_->Fill(iphi, ieta);
0448 } else {
0449 recHitOccupancyEEP_->Fill(iphi, ieta);
0450 recHitOccupancyEEPcoarse_->Fill(iphi, ieta);
0451 }
0452 }
0453
0454
0455 if (makeTimingHistos_) {
0456 if (isBarrel) {
0457 timingEB_->Fill(time);
0458 if (energy > minTimingEnergyEB_) {
0459 timingMapEB_->Fill(iphi, ieta, time);
0460
0461 }
0462 } else if (isEEM) {
0463 timingEEM_->Fill(time);
0464 if (energy > minTimingEnergyEE_) {
0465 timingMapEEM_->Fill(iphi, ieta, time);
0466
0467 }
0468 } else {
0469 timingEEP_->Fill(time);
0470 if (energy > minTimingEnergyEE_) {
0471 timingMapEEP_->Fill(iphi, ieta, time);
0472
0473 }
0474 }
0475 }
0476
0477
0478 if (isBarrel) {
0479 energyEBAll_->Fill(energy);
0480 energyMapEBAll_->Fill(iphi, ieta, energy);
0481 energyMapEBcoarseAll_->Fill(iphi, ieta, energy);
0482 recHitOccupancyEBAll_->Fill(iphi, ieta);
0483 recHitOccupancyEBcoarseAll_->Fill(iphi, ieta);
0484 timingEBAll_->Fill(time);
0485 if (energy > minTimingEnergyEB_) {
0486 timingMapEBAll_->Fill(iphi, ieta, time);
0487 timingMapEBCoarseAll_->Fill(iphi, ieta, time);
0488 }
0489 } else if (isEEM) {
0490 energyEEMAll_->Fill(energy);
0491 energyMapEEMAll_->Fill(iphi, ieta, energy);
0492 energyMapEEMcoarseAll_->Fill(iphi, ieta, energy);
0493 recHitOccupancyEEMAll_->Fill(iphi, ieta);
0494 recHitOccupancyEEMcoarseAll_->Fill(iphi, ieta);
0495 timingEEMAll_->Fill(time);
0496 if (energy > minTimingEnergyEE_) {
0497 timingMapEEMAll_->Fill(iphi, ieta, time);
0498 timingMapEEMCoarseAll_->Fill(iphi, ieta, time);
0499 }
0500 } else {
0501 energyEEPAll_->Fill(energy);
0502 energyMapEEPAll_->Fill(iphi, ieta, energy);
0503 energyMapEEPcoarseAll_->Fill(iphi, ieta, energy);
0504 recHitOccupancyEEPAll_->Fill(iphi, ieta);
0505 recHitOccupancyEEPcoarseAll_->Fill(iphi, ieta);
0506 timingEEPAll_->Fill(time);
0507 if (energy > minTimingEnergyEE_) {
0508 timingMapEEPAll_->Fill(iphi, ieta, time);
0509 timingMapEEPCoarseAll_->Fill(iphi, ieta, time);
0510 }
0511 }
0512
0513 TH1F* timingHist = FEDsAndTimingHists_[FEDid];
0514 if (timingHist == nullptr) {
0515 initHists(FEDid);
0516 timingHist = FEDsAndTimingHists_[FEDid];
0517 }
0518 if (energy > minTimingAmp_) {
0519 timingHist->Fill(hit.time());
0520 allFedsTimingHist_->Fill(hit.time());
0521 }
0522 }
0523 }
0524
0525
0526 void EcalDisplaysByEvent::endJob() {
0527
0528 drawCanvas(timingCanvasAll_, timingEEMAll_, timingEBAll_, timingEEPAll_);
0529 drawCanvas(timingMapCanvasAll_, timingMapEEMAll_, timingMapEBAll_, timingMapEEPAll_);
0530 drawCanvas(energyCanvasAll_, energyEEMAll_, energyEBAll_, energyEEPAll_);
0531 drawCanvas(energyMapCanvasAll_, energyMapEEMAll_, energyMapEBAll_, energyMapEEPAll_);
0532 drawCanvas(energyMapCoarseCanvasAll_, energyMapEEMcoarseAll_, energyMapEBcoarseAll_, energyMapEEPcoarseAll_);
0533 drawCanvas(recHitOccupancyCanvasAll_, recHitOccupancyEEMAll_, recHitOccupancyEBAll_, recHitOccupancyEEPAll_);
0534 drawCanvas(recHitOccupancyCoarseCanvasAll_,
0535 recHitOccupancyEEMcoarseAll_,
0536 recHitOccupancyEBcoarseAll_,
0537 recHitOccupancyEEPcoarseAll_);
0538 drawCanvas(digiOccupancyCanvasAll_, digiOccupancyEEMAll_, digiOccupancyEBAll_, digiOccupancyEEPAll_);
0539 drawCanvas(
0540 digiOccupancyCoarseCanvasAll_, digiOccupancyEEMcoarseAll_, digiOccupancyEBcoarseAll_, digiOccupancyEEPcoarseAll_);
0541
0542 if (runNum_ != -1) {
0543 canvasNames_->Fill();
0544 histoCanvasNames_->Fill();
0545 }
0546
0547 string frequencies = "";
0548 for (std::map<std::string, int>::const_iterator itr = seedFrequencyMap_.begin(); itr != seedFrequencyMap_.end();
0549 ++itr) {
0550 if (itr->second > 1) {
0551 frequencies += itr->first;
0552 frequencies += " Frequency: ";
0553 frequencies += intToString(itr->second);
0554 frequencies += "\n";
0555 }
0556 }
0557 LogWarning("EcalDisplaysByEvent") << "Found seeds with frequency > 1: "
0558 << "\n\n"
0559 << frequencies;
0560
0561 std::string channels;
0562 for (std::vector<int>::const_iterator itr = maskedChannels_.begin(); itr != maskedChannels_.end(); ++itr) {
0563 channels += intToString(*itr);
0564 channels += ",";
0565 }
0566
0567 std::string feds;
0568 for (std::vector<int>::const_iterator itr = maskedFEDs_.begin(); itr != maskedFEDs_.end(); ++itr) {
0569 feds += intToString(*itr);
0570 feds += ",";
0571 }
0572
0573 LogWarning("EcalDisplaysByEvent") << "Masked channels are: " << channels;
0574 LogWarning("EcalDisplaysByEvent") << "Masked FEDs are: " << feds << " and that is all!";
0575 }
0576
0577 std::string EcalDisplaysByEvent::intToString(int num) {
0578 using namespace std;
0579 ostringstream myStream;
0580 myStream << num << flush;
0581 return (myStream.str());
0582 }
0583
0584 std::string EcalDisplaysByEvent::floatToString(float num) {
0585 using namespace std;
0586 ostringstream myStream;
0587 myStream << num << flush;
0588 return (myStream.str());
0589 }
0590
0591
0592 void EcalDisplaysByEvent::initHists(int FED) {
0593 using namespace std;
0594
0595 string title1 = "Jitter for ";
0596 title1.append(fedMap_->getSliceFromFed(FED));
0597 string name1 = "JitterFED";
0598 name1.append(intToString(FED));
0599 TH1F* timingHist = fileService->make<TH1F>(name1.c_str(), title1.c_str(), 150, -7, 7);
0600 FEDsAndTimingHists_[FED] = timingHist;
0601 }
0602
0603 void EcalDisplaysByEvent::initEvtByEvtHists(int naiveEvtNum_, int ievt) {
0604 string lastPart = intToString(naiveEvtNum_) + "_LV1a" + intToString(ievt);
0605 if (makeTimingHistos_) {
0606 string canvasTitle = "Timing_Event" + lastPart;
0607 timingEB_ = new TH1F("timeForAllFedsEB", "timeForAllFeds;Relative Time (1 clock = 25ns)", 78, -7, 7);
0608 timingEEM_ = new TH1F("timeForAllFedsEEM", "timeForAllFeds_EEM;Relative Time (1 clock = 25ns)", 78, -7, 7);
0609 timingEEP_ = new TH1F("timeForAllFedsEEP", "timeForAllFeds_EEP;Relative Time (1 clock = 25ns)", 78, -7, 7);
0610 timingCanvas_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(), 300, 60, 500, 200);
0611 timingMapEB_ = init3DEcalHist("TimingMap", EB_FINE);
0612 timingMapEEM_ = init3DEcalHist("TimingMap", EEM_FINE);
0613 timingMapEEP_ = init3DEcalHist("TimingMap", EEP_FINE);
0614 timingMapCanvas_ = init2DEcalCanvas("TimingMap_Event" + lastPart);
0615
0616 timingMapEEMCoarse_ = init3DEcalHist("TimingMap", EEM_COARSE);
0617 timingMapEEPCoarse_ = init3DEcalHist("TimingMap", EEP_COARSE);
0618
0619 }
0620 if (makeEnergyHistos_) {
0621 energyEB_ = new TH1F("energyEB", "Energy for EB Feds (GeV)", 200, histRangeMin_, histRangeMax_);
0622 energyEEM_ = new TH1F("energyEEM", "Energy for EEM Feds (GeV)", 200, histRangeMin_, 10.0);
0623 energyEEP_ = new TH1F("energyEEP", "Energy for EEP Feds (GeV)", 200, histRangeMin_, 10.0);
0624 string canvasTitle = "Energy_Event" + lastPart;
0625 energyCanvas_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(), 300, 60, 500, 200);
0626
0627
0628 energyMapEB_ = init2DEcalHist("EnergyMap", EB_FINE);
0629 energyMapEBcoarse_ = init2DEcalHist("EnergyMap", EB_COARSE);
0630 energyMapEEMcoarse_ = init2DEcalHist("EnergyMap", EEM_COARSE);
0631 energyMapEEM_ = init2DEcalHist("EnergyMap", EEM_FINE);
0632 energyMapEEPcoarse_ = init2DEcalHist("EnergyMap", EEP_COARSE);
0633 energyMapEEP_ = init2DEcalHist("EnergyMap", EEP_FINE);
0634 energyMapCanvas_ = init2DEcalCanvas("EnergyMap_Event" + lastPart);
0635 energyMapCoarseCanvas_ = init2DEcalCanvas("EnergyMapCoarse_Event" + lastPart);
0636 }
0637 if (makeOccupancyHistos_) {
0638
0639 recHitOccupancyEB_ = init2DEcalHist("RecHitOccupancy", EB_FINE);
0640 recHitOccupancyEBcoarse_ = init2DEcalHist("RecHitOccupancy", EB_COARSE);
0641 recHitOccupancyEEMcoarse_ = init2DEcalHist("RecHitOccupancy", EEM_COARSE);
0642 recHitOccupancyEEM_ = init2DEcalHist("RecHitOccupancy", EEM_FINE);
0643 recHitOccupancyEEPcoarse_ = init2DEcalHist("RecHitOccupancy", EEP_COARSE);
0644 recHitOccupancyEEP_ = init2DEcalHist("RecHitOccupancy", EEP_FINE);
0645 recHitOccupancyCanvas_ = init2DEcalCanvas("RecHitOccupancy_Event" + lastPart);
0646 recHitOccupancyCoarseCanvas_ = init2DEcalCanvas("RecHitOccupancyCoarse_Event" + lastPart);
0647
0648
0649 digiOccupancyEB_ = init2DEcalHist("DigiOccupancy", EB_FINE);
0650 digiOccupancyEBcoarse_ = init2DEcalHist("DigiOccupancy", EB_COARSE);
0651 digiOccupancyEEMcoarse_ = init2DEcalHist("DigiOccupancy", EEM_COARSE);
0652 digiOccupancyEEM_ = init2DEcalHist("DigiOccupancy", EEM_FINE);
0653 digiOccupancyEEPcoarse_ = init2DEcalHist("DigiOccupancy", EEP_COARSE);
0654 digiOccupancyEEP_ = init2DEcalHist("DigiOccupancy", EEP_FINE);
0655 digiOccupancyCanvas_ = init2DEcalCanvas("DigiOccupancy_Event" + lastPart);
0656 digiOccupancyCoarseCanvas_ = init2DEcalCanvas("DigiOccupancyCoarse_Event" + lastPart);
0657 }
0658 }
0659
0660 void EcalDisplaysByEvent::deleteEvtByEvtHists() {
0661 delete timingEB_;
0662 delete timingEEM_;
0663 delete timingEEP_;
0664 delete timingMapEB_;
0665 delete timingMapEEM_;
0666 delete timingMapEEP_;
0667 delete timingCanvas_;
0668 delete timingMapCanvas_;
0669 delete energyEB_;
0670 delete energyEEM_;
0671 delete energyEEP_;
0672 delete energyMapEB_;
0673 delete energyMapEEM_;
0674 delete energyMapEEP_;
0675 delete energyMapEBcoarse_;
0676 delete energyMapEEMcoarse_;
0677 delete energyMapEEPcoarse_;
0678 delete energyCanvas_;
0679 delete energyMapCanvas_;
0680 delete energyMapCoarseCanvas_;
0681 delete recHitOccupancyEB_;
0682 delete recHitOccupancyEEP_;
0683 delete recHitOccupancyEEM_;
0684 delete recHitOccupancyEBcoarse_;
0685 delete recHitOccupancyEEMcoarse_;
0686 delete recHitOccupancyEEPcoarse_;
0687 delete digiOccupancyEB_;
0688 delete digiOccupancyEEM_;
0689 delete digiOccupancyEEP_;
0690 delete digiOccupancyEBcoarse_;
0691 delete digiOccupancyEEMcoarse_;
0692 delete digiOccupancyEEPcoarse_;
0693 delete recHitOccupancyCanvas_;
0694 delete recHitOccupancyCoarseCanvas_;
0695 delete digiOccupancyCanvas_;
0696 delete digiOccupancyCoarseCanvas_;
0697 }
0698
0699 void EcalDisplaysByEvent::initAllEventHistos() {
0700 string canvasTitle = "Timing_AllEvents";
0701 timingEBAll_ = new TH1F("timeForAllFedsEBAll", "timeForAllFeds;Relative Time (1 clock = 25ns)", 78, -7, 7);
0702 timingEEMAll_ = new TH1F("timeForAllFedsEEMAll", "timeForAllFeds_EEM;Relative Time (1 clock = 25ns)", 78, -7, 7);
0703 timingEEPAll_ = new TH1F("timeForAllFedsEEPAll", "timeForAllFeds_EEP;Relative Time (1 clock = 25ns)", 78, -7, 7);
0704 timingCanvasAll_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(), 300, 60, 500, 200);
0705 timingMapEBAll_ = init3DEcalHist("TimingMapA", EB_FINE);
0706 timingMapEEMAll_ = init3DEcalHist("TimingMapA", EEM_FINE);
0707 timingMapEEPAll_ = init3DEcalHist("TimingMapA", EEP_FINE);
0708 timingMapCanvasAll_ = init2DEcalCanvas("TimingMap_AllEvents");
0709 timingMapEBCoarseAll_ = init3DEcalHist("TimingMapA", EB_COARSE);
0710 timingMapEEMCoarseAll_ = init3DEcalHist("TimingMapA", EEM_COARSE);
0711 timingMapEEPCoarseAll_ = init3DEcalHist("TimingMapA", EEP_COARSE);
0712
0713 energyEBAll_ = new TH1F("energyEBAllEvents", "Energy for EB Feds (GeV)", 200, histRangeMin_, histRangeMax_);
0714 energyEEMAll_ = new TH1F("energyEEMAllEvents", "Energy for EEM Feds (GeV)", 200, histRangeMin_, 10.0);
0715 energyEEPAll_ = new TH1F("energyEEPAllEvents", "Energy for EEP Feds (GeV)", 200, histRangeMin_, 10.0);
0716 canvasTitle = "Energy_AllEvents";
0717 energyCanvasAll_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(), 300, 60, 500, 200);
0718
0719
0720 energyMapEBAll_ = init2DEcalHist("EnergyMapA", EB_FINE);
0721 energyMapEBcoarseAll_ = init2DEcalHist("EnergyMapA", EB_COARSE);
0722 energyMapEEMcoarseAll_ = init2DEcalHist("EnergyMapA", EEM_COARSE);
0723 energyMapEEMAll_ = init2DEcalHist("EnergyMapA", EEM_FINE);
0724 energyMapEEPcoarseAll_ = init2DEcalHist("EnergyMapA", EEP_COARSE);
0725 energyMapEEPAll_ = init2DEcalHist("EnergyMapA", EEP_FINE);
0726 energyMapCanvasAll_ = init2DEcalCanvas("EnergyMap_AllEvents");
0727 energyMapCoarseCanvasAll_ = init2DEcalCanvas("EnergyMapCoarse_AllEvents");
0728
0729 recHitOccupancyEBAll_ = init2DEcalHist("RecHitOccupancyA", EB_FINE);
0730 recHitOccupancyEBcoarseAll_ = init2DEcalHist("RecHitOccupancyA", EB_COARSE);
0731 recHitOccupancyEEMcoarseAll_ = init2DEcalHist("RecHitOccupancyA", EEM_COARSE);
0732 recHitOccupancyEEMAll_ = init2DEcalHist("RecHitOccupancyA", EEM_FINE);
0733 recHitOccupancyEEPcoarseAll_ = init2DEcalHist("RecHitOccupancyA", EEP_COARSE);
0734 recHitOccupancyEEPAll_ = init2DEcalHist("RecHitOccupancyA", EEP_FINE);
0735 recHitOccupancyCanvasAll_ = init2DEcalCanvas("RecHitOccupancy_AllEvents");
0736 recHitOccupancyCoarseCanvasAll_ = init2DEcalCanvas("RecHitOccupancyCoarse_AllEvents");
0737
0738
0739 digiOccupancyEBAll_ = init2DEcalHist("DigiOccupancyA", EB_FINE);
0740 digiOccupancyEBcoarseAll_ = init2DEcalHist("DigiOccupancyA", EB_COARSE);
0741 digiOccupancyEEMcoarseAll_ = init2DEcalHist("DigiOccupancyA", EEM_COARSE);
0742 digiOccupancyEEMAll_ = init2DEcalHist("DigiOccupancyA", EEM_FINE);
0743 digiOccupancyEEPcoarseAll_ = init2DEcalHist("DigiOccupancyA", EEP_COARSE);
0744 digiOccupancyEEPAll_ = init2DEcalHist("DigiOccupancyA", EEP_FINE);
0745 digiOccupancyCanvasAll_ = init2DEcalCanvas("DigiOccupancy_AllEvents");
0746 digiOccupancyCoarseCanvasAll_ = init2DEcalCanvas("DigiOccupancyCoarse_AllEvents");
0747 }
0748
0749 TH3F* EcalDisplaysByEvent::init3DEcalHist(std::string histTypeName, int subDet) {
0750 TH3F* hist;
0751 bool isBarrel = (subDet == EB_FINE || subDet == EB_COARSE) ? true : false;
0752 bool isCoarse = (subDet == EB_COARSE || subDet == EEM_COARSE || subDet == EEP_COARSE) ? true : false;
0753 bool isEEM = (subDet == EEM_FINE || subDet == EEM_COARSE) ? true : false;
0754 std::string histName = histTypeName;
0755 std::string histTitle = histTypeName;
0756 double ttEtaBins[36] = {-85, -80, -75, -70, -65, -60, -55, -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0,
0757 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86};
0758 double modEtaBins[10] = {-85, -65, -45, -25, 0, 1, 26, 46, 66, 86};
0759 double ttPhiBins[73];
0760 double modPhiBins[19];
0761 double timingBins[79];
0762 for (int i = 0; i < 79; ++i) {
0763 timingBins[i] = 6 - 7. + double(i) * 14. / 78.;
0764 if (i < 73) {
0765 ttPhiBins[i] = 1 + 5 * i;
0766 if (i < 19) {
0767 modPhiBins[i] = 1 + 20 * i;
0768 }
0769 }
0770 }
0771
0772 if (isBarrel) {
0773 histName = histName + "EB";
0774 histTitle = histTitle + " EB";
0775 if (isCoarse) {
0776 histName = histName + "Coarse";
0777 histTitle = histTitle + " by Module Nominal value = 6;iphi;ieta ";
0778 hist = new TH3F(histName.c_str(), histTitle.c_str(), 18, modPhiBins, 9, modEtaBins, 78, timingBins);
0779 } else {
0780 histTitle = histTitle + " by TT Nominal value = 6;iphi;ieta";
0781 hist = new TH3F(histName.c_str(), histTitle.c_str(), 360 / 5, ttPhiBins, 35, ttEtaBins, 78, timingBins);
0782 }
0783 } else {
0784 double ttXBins[21];
0785 double ttYBins[21];
0786 for (int i = 0; i != 21; ++i) {
0787 ttXBins[i] = 1 + 5 * i;
0788 ttYBins[i] = 1 + 5 * i;
0789 }
0790 if (isEEM) {
0791 histName = histName + "EEM";
0792 histTitle = histTitle + " EEM";
0793 } else {
0794 histName = histName + "EEP";
0795 histTitle = histTitle + " EEP";
0796 }
0797 if (isCoarse) {
0798 histName = histName + "Coarse";
0799 histTitle = histTitle + " by Module Nominal value = 6;ix;iy";
0800 hist = new TH3F(histName.c_str(), histTitle.c_str(), 20, ttXBins, 20, ttYBins, 78, timingBins);
0801 } else {
0802 histTitle = histTitle + " by TT Nominal value = 6;ix;iy";
0803 hist = new TH3F(histName.c_str(), histTitle.c_str(), 20, ttXBins, 20, ttYBins, 78, timingBins);
0804 }
0805 }
0806 return hist;
0807 }
0808
0809 TH2F* EcalDisplaysByEvent::init2DEcalHist(std::string histTypeName, int subDet) {
0810 TH2F* hist;
0811 bool isBarrel = (subDet == EB_FINE || subDet == EB_COARSE) ? true : false;
0812 bool isCoarse = (subDet == EB_COARSE || subDet == EEM_COARSE || subDet == EEP_COARSE) ? true : false;
0813 bool isEEM = (subDet == EEM_FINE || subDet == EEM_COARSE) ? true : false;
0814 std::string histName = histTypeName;
0815 std::string histTitle = histTypeName;
0816 if (isBarrel) {
0817 histName = histName + "EB";
0818 histTitle = histTitle + " EB";
0819 if (isCoarse) {
0820 histName = histName + "Coarse";
0821 histTitle = histTitle + " Coarse;iphi;ieta";
0822 double ttEtaBins[36] = {-85, -80, -75, -70, -65, -60, -55, -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0,
0823 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86};
0824 hist = new TH2F(histName.c_str(), histTitle.c_str(), 360 / 5, 1, 361., 35, ttEtaBins);
0825 } else {
0826 histTitle = histTitle + ";iphi;ieta";
0827 hist = new TH2F(histName.c_str(), histTitle.c_str(), 360, 1, 361., 172, -86, 86);
0828 }
0829 } else {
0830 if (isEEM) {
0831 histName = histName + "EEM";
0832 histTitle = histTitle + " EEM";
0833 } else {
0834 histName = histName + "EEP";
0835 histTitle = histTitle + " EEP";
0836 }
0837 if (isCoarse) {
0838 histName = histName + "Coarse";
0839 histTitle = histTitle + " Coarse;ix;iy";
0840 hist = new TH2F(histName.c_str(), histTitle.c_str(), 20, 1, 101, 20, 1, 101);
0841 } else {
0842 histTitle = histTitle + ";ix;iy";
0843 hist = new TH2F(histName.c_str(), histTitle.c_str(), 100, 1, 101, 100, 1, 101);
0844 }
0845 }
0846 return hist;
0847 }
0848
0849 TCanvas* EcalDisplaysByEvent::init2DEcalCanvas(std::string canvasTitle) {
0850 TCanvas* canvas = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(), 300, 60, 500, 200);
0851 return canvas;
0852 }
0853
0854 void EcalDisplaysByEvent::drawHistos() {
0855 if (makeTimingHistos_) {
0856
0857 drawCanvas(timingCanvas_, timingEEM_, timingEB_, timingEEP_);
0858
0859 drawCanvas(timingMapCanvas_, timingMapEEM_, timingMapEB_, timingMapEEP_);
0860 }
0861 if (makeEnergyHistos_) {
0862
0863 drawCanvas(energyCanvas_, energyEEM_, energyEB_, energyEEP_);
0864
0865 drawCanvas(energyMapCanvas_, energyMapEEM_, energyMapEB_, energyMapEEP_);
0866 drawCanvas(energyMapCoarseCanvas_, energyMapEEMcoarse_, energyMapEBcoarse_, energyMapEEPcoarse_);
0867 }
0868 if (makeOccupancyHistos_) {
0869
0870 drawCanvas(recHitOccupancyCanvas_, recHitOccupancyEEM_, recHitOccupancyEB_, recHitOccupancyEEP_);
0871 drawCanvas(
0872 recHitOccupancyCoarseCanvas_, recHitOccupancyEEMcoarse_, recHitOccupancyEBcoarse_, recHitOccupancyEEPcoarse_);
0873
0874 drawCanvas(digiOccupancyCanvas_, digiOccupancyEEM_, digiOccupancyEB_, digiOccupancyEEP_);
0875 drawCanvas(digiOccupancyCoarseCanvas_, digiOccupancyEEMcoarse_, digiOccupancyEBcoarse_, digiOccupancyEEPcoarse_);
0876 }
0877 }
0878
0879 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH1F* hist1, TH1F* hist2, TH1F* hist3) {
0880 canvas->Divide(1, 2);
0881 canvas->cd(1)->Divide(2, 1);
0882 canvas->cd(1)->cd(1);
0883 hist1->Draw();
0884 canvas->cd(2);
0885 hist2->Draw();
0886 canvas->cd(1)->cd(2);
0887 hist3->Draw();
0888 histoCanvasNamesVector->push_back(canvas->GetName());
0889 canvas->SetCanvasSize(500, 500);
0890 canvas->SetFixedAspectRatio(true);
0891 canvas->Write();
0892 }
0893
0894 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH2F* hist1, TH2F* hist2, TH2F* hist3) {
0895 canvas->Divide(1, 2);
0896 canvas->cd(1)->Divide(2, 1);
0897
0898 canvas->cd(1)->cd(1);
0899 hist1->Draw("colz");
0900 drawEELines();
0901
0902 canvas->cd(2);
0903 hist2->Draw("colz");
0904 hist2->GetXaxis()->SetNdivisions(-18);
0905 hist2->GetYaxis()->SetNdivisions(2);
0906 canvas->GetPad(2)->SetGridx(1);
0907 canvas->GetPad(2)->SetGridy(1);
0908
0909 canvas->cd(1)->cd(2);
0910 hist3->Draw("colz");
0911 drawEELines();
0912 histoCanvasNamesVector->push_back(canvas->GetName());
0913 canvas->SetCanvasSize(500, 500);
0914 canvas->SetFixedAspectRatio(true);
0915 canvas->Write();
0916 }
0917
0918 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH3F* hist1, TH3F* hist2, TH3F* hist3) {
0919 if (canvas == timingMapCoarseCanvas_) {
0920 canvas->cd();
0921 TProfile2D* profile2 = (TProfile2D*)hist2->Project3DProfile("yx");
0922 profile2->Draw("colz");
0923 drawTimingErrors(profile2);
0924 } else {
0925 canvas->Divide(1, 2);
0926 canvas->cd(1)->Divide(2, 1);
0927
0928 canvas->cd(1)->cd(1);
0929 TProfile2D* profile1 = (TProfile2D*)hist1->Project3DProfile("yx");
0930 profile1->Draw("colz");
0931 drawEELines();
0932
0933 canvas->cd(2);
0934 TProfile2D* profile2 = (TProfile2D*)hist2->Project3DProfile("yx");
0935 profile2->Draw("colz");
0936 profile2->GetXaxis()->SetNdivisions(-18);
0937 profile2->GetYaxis()->SetNdivisions(2);
0938 canvas->GetPad(2)->SetGridx(1);
0939 canvas->GetPad(2)->SetGridy(1);
0940
0941 canvas->cd(1)->cd(2);
0942 TProfile2D* profile3 = (TProfile2D*)hist3->Project3DProfile("yx");
0943 profile3->Draw("colz");
0944 drawEELines();
0945 }
0946 histoCanvasNamesVector->push_back(canvas->GetName());
0947 canvas->SetCanvasSize(500, 500);
0948 canvas->SetFixedAspectRatio(true);
0949 canvas->Write();
0950 }
0951
0952 void EcalDisplaysByEvent::drawTimingErrors(TProfile2D* profile) {
0953 int nxb = profile->GetNbinsX();
0954 int nyb = profile->GetNbinsY();
0955 char tempErr[200];
0956 for (int i = 0; i != nxb; ++i) {
0957 for (int j = 0; j != nyb; ++j) {
0958 int xb = i + 1;
0959 int yb = j + 1;
0960
0961 double xcorr = profile->GetBinCenter(xb);
0962 double ycorr = profile->GetBinCenter(yb);
0963 sprintf(tempErr, "%0.2f", profile->GetBinError(xb, yb));
0964 int nBin = profile->GetBin(xb, yb, 0);
0965 int nBinEntries = (int)profile->GetBinEntries(nBin);
0966 if (nBinEntries != 0) {
0967 TLatex* tex = new TLatex(xcorr, ycorr, tempErr);
0968 tex->SetTextAlign(23);
0969 tex->SetTextSize(42);
0970 tex->SetTextSize(0.025);
0971 tex->SetLineWidth(2);
0972 tex->Draw();
0973 delete tex;
0974 }
0975 sprintf(tempErr, "%i", nBinEntries);
0976 if (nBinEntries != 0) {
0977 TLatex* tex = new TLatex(xcorr, ycorr, tempErr);
0978 tex->SetTextAlign(21);
0979 tex->SetTextFont(42);
0980 tex->SetTextSize(0.025);
0981 tex->SetLineWidth(2);
0982 tex->Draw();
0983 delete tex;
0984 }
0985 }
0986 }
0987 }
0988
0989 void EcalDisplaysByEvent::drawEELines() {
0990 int ixSectorsEE[202] = {
0991 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 55, 55, 45, 45, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 40, 40,
0992 41, 41, 42, 42, 43, 43, 45, 45, 55, 55, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 0, 100, 100, 97, 97, 95,
0993 95, 92, 92, 87, 87, 85, 85, 80, 80, 75, 75, 65, 65, 60, 60, 40, 40, 35, 35, 25, 25, 20, 20, 15, 15, 13,
0994 13, 8, 8, 5, 5, 3, 3, 0, 0, 3, 3, 5, 5, 8, 8, 13, 13, 15, 15, 20, 20, 25, 25, 35, 35, 40,
0995 40, 60, 60, 65, 65, 75, 75, 80, 80, 85, 85, 87, 87, 92, 92, 95, 95, 97, 97, 100, 100, 0, 61, 65, 65, 70,
0996 70, 80, 80, 90, 90, 92, 0, 61, 65, 65, 90, 90, 97, 0, 57, 60, 60, 65, 65, 70, 70, 75, 75, 80, 80, 0,
0997 50, 50, 0, 43, 40, 40, 35, 35, 30, 30, 25, 25, 20, 20, 0, 39, 35, 35, 10, 10, 3, 0, 39, 35, 35, 30,
0998 30, 20, 20, 10, 10, 8, 0, 45, 45, 40, 40, 35, 35, 0, 55, 55, 60, 60, 65, 65};
0999
1000 int iySectorsEE[202] = {50, 55, 55, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 60, 60, 59, 59, 58, 58, 57, 57, 55, 55,
1001 45, 45, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 45, 45, 50,
1002 0, 50, 60, 60, 65, 65, 75, 75, 80, 80, 85, 85, 87, 87, 92, 92, 95, 95, 97, 97, 100, 100, 97,
1003 97, 95, 95, 92, 92, 87, 87, 85, 85, 80, 80, 75, 75, 65, 65, 60, 60, 40, 40, 35, 35, 25, 25,
1004 20, 20, 15, 15, 13, 13, 8, 8, 5, 5, 3, 3, 0, 0, 3, 3, 5, 5, 8, 8, 13, 13, 15,
1005 15, 20, 20, 25, 25, 35, 35, 40, 40, 50, 0, 45, 45, 40, 40, 35, 35, 30, 30, 25, 25, 0, 50,
1006 50, 55, 55, 60, 60, 0, 60, 60, 65, 65, 70, 70, 75, 75, 85, 85, 87, 0, 61, 100, 0, 60, 60,
1007 65, 65, 70, 70, 75, 75, 85, 85, 87, 0, 50, 50, 55, 55, 60, 60, 0, 45, 45, 40, 40, 35, 35,
1008 30, 30, 25, 25, 0, 39, 30, 30, 15, 15, 5, 0, 39, 30, 30, 15, 15, 5};
1009
1010 for (int i = 0; i < 202; i++) {
1011 ixSectorsEE[i] += 1;
1012 iySectorsEE[i] += 1;
1013
1014 }
1015
1016 TLine l;
1017 l.SetLineWidth(1);
1018 for (int i = 0; i < 201; i = i + 1) {
1019 if ((ixSectorsEE[i] != 1 || iySectorsEE[i] != 1) && (ixSectorsEE[i + 1] != 1 || iySectorsEE[i + 1] != 1)) {
1020 l.DrawLine(ixSectorsEE[i], iySectorsEE[i], ixSectorsEE[i + 1], iySectorsEE[i + 1]);
1021 }
1022 }
1023 }