Back to home page

sPhenix code displayed by LXR

 
 

    


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 }  // namespace Enable
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 }  // namespace G4ZDC
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   // place zdc in beam enclosure
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   // place zdc in beam enclosure
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   // SMD
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);  // sampling fraction = 0.010
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