Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-26 07:58:51

0001 // Copyright 2022, Dmitry Romanov
0002 // Subject to the terms in the LICENSE file found in the top-level directory.
0003 //
0004 //
0005 
0006 #include <Evaluator/DD4hepUnits.h>
0007 #include <JANA/JApplication.h>
0008 #include <JANA/JApplicationFwd.h>
0009 #include <JANA/Utils/JTypeInfo.h>
0010 #include <TMath.h>
0011 #include <edm4eic/unit_system.h>
0012 #include <edm4hep/SimTrackerHit.h>
0013 #include <cmath>
0014 #include <map>
0015 #include <memory>
0016 #include <string>
0017 #include <vector>
0018 
0019 #include "algorithms/digi/SiliconChargeSharingConfig.h"
0020 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0021 #include "factories/digi/EICROCDigitization_factory.h"
0022 #include "factories/digi/PulseCombiner_factory.h"
0023 #include "factories/digi/PulseGeneration_factory.h"
0024 #include "factories/digi/SiliconChargeSharing_factory.h"
0025 #include "factories/digi/SiliconPulseDiscretization_factory.h"
0026 #include "factories/digi/SiliconTrackerDigi_factory.h"
0027 #include "factories/tracking/TrackerHitReconstruction_factory.h"
0028 
0029 extern "C" {
0030 void InitPlugin(JApplication* app) {
0031   InitJANAPlugin(app);
0032 
0033   using namespace eicrecon;
0034 
0035   // Digitization
0036   app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0037       "TOFEndcapRawHits", {"EventHeader", "TOFEndcapHits"},
0038       {"TOFEndcapRawHits", "TOFEndcapRawHitAssociations"},
0039       {
0040           .threshold      = 6.0 * dd4hep::keV,
0041           .timeResolution = 0.025,
0042       },
0043       app));
0044 
0045   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0046   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0047       "TOFEndcapRecHits", {"TOFEndcapRawHits"}, // Input data collection tags
0048       {"TOFEndcapRecHits"},                     // Output data tag
0049       {
0050           .timeResolution = 0.025,
0051       },
0052       app));
0053 
0054   app->Add(new JOmniFactoryGeneratorT<SiliconChargeSharing_factory>(
0055       "TOFEndcapSharedHits", {"TOFEndcapHits"}, {"TOFEndcapSharedHits"},
0056       {
0057           .sigma_mode     = SiliconChargeSharingConfig::ESigmaMode::abs,
0058           .sigma_sharingx = 0.1 * dd4hep::cm,
0059           .sigma_sharingy = 0.1 * dd4hep::cm,
0060           .min_edep       = 0.0 * edm4eic::unit::GeV,
0061           .readout        = "TOFEndcapHits",
0062       },
0063       app));
0064 
0065   const double x_when_landau_min = -0.22278;
0066   const double landau_min        = TMath::Landau(x_when_landau_min, 0, 1, true);
0067   const double sigma_analog      = 0.293951 * edm4eic::unit::ns;
0068   const double Vm                = 3e-4 * dd4hep::GeV;
0069   const double adc_range         = 256;
0070 
0071   const double gain = -adc_range / Vm / landau_min * sigma_analog;
0072   const int offset  = 3;
0073   app->Add(new JOmniFactoryGeneratorT<PulseGeneration_factory<edm4hep::SimTrackerHit>>(
0074       "TOFEndcapSmoothPulses", {"TOFEndcapSharedHits"}, {"TOFEndcapSmoothPulses"},
0075       {
0076           .pulse_shape_function = "LandauPulse",
0077           .pulse_shape_params   = {gain, sigma_analog, offset},
0078           .ignore_thres         = 0.05 * adc_range,
0079           .timestep             = 0.01 * edm4eic::unit::ns,
0080       },
0081       app));
0082 
0083   app->Add(new JOmniFactoryGeneratorT<PulseCombiner_factory>(
0084       "TOFEndcapCombinedPulses", {"TOFEndcapSmoothPulses"}, {"TOFEndcapCombinedPulses"},
0085       {
0086           .minimum_separation = 25 * edm4eic::unit::ns,
0087       },
0088       app));
0089 
0090   double risetime = 0.45 * edm4eic::unit::ns;
0091   app->Add(new JOmniFactoryGeneratorT<SiliconPulseDiscretization_factory>(
0092       "TOFEndcapPulses", {"TOFEndcapCombinedPulses"}, {"TOFEndcapPulses"},
0093       {
0094           .EICROC_period = 25 * edm4eic::unit::ns,
0095           .local_period  = 25 * edm4eic::unit::ns / 1024,
0096           .global_offset = -offset * sigma_analog + risetime,
0097       },
0098       app));
0099 
0100   app->Add(new JOmniFactoryGeneratorT<EICROCDigitization_factory>(
0101       "TOFEndcapADCTDC", {"TOFEndcapPulses"}, {"TOFEndcapADCTDC"}, {}, app));
0102 }
0103 } // extern "C"