Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-09 07:53:27

0001 
0002 //
0003 // Template for this file generated with eicmkplugin.py
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 // InitWithGlobalRootLock
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   // Set some draw options
0072   hist2D["EcalBarrelScFiHits_occupancy"]->SetOption("colz");
0073   hist2D["EcalBarrelScFiRecHits_xy"]->SetOption("colz");
0074 }
0075 
0076 //-------------------------------------------
0077 // ProcessSequential
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   // Fill histograms here
0090 
0091   // EcalBarrelScFiHits
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   // EcalBarrelScFiRawHits
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   // EcalBarrelScFiRecHits
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   // EcalBarrelScFiProtoClusters
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 // FinishWithGlobalRootLock
0128 //-------------------------------------------
0129 void EcalBarrelScFiCheckProcessor::FinishWithGlobalRootLock() {
0130 
0131   // Do any final calculations here.
0132 }