00001 #include "SimG4CMS/Muon/interface/MuonSlaveSD.h" 00002 #include "Geometry/MuonNumbering/interface/MuonSubDetector.h" 00003 00004 #include "SimG4Core/Application/interface/SimTrackManager.h" 00005 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00006 00007 #include <iostream> 00008 00009 00010 MuonSlaveSD::MuonSlaveSD(MuonSubDetector* d, 00011 const SimTrackManager* manager): 00012 TrackingSlaveSD(d->name() ), m_trackManager(manager) 00013 { 00014 detector=d; 00015 00016 } 00017 00018 MuonSlaveSD::~MuonSlaveSD() { 00019 } 00020 00021 void MuonSlaveSD::clearHits() 00022 { 00023 LogDebug("MuonSimDebug") << " MuonSlaveSD::clearHits "<< detector->name() << std::endl; 00024 hits_.clear(); 00025 } 00026 00027 bool MuonSlaveSD::format() 00028 { 00029 LogDebug("MuonSimDebug") << " MuonSlaveSD "<<detector->name()<<" formatting " << hits_.size() <<" hits."<< std::endl; 00030 if (detector->isBarrel()) { 00031 sort(hits_.begin(),hits_.end(), FormatBarrelHits()); 00032 } else if (detector->isEndcap()) { 00033 sort(hits_.begin(),hits_.end(), FormatEndcapHits()); 00034 } else if (detector->isRpc()) { 00035 sort(hits_.begin(),hits_.end(), FormatRpcHits()); 00036 } 00037 00038 return true; 00039 } 00040 00041 00042 bool FormatBarrelHits::operator() (const PSimHit & a, const PSimHit & b) 00043 { 00044 return (sortId(a)<sortId(b)); 00045 } 00046 00047 int FormatBarrelHits::sortId(const PSimHit & a) const 00048 { 00049 return a.detUnitId(); 00050 } 00051 00052 bool FormatEndcapHits::operator() (const PSimHit & a, const PSimHit & b) 00053 { 00054 return (sortId(a)<sortId(b)); 00055 } 00056 00057 int FormatEndcapHits::sortId(const PSimHit & a) const 00058 { 00059 return a.detUnitId(); 00060 } 00061 00062 bool FormatRpcHits::operator() (const PSimHit & a, const PSimHit & b) 00063 { 00064 return (sortId(a)<sortId(b)); 00065 } 00066 00067 int FormatRpcHits::sortId(const PSimHit & a) const 00068 { 00069 return a.detUnitId(); 00070 } 00071