LcioMcpMaps.cc

Go to the documentation of this file.
00001 // $Header: /cvs/lcd/slic/src/LcioMcpMaps.cc,v 1.5 2007/04/27 01:54:35 jeremy Exp $
00002 #include "LcioMcpMaps.hh"
00003 
00004 // slic
00005 #include "LcioMcpManager.hh"
00006 #include "Module.hh"
00007 #include "Trajectory.hh"
00008 
00009 using EVENT::MCParticle;
00010 using IMPL::MCParticleImpl;
00011 
00012 namespace slic
00013 {
00014 
00015   LcioMcpMaps::LcioMcpMaps(LcioMcpManager* manager)
00016     : Module( "LcioMcpMaps" )
00017   {
00018     m_manager = manager;
00019   }
00020 
00021   LcioMcpMaps::~LcioMcpMaps()
00022   {}
00023 
00024   void LcioMcpMaps::addTrackIDToMcpLink(G4int trkID,
00025                                         MCParticleImpl* mcp)
00026   {
00027     assert( mcp );
00028     assert(trkID > 0);
00029 
00030     m_trackToMcp[ trkID ] = mcp;
00031   }
00032 
00033   MCParticleImpl* LcioMcpMaps::findMcpFromTrackID( G4int trkID ) const
00034   {
00035     MCParticleImpl* mcp = 0;
00036     for ( TrackToMcpMap::const_iterator iter = m_trackToMcp.begin();
00037           iter != m_trackToMcp.end();
00038           iter++ ) {
00039       if ( iter->first == trkID ) {
00040         mcp = iter->second;
00041         break;
00042       }
00043     }
00044     return mcp;
00045   }
00046 
00047   /* Find the trackID for the final MCParticle. */
00048   G4int LcioMcpMaps::findTrackIDFromFinalMcp( MCParticle* mcp) const
00049   {
00050     G4int trkID = -1;
00051     for ( TrackToMcpMap::const_iterator iter = m_trackToMcp.begin();
00052           iter != m_trackToMcp.end();
00053           iter++ ) {
00054       if ( iter->second == mcp ) {
00055         trkID = iter->first;
00056         break;
00057       }
00058     }
00059     return trkID;
00060   }
00061 
00062   MCParticle* LcioMcpMaps::findPrimaryInitialMcpFromTrajectory(Trajectory* trj) const
00063   {
00064     MCParticle* mcpPrim = 0;
00065 
00066     G4int trjTrkID = trj->GetTrackID();
00067 
00068     /* Get initial collection. */
00069     EVENT::LCCollection* initMcpColl = m_manager->getInitialMcpCollection();
00070 
00071     // loop over input collection
00072     int numPrePart = initMcpColl->getNumberOfElements();
00073     for( int k=0; k < numPrePart; k++ ) {
00074 
00075       // current MCP
00076       MCParticle* mcpPre = static_cast<MCParticle*> ( initMcpColl->getElementAt( k ) );
00077 
00078       // do we have matching primary for this Mcp?
00079       G4PrimaryParticle* primaryMatch = findPrimaryFromMcp( mcpPre );
00080       if ( primaryMatch ) {
00081 
00082         // found matching primary to this input trajectory
00083         if ( primaryMatch->GetTrackID() == trjTrkID ) {
00084           mcpPrim = mcpPre;
00085           break;
00086         }
00087 
00088       }
00089     }
00090 
00091     return mcpPrim;
00092   }
00093 
00094   MCParticle* LcioMcpMaps::findDaughterMcpFromPrimary(MCParticle* mcpInit,
00095                                                       G4PrimaryParticle* primDau) const
00096   {
00097     // loop over Mcp input particle's daughters
00098     MCParticle* mcpDau = 0;
00099     int numMcpDau = mcpInit->getDaughters().size();
00100     for ( int i=0; i < numMcpDau; i++ ) {
00101 
00102       // does ith Mcp dau match this primary?
00103       if ( findPrimaryFromMcp( mcpInit->getDaughters()[i] ) == primDau ) {
00104 
00105         // found it
00106         mcpDau = mcpInit->getDaughters()[i];
00107         break;
00108       }
00109     }
00110 
00111     // return dau
00112     return mcpDau;
00113   }
00114 
00115   MCParticleImpl* LcioMcpMaps::findFinalParticleFromInitial( MCParticle* mcpInit) const
00116   {
00117     MCParticleImpl* mcpFinal = 0;
00118     for ( InitMcpToMcpMap::const_iterator iter = m_initMcpToMcp.begin();
00119           iter != m_initMcpToMcp.end();
00120           iter++ ) {
00121       if ( iter->first == mcpInit ) {
00122         mcpFinal = iter->second;
00123         break;
00124       }
00125     }
00126 
00127     return mcpFinal;
00128   }
00129 
00130   G4PrimaryParticle* LcioMcpMaps::findPrimaryFromMcp(MCParticle* mcp) const
00131   {
00132     G4PrimaryParticle *pp = 0;
00133     for ( McpToPrimaryMap::const_iterator iter = m_McpToPrimary.begin();
00134           iter != m_McpToPrimary.end();
00135           iter++ ){
00136       if ( iter->first == mcp ) {
00137         pp = iter->second;
00138         break;
00139       }
00140     }
00141 
00142     return pp;
00143   }
00144 
00145   void LcioMcpMaps::addMcpToPrimaryLink(MCParticle* mcp,
00146                                            G4PrimaryParticle* primary)
00147   {
00148     m_McpToPrimary[ mcp ] = primary;
00149   }
00150 
00151   void LcioMcpMaps::addInitialMcpToFinalMcpLink(MCParticle* mcpInit,
00152                                                    MCParticleImpl* mcpFinal)
00153   {
00154     m_initMcpToMcp[ mcpInit ] = mcpFinal;
00155   }
00156 
00157   void LcioMcpMaps::clear()
00158   {
00159     m_trackToMcp.clear();
00160     m_McpToPrimary.clear();
00161     m_initMcpToMcp.clear();
00162   }
00163 
00164   void LcioMcpMaps::printMaps()
00165   {
00166     log() << LOG::debug << "Printing maps..." << LOG::done;
00167 
00168     printTrackToMcpMap();
00169     printMcpToPrimaryMap();
00170     printInitMcpToMcpMap();
00171     //    TrajectoryManager::instance()->printTrackIDToTrajectoryMap();
00172   }
00173 
00174   void LcioMcpMaps::printTrackToMcpMap()
00175   {
00176     log() << LOG::debug << "Printing track to Mcp map..." << LOG::done;
00177 
00178     log() << LOG::debug << "*** TrackToMcpMap ***" << LOG::done;
00179     log() << LOG::debug << "trkID | McpPtr" << LOG::done;
00180     for ( TrackToMcpMap::iterator iter = m_trackToMcp.begin();
00181           iter != m_trackToMcp.end();
00182           iter++ ) {
00183       log() << LOG::debug << iter->first << " " << iter->second << LOG::done;
00184     }
00185     log() << LOG::debug << LOG::done;
00186   }
00187 
00188   void LcioMcpMaps::printMcpToPrimaryMap()
00189   {
00190     log() << LOG::debug << "Printing Mcp to primary map..." << LOG::done;
00191 
00192     log() << LOG::debug << LOG::done;
00193     log() << LOG::debug << "*** McpToPrimaryMap ***" << LOG::done;
00194     log() << LOG::debug << "McpPtr | PrimaryPtr" << LOG::done;
00195 
00196     for ( McpToPrimaryMap::iterator iter = m_McpToPrimary.begin();
00197           iter != m_McpToPrimary.end();
00198           iter++ ) {
00199       log() << LOG::debug << iter->first << " " << iter->second << LOG::done;
00200     }
00201     log() << LOG::debug << LOG::done;
00202   }
00203 
00204   void LcioMcpMaps::printInitMcpToMcpMap()
00205   {
00206     log() << LOG::debug << "Printing InitMcp to Mcp map..." << LOG::done;
00207 
00208     log() << LOG::debug << LOG::done;
00209     log() << LOG::debug << "*** McpToMcpMap ***" << LOG::done;
00210     log() << LOG::debug << "McpPtrInit | McpPtrFinal" << LOG::done;
00211 
00212     for ( InitMcpToMcpMap::iterator iter = m_initMcpToMcp.begin();
00213           iter != m_initMcpToMcp.end();
00214           iter++ ) {
00215       log() << LOG::debug << iter->first << " " << iter->second << LOG::done;
00216     }
00217     log() << LOG::debug << LOG::done;
00218   }
00219 }

Generated on Thu Nov 15 15:24:16 2007 for Simulator for the Linear Collider by  doxygen 1.5.4