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

Topo clustering using already positioned edm4hep::CalorimeterHit #57

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
59 changes: 59 additions & 0 deletions RecCalorimeter/src/components/Merge2CaloHitCollections.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include "Merge2CaloHitCollections.h"
#include <GaudiKernel/MsgStream.h>


DECLARE_COMPONENT(Merge2CaloHitCollections)


Merge2CaloHitCollections::Merge2CaloHitCollections(
const std::string& name,
ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) {
declareProperty("inHitsA", m_inCollA, "First calo hit collection (input)");
declareProperty("inHitsB", m_inCollB, "Second calo hit collection (input)");
declareProperty("outHits", m_outColl, "Resulting hit collection (output)");
}


StatusCode Merge2CaloHitCollections::initialize() {
{
StatusCode sc = GaudiAlgorithm::initialize();
if (sc.isFailure()) {
return sc;
}
}

debug() << "Merge 2 calo hit collections initialized!" << endmsg;

return StatusCode::SUCCESS;
}


StatusCode Merge2CaloHitCollections::execute() {
// Create a new empty calo hits collection
edm4hep::CalorimeterHitCollection* outColl = m_outColl.createAndPut();

// Clone hits from the first collection
const edm4hep::CalorimeterHitCollection* inCollA = m_inCollA.get();
debug() << "Cloning " << inCollA->size() << " from the \""
<< m_inCollA.fullKey().key() << "\" collection." << endmsg;
for (const auto& hit : *inCollA) {
outColl->push_back(hit.clone());
}

// Clone hits from the Second collection
const edm4hep::CalorimeterHitCollection* inCollB = m_inCollB.get();
debug() << "Cloning " << inCollB->size() << " from the \""
<< m_inCollB.fullKey().key() << "\" collection." << endmsg;
for (const auto& hit : *inCollB) {
outColl->push_back(hit.clone());
Copy link
Contributor

Choose a reason for hiding this comment

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

Shouldn't this make sure you merge hits with the same CellID into 1 hit?

}

debug() << "Output collection \"" << m_outColl.fullKey().key()
<< "\" contains " << outColl->size() << " calo hits." << endmsg;
return StatusCode::SUCCESS;
}


StatusCode Merge2CaloHitCollections::finalize() {
return GaudiAlgorithm::finalize();
}
53 changes: 53 additions & 0 deletions RecCalorimeter/src/components/Merge2CaloHitCollections.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#ifndef RECCALORIMETER_MERGE_2_CALO_HIT_COLLECTIONS_H
#define RECCALORIMETER_MERGE_2_CALO_HIT_COLLECTIONS_H

// k4FWCore
#include "k4FWCore/DataHandle.h"

// Gaudi
#include "GaudiAlg/GaudiAlgorithm.h"

// Datamodel
#include "edm4hep/CalorimeterHitCollection.h"

class IGeoSvc;

/** @class Merge2CaloHitCollections
*
* Algorithm for merging two collections together
* Use-case:
* Merging multiple calorimeter collections together.
* (ECAL barrel, HCAL barrel+extended barrel, ECAL + HCAL endcaps,
* ECAL + HCAL forward calorimeter).
*
* @author Juraj Smiesko
* @date 2023-11-06
*
*/

class Merge2CaloHitCollections : public GaudiAlgorithm {

public:
Merge2CaloHitCollections(const std::string& name, ISvcLocator* svcLoc);

StatusCode initialize();

StatusCode execute();

StatusCode finalize();

private:
/// Handle for the first hit collection (input)
DataHandle<edm4hep::CalorimeterHitCollection> m_inCollA{
"inHitsA", Gaudi::DataHandle::Reader, this};

/// Handle for the second hit collection (input)
DataHandle<edm4hep::CalorimeterHitCollection> m_inCollB{
"inHitsB", Gaudi::DataHandle::Reader, this};

/// Handle for the resulting hit collection (output)
DataHandle<edm4hep::CalorimeterHitCollection> m_outColl{
"outHits", Gaudi::DataHandle::Writer, this};
};

#endif /* RECCALORIMETER_MERGE_2_CALO_HIT_COLLECTIONS_H */
4 changes: 2 additions & 2 deletions RecCalorimeter/src/components/TopoCaloNeighbours.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ class TopoCaloNeighbours : public GaudiTool, virtual public ICaloReadNeighboursM
public:
TopoCaloNeighbours(const std::string& type, const std::string& name, const IInterface* parent);
virtual ~TopoCaloNeighbours() = default;

/** Read a map of cellIDs to vector of cellIDs (neighbours).
*/
virtual StatusCode initialize() final;
virtual StatusCode finalize() final;

/** Function to be called for the neighbours of a cell.
* @param[in] aCellId, cellid of the cell of interest.
* @return vector of cellIDs, corresponding to the cells neighbours.
Expand Down
Loading
Loading