File indexing completed on 2025-08-03 08:20:26
0001 #ifndef MACRO_G4ZDC_C
0002 #define MACRO_G4ZDC_C
0003
0004 #include <GlobalVariables.C>
0005
0006 #include <G4_BeamLine.C>
0007
0008 #include <g4calo/RawTowerBuilderByHitIndex.h>
0009 #include <g4calo/RawTowerDigitizer.h>
0010
0011 #include <g4detectors/PHG4DetectorSubsystem.h>
0012 #include <g4detectors/PHG4ZDCDefs.h>
0013 #include <g4detectors/PHG4ZDCSubsystem.h>
0014
0015 #include <g4eval/CaloEvaluator.h>
0016
0017 #include <g4main/PHG4Reco.h>
0018
0019 #include <calobase/RawTowerDefs.h>
0020
0021 #include <caloreco/RawClusterBuilderTemplate.h>
0022 #include <caloreco/RawTowerCalibration.h>
0023
0024 #include <fun4all/Fun4AllServer.h>
0025
0026 R__LOAD_LIBRARY(libcalo_reco.so)
0027 R__LOAD_LIBRARY(libg4calo.so)
0028 R__LOAD_LIBRARY(libg4detectors.so)
0029 R__LOAD_LIBRARY(libg4eval.so)
0030
0031 namespace Enable
0032 {
0033 bool ZDC = false;
0034 bool ZDC_ABSORBER = false;
0035 bool ZDC_SUPPORT = false;
0036 bool ZDC_TOWER = false;
0037 bool ZDC_EVAL = false;
0038 bool ZDC_OVERLAPCHECK = false;
0039 int ZDC_VERBOSITY = 0;
0040 }
0041
0042 namespace G4ZDC
0043 {
0044 double Gz0 = 1900.;
0045 double outer_radius = 180.;
0046 std::string calibfile = "ZDC/mapping/towerMap_ZDC.txt";
0047 double ZDCPlaceZ = 1843.0;
0048
0049 }
0050
0051 void ZDCInit()
0052 {
0053 BlackHoleGeometry::max_radius = std::max(BlackHoleGeometry::max_radius, G4ZDC::outer_radius);
0054 BlackHoleGeometry::max_z = std::max(BlackHoleGeometry::max_z, G4ZDC::Gz0);
0055 BlackHoleGeometry::min_z = std::min(BlackHoleGeometry::min_z, -G4ZDC::Gz0);
0056 }
0057
0058 void ZDCSetup(PHG4Reco *g4Reco, const int absorberactive = 0)
0059 {
0060 bool AbsorberActive = Enable::ABSORBER || Enable::ZDC_ABSORBER || (absorberactive > 0);
0061 bool OverlapCheck = Enable::OVERLAPCHECK || Enable::ZDC_OVERLAPCHECK;
0062
0063 bool SupportActive = Enable::SUPPORT || Enable::ZDC_SUPPORT;
0064
0065 Fun4AllServer *se = Fun4AllServer::instance();
0066
0067 PHG4ZDCSubsystem *zdc = new PHG4ZDCSubsystem("ZDC", PHG4ZDCDefs::NORTH);
0068
0069 zdc->set_double_param("place_z", G4ZDC::ZDCPlaceZ - G4BEAMLINE::enclosure_center);
0070 zdc->OverlapCheck(OverlapCheck);
0071 zdc->SetActive();
0072 zdc->SuperDetector("ZDC");
0073 if (AbsorberActive) zdc->SetAbsorberActive(AbsorberActive);
0074 if (SupportActive) zdc->SetSupportActive(SupportActive);
0075 zdc->SetMotherSubsystem(G4BEAMLINE::ForwardBeamLineEnclosure);
0076 g4Reco->registerSubsystem(zdc);
0077
0078 zdc = new PHG4ZDCSubsystem("ZDC", PHG4ZDCDefs::SOUTH);
0079
0080 zdc->set_double_param("place_z", G4ZDC::ZDCPlaceZ - G4BEAMLINE::enclosure_center);
0081 zdc->OverlapCheck(OverlapCheck);
0082 zdc->SetActive();
0083 zdc->SuperDetector("ZDC");
0084 if (AbsorberActive) zdc->SetAbsorberActive(AbsorberActive);
0085 if (SupportActive) zdc->SetSupportActive(SupportActive);
0086 zdc->SetMotherSubsystem(G4BEAMLINE::BackwardBeamLineEnclosure);
0087 g4Reco->registerSubsystem(zdc);
0088 }
0089
0090 void ZDC_Towers()
0091 {
0092 int verbosity = std::max(Enable::VERBOSITY, Enable::ZDC_VERBOSITY);
0093 Fun4AllServer *se = Fun4AllServer::instance();
0094
0095 std::string mapping_zdc = std::string(getenv("CALIBRATIONROOT")) + "/" + G4ZDC::calibfile;
0096
0097 RawTowerBuilderByHitIndex *tower_ZDC = new RawTowerBuilderByHitIndex("TowerBuilder_ZDC");
0098 tower_ZDC->Detector("ZDC");
0099 tower_ZDC->set_sim_tower_node_prefix("SIM");
0100 tower_ZDC->GeometryTableFile(mapping_zdc);
0101 se->registerSubsystem(tower_ZDC);
0102
0103 RawTowerDigitizer *TowerDigitizer = new RawTowerDigitizer("ZDCRawTowerDigitizer");
0104 TowerDigitizer->Detector("ZDC");
0105 TowerDigitizer->TowerType(0);
0106 TowerDigitizer->set_towerinfo(RawTowerDigitizer::ProcessTowerType::kRawTowerOnly);
0107 TowerDigitizer->Verbosity(verbosity);
0108 TowerDigitizer->set_digi_algorithm(RawTowerDigitizer::kNo_digitization);
0109 se->registerSubsystem(TowerDigitizer);
0110
0111 RawTowerDigitizer *TowerDigitizer1 = new RawTowerDigitizer("ZDCRawTowerDigitizer1");
0112 TowerDigitizer1->Detector("ZDC");
0113 TowerDigitizer1->TowerType(1);
0114 TowerDigitizer1->set_towerinfo(RawTowerDigitizer::ProcessTowerType::kRawTowerOnly);
0115 TowerDigitizer1->Verbosity(verbosity);
0116 TowerDigitizer1->set_digi_algorithm(RawTowerDigitizer::kNo_digitization);
0117 se->registerSubsystem(TowerDigitizer1);
0118
0119 RawTowerCalibration *TowerCalibration = new RawTowerCalibration("ZDCRawTowerCalibration");
0120 TowerCalibration->Detector("ZDC");
0121 TowerCalibration->TowerType(0);
0122 TowerCalibration->set_towerinfo(RawTowerCalibration::ProcessTowerType::kRawTowerOnly);
0123 TowerCalibration->Verbosity(verbosity);
0124 TowerCalibration->set_calib_algorithm(RawTowerCalibration::kSimple_linear_calibration);
0125 TowerCalibration->set_calib_const_GeV_ADC(1.0);
0126 TowerCalibration->set_pedstal_ADC(0);
0127 se->registerSubsystem(TowerCalibration);
0128
0129 RawTowerCalibration *TowerCalibration1 = new RawTowerCalibration("ZDCRawTowerCalibration1");
0130 TowerCalibration1->Detector("ZDC");
0131 TowerCalibration1->TowerType(1);
0132 TowerCalibration1->set_towerinfo(RawTowerCalibration::ProcessTowerType::kRawTowerOnly);
0133 TowerCalibration1->Verbosity(verbosity);
0134 TowerCalibration1->set_calib_algorithm(RawTowerCalibration::kSimple_linear_calibration);
0135 TowerCalibration1->set_calib_const_GeV_ADC(1.0);
0136 TowerCalibration1->set_pedstal_ADC(0);
0137 se->registerSubsystem(TowerCalibration1);
0138 }
0139
0140 void ZDC_Eval(std::string outputfile)
0141 {
0142 int verbosity = std::max(Enable::VERBOSITY, Enable::ZDC_VERBOSITY);
0143 Fun4AllServer *se = Fun4AllServer::instance();
0144
0145 CaloEvaluator *eval = new CaloEvaluator("ZDCEVALUATOR", "ZDC", outputfile);
0146 eval->set_do_cluster_eval(false);
0147 eval->Verbosity(verbosity);
0148 se->registerSubsystem(eval);
0149
0150 return;
0151 }
0152 #endif