Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic Reduction Network for photon energy regression in miniAOD using the SonicTriton service #37134

Merged
merged 42 commits into from
Apr 29, 2022
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
f3fee7c
One merged commit
ssrothman Mar 3, 2022
32c5854
Fix ES data getting to be compliant with newer CMSSW
ssrothman Mar 3, 2022
2da29a3
Added test
ssrothman Mar 3, 2022
616831b
code-format and code-checks
ssrothman Mar 3, 2022
3cdd06c
Code-format (again??)
ssrothman Mar 3, 2022
0bf9e99
Made test shorter
ssrothman Mar 7, 2022
da3c714
Fixed model name
ssrothman Mar 7, 2022
5af31a1
Not sure what's going on here tbh...
ssrothman Mar 7, 2022
fe1ee8e
Revert "Not sure what's going on here tbh..."
ssrothman Mar 7, 2022
c65a63d
Rename customisation function appropriately
ssrothman Mar 7, 2022
e36b116
Updated test config to call correct customisation function name
ssrothman Mar 7, 2022
26dfae6
Fixed customisation function to be compatible with cmsDriver
ssrothman Mar 8, 2022
30e291e
Almost working.....
ssrothman Mar 9, 2022
82ced8d
Kevin found the problem :D
ssrothman Mar 10, 2022
2f80e2f
Removed test
ssrothman Mar 11, 2022
d357aa7
UserFloat functionality
ssrothman Mar 16, 2022
9556a83
Fixed fatal typos
ssrothman Mar 16, 2022
2637202
No reason to touch runtests.sh
ssrothman Mar 16, 2022
1a5de2f
Pointers..
ssrothman Mar 16, 2022
f994140
Clean up DRNCorrectionProducerT
ssrothman Mar 16, 2022
e5db2ac
Error fixing...
ssrothman Mar 16, 2022
ec15ac7
Should compile now
ssrothman Mar 16, 2022
cc93d65
empty commit to get cms bot to rerun code checks
ssrothman Mar 16, 2022
c3927d0
Code-format
ssrothman Mar 16, 2022
722602b
Don't need ES Handles
ssrothman Mar 17, 2022
c658fab
No longer pointers
ssrothman Mar 17, 2022
509d4a1
Typo fix
ssrothman Mar 17, 2022
84c52f2
Adding process modifier
ssrothman Mar 17, 2022
0e55eb0
Typo fix
ssrothman Mar 17, 2022
c99da3c
userFloats by default
ssrothman Mar 17, 2022
8a69393
RelVal use modifier
ssrothman Mar 17, 2022
fa89ab1
Replace p4 matching
ssrothman Mar 17, 2022
bb7c727
Clean up after removing p4 comparison
ssrothman Mar 17, 2022
bccd830
Merge branch 'noHandle' into photon_rebase2
ssrothman Mar 17, 2022
8c0bd7c
Code-format
ssrothman Mar 17, 2022
1ab9afd
photonDRN modifier now includes enableSonicTriton
ssrothman Apr 4, 2022
fc9c472
use fillDescriptions defaults for recHits
ssrothman Apr 4, 2022
78558dc
shared memory on
ssrothman Apr 4, 2022
7ecb877
test clone...
ssrothman Apr 13, 2022
a8702fa
Revert "test clone..."
ssrothman Apr 14, 2022
5977c4b
Cloning fillDescriptions config
ssrothman Apr 14, 2022
c8484f9
Same for electrons
ssrothman Apr 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Code-format (again??)
  • Loading branch information
ssrothman committed Mar 3, 2022
commit 3cdd06c1c56dc04cf6223af1adf2d8b4218b4b18
54 changes: 25 additions & 29 deletions RecoEgamma/EgammaTools/plugins/DRNCorrectionProducerT.cc
Original file line number Diff line number Diff line change
@@ -73,9 +73,7 @@ namespace {
//correction factor is transformed by sigmoid and "logratioflip target"
float correction(float x) { return exp(-logcorrection(x)); }

inline float rescale(float x, float min, float range){
return (x-min)/range;
}
inline float rescale(float x, float min, float range) { return (x - min) / range; }

//resolution is transformed by softplus function
float resolution(float x) { return log(1 + exp(x)); }
@@ -91,7 +89,7 @@ namespace {

const float Z_MIN = -330.0f;
const float Z_RANGE = 660.0f;

const float NOISE_MIN = 0.9f;
const float NOISE_RANGE = 3.0f;

@@ -101,7 +99,7 @@ namespace {
const float ES_MIN = 0.0f;
const float ES_RANGE = 0.1f;

} //anon namespace for private utility constants and functions
} // namespace

template <typename T>
class DRNCorrectionProducerT : public TritonEDProducer<> {
@@ -135,8 +133,8 @@ class DRNCorrectionProducerT : public TritonEDProducer<> {
};

template <typename T>
DRNCorrectionProducerT<T>::DRNCorrectionProducerT(const edm::ParameterSet& iConfig) :
TritonEDProducer<>(iConfig),
DRNCorrectionProducerT<T>::DRNCorrectionProducerT(const edm::ParameterSet& iConfig)
: TritonEDProducer<>(iConfig),
particleSource_{iConfig.getParameter<edm::InputTag>("particleSource")},
particleToken_(consumes(particleSource_)),
rhoName_{iConfig.getParameter<edm::InputTag>("rhoName")},
@@ -148,22 +146,22 @@ DRNCorrectionProducerT<T>::DRNCorrectionProducerT(const edm::ParameterSet& iConf
EERecHitsToken_(consumes<EcalRecHitCollection>(EERecHitsName_)),
ESRecHitsToken_(consumes<EcalRecHitCollection>(ESRecHitsName_)),
pedToken_(esConsumes()),
geomToken_(esConsumes()){
geomToken_(esConsumes()) {
produces<edm::ValueMap<std::pair<float, float>>>();
}

template <typename T>
bool DRNCorrectionProducerT<T>::isEB(const T& part){
return part.superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalBarrel;
bool DRNCorrectionProducerT<T>::isEB(const T& part) {
return part.superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalBarrel;
}

template <typename T>
bool DRNCorrectionProducerT<T>::isEE(const T& part){
return part.superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalEndcap;
bool DRNCorrectionProducerT<T>::isEE(const T& part) {
return part.superCluster()->seed()->hitsAndFractions().at(0).first.subdetId() == EcalEndcap;
}

template <typename T>
bool DRNCorrectionProducerT<T>::skip(const T& part){
bool DRNCorrectionProducerT<T>::skip(const T& part) {
/*
* Separated out from acquire() and produce() to ensure that skipping check is identical in both
* N.B. in MiniAOD there are sometimes particles with no RecHits
@@ -214,13 +212,13 @@ void DRNCorrectionProducerT<T>::acquire(edm::Event const& iEvent, edm::EventSetu
for (auto& part : *particles_) {
const reco::SuperClusterRef& sc = part.superCluster();

if(skip(part))
if (skip(part))
continue;

nHitsECAL += sc->hitsAndFractions().size();

for (auto iES = sc->preshowerClustersBegin(); iES != sc->preshowerClustersEnd(); ++iES) {
nHitsES += (*iES)->hitsAndFractions().size();
nHitsES += (*iES)->hitsAndFractions().size();
}

++nValidPart_;
@@ -288,7 +286,7 @@ void DRNCorrectionProducerT<T>::acquire(edm::Event const& iEvent, edm::EventSetu
std::vector<std::pair<DetId, float>> hitsAndFractions = sc->hitsAndFractions();
EcalRecHitCollection::const_iterator hit;

if (hitsAndFractions.empty()) //skip particles without RecHits
if (hitsAndFractions.empty()) //skip particles without RecHits
continue;

//iterate over ECAL hits...
@@ -307,8 +305,8 @@ void DRNCorrectionProducerT<T>::acquire(edm::Event const& iEvent, edm::EventSetu
vdataxECAL.push_back(rescale(pos.x(), XY_MIN, XY_RANGE));
vdataxECAL.push_back(rescale(pos.y(), XY_MIN, XY_RANGE));
vdataxECAL.push_back(rescale(pos.z(), Z_MIN, Z_RANGE));
vdataxECAL.push_back(rescale(hit->energy() * detitr.second, ECAL_MIN, ECAL_RANGE));
vdataxECAL.push_back(rescale(ped->find(detitr.first)->rms(1), NOISE_MIN, NOISE_RANGE));
vdataxECAL.push_back(rescale(hit->energy() * detitr.second, ECAL_MIN, ECAL_RANGE));
vdataxECAL.push_back(rescale(ped->find(detitr.first)->rms(1), NOISE_MIN, NOISE_RANGE));

//fill fECAL
int64_t flagVal = 0;
@@ -357,18 +355,17 @@ void DRNCorrectionProducerT<T>::acquire(edm::Event const& iEvent, edm::EventSetu
vdatafES.push_back(flagVal);

//fill batchES
vdataBatchES.push_back(partNum);
vdataBatchES.push_back(partNum);
} //end iterate over ES hits
} //end iterate over ES clusters
} //end iterate over ES clusters

//fill gx
vdataGx.push_back(rescale(rho, RHO_MIN, RHO_RANGE));
vdataGx.push_back(rescale(part.hadronicOverEm(), HOE_MIN, HOE_RANGE));


//increment particle number
++partNum;
} // end iterate over particles
} // end iterate over particles

/*
* Convert input tensors to server data format
@@ -387,32 +384,31 @@ void DRNCorrectionProducerT<T>::acquire(edm::Event const& iEvent, edm::EventSetu

template <typename T>
void DRNCorrectionProducerT<T>::produce(edm::Event& iEvent, const edm::EventSetup& iSetup, Output const& iOutput) {

particles_ = iEvent.getHandle(particleToken_);

std::vector<std::pair<float, float>> corrections;
corrections.reserve(nPart_);

//if there are no particles, the fromServer() call will fail
//but we can just put() an empty valueMap
if(nPart_){
if (nPart_) {
const auto& muOut = iOutput.at("mu").fromServer<float>();
const auto& sigmaOut = iOutput.at("sigma").fromServer<float>();

unsigned i=0;
unsigned i = 0;
float mu, sigma, Epred, sigmaPred, rawE;
for (unsigned iPart = 0; iPart < nPart_; ++iPart) {
const auto& part = particles_->at(iPart);
if(!skip(part)) {
mu = correction(muOut[0][0 + 6 * i]);
sigma = resolution(sigmaOut[0][0 + 5 * i]);
if (!skip(part)) {
mu = correction(muOut[0][0 + 6 * i]);
sigma = resolution(sigmaOut[0][0 + 5 * i]);
++i;

rawE = particles_->at(iPart).superCluster()->rawEnergy();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
rawE = particles_->at(iPart).superCluster()->rawEnergy();
rawE = part.superCluster()->rawEnergy();

Epred = mu * rawE;
sigmaPred = sigma * rawE;
corrections.emplace_back(Epred, sigmaPred);
} else{
} else {
corrections.emplace_back(-1.0f, -1.0f);
}
}