File indexing completed on 2025-08-05 08:12: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
0009 #pragma GCC diagnostic pop
0010
0011 R__LOAD_LIBRARY(libkfparticle_sphenix.so)
0012
0013 namespace HeavyFlavorReco
0014 {
0015
0016 string decayDescriptor = "[D0 -> K^- pi^+]cc";
0017 string reconstructionName = "myD2KpiReco";
0018 string outputRecoFile;
0019 string outputHFEffFile;
0020 bool runTruthTrigger = false;
0021 bool runTrackEff = false;
0022 bool getTruthInfo = false;
0023 bool getCaloInfo = false;
0024 bool runTracking = false;
0025 bool buildTruthTable = false;
0026 bool runQA = false;
0027 int VERBOSITY = 0;
0028 };
0029
0030 using namespace HeavyFlavorReco;
0031
0032 void myHeavyFlavorReco()
0033 {
0034 Fun4AllServer *se = Fun4AllServer::instance();
0035
0036 KFParticle_sPHENIX *kfparticle = new KFParticle_sPHENIX(reconstructionName);
0037 kfparticle->Verbosity(1);
0038
0039 kfparticle->setDecayDescriptor(decayDescriptor);
0040
0041 if (runTrackEff) kfparticle->setTrackMapNodeName("HFSelected_SvtxTrackMap");
0042
0043 kfparticle->doTruthMatching(getTruthInfo);
0044 kfparticle->getDetectorInfo(false);
0045 kfparticle->getCaloInfo(getCaloInfo);
0046 kfparticle->getAllPVInfo(false);
0047 kfparticle->allowZeroMassTracks(true);
0048 kfparticle->saveDST(false);
0049 kfparticle->saveParticleContainer(false);
0050
0051 bool fixToPV = false;
0052 bool useFakePV = true;
0053
0054 if (useFakePV)
0055 {
0056 fixToPV = false;
0057 kfparticle->useFakePrimaryVertex(true);
0058 }
0059
0060 if (fixToPV)
0061 {
0062 kfparticle->constrainToPrimaryVertex(true);
0063 kfparticle->setMotherIPchi2(3);
0064 kfparticle->setFlightDistancechi2(-1.);
0065 kfparticle->setMinDIRA(0.90);
0066 kfparticle->setDecayLengthRange(-1*FLT_MAX, FLT_MAX);
0067 }
0068
0069
0070 kfparticle->setMinimumTrackPT(0.7);
0071 kfparticle->setMinimumTrackIPchi2(-1.);
0072 kfparticle->setMinimumTrackIP(-1.);
0073 kfparticle->setMaximumTrackchi2nDOF(3.);
0074
0075
0076 kfparticle->setMaximumVertexchi2nDOF(5);
0077 kfparticle->setMaximumDaughterDCA(0.005);
0078
0079
0080 kfparticle->setMotherPT(0);
0081 kfparticle->setMinimumMass(1.50);
0082 kfparticle->setMaximumMass(2.20);
0083 kfparticle->setMaximumMotherVertexVolume(0.03);
0084
0085 kfparticle->setOutputName(outputRecoFile);
0086
0087 se->registerSubsystem(kfparticle);
0088 }
0089
0090 void myDemoReco()
0091 {
0092 Fun4AllServer *se = Fun4AllServer::instance();
0093
0094 KFParticle_sPHENIX *kfparticle = new KFParticle_sPHENIX(reconstructionName);
0095 kfparticle->Verbosity(1);
0096
0097 kfparticle->setDecayDescriptor("[D+ -> {phi -> K^+ K^-} pi^+]cc");
0098
0099 kfparticle->setTrackMapNodeName("HFSelected_SvtxTrackMap");
0100
0101 kfparticle->doTruthMatching(true);
0102 kfparticle->getCaloInfo(false);
0103 kfparticle->allowZeroMassTracks(true);
0104 kfparticle->constrainToPrimaryVertex(true);
0105 kfparticle->useFakePrimaryVertex(false);
0106 kfparticle->setOutputName("Ds2KKpi.root");
0107
0108
0109 kfparticle->setMinimumTrackPT(0.);
0110 kfparticle->setMaximumTrackPTchi2(FLT_MAX);
0111 kfparticle->setMinimumTrackIPchi2(-1.);
0112 kfparticle->setMinimumTrackIP(-1.);
0113 kfparticle->setMaximumTrackchi2nDOF(100);
0114 kfparticle->setMinTPChits(0);
0115
0116
0117 kfparticle->setMaximumVertexchi2nDOF(100);
0118 kfparticle->setMaximumDaughterDCA(0.1);
0119
0120
0121 kfparticle->setMotherPT(0);
0122 kfparticle->setMinimumMass(1.5);
0123 kfparticle->setMaximumMass(2.2);
0124 kfparticle->setMaximumMotherVertexVolume(0.1);
0125 kfparticle->setMotherIPchi2(FLT_MAX);
0126 kfparticle->setFlightDistancechi2(-1.);
0127 kfparticle->setMinDIRA(-1.1);
0128 kfparticle->setDecayLengthRange(-1, 100);
0129
0130
0131 std::vector<std::pair<float, float>> intermediate_mass_range;
0132 intermediate_mass_range.push_back(make_pair(0.8, 1.2));
0133
0134 kfparticle->setIntermediateMassRange(intermediate_mass_range);
0135
0136 std::vector<float> intermediate_min_pt = {0.0};
0137 kfparticle->setIntermediateMinPT(intermediate_min_pt);
0138
0139 std::vector<std::pair<float, float>> intermediate_IP_range;
0140 intermediate_IP_range.push_back(make_pair(-1., 5.));
0141
0142 kfparticle->setIntermediateIPRange(intermediate_IP_range);
0143
0144 std::vector<std::pair<float, float>> intermediate_IPchi2_range;
0145 intermediate_IPchi2_range.push_back(make_pair(0., 400.));
0146
0147 kfparticle->setIntermediateIPchi2Range(intermediate_IPchi2_range);
0148
0149 std::vector<float> intermediate_min_dira = {-1.1};
0150 kfparticle->setIntermediateMinDIRA(intermediate_min_dira);
0151
0152 std::vector<float> intermediate_min_FDchi2 = {-1.};
0153 kfparticle->setIntermediateMinFDchi2(intermediate_min_FDchi2);
0154
0155 std::vector<float> intermediate_max_vertex_vol = {1.1};
0156 kfparticle->setIntermediateMaxVertexVolume(intermediate_max_vertex_vol);
0157
0158 se->registerSubsystem(kfparticle);
0159 }