File indexing completed on 2024-09-28 07:02:59
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"] = new TH1I("EcalBarrelScFiHits_hits_per_event", "EcalBarrelScFi Simulated hit Nhits/event;Nhits", 300, 0.0, 3000);
0031 hist2D["EcalBarrelScFiHits_occupancy"] = new TH2I("EcalBarrelScFiHits_occupancy", "EcalBarrelScFi Simulated hit occupancy;column;row", 70, -700.0, 700.0, 70, -700.0, 700.0);
0032 hist1D["EcalBarrelScFiHits_hit_energy"] = new TH1D("EcalBarrelScFiHits_hit_energy", "EcalBarrelScFi Simulated hit energy;GeV", 1000, 0.0, 2.0);
0033
0034 hist1D["EcalBarrelScFiRawHits_hits_per_event"] = new TH1I("EcalBarrelScFiRawHits_hits_per_event", "EcalBarrelScFi Simulated digitized hit Nhits/event;Nhits", 300, 0.0, 3000);
0035 hist1D["EcalBarrelScFiRawHits_amplitude"] = new TH1D("EcalBarrelScFiRawHits_amplitude", "EcalBarrelScFi Simulated digitized hit amplitude;amplitude", 1000, 0.0, 8200.0);
0036 hist1D["EcalBarrelScFiRawHits_timestamp"] = new TH1I("EcalBarrelScFiRawHits_timestamp", "EcalBarrelScFi Simulated digitized hit timestamp;timestamp", 1024, 0.0, 8191.0);
0037
0038 hist1D["EcalBarrelScFiRecHits_hits_per_event"] = new TH1I("EcalBarrelScFiRecHits_hits_per_event", "EcalBarrelScFi Reconstructed hit Nhits/event;Nhits", 300, 0.0, 3000);
0039 hist1D["EcalBarrelScFiRecHits_hit_energy"] = new TH1D("EcalBarrelScFiRecHits_hit_energy", "EcalBarrelScFi Reconstructed hit energy;MeV", 1000, 0.0, 100.0);
0040 hist2D["EcalBarrelScFiRecHits_xy"] = new TH2D("EcalBarrelScFiRecHits_xy", "EcalBarrelScFi Reconstructed hit Y vs. X (energy weighted);x;y", 128, -1100.0, 1100.0, 128, -1100.0, 1100.0);
0041 hist1D["EcalBarrelScFiRecHits_z"] = new TH1D("EcalBarrelScFiRecHits_z", "EcalBarrelScFi Reconstructed hit Z;z", 400, -3000.0, 1600.0);
0042 hist1D["EcalBarrelScFiRecHits_time"] = new TH1D("EcalBarrelScFiRecHits_time", "EcalBarrelScFi Reconstructed hit time;time", 1000, -10.0, 2000.0);
0043
0044 hist1D["EcalBarrelScFiProtoClusters_clusters_per_event"] = new TH1I("EcalBarrelScFiProtoClusters_clusters_per_event", "EcalBarrelScFi Protoclusters Nclusters/event;Nclusters", 61, -0.5, 60.5);
0045 hist1D["EcalBarrelScFiProtoClusters_hits_per_cluster"] = new TH1I("EcalBarrelScFiProtoClusters_hits_per_cluster", "EcalBarrelScFi Protoclusters Nhits/cluster;Nhits", 101, -0.5, 100.5);
0046
0047
0048 hist2D["EcalBarrelScFiHits_occupancy"]->SetOption("colz");
0049 hist2D["EcalBarrelScFiRecHits_xy"]->SetOption("colz");
0050 }
0051
0052
0053
0054
0055 void EcalBarrelScFiCheckProcessor::ProcessSequential(const std::shared_ptr<const JEvent>& event) {
0056 const auto &EcalBarrelScFiHits = *(event->GetCollection<edm4hep::SimCalorimeterHit>("EcalBarrelScFiHits"));
0057 const auto &EcalBarrelScFiRawHits = *(event->GetCollection<edm4hep::RawCalorimeterHit>("EcalBarrelScFiRawHits"));
0058 const auto &EcalBarrelScFiRecHits = *(event->GetCollection<edm4eic::CalorimeterHit>("EcalBarrelScFiRecHits"));
0059 const auto &EcalBarrelScFiProtoClusters = *(event->GetCollection<edm4eic::ProtoCluster>("EcalBarrelScFiProtoClusters"));
0060
0061
0062
0063
0064 hist1D["EcalBarrelScFiHits_hits_per_event"]->Fill(EcalBarrelScFiHits.size());
0065 for( auto hit : EcalBarrelScFiHits ){
0066 auto row = floor(hit.getPosition().y);
0067 auto col = floor(hit.getPosition().x);
0068 hist2D["EcalBarrelScFiHits_occupancy"]->Fill(row, col);
0069
0070 hist1D["EcalBarrelScFiHits_hit_energy"]->Fill(hit.getEnergy());
0071 }
0072
0073
0074 hist1D["EcalBarrelScFiRawHits_hits_per_event"]->Fill(EcalBarrelScFiRawHits.size());
0075 for( auto hit : EcalBarrelScFiRawHits ){
0076 hist1D["EcalBarrelScFiRawHits_amplitude"]->Fill( hit.getAmplitude() );
0077 hist1D["EcalBarrelScFiRawHits_timestamp"]->Fill( hit.getTimeStamp() );
0078 }
0079
0080
0081 hist1D["EcalBarrelScFiRecHits_hits_per_event"]->Fill(EcalBarrelScFiRecHits.size());
0082 for( auto hit : EcalBarrelScFiRecHits ){
0083 auto &pos = hit.getPosition();
0084 hist1D["EcalBarrelScFiRecHits_hit_energy"]->Fill(hit.getEnergy() / dd4hep::MeV);
0085 hist2D["EcalBarrelScFiRecHits_xy"]->Fill( pos.x, pos.y, hit.getEnergy() );
0086 hist1D["EcalBarrelScFiRecHits_z"]->Fill(pos.z);
0087 hist1D["EcalBarrelScFiRecHits_time"]->Fill( hit.getTime() );
0088 }
0089
0090
0091
0092 hist1D["EcalBarrelScFiProtoClusters_clusters_per_event"]->Fill(EcalBarrelScFiProtoClusters.size());
0093 for (auto proto : EcalBarrelScFiProtoClusters ){
0094 hist1D["EcalBarrelScFiProtoClusters_hits_per_cluster"]->Fill( proto.getHits().size() );
0095 }
0096 }
0097
0098
0099
0100
0101 void EcalBarrelScFiCheckProcessor::FinishWithGlobalRootLock() {
0102
0103
0104
0105 }