diff --git a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx index cf21c217211f20680e7682a9a2e5fddd94d94a7e..e517001ec5b8b773e029bbefbb950028dd48bfdb 100644 --- a/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx +++ b/InnerDetector/InDetCalibAlgs/TRT_CalibAlgs/src/TRT_StrawStatus.cxx @@ -50,16 +50,16 @@ m_accumulateHits(0), m_TRTHelper(0), m_mapSvc("TRT_HWMappingSvc",name), m_DCSSvc("TRT_DCS_ConditionsSvc",name), -m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name), // use this service to retrieve barrel and end-cap straw number later on, as well as DTMROC,.. +m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name), // use this service to retrieve barrel and end-cap straw number later on, as well as DTMROC,.. m_TRTStrawStatusSummaryTool("TRT_StrawStatusSummaryTool", this), m_trt_hole_finder("TRTTrackHoleSearchTool"), m_locR_cut(1.4), m_fileName("TRT_StrawStatusOutput"), m_skipBusyEvents(0), // for cosmics - reject events that are either showers or noise bursts -m_printDetailedInformation(0) // print the information on mapping as well as which straws are declared dead etc. +m_printDetailedInformation(0) // print the information on mapping as well as which straws are declared dead etc. { declareProperty("outputFileName", m_fileName); - declareProperty("skipBusyEvents", m_skipBusyEvents); + declareProperty("skipBusyEvents", m_skipBusyEvents); declareProperty("trt_hole_finder", m_trt_hole_finder); declareProperty("HWMapSvc", m_mapSvc); declareProperty("InDetTRT_DCS_ConditionsSvc",m_DCSSvc); @@ -82,7 +82,7 @@ StatusCode InDet::TRT_StrawStatus::initialize() m_accumulateHits = new ACCHITS_t; assert( (*m_accumulateHits)[0][0].size() == nAllStraws ); clear(); - + // Code entered here will be executed once at program start. // Initialize ReadHandleKey ATH_CHECK(m_eventInfoKey.initialize()); @@ -112,21 +112,21 @@ StatusCode InDet::TRT_StrawStatus::finalize(){ //================ Execution ==================================================== StatusCode InDet::TRT_StrawStatus::execute(){ - + SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey); StatusCode sc = StatusCode::SUCCESS; if (not eventInfo.isValid()) { ATH_MSG_ERROR( "Unable to retrieve Event Info " ); return StatusCode::FAILURE; - } - int runNumber = (int) eventInfo->runNumber(); + } + int runNumber = (int) eventInfo->runNumber(); if (runNumber != m_runNumber) { if (m_nEvents) { reportResults(); clear(); } m_runNumber = runNumber; - } + } int lumiBlock0 =eventInfo->lumiBlock(); SG::ReadHandle<TRT_RDO_Container> rdoContainer(m_rdoContainerKey); - + if (not rdoContainer.isValid()) { ATH_MSG_ERROR( "no TRT_RDO container available " ); return StatusCode::FAILURE; @@ -135,12 +135,12 @@ StatusCode InDet::TRT_StrawStatus::execute(){ if (not trkCollection.isValid()) { ATH_MSG_ERROR( "Could not find Tracks Collection: " << m_tracksName ); return StatusCode::FAILURE; - } - - //================ Event selection - + } + + //================ Event selection + SG::ReadHandle<VxContainer> vxContainer(m_vxContainerKey); - if (not vxContainer.isValid()) { + if (not vxContainer.isValid()) { ATH_MSG_ERROR( "vertex container missing!" ); sc = StatusCode::FAILURE; } else { @@ -148,9 +148,9 @@ StatusCode InDet::TRT_StrawStatus::execute(){ for (VxContainer::const_iterator it = vxContainer->begin() ; it != vxContainer->end() ; ++it ) { if ( (*it)->vxTrackAtVertex()->size() >= 3 ) countVertices++; } - if (countVertices < 1) return StatusCode::FAILURE; + if (countVertices < 1) return StatusCode::FAILURE; } - + if (m_skipBusyEvents) { // cosmic running int countRDOhitsInEvent(0); for (TRT_RDO_Container::const_iterator rdoIt = rdoContainer->begin(); rdoIt != rdoContainer->end(); ++rdoIt) { @@ -164,17 +164,17 @@ StatusCode InDet::TRT_StrawStatus::execute(){ ATH_MSG_INFO( "N RDO hits in event greater than 100000: " << countRDOhitsInEvent << ", exiting" ); return sc; } - + if (trkCollection->size() > 10) { ATH_MSG_INFO( "N tracks greater than 10: " << trkCollection->size() << ", exiting" ); return sc; } } - - //================ End event selection - + + //================ End event selection + //================ Loop over all tracks, accumulate hits on track, also find holes on track - + std::vector<Identifier> holeIdentifiers; std::vector<Identifier> holeIdentifiersWithHits; // holes on straws that have hits, it is just that the hit was not associalted to a track for ( DataVector<Trk::Track>::const_iterator trackIt = trkCollection->begin(); trackIt != trkCollection->end(); trackIt++ ) { @@ -183,120 +183,122 @@ StatusCode InDet::TRT_StrawStatus::execute(){ const Trk::Perigee* perigee = (*trackIt)->perigeeParameters(); if ( not perigee ) { ATH_MSG_ERROR( "Trk::Perigee missing" ); continue; } if ( std::fabs(perigee->pT())/CLHEP::GeV < 1. ) continue; // 1 GeV pT cut - + const DataVector<const Trk::TrackStateOnSurface>* trackStates = (**trackIt).trackStateOnSurfaces(); if ( not trackStates ) { ATH_MSG_ERROR( "Trk::TrackStateOnSurface empty" ); continue; } - - int n_pixel_hits(0), n_sct_hits(0), n_trt_hits(0); // count hits, require minimal number of all hits + + int n_pixel_hits(0), n_sct_hits(0), n_trt_hits(0); // count hits, require minimal number of all hits for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = trackStates->begin(); trackStatesIt != trackStates->end(); trackStatesIt++ ) { if ( *trackStatesIt == 0 ) { ATH_MSG_ERROR( "*trackStatesIt == 0" ); continue; } if ( !((*trackStatesIt)->type(Trk::TrackStateOnSurface::Measurement)) ) continue; // this skips outliers - + if ( dynamic_cast<const InDet::TRT_DriftCircleOnTrack*> ( (*trackStatesIt)->measurementOnTrack() ) ) n_trt_hits++; else if ( dynamic_cast<const InDet::SCT_ClusterOnTrack*> ( (*trackStatesIt)->measurementOnTrack() ) ) n_sct_hits++; else if( dynamic_cast<const InDet::PixelClusterOnTrack*> ( (*trackStatesIt)->measurementOnTrack() ) ) n_pixel_hits++; - } - if (n_pixel_hits<2 || n_sct_hits < 6 || n_trt_hits<15) continue; // end count hits - + } + if (n_pixel_hits<2 || n_sct_hits < 6 || n_trt_hits<15) continue; // end count hits + //=== end select track - + //=== loop over all hits on track, accumulate them - + for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = trackStates->begin(); trackStatesIt != trackStates->end(); trackStatesIt++ ) { - + if ( *trackStatesIt == 0 ) { ATH_MSG_ERROR( "*trackStatesIt == 0" ); continue; } if ( !((*trackStatesIt)->type(Trk::TrackStateOnSurface::Measurement)) ) continue; // this skips outliers const InDet::TRT_DriftCircleOnTrack *driftCircleOnTrack = dynamic_cast<const InDet::TRT_DriftCircleOnTrack *>( (*trackStatesIt)->measurementOnTrack() ); if ( not driftCircleOnTrack ) continue; // not TRT measurement - this way, keep both hits and outliers - + const Trk::TrackStateOnSurface& hit = **trackStatesIt; - - const Trk::TrackParameters* unbiased_track_parameters = m_updator->removeFromState( *(hit.trackParameters()), hit.measurementOnTrack()->localParameters(), hit.measurementOnTrack()->localCovariance()); - + + const Trk::TrackParameters* unbiased_track_parameters = m_updator->removeFromState( *(hit.trackParameters()), + hit.measurementOnTrack()->localParameters(), + hit.measurementOnTrack()->localCovariance()).release(); + double unbiased_locR = unbiased_track_parameters->parameters()[Trk::locR]; if ( fabs(unbiased_locR) > m_locR_cut ) continue; // same cut as the default hole search cut - + const InDet::TRT_DriftCircle *driftCircle = driftCircleOnTrack->prepRawData(); if ( driftCircle == 0 ) { ATH_MSG_ERROR( "driftCircle == 0" ); continue; } - + Identifier id = driftCircle->identify(); int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][1]++; // accumulate hits on track if (driftCircle->highLevel()) (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][3]++; // accumulate hits on track - + } // end trackStatesIt loop - + // add holeIdentifiers - fill vector - + const DataVector<const Trk::TrackStateOnSurface>* holes = m_trt_hole_finder->getHolesOnTrack( *track ); if ( holes==0 ) continue; // no holes found for ( DataVector<const Trk::TrackStateOnSurface>::const_iterator trackStatesIt = holes->begin(); trackStatesIt != holes->end(); trackStatesIt++ ) { - + if ( !(*trackStatesIt)->type( Trk::TrackStateOnSurface::Hole ) ) { ATH_MSG_ERROR( "m_trt_hole_finder returned something that is not a hole" ); continue; } - + const Trk::TrackParameters* track_parameters = (*trackStatesIt)->trackParameters(); if (!track_parameters) { ATH_MSG_WARNING( "m_trt_hole_finder track_parameters missing" ); continue; } - + Identifier id = track_parameters->associatedSurface().associatedDetectorElementIdentifier(); if ( !(m_TRTHelper->is_trt(id)) ) { ATH_MSG_ERROR( "m_trt_hole_finder returned something that is not a TRT hole" ); continue; } - // add se same 1.4 mm locR selection, in case it is not on by default + // add se same 1.4 mm locR selection, in case it is not on by default if ( std::fabs( track_parameters->parameters()[Trk::locR] ) > m_locR_cut ) continue; - + holeIdentifiers.push_back( id ); } // end add holeIdentifiers - - } // end trackIt loop - + + } // end trackIt loop + //================ End loop over all tracks - + //================ Loop over all hits - it includes hits from dead straws that are masked off in drift circle creation - + for (TRT_RDO_Container::const_iterator rdoIt = rdoContainer->begin(); rdoIt != rdoContainer->end(); ++rdoIt) { const InDetRawDataCollection<TRT_RDORawData>* TRTCollection(*rdoIt); if (TRTCollection==0) continue; for (DataVector<TRT_RDORawData>::const_iterator trtIt = TRTCollection->begin(); trtIt != TRTCollection->end(); trtIt++) { Identifier id = (*trtIt)->identify(); int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index - (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][0]++; // accumulate all hits + (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][0]++; // accumulate all hits if ((*trtIt)->highLevel()) (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][2]++; // accumulate TR hits - + if (std::find(holeIdentifiers.begin(), holeIdentifiers.end(), id) != holeIdentifiers.end()) // a hole was found on the same straw, but hits is there - holeIdentifiersWithHits.push_back( id ); - } + holeIdentifiersWithHits.push_back( id ); + } } - - //================ End loop over all hits + + //================ End loop over all hits //================ End loop over all holes, each time also save whether the straw with a hole had a hit - + for (unsigned int i=0; i<holeIdentifiers.size(); i++) { - + Identifier id = holeIdentifiers[i]; int index[6]; myStrawIndex(id, index); // side, layer, phi, straw_layer, straw_within_layer, straw_index - + (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][4]++; - + if (std::find(holeIdentifiersWithHits.begin(), holeIdentifiersWithHits.end(), id) != holeIdentifiersWithHits.end()) (*m_accumulateHits)[(index[0]>0)?0:1][index[2]][index[5]][5]++; } - - //================ End loop over all hits + + //================ End loop over all hits //===== searching for HV lines with voltage < 1490 V if (lumiBlock0 != last_lumiBlock0){ float theValue; int chanNum; - char fileName_mapping[300]; + char fileName_mapping[300]; snprintf(fileName_mapping, 299,"%s.%07d_Voltage_trips.txt", m_fileName.c_str(), m_runNumber); FILE *fmapping = fopen(fileName_mapping, "a"); - //StatusCode + //StatusCode sc = StatusCode::SUCCESS;//for compatibility with Rel 17 - + //===== Loop over all HV lines for (chanNum=1;chanNum<1281;chanNum++){ theValue = 9999.; @@ -329,7 +331,7 @@ void InDet::TRT_StrawStatus::clear() { void InDet::TRT_StrawStatus::reportResults() { ATH_MSG_INFO( "InDet::TRT_StrawStatus::reportResults() for " << m_nEvents << " events." ); - char fileName[300]; + char fileName[300]; snprintf(fileName, 299,"%s.%07d_newFormat.txt", m_fileName.c_str(), m_runNumber); FILE *f = fopen(fileName, "w"); fprintf(f, "%d %d %d %d %d %d %d %d %d \n", 0, 0, 0, 0, 0, 0, 0, 0, m_nEvents); @@ -338,15 +340,15 @@ void InDet::TRT_StrawStatus::reportResults() { if (k>=1642) side *= 2; fprintf(f, "%d %zu %zu", side, j, k); for (int m=0; m<6; m++) fprintf(f, " %d", (*m_accumulateHits)[i][j][k][m]); - fprintf(f, "\n"); + fprintf(f, "\n"); } fclose(f); return; -} +} void InDet::TRT_StrawStatus::printDetailedInformation() { ATH_MSG_INFO( "InDet::TRT_StrawStatus::printDetailedInformation() " ); - char fileName[300]; + char fileName[300]; snprintf(fileName, 299,"%s.%07d_printDetailedInformation.txt", m_fileName.c_str(), m_runNumber); FILE *f = fopen(fileName, "w"); for (std::vector<Identifier>::const_iterator it = m_TRTHelper->straw_layer_begin(); it != m_TRTHelper->straw_layer_end(); it++ ) { @@ -354,37 +356,37 @@ void InDet::TRT_StrawStatus::printDetailedInformation() { Identifier id = m_TRTHelper->straw_id( *it, i); int index[6]; myStrawIndex(id, index); - int chip, HVpad; + int chip, HVpad; m_TRTStrawNeighbourSvc->getChip(id, chip); m_TRTStrawNeighbourSvc->getPad(id, HVpad); if (!m_printStatusCount) { ATH_MSG_INFO( "if the code crashes on the next line, there is a problem with m_TRTStrawStatusSummarySvc not being loaded " ); ATH_MSG_INFO( "in that case, running with reco turned on normally solves the problem, know of no better solution at the moment" ); - ATH_MSG_INFO( "if you do not need the detailed print information, you can also just set printDetailedInformation to 0 to avoid this crash" ); + ATH_MSG_INFO( "if you do not need the detailed print information, you can also just set printDetailedInformation to 0 to avoid this crash" ); m_printStatusCount++; } - int status = m_TRTStrawStatusSummaryTool->get_status( id ); + int status = m_TRTStrawStatusSummaryTool->get_status( id ); int statusTemporary = m_TRTStrawStatusSummaryTool->getStatus( id ); - int statusPermanent = m_TRTStrawStatusSummaryTool->getStatusPermanent( id ); + int statusPermanent = m_TRTStrawStatusSummaryTool->getStatusPermanent( id ); for (int j=0; j<6; j++) fprintf(f, "%d ", index[j]); fprintf(f, "%d %d %d %d %d\n", chip, HVpad, status, statusTemporary, statusPermanent); } - } + } fclose(f); - return; + return; } void InDet::TRT_StrawStatus::myStrawIndex(Identifier id, int *index) { int side = m_TRTHelper->barrel_ec(id); int layerNumber = m_TRTHelper->layer_or_wheel(id); int strawLayerNumber = m_TRTHelper->straw_layer(id); - int strawNumber = m_TRTHelper->straw(id); + int strawNumber = m_TRTHelper->straw(id); int straw(0); - + const int numberOfStraws[74] = { 0, 15, 31, 47, 63, 79, 96, 113, 130, 147, 164, 182, 200, 218, 236, 254, 273, 292, 311, 329, // layer 0, 329 straws, strawlayers 0-18 348, 368, 388, 408, 428, 448, 469, 490, 511, 532, 553, 575, 597, 619, 641, 663, 686, 709, 732, 755, 778, 802, 826, 849, // layer 1, 520 straws, strawLayers 0-23 872, 896, 920, 944, 968, 993, 1018, 1043, 1068, 1093, 1119, 1145, 1171, 1197, 1223, 1250, 1277, 1304, 1331, 1358, 1386, 1414, 1442, 1470, 1498, 1527, 1556, 1585, 1614, 1642 }; // layer 2 - + if (abs(side)==1) { // barrel unique straw number if (layerNumber==1) strawLayerNumber+= 19; else if (layerNumber==2) strawLayerNumber+= 43; @@ -394,13 +396,13 @@ void InDet::TRT_StrawStatus::myStrawIndex(Identifier id, int *index) { if (board<6) { board *= 2; if (strawLayerNumber>7) board++; } else { board += 6; } straw = board * 192 + strawNumber * 8 + strawLayerNumber % 8 ; - straw += 1642; + straw += 1642; } index[0] = side; index[1] = layerNumber; index[2] = m_TRTHelper->phi_module(id); index[3] = strawLayerNumber; index[4] = strawNumber; - index[5] = straw; + index[5] = straw; return; } diff --git a/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx b/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx index ebb9ea397e5adec83640e984a8e1c20481d3d357..1393b373b7f4cfa52bc58404e1bd5e80ac2ebba1 100755 --- a/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx +++ b/InnerDetector/InDetCalibTools/TRT_CalibTools/src/FillAlignTRTHits.cxx @@ -352,7 +352,7 @@ bool FillAlignTRTHits::fill(const Trk::Track* aTrack, TRT::TrackInfo* output, if(HitOnTrackToRemove){ unbiasedTrkParameters = m_updator->removeFromState(*(HitOnTrackToRemove->trackParameters()), HitOnTrackToRemove->measurementOnTrack()->localParameters(), - HitOnTrackToRemove->measurementOnTrack()->localCovariance()); + HitOnTrackToRemove->measurementOnTrack()->localCovariance()).release(); ATH_MSG_DEBUG ("TrackParameters 1: " << *(HitOnTrackToRemove->trackParameters())); } else if (msgLvl(MSG::DEBUG)) { diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx index d8efadd514c5ca4f15052f009ebade8f1d2f1fff..2ebd56902ae9f0a756ea5c7199b9f5097621f221 100644 --- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx +++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalTrackMonTool.cxx @@ -10,8 +10,8 @@ * Heidi Sandaker <Heidi.Sandaker@cern.ch> @n * Arshak Tonoyan <Arshak.Tonyoan@cern.ch> @n * Thomas Burgess <Thomas.Burgess@cern.ch> @n - * Alex Kastanas <Alex.Kastanas@cern.ch> @n - * Gaetano Barone <Gaetano.Barone@cern.ch> @n + * Alex Kastanas <Alex.Kastanas@cern.ch> @n + * Gaetano Barone <Gaetano.Barone@cern.ch> @n * * $Id: InDetGlobalTrackMonTool.cxx,v 1.33 2009-05-14 22:44:19 kastanas Exp $ * @@ -109,7 +109,7 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type, m_pixelID(nullptr), m_holes_eta_phi(nullptr), m_holes_eta_pt(nullptr), - m_holes_phi_pt(nullptr), + m_holes_phi_pt(nullptr), m_holes_eta_phi_n(nullptr), m_holes_hits(nullptr), m_holesvshits(nullptr), @@ -140,11 +140,11 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type, declareProperty("DoHoleSearch",m_DoHoles_Search,"Write hole data?"); declareProperty("DoTide",m_doTide,"Make TIDE plots?"); declareProperty("DoTideResiduals",m_doTideResiduals,"Make TIDE residual plots?"); - declareProperty("HoleSearchTool", m_holes_search_tool,"Tool to search for holes on track"); + declareProperty("HoleSearchTool", m_holes_search_tool,"Tool to search for holes on track"); declareProperty("UpdatorTool" , m_iUpdator); - declareProperty("DoHitMaps", m_doHitMaps,"Produce hit maps?"); - declareProperty("DoForwardTracks", m_doForwardTracks,"Run over forward tracks?"); - declareProperty("DoIBL", m_doIBL,"IBL present?"); + declareProperty("DoHitMaps", m_doHitMaps,"Produce hit maps?"); + declareProperty("DoForwardTracks", m_doForwardTracks,"Run over forward tracks?"); + declareProperty("DoIBL", m_doIBL,"IBL present?"); declareProperty("trackMax",m_trackMax,"Maximum number of tracks in track histograms"); declareProperty("trackBin",m_trackBin,"Number of bins for the track histograms"); declareProperty("ResidualPullCalculatorTool", m_residualPullCalculator); @@ -155,20 +155,20 @@ InDetGlobalTrackMonTool::InDetGlobalTrackMonTool( const std::string & type, StatusCode InDetGlobalTrackMonTool::initialize() { StatusCode sc; - + // If any of the ID helpers are not found then we don't make the hit maps m_trtID = 0; if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) { ATH_MSG_DEBUG("Could not get TRT ID helper"); m_doHitMaps = false; } - + m_sctID = 0; if (detStore()->retrieve(m_sctID, "SCT_ID").isFailure()) { ATH_MSG_DEBUG("Could not get SCT ID helper"); m_doHitMaps = false; } - + m_pixelID = 0; if (detStore()->retrieve(m_pixelID, "PixelID").isFailure()) { ATH_MSG_DEBUG("Could not get Pixel ID helper"); @@ -189,15 +189,15 @@ StatusCode InDetGlobalTrackMonTool::initialize() { } else { if(msgLvl(MSG::INFO)) msg(MSG::INFO) << "Retrieved tool " << m_residualPullCalculator << endmsg; } - + ATH_CHECK( m_iUpdator.retrieve() ); - + ATH_CHECK ( m_trackToVertexIPEstimator.retrieve()); - + m_doIBL = m_IBLParameterSvc->containsIBL(); - + ATH_CHECK( m_baseline_selTool.retrieve() ); ATH_CHECK( m_tight_selTool.retrieve() ); if (m_holes_search_tool.empty() && m_DoHoles_Search) { @@ -219,7 +219,7 @@ StatusCode InDetGlobalTrackMonTool::initialize() { StatusCode InDetGlobalTrackMonTool::bookHistograms() { Interval_t detailsInterval = ( AthenaMonManager::environment() != AthenaMonManager::online ) ? lowStat : run; - + registerManHist( m_Trk_Base, "InDetGlobal/Track", detailsInterval, "nCOMBtrks", "Track multiplicity (baseline tracks)", m_trackBin, 0.5, m_trackMax+0.5, @@ -243,24 +243,24 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_nBinsEta, -m_c_etaRange, m_c_etaRange, m_nBinsPhi, -M_PI, M_PI, "eta", "#phi_{0}" ).ignore(); - + registerManHist( m_Trk_eta_phi_noTRText_ratio, "InDetGlobal/Track", detailsInterval, "Trk_noTRText_eta_phi_ratio","Distribution of eta vs phi for combined tracks with no TRT extension", - 20, -m_c_etaRangeTRT, m_c_etaRangeTRT, + 20, -m_c_etaRangeTRT, m_c_etaRangeTRT, m_nBinsPhi, -M_PI, M_PI, "eta", "#phi_{0}" ).ignore(); - + registerManHist( m_Trk_eta_phi_noBLhit_ratio, "InDetGlobal/Track", detailsInterval, "Trk_noBLhit_eta_phi_ratio","Eta-phi of tracks with no b-layer hit but a hit is expected, ratio to total tracks", - m_nBinsEta, -m_c_etaRange, m_c_etaRange, + m_nBinsEta, -m_c_etaRange, m_c_etaRange, m_nBinsPhi, -M_PI, M_PI, "#eta", "#phi_{0}").ignore(); - + if ( m_doIBL ) { registerManHist( m_Trk_eta_phi_noIBLhit_ratio, "InDetGlobal/Track", detailsInterval, "Trk_noIBLhit_eta_phi_ratio","Eta-phi of tracks with no IBL hit but a hit is expected, ratio to total tracks", - m_nBinsEta, -m_c_etaRange, m_c_etaRange, + m_nBinsEta, -m_c_etaRange, m_c_etaRange, m_nBinsPhi, -M_PI, M_PI, "#eta", "#phi_{0}").ignore(); } @@ -273,20 +273,20 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() 400,-1100,1100, 400,-1100,1100, "x [mm]", "y [mm]" ).ignore(); - + registerManHist( m_ID_hitmap_x_y_eca, "InDetGlobal/Hits", run, "ID_hitmap_x_y_eca","Map of ID hits (ECA) in x vs y (mm)", 400,-1100,1100, 400,-1100,1100, "x [mm]", "y [mm]" ).ignore(); - + registerManHist( m_ID_hitmap_x_y_ecc, "InDetGlobal/Hits", run, "ID_hitmap_x_y_ecc","Map of ID hits (ECC) in x vs y (mm)", 400,-1100,1100, 400,-1100,1100, "x [mm]", "y [mm]" ).ignore(); } - + for (unsigned int i = ( (m_doIBL) ? 0 : 1) ; i < m_trk_hits_eta_phi.size(); i++ ) { registerManHist( m_trk_hits_eta_phi[i], "InDetGlobal/Hits", detailsInterval, @@ -294,13 +294,13 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_nBinsEta, -m_c_etaRange, m_c_etaRange, m_nBinsPhi,-M_PI,M_PI, "#eta", "#phi" ).ignore(); - + registerManHist( m_trk_hits_LB[i], "InDetGlobal/Track", detailsInterval, "trk_n"+m_c_detector_labels[i]+"hits_LB","Average number of " + m_c_detector_labels[i] + " hits by LB", m_c_range_LB,0,m_c_range_LB, "LB #", "Average number of hits in LB").ignore(); } - + for (unsigned int i = 1; i < m_trk_disabled_eta_phi.size(); i++ ) { registerManHist( m_trk_disabled_eta_phi[i], "InDetGlobal/Hits", detailsInterval, @@ -309,7 +309,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_nBinsPhi,-M_PI,M_PI, "#eta", "#phi" ).ignore(); } - + registerManHist( m_trk_shared_pix_eta_phi, "InDetGlobal/Hits", detailsInterval, "Trk_nPixShared_eta_phi","Number of Pixel shared hits per track, eta-phi profile", m_nBinsEta, -m_c_etaRange, m_c_etaRange, @@ -321,7 +321,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_nBinsEta, -m_c_etaRange, m_c_etaRange, m_nBinsPhi,-M_PI,M_PI, "#eta", "#phi" ).ignore(); - + registerManHist( m_trk_jetassoc_d0_reso_dr, "InDetGlobal/Hits", detailsInterval, "Trk_jetassoc_d0_dr", "IP resolution per ghost associated track vs #DeltaR of track and jet", 20, 0, 0.4, "#Delta R", "Fraction" ).ignore(); @@ -410,26 +410,26 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() // Forward Pixel tracks if ( m_doForwardTracks ) - { + { registerManHist( m_Trk_FORW_FA_eta_phi, "InDetGlobal/Track", detailsInterval, "Trk_FORW_FA_eta_phi", "Eta-phi for pixel tracklets in the forward region (positive eta)", - 5, m_c_etaTrackletsMin, m_c_etaTrackletsMax, - m_nBinsPhi, -M_PI, M_PI, + 5, m_c_etaTrackletsMin, m_c_etaTrackletsMax, + m_nBinsPhi, -M_PI, M_PI, "#eta", "#phi_{0}" ).ignore(); - + registerManHist( m_Trk_FORW_FC_eta_phi, "InDetGlobal/Track", detailsInterval, "Trk_FORW_FC_eta_phi", "Eta-phi for pixel tracklets in the forward region (negative eta)", - 5, -m_c_etaTrackletsMax, -m_c_etaTrackletsMin, - m_nBinsPhi, -M_PI, M_PI, + 5, -m_c_etaTrackletsMax, -m_c_etaTrackletsMin, + m_nBinsPhi, -M_PI, M_PI, "#eta", "#phi_{0}" ).ignore(); - + registerManHist( m_Trk_FORW_chi2, "InDetGlobal/Track", detailsInterval, "Trk_FORW_chi2", "#chi^{2}/DoF of reconstructed forward tracklets", 80, -0., 20., "#chi^{2}/DoF").ignore(); - + registerManHist( m_Trk_FORW_qoverp, "InDetGlobal/Track", detailsInterval, - "Trk_FORW_qoverp", "Distribution of qoverp (forward Pixel tracklets)", + "Trk_FORW_qoverp", "Distribution of qoverp (forward Pixel tracklets)", 400, -2.5, 2.5, "Inverse momentum [GeV^{-1}]" ).ignore(); @@ -437,7 +437,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() "Trk_FORW_nPIXhits_FA","Number of Pixel hits per track (Forward tracks FA)", 5, 0.5, 5.5, "# of hits per track" ).ignore(); - + registerManHist( m_Trk_FORW_FC_nPIXhits, "InDetGlobal/Hits", detailsInterval, "Trk_FORW_nPIXhits_FC","Number of Pixel hits per track (Forward tracks FC)", 5, 0.5, 5.5, @@ -454,7 +454,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() "Trk_nTight_LB","Average number of tight tracks per event in LB", m_c_range_LB,0,m_c_range_LB, "LB #", "Average number of tight tracks per event in LB").ignore(); - + if ( m_doIBL ) { registerManHist( m_Trk_noIBLhits_LB, "InDetGlobal/Track", detailsInterval, @@ -466,7 +466,7 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_c_range_LB,0,m_c_range_LB, "LB #", "Fraction of tracks with missing IBL hit per event in LB").ignore(); } - + registerManHist( m_Trk_noBLhits_LB, "InDetGlobal/Track", detailsInterval, "Trk_noBLhits_LB","Average number of tracks with missing b-layer hit per event in LB", m_c_range_LB,0,m_c_range_LB, @@ -492,66 +492,66 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() registerManHist( m_sct_holes, "InDetGlobal/Hits", detailsInterval, "sct_holes", "Distribution of SCT Holes ", 104,-3.5,100.5, - "Number of SCT holes").ignore(); - + "Number of SCT holes").ignore(); + registerManHist( m_trt_holes, "InDetGlobal/Hits", detailsInterval, "trt_holes", "Distribution of TRT Holes ", 104,-3.5,100.5, "Number of TRT holes").ignore(); - + registerManHist( m_pixel_holes, "InDetGlobal/Hits", detailsInterval, "pixel_holes", "Distribution of Pixel Holes ", 104,-3.5,100.5, "Number of Pixel holes").ignore(); - + registerManHist( m_comb_holes, "InDetGlobal/Hits", detailsInterval, "comb_holes", "Distribution of Combined Holes ", 104,-3.5,100.5, "Total number of holes").ignore(); - + registerManHist( m_silicon_vs_trt, "InDetGlobal/Hits", detailsInterval, "silicon_vs_trt", "Silicon vs TRT holes ", 104,-3.5,100.5, 104,-3.5,100.5, "Silicon Combined holes", "TRT holes").ignore(); - + registerManHist( m_sct_vs_pixels, "InDetGlobal/Hits", detailsInterval, "sct_vs_pixels", "SCT vs Pixels holes ", 104,-3.5,100.5, 104,-3.5,100.5, "SCT", "Pixels").ignore(); - + registerManHist( m_holes_quality, "InDetGlobal/Hits", detailsInterval, "holes_quality", "Number of holes/track vs #chi^{2}/ndf", 160,-0.5,15.5, 104,-3.5,100.5, - "#chi^{2}/ndf", "Combined Holes").ignore(); - + "#chi^{2}/ndf", "Combined Holes").ignore(); + registerManHist( m_holes_eta_phi, "InDetGlobal/Hits", detailsInterval, "holes_eta_phi", "Holes Map #eta #phi", m_nBinsEta,-m_c_etaRange,m_c_etaRange, m_nBinsPhi,-M_PI,M_PI, "#eta", "#phi").ignore(); - - + + registerManHist( m_holes_eta_pt, "InDetGlobal/Hits", detailsInterval, "holes_eta_pt", "Holes #eta vs p_{t}", m_nBinsEta,-m_c_etaRange,m_c_etaRange, 30,-0.,30., "#eta", "#p_{t}").ignore(); - + registerManHist( m_holes_phi_pt, "InDetGlobal/Hits", detailsInterval, "holes_phi_pt", "Holes #phi vs p_{t}", m_nBinsPhi,-M_PI,M_PI, 30,-0.,30., "#phi", "#p_{t}").ignore(); - + registerManHist( m_holes_eta_phi_n, "InDetGlobal/Hits", detailsInterval, "holes_eta_phi_n", "Holes Map (Norm) #eta #phi", m_nBinsEta,-m_c_etaRange,m_c_etaRange, m_nBinsPhi,-M_PI,M_PI, "#eta", "#phi").ignore(); - + registerManHist( m_holes_quality_profile, "InDetGlobal/Hits", detailsInterval, "holes_quality_profile", "#chi^{2}/ndf vs Number of holes/track profile", 104,-3.5,100.5, @@ -559,8 +559,8 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_holes_quality_profile->SetErrorOption("S"); m_holes_quality_profile->SetMaximum( 1000 ); m_holes_quality_profile->SetMinimum( 0 ); - - + + registerManHist( m_holes_hits, "InDetGlobal/Hits", detailsInterval, "holes_hits", "Number of holes vs number of hits per track Combined", 101,-0.5,100.5, @@ -568,43 +568,43 @@ StatusCode InDetGlobalTrackMonTool::bookHistograms() m_holes_hits->SetErrorOption("S"); m_holes_hits->SetMaximum( 1000 ); m_holes_hits->SetMinimum( -10 ); - + registerManHist( m_holesvshits, "InDetGlobal/Hits", detailsInterval, "holesvshits","Number of Holes/track vs Number of Hits/track if holes >0 ", 101,-0.5,100.5, 101,-0.5,100.5, "nb. of hits/track", "nb holes/track").ignore(); - + registerManHist( m_holesvshits_ECA, "InDetGlobal/Hits", detailsInterval, "holesvshits_ECA", "Number of Holes/track vs Number of Hits/track if holes >0 EndCap A", 101,-0.5,100.5, - 101,-0.5,100.5, - "nb. of hits/track", "nb holes/track").ignore(); - + 101,-0.5,100.5, + "nb. of hits/track", "nb holes/track").ignore(); + registerManHist( m_holesvshits_ECC, "InDetGlobal/Hits", detailsInterval, "holesvshits_ECC", "Number of Holes/track vs Number of Hits/track if holes >0 EndCap C", 101,-0.5,100.5, 101,-0.5,100.5, "nb. of hits/track", "nb holes/track").ignore(); - + registerManHist( m_holesvshits_BA, "InDetGlobal/Hits", detailsInterval, "holesvshits_BA", "Number of Holes/track vs Number of Hits/track if holes >0 BARREL", 101,-0.5,100.5, 101,-0.5,100.5, "nb. of hits/track", "nb holes/track").ignore(); - + registerManHist( m_HolesMAP_XY, "InDetGlobal/Hits", detailsInterval, "HolesMAP_XY", "Map of ID holes x vs y (mm)", 400,-1100,1100, 400,-1100,1100, "X [mm]", "Y [mm]").ignore(); - + registerManHist( m_HolesMAP_ZR, "InDetGlobal/Hits", detailsInterval, "HolesMAP_ZR", "Map of ID holes z vs r (mm)", 3000,-3100,3100, 1100,0,1100, - "Z [mm]", "R [mm]").ignore(); - + "Z [mm]", "R [mm]").ignore(); + registerManHist( m_HolesMAP_ZX, "InDetGlobal/Hits", detailsInterval, "HolesMAP_ZX", "Map of ID holes z vs x (mm)", 1000,-3100,3100, @@ -622,8 +622,8 @@ StatusCode InDetGlobalTrackMonTool::bookHistogramsRecurrent() } /*---------------------------------------------------------*/ -StatusCode InDetGlobalTrackMonTool::fillHistograms() -{ +StatusCode InDetGlobalTrackMonTool::fillHistograms() +{ SG::ReadHandle<TrackCollection> combined_tracks(m_CombinedTracksName); if ( !combined_tracks.isValid() ) { @@ -636,7 +636,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() int nNoIBL = 0; int nNoBL = 0; int nNoTRText = 0; - + TrackCollection::const_iterator itrack = combined_tracks->begin(); TrackCollection::const_iterator itrack_end = combined_tracks->end(); for ( ; itrack!= itrack_end; ++itrack) @@ -647,30 +647,30 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() ATH_MSG_DEBUG( "NULL track pointer in collection" ); continue; } - + // Skip tracks that are not inside out if ( ( m_dataType == AthenaMonManager::collisions || m_dataType == AthenaMonManager::userDefined ) - && ! ( track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) || + && ! ( track->info().patternRecoInfo( Trk::TrackInfo::SiSPSeededFinder ) || track->info().patternRecoInfo( Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon ) ) ) continue; - + if ( ! m_baseline_selTool->accept(*track) ) continue; - + // Create a new summary or get copy of the cached one std::unique_ptr<const Trk::TrackSummary> summary(m_trkSummaryTool->summary( * track ) ); - + if ( !summary ) { ATH_MSG_DEBUG( "NULL pointer to track summary" ); continue; } - + nBase++; - + FillHits( track, summary ); FillEtaPhi( track , summary ); - + if ( m_doIBL ) { if ( summary->get( Trk::expectInnermostPixelLayerHit ) && !summary->get( Trk::numberOfInnermostPixelLayerHits ) ) @@ -683,7 +683,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() m_Trk_noIBLhits_frac_LB->Fill( m_manager->lumiBlockNumber(), 0 ); } } - + if ( summary->get( ( m_doIBL ) ? Trk::expectNextToInnermostPixelLayerHit : Trk::expectInnermostPixelLayerHit ) && !summary->get( ( m_doIBL ) ? Trk::numberOfNextToInnermostPixelLayerHits : Trk::numberOfInnermostPixelLayerHits ) ) { nNoBL++; @@ -702,36 +702,36 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() { m_Trk_noTRText_frac_LB->Fill(m_manager->lumiBlockNumber(), 0); } - + if ( m_tight_selTool->accept(*track) ) { nTight++; - } - - if ( m_doHitMaps ) + } + + if ( m_doHitMaps ) { FillHitMaps( track ); } - - if ( m_doHolePlots ) + + if ( m_doHolePlots ) { FillHoles( track, summary ); } - + m_Trk_Base->Fill( nBase ); m_Trk_nBase_LB->Fill( m_manager->lumiBlockNumber(), nBase ); m_Trk_nTight_LB->Fill( m_manager->lumiBlockNumber(), nTight ); if ( m_doIBL ) m_Trk_noIBLhits_LB->Fill( m_manager->lumiBlockNumber(), nNoIBL ); - + m_Trk_noBLhits_LB->Fill( m_manager->lumiBlockNumber(), nNoBL ); m_Trk_noTRText_LB->Fill( m_manager->lumiBlockNumber(), nNoTRText ); } - + if ( m_doTide ) FillTIDE(); - + if ( m_doForwardTracks ) { SG::ReadHandle<TrackCollection> forward_tracks(m_ForwardTracksName); @@ -742,7 +742,7 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() ATH_MSG_DEBUG( "No combined tracks in StoreGate " + m_ForwardTracksName.key() ); return StatusCode::SUCCESS; } - + TrackCollection::const_iterator iftrack = forward_tracks->begin(); TrackCollection::const_iterator iftrack_end = forward_tracks->end(); for ( ; iftrack!= iftrack_end; ++iftrack) @@ -753,20 +753,20 @@ StatusCode InDetGlobalTrackMonTool::fillHistograms() ATH_MSG_DEBUG( "NULL track pointer in collection" ); continue; } - + // Create a new summary or get copy of the cached one std::unique_ptr<const Trk::TrackSummary> summary( m_trkSummaryTool->summary( * track ) ); - + if ( !summary ) { ATH_MSG_DEBUG( "NULL pointer to track summary" ); continue; } - + FillForwardTracks( track , summary ); } } - } + } return StatusCode::SUCCESS; } @@ -784,7 +784,7 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq int sctHits = (summary->get(Trk::numberOfSCTHits) >= 0 ? summary->get(Trk::numberOfSCTHits) : 0) + (summary->get(Trk::numberOfSCTDeadSensors) >= 0 ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ); int trtHits = summary->get(Trk::numberOfTRTHits) + summary->get(Trk::numberOfTRTDeadStraws); - + const Trk::Perigee *perigee = track->perigeeParameters(); if ( !perigee ) return; @@ -794,9 +794,9 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq m_trk_hits_eta_phi[0]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], summary->get( Trk::numberOfInnermostPixelLayerHits ) ); m_trk_hits_LB[0]->Fill( m_manager->lumiBlockNumber(), summary->get( Trk::numberOfInnermostPixelLayerHits ) ); } - + m_trk_hits_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], pixHits ); - m_trk_disabled_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], + m_trk_disabled_eta_phi[1]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfPixelDeadSensors) >= 0 ) ? summary->get(Trk::numberOfPixelDeadSensors) : 0 ); m_trk_hits_LB[1]->Fill( m_manager->lumiBlockNumber(), pixHits ); m_trk_shared_pix_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], @@ -805,28 +805,28 @@ void InDetGlobalTrackMonTool::FillHits( const Trk::Track *track, const std::uniq ( summary->get(Trk::numberOfPixelHoles) >= 0 ) ? summary->get(Trk::numberOfPixelHoles) : 0 ); m_trk_split_pix_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfPixelSplitHits) >= 0 ) ? summary->get(Trk::numberOfPixelSplitHits) : 0 ); - + m_trk_hits_eta_phi[2]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],sctHits ); - m_trk_disabled_eta_phi[2]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], + m_trk_disabled_eta_phi[2]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfSCTDeadSensors) >= 0 ) ? summary->get(Trk::numberOfSCTDeadSensors) : 0 ) ; m_trk_hits_LB[2]->Fill( m_manager->lumiBlockNumber(), sctHits ); m_trk_shared_sct_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfSCTSharedHits) >= 0 ) ? summary->get(Trk::numberOfSCTSharedHits) : 0 ); - + m_trk_holes_sct_eta_phi->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfSCTHoles) >= 0 ) ? summary->get(Trk::numberOfSCTHoles) : 0 ); - + m_trk_hits_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0],trtHits ); - m_trk_disabled_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], + m_trk_disabled_eta_phi[3]->Fill( perigee->eta(), perigee->parameters()[Trk::phi0], ( summary->get(Trk::numberOfTRTDeadStraws) >= 0 ) ? summary->get(Trk::numberOfTRTDeadStraws) : 0 ); m_trk_hits_LB[3]->Fill( m_manager->lumiBlockNumber(), trtHits ); -} +} void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::unique_ptr<const Trk::TrackSummary> & summary ) { if ( ! track || ! summary ) return; - + const Trk::Perigee *perigee = track->perigeeParameters(); float eta = perigee->eta(); float phi = perigee->parameters()[Trk::phi0]; @@ -845,7 +845,7 @@ void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::un { m_Trk_eta_phi_noIBLhit_ratio->Fill( eta, phi, 0 ); } - + /// Next-to-innermost if ( summary->get( Trk::expectNextToInnermostPixelLayerHit ) && !summary->get( Trk::numberOfNextToInnermostPixelLayerHits ) ) { @@ -867,14 +867,14 @@ void InDetGlobalTrackMonTool::FillEtaPhi( const Trk::Track *track, const std::un m_Trk_eta_phi_noBLhit_ratio->Fill( eta, phi, 0 ); } } - + // No TRT extension if ( summary->get(Trk::numberOfTRTHits) == 0 ) m_Trk_eta_phi_noTRText_ratio->Fill( eta, phi, 1 ); else m_Trk_eta_phi_noTRText_ratio->Fill( eta, phi, 0 ); } - + m_Trk_eta_phi_Tight->Fill( eta, phi); /// TRACKSEL: Tight @@ -897,12 +897,12 @@ void InDetGlobalTrackMonTool::FillForwardTracks( const Trk::Track *track, const { float eta = perigee->eta(); float phi = perigee->parameters()[Trk::phi0]; - + if ( eta > 0. ) { m_Trk_FORW_FA_eta_phi->Fill( eta, phi ); m_Trk_FORW_FA_nPIXhits->Fill ( summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors) ); - } + } else { m_Trk_FORW_FC_eta_phi->Fill( eta, phi ); @@ -911,11 +911,11 @@ void InDetGlobalTrackMonTool::FillForwardTracks( const Trk::Track *track, const m_Trk_FORW_qoverp->Fill( perigee->parameters()[Trk::qOverP] *1000.0 ); } - + if ( track->fitQuality() && track->fitQuality()->numberDoF() > 0 ) m_Trk_FORW_chi2->Fill(track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF()); - - return; + + return; } void InDetGlobalTrackMonTool::FillTIDE() @@ -927,18 +927,18 @@ void InDetGlobalTrackMonTool::FillTIDE() { if ( (*jetItr)->pt() < 20000. ) continue; - + std::vector<const xAOD::IParticle*> trackVector; if ( !(*jetItr)->getAssociatedObjects<xAOD::IParticle>(xAOD::JetAttribute::GhostTrack, trackVector) ) continue; - + for ( std::vector<const xAOD::IParticle*>::const_iterator trkItr = trackVector.begin(); trkItr != trackVector.end() ; trkItr++ ) { const xAOD::TrackParticle* trackPart = dynamic_cast<const xAOD::TrackParticle*>(*trkItr); if ( !trackPart ) continue; - + uint8_t split; uint8_t shared; uint8_t pix; @@ -964,8 +964,8 @@ void InDetGlobalTrackMonTool::FillTIDE() } if ( foundVertex ) { - std::unique_ptr<const Trk::ImpactParametersAndSigma>myIPandSigma( - m_trackToVertexIPEstimator->estimate(trackPart, + std::unique_ptr<const Trk::ImpactParametersAndSigma>myIPandSigma( + m_trackToVertexIPEstimator->estimate(trackPart, foundVertex )); if ( myIPandSigma ) { @@ -980,47 +980,49 @@ void InDetGlobalTrackMonTool::FillTIDE() m_trk_jetassoc_split_pix_dr->Fill( trackPart->p4().DeltaR( (*jetItr)->p4() ), frac ); m_trk_jetassoc_split_pix_lb->Fill( m_manager->lumiBlockNumber(), frac ); } - + if ( trackPart->summaryValue( shared, xAOD::numberOfPixelSharedHits) ) { float frac = (float)shared / pix; m_trk_jetassoc_shared_pix_dr->Fill( trackPart->p4().DeltaR( (*jetItr)->p4() ), frac ); m_trk_jetassoc_shared_pix_lb->Fill( m_manager->lumiBlockNumber(), frac ); } - + if ( m_doTideResiduals ) { auto track = trackPart->track(); if ( ! track ) continue; - + const DataVector<const Trk::TrackStateOnSurface>* trackStates = track->trackStateOnSurfaces(); if ( trackStates == 0 ) return; - + DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin(); DataVector<const Trk::TrackStateOnSurface>::const_iterator it_end = trackStates->end(); for (;it!=it_end; ++it) { const Trk::TrackStateOnSurface* tsos=(*it); - + if (tsos == 0) continue; - + //SILICON (SCT + Pixel) const InDet::SiClusterOnTrack *clus = dynamic_cast<const InDet::SiClusterOnTrack*>( tsos->measurementOnTrack() ); if ( !clus ) continue; - + const InDet::SiCluster *RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData()); if (!RawDataClus) continue; - + if ( RawDataClus->detectorElement()->isPixel() ) { const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>( tsos->measurementOnTrack() ); - + if (hit && tsos->trackParameters()) { const Trk::TrackParameters* PropagatedTrackParams = tsos->trackParameters()->clone(); - const Trk::TrackParameters* UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams, tsos->measurementOnTrack()->localParameters(), tsos->measurementOnTrack()->localCovariance()); + const Trk::TrackParameters* UnbiasedTrackParams = m_iUpdator->removeFromState(*PropagatedTrackParams, + tsos->measurementOnTrack()->localParameters(), + tsos->measurementOnTrack()->localCovariance()).release(); delete PropagatedTrackParams; if ( !UnbiasedTrackParams ) if(msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "RemoveFromState did not work, using original TrackParameters" << endmsg; - + const Trk::ResidualPull * residualPull = m_residualPullCalculator->residualPull(tsos->measurementOnTrack(), ( UnbiasedTrackParams ) ? UnbiasedTrackParams:tsos->trackParameters(), Trk::ResidualPull::Unbiased); if (residualPull) { { @@ -1071,7 +1073,7 @@ void InDetGlobalTrackMonTool::FillTIDE() ATH_MSG_WARNING( "Unable to get jets, turning TIDE plots off!" ); m_doTide = false; } - + return; } @@ -1079,14 +1081,14 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track ) { const DataVector<const Trk::TrackStateOnSurface>* trackStates = track->trackStateOnSurfaces(); if ( trackStates == 0 ) return; - + DataVector<const Trk::TrackStateOnSurface>::const_iterator it = trackStates->begin(); DataVector<const Trk::TrackStateOnSurface>::const_iterator it_end = trackStates->end(); for (;it!=it_end; ++it) { const Trk::TrackStateOnSurface* trackState=(*it); - + if (trackState == 0) continue; - + //TRT const InDet::TRT_DriftCircleOnTrack *trtcircle = dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(trackState->measurementOnTrack()); if ( trtcircle ) @@ -1106,11 +1108,11 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track ) break; } } - + //SILICON (SCT + Pixel) const InDet::SiClusterOnTrack *clus = dynamic_cast<const InDet::SiClusterOnTrack*>( trackState->measurementOnTrack() ); if ( !clus ) continue; - + const InDet::SiCluster *RawDataClus = dynamic_cast<const InDet::SiCluster*>(clus->prepRawData()); if (!RawDataClus) continue; @@ -1126,7 +1128,7 @@ void InDetGlobalTrackMonTool::FillHitMaps( const Trk::Track *track ) m_ID_hitmap_x_y_eca->Fill( clus->globalPosition()[0], clus->globalPosition()[1] ); break; } - + }else{ switch ( m_pixelID->barrel_ec( RawDataClus->identify() ) ) { case -2: @@ -1150,13 +1152,13 @@ void InDetGlobalTrackMonTool::FillHoles( const Trk::Track * track, const std::un int pixelh = summary->get(Trk::numberOfPixelHoles) >= 0 ? summary->get(Trk::numberOfPixelHoles) : 0; int scth = summary->get(Trk::numberOfSCTHoles) >= 0 ? summary->get(Trk::numberOfSCTHoles) : 0; int trth = summary->get(Trk::numberOfTRTHoles) >= 0 ? summary->get(Trk::numberOfTRTHoles) : 0; - - // Gaetano Added : + + // Gaetano Added : m_pixel_holes->Fill(summary->get(Trk::numberOfPixelHoles)); m_sct_holes->Fill(summary->get(Trk::numberOfSCTHoles)); m_trt_holes->Fill(summary->get(Trk::numberOfTRTHoles)); - - // Filling Combined Holes and Excluding # holes = -1 case Tracks on surface does not exist + + // Filling Combined Holes and Excluding # holes = -1 case Tracks on surface does not exist if (summary->get(Trk::numberOfPixelHoles)>=0) m_comb_holes->Fill(pixelh); @@ -1167,58 +1169,58 @@ void InDetGlobalTrackMonTool::FillHoles( const Trk::Track * track, const std::un m_comb_holes->Fill(trth); m_silicon_vs_trt->Fill(pixelh+scth,trth); - m_sct_vs_pixels->Fill(scth,pixelh); - + m_sct_vs_pixels->Fill(scth,pixelh); + if ( track->fitQuality() && track->fitQuality()->numberDoF() > 0 ){ m_holes_quality->Fill(track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF(),pixelh+scth+trth); m_holes_quality_profile->Fill(scth+trth+pixelh,track->fitQuality()->chiSquared()/track->fitQuality()->numberDoF()); } - - // Filling Number of holes vs number of hits for tracks with at least a hole. + + // Filling Number of holes vs number of hits for tracks with at least a hole. if (scth >0 || trth >0 || pixelh >0) { m_holes_hits->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+trth+pixelh); m_holesvshits->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+trth+pixelh); } // Here The Perigee Parameters of Holes - const Trk::Perigee *perigee = dynamic_cast<const Trk::Perigee *>(track->perigeeParameters()); - + const Trk::Perigee *perigee = dynamic_cast<const Trk::Perigee *>(track->perigeeParameters()); + m_holes_eta_phi_n->Fill( perigee->eta(),perigee->parameters()[Trk::phi],scth+pixelh/(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors))); - + m_holes_eta_phi->Fill( perigee->eta(),perigee->parameters()[Trk::phi]); m_holes_eta_pt->Fill(perigee->eta(),perigee->pT()/1000.0,scth+pixelh); m_holes_phi_pt->Fill(perigee->parameters()[Trk::phi],perigee->pT()/1000.0,scth+pixelh); - - // Filling holes vs hits in eta bins + + // Filling holes vs hits in eta bins if (scth >0 || trth >0 || pixelh >0){ // Filling ECA if (perigee->eta()>=-2.5 && perigee->eta()<=-1.5) { m_holesvshits_ECA->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth); } - + if (perigee->eta()>=-1.5 && perigee->eta()<=1.5) { m_holesvshits_BA->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth); } - - + + if (perigee->eta()>=1.5 && perigee->eta()<=2.5) { m_holesvshits_ECC->Fill(summary->get(Trk::numberOfTRTHits)+summary->get(Trk::numberOfSCTHits) + summary->get(Trk::numberOfSCTDeadSensors)+summary->get(Trk::numberOfPixelHits) + summary->get(Trk::numberOfPixelDeadSensors),scth+pixelh+trth); } } - + if (m_DoHoles_Search) FillHoleMaps(track); - + return; } void InDetGlobalTrackMonTool::FillHoleMaps( const Trk::Track *track ) { std::unique_ptr<const DataVector<const Trk::TrackStateOnSurface> > holesOnTrack( m_holes_search_tool->getHolesOnTrack(*track,track->info().particleHypothesis()) ); - + // loop over holes if (!holesOnTrack) { msg(MSG::WARNING) << "Got no holes on track" << endmsg; - } else { + } else { for (DataVector<const Trk::TrackStateOnSurface>::const_iterator it=holesOnTrack->begin(); it!=holesOnTrack->end(); it++) { @@ -1226,16 +1228,16 @@ void InDetGlobalTrackMonTool::FillHoleMaps( const Trk::Track *track ) msg(MSG::WARNING) << "TrackStateOnSurface from hole search tool == Null" << endmsg; continue; } - // Here The X Y Z of Holes + // Here The X Y Z of Holes const Trk::TrackParameters *clus =(*it)->trackParameters() ; - if (clus){ + if (clus){ m_HolesMAP_XY->Fill(clus->position()[0],clus->position()[1]); m_HolesMAP_ZX->Fill( clus->position()[2], clus->position()[0]); - m_HolesMAP_ZR->Fill(clus->position()[2], sqrt( pow( clus->position()[0], 2) + pow( clus->position()[1], 2) )); - - } - } + m_HolesMAP_ZR->Fill(clus->position()[2], sqrt( pow( clus->position()[0], 2) + pow( clus->position()[1], 2) )); + + } + } } - + return; } diff --git a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx index f43903d7d75f157fd54da24e9af12619ba1d1715..254d93b6be769defa3a7fe7c6482ac5d5398b6df 100755 --- a/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx +++ b/InnerDetector/InDetRecTools/TRT_SeededTrackFinderTool/src/TRT_SeededTrackFinder_ATL.cxx @@ -654,8 +654,8 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack auto per = m_proptool->propagate(*upTP,persurf,Trk::oppositeMomentum,false,m_fieldprop,Trk::nonInteracting); //Propagate if(!per){ if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG)<<"No extrapolated track parameters!"<<endmsg; - delete niTP; - delete upTP; + delete niTP; + delete upTP; continue; } @@ -670,8 +670,8 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack //delete per; if( int(DE.size()) < m_nclusmin){ //Not enough detector elements to satisfy the minimum number of clusters requirement. Stop if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Too few detector elements, not expected" << endmsg; - delete niTP; - delete upTP; + delete niTP; + delete upTP; continue; } @@ -701,13 +701,13 @@ std::list<Trk::Track*> InDet::TRT_SeededTrackFinder_ATL::findTrack if(msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Initial Track Parameters at 1st SP created and scaled from TRT segment, " << endmsg; if(msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE) << (*mesTP) << endmsg; }else{ - delete niTP; - delete upTP; + delete niTP; + delete upTP; continue; } }else{ - delete niTP; - delete upTP; + delete niTP; + delete upTP; continue; } @@ -772,10 +772,10 @@ InDet::TRT_SeededTrackFinder_ATL::getTP(MagField::AtlasFieldCache& fieldCache, c }else{ //Based on the hit information update the track parameters and the error matrix - const Trk::TrackParameters* uTP = 0; - Trk::FitQualityOnSurface* sct_fitChi2 = 0; + const Trk::TrackParameters* uTP = nullptr; + Trk::FitQualityOnSurface* sct_fitChi2 = nullptr; - uTP = m_updatorTool->addToState(*eTP,SP->localParameters(),SP->localCovariance(),sct_fitChi2); + uTP = m_updatorTool->addToState(*eTP,SP->localParameters(),SP->localCovariance(),sct_fitChi2).release(); if(!uTP) { //The updator failed if (sct_fitChi2) { @@ -817,8 +817,8 @@ InDet::TRT_SeededTrackFinder_ATL::getTP(MagField::AtlasFieldCache& fieldCache, c } // Clean up - //delete eTP; - delete uTP; + //delete eTP; + delete uTP; delete sct_fitChi2; } } diff --git a/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx b/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx index 958806144fd4519ddabcf9ed24047ce03bf346f6..d9f86fbdc5d87ce692fd7c0470da5bf41927a8ce 100644 --- a/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx +++ b/Tracking/TrkAlignment/TrkAlignGenTools/src/AlignResidualCalculator.cxx @@ -25,8 +25,8 @@ namespace Trk { //______________________________________________________________ AlignResidualCalculator::AlignResidualCalculator(const std::string& type, const std::string& name, const IInterface* parent) - - : AthAlgTool(type,name,parent) + + : AthAlgTool(type,name,parent) , m_pullCalculator("Trk::ResidualPullCalculator/ResidualPullCalculator") , m_updator("Trk::KalmanUpdator/TrkKalmanUpdator") , m_qOverP{} @@ -35,7 +35,7 @@ namespace Trk { , m_chi2ForMeasType(0) { declareInterface<IAlignResidualCalculator>(this); - + declareProperty("ResidualPullCalculator", m_pullCalculator); declareProperty("ResidualType", m_resType = HitOnly); declareProperty("IncludeScatterers", m_includeScatterers = false ); @@ -51,10 +51,10 @@ namespace Trk { //________________________________________________________________________ StatusCode AlignResidualCalculator::initialize() - { + { // get residual pull calculator if (m_pullCalculator.retrieve().isFailure()) { - msg(MSG::FATAL) << "Could not get " << m_pullCalculator << endmsg; + msg(MSG::FATAL) << "Could not get " << m_pullCalculator << endmsg; return StatusCode::FAILURE; } ATH_MSG_INFO("Retrieved " << m_pullCalculator); @@ -62,7 +62,7 @@ namespace Trk { // get updator if(m_resType==Unbiased) { if (m_updator.retrieve().isFailure()) { - msg(MSG::FATAL) << "Could not get " << m_updator << endmsg; + msg(MSG::FATAL) << "Could not get " << m_updator << endmsg; return StatusCode::FAILURE; } ATH_MSG_INFO("Retrieved " << m_pullCalculator); @@ -78,14 +78,14 @@ namespace Trk { { return StatusCode::SUCCESS; } - + //________________________________________________________________________ double AlignResidualCalculator::setResiduals(AlignTSOSCollection* atsosColl,const Track* track) { bool useNewTrack = (track!=0); return setResiduals(atsosColl->begin(), atsosColl->end(), track, useNewTrack); } - + //________________________________________________________________________ double AlignResidualCalculator::setResiduals(AlignTrack* alignTrack,const Track* track) { @@ -93,11 +93,11 @@ namespace Trk { const Track* newTrack = (useNewTrack) ? track : alignTrack; return setResiduals(alignTrack->firstAtsos(), alignTrack->lastAtsos(), newTrack, useNewTrack); } - + //________________________________________________________________________ double AlignResidualCalculator::setResiduals(AlignTSOSCollection::iterator firstAtsos, AlignTSOSCollection::iterator lastAtsos, - const Track* track, bool newTrack) + const Track* track, bool newTrack) { m_nDoF=0; m_matchedTSOS.clear(); @@ -108,7 +108,7 @@ namespace Trk { m_chi2ForMeasType[i]=0.; //ATH_MSG_DEBUG("in setResiduals with newTrack="<<newTrack); - + if (!track&&newTrack) { ATH_MSG_ERROR("no track!"); return 0.; } int ntsos(0); @@ -125,11 +125,11 @@ namespace Trk { const MaterialEffectsBase* meb = tsos->materialEffectsOnTrack(); const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const MaterialEffectsOnTrack*>(meb); //const ScatteringAngles* scatterer = (meot) ? meot->scatteringAngles() : 0; - + // if scatterer, add scattering parameters //int nScattererDim=0; - if (m_includeScatterers && meb && meot) { - //nScattererDim = (scatterer) ? 2 : 1; + if (m_includeScatterers && meb && meot) { + //nScattererDim = (scatterer) ? 2 : 1; accumulateScattering(tsos); } //ATH_MSG_DEBUG("scattererDim="<<nScattererDim); @@ -142,23 +142,23 @@ namespace Trk { m_chi2ForMeasType[imeasType] += dchi2; ATH_MSG_DEBUG("adding "<<dchi2<<", m_chi2ForMeasType["<<imeasType<<"]="<<m_chi2ForMeasType[imeasType]); } - - return chi2;///(double)m_nDoF; + + return chi2;///(double)m_nDoF; } - + //_______________________________________________________________________ double AlignResidualCalculator::setResidualsOnATSOS(AlignTSOS * atsos, const TrackStateOnSurface * tsos) { // this method does the following: - // 1. gets residuals (measurement and scattering dimensions), - // 2. adds to AlignTSOS, and - // 3. returns contribution to chi2 from this ATSOS - + // 1. gets residuals (measurement and scattering dimensions), + // 2. adds to AlignTSOS, and + // 3. returns contribution to chi2 from this ATSOS + ATH_MSG_DEBUG("in setResidualsOnATSOS"); atsos->clearResiduals(); - + double dchi2(0.); // scattering residual(s) and/or energy loss first @@ -168,13 +168,13 @@ namespace Trk { // when using unbiased residuals including scatterers doesn't make sense if(m_resType == Unbiased) ATH_MSG_WARNING("When using unbiased residuals including scatterers doesn't make sense!"); - + const MaterialEffectsBase* meb = tsos->materialEffectsOnTrack(); const Trk::MaterialEffectsOnTrack* meot = dynamic_cast<const MaterialEffectsOnTrack*>(meb); const ScatteringAngles* scatterer = (meot) ? meot->scatteringAngles() : 0; - + int nscatparam=0; - if (meb && meot) + if (meb && meot) nscatparam = (scatterer) ? 2 : 1; for (int iparam=0;iparam<nscatparam;iparam++) { @@ -200,13 +200,13 @@ namespace Trk { errSq *= errSq; } } - else{ - ATH_MSG_WARNING("scatterer has no TrackParameters!"); + else{ + ATH_MSG_WARNING("scatterer has no TrackParameters!"); } Residual res(HitOnly,Scatterer,ParamDefs(iparam),residual,errSq); - atsos->addResidual(res); - + atsos->addResidual(res); + dchi2 += res.residualNorm()*res.residualNorm(); m_nDoF++; } @@ -227,7 +227,7 @@ namespace Trk { errSq*=errSq; Residual res(HitOnly,EnergyDeposit,ParamDefs(0),residual,errSq); - atsos->addResidual(res); + atsos->addResidual(res); dchi2 += res.residualNorm()*res.residualNorm(); m_nDoF++; } @@ -236,7 +236,7 @@ namespace Trk { // residuals from measurement if (atsos->rio() || atsos->crio()) { - + int nparams = (atsos->measType()==TrackState::Pixel) ? 2 : 1; for (int iparam=0;iparam<nparams;iparam++) { @@ -255,10 +255,10 @@ namespace Trk { if (m_resType == Unbiased) { // Get unbiased state - const Trk::TrackParameters * unbiasedTrackPars = + const Trk::TrackParameters * unbiasedTrackPars = m_updator->removeFromState(*trackPars, mesb->localParameters(), - mesb->localCovariance()); + mesb->localCovariance()).release(); if (unbiasedTrackPars) { trackPars = unbiasedTrackPars; // AlignTSOS desctructor takes care of deleting unbiasedTrackPars @@ -303,11 +303,11 @@ namespace Trk { m_nDoF++; } } - return dchi2; + return dchi2; } //________________________________________________________________________ - void AlignResidualCalculator::accumulateScattering(const TrackStateOnSurface* tsos) + void AlignResidualCalculator::accumulateScattering(const TrackStateOnSurface* tsos) { const MaterialEffectsOnTrack* meot = dynamic_cast<const MaterialEffectsOnTrack*>(tsos->materialEffectsOnTrack()); @@ -322,12 +322,12 @@ namespace Trk { if (!dynamic_cast<const CaloEnergy*>(energyLoss)) { m_previousQOverP = m_qOverP; } - + return; } - + //________________________________________________________________________ - const TrackStateOnSurface* + const TrackStateOnSurface* AlignResidualCalculator::getMatchingTSOS(const AlignTSOS* atsos, const Track* track) const { const TrackStateOnSurface* tsos(0); @@ -341,7 +341,7 @@ namespace Trk { const MeasurementBase* mesb = itTsos->measurementOnTrack(); const RIO_OnTrack* rio = dynamic_cast<const RIO_OnTrack*>(mesb); const CompetingRIOsOnTrack* crio = dynamic_cast<const CompetingRIOsOnTrack*>(mesb); - + if (!rio && crio) { rio = &(crio->rioOnTrack(0)); } @@ -350,7 +350,7 @@ namespace Trk { ATH_MSG_DEBUG("matched TSOS with identifier: "<<rio->identify()); tsos=itTsos; break; - } + } } ATH_MSG_DEBUG("done with measurement"); } @@ -358,7 +358,7 @@ namespace Trk { const Amg::Vector3D origPosition=atsos->trackParameters()->position(); double distance2(1.e27); - + // loop over track and get closest TSOS for (const TrackStateOnSurface* itTsos : *track->trackStateOnSurfaces()) { if (itTsos->type(TrackStateOnSurface::Outlier)) @@ -372,13 +372,13 @@ namespace Trk { distance2=newdist2; tsos=itTsos; } - } + } ATH_MSG_DEBUG("done with scatterer"); - } - if (!tsos) return 0; - const Amg::Vector3D addPosition=tsos->trackParameters()->position(); + } + if (!tsos) return 0; + const Amg::Vector3D addPosition=tsos->trackParameters()->position(); if (std::find(m_matchedTSOS.begin(),m_matchedTSOS.end(),tsos)==m_matchedTSOS.end()) { - m_matchedTSOS.push_back(tsos); + m_matchedTSOS.push_back(tsos); ATH_MSG_DEBUG("added tsos with pos: "<<addPosition); } else { @@ -387,5 +387,5 @@ namespace Trk { } return tsos; } - + } // end namespace diff --git a/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h b/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h index d6e5427c64393436266e3521b6b79251aad6c0e2..44ac2b8bc40eb5f1bbfa8da0dcb3cdc237ff20c1 100755 --- a/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h +++ b/Tracking/TrkTools/TrkMeasurementUpdator_xk/TrkMeasurementUpdator_xk/KalmanUpdator_xk.h @@ -21,11 +21,11 @@ namespace Trk { /** - @class KalmanUpdator_xk - + @class KalmanUpdator_xk + Trk::KalmanUpdator_xk is a set of tools for adding and removing measurements to/from the state vector using xKalman algorithms - @author Igor.Gavrilenko@cern.ch + @author Igor.Gavrilenko@cern.ch */ class LocalParameters ; @@ -34,13 +34,13 @@ namespace Trk { class KalmanUpdator_xk : virtual public IUpdator, virtual public IPatternParametersUpdator, public AthAlgTool - { + { /////////////////////////////////////////////////////////////////// // Public methods: /////////////////////////////////////////////////////////////////// - - public: - + + public: + /////////////////////////////////////////////////////////////////// // Standard Athena tool methods /////////////////////////////////////////////////////////////////// @@ -54,28 +54,28 @@ namespace Trk { // ///////////////////////////////////////////////////////////////// // Main public methods for kalman filter updator tool // ///////////////////////////////////////////////////////////////// - + // ///////////////////////////////////////////////////////////////// // Add and remove without Xi2 calculation // ///////////////////////////////////////////////////////////////// - + //! add without chi2 calculation, PRD-level, EDM track parameters - virtual TrackParameters* addToState + virtual std::unique_ptr<TrackParameters> addToState (const TrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&) const override final; //! add without chi2 calculation, ROT-level, EDM track parameters - virtual TrackParameters* addToState + virtual std::unique_ptr<TrackParameters> addToState (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final; //! add without chi2 calculation, PRD-level, pattern track parameters - virtual bool addToState + virtual bool addToState (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&) const override final; //! add without chi2 calculation, ROT-level, pattern track parameters - virtual bool addToState + virtual bool addToState (PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&, PatternTrackParameters&) const override final; //! add without chi2 calculation, PRD-level, pattern track parameters, specifically 1D - virtual bool addToStateOneDimension + virtual bool addToStateOneDimension (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&) const override final; @@ -83,15 +83,15 @@ namespace Trk { // Remove without Xi2 calculation /////////////////////////////////////////////////////////////////// - virtual TrackParameters* removeFromState + virtual std::unique_ptr<TrackParameters> removeFromState (const TrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&) const override final; - virtual TrackParameters* removeFromState + virtual std::unique_ptr<TrackParameters> removeFromState (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final; - virtual bool removeFromState + virtual bool removeFromState (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&) const override final; - virtual bool removeFromState + virtual bool removeFromState (PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&, PatternTrackParameters&) const override final; @@ -99,23 +99,23 @@ namespace Trk { // Add with Xi2 calculation /////////////////////////////////////////////////////////////////// - virtual TrackParameters* addToState + virtual std::unique_ptr<TrackParameters> addToState (const TrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, FitQualityOnSurface*&) const override final; - virtual TrackParameters* addToState + virtual std::unique_ptr<TrackParameters> addToState (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&, FitQualityOnSurface*&) const override final; - virtual std::pair<AmgVector(5),AmgSymMatrix(5)>* updateParameterDifference - (const AmgVector(5)&,const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&, - const int&,Trk::FitQualityOnSurface*&,bool) const override final; - - virtual bool addToState + virtual std::pair<AmgVector(5),AmgSymMatrix(5)>* updateParameterDifference + (const AmgVector(5)&,const AmgSymMatrix(5)&, const Amg::VectorX&, const Amg::MatrixX&, + const int&,Trk::FitQualityOnSurface*&,bool) const override final; + + virtual bool addToState (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&,double&,int&) const override final; - virtual bool addToState + virtual bool addToState (PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&, PatternTrackParameters&,double&,int&) const override final; - virtual bool addToStateOneDimension + virtual bool addToStateOneDimension (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&,double&,int&) const override final; @@ -123,17 +123,17 @@ namespace Trk { // Remove with Xi2 calculation /////////////////////////////////////////////////////////////////// - virtual TrackParameters* removeFromState + virtual std::unique_ptr<TrackParameters> removeFromState (const TrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, FitQualityOnSurface*&) const override final; - virtual TrackParameters* removeFromState + virtual std::unique_ptr<TrackParameters> removeFromState (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&, FitQualityOnSurface*&) const override final; - virtual bool removeFromState + virtual bool removeFromState (PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&, PatternTrackParameters&,double&,int&) const override final; - virtual bool removeFromState + virtual bool removeFromState (PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&, PatternTrackParameters&,double&,int&) const override; @@ -141,43 +141,43 @@ namespace Trk { // Combine two state with or without Xi2 calculation /////////////////////////////////////////////////////////////////// - virtual TrackParameters* combineStates + virtual std::unique_ptr<TrackParameters> combineStates (const TrackParameters&, const TrackParameters&) const override final; - virtual TrackParameters* combineStates - (const TrackParameters&, const TrackParameters&, + virtual std::unique_ptr<TrackParameters> combineStates + (const TrackParameters&, const TrackParameters&, FitQualityOnSurface*&) const override final; - virtual bool combineStates + virtual bool combineStates (PatternTrackParameters&,PatternTrackParameters&,PatternTrackParameters&) const override final; - virtual bool combineStates + virtual bool combineStates (PatternTrackParameters&,PatternTrackParameters&,PatternTrackParameters&, double&) const override final; /////////////////////////////////////////////////////////////////// // Xi2 calculation /////////////////////////////////////////////////////////////////// - - virtual const FitQualityOnSurface* predictedStateFitQuality + + virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&) const override final; - virtual const FitQualityOnSurface* predictedStateFitQuality + virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final; - virtual const FitQualityOnSurface* fullStateFitQuality + virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&,const Amg::Vector2D&, const Amg::MatrixX&) const override final; - virtual const FitQualityOnSurface* fullStateFitQuality + virtual const FitQualityOnSurface* fullStateFitQuality (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&) const override final; virtual const FitQualityOnSurface* predictedStateFitQuality (const TrackParameters&,const TrackParameters&) const override final; - virtual bool predictedStateFitQuality - (const PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&,int&,double&) + virtual bool predictedStateFitQuality + (const PatternTrackParameters&,const Amg::Vector2D& ,const Amg::MatrixX&,int&,double&) const override final; - virtual bool predictedStateFitQuality - (const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&) + virtual bool predictedStateFitQuality + (const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&) const override final; - virtual bool fullStateFitQuality + virtual bool fullStateFitQuality (const PatternTrackParameters&,const Amg::Vector2D&, const Amg::MatrixX&,int&,double&) const override final; - virtual bool fullStateFitQuality + virtual bool fullStateFitQuality (const PatternTrackParameters&,const LocalParameters&,const Amg::MatrixX&,int&,double&) const override final; virtual bool predictedStateFitQuality @@ -185,13 +185,13 @@ namespace Trk { /////////////////////////////////////////////////////////////////// // let the client tools know how the assumptions on the initial - // precision for non-measured track parameters are configured + // precision for non-measured track parameters are configured /////////////////////////////////////////////////////////////////// - + virtual std::vector<double> initialErrors() const override final; protected: - + /////////////////////////////////////////////////////////////////// // Protected methods /////////////////////////////////////////////////////////////////// @@ -199,12 +199,12 @@ namespace Trk { /////////////////////////////////////////////////////////////////// // Updators /////////////////////////////////////////////////////////////////// - - TrackParameters* update + + std::unique_ptr<TrackParameters> update (const TrackParameters&,const Amg::Vector2D&,const Amg::MatrixX&, FitQualityOnSurface*&,int,bool) const; - TrackParameters* update + std::unique_ptr<TrackParameters> update (const TrackParameters&,const LocalParameters&,const Amg::MatrixX&, FitQualityOnSurface*&,int,bool) const; @@ -223,8 +223,8 @@ namespace Trk { /////////////////////////////////////////////////////////////////// // Xi2 calculation /////////////////////////////////////////////////////////////////// - - bool predictedStateFitQuality + + bool predictedStateFitQuality (const double*,const Amg::Vector2D&,const Amg::MatrixX&,int&,double&) const; bool fullStateFitQuality @@ -233,7 +233,7 @@ namespace Trk { /////////////////////////////////////////////////////////////////// // Converters /////////////////////////////////////////////////////////////////// - + bool trackParametersToUpdator (const TrackParameters&,double*,double*) const; @@ -242,14 +242,14 @@ namespace Trk { bool localParametersToUpdator (const LocalParameters&,const Amg::MatrixX&,int&,int&,double*,double*) const; - - TrackParameters* updatorToTrackParameters - (const TrackParameters&,double*,double*) const; + + std::unique_ptr<TrackParameters> updatorToTrackParameters + (const TrackParameters&,double*,double*) const; /////////////////////////////////////////////////////////////////// // Update no measured track parameters /////////////////////////////////////////////////////////////////// - + bool updateNoMeasuredWithOneDim (double*,double*,double*,double*) const; diff --git a/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx b/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx index abbb52f25c02e5331f647ba5bae69aec426610f0..a66c49a9d559c5598f1fa130e671b915ac997462 100755 --- a/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx +++ b/Tracking/TrkTools/TrkMeasurementUpdator_xk/src/KalmanUpdator_xk.cxx @@ -40,7 +40,7 @@ Trk::KalmanUpdator_xk::KalmanUpdator_xk } /////////////////////////////////////////////////////////////////// -// Destructor +// Destructor /////////////////////////////////////////////////////////////////// Trk::KalmanUpdator_xk::~KalmanUpdator_xk() @@ -58,7 +58,7 @@ StatusCode Trk::KalmanUpdator_xk::initialize() msg(MSG::INFO) << "initialize() successful in " << name() << endmsg; if( m_cov0.size()!=5) { - + m_cov0.erase(m_cov0.begin(),m_cov0.end()); m_cov0.push_back( 10.); m_cov0.push_back( 10.); @@ -81,32 +81,32 @@ StatusCode Trk::KalmanUpdator_xk::finalize() /////////////////////////////////////////////////////////////////// // Add local position together with erro matrix without Xi2 calculation /////////////////////////////////////////////////////////////////// - -Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState + +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E) const { - Trk::FitQualityOnSurface* Q=nullptr; + Trk::FitQualityOnSurface* Q=nullptr; return update(T,P,E,Q, 1,false); } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToState +bool Trk::KalmanUpdator_xk::addToState (Trk::PatternTrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, Trk::PatternTrackParameters& Ta) const { - int n ; + int n ; double x2; return update(T,P,E, 1,false,Ta,x2,n); } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToStateOneDimension +bool Trk::KalmanUpdator_xk::addToStateOneDimension (Trk::PatternTrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -120,24 +120,24 @@ bool Trk::KalmanUpdator_xk::addToStateOneDimension // Remove local position together with erro matrix without Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E) const { - Trk::FitQualityOnSurface* Q=nullptr; + Trk::FitQualityOnSurface* Q=nullptr; return update(T,P,E,Q,-1,false); } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::removeFromState +bool Trk::KalmanUpdator_xk::removeFromState (Trk::PatternTrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, Trk::PatternTrackParameters& Ta) const { - int n ; + int n ; double x2; return update(T,P,E,-1,false,Ta,x2,n); } @@ -146,24 +146,24 @@ bool Trk::KalmanUpdator_xk::removeFromState // Add local parameters together with error matrix without Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState (const Trk::TrackParameters& T, const Trk::LocalParameters& P, const Amg::MatrixX & E) const { - Trk::FitQualityOnSurface* Q=nullptr; + Trk::FitQualityOnSurface* Q=nullptr; return update(T,P,E,Q, 1,false); } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToState +bool Trk::KalmanUpdator_xk::addToState (Trk::PatternTrackParameters& T, const LocalParameters & P, const Amg::MatrixX & E, Trk::PatternTrackParameters& Ta) const { - int n ; + int n ; double x2; return update(T,P,E, 1,false,Ta,x2,n); } @@ -172,24 +172,24 @@ bool Trk::KalmanUpdator_xk::addToState // Remove local parameters together with error matrix without Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState (const Trk::TrackParameters& T, const Trk::LocalParameters& P, const Amg::MatrixX & E) const { - Trk::FitQualityOnSurface* Q=nullptr; + Trk::FitQualityOnSurface* Q=nullptr; return update(T,P,E,Q,-1,false); } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::removeFromState +bool Trk::KalmanUpdator_xk::removeFromState (Trk::PatternTrackParameters& T, const LocalParameters & P, const Amg::MatrixX & E, Trk::PatternTrackParameters& Ta) const { - int n ; + int n ; double x2; return update(T,P,E,-1,false,Ta,x2,n); } @@ -198,7 +198,7 @@ bool Trk::KalmanUpdator_xk::removeFromState // Add local position together with error matrix with Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -209,7 +209,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToState +bool Trk::KalmanUpdator_xk::addToState (Trk::PatternTrackParameters& T , const Amg::Vector2D & P , const Amg::MatrixX & E , @@ -222,7 +222,7 @@ bool Trk::KalmanUpdator_xk::addToState /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToStateOneDimension +bool Trk::KalmanUpdator_xk::addToStateOneDimension (Trk::PatternTrackParameters& T , const Amg::Vector2D & P , const Amg::MatrixX & E , @@ -239,7 +239,7 @@ bool Trk::KalmanUpdator_xk::addToStateOneDimension // Remove local position together with error matrix with Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -250,7 +250,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::removeFromState +bool Trk::KalmanUpdator_xk::removeFromState (Trk::PatternTrackParameters& T , const Amg::Vector2D & P , const Amg::MatrixX & E , @@ -265,7 +265,7 @@ bool Trk::KalmanUpdator_xk::removeFromState // Add local parameters together with error matrix with Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::addToState (const Trk::TrackParameters& T, const Trk::LocalParameters& P, const Amg::MatrixX & E, @@ -278,11 +278,11 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::addToState // Add local parameters together with error matrix with Xi2 calculation /////////////////////////////////////////////////////////////////// -std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterDifference +std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterDifference (const AmgVector(5) & T , - const AmgSymMatrix(5) & Et, - const Amg::VectorX & P , - const Amg::MatrixX & Ep, + const AmgSymMatrix(5) & Et, + const Amg::VectorX & P , + const Amg::MatrixX & Ep, const int & K , Trk::FitQualityOnSurface*& Q , bool X) const @@ -295,7 +295,7 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD double m[5]; double mv[15]; - m [ 0]=P (0 ); + m [ 0]=P (0 ); mv[ 0]=Ep(0,0); if(n>1) { @@ -323,24 +323,24 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD Et(2,0),Et(2,1),Et(2,2), Et(3,0),Et(3,1),Et(3,2),Et(3,3), Et(4,0),Et(4,1),Et(4,2),Et(4,3),Et(4,4)}; - + bool update = false; double x2; if (n==2 && K==3) { update = updateWithTwoDim(1,X,m,mv,p,pv,x2); - if(update && X) Q = new Trk::FitQualityOnSurface(x2,2); + if(update && X) Q = new Trk::FitQualityOnSurface(x2,2); } else if(n==1 && K==1) { update = updateWithOneDim(1,X,m,mv,p,pv,x2); - if(update && X) Q = new Trk::FitQualityOnSurface(x2,1); + if(update && X) Q = new Trk::FitQualityOnSurface(x2,1); } else { update = updateWithAnyDim(1,X,m,mv,p,pv,x2,n,K); - if(update && X) Q = new Trk::FitQualityOnSurface(x2,n); + if(update && X) Q = new Trk::FitQualityOnSurface(x2,n); } if(!update) return nullptr; - testAngles(p,pv); + testAngles(p,pv); AmgVector(5) nT ; nT <<p[0],p[1],p[2],p[3],p[4]; AmgSymMatrix(5) nEt; nEt<< @@ -351,13 +351,13 @@ std::pair<AmgVector(5),AmgSymMatrix(5)>* Trk::KalmanUpdator_xk::updateParameterD pv[10],pv[11],pv[12],pv[13],pv[14]; return new std::pair<AmgVector(5),AmgSymMatrix(5)>(std::make_pair(nT,nEt)); -} +} /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::addToState +bool Trk::KalmanUpdator_xk::addToState (Trk::PatternTrackParameters& T , - const Trk::LocalParameters & P , + const Trk::LocalParameters & P , const Amg::MatrixX & E , Trk::PatternTrackParameters& Ta, double & Q , @@ -370,7 +370,7 @@ bool Trk::KalmanUpdator_xk::addToState // Remove local parameters together with error matrix with Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::removeFromState (const Trk::TrackParameters& T, const Trk::LocalParameters& P, const Amg::MatrixX & E, @@ -381,7 +381,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::removeFromState /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::removeFromState +bool Trk::KalmanUpdator_xk::removeFromState (Trk::PatternTrackParameters& T , const Trk::LocalParameters & P , const Amg::MatrixX & E , @@ -396,7 +396,7 @@ bool Trk::KalmanUpdator_xk::removeFromState // Combine two state without Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::combineStates (const Trk::TrackParameters& T1, const Trk::TrackParameters& T2) const { double M[5]; @@ -416,7 +416,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::combineStates +bool Trk::KalmanUpdator_xk::combineStates (Trk::PatternTrackParameters& T1, Trk::PatternTrackParameters& T2, Trk::PatternTrackParameters& T3) const @@ -449,7 +449,7 @@ bool Trk::KalmanUpdator_xk::combineStates // Combine two state with Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::combineStates (const TrackParameters& T1, const TrackParameters& T2, FitQualityOnSurface*& Q) const { @@ -471,7 +471,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::combineStates /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::combineStates +bool Trk::KalmanUpdator_xk::combineStates (Trk::PatternTrackParameters& T1, Trk::PatternTrackParameters& T2, Trk::PatternTrackParameters& T3, @@ -504,9 +504,9 @@ bool Trk::KalmanUpdator_xk::combineStates /////////////////////////////////////////////////////////////////// // Xi2 of Local position /////////////////////////////////////////////////////////////////// - -const Trk::FitQualityOnSurface* -Trk::KalmanUpdator_xk::predictedStateFitQuality + +const Trk::FitQualityOnSurface* +Trk::KalmanUpdator_xk::predictedStateFitQuality (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E) const @@ -517,14 +517,14 @@ Trk::KalmanUpdator_xk::predictedStateFitQuality double t[5] = {T.parameters()[0],T.parameters()[1], (*v)(0,0),(*v)(1,0),(*v)(1,1)}; - int N; double x2; + int N; double x2; if(predictedStateFitQuality(t,P,E,N,x2)) return new Trk::FitQualityOnSurface(x2,N); return nullptr; } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::predictedStateFitQuality +bool Trk::KalmanUpdator_xk::predictedStateFitQuality (const Trk::PatternTrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -539,14 +539,14 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality double t[5] = {p[0],p[1], cov(0, 0),cov(0, 1),cov(1, 1)}; - return predictedStateFitQuality(t,P,E,N,X2); + return predictedStateFitQuality(t,P,E,N,X2); } /////////////////////////////////////////////////////////////////// // Xi2 of Local parameters /////////////////////////////////////////////////////////////////// -const Trk::FitQualityOnSurface* +const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::predictedStateFitQuality (const Trk::TrackParameters& T, const Trk::LocalParameters& P, @@ -620,8 +620,8 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality /////////////////////////////////////////////////////////////////// // Xi2 of Local position /////////////////////////////////////////////////////////////////// - -const Trk::FitQualityOnSurface* + +const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::fullStateFitQuality (const Trk::TrackParameters& T, const Amg::Vector2D & P, @@ -639,7 +639,7 @@ Trk::KalmanUpdator_xk::fullStateFitQuality /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::fullStateFitQuality +bool Trk::KalmanUpdator_xk::fullStateFitQuality (const Trk::PatternTrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -654,7 +654,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality double t[5] = {p[0],p[1], cov(0, 0),cov(0, 1),cov(1, 1)}; - return fullStateFitQuality(t,P,E,N,X2); + return fullStateFitQuality(t,P,E,N,X2); } /////////////////////////////////////////////////////////////////// @@ -676,7 +676,7 @@ const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::fullStateFitQuality int k; double m[5]; double mv[15]; if(!localParametersToUpdator(P,E,n,k,m,mv)) return nullptr; - + // Xi2 calculation // double r[5]; @@ -684,7 +684,7 @@ const Trk::FitQualityOnSurface* Trk::KalmanUpdator_xk::fullStateFitQuality int ib = m_key[k]; int ie=m_key[k+1]; for(int i=ib; i!=ie; ++i) {w[i-ib] = mv[i-ib]-pv[m_map[i]];} - + bool q=true; if(n!=1) q=invert(n,w,w); else w[0]=1./w[0]; if(q) { @@ -820,7 +820,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality /////////////////////////////////////////////////////////////////// // let the client tools know how the assumptions on the initial -// precision for non-measured track parameters are configured +// precision for non-measured track parameters are configured /////////////////////////////////////////////////////////////////// std::vector<double> Trk::KalmanUpdator_xk::initialErrors() const @@ -840,11 +840,11 @@ std::vector<double> Trk::KalmanUpdator_xk::initialErrors() const /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// -// Add or remove local position together with error matrix +// Add or remove local position together with error matrix // with or witout Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::update +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::update (const Trk::TrackParameters& T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -855,7 +855,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update // Measurement information preparation // double m[2]; - double mv[3]; + double mv[3]; int n = E.rows(); if(n<=0) return nullptr; m [0] = P[0]; mv[0] = E(0,0); @@ -875,38 +875,38 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update double x2; if (n==2) { update = updateWithTwoDim(O,X,m,mv,p,pv,x2); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); } else if(n==1) { update = updateWithOneDim(O,X,m,mv,p,pv,x2); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); } if(update) { testAngles(p,pv); return updatorToTrackParameters(T,p,pv); - } + } return nullptr; } // For no measured track parameters // if(O<0) return nullptr; - + if (n==1) { update = updateNoMeasuredWithOneDim(m,mv,p,pv); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,1); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,1); } else if(n==2) { update = updateNoMeasuredWithTwoDim(m,mv,p,pv); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,2); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,2); } - - if(update) return updatorToTrackParameters(T,p,pv); + + if(update) return updatorToTrackParameters(T,p,pv); return nullptr; } /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::update +bool Trk::KalmanUpdator_xk::update (Trk::PatternTrackParameters& T , const Amg::Vector2D & P , const Amg::MatrixX & E , @@ -919,7 +919,7 @@ bool Trk::KalmanUpdator_xk::update // Measurement information preparation // double m[2]; - double mv[3]; + double mv[3]; N = E.rows(); if(N<=0) return false; m [0] = P[0]; mv[0] = E(0,0); @@ -960,7 +960,7 @@ bool Trk::KalmanUpdator_xk::update /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::updateOneDimension +bool Trk::KalmanUpdator_xk::updateOneDimension (Trk::PatternTrackParameters& T , const Amg::Vector2D & P , const Amg::MatrixX & E , @@ -972,7 +972,7 @@ bool Trk::KalmanUpdator_xk::updateOneDimension // Measurement information preparation // double m[2]; - double mv[3]; + double mv[3]; int N = E.rows(); if(N!=2 ) return false; m [0] = P[0]; m [1] = P[1]; @@ -1012,11 +1012,11 @@ bool Trk::KalmanUpdator_xk::updateOneDimension /////////////////////////////////////////////////////////////////// -// Add or remove local parameters together with error matrix +// Add or remove local parameters together with error matrix // with or witout Xi2 calculation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::update +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::update (const Trk::TrackParameters& T, const Trk::LocalParameters& P, const Amg::MatrixX & E, @@ -1042,15 +1042,15 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update double x2; if (n==2 && k==3) { update = updateWithTwoDim(O,X,m,mv,p,pv,x2); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,2); } else if(n==1 && k==1) { update = updateWithOneDim(O,X,m,mv,p,pv,x2); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,1); } else { update = updateWithAnyDim(O,X,m,mv,p,pv,x2,n,k); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,n); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(x2,n); } if(update) {testAngles(p,pv); return updatorToTrackParameters(T,p,pv);} return nullptr; @@ -1061,15 +1061,15 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update if(O<0) return nullptr; if (n==1 && k==1) { update = updateNoMeasuredWithOneDim(m,mv,p,pv); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,1); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,1); } else if(n==2 && k==3) { update = updateNoMeasuredWithTwoDim(m,mv,p,pv); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,2); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,2); } else { update = updateNoMeasuredWithAnyDim(m,mv,p,pv,k); - if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,n); + if(update && X && !Q) Q = new Trk::FitQualityOnSurface(0.,n); } if(update) return updatorToTrackParameters(T,p,pv); return nullptr; @@ -1077,7 +1077,7 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::update /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::update +bool Trk::KalmanUpdator_xk::update (Trk::PatternTrackParameters& T , const Trk::LocalParameters & P , const Amg::MatrixX & E , @@ -1092,7 +1092,7 @@ bool Trk::KalmanUpdator_xk::update int k; double m[5]; double mv[15]; if(!localParametersToUpdator(P,E,N,k,m,mv)) return false; - + // Conversion track parameters to updator presentation // double p[5]; @@ -1125,8 +1125,8 @@ bool Trk::KalmanUpdator_xk::update /////////////////////////////////////////////////////////////////// // Xi2 of Local position /////////////////////////////////////////////////////////////////// - -bool Trk::KalmanUpdator_xk::predictedStateFitQuality + +bool Trk::KalmanUpdator_xk::predictedStateFitQuality (const double* T, const Amg::Vector2D & P, const Amg::MatrixX & E, @@ -1136,12 +1136,12 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality // Measurement information preparation // double m[2]; - double mv[3]; X2 = 0.; + double mv[3]; X2 = 0.; N = E.rows(); if(N<=0) return false; m [0] = P[0]-T[0]; - mv[0] = E(0,0)+T[2]; + mv[0] = E(0,0)+T[2]; if(N==1) { - + if(mv[0]>0.) X2 = m[0]*m[0]/mv[0]; return true; } @@ -1149,7 +1149,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality m [1] = P[1]-T[1]; mv[1] = E(1,0)+T[3]; mv[2] = E(1,1)+T[4]; - double d = mv[0]*mv[2]-mv[1]*mv[1]; + double d = mv[0]*mv[2]-mv[1]*mv[1]; if(d>0.) X2 = (m[0]*m[0]*mv[2]+m[1]*m[1]*mv[0]-2.*m[0]*m[1]*mv[1])/d; return true; } @@ -1159,7 +1159,7 @@ bool Trk::KalmanUpdator_xk::predictedStateFitQuality /////////////////////////////////////////////////////////////////// // Xi2 of Local position /////////////////////////////////////////////////////////////////// - + bool Trk::KalmanUpdator_xk::fullStateFitQuality (const double* T, const Amg::Vector2D & P, @@ -1170,12 +1170,12 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality // Measurement information preparation // double m[2]; - double mv[3]; X2 = 0.; + double mv[3]; X2 = 0.; N = E.rows(); if(N<=0) return false; m [0] = P[0]-T[0]; - mv[0] = E(0,0)-T[2]; + mv[0] = E(0,0)-T[2]; if(N==1) { - + if(mv[0]>0.) X2 = m[0]*m[0]/mv[0]; return true; } @@ -1183,7 +1183,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality m [1] = P[1]-T[1]; mv[1] = E(1,0)-T[3]; mv[2] = E(1,1)-T[4]; - double d = mv[0]*mv[2]-mv[1]*mv[1]; + double d = mv[0]*mv[2]-mv[1]*mv[1]; if(d>0.) X2 = (m[0]*m[0]*mv[2]+m[1]*m[1]*mv[0]-2.*m[0]*m[1]*mv[1])/d; return true; } @@ -1191,7 +1191,7 @@ bool Trk::KalmanUpdator_xk::fullStateFitQuality } /////////////////////////////////////////////////////////////////// -// Add one dimension information to no measured track parameters +// Add one dimension information to no measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1219,7 +1219,7 @@ bool Trk::KalmanUpdator_xk::updateNoMeasuredWithOneDim } /////////////////////////////////////////////////////////////////// -// Add two dimension information to no measured track parameters +// Add two dimension information to no measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1248,8 +1248,8 @@ bool Trk::KalmanUpdator_xk::updateNoMeasuredWithTwoDim } /////////////////////////////////////////////////////////////////// -// Add any dimension information (>=1 and <=5) to no measured -// track parameters +// Add any dimension information (>=1 and <=5) to no measured +// track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace // K is key word @@ -1260,7 +1260,7 @@ bool Trk::KalmanUpdator_xk::updateNoMeasuredWithAnyDim { int i=0; - int j=0; + int j=0; while(K) {if(K&1) P[i]=M[j++]; K>>=1; ++i;} if(i==0) return false; PV[ 0] = m_cov0[0]; @@ -1285,7 +1285,7 @@ bool Trk::KalmanUpdator_xk::updateNoMeasuredWithAnyDim } /////////////////////////////////////////////////////////////////// -// Add or remove one dimension information to measured track parameters +// Add or remove one dimension information to measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1310,7 +1310,7 @@ bool Trk::KalmanUpdator_xk::updateWithOneDim double k4 = PV[10]*w0; if(O<0) {k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;} - + // New parameters // P[0]+=(k0*r0); @@ -1321,28 +1321,28 @@ bool Trk::KalmanUpdator_xk::updateWithOneDim // New covariance matrix // - if((PV[14]-= (k4*PV[10]))<=0.) return false; + if((PV[14]-= (k4*PV[10]))<=0.) return false; PV[13]-= (k4*PV[ 6]); PV[12]-= (k4*PV[ 3]); PV[11]-= (k4*PV[ 1]); PV[10]-= (k4*PV[ 0]); - if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; - PV[ 8]-= (k3*PV[ 3]); - PV[ 7]-= (k3*PV[ 1]); - PV[ 6]-= (k3*PV[ 0]); - if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; + if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; + PV[ 8]-= (k3*PV[ 3]); + PV[ 7]-= (k3*PV[ 1]); + PV[ 6]-= (k3*PV[ 0]); + if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; PV[ 4]-= (k2*PV[ 1]); PV[ 3]-= (k2*PV[ 0]); - if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; + if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; PV[ 1]-= (k1*PV[ 0]); - if((PV[ 0]-= (k0*PV[ 0]))<=0.) return false; - + if((PV[ 0]-= (k0*PV[ 0]))<=0.) return false; + if(X) xi2 = r0*r0*w0; return true; } /////////////////////////////////////////////////////////////////// -// Add or remove one dimension information to measured track parameters +// Add or remove one dimension information to measured track parameters // and check boundary for second parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace @@ -1368,13 +1368,13 @@ bool Trk::KalmanUpdator_xk::updateWithOneDimWithBoundary double k4 = PV[10]*w0; if(O<0) {k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4;} - + // Boundary check // double P1 = P[1]+k1*r0 ; double dP = P1-M[1] ; - double W = sqrt(MV[2])*1.732051; - + double W = sqrt(MV[2])*1.732051; + if(fabs(dP) <= W) { P[0]+=(k0*r0); @@ -1392,25 +1392,25 @@ bool Trk::KalmanUpdator_xk::updateWithOneDimWithBoundary // New covariance matrix // - if((PV[14]-= (k4*PV[10]))<=0.) return false; + if((PV[14]-= (k4*PV[10]))<=0.) return false; PV[13]-= (k4*PV[ 6]); PV[12]-= (k4*PV[ 3]); PV[11]-= (k4*PV[ 1]); PV[10]-= (k4*PV[ 0]); - if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; - PV[ 8]-= (k3*PV[ 3]); - PV[ 7]-= (k3*PV[ 1]); - PV[ 6]-= (k3*PV[ 0]); - if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; + if((PV[ 9]-= (k3*PV[ 6]))<=0.) return false; + PV[ 8]-= (k3*PV[ 3]); + PV[ 7]-= (k3*PV[ 1]); + PV[ 6]-= (k3*PV[ 0]); + if((PV[ 5]-= (k2*PV[ 3]))<=0.) return false; PV[ 4]-= (k2*PV[ 1]); PV[ 3]-= (k2*PV[ 0]); - if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; + if((PV[ 2]-= (k1*PV[ 1]))<=0.) return false; PV[ 1]-= (k1*PV[ 0]); return (PV[ 0]-= (k0*PV[ 0])) > 0.; } /////////////////////////////////////////////////////////////////// -// Add or remove two dimension information to measured track parameters +// Add or remove two dimension information to measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1434,7 +1434,7 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDim // K matrix with (5x2) size // double k0 = PV[ 0]*w0+PV[ 1]*w1; - double k1 = PV[ 0]*w1+PV[ 1]*w2; + double k1 = PV[ 0]*w1+PV[ 1]*w2; double k2 = PV[ 1]*w0+PV[ 2]*w1; double k3 = PV[ 1]*w1+PV[ 2]*w2; double k4 = PV[ 3]*w0+PV[ 4]*w1; @@ -1445,10 +1445,10 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDim double k9 = PV[10]*w1+PV[11]*w2; if(O<0) { - k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; + k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; k5=-k5; k6=-k6; k7=-k7; k8=-k8; k9=-k9; } - + // New parameters // P[0]+=(k0*r0+k1*r1); @@ -1465,9 +1465,9 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDim PV[11]-= (k8*PV[ 1]+k9*PV[ 2]); PV[10]-= (k8*PV[ 0]+k9*PV[ 1]); if((PV[ 9]-= (k6*PV[ 6]+k7*PV[ 7]))<=0.) return false; - PV[ 8]-= (k6*PV[ 3]+k7*PV[ 4]); - PV[ 7]-= (k6*PV[ 1]+k7*PV[ 2]); - PV[ 6]-= (k6*PV[ 0]+k7*PV[ 1]); + PV[ 8]-= (k6*PV[ 3]+k7*PV[ 4]); + PV[ 7]-= (k6*PV[ 1]+k7*PV[ 2]); + PV[ 6]-= (k6*PV[ 0]+k7*PV[ 1]); if((PV[ 5]-= (k4*PV[ 3]+k5*PV[ 4]))<=0.) return false; PV[ 4]-= (k4*PV[ 1]+k5*PV[ 2]); PV[ 3]-= (k4*PV[ 0]+k5*PV[ 1]); @@ -1475,13 +1475,13 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDim double c1 = (1.-k3)*PV[ 1]-k2*PV[ 0]; if((PV[ 0]-= (k0*PV[ 0]+k1*PV[ 1]))<=0.) return false; PV[ 1] = c1; - + if(X) xi2 = (r0*r0*w0+r1*r1*w2+2.*r0*r1*w1); return true; } /////////////////////////////////////////////////////////////////// -// Add or remove two dimension information to measured track parameters +// Add or remove two dimension information to measured track parameters // without calculation new covariance matrix // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace @@ -1506,7 +1506,7 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDimParameters // K matrix with (5x2) size // double k0 = PV[ 0]*w0+PV[ 1]*w1; - double k1 = PV[ 0]*w1+PV[ 1]*w2; + double k1 = PV[ 0]*w1+PV[ 1]*w2; double k2 = PV[ 1]*w0+PV[ 2]*w1; double k3 = PV[ 1]*w1+PV[ 2]*w2; double k4 = PV[ 3]*w0+PV[ 4]*w1; @@ -1517,10 +1517,10 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDimParameters double k9 = PV[10]*w1+PV[11]*w2; if(O<0) { - k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; + k0=-k0; k1=-k1; k2=-k2; k3=-k3; k4=-k4; k5=-k5; k6=-k6; k7=-k7; k8=-k8; k9=-k9; } - + // New parameters // P[0]+=(k0*r0+k1*r1); @@ -1533,7 +1533,7 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDimParameters } /////////////////////////////////////////////////////////////////// -// Add or remove two dimension information to measured track parameters +// Add or remove two dimension information to measured track parameters // as one dimension and check boundary for second parameter // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace @@ -1557,35 +1557,35 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDimWithBoundary double c = sqrt(c2) ; double s = sc/c ; - // New measurement + // New measurement // double M0 = c*M[0]+s*M[1]; M [ 1] = c*M[1]-s*M[0]; M [ 0] = M0 ; MV[ 0] = V0 ; MV[ 1] = 0. ; - MV[ 2] = V1 ; - + MV[ 2] = V1 ; + // Rotate track parameters and covariance matrix // double P0 = P[0] ; P [ 0] = c*P0 +s*P[1] ; P [ 1] = c*P[1]-s*P0 ; - double B = 2.*sc*PV[ 1] ; + double B = 2.*sc*PV[ 1] ; double PV0 = PV[ 0] ; double PV3 = PV[ 3] ; double PV6 = PV[ 6] ; double PV10= PV[10] ; PV[ 0] = c2*PV0+s2*PV[ 2]+B ; - PV[ 1] = sc*(PV[ 2]-PV0)+PV[ 1]*al; + PV[ 1] = sc*(PV[ 2]-PV0)+PV[ 1]*al; PV[ 2] = s2*PV0+c2*PV[ 2]-B ; PV[ 3] = c*PV3 +s*PV[ 4] ; PV[ 4] = c*PV[ 4]-s*PV3 ; PV[ 6] = c*PV6 +s*PV[ 7] ; PV[ 7] = c*PV[ 7]-s*PV6 ; PV[10] = c*PV10 +s*PV[11] ; - PV[11] = c*PV[11]-s*PV10 ; - + PV[11] = c*PV[11]-s*PV10 ; + if(!updateWithOneDimWithBoundary(O,X,M,MV,P,PV,xi2)) return false; // Back rotation new track parameters and covariance matrix @@ -1595,25 +1595,25 @@ bool Trk::KalmanUpdator_xk::updateWithTwoDimWithBoundary P0 = P[0] ; P [ 0] = c*P0 +s*P[1] ; P [ 1] = c*P[1]-s*P0 ; - B = 2.*sc*PV[ 1] ; + B = 2.*sc*PV[ 1] ; PV0 = PV[ 0] ; PV3 = PV[ 3] ; PV6 = PV[ 6] ; PV10 = PV[10] ; PV[ 0] = c2*PV0+s2*PV[ 2]+B ; - PV[ 1] = sc*(PV[ 2]-PV0)+PV[ 1]*al; + PV[ 1] = sc*(PV[ 2]-PV0)+PV[ 1]*al; PV[ 2] = s2*PV0+c2*PV[ 2]-B ; PV[ 3] = c*PV3 +s*PV[ 4] ; PV[ 4] = c*PV[ 4]-s*PV3 ; PV[ 6] = c*PV6 +s*PV[ 7] ; PV[ 7] = c*PV[ 7]-s*PV6 ; PV[10] = c*PV10 +s*PV[11] ; - PV[11] = c*PV[11]-s*PV10 ; + PV[11] = c*PV[11]-s*PV10 ; return true; } /////////////////////////////////////////////////////////////////// -// Add five dimension information to measured track parameters +// Add five dimension information to measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1624,12 +1624,12 @@ bool Trk::KalmanUpdator_xk::updateWithFiveDim const double pi2 = 2.*M_PI; const double pi = M_PI; - double w[15]={MV[ 0]+PV[ 0],MV[ 1]+PV[ 1],MV[ 2]+PV[ 2], - MV[ 3]+PV[ 3],MV[ 4]+PV[ 4],MV[ 5]+PV[ 5], - MV[ 6]+PV[ 6],MV[ 7]+PV[ 7],MV[ 8]+PV[ 8], - MV[ 9]+PV[ 9],MV[10]+PV[10],MV[11]+PV[11], + double w[15]={MV[ 0]+PV[ 0],MV[ 1]+PV[ 1],MV[ 2]+PV[ 2], + MV[ 3]+PV[ 3],MV[ 4]+PV[ 4],MV[ 5]+PV[ 5], + MV[ 6]+PV[ 6],MV[ 7]+PV[ 7],MV[ 8]+PV[ 8], + MV[ 9]+PV[ 9],MV[10]+PV[10],MV[11]+PV[11], MV[12]+PV[12],MV[13]+PV[13],MV[14]+PV[14]}; - + if(!invert5(w,w)) return false; double k00 =(PV[ 0]*w[ 0]+PV[ 1]*w[ 1]+PV[ 3]*w[ 3])+(PV[ 6]*w[ 6]+PV[10]*w[10]); @@ -1698,17 +1698,17 @@ bool Trk::KalmanUpdator_xk::updateWithFiveDim if((PV[ 0]-=v0 )<=0.) return false; PV[ 1]-=v1 ; if((PV[ 2]-=v2 )<=0.) return false; - PV[ 3]-=v3 ; - PV[ 4]-=v4 ; + PV[ 3]-=v3 ; + PV[ 4]-=v4 ; if((PV[ 5]-=v5 )<=0.) return false; - PV[ 6]-=v6 ; - PV[ 7]-=v7 ; - PV[ 8]-=v8 ; + PV[ 6]-=v6 ; + PV[ 7]-=v7 ; + PV[ 8]-=v8 ; if((PV[ 9]-=v9 )<=0.) return false; - PV[10]-=v10; - PV[11]-=v11; - PV[12]-=v12; - PV[13]-=v13; + PV[10]-=v10; + PV[11]-=v11; + PV[12]-=v12; + PV[13]-=v13; if((PV[14]-=v14)<=0.) return false; if(X) xi2 = Xi2(5,r,w); @@ -1716,7 +1716,7 @@ bool Trk::KalmanUpdator_xk::updateWithFiveDim } /////////////////////////////////////////////////////////////////// -// Add or remove any dimension information to measured track parameters +// Add or remove any dimension information to measured track parameters // M and MV is measuremet together with covariance // P and PV is new track parameters together with covarianace /////////////////////////////////////////////////////////////////// @@ -1732,9 +1732,9 @@ bool Trk::KalmanUpdator_xk::updateWithAnyDim if(O>0) {s= 1.; for(int i=ib; i!=ie; ++i) {w[i-ib] = MV[i-ib]+PV[m_map[i]];}} else {s=-1.; for(int i=ib; i!=ie; ++i) {w[i-ib] = MV[i-ib]-PV[m_map[i]];}} - + if(N==1) w[0] = 1./w[0]; else if(!invert(N,w,w)) return false; - double v[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; + double v[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; for(int i=ib; i!=ie; ++i) {v[m_map[i]] =w[i-ib];} double k00 =((PV[ 0]*v[ 0]+PV[ 1]*v[ 1]+PV[ 3]*v[ 3])+(PV[ 6]*v[ 6]+PV[10]*v[10]))*s; @@ -1799,13 +1799,13 @@ bool Trk::KalmanUpdator_xk::updateWithAnyDim PV[10]-=v10; PV[11]-=v11; PV[12]-=v12; PV[13]-=v13; PV[14]-=v14; if(PV[0]<=0.||PV[2]<=0.||PV[5]<=0.||PV[9]<=0.||PV[14]<=0.) return false; - + if(X) xi2 = Xi2(5,r,v); return true; } /////////////////////////////////////////////////////////////////// -// Transformation track parameters to updator presentation +// Transformation track parameters to updator presentation // true if it is measured track parameters /////////////////////////////////////////////////////////////////// @@ -1823,15 +1823,15 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator if(!v) return false; const AmgSymMatrix(5)& c = *v; - V[ 0] = c(0,0); + V[ 0] = c(0,0); V[ 1] = c(1,0); V[ 2] = c(1,1); V[ 3] = c(2,0); - V[ 4] = c(2,1); + V[ 4] = c(2,1); V[ 5] = c(2,2); - V[ 6] = c(3,0); + V[ 6] = c(3,0); V[ 7] = c(3,1); - V[ 8] = c(3,2); + V[ 8] = c(3,2); V[ 9] = c(3,3); V[10] = c(4,0); V[11] = c(4,1); @@ -1842,7 +1842,7 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator } /////////////////////////////////////////////////////////////////// -// Transformation track parameters to updator presentation +// Transformation track parameters to updator presentation // true if it is measured track parameters /////////////////////////////////////////////////////////////////// @@ -1857,7 +1857,7 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator P[3] = par[3]; P[4] = par[4]; - if(!T.iscovariance()) return false; + if(!T.iscovariance()) return false; const AmgSymMatrix(5) & cov = *T.covariance(); @@ -1881,8 +1881,8 @@ bool Trk::KalmanUpdator_xk::trackParametersToUpdator /////////////////////////////////////////////////////////////////// // Transformation local parameters to updator presentation -// N - dimension of local parameters,K - key word -// P - parameters, V -covariance +// N - dimension of local parameters,K - key word +// P - parameters, V -covariance /////////////////////////////////////////////////////////////////// bool Trk::KalmanUpdator_xk::localParametersToUpdator @@ -1895,7 +1895,7 @@ bool Trk::KalmanUpdator_xk::localParametersToUpdator //const CLHEP::HepVector& H = L; - P[ 0]=L(0); + P[ 0]=L(0); V[ 0]=C(0,0); if(N>1) { @@ -1921,9 +1921,9 @@ bool Trk::KalmanUpdator_xk::localParametersToUpdator // Track parameters production from updator presentation /////////////////////////////////////////////////////////////////// -Trk::TrackParameters* Trk::KalmanUpdator_xk::updatorToTrackParameters +std::unique_ptr<Trk::TrackParameters> Trk::KalmanUpdator_xk::updatorToTrackParameters (const Trk::TrackParameters& T,double* P,double* V) const -{ +{ AmgSymMatrix(5)* e = new AmgSymMatrix(5); (*e)<< @@ -1932,19 +1932,19 @@ Trk::TrackParameters* Trk::KalmanUpdator_xk::updatorToTrackParameters V[ 3],V[ 4],V[ 5],V[ 8],V[12], V[ 6],V[ 7],V[ 8],V[ 9],V[13], V[10],V[11],V[12],V[13],V[14]; - return T.associatedSurface().createTrackParameters(P[0],P[1],P[2],P[3],P[4],e); + return T.associatedSurface().createUniqueTrackParameters(P[0],P[1],P[2],P[3],P[4],e); } /////////////////////////////////////////////////////////////////// -// Inversion of a positive definite symmetric matrix -// with size (2x2), (3x3), (4x4) and (5x5) +// Inversion of a positive definite symmetric matrix +// with size (2x2), (3x3), (4x4) and (5x5) // Input parameters : n - size of matrix -// a - the elements of the lower triangle of -// the matrix to be inverted -// Output parameters : b - inverted matrix +// a - the elements of the lower triangle of +// the matrix to be inverted +// Output parameters : b - inverted matrix /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const +bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const { if(n==2) return invert2(a,b); if(n==3) return invert3(a,b); @@ -1954,19 +1954,19 @@ bool Trk::KalmanUpdator_xk::invert(int n,double* a,double* b) const } /////////////////////////////////////////////////////////////////// -// Inversion of a positive definite symmetric matrix (2x2) -// using Kramer's rule -// Input parameters : a(0/2) - the elements of the lower triangle of -// the matrix to be inverted -// 0 -// 1 2 -// Output parameters : b(0/2) - inverted matrix +// Inversion of a positive definite symmetric matrix (2x2) +// using Kramer's rule +// Input parameters : a(0/2) - the elements of the lower triangle of +// the matrix to be inverted +// 0 +// 1 2 +// Output parameters : b(0/2) - inverted matrix /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const +bool Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const { double d = a[0]*a[2]-a[1]*a[1]; if(d<=0.) return false; d=1./d; - double b0 = a[2]*d; + double b0 = a[2]*d; b[1] =-a[1]*d; b[2] = a[0]*d; b[0] = b0; @@ -1974,17 +1974,17 @@ bool Trk::KalmanUpdator_xk::invert2 (double* a,double* b) const } /////////////////////////////////////////////////////////////////// -// Inversion of a positive definite symmetric matrix (3x3) -// using Kramer's rule -// Input parameters : a(0/5) - the elements of the lower triangle of -// the matrix to be inverted -// 0 -// 1 2 -// 3 4 5 -// Output parameters : b(0/5) - inverted matrix +// Inversion of a positive definite symmetric matrix (3x3) +// using Kramer's rule +// Input parameters : a(0/5) - the elements of the lower triangle of +// the matrix to be inverted +// 0 +// 1 2 +// 3 4 5 +// Output parameters : b(0/5) - inverted matrix /////////////////////////////////////////////////////////////////// -bool Trk::KalmanUpdator_xk::invert3(double* a,double* b) const +bool Trk::KalmanUpdator_xk::invert3(double* a,double* b) const { double b0 = (a[2]*a[5]-a[4]*a[4]); double b1 =-(a[1]*a[5]-a[3]*a[4]); @@ -1992,7 +1992,7 @@ bool Trk::KalmanUpdator_xk::invert3(double* a,double* b) const double b3 = (a[1]*a[4]-a[2]*a[3]); double b4 =-(a[0]*a[4]-a[1]*a[3]); double b5 = (a[0]*a[2]-a[1]*a[1]); - double d = a[0]*b0+a[1]*b1+a[3]*b3; if(d<=0.) return false; + double d = a[0]*b0+a[1]*b1+a[3]*b3; if(d<=0.) return false; b[0] = b0*(d=1./d); b[1] = b1*d; b[2] = b2*d; @@ -2003,15 +2003,15 @@ bool Trk::KalmanUpdator_xk::invert3(double* a,double* b) const } /////////////////////////////////////////////////////////////////// -// Inversion of a positive definite symmetric matrix (4x4) -// using Kramer's rule -// Input parameters : a(0/9) - the elements of the lower triangle of -// the matrix to be inverted -// 0 -// 1 2 -// 3 4 5 -// 6 7 8 9 -// Output parameters : b(0/9) - inverted matrix +// Inversion of a positive definite symmetric matrix (4x4) +// using Kramer's rule +// Input parameters : a(0/9) - the elements of the lower triangle of +// the matrix to be inverted +// 0 +// 1 2 +// 3 4 5 +// 6 7 8 9 +// Output parameters : b(0/9) - inverted matrix /////////////////////////////////////////////////////////////////// bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const @@ -2030,25 +2030,25 @@ bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const double d11 = a[4]*a[8]-a[5]*a[7]; double d12 = a[4]*a[9]-a[8]*a[7]; double d13 = a[5]*a[9]-a[8]*a[8]; - + // Determinant calculation // - double c0 = a[2]*d13-a[4]*d12+a[7]*d11; + double c0 = a[2]*d13-a[4]*d12+a[7]*d11; double c1 = a[1]*d13-a[4]*d10+a[7]*d09; double c2 = a[1]*d12-a[2]*d10+a[7]*d08; double c3 = a[1]*d11-a[2]*d09+a[4]*d08; double det = a[0]*c0-a[1]*c1+a[3]*c2-a[6]*c3; - + if (det <= 0.) return false; det = 1./det; - + b[2] = (a[0]*d13-a[3]*d10+a[6]*d09)*det; b[4] = -(a[0]*d12-a[1]*d10+a[6]*d08)*det; b[5] = (a[0]*d07-a[1]*d05+a[6]*d03)*det; b[7] = (a[0]*d11-a[1]*d09+a[3]*d08)*det; b[8] = -(a[0]*d06-a[1]*d04+a[3]*d03)*det; b[9] = (a[0]*d02-a[1]*d01+a[3]*d00)*det; - b[0] = c0 *det; + b[0] = c0 *det; b[1] = -c1 *det; b[3] = c2 *det; b[6] = -c3 *det; @@ -2056,17 +2056,17 @@ bool Trk::KalmanUpdator_xk::invert4(double* a,double* b) const } /////////////////////////////////////////////////////////////////// -// Inversion of a positive definite symmetric matrix (5x5) -// by a modification of the Gauss-Jordan method -// -// Input parameters : a(0/14) - the elements of the lower triangle of -// the matrix to be inverted -// 0 -// 1 2 -// 3 4 5 -// 6 7 8 9 -// 10 11 12 13 14 -// Output parameters : b(0/14) - inverted matrix +// Inversion of a positive definite symmetric matrix (5x5) +// by a modification of the Gauss-Jordan method +// +// Input parameters : a(0/14) - the elements of the lower triangle of +// the matrix to be inverted +// 0 +// 1 2 +// 3 4 5 +// 6 7 8 9 +// 10 11 12 13 14 +// Output parameters : b(0/14) - inverted matrix /////////////////////////////////////////////////////////////////// bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const @@ -2104,7 +2104,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const b8 = x5+x2*y4; b9 = x1+x2*y5; x1 = 1./b0; - x2 =-b1*x1; + x2 =-b1*x1; x3 =-b3*x1; x4 = b6*x1; x5 = y2*x1; @@ -2119,7 +2119,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const b8 = y5+y2*x4; b9 = y1+y2*x5; y1 = 1./b0; - y2 =-b1*y1; + y2 =-b1*y1; y3 = b3*y1; y4 = b6*y1; y5 = x2*y1; @@ -2133,7 +2133,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const b7 = x4+x2*y3; b8 = x5+x2*y4; b9 = x1+x2*y5; - b[14] = 1./b0; + b[14] = 1./b0; b[10] = b1*b[14]; b[11] = b3*b[14]; b[12] = b6*b[14]; @@ -2152,7 +2152,7 @@ bool Trk::KalmanUpdator_xk::invert5(double* a,double* b) const } /////////////////////////////////////////////////////////////////// -// Xi2 for 2x2, 3x3, 4x4 and 5x5 matrix calculation +// Xi2 for 2x2, 3x3, 4x4 and 5x5 matrix calculation // R - residial and W -weight matrix /////////////////////////////////////////////////////////////////// @@ -2241,27 +2241,27 @@ double Trk::KalmanUpdator_xk::Xi2for5(double* R,double* W) const /////////////////////////////////////////////////////////////////// int Trk::KalmanUpdator_xk::differenceParLoc -(int K,double* L,double* T, double* R) const +(int K,double* L,double* T, double* R) const { const double pi2 = 2.*M_PI; const double pi = M_PI; - + int i = 0; - if(K & 1) {R[i]=L[i]-T[0]; ++i;} + if(K & 1) {R[i]=L[i]-T[0]; ++i;} if(K & 2) {R[i]=L[i]-T[1]; ++i;} if(K & 4) { - R[i]=L[i]-T[2]; + R[i]=L[i]-T[2]; if (R[i] > pi) R[i] = fmod(R[i]+pi,pi2)-pi; else if(R[i] <-pi) R[i] = fmod(R[i]-pi,pi2)+pi; ++i; } if(K & 8) { - R[i]=L[i]-T[3]; + R[i]=L[i]-T[3]; if (R[i] > pi) R[i] = fmod(R[i]+pi,pi2)-pi; else if(R[i] <-pi) R[i] = fmod(R[i]-pi,pi2)+pi; ++i; } - if(K & 16) {R[i]=L[i]-T[4]; ++i;} + if(K & 16) {R[i]=L[i]-T[4]; ++i;} return i; } @@ -2271,20 +2271,20 @@ int Trk::KalmanUpdator_xk::differenceParLoc /////////////////////////////////////////////////////////////////// void Trk::KalmanUpdator_xk::differenceLocPar -(int K,double* L,double* T, double* R) const +(int K,double* L,double* T, double* R) const { const double pi2 = 2.*M_PI; const double pi = M_PI; int i = 0; R[0]=0.; if(K & 1) R[0]=L[i++]-T[0]; - R[1]=0.; if(K & 2) R[1]=L[i++]-T[1]; + R[1]=0.; if(K & 2) R[1]=L[i++]-T[1]; R[2]=0.; if(K & 4) { - R[2]=L[i++]-T[2]; + R[2]=L[i++]-T[2]; if (R[2] > pi) R[2] = fmod(R[2]+pi,pi2)-pi; else if(R[2] <-pi) R[2] = fmod(R[2]-pi,pi2)+pi; } R[3]=0.; if(K & 8){ - R[3]=L[i++]-T[3]; + R[3]=L[i++]-T[3]; if (R[3] > pi) R[3] = fmod(R[3]+pi,pi2)-pi; else if(R[3] <-pi) R[3] = fmod(R[3]-pi,pi2)+pi; } @@ -2302,7 +2302,7 @@ void Trk::KalmanUpdator_xk::mapKeyProduction() for(int K=1; K!= 32; ++K) { unsigned int I[5]={0,0,0,0,0}; - unsigned int m=0; + unsigned int m=0; for(int i=0; i!=5; ++i) {if((K>>i)&1) I[i]=1;} for(int i=0; i!=5; ++i) { @@ -2314,7 +2314,7 @@ void Trk::KalmanUpdator_xk::mapKeyProduction() ///////////////////////////////////////////////////////////////////////////////// // Test angles inside boundaries -// Azimuthal angle p[2] shoud be > -pi and < +pi +// Azimuthal angle p[2] shoud be > -pi and < +pi // Polar angle p[3] shoud be > 0 and < +pi ///////////////////////////////////////////////////////////////////////////////// @@ -2327,14 +2327,14 @@ void Trk::KalmanUpdator_xk::testAngles(double* p,double* v) const // if (p[3] > pi) p[3] = fmod(p[3]+pi,pi2)-pi; else if(p[3] <-pi) p[3] = fmod(p[3]-pi,pi2)+pi; - + if (p[3] < 0.) { p[ 3] = -p[ 3]; p[ 2]+= pi; - v[ 6] = -v[ 6]; - v[ 7] = -v[ 7]; - v[ 8] = -v[ 8]; + v[ 6] = -v[ 6]; + v[ 7] = -v[ 7]; + v[ 8] = -v[ 8]; v[13] = -v[13]; }