File indexing completed on 2025-08-06 08:12:54
0001
0002
0003 enum enu_HCalOut_clusterizer
0004 {
0005 kHCalOutGraphClusterizer,
0006
0007 kHCalOutTemplateClusterizer
0008 };
0009
0010
0011 enu_HCalOut_clusterizer HCalOut_clusterizer = kHCalOutTemplateClusterizer;
0012
0013
0014
0015
0016 void HCalOuterInit(){}
0017
0018 double HCalOuter(PHG4Reco* g4Reco,
0019 double radius,
0020 const int crossings,
0021 const int absorberactive = 0,
0022 int verbosity = 0) {
0023
0024 gSystem->Load("libg4detectors.so");
0025 gSystem->Load("libg4testbench.so");
0026
0027 PHG4OuterHcalSubsystem *hcal = new PHG4OuterHcalSubsystem("HCALOUT");
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 hcal->SetActive();
0067 hcal->SuperDetector("HCALOUT");
0068 if (absorberactive)
0069 {
0070 hcal->SetAbsorberActive();
0071 }
0072 hcal->OverlapCheck(overlapcheck);
0073 g4Reco->registerSubsystem(hcal);
0074
0075 radius = hcal->get_double_param("outer_radius");
0076
0077 radius += no_overlapp;
0078
0079 return radius;
0080 }
0081
0082 void HCALOuter_Cells(int verbosity = 0) {
0083
0084 gSystem->Load("libfun4all.so");
0085 gSystem->Load("libg4detectors.so");
0086 Fun4AllServer *se = Fun4AllServer::instance();
0087
0088 PHG4HcalCellReco *hc = new PHG4HcalCellReco("HCALOUT_CELLRECO");
0089 hc->Detector("HCALOUT");
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099 se->registerSubsystem(hc);
0100
0101 return;
0102 }
0103
0104 void HCALOuter_Towers(int verbosity = 0) {
0105
0106 gSystem->Load("libg4calo.so");
0107 gSystem->Load("libcalo_reco.so");
0108 Fun4AllServer *se = Fun4AllServer::instance();
0109
0110 HcalRawTowerBuilder* TowerBuilder = new HcalRawTowerBuilder("HcalOutRawTowerBuilder");
0111 TowerBuilder->Detector("HCALOUT");
0112 TowerBuilder->set_sim_tower_node_prefix("SIM");
0113 TowerBuilder->Verbosity(verbosity);
0114 se->registerSubsystem( TowerBuilder );
0115
0116
0117 RawTowerDigitizer *TowerDigitizer = new RawTowerDigitizer("HcalOutRawTowerDigitizer");
0118 TowerDigitizer->Detector("HCALOUT");
0119
0120 TowerDigitizer->set_digi_algorithm(
0121 RawTowerDigitizer::kSimple_photon_digitalization);
0122 TowerDigitizer->set_pedstal_central_ADC(0);
0123 TowerDigitizer->set_pedstal_width_ADC(1);
0124 TowerDigitizer->set_photonelec_ADC(16. / 5.);
0125 TowerDigitizer->set_photonelec_yield_visible_GeV(16. / 5 / (0.2e-3));
0126 TowerDigitizer->set_zero_suppression_ADC(-0);
0127 se->registerSubsystem(TowerDigitizer);
0128
0129 const double visible_sample_fraction_HCALOUT = 3.38021e-02;
0130
0131 RawTowerCalibration *TowerCalibration = new RawTowerCalibration("HcalOutRawTowerCalibration");
0132 TowerCalibration->Detector("HCALOUT");
0133
0134
0135 TowerCalibration->set_calib_algorithm(RawTowerCalibration::kSimple_linear_calibration);
0136 TowerCalibration->set_calib_const_GeV_ADC(0.2e-3 / visible_sample_fraction_HCALOUT);
0137 TowerCalibration->set_pedstal_ADC(0);
0138 TowerCalibration->set_zero_suppression_GeV(-1);
0139 se->registerSubsystem(TowerCalibration);
0140
0141 return;
0142 }
0143
0144 void HCALOuter_Clusters(int verbosity = 0) {
0145 gSystem->Load("libcalo_reco.so");
0146
0147 Fun4AllServer *se = Fun4AllServer::instance();
0148
0149
0150 if (HCalOut_clusterizer == kHCalOutTemplateClusterizer)
0151 {
0152 RawClusterBuilderTemplate* ClusterBuilder = new RawClusterBuilderTemplate("HcalOutRawClusterBuilderTemplate");
0153 ClusterBuilder->Detector("HCALOUT");
0154 ClusterBuilder->Verbosity(verbosity);
0155 se->registerSubsystem( ClusterBuilder );
0156 }
0157 else if (HCalOut_clusterizer == kHCalOutGraphClusterizer)
0158 {
0159 RawClusterBuilderGraph* ClusterBuilder = new RawClusterBuilderGraph("HcalOutRawClusterBuilderGraph");
0160 ClusterBuilder->Detector("HCALOUT");
0161 ClusterBuilder->Verbosity(verbosity);
0162 se->registerSubsystem( ClusterBuilder );
0163 }
0164 else
0165 {
0166 cout <<"HCALOuter_Clusters - unknown clusterizer setting!"<<endl;
0167 exit(1);
0168 }
0169
0170
0171 return;
0172 }
0173
0174 void HCALOuter_Eval(std::string outputfile, int verbosity = 0) {
0175
0176 gSystem->Load("libfun4all.so");
0177 gSystem->Load("libg4eval.so");
0178 Fun4AllServer *se = Fun4AllServer::instance();
0179
0180 CaloEvaluator* eval = new CaloEvaluator("HCALOUTEVALUATOR", "HCALOUT", outputfile.c_str());
0181 eval->Verbosity(verbosity);
0182 se->registerSubsystem( eval );
0183
0184 return;
0185 }