00001
00002
00003
00004
00005 #include "GaudiKernel/ToolFactory.h"
00006
00007
00008 #include "TrackTools/ClusterLHCbIDCnv.h"
00009
00010
00011
00012
00013
00014
00015
00016
00017 static const ToolFactory<ClusterLHCbIDCnv> s_factory ;
00018 const IToolFactory& ClusterLHCbIDCnvFactory = s_factory ;
00019
00020
00021
00022
00023 const OTTime& ClusterLHCbIDCnv::otTime( const LHCbID& id )
00024 {
00025 OTTime* dummy = NULL;
00026 if ( ! id.isOT() ) {
00027 error() << "LHCbID not of OT type!" << endreq;
00028 return *dummy;
00029 }
00030
00031 OTChannelID otChID = id.otID();
00032 OTTimes* otTimes = get<OTTimes>( OTTimeLocation::Default );
00033 OTTimes::const_iterator itOTTime;
00034 for ( itOTTime=otTimes->begin() ; otTimes->end()!= itOTTime ; ++itOTTime ) {
00035 if ( otChID == (*itOTTime)->channel() ) {
00036 return *(*itOTTime);
00037 }
00038 }
00039
00040 if ( NULL == (*itOTTime) )
00041 error() << "LHCbID " << id.lhcbID() << " is not valid!" << endreq;
00042
00043 return *dummy;
00044 }
00045
00046
00047
00048
00049 const ITCluster& ClusterLHCbIDCnv::itCluster( const LHCbID& id )
00050 {
00051 ITCluster* dummy = NULL;
00052 if ( ! id.isST() ) {
00053 error() << "LHCbID not of ST type!" << endreq;
00054 return *dummy;
00055 }
00056
00057 ITChannelID itChID = id.stID();
00058 ITClusters* itClus = get<ITClusters>( ITClusterLocation::Default );
00059 ITClusters::const_iterator itITClu;
00060 for ( itITClu=itClus->begin() ; itClus->end()!= itITClu ; ++itITClu ) {
00061 if ( itChID == (*itITClu)->channelID() ) {
00062 return *(*itITClu);
00063 }
00064 }
00065
00066 if ( NULL == (*itITClu) )
00067 error() << "LHCbID " << id.lhcbID() << " is not valid!" << endreq;
00068
00069 return *dummy;
00070 }
00071
00072
00073
00074
00075 const VeloCluster& ClusterLHCbIDCnv::veloCluster( const LHCbID& id )
00076 {
00077 VeloCluster* dummy = NULL;
00078 if ( ! id.isVelo() ) {
00079 error() << "LHCbID not of Velo type!" << endreq;
00080 return *dummy;
00081 }
00082
00083 VeloChannelID veloChID = id.veloID();
00084 VeloClusters* veloClus = get<VeloClusters>( VeloClusterLocation::Default );
00085 VeloClusters::const_iterator itVeloClu;
00086 for ( itVeloClu=veloClus->begin() ; veloClus->end()!= itVeloClu ; ++itVeloClu ) {
00087 if ( veloChID.channelID() == (*itVeloClu)->channelID(0).channelID() ) {
00088 return *(*itVeloClu);
00089 }
00090 }
00091
00092 if ( NULL == (*itVeloClu) )
00093 error() << "LHCbID " << id.lhcbID() << " is not valid!" << endreq;
00094
00095 return *dummy;
00096 }
00097
00098
00099
00100
00101 LHCbID ClusterLHCbIDCnv::lhcbid( const OTTime& otTime )
00102 {
00103 return LHCbID( otTime.channel() );
00104 }
00105
00106
00107
00108
00109 LHCbID ClusterLHCbIDCnv::lhcbid( const ITCluster& itCluster )
00110 {
00111 return LHCbID( itCluster.channelID() );
00112 }
00113
00114
00115
00116
00117 LHCbID ClusterLHCbIDCnv::lhcbid( const VeloCluster& veloCluster )
00118 {
00119 return LHCbID( veloCluster.channelID(0) );
00120 }
00121
00122
00123
00124
00125 ClusterLHCbIDCnv::ClusterLHCbIDCnv( const std::string& type,
00126 const std::string& name,
00127 const IInterface* parent )
00128 : GaudiTool ( type, name , parent )
00129 {
00130 declareInterface<ClusterLHCbIDCnv>( this );
00131
00132 }
00133
00134
00135
00136 ClusterLHCbIDCnv::~ClusterLHCbIDCnv() {};
00137
00138