File indexing completed on 2025-12-16 09:18:02
0001
0002 #include <G4_ActsGeom.C>
0003 #include <G4_Magnet.C>
0004 #include <GlobalVariables.C>
0005 #include <Trkr_Clustering.C>
0006 #include <Trkr_RecoInit.C>
0007 #include <Trkr_TpcReadoutInit.C>
0008 #include <Trkr_Reco.C>
0009 #include <G4_Global.C>
0010
0011 #include <caloreco/RawClusterBuilderTopo.h>
0012
0013 #include <ffamodules/CDBInterface.h>
0014 #include <fun4all/Fun4AllDstInputManager.h>
0015 #include <fun4all/Fun4AllDstOutputManager.h>
0016 #include <fun4all/Fun4AllInputManager.h>
0017 #include <fun4all/Fun4AllUtils.h>
0018 #include <fun4all/Fun4AllOutputManager.h>
0019 #include <fun4all/Fun4AllRunNodeInputManager.h>
0020 #include <fun4all/Fun4AllServer.h>
0021
0022 #include <phool/recoConsts.h>
0023
0024 #include <cdbobjects/CDBTTree.h>
0025
0026 #include <track_to_calo/TrackCaloMatch.h>
0027 #include <track_to_calo/TrackToCalo.h>
0028 #include <track_to_calo/CaloOnly.h>
0029 #include <track_to_calo/TrackOnly.h>
0030
0031 #include <trackreco/AzimuthalSeeder.h>
0032 #include <trackreco/PHActsTrackProjection.h>
0033 #include <trackingdiagnostics/TrackResiduals.h>
0034
0035 #include <trackbase_historic/SvtxTrack.h>
0036
0037 #include <stdio.h>
0038 #include <iostream>
0039 #include <filesystem>
0040
0041 #include "HFReco.C"
0042
0043 R__LOAD_LIBRARY(libfun4all.so)
0044 R__LOAD_LIBRARY(libffamodules.so)
0045 R__LOAD_LIBRARY(libphool.so)
0046 R__LOAD_LIBRARY(libcdbobjects.so)
0047 R__LOAD_LIBRARY(libmvtx.so)
0048 R__LOAD_LIBRARY(libintt.so)
0049 R__LOAD_LIBRARY(libtpc.so)
0050 R__LOAD_LIBRARY(libmicromegas.so)
0051 R__LOAD_LIBRARY(libTrackingDiagnostics.so)
0052 R__LOAD_LIBRARY(libtrack_reco.so)
0053 R__LOAD_LIBRARY(libtrack_to_calo.so)
0054 R__LOAD_LIBRARY(libcalo_reco.so)
0055 R__LOAD_LIBRARY(libkfparticle_sphenix.so)
0056
0057 using namespace std;
0058
0059 namespace fs = std::filesystem;
0060
0061 std::string GetFirstLine(std::string listname);
0062 bool is_directory_empty(const fs::path& dir_path);
0063
0064 void Fun4All_TrackAnalysis()
0065 {
0066 gSystem->Load("libg4dst.so");
0067
0068 int verbosity = 0;
0069
0070
0071 Fun4AllServer *se = Fun4AllServer::instance();
0072 se->Verbosity(1);
0073
0074
0075 for (unsigned int i = 0; i < myInputLists.size(); ++i)
0076 {
0077 Fun4AllInputManager *infile = new Fun4AllDstInputManager("DSTin_" + to_string(i));
0078 std::cout << "Including file " << myInputLists[i] << std::endl;
0079
0080 infile->AddListFile(myInputLists[i]);
0081 se->registerInputManager(infile);
0082 }
0083
0084 Global_Reco();
0085
0086 auto projection = new PHActsTrackProjection("CaloProjection");
0087 float new_cemc_rad = 93.50;
0088 if (doEMcalRadiusCorr)
0089 {
0090 projection->setLayerRadius(SvtxTrack::CEMC, new_cemc_rad);
0091 }
0092 se->registerSubsystem(projection);
0093
0094 std::cout << "Building clusters" << std::endl;
0095 RawClusterBuilderTemplate *ClusterBuilder = new RawClusterBuilderTemplate("EmcRawClusterBuilderTemplate");
0096 ClusterBuilder->Detector("CEMC");
0097 ClusterBuilder->set_threshold_energy(0.030);
0098 std::string emc_prof = getenv("CALIBRATIONROOT");
0099 emc_prof += "/EmcProfile/CEMCprof_Thresh30MeV.root";
0100 ClusterBuilder->LoadProfile(emc_prof);
0101 ClusterBuilder->set_UseTowerInfo(1);
0102 se->registerSubsystem(ClusterBuilder);
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121 RawClusterBuilderTopo* ClusterBuilder2 = new RawClusterBuilderTopo("EMcalRawClusterBuilderTopo2");
0122 ClusterBuilder2->Verbosity(verbosity);
0123 ClusterBuilder2->set_nodename("TOPOCLUSTER_HCAL");
0124 ClusterBuilder2->set_enable_HCal(true);
0125 ClusterBuilder2->set_enable_EMCal(false);
0126
0127 ClusterBuilder2->set_noise(0.01, 0.03, 0.03);
0128 ClusterBuilder2->set_significance(4.0, 2.0, 1.0);
0129 ClusterBuilder2->allow_corner_neighbor(true);
0130 ClusterBuilder2->set_do_split(true);
0131 ClusterBuilder2->set_minE_local_max(1.0, 2.0, 0.5);
0132 ClusterBuilder2->set_R_shower(0.025);
0133 se->registerSubsystem(ClusterBuilder2);
0134
0135
0136
0137
0138
0139
0140
0141 TrackCaloMatch *tcm = new TrackCaloMatch("Tracks_Calo_Match");
0142 tcm->SetMyTrackMapName("MySvtxTrackMap");
0143 tcm->writeEventDisplays(doEvtDisplay);
0144 tcm->setEventDisplayPath(outputJsonDir);
0145 tcm->setRunDate("2024-06-25");
0146 tcm->EMcalRadiusUser(doEMcalRadiusCorr);
0147 tcm->setEMcalRadius(new_cemc_rad);
0148 tcm->setdphicut(0.2);
0149 tcm->setdzcut(10000);
0150 tcm->setTrackPtLowCut(1.0);
0151 tcm->setEmcalELowCut(0.5);
0152 tcm->setnTpcClusters(30);
0153 tcm->setTrackQuality(100);
0154 tcm->setRawClusContEMName("CLUSTERINFO_CEMC");
0155 ttc->setDFNodeName("myFinder");
0156
0157 se->registerSubsystem(tcm);
0158
0159
0160 PhotonConvKFPReco();
0161
0162 TrackToCalo *ttc = new TrackToCalo("Tracks_And_Calo", outputAnaFile);
0163 ttc->EMcalRadiusUser(doEMcalRadiusCorr);
0164 ttc->setEMcalRadius(new_cemc_rad);
0165 ttc->setKFPtrackMapName("PhotonConv_SvtxTrackMap");
0166 ttc->setKFPContName("PhotonConv_KFParticle_Container");
0167
0168
0169
0170 ttc->setTrackPtLowCut(1.0);
0171 ttc->setEmcalELowCut(0.5);
0172 ttc->setnTpcClusters(30);
0173 ttc->setTrackQuality(100);
0174 ttc->doTrkrCaloMatching_KFP();
0175 ttc->setRawClusContEMName("CLUSTERINFO_CEMC");
0176 se->registerSubsystem(ttc);
0177
0178 if (Enable::DSTOUT)
0179 {
0180 Fun4AllDstOutputManager *out = new Fun4AllDstOutputManager("DSTOUT", outputDstFile);
0181
0182
0183 out->SaveRunNode(0);
0184 se->registerOutputManager(out);
0185 }
0186
0187 se->run(nEvents);
0188 se->End();
0189 se->PrintTimer();
0190
0191 ifstream file_reco(outputRecoFile.c_str(), ios::binary | ios::ate);
0192 if (file_reco.good() && (file_reco.tellg() > 100))
0193 {
0194 string outputRecoDirMove = outDir + "/Reconstructed/" + to_string(runnumber) + "/";
0195 string makeDirectoryMove = "mkdir -p " + outputRecoDirMove;
0196 system(makeDirectoryMove.c_str());
0197 string moveOutput = "mv " + outputRecoFile + " " + outDir + "/Reconstructed/" + to_string(runnumber);
0198 std::cout << "moveOutput: " << moveOutput << std::endl;
0199 system(moveOutput.c_str());
0200 }
0201
0202 ifstream file_ana(outputAnaFile.c_str(), ios::binary | ios::ate);
0203 if (file_ana.good() && (file_ana.tellg() > 100))
0204 {
0205 string outputRecoDirMove = outDir + "/Reconstructed/" + to_string(runnumber) + "/";
0206 string makeDirectoryMove = "mkdir -p " + outputRecoDirMove;
0207 system(makeDirectoryMove.c_str());
0208 string moveOutput = "mv " + outputAnaFile + " " + outDir + "/Reconstructed/" + to_string(runnumber);
0209 std::cout << "moveOutput: " << moveOutput << std::endl;
0210 system(moveOutput.c_str());
0211 }
0212
0213 ifstream file_dst(outputDstFile.c_str(), ios::binary | ios::ate);
0214 if (file_dst.good() && (file_dst.tellg() > 100))
0215 {
0216 string outputRecoDirMove = outDir + "/Reconstructed/" + to_string(runnumber) + "/";
0217 string makeDirectoryMove = "mkdir -p " + outputRecoDirMove;
0218 system(makeDirectoryMove.c_str());
0219 string moveOutput = "mv " + outputDstFile + " " + outDir + "/Reconstructed/" + to_string(runnumber);
0220 std::cout << "moveOutput: " << moveOutput << std::endl;
0221 system(moveOutput.c_str());
0222 }
0223
0224 fs::path output_json_dir_path = outputJsonDir;
0225 if (!is_directory_empty(output_json_dir_path))
0226 {
0227 string outputJsonDirMove = outDir + "/Reconstructed/" + to_string(runnumber) + "/EvtDisplay/";
0228 string makeDirectoryMove = "mkdir -p " + outputJsonDirMove;
0229 system(makeDirectoryMove.c_str());
0230 string moveOutput = "mv " + outputJsonDir + "* " + outputJsonDirMove;
0231 std::cout << "moveOutput: " << moveOutput << std::endl;
0232 system(moveOutput.c_str());
0233 }
0234
0235 delete se;
0236 std::cout << "All done" << std::endl;
0237 gSystem->Exit(0);
0238
0239 return;
0240 }
0241
0242 std::string GetFirstLine(std::string listname)
0243 {
0244 std::ifstream file(listname);
0245
0246 std::string firstLine = "";
0247 if (file.is_open()) {
0248 if (std::getline(file, firstLine)) {
0249 std::cout << "First Line: " << firstLine << std::endl;
0250 } else {
0251 std::cerr << "Unable to read first line of file" << std::endl;
0252 }
0253 file.close();
0254 } else {
0255 std::cerr << "Unable to open file" << std::endl;
0256 }
0257 return firstLine;
0258 }
0259
0260 bool is_directory_empty(const fs::path& dir_path) {
0261 if (fs::exists(dir_path) && fs::is_directory(dir_path)) {
0262 return fs::directory_iterator(dir_path) == fs::directory_iterator();
0263 }
0264 return false;
0265 }