Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:13:25

0001 // ----------------------------------------------------------------------------
0002 // 'Fun4All_TestTriggerClusterMakerOnSim.C'
0003 // Derek Anderson
0004 // 05.16.2024
0005 //
0006 // A small Fun4All macro to test the 'TriggerClusterMaker' module.
0007 // ----------------------------------------------------------------------------
0008 
0009 #define FUN4ALL_TESTTRIGGERCLUSTERMAKER_C
0010 
0011 // c++ utilities
0012 #include <string>
0013 #include <vector>
0014 // calotrigger utilities
0015 #include <caloreco/CaloTowerCalib.h>
0016 #include <caloreco/CaloTowerBuilder.h>
0017 #include <caloreco/CaloWaveformProcessing.h>
0018 #include <calotrigger/LL1PacketGetter.h>
0019 #include <calotrigger/CaloTriggerEmulator.h>
0020 // ffa modules
0021 #include <ffamodules/FlagHandler.h>
0022 #include <ffamodules/CDBInterface.h>
0023 // fun4all libraries
0024 #include <fun4all/SubsysReco.h>
0025 #include <fun4all/Fun4AllServer.h>
0026 #include <fun4all/Fun4AllInputManager.h>
0027 #include <fun4all/Fun4AllDstInputManager.h>
0028 #include <fun4all/Fun4AllDstOutputManager.h>
0029 #include <fun4allraw/Fun4AllPrdfInputManager.h>
0030 // phool utilities
0031 #include <phool/recoConsts.h>
0032 // module definitions
0033 #include <triggerclustermaker/TriggerClusterMaker.h>
0034 
0035 // load libraries
0036 R__LOAD_LIBRARY(libcalo_io.so)
0037 R__LOAD_LIBRARY(libcalotrigger.so)
0038 R__LOAD_LIBRARY(libfun4all.so)
0039 R__LOAD_LIBRARY(libfun4allraw.so)
0040 R__LOAD_LIBRARY(libtriggerclustermaker.so)
0041 
0042 // convenience types
0043 typedef std::vector<std::string> SVec;
0044 
0045 
0046 
0047 
0048 // macro body -----------------------------------------------------------------
0049 
0050 void Fun4All_TestTriggerClusterMakerOnSim(
0051   const int  runnumber  = 11,
0052   const int  nEvents    = 10,
0053   const int  verbosity  = 5,
0054   const SVec vecInFiles = {
0055     "input/pp200py8jet10run11.DstCaloCluster.list",
0056     "input/pp200py8jet10run11.DstG4Hits.list"
0057   },
0058   const SVec lutFiles = {
0059     "/sphenix/user/dlis/Projects/macros/CDBTest/emcal_ll1_lut.root",
0060     "/sphenix/user/dlis/Projects/macros/CDBTest/hcalin_ll1_lut.root",
0061     "/sphenix/user/dlis/Projects/macros/CDBTest/hcalout_ll1_lut.root"
0062   },
0063   const std::string outFile = "test.root"
0064 ) {
0065 
0066   // options ------------------------------------------------------------------
0067 
0068   // tower builder options
0069   const bool        offline     = true;
0070   const uint32_t    nSamples    = 12;
0071   const std::string wavePrefix  = "WAVEFORM_";
0072   const std::string calibPrefix = "TOWERSWAVEFORM_CALIB_";
0073 
0074   // tower builder type: need waveforms for trigger primitives
0075   CaloTowerDefs::BuilderType build = CaloTowerDefs::kPRDFWaveform;
0076 
0077   // emulator options
0078   const bool        useEMCal = true;
0079   const bool        useIHCal = true;
0080   const bool        useOHCal = true;
0081   const uint32_t    iThresh  = 1;
0082   const uint32_t    nSampUse = 6;
0083   const uint32_t    nDelay   = 5;
0084   const std::string type     = "JET";
0085 
0086   // trigger cluster maker options
0087   TriggerClusterMakerConfig cfg_maker {
0088     .debug        = true,
0089     .outNodeName  = "TriggerClusters",
0090     .inLL1Nodes = {
0091       "LL1OUT_JET"
0092     },
0093     .inPrimNodes = {
0094       "TRIGGERPRIMITIVES_JET",
0095       "TRIGGERPRIMITIVES_EMCAL",
0096       "TRIGGERPRIMITIVES_EMCAL_LL1",
0097       "TRIGGERPRIMITIVES_HCAL_LL1",
0098       "TRIGGERPRIMITIVES_HCALIN",
0099       "TRIGGERPRIMITIVES_HCALOUT"
0100     },
0101     .inEMCalTowerNode = "TOWERINFO_CALIB_CEMC",
0102     .inIHCalTowerNode = "TOWERINFO_CALIB_HCALIN",
0103     .inOHCalTowerNode = "TOWERINFO_CALIB_HCALOUT"
0104   };
0105 
0106   // initialize f4a -----------------------------------------------------------
0107 
0108   Fun4AllServer* f4a = Fun4AllServer::instance();
0109   CDBInterface*  cdb = CDBInterface::instance();
0110   recoConsts*    rc  = recoConsts::instance();
0111   f4a -> Verbosity(verbosity);
0112   cdb -> Verbosity(verbosity);
0113 
0114   // grab lookup tables
0115   rc -> set_StringFlag("CDB_GLOBALTAG", "ProdA_2023");
0116   rc -> set_uint64Flag("TIMESTAMP", runnumber);
0117 
0118   // register inputs/outputs and handelers ------------------------------------
0119 
0120   // register input managers
0121   for (size_t iInput = 0; iInput < vecInFiles.size(); ++iInput) {
0122     Fun4AllDstInputManager* input = new Fun4AllDstInputManager("InputDstManager" + std::to_string(iInput));
0123     input -> AddListFile(vecInFiles[iInput]);
0124     f4a   -> registerInputManager(input);
0125   }
0126 
0127   // register output manager
0128   Fun4AllDstOutputManager* output = new Fun4AllDstOutputManager("OutputDstManager", outFile);
0129   f4a -> registerOutputManager(output);
0130 
0131   // register flag handler
0132   FlagHandler* handler = new FlagHandler();
0133   f4a -> registerSubsystem(handler);
0134 
0135   // register subsystem reco modules ------------------------------------------
0136 
0137   // build emcal towers  
0138   CaloTowerBuilder* emBuilder = new CaloTowerBuilder("EMCALBUILDER");
0139   emBuilder -> set_detector_type(CaloTowerDefs::CEMC);
0140   emBuilder -> set_processing_type(CaloWaveformProcessing::FAST);
0141   emBuilder -> set_builder_type(build);
0142   emBuilder -> set_outputNodePrefix(wavePrefix);
0143   emBuilder -> set_nsamples(nSamples);
0144   emBuilder -> set_offlineflag(offline);
0145   f4a       -> registerSubsystem(emBuilder);
0146 
0147   // build inner hcal towers
0148   CaloTowerBuilder* ihBuilder = new CaloTowerBuilder("HCALINBUILDER");
0149   ihBuilder -> set_detector_type(CaloTowerDefs::HCALIN);
0150   ihBuilder -> set_processing_type(CaloWaveformProcessing::FAST);
0151   ihBuilder -> set_builder_type(build);
0152   ihBuilder -> set_outputNodePrefix(wavePrefix);
0153   ihBuilder -> set_nsamples(nSamples);
0154   ihBuilder -> set_offlineflag(offline);
0155   f4a       -> registerSubsystem(ihBuilder);
0156 
0157   // build outer hcal towers
0158   CaloTowerBuilder* ohBuilder = new CaloTowerBuilder("HCALOUTBUILDER");
0159   ohBuilder -> set_detector_type(CaloTowerDefs::HCALOUT);
0160   ohBuilder -> set_processing_type(CaloWaveformProcessing::FAST);
0161   ohBuilder -> set_builder_type(build);
0162   ohBuilder -> set_outputNodePrefix(wavePrefix);
0163   ohBuilder -> set_nsamples(nSamples);
0164   ohBuilder -> set_offlineflag(offline);
0165   f4a       -> registerSubsystem(ohBuilder);
0166 
0167   // calibrate emcal towers
0168   CaloTowerCalib* emCalib = new CaloTowerCalib();
0169   emCalib -> set_detector_type(CaloTowerDefs::CEMC);
0170   emCalib -> set_inputNodePrefix(wavePrefix);
0171   emCalib -> set_outputNodePrefix(calibPrefix);
0172   f4a     -> registerSubsystem(emCalib);
0173 
0174   // calibrate inner hcal towers
0175   CaloTowerCalib* ihCalib = new CaloTowerCalib();
0176   ihCalib -> set_detector_type(CaloTowerDefs::HCALIN);
0177   ihCalib -> set_inputNodePrefix(wavePrefix);
0178   ihCalib -> set_outputNodePrefix(calibPrefix);
0179   f4a     -> registerSubsystem(ihCalib);
0180 
0181   // calibrate outer hcal towers
0182   CaloTowerCalib* ohCalib = new CaloTowerCalib();
0183   ohCalib -> set_detector_type(CaloTowerDefs::HCALOUT);
0184   ohCalib -> set_inputNodePrefix(wavePrefix);
0185   ohCalib -> set_outputNodePrefix(calibPrefix);
0186   f4a     -> registerSubsystem(ohCalib);
0187 
0188   // run emulator
0189   CaloTriggerEmulator* emulator = new CaloTriggerEmulator("TriggerEmulator");
0190   emulator -> Verbosity(verbosity);
0191   emulator -> setTriggerType(type);
0192   emulator -> setNSamples(nSamples);
0193   emulator -> setTriggerSample(nSampUse);
0194   emulator -> useEMCAL(useEMCal);
0195   emulator -> useHCALIN(useIHCal);
0196   emulator -> useHCALOUT(useOHCal);
0197   emulator -> setEmcalLUTFile(lutFiles.at(0));
0198   emulator -> setHcalinLUTFile(lutFiles.at(1));
0199   emulator -> setHcaloutLUTFile(lutFiles.at(2));
0200   emulator -> setThreshold(iThresh);
0201   f4a      -> registerSubsystem(emulator);
0202 
0203   // finally, make trigger clusters
0204   TriggerClusterMaker* maker = new TriggerClusterMaker("TriggerClusterMaker");
0205   maker -> Verbosity(verbosity);
0206   maker -> SetConfig(cfg_maker);
0207   f4a   -> registerSubsystem(maker);
0208 
0209   // run modules and exit -----------------------------------------------------
0210 
0211   // run4all
0212   f4a -> run(nEvents);
0213   f4a -> End();
0214   delete f4a;
0215 
0216   // exit
0217   gSystem -> Exit(0);
0218   return;
0219 
0220 }
0221 
0222 // end ------------------------------------------------------------------------