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(
"qpCategories", m_qpCategories,
"Sets if individual categories output will be saved or not",
false);
43 addParam(
"istrueCategories", m_istrueCategories,
"Sets if individual MC truth for each category is saved or not",
false);
44 addParam(
"targetProb", m_targetProb,
"Sets if individual Categories output will be saved or not",
false);
45 addParam(
"trackPointers", m_trackPointers,
"Sets if track pointers to target tracks are saved or not",
false);
49 void FlavorTaggerInfoFillerModule::initialize()
53 void FlavorTaggerInfoFillerModule::event()
64 if (flavorTaggerInfo ==
nullptr) B2ERROR(
"flavorTaggerInfoFiller: FlavorTaggerInfo does not exist");
66 flavorTaggerInfo -> setUseModeFlavorTagger(
"Expert");
69 flavorTaggerInfo -> addMethodMap(
"FANN");
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 = eventExtraInfo->getExtraInfo(
"qrCombinedFANN");
76 float B0barProbability = 1 - eventExtraInfo->getExtraInfo(
"qrCombinedFANN");
82 flavorTaggerInfo -> addMethodMap(
"FBDT");
86 float qrCombined = 2 * (eventExtraInfo->getExtraInfo(
"qrCombinedFBDT") - 0.5);
87 if (qrCombined < 1.1 && qrCombined > 1.0) qrCombined = 1.0;
88 if (qrCombined > - 1.1 && qrCombined < -1.0) qrCombined = -1.0;
89 float B0Probability = eventExtraInfo->getExtraInfo(
"qrCombinedFBDT");
90 float B0barProbability = 1 - eventExtraInfo->getExtraInfo(
"qrCombinedFBDT");
97 for (
auto& iTuple : m_trackLevelParticleLists) {
98 string particleListName = get<0>(iTuple);
99 string category = get<1>(iTuple);
103 if (!particleList.isValid()) {
104 B2INFO(
"ParticleList " << particleListName <<
" not found");
106 if (particleList -> getListSize() == 0) {
107 infoMapsFBDT -> setProbTrackLevel(category, 0);
108 if (m_trackPointers) infoMapsFBDT -> setTargetTrackLevel(category,
nullptr);
111 for (
unsigned int i = 0; i < particleList->getListSize(); ++i) {
112 Particle* iParticle = particleList ->getParticle(i);
113 float hasMaxProb = manager.getVariable(
"hasHighestProbInCat(" + particleListName +
"," +
"isRightTrack(" +
114 category +
"))")->
function(iParticle);
115 if (hasMaxProb == 1) {
116 float targetProb = iParticle -> getExtraInfo(
"isRightTrack(" + category +
")");
118 if (m_trackPointers) {
119 infoMapsFBDT-> setTargetTrackLevel(category, iParticle -> getTrack());
129 if (m_qpCategories) {
133 if (m_istrueCategories) {
135 if (mcparticles.
isValid()) mcFlag =
true;
138 for (
auto& iTuple : m_eventLevelParticleLists) {
139 string particleListName = get<0>(iTuple);
140 string category = get<1>(iTuple);
141 string qpCategoryVariable = get<2>(iTuple);
144 if (!particleList.isValid()) {
145 B2INFO(
"ParticleList " << particleListName <<
" not found");
147 if (particleList -> getListSize() == 0) {
148 infoMapsFBDT -> setProbEventLevel(category, 0);
149 infoMapsFBDT -> setQpCategory(category, 0);
150 if (m_istrueCategories and mcFlag) {
151 infoMapsFBDT -> setHasTrueTarget(category, 0);
152 infoMapsFBDT -> setIsTrueCategory(category, 0);
154 if (m_trackPointers) infoMapsFBDT -> setTargetEventLevel(category,
nullptr);
157 for (
unsigned int i = 0; i < particleList->getListSize(); ++i) {
158 Particle* iParticle = particleList ->getParticle(i);
159 float hasMaxProb = manager.getVariable(
"hasHighestProbInCat(" + particleListName +
"," +
"isRightCategory(" +
160 category +
"))")->
function(iParticle);
161 if (hasMaxProb == 1) {
162 float categoryProb = iParticle -> getExtraInfo(
"isRightCategory(" + category +
")");
163 float qpCategory = manager.getVariable(qpCategoryVariable)->
function(iParticle);
165 infoMapsFBDT -> setQpCategory(category, qpCategory);
166 if (m_istrueCategories and mcFlag) {
167 float isTrueTarget = manager.getVariable(
"hasTrueTarget(" + category +
")")->
function(
nullptr);
168 infoMapsFBDT -> setHasTrueTarget(category, isTrueTarget);
169 float isTrueCategory = manager.getVariable(
"isTrueCategory(" + category +
")")->
function(
nullptr);
170 infoMapsFBDT -> setIsTrueCategory(category, isTrueCategory);
172 if (m_trackPointers) {
173 infoMapsFBDT-> setTargetEventLevel(category, iParticle -> getTrack());
185 void FlavorTaggerInfoFillerModule::terminate()