11 #include <analysis/modules/FlavorTaggerInfoFiller/FlavorTaggerInfoFillerModule.h>
12 #include <framework/core/ModuleParam.templateDetails.h>
13 #include <framework/datastore/StoreArray.h>
14 #include <framework/datastore/StoreObjPtr.h>
15 #include <analysis/dataobjects/ParticleList.h>
16 #include <analysis/dataobjects/EventExtraInfo.h>
17 #include <analysis/dataobjects/FlavorTaggerInfo.h>
18 #include <analysis/dataobjects/RestOfEvent.h>
19 #include <analysis/VariableManager/Manager.h>
20 #include <mdst/dataobjects/MCParticle.h>
33 setDescription(
"Creates a new flavorTaggerInfoMap DataObject for the specific methods. Saves there all the relevant information of the flavorTagger.");
34 setPropertyFlags(c_ParallelProcessingCertified);
36 addParam(
"trackLevelParticleLists", m_trackLevelParticleLists,
"Used Flavor Tagger trackLevel Categories of the lists ",
37 vector<tuple<string, string>>());
38 addParam(
"eventLevelParticleLists", m_eventLevelParticleLists,
"Used Flavor Tagger eventLevel Categories of the lists ",
39 vector<tuple<string, string, string>>());
40 addParam(
"FANNmlp", m_FANNmlp,
"Sets if FANN Combiner output will be saved or not",
false);
41 addParam(
"TMVAfbdt", m_TMVAfbdt,
"Sets if FANN Combiner output will be saved or not",
false);
42 addParam(
"DNNmlp", m_DNNmlp,
"Sets if DNN Tagger output will be saved or not",
false);
43 addParam(
"qpCategories", m_qpCategories,
"Sets if individual categories output will be saved or not",
false);
44 addParam(
"istrueCategories", m_istrueCategories,
"Sets if individual MC truth for each category is saved or not",
false);
45 addParam(
"targetProb", m_targetProb,
"Sets if individual Categories output will be saved or not",
false);
46 addParam(
"trackPointers", m_trackPointers,
"Sets if track pointers to target tracks are saved or not",
false);
50 void FlavorTaggerInfoFillerModule::initialize()
54 void FlavorTaggerInfoFillerModule::event()
65 if (flavorTaggerInfo ==
nullptr) B2ERROR(
"flavorTaggerInfoFiller: FlavorTaggerInfo does not exist");
67 flavorTaggerInfo -> setUseModeFlavorTagger(
"Expert");
72 float qrCombined = eventExtraInfo->getExtraInfo(
"qrCombinedFANN");
73 if (qrCombined < 1.1 && qrCombined > 1.0) qrCombined = 1.0;
74 if (qrCombined > - 1.1 && qrCombined < -1.0) qrCombined = -1.0;
75 float B0Probability = qrCombined / 2 + 0.5;
76 float B0barProbability = 1 - B0Probability;
85 float B0Probability = eventExtraInfo->getExtraInfo(
"qrCombinedFBDT");
86 float B0barProbability = 1 - B0Probability;
87 float qrCombined = 2 * (B0Probability - 0.5);
88 if (qrCombined < 1.1 && qrCombined > 1.0) qrCombined = 1.0;
89 if (qrCombined > - 1.1 && qrCombined < -1.0) qrCombined = -1.0;
98 float B0Probability = particle->getExtraInfo(
"dnn_output");
99 float B0barProbability = 1 - B0Probability;
100 float qrCombined = 2 * (B0Probability - 0.5);
101 if (qrCombined < 1.1 && qrCombined > 1.0) qrCombined = 1.0;
102 if (qrCombined > - 1.1 && qrCombined < -1.0) qrCombined = -1.0;
110 for (
auto& iTuple : m_trackLevelParticleLists) {
111 string particleListName = get<0>(iTuple);
112 string category = get<1>(iTuple);
116 if (!particleList.isValid()) {
117 B2INFO(
"ParticleList " << particleListName <<
" not found");
119 if (particleList -> getListSize() == 0) {
120 infoMapsFBDT -> setProbTrackLevel(category, 0);
121 if (m_trackPointers) infoMapsFBDT -> setTargetTrackLevel(category,
nullptr);
124 for (
unsigned int i = 0; i < particleList->getListSize(); ++i) {
125 Particle* iParticle = particleList ->getParticle(i);
126 float hasMaxProb = manager.getVariable(
"hasHighestProbInCat(" + particleListName +
"," +
"isRightTrack(" +
127 category +
"))")->
function(iParticle);
128 if (hasMaxProb == 1) {
129 float targetProb = iParticle -> getExtraInfo(
"isRightTrack(" + category +
")");
131 if (m_trackPointers) {
132 infoMapsFBDT-> setTargetTrackLevel(category, iParticle -> getTrack());
142 if (m_qpCategories) {
146 if (m_istrueCategories) {
148 if (mcparticles.
isValid()) mcFlag =
true;
151 for (
auto& iTuple : m_eventLevelParticleLists) {
152 string particleListName = get<0>(iTuple);
153 string category = get<1>(iTuple);
154 string qpCategoryVariable = get<2>(iTuple);
157 if (!particleList.isValid()) {
158 B2INFO(
"ParticleList " << particleListName <<
" not found");
160 if (particleList -> getListSize() == 0) {
161 infoMapsFBDT -> setProbEventLevel(category, 0);
162 infoMapsFBDT -> setQpCategory(category, 0);
163 if (m_istrueCategories and mcFlag) {
164 infoMapsFBDT -> setHasTrueTarget(category, 0);
165 infoMapsFBDT -> setIsTrueCategory(category, 0);
167 if (m_trackPointers) infoMapsFBDT -> setTargetEventLevel(category,
nullptr);
170 for (
unsigned int i = 0; i < particleList->getListSize(); ++i) {
171 Particle* iParticle = particleList ->getParticle(i);
172 float hasMaxProb = manager.getVariable(
"hasHighestProbInCat(" + particleListName +
"," +
"isRightCategory(" +
173 category +
"))")->
function(iParticle);
174 if (hasMaxProb == 1) {
175 float categoryProb = iParticle -> getExtraInfo(
"isRightCategory(" + category +
")");
176 float qpCategory = manager.getVariable(qpCategoryVariable)->
function(iParticle);
178 infoMapsFBDT -> setQpCategory(category, qpCategory);
179 if (m_istrueCategories and mcFlag) {
180 float isTrueTarget = manager.getVariable(
"hasTrueTarget(" + category +
")")->
function(
nullptr);
181 infoMapsFBDT -> setHasTrueTarget(category, isTrueTarget);
182 float isTrueCategory = manager.getVariable(
"isTrueCategory(" + category +
")")->
function(
nullptr);
183 infoMapsFBDT -> setIsTrueCategory(category, isTrueCategory);
185 if (m_trackPointers) {
186 infoMapsFBDT-> setTargetEventLevel(category, iParticle -> getTrack());
198 void FlavorTaggerInfoFillerModule::terminate()