File indexing completed on 2025-08-05 08:14:56
0001 #include "HFReco.C"
0002
0003 #include <resonancejettaggingoutputs/BuildResonanceJetTaggingTree.h>
0004
0005 #include <resonancejettagging/ResonanceJetTagging.h>
0006
0007 #include <g4main/Fun4AllDstPileupInputManager.h>
0008
0009 #include <G4_Magnet.C>
0010 #include <QA.C>
0011 #include <G4_Global.C>
0012 #include <FROG.h>
0013 #include <decayfinder/DecayFinder.h>
0014 #include <fun4all/Fun4AllDstInputManager.h>
0015
0016 #include <g4eval/SvtxEvaluator.h>
0017 #include <g4eval/SvtxTruthRecoTableEval.h>
0018
0019 #include <caloreco/RawClusterBuilderTopo.h>
0020 #include <particleflowreco/ParticleFlowReco.h>
0021 #include <phool/recoConsts.h>
0022
0023 R__LOAD_LIBRARY(libdecayfinder.so)
0024 R__LOAD_LIBRARY(libcalo_reco.so)
0025 R__LOAD_LIBRARY(libfun4all.so)
0026 R__LOAD_LIBRARY(libparticleflow.so)
0027 R__LOAD_LIBRARY(libresonancejettaggingoutputs.so)
0028
0029 using namespace std;
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 void Fun4All_MDC2reco(vector<string> myInputLists = {"condorJob/fileLists/productionFiles-CHARM-dst_tracks-00000.LIST"}, const int nEvents = 10, ResonanceJetTagging::TAG tag = ResonanceJetTagging::TAG::D0)
0048 {
0049 int verbosity = 0;
0050
0051 gSystem->Load("libg4dst.so");
0052 gSystem->Load("libFROG.so");
0053 FROG *fr = new FROG();
0054 recoConsts *rc = recoConsts::instance();
0055 Enable::CDB = true;
0056
0057 rc->set_StringFlag("CDB_GLOBALTAG",CDB::global_tag);
0058
0059 rc->set_uint64Flag("TIMESTAMP",CDB::timestamp);
0060
0061 std::string particle_name;
0062 switch (tag) {
0063 case ResonanceJetTagging::TAG::D0:
0064 particle_name = HFjets::KFPARTICLE::D0Name;
0065 break;
0066 case ResonanceJetTagging::TAG::D0TOK3PI:
0067 particle_name = HFjets::KFPARTICLE::D0toK3piName;
0068 break;
0069 case ResonanceJetTagging::TAG::DPLUS:
0070 particle_name = HFjets::KFPARTICLE::DplusName;
0071 break;
0072 case ResonanceJetTagging::TAG::LAMBDAC:
0073 particle_name = HFjets::KFPARTICLE::LambdacName;
0074 break;
0075 default:
0076 std::cout<<"ERROR:decay not implemented, ABORTING!";
0077 return Fun4AllReturnCodes::ABORTRUN;
0078 break;
0079 }
0080
0081
0082 string outDir = "./";
0083 if (outDir.substr(outDir.size() - 1, 1) != "/") outDir += "/";
0084 outDir += HFjets::Enable::reconstructionName + "_" + particle_name + "/";
0085
0086 string fileNumber = myInputLists[0];
0087 size_t findLastDash = fileNumber.find_last_of("-");
0088 if (findLastDash != string::npos) fileNumber.erase(0, findLastDash + 1);
0089 string remove_this = ".list";
0090 size_t pos = fileNumber.find(remove_this);
0091 if (pos != string::npos) fileNumber.erase(pos, remove_this.length());
0092 string outputFileName = "outputData_" + HFjets::Enable::reconstructionName + "_" + fileNumber + ".root";
0093
0094 string outputRecoDir = outDir + "/inReconstruction/";
0095 string makeDirectory = "mkdir -p " + outputRecoDir;
0096 system(makeDirectory.c_str());
0097 string outputRecoFile = outputRecoDir + outputFileName;
0098
0099
0100 Fun4AllServer *se = Fun4AllServer::instance();
0101 se->Verbosity(verbosity);
0102
0103
0104 for (unsigned int i = 0; i < myInputLists.size(); ++i)
0105 {
0106 Fun4AllInputManager *infile = new Fun4AllDstInputManager("DSTin_" + to_string(i));
0107 infile->AddListFile(myInputLists[i]);
0108 se->registerInputManager(infile);
0109 }
0110
0111
0112 if (HFjets::Enable::runTruthTrigger)
0113 {
0114 DecayFinder *myFinder = new DecayFinder("myFinder");
0115 myFinder->Verbosity(verbosity);
0116 switch (tag) {
0117 case ResonanceJetTagging::TAG::D0:
0118 myFinder->setDecayDescriptor(HFjets::KFPARTICLE::D0toKpiDecayDescriptor);
0119 break;
0120 case ResonanceJetTagging::TAG::D0TOK3PI:
0121 myFinder->setDecayDescriptor(HFjets::KFPARTICLE::D0toK3piDecayDescriptor);
0122 break;
0123 case ResonanceJetTagging::TAG::DPLUS:
0124 myFinder->setDecayDescriptor(HFjets::KFPARTICLE::DplustoK2piDecayDescriptor);
0125 break;
0126 case ResonanceJetTagging::TAG::LAMBDAC:
0127 myFinder->setDecayDescriptor(HFjets::KFPARTICLE::LambdacDecayDescriptor);
0128 break;
0129 default:
0130 std::cout<<"ERROR:decay not implemented, ABORTING!";
0131 return Fun4AllReturnCodes::ABORTRUN;
0132 break;
0133 }
0134 myFinder->saveDST(true);
0135 myFinder->allowPi0(false);
0136 myFinder->allowPhotons(false);
0137 myFinder->triggerOnDecay(true);
0138 myFinder->setPTmin(0.);
0139 myFinder->setEtaRange(-10., 10.);
0140 se->registerSubsystem(myFinder);
0141 }
0142
0143 Global_Reco();
0144
0145
0146 if (HFjets::KFParticle_Set_Reco(tag) == Fun4AllReturnCodes::ABORTRUN) return;
0147
0148
0149 RawClusterBuilderTopo* ClusterBuilder1 = new RawClusterBuilderTopo("HcalRawClusterBuilderTopo1");
0150 ClusterBuilder1->Verbosity(verbosity);
0151 ClusterBuilder1->set_nodename("TOPOCLUSTER_EMCAL");
0152 ClusterBuilder1->set_enable_HCal(false);
0153 ClusterBuilder1->set_enable_EMCal(true);
0154 ClusterBuilder1->set_noise(0.0025, 0.006, 0.03);
0155 ClusterBuilder1->set_significance(4.0, 2.0, 0.0);
0156 ClusterBuilder1->allow_corner_neighbor(true);
0157 ClusterBuilder1->set_do_split(true);
0158 ClusterBuilder1->set_minE_local_max(1.0, 2.0, 0.5);
0159 ClusterBuilder1->set_R_shower(0.025);
0160 se->registerSubsystem(ClusterBuilder1);
0161
0162 RawClusterBuilderTopo* ClusterBuilder2 = new RawClusterBuilderTopo("HcalRawClusterBuilderTopo2");
0163 ClusterBuilder2->Verbosity(verbosity);
0164 ClusterBuilder2->set_nodename("TOPOCLUSTER_HCAL");
0165 ClusterBuilder2->set_enable_HCal(true);
0166 ClusterBuilder2->set_enable_EMCal(false);
0167 ClusterBuilder2->set_noise(0.0025, 0.006, 0.03);
0168 ClusterBuilder2->set_significance(4.0, 2.0, 0.0);
0169 ClusterBuilder2->allow_corner_neighbor(true);
0170 ClusterBuilder2->set_do_split(true);
0171 ClusterBuilder2->set_minE_local_max(1.0, 2.0, 0.5);
0172 ClusterBuilder2->set_R_shower(0.025);
0173 se->registerSubsystem(ClusterBuilder2);
0174
0175 ParticleFlowReco *pfr = new ParticleFlowReco();
0176 pfr->set_energy_match_Nsigma(1.5);
0177 pfr->Verbosity(verbosity);
0178 se->registerSubsystem(pfr);
0179
0180
0181 std::string jetTagRecoFile = outputRecoDir + particle_name + "JetTree_" + fileNumber + ".root";
0182
0183 ResonanceJetTagging *jetTag = new ResonanceJetTagging(particle_name + "Tagging", tag, particle_name + "_KFParticle_Container");
0184 jetTag->Verbosity(verbosity);
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195 jetTag->setParticleFlowEtaAcc(-1.7, 1.7);
0196 jetTag->setJetParameters(0.4, ResonanceJetTagging::ALGO::ANTIKT, ResonanceJetTagging::RECOMB::E_SCHEME);
0197 jetTag->setJetContainerName(particle_name + "Jets");
0198 jetTag->setDoTruth(true);
0199 se->registerSubsystem(jetTag);
0200
0201 BuildResonanceJetTaggingTree *buildTree = new BuildResonanceJetTaggingTree(particle_name + "JetTree", jetTagRecoFile, tag);
0202 buildTree->setDoTruth(true);
0203 buildTree->setTagContainerName(particle_name + "_KFParticle_Container");
0204 buildTree->setJetContainerName(particle_name + "Jets_Jet_Container");
0205 buildTree->setTruthJetContainerName(particle_name + "Jets_Truth_Jet_Container");
0206 se->registerSubsystem(buildTree);
0207
0208 se->run(nEvents);
0209 se->End();
0210
0211 ifstream file(outputRecoFile.c_str());
0212 if (file.good())
0213 {
0214 std::string moveOutput = "mv " + outputRecoFile + " " + outDir;
0215 system(moveOutput.c_str());
0216 }
0217
0218 ifstream jetTagfile(jetTagRecoFile.c_str());
0219 if(jetTagfile.good())
0220 {
0221 std::string moveOutput = "mv " + jetTagRecoFile + " " + outDir;
0222 system(moveOutput.c_str());
0223 }
0224
0225 std::cout << "All done" << std::endl;
0226 delete se;
0227 gSystem->Exit(0);
0228
0229 return;
0230 }