Skip to content
Snippets Groups Projects
Commit 8e2c730a authored by FU Chengdong's avatar FU Chengdong
Browse files

Merge branch 'calhit'

parents 3ab341f0 b3e27ee2
No related branches found
No related tags found
No related merge requests found
......@@ -15,7 +15,7 @@ public:
typedef G4THitsCollection<CalorimeterHit> CaloHitCollection;
public:
CaloSensitiveDetector(const std::string& name, dd4hep::Detector& description);
CaloSensitiveDetector(const std::string& name, dd4hep::Detector& description, bool unmerge=true);
public:
// Geant4 interface
......@@ -30,6 +30,8 @@ protected:
protected:
HitCollection* m_hc;
std::map<unsigned long, CalorimeterHit*> m_hitMap;
bool m_unmerge;
};
......
......@@ -4,9 +4,10 @@
#include <algorithm>
CaloSensitiveDetector::CaloSensitiveDetector(const std::string& name, dd4hep::Detector& description)
CaloSensitiveDetector::CaloSensitiveDetector(const std::string& name, dd4hep::Detector& description, bool unmerge)
: DDG4SensitiveDetector(name, description),
m_hc(nullptr) {
m_hc(nullptr),
m_unmerge(unmerge){
const std::string& coll_name = m_sensitive.hitsCollection();
collectionName.insert(coll_name);
}
......@@ -23,6 +24,7 @@ CaloSensitiveDetector::Initialize(G4HCofThisEvent* HCE) {
if(HCID<0) HCID = G4SDManager::GetSDMpointer()->GetCollectionID(m_hc);
HCE->AddHitsCollection( HCID, m_hc );
m_hitMap.clear();
}
G4bool
......@@ -33,13 +35,21 @@ CaloSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*) {
dd4hep::sim::Geant4StepHandler h(step);
dd4hep::Position pos = 0.5 * (h.prePos() + h.postPos());
HitContribution contrib = dd4hep::sim::Geant4Hit::extractContribution(step);
CalorimeterHit* hit=find(m_hc,dd4hep::sim::HitPositionCompare<CalorimeterHit>(pos));
const std::string& name = GetName();
unsigned long id = getCellID( step );
//std::cout << name << " " << id << std::endl;
CalorimeterHit* hit=nullptr;
if(m_unmerge) hit=find(m_hc,dd4hep::sim::HitPositionCompare<CalorimeterHit>(pos));
else{
std::map<unsigned long, CalorimeterHit*>::iterator it = m_hitMap.find(id);
if(it!=m_hitMap.end()) hit = it->second;
}
// G4cout << "----------- Geant4GenericSD<Calorimeter>::buildHits : position : " << pos << G4endl;
if ( !hit ) {
hit = new CalorimeterHit(pos);
hit->cellID = getCellID( step );
hit->cellID = id; //getCellID( step );
m_hc->insert(hit);
if(!m_unmerge) m_hitMap[id] = hit;
}
hit->truth.push_back(contrib);
hit->energyDeposit += contrib.deposit;
......
......@@ -35,7 +35,15 @@ CalorimeterSensDetTool::createSD(const std::string& name) {
dd4hep::Detector* dd4hep_geo = m_geosvc->lcdd();
G4VSensitiveDetector* sd = new CaloSensitiveDetector(name, *dd4hep_geo);
bool flagUnmerge = false;
for(auto cal_name : m_unmergeCals){
if(cal_name==name){
flagUnmerge = true;
break;
}
}
G4VSensitiveDetector* sd = new CaloSensitiveDetector(name, *dd4hep_geo, flagUnmerge);
debug() << name << " set to merge true/false = " << !flagUnmerge << endmsg;
return sd;
}
......
......@@ -29,6 +29,7 @@ private:
// in order to initialize SD, we need to get the lcdd()
SmartIF<IGeomSvc> m_geosvc;
Gaudi::Property<std::vector<std::string> > m_unmergeCals{this, "UnmergedCalNames", {}};
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment