00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "CaloOnlineTools/EcalTools/plugins/EcalDisplaysByEvent.h"
00021 #include "RecoCaloTools/Navigation/interface/CaloNavigator.h"
00022 #include "TLatex.h"
00023 #include "TLine.h"
00024 #include "TProfile2D.h"
00025 #include <utility>
00026 #include <string>
00027 #include <vector>
00028 using namespace edm;
00029 using namespace std;
00030
00031
00032
00033
00034
00035
00036
00037
00038 float EcalDisplaysByEvent::gainRatio[3] = { 1., 2. , 12. };
00039 edm::Service<TFileService> EcalDisplaysByEvent::fileService;
00040
00041
00042
00043
00044 EcalDisplaysByEvent::EcalDisplaysByEvent(const edm::ParameterSet& iConfig) :
00045 EBRecHitCollection_ (iConfig.getParameter<edm::InputTag>("EcalRecHitCollectionEB")),
00046 EERecHitCollection_ (iConfig.getParameter<edm::InputTag>("EcalRecHitCollectionEE")),
00047 EBDigis_ (iConfig.getParameter<edm::InputTag>("EBDigiCollection")),
00048 EEDigis_ (iConfig.getParameter<edm::InputTag>("EEDigiCollection")),
00049 headerProducer_ (iConfig.getParameter<edm::InputTag> ("headerProducer")),
00050 runNum_(-1),
00051 side_ (iConfig.getUntrackedParameter<int>("side", 3)),
00052 threshold_ (iConfig.getUntrackedParameter<double>("amplitudeThreshold", 0.5)),
00053 minTimingAmp_ (iConfig.getUntrackedParameter<double>("minimumTimingAmplitude", 0.100)),
00054 makeDigiGraphs_ (iConfig.getUntrackedParameter<bool>("makeDigiGraphs", false)),
00055 makeTimingHistos_ (iConfig.getUntrackedParameter<bool>("makeTimingHistos", true)),
00056 makeEnergyHistos_ (iConfig.getUntrackedParameter<bool>("makeEnergyHistos", true)),
00057 makeOccupancyHistos_ (iConfig.getUntrackedParameter<bool>("makeOccupancyHistos", true)),
00058 histRangeMin_ (iConfig.getUntrackedParameter<double>("histogramMinRange",0.0)),
00059 histRangeMax_ (iConfig.getUntrackedParameter<double>("histogramMaxRange",1.8)),
00060 minTimingEnergyEB_ (iConfig.getUntrackedParameter<double>("minTimingEnergyEB",0.0)),
00061 minTimingEnergyEE_ (iConfig.getUntrackedParameter<double>("minTimingEnergyEE",0.0))
00062 {
00063 vector<int> listDefaults;
00064 listDefaults.push_back(-1);
00065
00066 maskedChannels_ = iConfig.getUntrackedParameter<vector<int> >("maskedChannels", listDefaults);
00067 maskedFEDs_ = iConfig.getUntrackedParameter<vector<int> >("maskedFEDs", listDefaults);
00068 seedCrys_ = iConfig.getUntrackedParameter<vector<int> >("seedCrys",listDefaults);
00069
00070 vector<string> defaultMaskedEBs;
00071 defaultMaskedEBs.push_back("none");
00072 maskedEBs_ = iConfig.getUntrackedParameter<vector<string> >("maskedEBs",defaultMaskedEBs);
00073
00074 fedMap_ = new EcalFedMap();
00075
00076 string title1 = "Jitter for all FEDs all events";
00077 string name1 = "JitterAllFEDsAllEvents";
00078 allFedsTimingHist_ = fileService->make<TH1F>(name1.c_str(),title1.c_str(),150,-7,7);
00079
00080
00081 if(maskedFEDs_[0]==-1)
00082 {
00083
00084 if(maskedEBs_[0] != "none")
00085 {
00086 maskedFEDs_.clear();
00087 for(vector<string>::const_iterator ebItr = maskedEBs_.begin(); ebItr != maskedEBs_.end(); ++ebItr)
00088 {
00089 maskedFEDs_.push_back(fedMap_->getFedFromSlice(*ebItr));
00090 }
00091 }
00092 }
00093
00094 for (int i=0; i<10; i++)
00095 abscissa[i] = i;
00096
00097 naiveEvtNum_ = 0;
00098
00099 initAllEventHistos();
00100 }
00101
00102
00103 EcalDisplaysByEvent::~EcalDisplaysByEvent()
00104 {
00105 }
00106
00107
00108
00109
00110
00111
00112
00113 void
00114 EcalDisplaysByEvent::beginRun(edm::Run const &, edm::EventSetup const & c)
00115 {
00116 edm::ESHandle< EcalElectronicsMapping > handle;
00117 c.get< EcalMappingRcd >().get(handle);
00118 ecalElectronicsMap_ = handle.product();
00119 }
00120
00121
00122 void
00123 EcalDisplaysByEvent::analyze(edm::Event const & iEvent, edm::EventSetup const & iSetup)
00124 {
00125
00126
00127
00128 edm::Handle<EcalRawDataCollection> DCCHeaders;
00129 iEvent.getByLabel(headerProducer_, DCCHeaders);
00130
00131 for (EcalRawDataCollection::const_iterator headerItr= DCCHeaders->begin();
00132 headerItr != DCCHeaders->end ();
00133 ++headerItr)
00134 {
00135 FEDsAndDCCHeaders_[headerItr->id()+600] = *headerItr;
00136 }
00137
00138 int ievt = iEvent.id().event();
00139 naiveEvtNum_++;
00140
00141 if(runNum_==-1)
00142 {
00143 runNum_ = iEvent.id().run();
00144 canvasNames_ = fileService->make<TTree>("canvasNames","Names of written canvases");
00145 names = new std::vector<string>();
00146 canvasNames_->Branch("names","vector<string>",&names);
00147
00148 histoCanvasNames_ = fileService->make<TTree>("histoCanvasNames","Names of written canvases with histos");
00149 histoCanvasNamesVector = new std::vector<string>();
00150 histoCanvasNames_->Branch("histoCanvasNamesVector","vector<string>",&histoCanvasNamesVector);
00151 }
00152
00153
00154 listEBChannels.clear();
00155 listEEChannels.clear();
00156
00157
00158 Handle<EcalRecHitCollection> EBhits;
00159 Handle<EcalRecHitCollection> EEhits;
00160 ESHandle<CaloTopology> caloTopo;
00161 iSetup.get<CaloTopologyRecord>().get(caloTopo);
00162 iEvent.getByLabel(EBRecHitCollection_, EBhits);
00163 iEvent.getByLabel(EERecHitCollection_, EEhits);
00164 iEvent.getByLabel(EBDigis_, EBdigisHandle);
00165 iEvent.getByLabel(EEDigis_, EEdigisHandle);
00166
00167
00168 initEvtByEvtHists(naiveEvtNum_, ievt);
00169
00170 bool hasEBdigis = false;
00171 bool hasEEdigis = false;
00172 if(EBdigisHandle->size() > 0)
00173 hasEBdigis = true;
00174 if(EEdigisHandle->size() > 0)
00175 hasEEdigis = true;
00176
00177
00178 if(makeDigiGraphs_)
00179 {
00180 if(hasEBdigis)
00181 selectHits(EBhits, ievt, caloTopo);
00182 if(hasEEdigis)
00183 selectHits(EEhits, ievt, caloTopo);
00184 }
00185
00186
00187 if(hasEBdigis)
00188 {
00189 makeHistos(EBdigisHandle);
00190 makeHistos(EBhits);
00191 }
00192 if(hasEEdigis)
00193 {
00194 makeHistos(EEdigisHandle);
00195 makeHistos(EEhits);
00196 }
00197
00198 if(hasEBdigis || hasEEdigis)
00199 drawHistos();
00200
00201 deleteEvtByEvtHists();
00202 }
00203
00204
00205 void EcalDisplaysByEvent::selectHits(Handle<EcalRecHitCollection> hits,
00206 int ievt, ESHandle<CaloTopology> caloTopo)
00207 {
00208 for (EcalRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr)
00209 {
00210 EcalRecHit hit = (*hitItr);
00211 DetId det = hit.id();
00212 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
00213 int FEDid = 600+elecId.dccId();
00214 bool isBarrel = true;
00215 if(FEDid < 610 || FEDid > 645)
00216 isBarrel = false;
00217 int cryIndex = isBarrel ? ((EBDetId)det).hashedIndex() : getEEIndex(elecId);
00218 int ic = isBarrel ? ((EBDetId)det).ic() : getEEIndex(elecId);
00219
00220 float ampli = hit.energy();
00221
00222 vector<int>::iterator result;
00223 result = find(maskedFEDs_.begin(), maskedFEDs_.end(), FEDid);
00224 if(result != maskedFEDs_.end())
00225 {
00226
00227 continue;
00228 }
00229 result = find(maskedChannels_.begin(), maskedChannels_.end(), cryIndex);
00230 if (result != maskedChannels_.end())
00231 {
00232
00233 continue;
00234 }
00235 bool cryIsInList = false;
00236 result = find(seedCrys_.begin(), seedCrys_.end(), cryIndex);
00237 if (result != seedCrys_.end())
00238 cryIsInList = true;
00239
00240
00241
00242 if(cryIsInList || (seedCrys_.empty() && ampli > threshold_))
00243 {
00244
00245 crysAndAmplitudesMap_[cryIndex] = ampli;
00246 string name = "Digis_Event" + intToString(naiveEvtNum_) + "_ic" + intToString(ic)
00247 + "_FED" + intToString(FEDid);
00248 string title = "Digis";
00249 string seed = "ic" + intToString(ic) + "_FED" + intToString(FEDid);
00250 int freq=1;
00251 pair<map<string,int>::iterator,bool> pair = seedFrequencyMap_.insert(make_pair(seed,freq));
00252 if(!pair.second)
00253 {
00254 ++(pair.first->second);
00255 }
00256
00257
00258 TCanvas can(name.c_str(),title.c_str(),200,50,900,900);
00259 can.Divide(side_,side_);
00260 TGraph* myGraph;
00261
00262 CaloNavigator<DetId> cursor = CaloNavigator<DetId>(det,caloTopo->getSubdetectorTopology(det));
00263
00264 for(int j=side_/2; j>=-side_/2; --j)
00265 {
00266 for(int i=-side_/2; i<=side_/2; ++i)
00267 {
00268 cursor.home();
00269 cursor.offsetBy(i,j);
00270 can.cd(i+1+side_/2+side_*(1-j));
00271 myGraph = selectDigi(*cursor,ievt);
00272 myGraph->Draw("A*");
00273 }
00274 }
00275 can.Write();
00276 names->push_back(name);
00277 }
00278 }
00279 }
00280
00281 TGraph* EcalDisplaysByEvent::selectDigi(DetId thisDet, int ievt)
00282 {
00283 int emptyY[10];
00284 for (int i=0; i<10; i++)
00285 emptyY[i] = 0;
00286 TGraph* emptyGraph = fileService->make<TGraph>(10, abscissa, emptyY);
00287 emptyGraph->SetTitle("NOT ECAL");
00288
00289
00290 if(thisDet.det() != DetId::Ecal)
00291 return emptyGraph;
00292
00293 emptyGraph->SetTitle("NO DIGIS");
00294
00295 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(thisDet);
00296 int FEDid = 600+elecId.dccId();
00297 bool isBarrel = true;
00298 if(FEDid < 610 || FEDid > 645)
00299 isBarrel = false;
00300 int cryIndex = isBarrel ? ((EBDetId)thisDet).hashedIndex() : getEEIndex(elecId);
00301 int ic = isBarrel ? ((EBDetId)thisDet).ic() : cryIndex;
00302
00303 string sliceName = fedMap_->getSliceFromFed(FEDid);
00304 EcalDataFrame df;
00305 if(isBarrel)
00306 {
00307 EBDigiCollection::const_iterator digiItr = EBdigisHandle->begin();
00308 while(digiItr != EBdigisHandle->end() && ((*digiItr).id() != (EBDetId)thisDet))
00309 {
00310 ++digiItr;
00311 }
00312 if(digiItr==EBdigisHandle->end())
00313 {
00314
00315
00316 return emptyGraph;
00317 }
00318 else
00319 df = *digiItr;
00320 }
00321 else
00322 {
00323 EEDigiCollection::const_iterator digiItr = EEdigisHandle->begin();
00324 while(digiItr != EEdigisHandle->end() && ((*digiItr).id() != (EEDetId)thisDet))
00325 {
00326 ++digiItr;
00327 }
00328 if(digiItr==EEdigisHandle->end())
00329 {
00330
00331
00332 return emptyGraph;
00333 }
00334 else df = *digiItr;
00335 }
00336
00337 int gainId = FEDsAndDCCHeaders_[FEDid].getMgpaGain();
00338 int gainHuman;
00339 if (gainId ==1) gainHuman =12;
00340 else if (gainId ==2) gainHuman =6;
00341 else if (gainId ==3) gainHuman =1;
00342 else gainHuman =-1;
00343
00344 double pedestal = 200;
00345
00346 emptyGraph->SetTitle("FIRST TWO SAMPLES NOT GAIN12");
00347 if(df.sample(0).gainId()!=1 || df.sample(1).gainId()!=1) return emptyGraph;
00348 else {
00349 ordinate[0] = df.sample(0).adc();
00350 ordinate[1] = df.sample(1).adc();
00351 pedestal = (double)(ordinate[0]+ordinate[1])/(double)2;
00352 }
00353
00354
00355 for (int i=0; i < df.size(); ++i ) {
00356 if (df.sample(i).gainId() != 0)
00357 ordinate[i] = (int)(pedestal+(df.sample(i).adc()-pedestal)*gainRatio[df.sample(i).gainId()-1]);
00358 else
00359 ordinate[i] = 49152;
00360 }
00361
00362 TGraph* oneGraph = fileService->make<TGraph>(10, abscissa, ordinate);
00363 string name = "Graph_ev" + intToString(naiveEvtNum_) + "_ic" + intToString(ic)
00364 + "_FED" + intToString(FEDid);
00365 string gainString = (gainId==1) ? "Free" : intToString(gainHuman);
00366 string title = "Event" + intToString(naiveEvtNum_) + "_lv1a" + intToString(ievt) +
00367 "_ic" + intToString(ic) + "_" + sliceName + "_gain" + gainString;
00368
00369 float energy = 0;
00370 map<int,float>::const_iterator itr;
00371 itr = crysAndAmplitudesMap_.find(cryIndex);
00372 if(itr!=crysAndAmplitudesMap_.end())
00373 {
00374
00375 energy = (float) itr->second;
00376 }
00377
00378
00379
00380 title+="_Energy"+floatToString(round(energy*1000));
00381
00382 oneGraph->SetTitle(title.c_str());
00383 oneGraph->SetName(name.c_str());
00384 oneGraph->GetXaxis()->SetTitle("sample");
00385 oneGraph->GetYaxis()->SetTitle("ADC");
00386 return oneGraph;
00387 }
00388
00389 int EcalDisplaysByEvent::getEEIndex(EcalElectronicsId elecId)
00390 {
00391 int FEDid = 600+elecId.dccId();
00392 return 10000*FEDid+100*elecId.towerId()+5*(elecId.stripId()-1)+elecId.xtalId();
00393 }
00394
00395 void EcalDisplaysByEvent::makeHistos(Handle<EBDigiCollection> ebDigiHandle) {
00396 const EBDigiCollection* ebDigis = ebDigiHandle.product();
00397 for(EBDigiCollection::const_iterator digiItr = ebDigis->begin(); digiItr != ebDigis->end(); ++digiItr) {
00398 EBDetId digiId = digiItr->id();
00399 int ieta = digiId.ieta();
00400 int iphi = digiId.iphi();
00401 digiOccupancyEBAll_->Fill(iphi,ieta);
00402 digiOccupancyEBcoarseAll_->Fill(iphi,ieta);
00403 if(makeOccupancyHistos_)
00404 {
00405 digiOccupancyEB_->Fill(iphi,ieta);
00406 digiOccupancyEBcoarse_->Fill(iphi,ieta);
00407 }
00408 }
00409 }
00410
00411 void EcalDisplaysByEvent::makeHistos(Handle<EEDigiCollection> eeDigiHandle) {
00412 const EEDigiCollection* eeDigis = eeDigiHandle.product();
00413 for(EEDigiCollection::const_iterator digiItr = eeDigis->begin(); digiItr != eeDigis->end(); ++digiItr) {
00414 DetId det = digiItr->id();
00415 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
00416 size_t FEDid = 600+elecId.dccId();
00417 bool isEEM = false;
00418 if(FEDid < 610)
00419 isEEM = true;
00420 EEDetId digiId = digiItr->id();
00421 int ieta = digiId.iy();
00422 int iphi = digiId.ix();
00423 if(isEEM)
00424 {
00425 digiOccupancyEEMAll_->Fill(iphi,ieta);
00426 digiOccupancyEEMcoarseAll_->Fill(iphi,ieta);
00427 if(makeOccupancyHistos_)
00428 {
00429 digiOccupancyEEMcoarse_->Fill(iphi,ieta);
00430 digiOccupancyEEM_->Fill(iphi,ieta);
00431 }
00432 }
00433 else
00434 {
00435 digiOccupancyEEPAll_->Fill(iphi,ieta);
00436 digiOccupancyEEPcoarseAll_->Fill(iphi,ieta);
00437 if(makeOccupancyHistos_)
00438 {
00439 digiOccupancyEEP_->Fill(iphi,ieta);
00440 digiOccupancyEEPcoarse_->Fill(iphi,ieta);
00441 }
00442 }
00443 }
00444 }
00445
00446 void EcalDisplaysByEvent::makeHistos(Handle<EcalRecHitCollection> hits)
00447 {
00448 for (EcalRecHitCollection::const_iterator hitItr = hits->begin(); hitItr != hits->end(); ++hitItr)
00449 {
00450 EcalRecHit hit = (*hitItr);
00451 DetId det = hit.id();
00452 EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(det);
00453 int FEDid = 600+elecId.dccId();
00454 bool isBarrel = true;
00455 bool isEEM = false;
00456 if(FEDid < 610 || FEDid > 645)
00457 {
00458 isBarrel = false;
00459 if(FEDid < 610)
00460 isEEM = true;
00461 }
00462 int iphi = isBarrel ? ((EBDetId)det).iphi() : ((EEDetId)det).ix();
00463 int ieta = isBarrel ? ((EBDetId)det).ieta() : ((EEDetId)det).iy();
00464 float energy = hit.energy();
00465 float time = hit.time();
00466
00467
00468 if(makeEnergyHistos_)
00469 {
00470 if(isBarrel)
00471 {
00472 energyEB_->Fill(energy);
00473 energyMapEB_->Fill(iphi,ieta,energy);
00474 energyMapEBcoarse_->Fill(iphi,ieta,energy);
00475 }
00476 else if(isEEM)
00477 {
00478 energyEEM_->Fill(energy);
00479 energyMapEEM_->Fill(iphi,ieta,energy);
00480 energyMapEEMcoarse_->Fill(iphi,ieta,energy);
00481 }
00482 else
00483 {
00484 energyEEP_->Fill(energy);
00485 energyMapEEP_->Fill(iphi,ieta,energy);
00486 energyMapEEPcoarse_->Fill(iphi,ieta,energy);
00487 }
00488 }
00489
00490 if(makeOccupancyHistos_)
00491 {
00492 if(isBarrel)
00493 {
00494 recHitOccupancyEB_->Fill(iphi,ieta);
00495 recHitOccupancyEBcoarse_->Fill(iphi,ieta);
00496 }
00497 else if(isEEM)
00498 {
00499 recHitOccupancyEEM_->Fill(iphi,ieta);
00500 recHitOccupancyEEMcoarse_->Fill(iphi,ieta);
00501 }
00502 else
00503 {
00504 recHitOccupancyEEP_->Fill(iphi,ieta);
00505 recHitOccupancyEEPcoarse_->Fill(iphi,ieta);
00506 }
00507 }
00508
00509
00510 if(makeTimingHistos_)
00511 {
00512 if(isBarrel) {
00513 timingEB_->Fill(time);
00514 if(energy > minTimingEnergyEB_) {
00515 timingMapEB_->Fill(iphi,ieta,time);
00516
00517 }
00518 }
00519 else if(isEEM) {
00520 timingEEM_->Fill(time);
00521 if(energy > minTimingEnergyEE_)
00522 {
00523 timingMapEEM_->Fill(iphi,ieta,time);
00524
00525 }
00526 }
00527 else {
00528 timingEEP_->Fill(time);
00529 if(energy > minTimingEnergyEE_)
00530 {
00531 timingMapEEP_->Fill(iphi,ieta,time);
00532
00533 }
00534 }
00535 }
00536
00537
00538 if(isBarrel)
00539 {
00540 energyEBAll_->Fill(energy);
00541 energyMapEBAll_->Fill(iphi,ieta,energy);
00542 energyMapEBcoarseAll_->Fill(iphi,ieta,energy);
00543 recHitOccupancyEBAll_->Fill(iphi,ieta);
00544 recHitOccupancyEBcoarseAll_->Fill(iphi,ieta);
00545 timingEBAll_->Fill(time);
00546 if(energy > minTimingEnergyEB_)
00547 {
00548 timingMapEBAll_->Fill(iphi,ieta,time);
00549 timingMapEBCoarseAll_->Fill(iphi,ieta,time);
00550 }
00551 }
00552 else if(isEEM)
00553 {
00554 energyEEMAll_->Fill(energy);
00555 energyMapEEMAll_->Fill(iphi,ieta,energy);
00556 energyMapEEMcoarseAll_->Fill(iphi,ieta,energy);
00557 recHitOccupancyEEMAll_->Fill(iphi,ieta);
00558 recHitOccupancyEEMcoarseAll_->Fill(iphi,ieta);
00559 timingEEMAll_->Fill(time);
00560 if(energy > minTimingEnergyEE_)
00561 {
00562 timingMapEEMAll_->Fill(iphi,ieta,time);
00563 timingMapEEMCoarseAll_->Fill(iphi,ieta,time);
00564 }
00565 }
00566 else
00567 {
00568 energyEEPAll_->Fill(energy);
00569 energyMapEEPAll_->Fill(iphi,ieta,energy);
00570 energyMapEEPcoarseAll_->Fill(iphi,ieta,energy);
00571 recHitOccupancyEEPAll_->Fill(iphi,ieta);
00572 recHitOccupancyEEPcoarseAll_->Fill(iphi,ieta);
00573 timingEEPAll_->Fill(time);
00574 if(energy > minTimingEnergyEE_)
00575 {
00576 timingMapEEPAll_->Fill(iphi,ieta,time);
00577 timingMapEEPCoarseAll_->Fill(iphi,ieta,time);
00578 }
00579 }
00580
00581 TH1F* timingHist = FEDsAndTimingHists_[FEDid];
00582 if(timingHist==0)
00583 {
00584 initHists(FEDid);
00585 timingHist = FEDsAndTimingHists_[FEDid];
00586 }
00587 if(energy > minTimingAmp_)
00588 {
00589 timingHist->Fill(hit.time());
00590 allFedsTimingHist_->Fill(hit.time());
00591 }
00592 }
00593 }
00594
00595
00596 void
00597 EcalDisplaysByEvent::endJob()
00598 {
00599
00600 drawCanvas(timingCanvasAll_,timingEEMAll_,timingEBAll_,timingEEPAll_);
00601 drawCanvas(timingMapCanvasAll_,timingMapEEMAll_,timingMapEBAll_,timingMapEEPAll_);
00602 drawCanvas(energyCanvasAll_,energyEEMAll_,energyEBAll_,energyEEPAll_);
00603 drawCanvas(energyMapCanvasAll_,energyMapEEMAll_,energyMapEBAll_,energyMapEEPAll_);
00604 drawCanvas(energyMapCoarseCanvasAll_,energyMapEEMcoarseAll_,energyMapEBcoarseAll_,energyMapEEPcoarseAll_);
00605 drawCanvas(recHitOccupancyCanvasAll_,recHitOccupancyEEMAll_,recHitOccupancyEBAll_,recHitOccupancyEEPAll_);
00606 drawCanvas(recHitOccupancyCoarseCanvasAll_,recHitOccupancyEEMcoarseAll_,recHitOccupancyEBcoarseAll_,recHitOccupancyEEPcoarseAll_);
00607 drawCanvas(digiOccupancyCanvasAll_,digiOccupancyEEMAll_,digiOccupancyEBAll_,digiOccupancyEEPAll_);
00608 drawCanvas(digiOccupancyCoarseCanvasAll_,digiOccupancyEEMcoarseAll_,digiOccupancyEBcoarseAll_,digiOccupancyEEPcoarseAll_);
00609
00610 if(runNum_ != -1) {
00611 canvasNames_->Fill();
00612 histoCanvasNames_->Fill();
00613 }
00614
00615 string frequencies = "";
00616 for(std::map<std::string,int>::const_iterator itr = seedFrequencyMap_.begin();
00617 itr != seedFrequencyMap_.end(); ++itr)
00618 {
00619 if(itr->second > 1)
00620 {
00621 frequencies+=itr->first;
00622 frequencies+=" Frequency: ";
00623 frequencies+=intToString(itr->second);
00624 frequencies+="\n";
00625 }
00626 }
00627 LogWarning("EcalDisplaysByEvent") << "Found seeds with frequency > 1: " << "\n\n" << frequencies;
00628
00629 std::string channels;
00630 for(std::vector<int>::const_iterator itr = maskedChannels_.begin();
00631 itr != maskedChannels_.end(); ++itr)
00632 {
00633 channels+=intToString(*itr);
00634 channels+=",";
00635 }
00636
00637 std::string feds;
00638 for(std::vector<int>::const_iterator itr = maskedFEDs_.begin();
00639 itr != maskedFEDs_.end(); ++itr)
00640 {
00641 feds+=intToString(*itr);
00642 feds+=",";
00643 }
00644
00645 LogWarning("EcalDisplaysByEvent") << "Masked channels are: " << channels;
00646 LogWarning("EcalDisplaysByEvent") << "Masked FEDs are: " << feds << " and that is all!";
00647 }
00648
00649 std::string EcalDisplaysByEvent::intToString(int num)
00650 {
00651 using namespace std;
00652 ostringstream myStream;
00653 myStream << num << flush;
00654 return(myStream.str());
00655 }
00656
00657 std::string EcalDisplaysByEvent::floatToString(float num)
00658 {
00659 using namespace std;
00660 ostringstream myStream;
00661 myStream << num << flush;
00662 return(myStream.str());
00663 }
00664
00665
00666 void EcalDisplaysByEvent::initHists(int FED)
00667 {
00668 using namespace std;
00669
00670 string title1 = "Jitter for ";
00671 title1.append(fedMap_->getSliceFromFed(FED));
00672 string name1 = "JitterFED";
00673 name1.append(intToString(FED));
00674 TH1F* timingHist = fileService->make<TH1F>(name1.c_str(),title1.c_str(),150,-7,7);
00675 FEDsAndTimingHists_[FED] = timingHist;
00676 }
00677
00678 void EcalDisplaysByEvent::initEvtByEvtHists(int naiveEvtNum_, int ievt)
00679 {
00680 string lastPart = intToString(naiveEvtNum_)+"_LV1a"+intToString(ievt);
00681 if(makeTimingHistos_)
00682 {
00683 string canvasTitle = "Timing_Event"+lastPart;
00684 timingEB_ = new TH1F("timeForAllFedsEB","timeForAllFeds;Relative Time (1 clock = 25ns)",78,-7,7);
00685 timingEEM_ = new TH1F("timeForAllFedsEEM","timeForAllFeds_EEM;Relative Time (1 clock = 25ns)",78,-7,7);
00686 timingEEP_ = new TH1F("timeForAllFedsEEP","timeForAllFeds_EEP;Relative Time (1 clock = 25ns)",78,-7,7);
00687 timingCanvas_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(),300,60,500,200);
00688 timingMapEB_ = init3DEcalHist("TimingMap", EB_FINE);
00689 timingMapEEM_ = init3DEcalHist("TimingMap", EEM_FINE);
00690 timingMapEEP_ = init3DEcalHist("TimingMap", EEP_FINE);
00691 timingMapCanvas_ = init2DEcalCanvas("TimingMap_Event"+lastPart);
00692
00693 timingMapEEMCoarse_ = init3DEcalHist("TimingMap", EEM_COARSE);
00694 timingMapEEPCoarse_ = init3DEcalHist("TimingMap", EEP_COARSE);
00695
00696 }
00697 if(makeEnergyHistos_)
00698 {
00699 energyEB_ = new TH1F("energyEB","Energy for EB Feds (GeV)",200,histRangeMin_,histRangeMax_);
00700 energyEEM_ = new TH1F("energyEEM","Energy for EEM Feds (GeV)",200,histRangeMin_,10.0);
00701 energyEEP_ = new TH1F("energyEEP","Energy for EEP Feds (GeV)",200,histRangeMin_,10.0);
00702 string canvasTitle = "Energy_Event"+lastPart;
00703 energyCanvas_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(),300,60,500,200);
00704
00705
00706 energyMapEB_ = init2DEcalHist("EnergyMap",EB_FINE);
00707 energyMapEBcoarse_ = init2DEcalHist("EnergyMap",EB_COARSE);
00708 energyMapEEMcoarse_ = init2DEcalHist("EnergyMap",EEM_COARSE);
00709 energyMapEEM_ = init2DEcalHist("EnergyMap",EEM_FINE);
00710 energyMapEEPcoarse_ = init2DEcalHist("EnergyMap",EEP_COARSE);
00711 energyMapEEP_ = init2DEcalHist("EnergyMap",EEP_FINE);
00712 energyMapCanvas_ = init2DEcalCanvas("EnergyMap_Event"+lastPart);
00713 energyMapCoarseCanvas_ = init2DEcalCanvas("EnergyMapCoarse_Event"+lastPart);
00714 }
00715 if(makeOccupancyHistos_)
00716 {
00717
00718 recHitOccupancyEB_ = init2DEcalHist("RecHitOccupancy",EB_FINE);
00719 recHitOccupancyEBcoarse_ = init2DEcalHist("RecHitOccupancy",EB_COARSE);
00720 recHitOccupancyEEMcoarse_ = init2DEcalHist("RecHitOccupancy",EEM_COARSE);
00721 recHitOccupancyEEM_ = init2DEcalHist("RecHitOccupancy",EEM_FINE);
00722 recHitOccupancyEEPcoarse_ = init2DEcalHist("RecHitOccupancy",EEP_COARSE);
00723 recHitOccupancyEEP_ = init2DEcalHist("RecHitOccupancy",EEP_FINE);
00724 recHitOccupancyCanvas_ = init2DEcalCanvas("RecHitOccupancy_Event"+lastPart);
00725 recHitOccupancyCoarseCanvas_ =init2DEcalCanvas("RecHitOccupancyCoarse_Event"+lastPart);
00726
00727
00728 digiOccupancyEB_ = init2DEcalHist("DigiOccupancy",EB_FINE);
00729 digiOccupancyEBcoarse_ = init2DEcalHist("DigiOccupancy", EB_COARSE);
00730 digiOccupancyEEMcoarse_ = init2DEcalHist("DigiOccupancy",EEM_COARSE);
00731 digiOccupancyEEM_ = init2DEcalHist("DigiOccupancy",EEM_FINE);
00732 digiOccupancyEEPcoarse_ = init2DEcalHist("DigiOccupancy",EEP_COARSE);
00733 digiOccupancyEEP_ = init2DEcalHist("DigiOccupancy",EEP_FINE);
00734 digiOccupancyCanvas_ = init2DEcalCanvas("DigiOccupancy_Event"+lastPart);
00735 digiOccupancyCoarseCanvas_ = init2DEcalCanvas("DigiOccupancyCoarse_Event"+lastPart);
00736 }
00737 }
00738
00739 void EcalDisplaysByEvent::deleteEvtByEvtHists()
00740 {
00741 delete timingEB_;
00742 delete timingEEM_;
00743 delete timingEEP_;
00744 delete timingMapEB_;
00745 delete timingMapEEM_;
00746 delete timingMapEEP_;
00747 delete timingCanvas_;
00748 delete timingMapCanvas_;
00749 delete energyEB_;
00750 delete energyEEM_;
00751 delete energyEEP_;
00752 delete energyMapEB_;
00753 delete energyMapEEM_;
00754 delete energyMapEEP_;
00755 delete energyMapEBcoarse_;
00756 delete energyMapEEMcoarse_;
00757 delete energyMapEEPcoarse_;
00758 delete energyCanvas_;
00759 delete energyMapCanvas_;
00760 delete energyMapCoarseCanvas_;
00761 delete recHitOccupancyEB_;
00762 delete recHitOccupancyEEP_;
00763 delete recHitOccupancyEEM_;
00764 delete recHitOccupancyEBcoarse_;
00765 delete recHitOccupancyEEMcoarse_;
00766 delete recHitOccupancyEEPcoarse_;
00767 delete digiOccupancyEB_;
00768 delete digiOccupancyEEM_;
00769 delete digiOccupancyEEP_;
00770 delete digiOccupancyEBcoarse_;
00771 delete digiOccupancyEEMcoarse_;
00772 delete digiOccupancyEEPcoarse_;
00773 delete recHitOccupancyCanvas_;
00774 delete recHitOccupancyCoarseCanvas_;
00775 delete digiOccupancyCanvas_;
00776 delete digiOccupancyCoarseCanvas_;
00777 }
00778
00779 void EcalDisplaysByEvent::initAllEventHistos()
00780 {
00781 string canvasTitle = "Timing_AllEvents";
00782 timingEBAll_ = new TH1F("timeForAllFedsEBAll","timeForAllFeds;Relative Time (1 clock = 25ns)",78,-7,7);
00783 timingEEMAll_ = new TH1F("timeForAllFedsEEMAll","timeForAllFeds_EEM;Relative Time (1 clock = 25ns)",78,-7,7);
00784 timingEEPAll_ = new TH1F("timeForAllFedsEEPAll","timeForAllFeds_EEP;Relative Time (1 clock = 25ns)",78,-7,7);
00785 timingCanvasAll_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(),300,60,500,200);
00786 timingMapEBAll_ = init3DEcalHist("TimingMapA", EB_FINE);
00787 timingMapEEMAll_ = init3DEcalHist("TimingMapA", EEM_FINE);
00788 timingMapEEPAll_ = init3DEcalHist("TimingMapA", EEP_FINE);
00789 timingMapCanvasAll_ = init2DEcalCanvas("TimingMap_AllEvents");
00790 timingMapEBCoarseAll_ = init3DEcalHist("TimingMapA", EB_COARSE);
00791 timingMapEEMCoarseAll_ = init3DEcalHist("TimingMapA", EEM_COARSE);
00792 timingMapEEPCoarseAll_ = init3DEcalHist("TimingMapA", EEP_COARSE);
00793
00794 energyEBAll_ = new TH1F("energyEBAllEvents","Energy for EB Feds (GeV)",200,histRangeMin_,histRangeMax_);
00795 energyEEMAll_ = new TH1F("energyEEMAllEvents","Energy for EEM Feds (GeV)",200,histRangeMin_,10.0);
00796 energyEEPAll_ = new TH1F("energyEEPAllEvents","Energy for EEP Feds (GeV)",200,histRangeMin_,10.0);
00797 canvasTitle = "Energy_AllEvents";
00798 energyCanvasAll_ = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(),300,60,500,200);
00799
00800
00801 energyMapEBAll_ = init2DEcalHist("EnergyMapA",EB_FINE);
00802 energyMapEBcoarseAll_ = init2DEcalHist("EnergyMapA",EB_COARSE);
00803 energyMapEEMcoarseAll_ = init2DEcalHist("EnergyMapA",EEM_COARSE);
00804 energyMapEEMAll_ = init2DEcalHist("EnergyMapA",EEM_FINE);
00805 energyMapEEPcoarseAll_ = init2DEcalHist("EnergyMapA",EEP_COARSE);
00806 energyMapEEPAll_ = init2DEcalHist("EnergyMapA",EEP_FINE);
00807 energyMapCanvasAll_ = init2DEcalCanvas("EnergyMap_AllEvents");
00808 energyMapCoarseCanvasAll_ = init2DEcalCanvas("EnergyMapCoarse_AllEvents");
00809
00810 recHitOccupancyEBAll_ = init2DEcalHist("RecHitOccupancyA",EB_FINE);
00811 recHitOccupancyEBcoarseAll_ = init2DEcalHist("RecHitOccupancyA",EB_COARSE);
00812 recHitOccupancyEEMcoarseAll_ = init2DEcalHist("RecHitOccupancyA",EEM_COARSE);
00813 recHitOccupancyEEMAll_ = init2DEcalHist("RecHitOccupancyA",EEM_FINE);
00814 recHitOccupancyEEPcoarseAll_ = init2DEcalHist("RecHitOccupancyA",EEP_COARSE);
00815 recHitOccupancyEEPAll_ = init2DEcalHist("RecHitOccupancyA",EEP_FINE);
00816 recHitOccupancyCanvasAll_ = init2DEcalCanvas("RecHitOccupancy_AllEvents");
00817 recHitOccupancyCoarseCanvasAll_ =init2DEcalCanvas("RecHitOccupancyCoarse_AllEvents");
00818
00819
00820 digiOccupancyEBAll_ = init2DEcalHist("DigiOccupancyA",EB_FINE);
00821 digiOccupancyEBcoarseAll_ = init2DEcalHist("DigiOccupancyA", EB_COARSE);
00822 digiOccupancyEEMcoarseAll_ = init2DEcalHist("DigiOccupancyA",EEM_COARSE);
00823 digiOccupancyEEMAll_ = init2DEcalHist("DigiOccupancyA",EEM_FINE);
00824 digiOccupancyEEPcoarseAll_ = init2DEcalHist("DigiOccupancyA",EEP_COARSE);
00825 digiOccupancyEEPAll_ = init2DEcalHist("DigiOccupancyA",EEP_FINE);
00826 digiOccupancyCanvasAll_ = init2DEcalCanvas("DigiOccupancy_AllEvents");
00827 digiOccupancyCoarseCanvasAll_ = init2DEcalCanvas("DigiOccupancyCoarse_AllEvents");
00828
00829 }
00830
00831
00832 TH3F* EcalDisplaysByEvent::init3DEcalHist(std::string histTypeName, int subDet) {
00833 TH3F* hist;
00834 bool isBarrel = (subDet == EB_FINE || subDet == EB_COARSE) ? true : false;
00835 bool isCoarse = (subDet == EB_COARSE || subDet == EEM_COARSE || subDet == EEP_COARSE) ? true : false;
00836 bool isEEM = (subDet == EEM_FINE || subDet == EEM_COARSE) ? true : false;
00837 std::string histName = histTypeName;
00838 std::string histTitle = histTypeName;
00839 double ttEtaBins[36] = {-85, -80, -75, -70, -65, -60, -55, -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86 };
00840 double modEtaBins[10]={-85, -65, -45, -25, 0, 1, 26, 46, 66, 86};
00841 double ttPhiBins[73];
00842 double modPhiBins[19];
00843 double timingBins[79];
00844 for (int i = 0; i < 79; ++i)
00845 {
00846 timingBins[i]= 6 - 7. + double(i) * 14. / 78.;
00847 if (i<73)
00848 {
00849 ttPhiBins[i]=1+5*i;
00850 if ( i < 19)
00851 {
00852 modPhiBins[i]=1+20*i;
00853 }
00854 }
00855
00856 }
00857
00858 if(isBarrel) {
00859 histName = histName + "EB";
00860 histTitle = histTitle + " EB";
00861 if(isCoarse) {
00862 histName = histName + "Coarse";
00863 histTitle = histTitle + " by Module Nominal value = 6;iphi;ieta ";
00864 hist = new TH3F(histName.c_str(),histTitle.c_str(),18,modPhiBins,9,modEtaBins,78,timingBins);
00865 }
00866 else {
00867 histTitle = histTitle + " by TT Nominal value = 6;iphi;ieta";
00868 hist = new TH3F(histName.c_str(),histTitle.c_str(),360/5,ttPhiBins,35,ttEtaBins,78,timingBins);
00869 }
00870 }
00871 else {
00872 double ttXBins[21];
00873 double ttYBins[21];
00874 for(int i=0;i!=21;++i) {
00875 ttXBins[i] = 1 + 5*i;
00876 ttYBins[i] = 1 + 5*i;
00877 }
00878 if(isEEM) {
00879 histName = histName + "EEM";
00880 histTitle = histTitle + " EEM";
00881 }
00882 else {
00883 histName = histName + "EEP";
00884 histTitle = histTitle + " EEP";
00885 }
00886 if(isCoarse) {
00887 histName = histName + "Coarse";
00888 histTitle = histTitle + " by Module Nominal value = 6;ix;iy";
00889 hist = new TH3F(histName.c_str(),histTitle.c_str(),20,ttXBins,20,ttYBins,78,timingBins);
00890 }
00891 else {
00892 histTitle = histTitle + " by TT Nominal value = 6;ix;iy";
00893 hist = new TH3F(histName.c_str(),histTitle.c_str(),20,ttXBins,20,ttYBins,78,timingBins);
00894 }
00895 }
00896 return hist;
00897 }
00898
00899 TH2F* EcalDisplaysByEvent::init2DEcalHist(std::string histTypeName, int subDet) {
00900 TH2F* hist;
00901 bool isBarrel = (subDet == EB_FINE || subDet == EB_COARSE) ? true : false;
00902 bool isCoarse = (subDet == EB_COARSE || subDet == EEM_COARSE || subDet == EEP_COARSE) ? true : false;
00903 bool isEEM = (subDet == EEM_FINE || subDet == EEM_COARSE) ? true : false;
00904 std::string histName = histTypeName;
00905 std::string histTitle = histTypeName;
00906 if(isBarrel) {
00907 histName = histName + "EB";
00908 histTitle = histTitle + " EB";
00909 if(isCoarse) {
00910 histName = histName + "Coarse";
00911 histTitle = histTitle + " Coarse;iphi;ieta";
00912 double ttEtaBins[36] = {-85, -80, -75, -70, -65, -60, -55, -50, -45, -40,
00913 -35, -30, -25, -20, -15, -10, -5, 0, 1, 6, 11, 16,
00914 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86 };
00915 hist = new TH2F(histName.c_str(),histTitle.c_str(),360/5,1,361.,35,ttEtaBins);
00916 }
00917 else {
00918 histTitle = histTitle + ";iphi;ieta";
00919 hist = new TH2F(histName.c_str(),histTitle.c_str(),360,1,361.,172,-86,86);
00920 }
00921 }
00922 else {
00923 if(isEEM) {
00924 histName = histName + "EEM";
00925 histTitle = histTitle + " EEM";
00926 }
00927 else {
00928 histName = histName + "EEP";
00929 histTitle = histTitle + " EEP";
00930 }
00931 if(isCoarse) {
00932 histName = histName + "Coarse";
00933 histTitle = histTitle + " Coarse;ix;iy";
00934 hist = new TH2F(histName.c_str(),histTitle.c_str(),20,1,101,20,1,101);
00935 }
00936 else {
00937 histTitle = histTitle + ";ix;iy";
00938 hist = new TH2F(histName.c_str(),histTitle.c_str(),100,1,101,100,1,101);
00939 }
00940 }
00941 return hist;
00942 }
00943
00944 TCanvas* EcalDisplaysByEvent::init2DEcalCanvas(std::string canvasTitle) {
00945 TCanvas* canvas = new TCanvas(canvasTitle.c_str(), canvasTitle.c_str(),300,60,500,200);
00946 return canvas;
00947 }
00948
00949 void EcalDisplaysByEvent::drawHistos()
00950 {
00951 if(makeTimingHistos_)
00952 {
00953
00954 drawCanvas(timingCanvas_,timingEEM_,timingEB_,timingEEP_);
00955
00956 drawCanvas(timingMapCanvas_,timingMapEEM_,timingMapEB_,timingMapEEP_);
00957 }
00958 if(makeEnergyHistos_)
00959 {
00960
00961 drawCanvas(energyCanvas_,energyEEM_,energyEB_,energyEEP_);
00962
00963 drawCanvas(energyMapCanvas_,energyMapEEM_,energyMapEB_,energyMapEEP_);
00964 drawCanvas(energyMapCoarseCanvas_,energyMapEEMcoarse_,energyMapEBcoarse_,energyMapEEPcoarse_);
00965 }
00966 if(makeOccupancyHistos_)
00967 {
00968
00969 drawCanvas(recHitOccupancyCanvas_,recHitOccupancyEEM_,recHitOccupancyEB_,recHitOccupancyEEP_);
00970 drawCanvas(recHitOccupancyCoarseCanvas_,recHitOccupancyEEMcoarse_,recHitOccupancyEBcoarse_,recHitOccupancyEEPcoarse_);
00971
00972 drawCanvas(digiOccupancyCanvas_,digiOccupancyEEM_,digiOccupancyEB_,digiOccupancyEEP_);
00973 drawCanvas(digiOccupancyCoarseCanvas_,digiOccupancyEEMcoarse_,digiOccupancyEBcoarse_,digiOccupancyEEPcoarse_);
00974 }
00975 }
00976
00977 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH1F* hist1, TH1F* hist2, TH1F* hist3) {
00978 canvas->Divide(1,2);
00979 canvas->cd(1)->Divide(2,1);
00980 canvas->cd(1)->cd(1);
00981 hist1->Draw();
00982 canvas->cd(2);
00983 hist2->Draw();
00984 canvas->cd(1)->cd(2);
00985 hist3->Draw();
00986 histoCanvasNamesVector->push_back(canvas->GetName());
00987 canvas->SetCanvasSize(500,500);
00988 canvas->SetFixedAspectRatio(true);
00989 canvas->Write();
00990 }
00991
00992 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH2F* hist1, TH2F* hist2, TH2F* hist3) {
00993 canvas->Divide(1,2);
00994 canvas->cd(1)->Divide(2,1);
00995
00996 canvas->cd(1)->cd(1);
00997 hist1->Draw("colz");
00998 drawEELines();
00999
01000 canvas->cd(2);
01001 hist2->Draw("colz");
01002 hist2->GetXaxis()->SetNdivisions(-18);
01003 hist2->GetYaxis()->SetNdivisions(2);
01004 canvas->GetPad(2)->SetGridx(1);
01005 canvas->GetPad(2)->SetGridy(1);
01006
01007 canvas->cd(1)->cd(2);
01008 hist3->Draw("colz");
01009 drawEELines();
01010 histoCanvasNamesVector->push_back(canvas->GetName());
01011 canvas->SetCanvasSize(500,500);
01012 canvas->SetFixedAspectRatio(true);
01013 canvas->Write();
01014 }
01015
01016 void EcalDisplaysByEvent::drawCanvas(TCanvas* canvas, TH3F* hist1, TH3F* hist2, TH3F* hist3) {
01017 if(canvas == timingMapCoarseCanvas_) {
01018 canvas->cd();
01019 TProfile2D* profile2 = (TProfile2D*) hist2->Project3DProfile("yx");
01020 profile2->Draw("colz");
01021 drawTimingErrors(profile2);
01022 }
01023 else {
01024 canvas->Divide(1,2);
01025 canvas->cd(1)->Divide(2,1);
01026
01027 canvas->cd(1)->cd(1);
01028 TProfile2D* profile1 = (TProfile2D*) hist1->Project3DProfile("yx");
01029 profile1->Draw("colz");
01030 drawEELines();
01031
01032 canvas->cd(2);
01033 TProfile2D* profile2 = (TProfile2D*) hist2->Project3DProfile("yx");
01034 profile2->Draw("colz");
01035 profile2->GetXaxis()->SetNdivisions(-18);
01036 profile2->GetYaxis()->SetNdivisions(2);
01037 canvas->GetPad(2)->SetGridx(1);
01038 canvas->GetPad(2)->SetGridy(1);
01039
01040 canvas->cd(1)->cd(2);
01041 TProfile2D* profile3 = (TProfile2D*) hist3->Project3DProfile("yx");
01042 profile3->Draw("colz");
01043 drawEELines();
01044 }
01045 histoCanvasNamesVector->push_back(canvas->GetName());
01046 canvas->SetCanvasSize(500,500);
01047 canvas->SetFixedAspectRatio(true);
01048 canvas->Write();
01049 }
01050
01051 void EcalDisplaysByEvent::drawTimingErrors(TProfile2D* profile) {
01052 int nxb = profile->GetNbinsX();
01053 int nyb = profile->GetNbinsY();
01054 char tempErr[200];
01055 for(int i=0;i!=nxb;++i) {
01056 for(int j=0;j!=nyb;++j) {
01057 int xb = i+1;
01058 int yb = j+1;
01059
01060 double xcorr = profile->GetBinCenter(xb);
01061 double ycorr = profile->GetBinCenter(yb);
01062 sprintf(tempErr,"%0.2f",profile->GetBinError(xb,yb));
01063 int nBin = profile->GetBin(xb,yb,0);
01064 int nBinEntries = (int) profile->GetBinEntries(nBin);
01065 if(nBinEntries != 0) {
01066 TLatex* tex = new TLatex(xcorr,ycorr,tempErr);
01067 tex->SetTextAlign(23);
01068 tex->SetTextSize(42);
01069 tex->SetTextSize(0.025);
01070 tex->SetLineWidth(2);
01071 tex->Draw();
01072 delete tex;
01073 }
01074 sprintf(tempErr,"%i",nBinEntries);
01075 if(nBinEntries!=0) {
01076 TLatex* tex = new TLatex(xcorr,ycorr,tempErr);
01077 tex->SetTextAlign(21);
01078 tex->SetTextFont(42);
01079 tex->SetTextSize(0.025);
01080 tex->SetLineWidth(2);
01081 tex->Draw();
01082 delete tex;
01083 }
01084 }
01085 }
01086 }
01087
01088 void EcalDisplaysByEvent::drawEELines() {
01089
01090 int ixSectorsEE[202] = {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, 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, 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, 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, 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, 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, 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, 30, 20, 20, 10, 10, 8, 0, 45, 45, 40, 40, 35, 35, 0, 55, 55, 60, 60, 65, 65};
01091
01092 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, 45, 45, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 45, 45, 50, 0, 50, 60, 60, 65, 65, 75, 75, 80, 80, 85, 85, 87, 87, 92, 92, 95, 95, 97, 97,100,100, 97, 97, 95, 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, 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, 40, 50, 0, 45, 45, 40, 40, 35, 35, 30, 30, 25, 25, 0, 50, 50, 55, 55, 60, 60, 0, 60, 60, 65, 65, 70, 70, 75, 75, 85, 85, 87, 0, 61,100, 0, 60, 60, 65, 65, 70, 70, 75, 75, 85, 85, 87, 0, 50, 50, 55, 55, 60, 60, 0, 45, 45, 40, 40, 35, 35, 30, 30, 25, 25, 0, 39, 30, 30, 15, 15, 5, 0, 39, 30, 30, 15, 15, 5};
01093
01094
01095 for ( int i=0; i<202; i++) {
01096 ixSectorsEE[i] += 1;
01097 iySectorsEE[i] += 1;
01098
01099 }
01100
01101 TLine l;
01102 l.SetLineWidth(1);
01103 for ( int i=0; i<201; i=i+1) {
01104 if ( (ixSectorsEE[i]!=1 || iySectorsEE[i]!=1) &&
01105 (ixSectorsEE[i+1]!=1 || iySectorsEE[i+1]!=1) ) {
01106 l.DrawLine(ixSectorsEE[i], iySectorsEE[i],
01107 ixSectorsEE[i+1], iySectorsEE[i+1]);
01108 }
01109 }
01110
01111
01112 }