Skip to content

Commit

Permalink
Merge pull request cms-sw#100 from MRD2F/CMSSW_10_4_X_DPFIsoDeepTau
Browse files Browse the repository at this point in the history
DNN tau IDs for CMSSW_10_4_X
  • Loading branch information
mbluj authored Oct 26, 2018
2 parents 258e89f + 08e8129 commit fd40795
Show file tree
Hide file tree
Showing 20 changed files with 2,037 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,12 @@ def getGeneral( self ):
"jobmode":"interactive",
"datadir":os.getcwd(),
"logdir":os.getcwd(),
"eosdir": "",
}
self.checkInput("general", knownSimpleOptions = defaults.keys())
general = self.getResultingSection( "general", defaultDict = defaults )
mandatories = [
"eosdir",
]
self.checkInput("general", knownSimpleOptions = defaults.keys() + mandatories)
general = self.getResultingSection( "general", defaultDict = defaults, demandPars = mandatories )
internal_section = "internals"
if not self.has_section(internal_section):
self.add_section(internal_section)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@
#rfmkdir -p .oO[datadir]Oo. &>! /dev/null
#remove possible result file from previous runs
previous_results=$(ls /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.)
previous_results=$(ls /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo.)
for file in ${previous_results}
do
if [ ${file} = /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[outputFile]Oo. ]
if [ ${file} = /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./.oO[outputFile]Oo. ]
then
xrdcp -f root://eoscms//eos/cms${file} root://eoscms//eos/cms${file}.bak
fi
Expand Down Expand Up @@ -98,7 +98,7 @@
find . -maxdepth 1 -name "LOGFILE*.oO[alignmentName]Oo.*" -print | xargs -I {} bash -c "rfcp {} .oO[logdir]Oo."
#copy root files to eos
mkdir -p /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.
mkdir -p /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo.
if [ .oO[parallelJobs]Oo. -eq 1 ]
then
root_files=$(ls --color=never -d *.oO[alignmentName]Oo.*.root)
Expand All @@ -109,7 +109,7 @@
for file in ${root_files}
do
xrdcp -f ${file} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.
xrdcp -f ${file} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo.
echo ${file}
done
Expand Down Expand Up @@ -237,11 +237,11 @@
###############################################################################
# download root files from eos
root_files=$(ls /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo. \
root_files=$(ls /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo. \
| grep ".root$" | grep -v "result.root$")
#for file in ${root_files}
#do
# xrdcp -f root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./${file} .
# xrdcp -f root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./${file} .
# echo ${file}
#done
Expand Down Expand Up @@ -284,11 +284,11 @@
###############################################################################
# download root files from eos
root_files=$(ls /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo. \
root_files=$(ls /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo. \
| grep ".root$" | grep -v "result.root$")
#for file in ${root_files}
#do
# xrdcp -f root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./${file} .
# xrdcp -f root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./${file} .
# echo ${file}
#done
Expand Down Expand Up @@ -326,20 +326,20 @@
compareAlignmentsExecution="""
#merge for .oO[validationId]Oo. if it does not exist or is not up-to-date
echo -e "\n\nComparing validations"
mkdir -p /eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./
mkdir -p /eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./
cp .oO[Alignment/OfflineValidation]Oo./scripts/compareFileAges.C .
root -x -q -b -l "compareFileAges.C(\\\"root://eoscms.cern.ch//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[validationId]Oo._result.root\\\", \\\".oO[compareStringsPlain]Oo.\\\")"
root -x -q -b -l "compareFileAges.C(\\\"root://eoscms.cern.ch//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./.oO[validationId]Oo._result.root\\\", \\\".oO[compareStringsPlain]Oo.\\\")"
comparisonNeeded=${?}
if [[ ${comparisonNeeded} -eq 1 ]]
then
cp .oO[compareAlignmentsPath]Oo. .
root -x -q -b -l '.oO[compareAlignmentsName]Oo.++(\".oO[compareStrings]Oo.\", ".oO[legendheader]Oo.", ".oO[customtitle]Oo.", ".oO[customrighttitle]Oo.", .oO[bigtext]Oo.)'
mv result.root .oO[validationId]Oo._result.root
xrdcp -f .oO[validationId]Oo._result.root root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo.
xrdcp -f .oO[validationId]Oo._result.root root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo.
else
echo ".oO[validationId]Oo._result.root is up-to-date, no need to compare again."
xrdcp -f root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[validationId]Oo._result.root .
xrdcp -f root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./.oO[validationId]Oo._result.root .
fi
"""

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ def getRepMap(self, alignment = None):
outputfile = os.path.expandvars(replaceByMap(
"%s_%s_.oO[name]Oo..root" % (self.outputBaseName, self.name)
, result))
resultfile = os.path.expandvars(replaceByMap(("/store/caf/user/$USER/.oO[eosdir]Oo./" +
resultfile = os.path.expandvars(replaceByMap(("/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./" +
"%s_%s_.oO[name]Oo..root" % (self.resultBaseName, self.name))
, result))
result.update({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ def createScript(self, path):
"-c \"rfcp {} .oO[datadir]Oo./.oO[name]Oo."
".Comparison_common"+name+"_Images/.oO[common]Oo._.oO[name]Oo..Visualization.gif\"\n")

resultingFile = replaceByMap(("/store/caf/user/$USER/.oO[eosdir]Oo./compared%s_"
resultingFile = replaceByMap(("/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./compared%s_"
".oO[name]Oo..root"%name), repMap)
resultingFile = os.path.expandvars( resultingFile )
resultingFile = os.path.abspath( resultingFile )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ def cppboolstring(string, name):
"""
return pythonboolstring(string, name).lower()

conddbcode = None
def conddb(*args):
"""
Wrapper for conddb, so that you can run
Expand All @@ -204,29 +205,36 @@ def conddb(*args):
getcommandoutput2(conddb ...) doesn't work, it imports
the wrong sqlalchemy in CondCore/Utilities/python/conddblib.py
"""
from tempfile import NamedTemporaryFile
global conddbcode
from tempfile import mkdtemp, NamedTemporaryFile

with open(getCommandOutput2("which conddb").strip()) as f:
conddb = f.read()
if conddbcode is None:
conddbfile = getCommandOutput2("which conddb").strip()
tmpdir = mkdtemp()
getCommandOutput2("2to3 -f print -o " + tmpdir + " -n -w " + conddbfile)

with open(os.path.join(tmpdir, "conddb")) as f:
conddb = f.read()

conddbcode = conddb.replace("sys.exit", "sysexit")

def sysexit(number):
if number != 0:
raise AllInOneError("conddb exited with status {}".format(number))
namespace = {"sysexit": sysexit, "conddboutput": ""}

conddb = conddb.replace("sys.exit", "sysexit")

bkpargv = sys.argv
sys.argv[1:] = args
bkpstdout = sys.stdout
with NamedTemporaryFile(bufsize=0) as sys.stdout:
exec(conddb, namespace)
namespace["main"]()
with open(sys.stdout.name) as f:
result = f.read()

sys.argv[:] = bkpargv
sys.stdout = bkpstdout
try:
with NamedTemporaryFile(bufsize=0) as sys.stdout:
exec(conddbcode, namespace)
namespace["main"]()
with open(sys.stdout.name) as f:
result = f.read()
finally:
sys.argv[:] = bkpargv
sys.stdout = bkpstdout

return result

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
p.setTreeBaseDir(".oO[OfflineTreeBaseDir]Oo.");
p.plotDMR(".oO[DMRMethod]Oo.",.oO[DMRMinimum]Oo.,".oO[DMROptions]Oo.");
p.plotSurfaceShapes(".oO[SurfaceShapes]Oo.");
p.plotChi2("root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[validationId]Oo._result.root");
p.plotChi2("root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./.oO[validationId]Oo._result.root");
vector<int> moduleids = {.oO[moduleid]Oo.};
for (auto moduleid : moduleids) {
p.residual_by_moduleID(moduleid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,10 @@
ls -lh .
eos mkdir -p /store/caf/user/$USER/.oO[eosdir]Oo./plots/
eos mkdir -p /store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/
for RootOutputFile in $(ls *root )
do
xrdcp -f ${RootOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./${RootOutputFile}
xrdcp -f ${RootOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./${RootOutputFile}
rfcp ${RootOutputFile} .oO[workingdir]Oo.
done
Expand All @@ -219,12 +219,12 @@
mkdir -p .oO[plotsdir]Oo.
for PngOutputFile in $(ls *png ); do
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./plots/${PngOutputFile}
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/${PngOutputFile}
rfcp ${PngOutputFile} .oO[plotsdir]Oo.
done
for PdfOutputFile in $(ls *pdf ); do
xrdcp -f ${PdfOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./plots/${PdfOutputFile}
xrdcp -f ${PdfOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/${PdfOutputFile}
rfcp ${PdfOutputFile} .oO[plotsdir]Oo.
done
Expand Down Expand Up @@ -292,12 +292,12 @@
root -x -b -q .oO[plottingscriptname]Oo.++
for PdfOutputFile in $(ls *pdf ); do
xrdcp -f ${PdfOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./plots/${PdfOutputFile}
xrdcp -f ${PdfOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/${PdfOutputFile}
rfcp ${PdfOutputFile} .oO[datadir]Oo./.oO[PlotsDirName]Oo.
done
for PngOutputFile in $(ls *png ); do
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./plots/${PngOutputFile}
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/${PngOutputFile}
rfcp ${PngOutputFile} .oO[datadir]Oo./.oO[PlotsDirName]Oo.
done
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ def appendToPlots(self):
returned, else the validation is appended to the list
"""
repMap = self.getRepMap()
return replaceByMap(' filenames.push_back("root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./BiasCheck.root"); titles.push_back(".oO[title]Oo."); colors.push_back(.oO[color]Oo.); linestyles.push_back(.oO[style]Oo.);\n', repMap)
return replaceByMap(' filenames.push_back("root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./BiasCheck.root"); titles.push_back(".oO[title]Oo."); colors.push_back(.oO[color]Oo.); linestyles.push_back(.oO[style]Oo.);\n', repMap)

@classmethod
def plottingscriptname(cls):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,16 +249,16 @@
if [[ .oO[zmumureference]Oo. == *store* ]]; then xrdcp -f .oO[zmumureference]Oo. BiasCheck_Reference.root; else ln -fs .oO[zmumureference]Oo. ./BiasCheck_Reference.root; fi
root -q -b -l MultiHistoOverlap_.oO[resonance]Oo..C
eos mkdir -p /store/caf/user/$USER/.oO[eosdir]Oo./plots/
eos mkdir -p /store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/
for RootOutputFile in $(ls *root )
do
xrdcp -f ${RootOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./
xrdcp -f ${RootOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./
rfcp ${RootOutputFile} .oO[workingdir]Oo.
done
mkdir -p .oO[plotsdir]Oo.
for PngOutputFile in $(ls *png ); do
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./plots/
xrdcp -f ${PngOutputFile} root://eoscms//eos/cms/store/group/alca_trackeralign/AlignmentValidation/.oO[eosdir]Oo./plots/
rfcp ${PngOutputFile} .oO[plotsdir]Oo.
done
Expand Down
4 changes: 2 additions & 2 deletions Alignment/OfflineValidation/scripts/validateAlignments.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ def createMergeScript( path, validations, options ):
repMapTemp["doMerge"] += '\n\n\n\necho -e "\n\nMerging results from %s jobs with alignment %s"\n\n' % (validationType.valType,validation.alignmentToValidate.name)
repMapTemp["doMerge"] += validation.doMerge()
for f in validation.getRepMap()["outputFiles"]:
longName = os.path.join("/eos/cms/store/caf/user/$USER/",
longName = os.path.join("/eos/cms/store/group/alca_trackeralign/AlignmentValidation/",
validation.getRepMap()["eosdir"], f)
repMapTemp["rmUnmerged"] += " rm "+longName+"\n"

Expand Down Expand Up @@ -397,7 +397,7 @@ def createMergeScript( path, validations, options ):
repMap["beforeMerge"] += validationType.doInitMerge()
repMap["doMerge"] += validation.doMerge()
for f in validation.getRepMap()["outputFiles"]:
longName = os.path.join("/eos/cms/store/caf/user/$USER/",
longName = os.path.join("/eos/cms/store/group/alca_trackeralign/AlignmentValidation/",
validation.getRepMap()["eosdir"], f)
repMap["rmUnmerged"] += " rm "+longName+"\n"

Expand Down
1 change: 1 addition & 0 deletions RecoTauTag/RecoTau/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<use name="FastSimulation/BaseParticlePropagator"/>
<use name="FastSimulation/Particle"/>
<use name="roottmva"/>
<use name="PhysicsTools/TensorFlow"/>
<export>
<lib name="1"/>
</export>
80 changes: 80 additions & 0 deletions RecoTauTag/RecoTau/interface/DeepTauBase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#ifndef RecoTauTag_RecoTau_DeepTauBase_h
#define RecoTauTag_RecoTau_DeepTauBase_h

/*
* \class DeepTauBase
*
* Definition of the base class for tau identification using Deep NN.
*
* \author Konstantin Androsov, INFN Pisa
* \author Maria Rosaria Di Domenico, University of Siena & INFN Pisa
*/

#include <Math/VectorUtil.h>
#include "FWCore/Framework/interface/stream/EDProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "PhysicsTools/TensorFlow/interface/TensorFlow.h"
#include "DataFormats/PatCandidates/interface/Electron.h"
#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/Tau.h"
#include "DataFormats/PatCandidates/interface/PATTauDiscriminator.h"
#include "CommonTools/Utils/interface/StringObjectFunction.h"
#include "RecoTauTag/RecoTau/interface/PFRecoTauClusterVariables.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"

namespace deep_tau {

class DeepTauBase : public edm::stream::EDProducer<> {
public:
using TauType = pat::Tau;
using TauDiscriminator = pat::PATTauDiscriminator;
using TauCollection = std::vector<TauType>;
using TauRef = edm::Ref<TauCollection>;
using TauRefProd = edm::RefProd<TauCollection>;
using ElectronCollection = pat::ElectronCollection;
using MuonCollection = pat::MuonCollection;
using LorentzVectorXYZ = ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double>>;
using GraphPtr = std::shared_ptr<tensorflow::GraphDef>;
using Cutter = StringObjectFunction<TauType>;
using CutterPtr = std::unique_ptr<Cutter>;
using WPMap = std::map<std::string, CutterPtr>;


struct Output {
using ResultMap = std::map<std::string, std::unique_ptr<TauDiscriminator>>;
std::vector<size_t> num, den;

Output(const std::vector<size_t>& _num, const std::vector<size_t>& _den) : num(_num), den(_den) {}

ResultMap get_value(const edm::Handle<TauCollection>& taus, const tensorflow::Tensor& pred,
const WPMap& working_points) const;
};

using OutputCollection = std::map<std::string, Output>;


DeepTauBase(const edm::ParameterSet& cfg, const OutputCollection& outputs);
virtual ~DeepTauBase();

virtual void produce(edm::Event& event, const edm::EventSetup& es) override;

private:
virtual tensorflow::Tensor GetPredictions(edm::Event& event, const edm::EventSetup& es,
edm::Handle<TauCollection> taus) = 0;
virtual void CreateOutputs(edm::Event& event, const tensorflow::Tensor& pred, edm::Handle<TauCollection> taus);

protected:
edm::EDGetTokenT<TauCollection> taus_token;
std::string graphName;
GraphPtr graph;
tensorflow::Session* session;
std::map<std::string, WPMap> working_points;
OutputCollection outputs;
};

} // namespace deep_tau



#endif
1 change: 1 addition & 0 deletions RecoTauTag/RecoTau/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,6 @@
<use name="MagneticField/Engine"/>
<use name="MagneticField/Records"/>
<use name="FastSimulation/BaseParticlePropagator"/>
<use name="PhysicsTools/TensorFlow"/>
<use name="root"/>
</library>
Loading

0 comments on commit fd40795

Please sign in to comment.