Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 08:17:53

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/JException.h>
0010 #include <JANA/Utils/JTypeInfo.h>
0011 #include <stdexcept>
0012 #include <string>
0013 #include <vector>
0014 
0015 #include "extensions/jana/JOmniFactoryGeneratorT.h"
0016 #include "factories/digi/MPGDTrackerDigi_factory.h"
0017 #include "factories/digi/SiliconTrackerDigi_factory.h"
0018 #include "factories/tracking/TrackerHitReconstruction_factory.h"
0019 
0020 // 2D-STRIP DIGITIZATION = DEFAULT
0021 // - Is produced by "MPGDTrackerDigi".
0022 // - Relies on "MultiSegmentation" <readout> in "compact" geometry file.
0023 // PIXEL DIGITIZATION = BROUGHT INTO PLAY BY OPTION "MPGD:SiFactoryPattern".
0024 // - Is produced by "SiliconTrackerDigi".
0025 
0026 extern "C" {
0027 void InitPlugin(JApplication* app) {
0028   InitJANAPlugin(app);
0029 
0030   using namespace eicrecon;
0031 
0032   // PIXEL DIGITIZATION?
0033   // It's encoded in bit pattern "SiFactoryPattern": 0x1=CyMBaL, 0x2=OuterBarrel, ...
0034   // unsigned int SiFactoryPattern = 0x0; // no SiliconTrackerDigi
0035   unsigned int SiFactoryPattern = 0x3; // using SiliconTrackerDigi
0036   std::string SiFactoryPattern_str;
0037   app->SetDefaultParameter("MPGD:SiFactoryPattern", SiFactoryPattern_str,
0038                            "Hexadecimal Pattern of MPGDs digitized via \"SiliconTrackerDigi\"");
0039   if (!SiFactoryPattern_str.empty()) {
0040     try {
0041       SiFactoryPattern = std::stoul(SiFactoryPattern_str, nullptr, 16);
0042     } catch (const std::invalid_argument& e) {
0043       throw JException(
0044           R"(Option "MPGD:SiFactoryPattern": Error ("%s") parsing input
0045         string: '%s')",
0046           e.what(), SiFactoryPattern_str.c_str());
0047     }
0048   }
0049 
0050   // ***** "MPGDBarrel" (=CyMBaL)
0051   // Digitization
0052   if ((SiFactoryPattern & 0x1) != 0U) {
0053     app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0054         "MPGDBarrelRawHits", {"EventHeader", "MPGDBarrelHits"},
0055         {"MPGDBarrelRawHits", "MPGDBarrelRawHitAssociations"},
0056         {
0057             .threshold      = 100 * dd4hep::eV,
0058             .timeResolution = 10,
0059         },
0060         app));
0061   } else {
0062     app->Add(new JOmniFactoryGeneratorT<MPGDTrackerDigi_factory>(
0063         "MPGDBarrelRawHits", {"EventHeader", "MPGDBarrelHits"},
0064         {"MPGDBarrelRawHits", "MPGDBarrelRawHitAssociations"},
0065         {
0066             .readout        = "MPGDBarrelHits",
0067             .threshold      = 100 * dd4hep::eV,
0068             .timeResolution = 10,
0069         },
0070         app));
0071   }
0072 
0073   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0074   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0075       "MPGDBarrelRecHits", {"MPGDBarrelRawHits"}, // Input data collection tags
0076       {"MPGDBarrelRecHits"},                      // Output data tag
0077       {
0078           .timeResolution = 10,
0079       },
0080       app));
0081 
0082   // ***** OuterMPGDBarrel
0083   // Digitization
0084   if ((SiFactoryPattern & 0x2) != 0U) {
0085     app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0086         "OuterMPGDBarrelRawHits", {"EventHeader", "OuterMPGDBarrelHits"},
0087         {"OuterMPGDBarrelRawHits", "OuterMPGDBarrelRawHitAssociations"},
0088         {
0089             .threshold      = 100 * dd4hep::eV,
0090             .timeResolution = 10,
0091         },
0092         app));
0093   } else {
0094     app->Add(new JOmniFactoryGeneratorT<MPGDTrackerDigi_factory>(
0095         "OuterMPGDBarrelRawHits", {"EventHeader", "OuterMPGDBarrelHits"},
0096         {"OuterMPGDBarrelRawHits", "OuterMPGDBarrelRawHitAssociations"},
0097         {
0098             .readout        = "OuterMPGDBarrelHits",
0099             .threshold      = 100 * dd4hep::eV,
0100             .timeResolution = 10,
0101         },
0102         app));
0103   }
0104 
0105   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0106   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0107       "OuterMPGDBarrelRecHits", {"OuterMPGDBarrelRawHits"}, // Input data collection tags
0108       {"OuterMPGDBarrelRecHits"},                           // Output data tag
0109       {
0110           .timeResolution = 10,
0111       },
0112       app));
0113 
0114   // ***** "BackwardMPGDEndcap"
0115   // Digitization
0116   app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0117       "BackwardMPGDEndcapRawHits", {"EventHeader", "BackwardMPGDEndcapHits"},
0118       {"BackwardMPGDEndcapRawHits", "BackwardMPGDEndcapRawHitAssociations"},
0119       {
0120           .threshold      = 100 * dd4hep::eV,
0121           .timeResolution = 10,
0122       },
0123       app));
0124 
0125   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0126   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0127       "BackwardMPGDEndcapRecHits", {"BackwardMPGDEndcapRawHits"}, // Input data collection tags
0128       {"BackwardMPGDEndcapRecHits"},                              // Output data tag
0129       {
0130           .timeResolution = 10,
0131       },
0132       app));
0133 
0134   // ""ForwardMPGDEndcap"
0135   // Digitization
0136   app->Add(new JOmniFactoryGeneratorT<SiliconTrackerDigi_factory>(
0137       "ForwardMPGDEndcapRawHits", {"EventHeader", "ForwardMPGDEndcapHits"},
0138       {"ForwardMPGDEndcapRawHits", "ForwardMPGDEndcapRawHitAssociations"},
0139       {
0140           .threshold      = 100 * dd4hep::eV,
0141           .timeResolution = 10,
0142       },
0143       app));
0144 
0145   // Convert raw digitized hits into hits with geometry info (ready for tracking)
0146   app->Add(new JOmniFactoryGeneratorT<TrackerHitReconstruction_factory>(
0147       "ForwardMPGDEndcapRecHits", {"ForwardMPGDEndcapRawHits"}, // Input data collection tags
0148       {"ForwardMPGDEndcapRecHits"},                             // Output data tag
0149       {
0150           .timeResolution = 10,
0151       },
0152       app));
0153 }
0154 } // extern "C"