Skip to content

Commit

Permalink
Merge pull request cms-sw#109 from jbsauvan/optimizations
Browse files Browse the repository at this point in the history
Code optimizations
  • Loading branch information
jbsauvan authored May 15, 2017
2 parents f5e48eb + 3e6a1eb commit 638a509
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 19 deletions.
12 changes: 0 additions & 12 deletions L1Trigger/L1THGCal/plugins/HGCalTriggerDigiProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include "L1Trigger/L1THGCal/interface/HGCalTriggerFECodecBase.h"
#include "L1Trigger/L1THGCal/interface/HGCalTriggerBackendProcessor.h"

#include <sstream>
#include <memory>

class HGCalTriggerDigiProducer : public edm::stream::EDProducer<> {
Expand Down Expand Up @@ -94,32 +93,21 @@ void HGCalTriggerDigiProducer::produce(edm::Event& e, const edm::EventSetup& es)
// loop on modules containing hits and call front-end processing
// we produce one output trigger digi per module in the FE
fe_output->reserve(hit_modules_ee.size() + hit_modules_fh.size());
std::stringstream output;
for( const auto& module_hits : hit_modules_ee ) {
fe_output->push_back(l1t::HGCFETriggerDigi());
l1t::HGCFETriggerDigi& digi = fe_output->back();
codec_->setDataPayload(module_hits.second,HGCHEDigiCollection(),HGCHEDigiCollection());
codec_->encode(digi);
digi.setDetId( DetId(module_hits.first) );
codec_->print(digi,output);
edm::LogInfo("HGCalTriggerDigiProducer")
<< output.str();
codec_->unSetDataPayload();
output.str(std::string());
output.clear();
} //end loop on EE modules
for( const auto& module_hits : hit_modules_fh ) {
fe_output->push_back(l1t::HGCFETriggerDigi());
l1t::HGCFETriggerDigi& digi = fe_output->back();
codec_->setDataPayload(HGCEEDigiCollection(),module_hits.second,HGCHEDigiCollection());
codec_->encode(digi);
digi.setDetId( DetId(module_hits.first) );
codec_->print(digi,output);
edm::LogInfo("HGCalTriggerDigiProducer")
<< output.str();
codec_->unSetDataPayload();
output.str(std::string());
output.clear();
} //end loop on FH modules


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class HGCalTriggerGeometryHexImp2 : public HGCalTriggerGeometryBase
std::multimap<std::pair<short,short>, short> trigger_cells_to_cells_;// FIXME: something else than map<pair,short>?
std::unordered_map<short, short> number_trigger_cells_in_wafers_; // the map key is the wafer type
std::unordered_map<short, short> number_cells_in_wafers_; // the map key is the wafer type
std::unordered_set<unsigned> invalid_triggercells_;

// neighbor related maps
// trigger cell neighbors:
Expand All @@ -73,10 +74,12 @@ class HGCalTriggerGeometryHexImp2 : public HGCalTriggerGeometryBase

void fillMaps(const es_info&);
void fillNeighborMaps(const es_info&);
void fillInvalidTriggerCells(const es_info&);
unsigned packTriggerCell(unsigned, const std::vector<int>&) const;
// returns transverse wafer type: -1=coarse, 1=fine, 0=undefined
int detIdWaferType(unsigned subdet, short wafer) const;
bool validCellId(unsigned subdet, unsigned cell_id) const;
bool validTriggerCellFromCells( const unsigned ) const;
};


Expand Down Expand Up @@ -111,6 +114,7 @@ initialize(const es_info& esInfo)
es_info_ = esInfo;
fillMaps(esInfo);
fillNeighborMaps(esInfo);
fillInvalidTriggerCells(esInfo);

}

Expand Down Expand Up @@ -434,7 +438,8 @@ getNeighborsFromTriggerCell( const unsigned trigger_cell_id ) const
<< " for wafer " << wafer << " and trigger cell " << trigger_cell
<< ". The neighbor mapping files should be modified.";
}
unsigned neighbor_wafer = (wafer_tc.first==0 ? wafer : surrounding_wafers.at(wafer_tc.first-1));
int neighbor_wafer = (wafer_tc.first==0 ? wafer : surrounding_wafers.at(wafer_tc.first-1));
if(neighbor_wafer==-1) continue; // non-existing wafer
int type = types.at(wafer_tc.first);
HGCalDetId neighbor_det_id((ForwardSubdetector)trigger_cell_det_id.subdetId(), trigger_cell_det_id.zside(), trigger_cell_det_id.layer(), type, neighbor_wafer, wafer_tc.second);
if(validTriggerCell(neighbor_det_id.rawId()))
Expand Down Expand Up @@ -648,6 +653,47 @@ fillNeighborMaps(const es_info& esInfo)
}
}


void
HGCalTriggerGeometryHexImp2::
fillInvalidTriggerCells(const es_info& esInfo)
{
unsigned n_layers_ee = es_info_.topo_ee->dddConstants().layers(true);
for(unsigned layer=1; layer<=n_layers_ee; layer++)
{
for(const auto& wafer_module : wafer_to_module_ee_)
{
unsigned wafer = wafer_module.first;
int wafer_type = detIdWaferType(ForwardSubdetector::HGCEE, wafer);
// loop on the trigger cells in each wafer
for(int trigger_cell=0; trigger_cell<number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++)
{
HGCalDetId trigger_cell_id_neg(ForwardSubdetector::HGCEE, -1, layer, wafer_type, wafer, trigger_cell);
HGCalDetId trigger_cell_id_pos(ForwardSubdetector::HGCEE, 1, layer, wafer_type, wafer, trigger_cell);
if(!validTriggerCellFromCells(trigger_cell_id_neg)) invalid_triggercells_.emplace(trigger_cell_id_neg.rawId());
if(!validTriggerCellFromCells(trigger_cell_id_pos)) invalid_triggercells_.emplace(trigger_cell_id_pos.rawId());
}
}
}
unsigned n_layers_fh = es_info_.topo_fh->dddConstants().layers(true);
for(unsigned layer=1; layer<=n_layers_fh; layer++)
{
for(const auto& wafer_module : wafer_to_module_fh_)
{
unsigned wafer = wafer_module.first;
int wafer_type = detIdWaferType(ForwardSubdetector::HGCHEF, wafer);
// loop on the trigger cells in each wafer
for(int trigger_cell=0; trigger_cell<number_trigger_cells_in_wafers_.at(wafer_type); trigger_cell++)
{
HGCalDetId trigger_cell_id_neg(ForwardSubdetector::HGCHEF, -1, layer, wafer_type, wafer, trigger_cell);
HGCalDetId trigger_cell_id_pos(ForwardSubdetector::HGCHEF, 1, layer, wafer_type, wafer, trigger_cell);
if(!validTriggerCellFromCells(trigger_cell_id_neg)) invalid_triggercells_.emplace(trigger_cell_id_neg.rawId());
if(!validTriggerCellFromCells(trigger_cell_id_pos)) invalid_triggercells_.emplace(trigger_cell_id_pos.rawId());
}
}
}
}

unsigned
HGCalTriggerGeometryHexImp2::
packTriggerCell(unsigned trigger_cell, const std::vector<int>& wafer_types) const
Expand Down Expand Up @@ -688,6 +734,13 @@ detIdWaferType(unsigned subdet, short wafer) const
bool
HGCalTriggerGeometryHexImp2::
validTriggerCell(const unsigned trigger_cell_id) const
{
return invalid_triggercells_.find(trigger_cell_id)==invalid_triggercells_.end();
}

bool
HGCalTriggerGeometryHexImp2::
validTriggerCellFromCells(const unsigned trigger_cell_id) const
{
// Check the validity of a trigger cell with the
// validity of the cells. One valid cell in the
Expand Down
12 changes: 6 additions & 6 deletions L1Trigger/L1THGCal/src/be_algorithms/HGCalClusteringImpl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,23 +108,23 @@ void HGCalClusteringImpl::triggerCellReshuffling( const edm::PtrVector<l1t::HGCa
std::array< std::array<std::vector<edm::Ptr<l1t::HGCalTriggerCell>>, kLayers_>,kNSides_> & reshuffledTriggerCells
){

for( edm::PtrVector<l1t::HGCalTriggerCell>::const_iterator tc = triggerCellsPtrs.begin(); tc != triggerCellsPtrs.end(); ++tc){
int endcap = (*tc)->zside() == -1 ? 0 : 1 ;
HGCalDetId tcDetId( (*tc)->detId() );
for( const auto& tc : triggerCellsPtrs ){
int endcap = tc->zside() == -1 ? 0 : 1 ;
HGCalDetId tcDetId( tc->detId() );
int subdet = tcDetId.subdetId();
int layer = -1;

if( subdet == HGCEE ){
layer = (*tc)->layer();
layer = tc->layer();
}
else if( subdet == HGCHEF ){
layer = (*tc)->layer() + kLayersEE_;
layer = tc->layer() + kLayersEE_;
}
else if( subdet == HGCHEB ){
edm::LogWarning("DataNotFound") << "WARNING: the BH trgCells are not yet implemented";
}

reshuffledTriggerCells[endcap][layer-1].emplace_back(*tc);
reshuffledTriggerCells[endcap][layer-1].emplace_back(tc);

}

Expand Down

0 comments on commit 638a509

Please sign in to comment.