| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

SimHitSplitAlgorithm.cc

Go to the documentation of this file.
00001 #include "SimHitSplitSvc/SimHitSplitAlgorithm.h"
00002 
00003 #include "Event/GenHeader.h"
00004 #include "Event/SimHeader.h"
00005 #include "Event/RegistrationSequence.h"
00006 
00007 #include "RootIOSvc/IRootIOSvc.h"
00008 #include "RootIOSvc/RootIOAddress.h"
00009 #include "PerGenEvent/PerGenHeader.h"
00010 #include "PerSimEvent/PerSimHeader.h"
00011 
00012 #include "GaudiKernel/IDataManagerSvc.h"
00013 
00014 using namespace std;
00015 using namespace DayaBay;
00016 
00017 SimHitSplitAlgorithm::SimHitSplitAlgorithm(const string& name, ISvcLocator* pSvcLocator) 
00018                  :DybAlgorithm<SimHeader>(name,pSvcLocator)
00019 {
00020   info()<< "Construct:SimHitSplitAlgorithm()!"<< endreq;
00021 }
00022 
00023 StatusCode SimHitSplitAlgorithm::initialize()
00024 {
00025   StatusCode status = this->GaudiAlgorithm::initialize();
00026   if(status.isFailure()) 
00027   { 
00028     error()<< "Error when initializing  GaudiAlgorithm"<< endreq;
00029     return status;
00030   }
00031    
00032   info()<< "SimHitSplitAlgorithm ininalize()"<< endreq;
00033 
00034   //Initialize the SimHitSplitSvc
00035   IService* isvc = 0;
00036   StatusCode sc = serviceLocator()->service("SimHitSplitSvc", isvc, false);
00037   if(sc.isFailure()) 
00038   {
00039     error()<< "Service : SimHitSplitSvc could not be retrieved"<< endreq;
00040     return sc;
00041   }
00042   isvc->addRef();
00043   sc = isvc->queryInterface(ISimHitSplitSvc::interfaceID(), (void**)&m_simHitSplitSvc);
00044   if(sc.isFailure()) 
00045   {
00046     error()<< "Service SimHitSplitSvc does not implement ISimHitSplitSvc"<< endreq;
00047   }
00048   return sc;
00049 }
00050 
00051 StatusCode SimHitSplitAlgorithm::execute() 
00052 {
00053   info()<< "Now into SimHitSplitAlgorithm executation!"<< endreq;
00054 
00055   vector<SimHitHeader*> shhs;
00056   SimHeader* sh = 0;
00057   sh = get<SimHeader>(evtSvc(), SimHeaderLocation::Default);
00058   StatusCode sc = m_simHitSplitSvc->getSimHitHeader(sh, shhs, m_hitEarliest, m_hitLatest);
00059   if(sc.isFailure()) return StatusCode::SUCCESS;
00060 
00061   for(vector<SimHitHeader*>::iterator vit = shhs.begin(); vit != shhs.end(); vit++)
00062   {
00063     if(!(*vit))
00064     {
00065       error()<< "Error when get one SimHitHeader!"<< endreq;
00066       return StatusCode::FAILURE;
00067     }
00068     info()<< "SimHitHeader's address: "<< (*vit)<< endreq;
00069 
00070     map<short int, SimHitCollection*> shc = (*vit)->hitCollection();
00071     for(map<short int, SimHitCollection*>::iterator mit = shc.begin(); mit != shc.end(); mit++)
00072     {
00073       vector<SimHit*> vsh = mit->second->collection();
00074       info()<< MSG::DEBUG<< "In Det"<< mit->first
00075             << " : SimHit's num = "<< vsh.size()<< endreq;
00076     }
00077     //delete (*vit);
00078   }     
00079   if(shhs.size() != 1 || shhs[0] != sh->hits())
00080   {
00081     for(vector<SimHitHeader*>::size_type i = 0; i < shhs.size(); i++)
00082     {
00083       SimHitHeader::hc_map& maphc = shhs[i]->hitCollection();
00084       for (SimHitHeader::hc_map::iterator it = maphc.begin(); it != maphc.end(); ++it)
00085       {
00086         it->second->collection().clear();
00087       }
00088       //shhs[i]->hitCollection().clear();
00089       delete shhs[i];
00090     }
00091   }
00092   info()<< "SimHitSplitAlgorithm execute() finalized!" << endreq;
00093   return StatusCode::SUCCESS;
00094 }
00095 
00096 StatusCode SimHitSplitAlgorithm::finalize() 
00097 {
00098   info()<< "SimHitSplitAlgorithm finalize()"<< endreq;
00099   return StatusCode::SUCCESS;
00100 }
00101 
00102 SimHitSplitAlgorithm::~SimHitSplitAlgorithm()
00103 {
00104   info()<< "Destruct:~SimHitSplitAlgorithm()!"<< endreq;
00105 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:44:14 2011 for SimHitSplitSvc by doxygen 1.4.7