File indexing completed on 2024-04-06 12:25:39
0001 #include <iomanip>
0002 #include <iostream>
0003 #include <string>
0004 #include <vector>
0005
0006 #include <TCanvas.h>
0007 #include <TFile.h>
0008 #include <TH1D.h>
0009 #include <TH2D.h>
0010 #include <TTree.h>
0011 #include <TPaveStats.h>
0012
0013 #include "DataFormats/Common/interface/Wrapper.h"
0014 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
0015 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0016 #include "CUDADataFormats/EcalRecHitSoA/interface/EcalUncalibratedRecHit.h"
0017
0018 #include "TStyle.h"
0019
0020 void setAxis(TH2D *histo) {
0021 histo->GetXaxis()->SetTitle("cpu");
0022 histo->GetYaxis()->SetTitle("gpu");
0023 }
0024
0025 void setAxisDelta(TH2D *histo) {
0026 histo->GetXaxis()->SetTitle("cpu");
0027 histo->GetYaxis()->SetTitle("#Delta gpu-cpu");
0028 }
0029
0030 int main(int argc, char *argv[]) {
0031 if (argc < 3) {
0032 std::cout << "run with: ./validateGPU <path to input file> <output file>\n";
0033 exit(0);
0034 }
0035
0036 gStyle->SetOptStat("ourme");
0037
0038 edm::Wrapper<ecal::UncalibratedRecHit<calo::common::VecStoragePolicy<calo::common::CUDAHostAllocatorAlias>>> *wgpuEB =
0039 nullptr;
0040 edm::Wrapper<ecal::UncalibratedRecHit<calo::common::VecStoragePolicy<calo::common::CUDAHostAllocatorAlias>>> *wgpuEE =
0041 nullptr;
0042 edm::Wrapper<EBUncalibratedRecHitCollection> *wcpuEB = nullptr;
0043 edm::Wrapper<EEUncalibratedRecHitCollection> *wcpuEE = nullptr;
0044
0045 std::string fileName = argv[1];
0046 std::string outFileName = argv[2];
0047
0048
0049 TFile rfout{outFileName.c_str(), "recreate"};
0050
0051 int nbins_count = 200;
0052 float last_count = 5000.;
0053 int nbins_count_delta = 201;
0054
0055 int nbins = 300;
0056 float last = 3000.;
0057
0058
0059
0060 int nbins_chi2 = 1000;
0061 float last_chi2 = 200.;
0062
0063 int nbins_flags = 100;
0064 float last_flags = 100.;
0065 float delta_flags = 20;
0066
0067 int nbins_delta = 201;
0068 float delta = 0.2;
0069
0070
0071 auto hRechitsEBGPU = new TH1D("RechitsEBGPU", "RechitsEBGPU; No. of Rechits", nbins_count, 0, last_count);
0072 auto hRechitsEBCPU = new TH1D("RechitsEBCPU", "RechitsEBCPU; No. of Rechits", nbins_count, 0, last_count);
0073 auto hRechitsEEGPU = new TH1D("RechitsEEGPU", "RechitsEEGPU; No. of Rechits", nbins_count, 0, last_count);
0074 auto hRechitsEECPU = new TH1D("RechitsEECPU", "RechitsEECPU; No. of Rechits", nbins_count, 0, last_count);
0075 auto hRechitsEBGPUCPUratio = new TH1D("RechitsEBGPU/CPUratio", "RechitsEBGPU/CPUratio; GPU/CPU", 50, 0.9, 1.1);
0076 auto hRechitsEEGPUCPUratio = new TH1D("RechitsEEGPU/CPUratio", "RechitsEEGPU/CPUratio; GPU/CPU", 50, 0.9, 1.1);
0077
0078 auto hSOIAmplitudesEBGPU = new TH1D("hSOIAmplitudesEBGPU", "hSOIAmplitudesEBGPU", nbins, 0, last);
0079 auto hSOIAmplitudesEEGPU = new TH1D("hSOIAmplitudesEEGPU", "hSOIAmplitudesEEGPU", nbins, 0, last);
0080 auto hSOIAmplitudesEBCPU = new TH1D("hSOIAmplitudesEBCPU", "hSOIAmplitudesEBCPU", nbins, 0, last);
0081 auto hSOIAmplitudesEECPU = new TH1D("hSOIAmplitudesEECPU", "hSOIAmplitudesEECPU", nbins, 0, last);
0082 auto hSOIAmplitudesEBGPUCPUratio =
0083 new TH1D("SOIAmplitudesEBGPU/CPUratio", "SOIAmplitudesEBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0084 auto hSOIAmplitudesEEGPUCPUratio =
0085 new TH1D("SOIAmplitudesEEGPU/CPUratio", "SOIAmplitudesEEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0086
0087 auto hChi2EBGPU = new TH1D("hChi2EBGPU", "hChi2EBGPU", nbins_chi2, 0, last_chi2);
0088 auto hChi2EEGPU = new TH1D("hChi2EEGPU", "hChi2EEGPU", nbins_chi2, 0, last_chi2);
0089 auto hChi2EBCPU = new TH1D("hChi2EBCPU", "hChi2EBCPU", nbins_chi2, 0, last_chi2);
0090 auto hChi2EECPU = new TH1D("hChi2EECPU", "hChi2EECPU", nbins_chi2, 0, last_chi2);
0091 auto hChi2EBGPUCPUratio = new TH1D("Chi2EBGPU/CPUratio", "Chi2EBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0092 auto hChi2EEGPUCPUratio = new TH1D("Chi2EEGPU/CPUratio", "Chi2EEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0093
0094 auto hFlagsEBGPU = new TH1D("hFlagsEBGPU", "hFlagsEBGPU", nbins_flags, 0, last_flags);
0095 auto hFlagsEEGPU = new TH1D("hFlagsEEGPU", "hFlagsEEGPU", nbins_flags, 0, last_flags);
0096 auto hFlagsEBCPU = new TH1D("hFlagsEBCPU", "hFlagsEBCPU", nbins_flags, 0, last_flags);
0097 auto hFlagsEECPU = new TH1D("hFlagsEECPU", "hFlagsEECPU", nbins_flags, 0, last_flags);
0098 auto hFlagsEBGPUCPUratio = new TH1D("FlagsEBGPU/CPUratio", "FlagsEBGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0099 auto hFlagsEEGPUCPUratio = new TH1D("FlagsEEGPU/CPUratio", "FlagsEEGPU/CPUratio; GPU/CPU", 200, 0.9, 1.1);
0100
0101 auto hSOIAmplitudesEBGPUvsCPU =
0102 new TH2D("hSOIAmplitudesEBGPUvsCPU", "hSOIAmplitudesEBGPUvsCPU", nbins, 0, last, nbins, 0, last);
0103 setAxis(hSOIAmplitudesEBGPUvsCPU);
0104 auto hSOIAmplitudesEEGPUvsCPU =
0105 new TH2D("hSOIAmplitudesEEGPUvsCPU", "hSOIAmplitudesEEGPUvsCPU", nbins, 0, last, nbins, 0, last);
0106 setAxis(hSOIAmplitudesEEGPUvsCPU);
0107 auto hSOIAmplitudesEBdeltavsCPU =
0108 new TH2D("hSOIAmplitudesEBdeltavsCPU", "hSOIAmplitudesEBdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta);
0109 setAxisDelta(hSOIAmplitudesEBdeltavsCPU);
0110 auto hSOIAmplitudesEEdeltavsCPU =
0111 new TH2D("hSOIAmplitudesEEdeltavsCPU", "hSOIAmplitudesEEdeltavsCPU", nbins, 0, last, nbins_delta, -delta, delta);
0112 setAxisDelta(hSOIAmplitudesEEdeltavsCPU);
0113
0114 auto hChi2EBGPUvsCPU =
0115 new TH2D("hChi2EBGPUvsCPU", "hChi2EBGPUvsCPU", nbins_chi2, 0, last_chi2, nbins_chi2, 0, last_chi2);
0116 setAxis(hChi2EBGPUvsCPU);
0117 auto hChi2EEGPUvsCPU =
0118 new TH2D("hChi2EEGPUvsCPU", "hChi2EEGPUvsCPU", nbins_chi2, 0, last_chi2, nbins_chi2, 0, last_chi2);
0119 setAxis(hChi2EEGPUvsCPU);
0120 auto hChi2EBdeltavsCPU =
0121 new TH2D("hChi2EBdeltavsCPU", "hChi2EBdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta);
0122 setAxisDelta(hChi2EBdeltavsCPU);
0123 auto hChi2EEdeltavsCPU =
0124 new TH2D("hChi2EEdeltavsCPU", "hChi2EEdeltavsCPU", nbins_chi2, 0, last_chi2, nbins_delta, -delta, delta);
0125 setAxisDelta(hChi2EEdeltavsCPU);
0126
0127 auto hFlagsEBGPUvsCPU =
0128 new TH2D("hFlagsEBGPUvsCPU", "hFlagsEBGPUvsCPU", nbins_flags, 0, last_flags, nbins_flags, 0, last_flags);
0129 setAxis(hFlagsEBGPUvsCPU);
0130 auto hFlagsEEGPUvsCPU =
0131 new TH2D("hFlagsEEGPUvsCPU", "hFlagsEEGPUvsCPU", nbins_flags, 0, last_flags, nbins_flags, 0, last_flags);
0132 setAxis(hFlagsEEGPUvsCPU);
0133 auto hFlagsEBdeltavsCPU = new TH2D(
0134 "hFlagsEBdeltavsCPU", "hFlagsEBdeltavsCPU", nbins_flags, 0, last_flags, nbins_delta, -delta_flags, delta_flags);
0135 setAxisDelta(hFlagsEBdeltavsCPU);
0136 auto hFlagsEEdeltavsCPU = new TH2D(
0137 "hFlagsEEdeltavsCPU", "hFlagsEEdeltavsCPU", nbins_flags, 0, last_flags, nbins_delta, -delta_flags, delta_flags);
0138 setAxisDelta(hFlagsEEdeltavsCPU);
0139
0140 auto hRechitsEBGPUvsCPU = new TH2D(
0141 "RechitsEBGPUvsCPU", "RechitsEBGPUvsCPU; CPU; GPU", last_count, 0, last_count, last_count, 0, last_count);
0142 setAxis(hRechitsEBGPUvsCPU);
0143 auto hRechitsEEGPUvsCPU = new TH2D(
0144 "RechitsEEGPUvsCPU", "RechitsEEGPUvsCPU; CPU; GPU", last_count, 0, last_count, last_count, 0, last_count);
0145 setAxis(hRechitsEEGPUvsCPU);
0146 auto hRechitsEBdeltavsCPU = new TH2D(
0147 "RechitsEBdeltavsCPU", "RechitsEBdeltavsCPU", nbins_count, 0, last_count, nbins_count_delta, -delta, delta);
0148 setAxisDelta(hRechitsEBdeltavsCPU);
0149 auto hRechitsEEdeltavsCPU = new TH2D(
0150 "RechitsEEdeltavsCPU", "RechitsEEdeltavsCPU", nbins_count, 0, last_count, nbins_count_delta, -delta, delta);
0151 setAxisDelta(hRechitsEEdeltavsCPU);
0152
0153
0154 std::cout << "validating file " << fileName << std::endl;
0155 TFile rf{fileName.c_str()};
0156 TTree *rt = (TTree *)rf.Get("Events");
0157 rt->SetBranchAddress(
0158 "calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyecalUncalibratedRecHit_ecalCPUUncalibRecHitProducer_"
0159 "EcalUncalibRecHitsEB_RECO.",
0160 &wgpuEB);
0161 rt->SetBranchAddress(
0162 "calocommonCUDAHostAllocatorAliascalocommonVecStoragePolicyecalUncalibratedRecHit_ecalCPUUncalibRecHitProducer_"
0163 "EcalUncalibRecHitsEE_RECO.",
0164 &wgpuEE);
0165 rt->SetBranchAddress("EcalUncalibratedRecHitsSorted_ecalMultiFitUncalibRecHit_EcalUncalibRecHitsEB_RECO.", &wcpuEB);
0166 rt->SetBranchAddress("EcalUncalibratedRecHitsSorted_ecalMultiFitUncalibRecHit_EcalUncalibRecHitsEE_RECO.", &wcpuEE);
0167
0168 constexpr float eps_diff = 1e-3;
0169
0170
0171 auto const nentries = rt->GetEntries();
0172 std::cout << "#events to validate over: " << nentries << std::endl;
0173 for (int ie = 0; ie < nentries; ++ie) {
0174 rt->GetEntry(ie);
0175
0176 const char *ordinal[] = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"};
0177 auto cpu_eb_size = wcpuEB->bareProduct().size();
0178 auto cpu_ee_size = wcpuEE->bareProduct().size();
0179 auto gpu_eb_size = wgpuEB->bareProduct().amplitude.size();
0180 auto gpu_ee_size = wgpuEE->bareProduct().amplitude.size();
0181
0182 float eb_ratio = (float)gpu_eb_size / cpu_eb_size;
0183 float ee_ratio = (float)gpu_ee_size / cpu_ee_size;
0184
0185
0186 hRechitsEBGPU->Fill(gpu_eb_size);
0187 hRechitsEBCPU->Fill(cpu_eb_size);
0188 hRechitsEEGPU->Fill(gpu_ee_size);
0189 hRechitsEECPU->Fill(cpu_ee_size);
0190 hRechitsEBGPUvsCPU->Fill(cpu_eb_size, gpu_eb_size);
0191 hRechitsEEGPUvsCPU->Fill(cpu_ee_size, gpu_ee_size);
0192 hRechitsEBGPUCPUratio->Fill(eb_ratio);
0193 hRechitsEEGPUCPUratio->Fill(ee_ratio);
0194 hRechitsEBdeltavsCPU->Fill(cpu_eb_size, gpu_eb_size - cpu_eb_size);
0195 hRechitsEEdeltavsCPU->Fill(cpu_ee_size, gpu_ee_size - cpu_ee_size);
0196
0197 if (cpu_eb_size != gpu_eb_size or cpu_ee_size != gpu_ee_size) {
0198 std::cerr << ie << ordinal[ie % 10] << " entry:\n"
0199 << " EB size: " << std::setw(4) << cpu_eb_size << " (cpu) vs " << std::setw(4) << gpu_eb_size
0200 << " (gpu)\n"
0201 << " EE size: " << std::setw(4) << cpu_ee_size << " (cpu) vs " << std::setw(4) << gpu_ee_size
0202 << " (gpu)" << std::endl;
0203 continue;
0204 }
0205
0206 assert(wgpuEB->bareProduct().amplitude.size() == wcpuEB->bareProduct().size());
0207 assert(wgpuEE->bareProduct().amplitude.size() == wcpuEE->bareProduct().size());
0208 auto const neb = wcpuEB->bareProduct().size();
0209 auto const nee = wcpuEE->bareProduct().size();
0210
0211 for (uint32_t i = 0; i < neb; ++i) {
0212 auto const did_gpu = wgpuEB->bareProduct().did[i];
0213 auto const soi_amp_gpu = wgpuEB->bareProduct().amplitude[i];
0214 auto const cpu_iter = wcpuEB->bareProduct().find(DetId{did_gpu});
0215 if (cpu_iter == wcpuEB->bareProduct().end()) {
0216 std::cerr << ie << ordinal[ie % 10] << " entry\n"
0217 << " Did not find a DetId " << did_gpu << " in a CPU collection\n";
0218 continue;
0219 }
0220 auto const soi_amp_cpu = cpu_iter->amplitude();
0221 auto const chi2_gpu = wgpuEB->bareProduct().chi2[i];
0222 auto const chi2_cpu = cpu_iter->chi2();
0223
0224 auto const flags_gpu = wgpuEB->bareProduct().flags[i];
0225 auto const flags_cpu = cpu_iter->flags();
0226
0227 hSOIAmplitudesEBGPU->Fill(soi_amp_gpu);
0228 hSOIAmplitudesEBCPU->Fill(soi_amp_cpu);
0229 hSOIAmplitudesEBGPUvsCPU->Fill(soi_amp_cpu, soi_amp_gpu);
0230 hSOIAmplitudesEBdeltavsCPU->Fill(soi_amp_cpu, soi_amp_gpu - soi_amp_cpu);
0231 if (soi_amp_cpu > 0)
0232 hSOIAmplitudesEBGPUCPUratio->Fill((float)soi_amp_gpu / soi_amp_cpu);
0233
0234 hChi2EBGPU->Fill(chi2_gpu);
0235 hChi2EBCPU->Fill(chi2_cpu);
0236 hChi2EBGPUvsCPU->Fill(chi2_cpu, chi2_gpu);
0237 hChi2EBdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu);
0238 if (chi2_cpu > 0)
0239 hChi2EBGPUCPUratio->Fill((float)chi2_gpu / chi2_cpu);
0240
0241 if (std::abs(chi2_gpu / chi2_cpu - 1) > 0.05 || std::abs(soi_amp_gpu / soi_amp_cpu - 1) > 0.05) {
0242 std::cout << " ---- EB " << std::endl;
0243 std::cout << " eventid = " << ie << " xtal = " << i << std::endl;
0244 std::cout << " chi2_gpu = " << chi2_gpu << " chi2_cpu = " << chi2_cpu << std::endl;
0245 std::cout << " soi_amp_gpu = " << soi_amp_gpu << " soi_amp_cpu = " << soi_amp_cpu << std::endl;
0246 std::cout << " flags_gpu = " << flags_gpu << " flags_cpu = " << flags_cpu << std::endl;
0247 }
0248
0249 hFlagsEBGPU->Fill(flags_gpu);
0250 hFlagsEBCPU->Fill(flags_cpu);
0251 hFlagsEBGPUvsCPU->Fill(flags_cpu, flags_gpu);
0252 hFlagsEBdeltavsCPU->Fill(flags_cpu, flags_gpu - flags_cpu);
0253 if (flags_cpu > 0)
0254 hFlagsEBGPUCPUratio->Fill((float)flags_gpu / flags_cpu);
0255
0256 if (flags_cpu != flags_gpu) {
0257 std::cout << " >> No! Different flag cpu:gpu = " << flags_cpu << " : " << flags_gpu;
0258 std::cout << std::endl;
0259 }
0260
0261 if ((std::abs(soi_amp_gpu - soi_amp_cpu) >= eps_diff) or (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or
0262 std::isnan(chi2_gpu) or (flags_cpu != flags_gpu)) {
0263 printf("EB eventid = %d chid = %d amp_gpu = %f amp_cpu %f chi2_gpu = %f chi2_cpu = %f\n",
0264 ie,
0265 i,
0266 soi_amp_gpu,
0267 soi_amp_cpu,
0268 chi2_gpu,
0269 chi2_cpu);
0270 if (std::isnan(chi2_gpu))
0271 printf("*** nan ***\n");
0272 }
0273 }
0274
0275 for (uint32_t i = 0; i < nee; ++i) {
0276 auto const did_gpu = wgpuEE->bareProduct().did[i];
0277 auto const soi_amp_gpu = wgpuEE->bareProduct().amplitude[i];
0278 auto const cpu_iter = wcpuEE->bareProduct().find(DetId{did_gpu});
0279 if (cpu_iter == wcpuEE->bareProduct().end()) {
0280 std::cerr << ie << ordinal[ie % 10] << " entry\n"
0281 << " did not find a DetId " << did_gpu << " in a CPU collection\n";
0282 continue;
0283 }
0284 auto const soi_amp_cpu = cpu_iter->amplitude();
0285 auto const chi2_gpu = wgpuEE->bareProduct().chi2[i];
0286 auto const chi2_cpu = cpu_iter->chi2();
0287
0288 auto const flags_gpu = wgpuEE->bareProduct().flags[i];
0289 auto const flags_cpu = cpu_iter->flags();
0290
0291 hSOIAmplitudesEEGPU->Fill(soi_amp_gpu);
0292 hSOIAmplitudesEECPU->Fill(soi_amp_cpu);
0293 hSOIAmplitudesEEGPUvsCPU->Fill(soi_amp_cpu, soi_amp_gpu);
0294 hSOIAmplitudesEEdeltavsCPU->Fill(soi_amp_cpu, soi_amp_gpu - soi_amp_cpu);
0295 if (soi_amp_cpu > 0)
0296 hSOIAmplitudesEEGPUCPUratio->Fill((float)soi_amp_gpu / soi_amp_cpu);
0297
0298 hChi2EEGPU->Fill(chi2_gpu);
0299 hChi2EECPU->Fill(chi2_cpu);
0300 hChi2EEGPUvsCPU->Fill(chi2_cpu, chi2_gpu);
0301 hChi2EEdeltavsCPU->Fill(chi2_cpu, chi2_gpu - chi2_cpu);
0302 if (chi2_cpu > 0)
0303 hChi2EEGPUCPUratio->Fill((float)chi2_gpu / chi2_cpu);
0304
0305 if (std::abs(chi2_gpu / chi2_cpu - 1) > 0.05 || std::abs(soi_amp_gpu / soi_amp_cpu - 1) > 0.05) {
0306 std::cout << " ---- EE " << std::endl;
0307 std::cout << " eventid = " << ie << " xtal = " << i << std::endl;
0308 std::cout << " chi2_gpu = " << chi2_gpu << " chi2_cpu = " << chi2_cpu << std::endl;
0309 std::cout << " soi_amp_gpu = " << soi_amp_gpu << " soi_amp_cpu = " << soi_amp_cpu << std::endl;
0310 std::cout << " flags_gpu = " << flags_gpu << " flags_cpu = " << flags_cpu << std::endl;
0311 }
0312
0313 hFlagsEEGPU->Fill(flags_gpu);
0314 hFlagsEECPU->Fill(flags_cpu);
0315 hFlagsEEGPUvsCPU->Fill(flags_cpu, flags_gpu);
0316 hFlagsEEdeltavsCPU->Fill(flags_cpu, flags_gpu - flags_cpu);
0317 if (flags_cpu > 0)
0318 hFlagsEEGPUCPUratio->Fill((float)flags_gpu / flags_cpu);
0319
0320 if (flags_cpu != flags_gpu) {
0321 std::cout << " >> No! Different flag cpu:gpu = " << flags_cpu << " : " << flags_gpu;
0322 std::cout << std::endl;
0323 }
0324
0325 if ((std::abs(soi_amp_gpu - soi_amp_cpu) >= eps_diff) or (std::abs(chi2_gpu - chi2_cpu) >= eps_diff) or
0326 std::isnan(chi2_gpu) or (flags_cpu != flags_gpu)) {
0327 printf("EE eventid = %d chid = %d amp_gpu = %f amp_cpu %f chi2_gpu = %f chi2_cpu = %f\n",
0328 ie,
0329 static_cast<int>(neb + i),
0330 soi_amp_gpu,
0331 soi_amp_cpu,
0332 chi2_gpu,
0333 chi2_cpu);
0334 if (std::isnan(chi2_gpu))
0335 printf("*** nan ***\n");
0336 }
0337 }
0338 }
0339
0340 {
0341 TCanvas c("plots", "plots", 1750, 860);
0342 c.Divide(3, 2);
0343
0344 c.cd(1);
0345 {
0346 gPad->SetLogy();
0347 hSOIAmplitudesEBCPU->SetLineColor(kBlack);
0348 hSOIAmplitudesEBCPU->SetLineWidth(1.);
0349 hSOIAmplitudesEBCPU->Draw("");
0350 hSOIAmplitudesEBGPU->SetLineColor(kBlue);
0351 hSOIAmplitudesEBGPU->SetLineWidth(1.);
0352 hSOIAmplitudesEBGPU->Draw("sames");
0353 gPad->Update();
0354 auto stats = (TPaveStats *)hSOIAmplitudesEBGPU->FindObject("stats");
0355 auto y2 = stats->GetY2NDC();
0356 auto y1 = stats->GetY1NDC();
0357 stats->SetY2NDC(y1);
0358 stats->SetY1NDC(y1 - (y2 - y1));
0359 }
0360
0361 c.cd(4);
0362 {
0363 gPad->SetLogy();
0364 hSOIAmplitudesEECPU->SetLineColor(kBlack);
0365 hSOIAmplitudesEECPU->SetLineWidth(1.);
0366 hSOIAmplitudesEECPU->Draw("");
0367 hSOIAmplitudesEEGPU->SetLineColor(kBlue);
0368 hSOIAmplitudesEEGPU->SetLineWidth(1.);
0369 hSOIAmplitudesEEGPU->Draw("sames");
0370 gPad->Update();
0371 auto stats = (TPaveStats *)hSOIAmplitudesEEGPU->FindObject("stats");
0372 auto y2 = stats->GetY2NDC();
0373 auto y1 = stats->GetY1NDC();
0374 stats->SetY2NDC(y1);
0375 stats->SetY1NDC(y1 - (y2 - y1));
0376 }
0377
0378 c.cd(2);
0379 gPad->SetGrid();
0380 hSOIAmplitudesEBGPUvsCPU->Draw("COLZ");
0381
0382 c.cd(5);
0383 gPad->SetGrid();
0384 hSOIAmplitudesEEGPUvsCPU->Draw("COLZ");
0385
0386 c.cd(3);
0387
0388 hSOIAmplitudesEBGPUCPUratio->Draw("");
0389
0390 c.cd(6);
0391
0392 hSOIAmplitudesEEGPUCPUratio->Draw("");
0393
0394 c.SaveAs("ecal-amplitudes.root");
0395 c.SaveAs("ecal-amplitudes.png");
0396
0397
0398
0399 c.cd(1);
0400 {
0401 gPad->SetLogy();
0402 hChi2EBCPU->SetLineColor(kBlack);
0403 hChi2EBCPU->SetLineWidth(1.);
0404 hChi2EBCPU->Draw("");
0405 hChi2EBGPU->SetLineColor(kBlue);
0406 hChi2EBGPU->SetLineWidth(1.);
0407 hChi2EBGPU->Draw("sames");
0408 gPad->Update();
0409 auto stats = (TPaveStats *)hChi2EBGPU->FindObject("stats");
0410 auto y2 = stats->GetY2NDC();
0411 auto y1 = stats->GetY1NDC();
0412 stats->SetY2NDC(y1);
0413 stats->SetY1NDC(y1 - (y2 - y1));
0414 }
0415
0416 c.cd(4);
0417 {
0418 gPad->SetLogy();
0419 hChi2EECPU->SetLineColor(kBlack);
0420 hChi2EECPU->SetLineWidth(1.);
0421 hChi2EECPU->Draw("");
0422 hChi2EEGPU->SetLineColor(kBlue);
0423 hChi2EEGPU->SetLineWidth(1.);
0424 hChi2EEGPU->Draw("sames");
0425 gPad->Update();
0426 auto stats = (TPaveStats *)hChi2EEGPU->FindObject("stats");
0427 auto y2 = stats->GetY2NDC();
0428 auto y1 = stats->GetY1NDC();
0429 stats->SetY2NDC(y1);
0430 stats->SetY1NDC(y1 - (y2 - y1));
0431 }
0432
0433 c.cd(2);
0434 gPad->SetGrid();
0435 hChi2EBGPUvsCPU->Draw("COLZ");
0436
0437 c.cd(5);
0438 gPad->SetGrid();
0439 hChi2EEGPUvsCPU->Draw("COLZ");
0440
0441 c.cd(3);
0442
0443 hChi2EBGPUCPUratio->Draw("");
0444
0445 c.cd(6);
0446
0447 hChi2EEGPUCPUratio->Draw("");
0448
0449 c.SaveAs("ecal-chi2.root");
0450 c.SaveAs("ecal-chi2.png");
0451
0452
0453
0454 c.cd(1);
0455 {
0456 gPad->SetLogy();
0457 hFlagsEBCPU->SetLineColor(kBlack);
0458 hFlagsEBCPU->SetLineWidth(1.);
0459 hFlagsEBCPU->Draw("");
0460 hFlagsEBGPU->SetLineColor(kBlue);
0461 hFlagsEBGPU->SetLineWidth(1.);
0462 hFlagsEBGPU->Draw("sames");
0463 gPad->Update();
0464 auto stats = (TPaveStats *)hFlagsEBGPU->FindObject("stats");
0465 auto y2 = stats->GetY2NDC();
0466 auto y1 = stats->GetY1NDC();
0467 stats->SetY2NDC(y1);
0468 stats->SetY1NDC(y1 - (y2 - y1));
0469 }
0470
0471 c.cd(4);
0472 {
0473 gPad->SetLogy();
0474 hFlagsEECPU->SetLineColor(kBlack);
0475 hFlagsEECPU->SetLineWidth(1.);
0476 hFlagsEECPU->Draw("");
0477 hFlagsEEGPU->SetLineColor(kBlue);
0478 hFlagsEEGPU->SetLineWidth(1.);
0479 hFlagsEEGPU->Draw("sames");
0480 gPad->Update();
0481 auto stats = (TPaveStats *)hFlagsEEGPU->FindObject("stats");
0482 auto y2 = stats->GetY2NDC();
0483 auto y1 = stats->GetY1NDC();
0484 stats->SetY2NDC(y1);
0485 stats->SetY1NDC(y1 - (y2 - y1));
0486 }
0487
0488 c.cd(2);
0489 gPad->SetGrid();
0490 hFlagsEBGPUvsCPU->Draw("COLZ");
0491
0492 c.cd(5);
0493 gPad->SetGrid();
0494 hFlagsEEGPUvsCPU->Draw("COLZ");
0495
0496 c.cd(3);
0497 hFlagsEBGPUCPUratio->Draw("");
0498
0499 c.cd(6);
0500 hFlagsEEGPUCPUratio->Draw("");
0501
0502 c.SaveAs("ecal-flags.root");
0503 c.SaveAs("ecal-flags.png");
0504
0505 TCanvas cRechits("Rechits", "Rechits", 1750, 860);
0506 cRechits.Divide(3, 2);
0507
0508
0509 cRechits.cd(1);
0510 {
0511 gPad->SetLogy();
0512 hRechitsEBCPU->SetLineColor(kRed);
0513 hRechitsEBCPU->SetLineWidth(2);
0514 hRechitsEBCPU->Draw("");
0515 hRechitsEBGPU->SetLineColor(kBlue);
0516 hRechitsEBGPU->SetLineWidth(2);
0517 hRechitsEBGPU->Draw("sames");
0518 cRechits.Update();
0519 auto stats = (TPaveStats *)hRechitsEBGPU->FindObject("stats");
0520 auto y2 = stats->GetY2NDC();
0521 auto y1 = stats->GetY1NDC();
0522 stats->SetY2NDC(y1);
0523 stats->SetY1NDC(y1 - (y2 - y1));
0524 }
0525 cRechits.cd(4);
0526 {
0527 gPad->SetLogy();
0528 hRechitsEECPU->SetLineColor(kRed);
0529 hRechitsEECPU->SetLineWidth(2);
0530 hRechitsEECPU->Draw("");
0531 hRechitsEEGPU->SetLineColor(kBlue);
0532 hRechitsEEGPU->SetLineWidth(2);
0533 hRechitsEEGPU->Draw("sames");
0534 cRechits.Update();
0535 auto stats = (TPaveStats *)hRechitsEEGPU->FindObject("stats");
0536 auto y2 = stats->GetY2NDC();
0537 auto y1 = stats->GetY1NDC();
0538 stats->SetY2NDC(y1);
0539 stats->SetY1NDC(y1 - (y2 - y1));
0540 }
0541 cRechits.cd(2);
0542 { hRechitsEBGPUvsCPU->Draw("COLZ"); }
0543 cRechits.cd(5);
0544 { hRechitsEEGPUvsCPU->Draw("COLZ"); }
0545 cRechits.cd(3);
0546 {
0547 gPad->SetLogy();
0548 hRechitsEBGPUCPUratio->Draw("");
0549 }
0550 cRechits.cd(6);
0551 {
0552 gPad->SetLogy();
0553 hRechitsEEGPUCPUratio->Draw("");
0554 }
0555 cRechits.SaveAs("ecal-rechits.root");
0556 cRechits.SaveAs("ecal-rechits.png");
0557 }
0558
0559 rf.Close();
0560 rfout.Write();
0561 rfout.Close();
0562
0563 return 0;
0564 }