00001
00008
00009
00010 #include "ValBase.h"
00011
00012 #include "GaudiKernel/MsgStream.h"
00013 #include "GaudiKernel/IDataProviderSvc.h"
00014 #include "GaudiKernel/SmartDataPtr.h"
00015 #include "GaudiKernel/AlgTool.h"
00016 #include "GaudiKernel/ToolFactory.h"
00017 #include "GaudiKernel/IToolSvc.h"
00018 #include "GaudiKernel/GaudiException.h"
00019
00020 #include "Event/TopLevel/EventModel.h"
00021 #include "Event/TopLevel/Event.h"
00022
00023 #include "TkrUtil/ITkrQueryClustersTool.h"
00024
00025 namespace {
00026 const int _nLayers = 18;
00027 }
00028
00035 class TkrHitValsTool : public ValBase
00036 {
00037 public:
00038
00039 TkrHitValsTool( const std::string& type,
00040 const std::string& name,
00041 const IInterface* parent);
00042
00043 virtual ~TkrHitValsTool() { }
00044
00045 StatusCode initialize();
00046
00047 StatusCode calculate();
00048
00049 private:
00050
00051
00052 int Tkr_Cnv_Lyr_Hits;
00053 int Tkr_numHitsOnTracks;
00054 int Tkr_numGhosts;
00055 int Tkr_numToT255s;
00056 int Tkr_numGhostsOnTracks;
00057 int Tkr_numToT255sOnTracks;
00058 int Tkr_numFlaggedTrackHits;
00059 int Tkr_numWideClusters;
00060 int Tkr_Max_controller_hits;
00061 int Tkr_Fst_Cnv_Lyr;
00062 int Tkr_NCnv_Lyrs_Hit;
00063
00064 int Tkr_HitsPerLyr[_nLayers];
00065
00066 ITkrQueryClustersTool* m_clusTool;
00067 };
00068
00069
00070 static ToolFactory<TkrHitValsTool> s_factory;
00071 const IToolFactory& TkrHitValsToolFactory = s_factory;
00072
00073
00074 TkrHitValsTool::TkrHitValsTool(const std::string& type,
00075 const std::string& name,
00076 const IInterface* parent)
00077 : ValBase( type, name, parent )
00078 {
00079
00080 declareInterface<IValsTool>(this);
00081 }
00082
00115 StatusCode TkrHitValsTool::initialize()
00116 {
00117 StatusCode sc = StatusCode::SUCCESS;
00118
00119 MsgStream log(msgSvc(), name());
00120
00121 if( ValBase::initialize().isFailure()) return StatusCode::FAILURE;
00122
00123
00124
00125 if( serviceLocator() ) {
00126
00127 } else {
00128 return StatusCode::FAILURE;
00129 }
00130
00131 if ((sc = toolSvc()->retrieveTool("TkrQueryClustersTool", m_clusTool)).isFailure())
00132 {
00133 throw GaudiException("Service [TkrQueryClustersTool] not found", name(), sc);
00134 }
00135
00136
00137
00138 addItem("TkrNumHits", &Tkr_Cnv_Lyr_Hits);
00139 addItem("TkrNumHitsOnTracks", &Tkr_numHitsOnTracks);
00140 addItem("TkrFirstLayer", &Tkr_Fst_Cnv_Lyr);
00141 addItem("TkrNumLayersHit", &Tkr_NCnv_Lyrs_Hit);
00142 addItem("TkrNumGhosts", &Tkr_numGhosts);
00143 addItem("TkrNumToT255s", &Tkr_numToT255s);
00144 addItem("TkrNumGhostsOnTracks", &Tkr_numGhostsOnTracks);
00145 addItem("TkrNumToT255sOnTracks", &Tkr_numToT255sOnTracks);
00146 addItem("TkrNumFlaggedTrackHits", &Tkr_numFlaggedTrackHits);
00147 addItem("TkrNumWideClusters", &Tkr_numWideClusters);
00148
00149 int i;
00150 char buffer[20];
00151 for(i=0;i<_nLayers;++i) {
00152
00153 sprintf(buffer, "TkrHitsInLyr%02i",i);
00154 addItem(buffer, &Tkr_HitsPerLyr[i]);
00155 }
00156
00157 zeroVals();
00158
00159 return sc;
00160 }
00161
00162
00163 StatusCode TkrHitValsTool::calculate()
00164 {
00165 StatusCode sc = StatusCode::SUCCESS;
00166
00167
00168 SmartDataPtr<Event::TkrClusterCol>
00169 pClusters(m_pEventSvc,EventModel::TkrRecon::TkrClusterCol);
00170
00171
00172 if (!pClusters) return sc;
00173
00174 int layerIdx;
00175 for(layerIdx=0;layerIdx<_nLayers;++layerIdx) {
00176 int hitCount =
00177 m_clusTool->getClusters(idents::TkrId::eMeasureX,layerIdx).size()
00178 + m_clusTool->getClusters(idents::TkrId::eMeasureY,layerIdx).size();
00179
00180 if (hitCount > 0)
00181 {
00182 Tkr_Fst_Cnv_Lyr = layerIdx;
00183 Tkr_NCnv_Lyrs_Hit += 1;
00184 }
00185
00186 Tkr_HitsPerLyr[layerIdx] = hitCount;
00187 }
00188
00189 Tkr_Cnv_Lyr_Hits = pClusters->size();
00190
00191 Event::TkrClusterColConItr iter = pClusters->begin();
00192 for(; iter!=pClusters->end();++iter) {
00193 bool isGhost;
00194 bool is255;
00195 Event::TkrCluster* clust = *iter;
00196 if(isGhost=clust->isSet(Event::TkrCluster::maskGHOST)) Tkr_numGhosts++;
00197 if(is255=clust->isSet(Event::TkrCluster::mask255)) Tkr_numToT255s++;
00198 bool onTrack = clust->hitFlagged();
00199 if(onTrack) {
00200 Tkr_numHitsOnTracks++;
00201 if(isGhost) Tkr_numGhostsOnTracks++;
00202 if(is255) Tkr_numToT255sOnTracks++;
00203 if(clust->isSet(Event::TkrCluster::maskSAMETRACK)) {
00204 Tkr_numFlaggedTrackHits++;
00205 }
00206 if(clust->size()>4) Tkr_numWideClusters++;
00207 }
00208 }
00209 return sc;
00210 }