Skip to content

Commit feb768d

Browse files
committed
Update KBasicTau
The decayMode and emFraction is now in the basic tau
1 parent 4173b91 commit feb768d

File tree

2 files changed

+38
-27
lines changed

2 files changed

+38
-27
lines changed

DataFormats/interface/KTau.h

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,34 @@ struct KTauMetadata
1717
std::vector<std::string> floatDiscriminatorNames;
1818
};
1919

20+
/// Basic tau data format
21+
/** This contains the tau discriminators, the decay mode and the em-fraction
22+
copy from DataFormats/TauReco/interface/PFTau.h
23+
*/
2024
struct KBasicTau : public KLepton
2125
{
22-
/*
23-
virtual ~KBasicTau() {};
24-
25-
virtual bool isTau() {
26-
return true;
27-
};
28-
*/
29-
26+
int decayMode; //< hadronic decay mode as identified by HPS algorithm
27+
float emFraction; //< electromagnetic energy fraction
28+
29+
/// container for tau discriminators with binary values
3030
unsigned long long binaryDiscriminators;
31+
/// container for tau discriminators with real (float) values
3132
std::vector<float> floatDiscriminators;
3233

33-
bool hasID(const std::string& name, const KTauMetadata * lumimetadata) const
34+
/// function to access tau discriminators with binary values
35+
bool getId(const std::string& name, const KTauMetadata* meta) const
3436
{
35-
for(size_t i = 0; i < lumimetadata->binaryDiscriminatorNames.size(); ++i)
36-
if(lumimetadata->binaryDiscriminatorNames[i] == name)
37+
for(size_t i = 0; i < meta->binaryDiscriminatorNames.size(); ++i)
38+
if(meta->binaryDiscriminatorNames[i] == name)
3739
return (binaryDiscriminators & (1ull << i)) != 0;
3840
return false; // Named discriminator does not exist
3941
}
4042

41-
float getDiscriminator(const std::string& name, const KTauMetadata * lumimetadata) const
43+
/// function to access tau discriminators with real values
44+
float getDiscriminator(const std::string& name, const KTauMetadata* meta) const
4245
{
43-
for(size_t i = 0; i < lumimetadata->floatDiscriminatorNames.size(); ++i)
44-
if(lumimetadata->floatDiscriminatorNames[i] == name)
46+
for(size_t i = 0; i < meta->floatDiscriminatorNames.size(); ++i)
47+
if (meta->floatDiscriminatorNames[i] == name)
4548
return floatDiscriminators[i];
4649
return -999.0; // Named discriminator does not exist
4750
}

Producers/interface/KBasicTauProducer.h

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define KAPPA_BASICTAUPRODUCER_H
99

1010
#include "KBaseMultiLVProducer.h"
11+
#include "../../DataFormats/interface/KTrack.h"
1112

1213
template<typename TTau, typename TTauDiscriminator, typename TProduct>
1314
// Note: We need to use std::vector here, not edm::View, because otherwise
@@ -31,8 +32,8 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
3132

3233
binaryTauDiscriminatorBitMap[names[i]] = std::map<std::string, unsigned int>();
3334
floatTauDiscriminatorBitMap[names[i]] = std::map<std::string, unsigned int>();
34-
discrMetadataMap[names[i]] = new KTauMetadata();
35-
_lumi_tree->Bronch(names[i].c_str(), "KTauMetadata", &discrMetadataMap[names[i]]);
35+
discriminatorMap[names[i]] = new KTauMetadata();
36+
_lumi_tree->Bronch(names[i].c_str(), "KTauMetadata", &discriminatorMap[names[i]]);
3637

3738
const edm::ParameterSet pset = psBase.getParameter<edm::ParameterSet>(names[i]);
3839

@@ -52,8 +53,8 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
5253

5354
for (size_t i = 0; i < names.size(); ++i)
5455
{
55-
discrMetadataMap[names[i]]->binaryDiscriminatorNames.clear();
56-
discrMetadataMap[names[i]]->floatDiscriminatorNames.clear();
56+
discriminatorMap[names[i]]->binaryDiscriminatorNames.clear();
57+
discriminatorMap[names[i]]->floatDiscriminatorNames.clear();
5758
binaryTauDiscriminatorBitMap[names[i]].clear();
5859
floatTauDiscriminatorBitMap[names[i]].clear();
5960

@@ -68,26 +69,31 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
6869

6970
if (isCorrectType(desc.className()))
7071
{
71-
if (std::find(discrMetadataMap[names[i]]->binaryDiscriminatorNames.begin(), discrMetadataMap[names[i]]->binaryDiscriminatorNames.end(), moduleInstance) == discrMetadataMap[names[i]]->binaryDiscriminatorNames.end() && std::find(discrMetadataMap[names[i]]->floatDiscriminatorNames.begin(), discrMetadataMap[names[i]]->floatDiscriminatorNames.end(), moduleInstance) == discrMetadataMap[names[i]]->floatDiscriminatorNames.end())
72+
if (std::find(discriminatorMap[names[i]]->binaryDiscriminatorNames.begin(),
73+
discriminatorMap[names[i]]->binaryDiscriminatorNames.end(),
74+
moduleInstance) == discriminatorMap[names[i]]->binaryDiscriminatorNames.end() &&
75+
std::find(discriminatorMap[names[i]]->floatDiscriminatorNames.begin(),
76+
discriminatorMap[names[i]]->floatDiscriminatorNames.end(),
77+
moduleInstance) == discriminatorMap[names[i]]->floatDiscriminatorNames.end())
7278
{
7379
if (KBaseProducer::regexMatch(moduleInstance, binaryDiscrWhitelist[names[i]], binaryDiscrBlacklist[names[i]]))
7480
{
75-
discrMetadataMap[names[i]]->binaryDiscriminatorNames.push_back(moduleInstance);
81+
discriminatorMap[names[i]]->binaryDiscriminatorNames.push_back(moduleInstance);
7682

77-
binaryTauDiscriminatorBitMap[names[i]][moduleInstance] = discrMetadataMap[names[i]]->binaryDiscriminatorNames.size() - 1;
83+
binaryTauDiscriminatorBitMap[names[i]][moduleInstance] = discriminatorMap[names[i]]->binaryDiscriminatorNames.size() - 1;
7884

7985
if (this->verbosity > 0)
8086
std::cout << "Binary tau discriminator " << ": " << moduleInstance << " "<< desc.processName() << std::endl;
8187

82-
if (discrMetadataMap[names[i]]->binaryDiscriminatorNames.size()>64)
88+
if (discriminatorMap[names[i]]->binaryDiscriminatorNames.size()>64)
8389
throw cms::Exception("Too many binary tau discriminators selected!");
8490
}
8591

8692
if (KBaseProducer::regexMatch(moduleInstance, floatDiscrWhitelist[names[i]], floatDiscrBlacklist[names[i]]))
8793
{
88-
discrMetadataMap[names[i]]->floatDiscriminatorNames.push_back(moduleInstance);
94+
discriminatorMap[names[i]]->floatDiscriminatorNames.push_back(moduleInstance);
8995

90-
floatTauDiscriminatorBitMap[names[i]][moduleInstance] = discrMetadataMap[names[i]]->floatDiscriminatorNames.size() - 1;
96+
floatTauDiscriminatorBitMap[names[i]][moduleInstance] = discriminatorMap[names[i]]->floatDiscriminatorNames.size() - 1;
9197

9298
if (this->verbosity > 0)
9399
std::cout << "Float tau discriminator " << ": " << moduleInstance << " "<< desc.processName() << std::endl;
@@ -116,10 +122,10 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
116122
currentPreselDiscr = preselectionDiscr[name];
117123
currentDiscrProcessName = tauDiscrProcessName[name];
118124

119-
currentBinaryDiscriminators = discrMetadataMap[name]->binaryDiscriminatorNames;
125+
currentBinaryDiscriminators = discriminatorMap[name]->binaryDiscriminatorNames;
120126
currentBinaryDiscriminatorMap = binaryTauDiscriminatorBitMap[name];
121127

122-
currentFloatDiscriminators = discrMetadataMap[name]->floatDiscriminatorNames;
128+
currentFloatDiscriminators = discriminatorMap[name]->floatDiscriminatorNames;
123129
currentFloatDiscriminatorMap = floatTauDiscriminatorBitMap[name];
124130

125131
// Continue normally
@@ -137,6 +143,8 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
137143

138144
// Charge:
139145
out.charge = in.charge();
146+
out.emFraction = in.emFraction();
147+
out.decayMode = in.decayMode();
140148

141149
// Discriminators:
142150
edm::Ref<std::vector<TTau> > tauRef(this->handle, this->nCursor);
@@ -227,7 +235,7 @@ class KBasicTauProducer : public KBaseMultiLVProducer<std::vector<TTau>, TProduc
227235
protected:
228236
std::map<std::string, std::vector<std::string> > preselectionDiscr;
229237
std::map<std::string, std::vector<std::string> > binaryDiscrWhitelist, binaryDiscrBlacklist, floatDiscrWhitelist, floatDiscrBlacklist;
230-
std::map<std::string, KTauMetadata *> discrMetadataMap;
238+
std::map<std::string, KTauMetadata *> discriminatorMap;
231239
std::map<std::string, std::string > tauDiscrProcessName;
232240
std::map<std::string, std::map<std::string, unsigned int> > binaryTauDiscriminatorBitMap;
233241
std::map<std::string, std::map<std::string, unsigned int> > floatTauDiscriminatorBitMap;

0 commit comments

Comments
 (0)