File indexing completed on 2025-07-09 07:53:27
0001
0002
0003
0004
0005
0006 #include "EcalBarrelScFiCheckProcessor.h"
0007
0008 #include <Evaluator/DD4hepUnits.h>
0009 #include <JANA/JApplication.h>
0010 #include <TDirectory.h>
0011 #include <edm4eic/CalorimeterHitCollection.h>
0012 #include <edm4eic/ProtoClusterCollection.h>
0013 #include <edm4hep/RawCalorimeterHitCollection.h>
0014 #include <edm4hep/SimCalorimeterHitCollection.h>
0015 #include <edm4hep/Vector3f.h>
0016 #include <podio/RelationRange.h>
0017 #include <cmath>
0018
0019 #include "services/rootfile/RootFile_service.h"
0020
0021
0022
0023
0024 void EcalBarrelScFiCheckProcessor::InitWithGlobalRootLock() {
0025
0026 auto rootfile_svc = GetApplication()->GetService<RootFile_service>();
0027 auto* rootfile = rootfile_svc->GetHistFile();
0028 rootfile->mkdir("EcalBarrelScFi")->cd();
0029
0030 hist1D["EcalBarrelScFiHits_hits_per_event"] =
0031 new TH1I("EcalBarrelScFiHits_hits_per_event",
0032 "EcalBarrelScFi Simulated hit Nhits/event;Nhits", 300, 0.0, 3000);
0033 hist2D["EcalBarrelScFiHits_occupancy"] =
0034 new TH2I("EcalBarrelScFiHits_occupancy", "EcalBarrelScFi Simulated hit occupancy;column;row",
0035 70, -700.0, 700.0, 70, -700.0, 700.0);
0036 hist1D["EcalBarrelScFiHits_hit_energy"] = new TH1D(
0037 "EcalBarrelScFiHits_hit_energy", "EcalBarrelScFi Simulated hit energy;GeV", 1000, 0.0, 2.0);
0038
0039 hist1D["EcalBarrelScFiRawHits_hits_per_event"] =
0040 new TH1I("EcalBarrelScFiRawHits_hits_per_event",
0041 "EcalBarrelScFi Simulated digitized hit Nhits/event;Nhits", 300, 0.0, 3000);
0042 hist1D["EcalBarrelScFiRawHits_amplitude"] =
0043 new TH1D("EcalBarrelScFiRawHits_amplitude",
0044 "EcalBarrelScFi Simulated digitized hit amplitude;amplitude", 1000, 0.0, 8200.0);
0045 hist1D["EcalBarrelScFiRawHits_timestamp"] =
0046 new TH1I("EcalBarrelScFiRawHits_timestamp",
0047 "EcalBarrelScFi Simulated digitized hit timestamp;timestamp", 1024, 0.0, 8191.0);
0048
0049 hist1D["EcalBarrelScFiRecHits_hits_per_event"] =
0050 new TH1I("EcalBarrelScFiRecHits_hits_per_event",
0051 "EcalBarrelScFi Reconstructed hit Nhits/event;Nhits", 300, 0.0, 3000);
0052 hist1D["EcalBarrelScFiRecHits_hit_energy"] =
0053 new TH1D("EcalBarrelScFiRecHits_hit_energy", "EcalBarrelScFi Reconstructed hit energy;MeV",
0054 1000, 0.0, 100.0);
0055 hist2D["EcalBarrelScFiRecHits_xy"] = new TH2D(
0056 "EcalBarrelScFiRecHits_xy", "EcalBarrelScFi Reconstructed hit Y vs. X (energy weighted);x;y",
0057 128, -1100.0, 1100.0, 128, -1100.0, 1100.0);
0058 hist1D["EcalBarrelScFiRecHits_z"] = new TH1D(
0059 "EcalBarrelScFiRecHits_z", "EcalBarrelScFi Reconstructed hit Z;z", 400, -3000.0, 1600.0);
0060 hist1D["EcalBarrelScFiRecHits_time"] =
0061 new TH1D("EcalBarrelScFiRecHits_time", "EcalBarrelScFi Reconstructed hit time;time", 1000,
0062 -10.0, 2000.0);
0063
0064 hist1D["EcalBarrelScFiProtoClusters_clusters_per_event"] =
0065 new TH1I("EcalBarrelScFiProtoClusters_clusters_per_event",
0066 "EcalBarrelScFi Protoclusters Nclusters/event;Nclusters", 61, -0.5, 60.5);
0067 hist1D["EcalBarrelScFiProtoClusters_hits_per_cluster"] =
0068 new TH1I("EcalBarrelScFiProtoClusters_hits_per_cluster",
0069 "EcalBarrelScFi Protoclusters Nhits/cluster;Nhits", 101, -0.5, 100.5);
0070
0071
0072 hist2D["EcalBarrelScFiHits_occupancy"]->SetOption("colz");
0073 hist2D["EcalBarrelScFiRecHits_xy"]->SetOption("colz");
0074 }
0075
0076
0077
0078
0079 void EcalBarrelScFiCheckProcessor::ProcessSequential(const std::shared_ptr<const JEvent>& event) {
0080 const auto& EcalBarrelScFiHits =
0081 *(event->GetCollection<edm4hep::SimCalorimeterHit>("EcalBarrelScFiHits"));
0082 const auto& EcalBarrelScFiRawHits =
0083 *(event->GetCollection<edm4hep::RawCalorimeterHit>("EcalBarrelScFiRawHits"));
0084 const auto& EcalBarrelScFiRecHits =
0085 *(event->GetCollection<edm4eic::CalorimeterHit>("EcalBarrelScFiRecHits"));
0086 const auto& EcalBarrelScFiProtoClusters =
0087 *(event->GetCollection<edm4eic::ProtoCluster>("EcalBarrelScFiProtoClusters"));
0088
0089
0090
0091
0092 hist1D["EcalBarrelScFiHits_hits_per_event"]->Fill(EcalBarrelScFiHits.size());
0093 for (auto hit : EcalBarrelScFiHits) {
0094 auto row = floor(hit.getPosition().y);
0095 auto col = floor(hit.getPosition().x);
0096 hist2D["EcalBarrelScFiHits_occupancy"]->Fill(row, col);
0097
0098 hist1D["EcalBarrelScFiHits_hit_energy"]->Fill(hit.getEnergy());
0099 }
0100
0101
0102 hist1D["EcalBarrelScFiRawHits_hits_per_event"]->Fill(EcalBarrelScFiRawHits.size());
0103 for (auto hit : EcalBarrelScFiRawHits) {
0104 hist1D["EcalBarrelScFiRawHits_amplitude"]->Fill(hit.getAmplitude());
0105 hist1D["EcalBarrelScFiRawHits_timestamp"]->Fill(hit.getTimeStamp());
0106 }
0107
0108
0109 hist1D["EcalBarrelScFiRecHits_hits_per_event"]->Fill(EcalBarrelScFiRecHits.size());
0110 for (auto hit : EcalBarrelScFiRecHits) {
0111 const auto& pos = hit.getPosition();
0112 hist1D["EcalBarrelScFiRecHits_hit_energy"]->Fill(hit.getEnergy() / dd4hep::MeV);
0113 hist2D["EcalBarrelScFiRecHits_xy"]->Fill(pos.x, pos.y, hit.getEnergy());
0114 hist1D["EcalBarrelScFiRecHits_z"]->Fill(pos.z);
0115 hist1D["EcalBarrelScFiRecHits_time"]->Fill(hit.getTime());
0116 }
0117
0118
0119 hist1D["EcalBarrelScFiProtoClusters_clusters_per_event"]->Fill(
0120 EcalBarrelScFiProtoClusters.size());
0121 for (auto proto : EcalBarrelScFiProtoClusters) {
0122 hist1D["EcalBarrelScFiProtoClusters_hits_per_cluster"]->Fill(proto.getHits().size());
0123 }
0124 }
0125
0126
0127
0128
0129 void EcalBarrelScFiCheckProcessor::FinishWithGlobalRootLock() {
0130
0131
0132 }