17 #include <unordered_map>
19 #ifndef _INTERACTIONTREE_
20 #define _INTERACTIONTREE_
31 std::vector<TreeNode*> children;
43 void AddHit(
int trackID, T hit);
44 void AddNode(
int trackID,
int parentID);
45 void SortHits(
bool (*f)(T, T) );
47 void Clear(){ hashMap.clear(); };
51 std::unordered_map<int, TreeNode<T>*> hashMap;
54 typedef typename std::unordered_map<int, TreeNode<T>*>::iterator UOMIterator;
67 std::vector<T>().swap(hits);
83 if( hashMap.find(trackID) == hashMap.end() ) AddNode(trackID, hit->parentID);
85 hashMap[trackID]->hits.push_back(hit);
90 std::pair<UOMIterator, bool> mapResult;
92 if( hashMap.find(parentID) == hashMap.end() ){
94 mapResult = hashMap.insert( std::make_pair(parentID, parentnode) );
98 hashMap[parentID]->children.push_back(childnode);
99 hashMap.insert( std::make_pair(trackID, childnode) );
105 for( std::pair<
int,
TreeNode<T>*> element : hashMap ){
106 std::sort( element.second->hits.begin(), element.second->hits.end(), order );
114 for( std::pair<
int,
TreeNode<T>*> element : hashMap ){
115 std::cout <<
"trackID " << element.first <<
" has " << element.second->children.size() <<
" children" << std::endl;
116 for(
int ic=0; ic<element.second->children.size(); ic++){
117 std::cout <<
" - " << element.second->children[ic]->trackID << std::endl;
118 for(
int ihit=0; ihit<element.second->children[ic]->hits.size(); ihit++){
119 std::cout <<
" --- " << element.second->children[ic]->hits[ihit]->particlePdg <<
" " << element.second->children[ic]->hits[ihit]->time <<
" " << element.second->children[ic]->hits[ihit]->eDep <<
" ";
120 std::cout <<
"(" << element.second->children[ic]->hits[ihit]->entrancePoint[0] <<
", ";
121 std::cout << element.second->children[ic]->hits[ihit]->entrancePoint[1] <<
", ";
122 std::cout << element.second->children[ic]->hits[ihit]->entrancePoint[2] <<
") -> ";
123 std::cout <<
"(" << element.second->children[ic]->hits[ihit]->exitPoint[0] <<
", ";
124 std::cout << element.second->children[ic]->hits[ihit]->exitPoint[1] <<
", ";
125 std::cout << element.second->children[ic]->hits[ihit]->exitPoint[2] <<
")";
126 std::cout << std::endl;