File indexing completed on 2025-08-05 08:14:56
0001 #include <fun4all/Fun4AllServer.h>
0002
0003 #pragma GCC diagnostic push
0004
0005 #pragma GCC diagnostic ignored "-Wundefined-internal"
0006
0007 #include <kfparticle_sphenix/KFParticle_sPHENIX.h>
0008 #include <resonancejettagging/ResonanceJetTagging.h>
0009 #include <fun4all/Fun4AllReturnCodes.h>
0010
0011 #pragma GCC diagnostic pop
0012
0013 R__LOAD_LIBRARY(libkfparticle_sphenix.so)
0014
0015 namespace HFjets
0016 {
0017 namespace Enable
0018 {
0019 bool KFPARTICLE_SAVE_NTUPLE = false;
0020 bool KFPARTICLE_APPEND_TO_DST = true;
0021 bool KFPARTICLE_TRUTH_MATCH = true;
0022 bool KFPARTICLE_DETECTOR_INFO = false;
0023 bool KFPARTICLE_CALO_INFO = false;
0024 bool KFPARTICLE_ALL_PV_INFO = false;
0025 int KFPARTICLE_VERBOSITY = INT_MAX;
0026 bool runTracking = false;
0027 bool runTruthTrigger = true;
0028 string reconstructionName = "myTestReco";
0029 }
0030
0031
0032
0033
0034 namespace KFPARTICLE
0035 {
0036 bool runQA = false;
0037
0038 std::string D0Name = "D0";
0039 std::string D0toK3piName = "D0TOK3PI";
0040 std::pair<float, float> D0MassRange(1.7, 2.0);
0041 bool D0Trigger = false;
0042 bool runD0toKpiReco = false;
0043 std::string D0toKpiDecayDescriptor = "[" + D0Name + " -> K^- pi^+]cc";
0044 bool runD0toK3piReco = false;
0045 std::string D0toK3piDecayDescriptor = "[" + D0Name + " -> K^- pi^- pi^+ pi^+]cc";
0046
0047 std::string DplusName = "Dplus";
0048 std::pair<float, float> DplusMassRange(1.7, 2.00);
0049 bool DplusTrigger = false;
0050 bool runDplustoK2piReco = false;
0051 std::string DplustoK2piDecayDescriptor = "[" + DplusName + " -> K^- pi^+ pi^+]cc";
0052
0053 std::string LambdacName = "Lambdac";
0054 std::pair<float, float> LambdacMassRange(2.15, 2.45);
0055 bool LambdacTrigger = false;
0056 bool runLambdactopKpiReco = false;
0057 std::string LambdacDecayDescriptor = "[" + LambdacName + " -> proton^+ K^- pi^+]cc";
0058 }
0059
0060 namespace KFParticleBaseCut
0061 {
0062 bool KFPARTICLE_ALLOW_ZERO_MASS_TRACKS = true;
0063 bool constrainToPV = true;
0064 float minTrackPT = 0.7;
0065 float maxTrackchi2nDoF = 5;
0066 float minTrackIPchi2 = 0;
0067 float minTrackIP = 0.0025;
0068 float maxVertexchi2nDoF = 5;
0069 float maxTrackTrackDCA = 0.008;
0070 float minMotherPT = 1.5;
0071 }
0072
0073
0074 int KFParticle_Set_Reco(ResonanceJetTagging::TAG tag)
0075 {
0076
0077 Fun4AllServer *se = Fun4AllServer::instance();
0078
0079 std::string particle_name;
0080 switch (tag) {
0081 case ResonanceJetTagging::TAG::D0:
0082 particle_name = KFPARTICLE::D0Name;
0083 break;
0084 case ResonanceJetTagging::TAG::D0TOK3PI:
0085 particle_name = KFPARTICLE::D0toK3piName;
0086 break;
0087 case ResonanceJetTagging::TAG::DPLUS:
0088 particle_name = KFPARTICLE::DplusName;
0089 break;
0090 case ResonanceJetTagging::TAG::LAMBDAC:
0091 particle_name = KFPARTICLE::LambdacName;
0092 break;
0093 default:
0094 std::cout<<"ERROR:decay parameters not set, ABORTING!";
0095 return Fun4AllReturnCodes::ABORTRUN;
0096 break;
0097
0098 }
0099
0100 KFParticle_sPHENIX *kfparticle = new KFParticle_sPHENIX("KFParticle_" + particle_name + "_Reco");
0101
0102 switch (tag) {
0103 case ResonanceJetTagging::TAG::D0:
0104 kfparticle->setDecayDescriptor(KFPARTICLE::D0toKpiDecayDescriptor);
0105 kfparticle->setContainerName(KFPARTICLE::D0Name);
0106 kfparticle->setOutputName("KFParticleOutput_" + KFPARTICLE::D0Name + "_reconstruction.root");
0107 break;
0108 case ResonanceJetTagging::TAG::D0TOK3PI:
0109 kfparticle->setDecayDescriptor(KFPARTICLE::D0toK3piDecayDescriptor);
0110 kfparticle->setContainerName(KFPARTICLE::D0toK3piName);
0111 kfparticle->setOutputName("KFParticleOutput_" + KFPARTICLE::D0toK3piName + "_reconstruction.root");
0112 break;
0113 case ResonanceJetTagging::TAG::DPLUS:
0114 kfparticle->setDecayDescriptor(KFPARTICLE::DplustoK2piDecayDescriptor);
0115 kfparticle->setContainerName(KFPARTICLE::DplusName);
0116 kfparticle->setOutputName("KFParticleOutput_" + KFPARTICLE::DplusName + "_reconstruction.root");
0117 break;
0118 case ResonanceJetTagging::TAG::LAMBDAC:
0119 kfparticle->setDecayDescriptor(KFPARTICLE::LambdacDecayDescriptor);
0120 kfparticle->setContainerName(KFPARTICLE::LambdacName);
0121 kfparticle->setOutputName("KFParticleOutput_" + KFPARTICLE::LambdacName + "_reconstruction.root");
0122 break;
0123 default:
0124 std::cout<<"ERROR:decay parameters not set, ABORTING!";
0125 return Fun4AllReturnCodes::ABORTRUN;
0126 break;
0127 }
0128
0129 kfparticle->Verbosity(Enable::KFPARTICLE_VERBOSITY);
0130 kfparticle->saveDST(Enable::KFPARTICLE_APPEND_TO_DST);
0131 kfparticle->saveOutput(Enable::KFPARTICLE_SAVE_NTUPLE);
0132 kfparticle->doTruthMatching(Enable::KFPARTICLE_TRUTH_MATCH);
0133 kfparticle->getDetectorInfo(Enable::KFPARTICLE_DETECTOR_INFO);
0134 kfparticle->getCaloInfo(Enable::KFPARTICLE_CALO_INFO);
0135 kfparticle->getAllPVInfo(Enable::KFPARTICLE_ALL_PV_INFO);
0136
0137
0138
0139 kfparticle->setMinimumTrackPT(KFParticleBaseCut::minTrackPT);
0140 kfparticle->setMaximumTrackchi2nDOF(KFParticleBaseCut::maxTrackchi2nDoF);
0141 kfparticle->setMinimumTrackIPchi2(KFParticleBaseCut::minTrackIPchi2);
0142 kfparticle->setMinimumTrackIP(KFParticleBaseCut::minTrackIP);
0143 kfparticle->allowZeroMassTracks(KFParticleBaseCut::KFPARTICLE_ALLOW_ZERO_MASS_TRACKS);
0144
0145
0146 kfparticle->setMaximumVertexchi2nDOF(KFParticleBaseCut::maxVertexchi2nDoF);
0147 kfparticle->setMaximumDaughterDCA(KFParticleBaseCut::maxTrackTrackDCA);
0148 kfparticle->constrainToPrimaryVertex(KFParticleBaseCut::constrainToPV);
0149
0150
0151 kfparticle->setMotherPT(KFParticleBaseCut::minMotherPT);
0152
0153 switch (tag) {
0154 case ResonanceJetTagging::TAG::D0:
0155 kfparticle->setMinimumMass(KFPARTICLE::D0MassRange.first);
0156 kfparticle->setMaximumMass(KFPARTICLE::D0MassRange.second);
0157 kfparticle->setMinDIRA(0.9);
0158 kfparticle->setMotherIPchi2(3);
0159 kfparticle->setFlightDistancechi2(0);
0160
0161 kfparticle->setMaximumDaughterDCA(KFParticleBaseCut::maxTrackTrackDCA);
0162 break;
0163 case ResonanceJetTagging::TAG::D0TOK3PI:
0164 kfparticle->setMinimumMass(KFPARTICLE::D0MassRange.first);
0165 kfparticle->setMaximumMass(KFPARTICLE::D0MassRange.second);
0166 kfparticle->setMinDIRA(0.95);
0167 kfparticle->setMotherIPchi2(15);
0168 kfparticle->setFlightDistancechi2(0);
0169
0170 kfparticle->setMaximumDaughterDCA(KFParticleBaseCut::maxTrackTrackDCA);
0171 break;
0172 case ResonanceJetTagging::TAG::DPLUS:
0173 kfparticle->setMinimumMass(KFPARTICLE::DplusMassRange.first);
0174 kfparticle->setMaximumMass(KFPARTICLE::DplusMassRange.second);
0175 std::cout<<"ERROR: TAG::DPLUS decay parameters not set, ABORTING!";
0176 return Fun4AllReturnCodes::ABORTRUN;
0177 break;
0178 case ResonanceJetTagging::TAG::LAMBDAC:
0179 kfparticle->setMinimumMass(KFPARTICLE::LambdacMassRange.first);
0180 kfparticle->setMaximumMass(KFPARTICLE::LambdacMassRange.second);
0181 std::cout<<"ERROR: TAG::Lambdac decay parameters not set, ABORTING!";
0182 return Fun4AllReturnCodes::ABORTRUN;
0183 break;
0184 default:
0185 std::cout<<"ERROR:decay parameters not set, ABORTING!";
0186 return Fun4AllReturnCodes::ABORTRUN;
0187 break;
0188 }
0189
0190 se->registerSubsystem(kfparticle);
0191
0192
0193
0194 return 0;
0195 }
0196 }
0197