7 #include <EVENT/SimTrackerHit.h>
8 #include <EVENT/MCParticle.h>
10 typedef std::vector<SimTrackerHit*> SimTrackerHitVec;
11 typedef std::multimap< MCParticle* , SimTrackerHit* > SegmentMap;
12 typedef SegmentMap::iterator segIter;
13 typedef std::map< MCParticle* , SimTrackerHitVec > MCPMap;
14 typedef std::pair< MCParticle* , SimTrackerHitVec > MCPMapPair;
28 SegmentMap makeSegmentMap(SimTrackerHitVec simthits){
29 int nsth = simthits.size();
31 for(
int i = 0 ; i < nsth ; i++){
32 SimTrackerHit* sth = simthits[i];
33 map.insert( std::make_pair( sth->getMCParticle() , sth ) );
39 MCParticleVec getMCParticlesFromSegmentMap(SegmentMap map){
40 segIter it = map.begin();
42 mcps.push_back(it->first);
44 while(it != map.end()){
45 if(mcps.back() != it->first){
46 mcps.push_back(it->first);
54 SimTrackerHitVec getSimTrackerHitVecFromSegmentMap(MCParticle* mcp, SegmentMap map ){
55 SimTrackerHitVec simthits;
58 typedef std::pair<segIter,segIter> EqualRange;
59 EqualRange ret = map.equal_range( mcp );
60 for(segIter it = ret.first; it != ret.second; it++){
61 simthits.push_back(it->second);
67 MCPMap makeMCPMap(SegmentMap map){
68 MCParticleVec mcps = getMCParticlesFromSegmentMap(map);
69 int size = mcps.size();
71 for(
int i = 0; i < size; i++){
72 SimTrackerHitVec simthits = getSimTrackerHitVecFromSegmentMap(mcps[i], map );
73 mcpmap.insert( std::make_pair( mcps[i], simthits ) );
81 MCPMap MakeMCPMap(SimTrackerHitVec simthits){
82 if(simthits.size() == 0){
83 std::cout <<
"Fatal Error!! (MakeMCPMap cannot do with SimTrackerHitVec with size = 0 )" << std::endl;
88 SegmentMap segmap = makeSegmentMap(simthits);
89 MCPMap mcpmap = makeMCPMap(segmap);