diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..936c8faf89fa07a3ff97ccd463e091b5ee08e2f2 --- /dev/null +++ b/InnerDetector/InDetValidation/InDetTrackValidation/CMakeLists.txt @@ -0,0 +1,60 @@ +################################################################################ +# Package: InDetTrackValidation +################################################################################ + +# Declare the package name: +atlas_subdir( InDetTrackValidation ) + +# Declare the package's dependencies: +atlas_depends_on_subdirs( PUBLIC + Control/AthenaBaseComps + Control/AthenaKernel + GaudiKernel + InnerDetector/InDetRawEvent/InDetRawData + InnerDetector/InDetRecEvent/InDetPrepRawData + InnerDetector/InDetSimEvent + Tracking/TrkEvent/TrkParameters + Tracking/TrkEvent/TrkTrack + Tracking/TrkValidation/TrkValInterfaces + PRIVATE + Control/DataModel + DetectorDescription/AtlasDetDescr + DetectorDescription/GeoModel/GeoModelInterfaces + Event/EventPrimitives + Event/xAOD/xAODEventInfo + Generators/GeneratorObjects + InnerDetector/InDetConditions/InDetBeamSpotService + InnerDetector/InDetConditions/InDetConditionsSummaryService + InnerDetector/InDetConditions/PixelConditionsServices + InnerDetector/InDetConditions/SCT_ConditionsServices + InnerDetector/InDetConditions/TRT_ConditionsData + InnerDetector/InDetConditions/TRT_ConditionsServices + InnerDetector/InDetDetDescr/InDetIdentifier + InnerDetector/InDetDetDescr/InDetReadoutGeometry + InnerDetector/InDetDetDescr/PixelGeoModel + InnerDetector/InDetDetDescr/SCT_Cabling + InnerDetector/InDetRecEvent/InDetRIO_OnTrack + InnerDetector/InDetValidation/InDetTrackSplitterTool + Tracking/TrkDetDescr/TrkSurfaces + Tracking/TrkEvent/TrkEventPrimitives + Tracking/TrkEvent/TrkMeasurementBase + Tracking/TrkEvent/TrkPrepRawData + Tracking/TrkEvent/TrkRIO_OnTrack + Tracking/TrkEvent/TrkSpacePoint + Tracking/TrkTools/TrkToolInterfaces ) + +# External dependencies: +find_package( CLHEP ) +find_package( HepMC ) +find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) + +# Component(s) in the package: +atlas_add_component( InDetTrackValidation + src/*.cxx + src/components/*.cxx + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${HEPMC_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${HEPMC_LIBRARIES} AthenaBaseComps AthenaKernel GaudiKernel InDetRawData InDetPrepRawData InDetSimEvent TrkParameters TrkTrack TrkValInterfaces DataModel AtlasDetDescr EventPrimitives xAODEventInfo GeneratorObjects TRT_ConditionsData TRT_ConditionsServicesLib InDetIdentifier InDetReadoutGeometry SCT_CablingLib InDetRIO_OnTrack TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkPrepRawData TrkRIO_OnTrack TrkSpacePoint TrkToolInterfaces ) + +# Install files from the package: +atlas_install_headers( InDetTrackValidation ) + diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h b/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h index 8fedf15b0755807f670f0aa4637732099a6ab916..80db021a5a7ae031f37c255d757dbb38be17c799 100644 --- a/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h +++ b/InnerDetector/InDetValidation/InDetTrackValidation/InDetTrackValidation/InDetSplittedTracksCreator.h @@ -48,6 +48,10 @@ private: bool m_makeTRTStandaloneTracks; /** flag for using si only tracks **/ bool m_makeSiOnlyTracks; + /** flag to accept the upper segment **/ + bool m_takeUpperSegment; + /** flag to accept the lower segment **/ + bool m_takeLowerSegment; /** instances of IInDet */ ToolHandle< InDet::IInDetTrackSplitterTool > m_trackSplitterTool; diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx b/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx index 46debcec28a1e72079892a2d24f6c5fef5b471b6..b4946f6cc1b1e501e0385e6e4d264957e7705c3e 100644 --- a/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx +++ b/InnerDetector/InDetValidation/InDetTrackValidation/src/InDetSplittedTracksCreator.cxx @@ -24,6 +24,8 @@ m_trackSplitterTool() declareProperty("OutputTrackCollection" , m_OutputTrackCol); declareProperty("TrackSplitterTool" , m_trackSplitterTool); declareProperty("makeSiOnlyTracks" , m_makeSiOnlyTracks=false); + declareProperty("takeUpperSegment" , m_takeUpperSegment=true); + declareProperty("takeLowerSegment" , m_takeLowerSegment=true); } InDet::InDetSplittedTracksCreator::~InDetSplittedTracksCreator() {} @@ -46,27 +48,30 @@ StatusCode InDet::InDetSplittedTracksCreator::initialize(){ // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * StatusCode InDet::InDetSplittedTracksCreator::execute() { ATH_MSG_DEBUG("InDetSplittedTracksCreator execute()"); + ATH_MSG_DEBUG("Input Track Collection: " << m_TrackCol); //return if no input collection is found const TrackCollection* trks = 0; - if (evtStore()->contains<TrackCollection>(m_TrackCol) && + if ((not evtStore()->contains<TrackCollection>(m_TrackCol)) or (evtStore()->retrieve(trks,m_TrackCol)).isFailure()){ - ATH_MSG_ERROR(" Could not retrieve the track collection" <<m_TrackCol); + ATH_MSG_ERROR(" Could not retrieve the track collection " <<m_TrackCol); return StatusCode::SUCCESS; } TrackCollection* splittedTracks=0; - if (evtStore()->contains<TrackCollection>(m_OutputTrackCol) && - (evtStore()->retrieve(splittedTracks,m_OutputTrackCol)).isFailure()){ - } else { + if ((not evtStore()->contains<TrackCollection>(m_OutputTrackCol)) or + (evtStore()->retrieve(splittedTracks,m_OutputTrackCol)).isFailure()) { splittedTracks = new TrackCollection; + } else { + ATH_MSG_WARNING("Output split track collection already exists: " << m_OutputTrackCol << ". Quitting."); + return StatusCode::SUCCESS; } //loop over tracks and split them in upper and lower part TrackCollection::const_iterator it = trks->begin(); TrackCollection::const_iterator itE = trks->end(); for (; it != itE; ++it){ - + ATH_MSG_VERBOSE("Splitting Track"); std::pair<Trk::Track*, Trk::Track*> splitTracks = std::pair<Trk::Track*, Trk::Track*> (0,0); if (m_makeSiOnlyTracks){ splitTracks = m_trackSplitterTool->splitInUpperLowerTrack(**it,true); //use Si only hits @@ -76,14 +81,20 @@ StatusCode InDet::InDetSplittedTracksCreator::execute() { } //only save them if both track fits succeeded if(splitTracks.first && splitTracks.second){ - splittedTracks->push_back( splitTracks.first ); - splittedTracks->push_back( splitTracks.second ); + if (m_takeUpperSegment) { + ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** Accept upper segment "); + splittedTracks->push_back( splitTracks.first ); + } + if (m_takeLowerSegment) { + ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** Accept lower segment "); + splittedTracks->push_back( splitTracks.second ); + } } else { delete splitTracks.first; delete splitTracks.second; } } - ATH_MSG_DEBUG("SplittedTracks->size() " <<splittedTracks->size()); + ATH_MSG_DEBUG("** InDetSplittedTracksCreator ** SplittedTracks->size() " << splittedTracks->size() << " stored in " << m_OutputTrackCol ); if(evtStore()->record(splittedTracks, m_OutputTrackCol,false).isFailure() ){ ATH_MSG_ERROR("Could not save the "<<m_OutputTrackCol); diff --git a/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx b/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx index 32fa5d831908825b8f7fbaa79fe906b0175787e7..3cb849485a169f27ac498f83f9ad9eaa5d086cfc 100755 --- a/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx +++ b/InnerDetector/InDetValidation/InDetTrackValidation/src/PixelClusterValidationNtupleWriter.cxx @@ -49,12 +49,10 @@ using CLHEP::GeV; InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(const std::string& name, ISvcLocator* pSvcLocator): AthAlgorithm(name,pSvcLocator), m_riocontainer(0), - m_geoModel(0), m_hitcontainer(0), m_rdocontainer(0), // m_inputTrackCollection("Tracks") //m_fullNtupleName("/NTUPLES/FILE1/FitterValidation/TrackStatistics"), - m_IBLAbsent(true), mjo_riocontainername("PixelClusters"), mjo_hitcontainername("PixelHits"), mjo_rdocontainername("PixelRDOs"), @@ -66,6 +64,8 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co mjo_NN(false), mjo_ToT(false), mjo_onTrack(false), + m_IBLAbsent(true), + m_IBLParameterSvc("IBLParameterSvc",name), m_pixelCalib("PixelOfflineCalibSvc",name), m_iBeamCondSvc("BeamCondSvc",name), m_ntupleFileName("/NTUPLES/FILE1"), @@ -75,6 +75,7 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co m_pixelid(0), m_nt(0), m_nnt(0), + m_geoModel(0), m_PixClusLocX(0), m_PixClusLocY(0), m_PixClusLocXcentroid(0), @@ -177,8 +178,7 @@ InDet::PixelClusterValidationNtupleWriter::PixelClusterValidationNtupleWriter(co m_NN_position_idX(0), m_NN_position_idY(0), m_NN_theta(0), - m_NN_phi(0), - m_IBLParameterSvc("IBLParameterSvc",name) + m_NN_phi(0) { declareProperty("PixelClusterContainer", mjo_riocontainername); declareProperty("SiHitCollection", mjo_hitcontainername);