Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-28 07:02:59

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"]  =  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     // Set some draw options
0048     hist2D["EcalBarrelScFiHits_occupancy"]->SetOption("colz");
0049     hist2D["EcalBarrelScFiRecHits_xy"]->SetOption("colz");
0050 }
0051 
0052 //-------------------------------------------
0053 // ProcessSequential
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     // Fill histograms here
0062 
0063     // EcalBarrelScFiHits
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     // EcalBarrelScFiRawHits
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     // EcalBarrelScFiRecHits
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     // EcalBarrelScFiProtoClusters
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 // FinishWithGlobalRootLock
0100 //-------------------------------------------
0101 void EcalBarrelScFiCheckProcessor::FinishWithGlobalRootLock() {
0102 
0103     // Do any final calculations here.
0104 
0105 }