Main Page | Namespace List | Class Hierarchy | Compound List | File List | Compound Members | File Members | Related Pages

TkrHitValsTool.cxx

Go to the documentation of this file.
00001 
00008 // Include files
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     //TkrClusters Tuple Items
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 // Static factory for instantiation of algtool objects
00070 static ToolFactory<TkrHitValsTool> s_factory;
00071 const IToolFactory& TkrHitValsToolFactory = s_factory;
00072 
00073 // Standard Constructor
00074 TkrHitValsTool::TkrHitValsTool(const std::string& type, 
00075                                const std::string& name, 
00076                                const IInterface* parent)
00077                                : ValBase( type, name, parent )
00078 {    
00079     // Declare additional interface
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     // get the services
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     // load up the map
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         // vars of form TkrHitsInLyrNN, NN = (00,17), for _nLayers==18
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     // Recover Track associated info. 
00168     SmartDataPtr<Event::TkrClusterCol>   
00169         pClusters(m_pEventSvc,EventModel::TkrRecon::TkrClusterCol);
00170     //Make sure we have valid cluster data
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 }

Generated on Mon Dec 1 20:09:05 2008 by doxygen 1.3.3