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

Phase2 - HGC - Realistic SimClusters #19571

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
97645dc
adding ideal to the sequence
felicepantaleo Apr 27, 2017
e8b4315
switching to realistic simclusters
felicepantaleo Jun 30, 2017
1fa3e8a
adding contact information
felicepantaleo Jun 30, 2017
b268cf1
adding some comments
felicepantaleo Jun 30, 2017
bd8f648
update exclusive energy of absorber cluster
felicepantaleo Jul 4, 2017
4c2cb17
remove unused variable warning
felicepantaleo Jul 4, 2017
f2818d9
fix typo
felicepantaleo Jul 4, 2017
1ae10bd
switching back to genericSimClusterMapper for the moment
felicepantaleo Jul 5, 2017
531b71f
remove debug define
felicepantaleo Jul 7, 2017
affac13
use member initializer list in constructor;
felicepantaleo Jul 7, 2017
04044de
remove deprecated comment
felicepantaleo Jul 7, 2017
3a2c1ed
transversal decay length depends on geometry
felicepantaleo Jul 7, 2017
f194846
simplified logic
felicepantaleo Jul 7, 2017
9b84298
adding unordered_map header
felicepantaleo Jul 7, 2017
f63d463
indentation
felicepantaleo Jul 7, 2017
ad8c991
indentation
felicepantaleo Jul 7, 2017
76d6ed4
adding unordered_map header
felicepantaleo Jul 7, 2017
da93274
remove funny typedef
felicepantaleo Jul 7, 2017
aa94daa
remove funny typedef
felicepantaleo Jul 7, 2017
dd82eae
adding headers and remove useless stdmove
felicepantaleo Jul 7, 2017
13d2d26
remove useless stdmove
felicepantaleo Jul 7, 2017
36f6168
fixing coding rules violations
felicepantaleo Jul 12, 2017
10ad5bb
fixing coding rules violations
felicepantaleo Jul 12, 2017
76e0a49
fixing coding rules violations
felicepantaleo Jul 12, 2017
81f486a
fixing coding rules violations
felicepantaleo Jul 12, 2017
ecdbfb9
fixing coding rules violations
felicepantaleo Jul 12, 2017
c667c3a
creating empty PFCluster if the corresponding RealisticSimCluster was…
felicepantaleo Jul 14, 2017
d07f7d0
fix crash
felicepantaleo Jul 20, 2017
34034d7
Update hgcalLocalReco_cff.py
felicepantaleo Jul 20, 2017
95c5bec
protecting layer decay length
felicepantaleo Jul 21, 2017
b6b622a
rescoping some variables
felicepantaleo Jul 21, 2017
3997939
adding protections on energy
felicepantaleo Jul 21, 2017
62f94ad
taking computation of decaylength out of the loop
felicepantaleo Jul 21, 2017
8885b7c
getting total number of layers from geometry
felicepantaleo Jul 24, 2017
eb9667f
moving to a AoS-like data layout
felicepantaleo Jul 26, 2017
ff0e67a
SoA-like RealisticHitToClusterAssociator replaced by AoS
felicepantaleo Jul 26, 2017
431b92f
removing debug variables
felicepantaleo Jul 26, 2017
33a8884
adding some utility functions
felicepantaleo Jul 27, 2017
4d43f8d
distance filter included
felicepantaleo Jul 27, 2017
a22a24c
distance filter included
felicepantaleo Jul 27, 2017
025cc9a
activating hit energy filter
felicepantaleo Jul 27, 2017
8fccfed
Merged HGCal_Realistic_simclusters_PR_master from repository felicepa…
felicepantaleo Aug 2, 2017
001253c
removing white space
felicepantaleo Aug 2, 2017
9b34637
removing white space
felicepantaleo Aug 2, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions RecoParticleFlow/PFClusterProducer/BuildFile.xml
Expand Up @@ -12,6 +12,7 @@
<use name="Calibration/Tools"/>
<use name="CalibCalorimetry/EcalTPGTools"/>
<use name="DataFormats/HGCRecHit"/>
<use name="RecoLocalCalo/HGCalRecAlgos"/>
<use name="vdt_headers"/>
<use name="rootmath"/>
<use name="root"/>
Expand Down
@@ -0,0 +1,140 @@
#ifndef __RecoParticleFlow_PFClusterProducer_RealisticCluster_H__
#define __RecoParticleFlow_PFClusterProducer_RealisticCluster_H__

#include <array>
#include <vector>
#include <algorithm>

class RealisticCluster
{
using Hit3DPosition = std::array<float,3>;

public:

// for each SimCluster and for each layer, we store the position of the most energetic hit of the simcluster in the layer

struct LayerInfo
{
Hit3DPosition centerOfGravityAtLayer_;
Hit3DPosition maxHitPosAtLayer_;
float maxEnergyHitAtLayer_;
};

RealisticCluster():
totalEnergy(0.f),
exclusiveEnergy(0.f),
visible(true)
{

}

void increaseEnergy(float value)
{
totalEnergy+=value;
}
void increaseExclusiveEnergy(float value)
{
exclusiveEnergy+=value;
}

float getExclusiveEnergyFraction() const
{
float fraction = 0.f;
if(totalEnergy>0.f){
fraction = exclusiveEnergy/totalEnergy;
}
return fraction;
}

float getEnergy() const
{
return totalEnergy;
}

float getExclusiveEnergy() const
{
return exclusiveEnergy;
}

bool isVisible() const
{
return visible;
}

void setVisible(bool vis)
{
visible = vis;
}

void setCenterOfGravity(unsigned int layerId, const Hit3DPosition& position)
{
layerInfo_[layerId].centerOfGravityAtLayer_ = position;
}

Hit3DPosition getCenterOfGravity(unsigned int layerId) const
{
return layerInfo_[layerId].centerOfGravityAtLayer_ ;
}

bool setMaxEnergyHit(unsigned int layerId, float newEnergy, const Hit3DPosition position)
{
if (newEnergy > layerInfo_[layerId].maxEnergyHitAtLayer_)
{
layerInfo_[layerId].maxEnergyHitAtLayer_ = newEnergy;
layerInfo_[layerId].maxHitPosAtLayer_ = position;
return true;
}
else
return false;
}

Hit3DPosition getMaxEnergyPosition (unsigned int layerId) const
{
return layerInfo_[layerId].maxHitPosAtLayer_;
}

float getMaxEnergy(unsigned int layerId) const
{
return layerInfo_[layerId].maxEnergyHitAtLayer_;
}

void setLayersNum(unsigned int numberOfLayers)
{
layerInfo_.resize(numberOfLayers);
}

unsigned int getLayersNum() const
{
return layerInfo_.size();
}

void addHitAndFraction(unsigned int hit, float fraction)
{
hitIdsAndFractions_.emplace_back(hit,fraction);
}

void modifyFractionForHitId(float fraction, unsigned int hitId)
{
auto it = std::find_if( hitIdsAndFractions_.begin(), hitIdsAndFractions_.end(),
[&hitId](const std::pair<unsigned int, float>& element){ return element.first == hitId;} );

it->second = fraction;
}

void modifyFractionByIndex(float fraction, unsigned int index)
{
hitIdsAndFractions_[index].second = fraction;
}

const std::vector< std::pair<unsigned int, float> > & hitsIdsAndFractions() const { return hitIdsAndFractions_; }

private:
std::vector<std::pair<unsigned int, float> > hitIdsAndFractions_;
std::vector<LayerInfo> layerInfo_;

float totalEnergy;
float exclusiveEnergy;
bool visible;
};

#endif