Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • gpietrzy/Rec
  • nbehling/Rec
  • rrabadan/Rec
  • hyeung/Rec
  • smokhnen/Rec
  • padeken/Rec
  • peilian/Rec
  • lambda-hse/Rec
  • mstahl/Rec
  • kklimasz/Rec
  • mimazure/Rec
  • aszabels/Rec
  • wkrzemie/Rec
  • aalvesju/Rec
  • fkeizer/Rec
  • valassi/Rec
  • raaij/Rec
  • sstahl/Rec
  • jonrob/Rec
  • dcampora/Rec
  • graven/Rec
  • lhcb/Rec
22 results
Show changes
Commits on Source (36)
Showing
with 221 additions and 222 deletions
......@@ -156,7 +156,7 @@ void CaloAlignmentNtp::operator()(const Vertices& verts, const ODIN& odin,
if( m_counterStat->isQuiet()) counter("2-selected protos")+=1;
// 3: Validate track
const auto track = proto->track();
auto track = proto->track();
if( !acceptTrack( track )) continue;
if( m_counterStat->isQuiet()) counter("3-selected tracks")+=1;
......@@ -294,9 +294,9 @@ void CaloAlignmentNtp::operator()(const Vertices& verts, const ODIN& odin,
double bStCY=0;
if( hasBrem ){
auto bState = (LHCb::State*) track->stateAt(LHCb::State::Location::BegRich1);
auto bState = track->stateAt(LHCb::State::Location::BegRich1);
if( bState == nullptr ){
bState = track->states()[0];
bState = &track->firstState();
debug() << track->states();
Warning("BegRich1 state does not exists - used first state", StatusCode::SUCCESS).ignore();
}
......
......@@ -194,7 +194,7 @@ void CaloPi0Ntp::operator()(const ODIN& odin, const L0& l0, const Hypos& hypos,
ntp->column("Nvertices", nVert);
// #SpdMult
ntp->column("spdMult", nSpd);
ok = ntp->write();
ok = ntp->write().isSuccess();
}
if( !isPi0 ) continue;
// histograms for tuning
......
......@@ -304,10 +304,10 @@ Calo::CaloTrackTool::state
const auto& states = track.states() ;
// loop in reverse order: for calo should be a bit more efficient
auto found = std::find_if( states.rbegin(), states.rend(),
[&](const LHCb::State* s)
{ return s->checkLocation(loc); } );
[&](const LHCb::State& s)
{ return s.checkLocation(loc); } );
//
return found != states.rend() ? *found : nullptr ; // RETURN
return found != states.rend() ? &(*found) : nullptr ; // RETURN
}
// ============================================================================
......
// ============================================================================
// Include files
// ============================================================================
// STL
// STL
// ============================================================================
#include <cmath>
#include <algorithm>
......@@ -15,12 +15,12 @@
#include "CaloExtraDigits.h"
// ============================================================================
/** @file CaloExtraDigits.cpp
*
*
* Implementation file for class : CaloExtraDigits
* @see CaloExtraDigits
*
* @see CaloExtraDigits
*
* @author Vanya Belyaev Ivan.Belyaev@itep.ru
* @date 01/04/2002
* @date 01/04/2002
*/
// ============================================================================
DECLARE_COMPONENT( CaloExtraDigits )
......@@ -29,38 +29,38 @@ CaloExtraDigits::CaloExtraDigits
( const std::string& type ,
const std::string& name ,
const IInterface* parent )
: GaudiTool ( type, name , parent )
: GaudiTool ( type, name , parent )
{
//
declareInterface<ICaloHypoTool> (this);
//
if ( std::string::npos != name.find ( "Prs" ) )
{ m_toDet.value().push_back ( "Prs" ) ; }
if ( std::string::npos != name.find ( "Spd" ) )
if ( std::string::npos != name.find ( "Spd" ) )
{ m_toDet.value().push_back ( "Spd" ) ; }
if ( std::string::npos != name.find ( "Hcal" ) )
if ( std::string::npos != name.find ( "Hcal" ) )
{ m_toDet.value().push_back ( "Hcal" ) ; }
if ( std::string::npos != name.find ( "Ecal" ) )
{ m_toDet.value().push_back ( "Ecal" ) ; }
if ( std::string::npos != name.find ( "Ecal" ) )
{ m_toDet.value().push_back ( "Ecal" ) ; }
}
// ============================================================================
StatusCode CaloExtraDigits::initialize ()
StatusCode CaloExtraDigits::initialize ()
{
// initilaize the base class
// initilaize the base class
StatusCode sc = GaudiTool::initialize ();
if( sc.isFailure() )
{ return Error ( "Could not initialize the base class GaudiTool!", sc ) ; }
if( sc.isFailure() )
{ return Error ( "Could not initialize the base class GaudiTool!", sc ) ; }
//
if ( m_toDet.empty() )
{ return Error ( "List of 'ExtraDigitsFrom' is empty!" ) ; }
if ( m_toDet.empty() )
{ return Error ( "List of 'ExtraDigitsFrom' is empty!" ) ; }
//
for ( std::vector<std::string>::iterator idet = m_toDet.begin();
for ( std::vector<std::string>::iterator idet = m_toDet.begin();
idet!=m_toDet.end();idet++)
{
m_toCalo[*idet]=tool<ICaloHypo2Calo>("CaloHypo2Calo", "CaloHypo2" + *idet , this );
m_toCalo[*idet]->setCalos(m_det,*idet);
}
//
//
counterStat = tool<ICounterLevel>("CounterLevel");
return StatusCode::SUCCESS ;
}
......@@ -69,26 +69,26 @@ StatusCode CaloExtraDigits::process ( LHCb::CaloHypo* hypo ) const
{ return (*this) ( hypo ); }
// ============================================================================
StatusCode CaloExtraDigits::operator() ( LHCb::CaloHypo* hypo ) const
{
if ( 0 == hypo ) { return Error("CaloHypo* points to NULL!" , 200 ) ; }
{
if ( 0 == hypo ) { return Error("CaloHypo* points to NULL!" , StatusCode{200} ) ; }
//
for ( std::map<std::string,ICaloHypo2Calo*>::const_iterator
for ( std::map<std::string,ICaloHypo2Calo*>::const_iterator
idet = m_toCalo.begin(); idet!=m_toCalo.end();idet++)
{
ICaloHypo2Calo* tool = idet->second ;
const std::string& toCalo = idet->first ;
unsigned int count = 0 ;
const std::vector<LHCb::CaloDigit*>& digits = tool->digits ( *hypo, toCalo );
for ( std::vector<LHCb::CaloDigit*>::const_iterator id = digits.begin() ;
for ( std::vector<LHCb::CaloDigit*>::const_iterator id = digits.begin() ;
id != digits.end(); id++)
{
hypo->addToDigits( *id );
++count;
}
//
if (UNLIKELY( msgLevel(MSG::DEBUG) ) )debug() << "Adding " << count << " digits from "<< *idet << endmsg;
if (UNLIKELY( msgLevel(MSG::DEBUG) ) )debug() << "Adding " << count << " digits from "<< *idet << endmsg;
//
if(counterStat->isVerbose() )counter ( toCalo ) += count ;
}
return StatusCode::SUCCESS ;
return StatusCode::SUCCESS ;
}
......@@ -13,7 +13,6 @@
#include "CaloInterfaces/ICaloClusterization.h"
#include "CaloDAQ/ICaloDataProvider.h"
#include "CaloDAQ/ICaloEnergyFromRaw.h"
// forward declarations
class DeCalorimeter;
......
......@@ -33,7 +33,7 @@ StatusCode CLTool::initialize() {
//check if tool has to be initialized
if (std::any_of( m_rangeNmuons.begin(), m_rangeNmuons.end(),
[](double x) { return x == -1.;} )) {
m_init.setCode(500);
m_init = StatusCode{500};
// return Error("CLTOOL: NOT INITIALIZED!",m_init);
return sc;
}
......@@ -47,7 +47,7 @@ StatusCode CLTool::initialize() {
m_mombinsCenter[m_nrange-1]=m_lbinCenter;
if (m_signal.size()%m_nrange!=0){
m_init.setCode(501);
m_init = StatusCode{501};
// return Error( "CLTOOL: INPUT VALUES, WRONG SIZE PER MOM BIN FOR MUONS",m_init );
return sc;
}
......@@ -69,7 +69,7 @@ StatusCode CLTool::initialize() {
// check min momentum and initialize
if (m_range[0]!=m_rangeNmuons[0])
{
m_init.setCode(502);
m_init = StatusCode{502};
// return Error( "CLTOOL: MIN MOM NOT THE SAME FOR MUONS AND NOT MUONS!", m_init);
return sc;
}
......@@ -88,7 +88,7 @@ StatusCode CLTool::initialize() {
}
if (m_bkg.size()%m_nrangeNmuons!=0){
m_init.setCode(503);
m_init = StatusCode{503};
// m_init.setChecked();
// return m_init;
// return Error( "CLTOOL: INPUT VALUES, WRONG SIZE PER MOMENTUM BIN FOR NON MUONS", m_init);
......@@ -100,7 +100,7 @@ StatusCode CLTool::initialize() {
//check number of elements per momentum bin is the same for signal and bkg
if (m_nvals!=nvalsNmuons){
m_init.setCode(504);
m_init = StatusCode{504};
// m_init.setChecked();
// return m_init;
// return Error( "CLTOOL: DIFFERENT SIZE FOR MUONS AND NON MUONS FOR CL", m_init);
......@@ -120,7 +120,7 @@ StatusCode CLTool::initialize() {
StatusCode stc2=getClValues(sb::bkg);
if (stc1.isFailure() || stc2.isFailure()) {
m_init.setCode(505);
m_init = StatusCode{505};
// return Error("CLTOOL: UNIFORMED FUNCTIONS FOR SIGNAL,BKG FAIL!",m_init);
return sc;
}
......@@ -256,11 +256,11 @@ StatusCode CLTool::cl(const double value, double& cls, double& clb, double& clr,
StatusCode sc = StatusCode::SUCCESS;
if (m_init.isFailure()) {
sc.setCode(501);
sc = StatusCode{501};
return Error("CLTool: TOOL NOT INITIALIZED",sc);
}
if (value<=0.0) {
sc.setCode(502);
sc = StatusCode{502};
return Error("CLTool: NOT A VALID VALUE FOR QUANTITY", sc);
}
......@@ -268,7 +268,7 @@ StatusCode CLTool::cl(const double value, double& cls, double& clb, double& clr,
int p_r;
StatusCode sc1=findMomRange(mom,p_r,sb::sig);
if (sc1.isFailure()) {
sc.setCode(503);
sc = StatusCode{503};
if ( msgLevel(MSG::DEBUG)) debug()<<"NOT VALID RANGE OF P SIGNAL"<<endmsg;
return sc;
}
......@@ -282,7 +282,7 @@ StatusCode CLTool::cl(const double value, double& cls, double& clb, double& clr,
int p_r_nmuons;
StatusCode sc2=findMomRange(mom,p_r_nmuons,sb::bkg);
if (sc2.isFailure()) {
sc.setCode(504);
sc = StatusCode{504};
if ( msgLevel(MSG::DEBUG)) debug()<<"NOT VALID RANGE OF P BKG"<<endmsg;
return sc;
}
......
......@@ -88,14 +88,14 @@ StatusCode Chi2MuIDTool::isGoodSeed(const LHCb::Track& seed)
if (seed.p()<m_PreSelMomentum)
{
if ( msgLevel(MSG::DEBUG)) debug() << "Track mom below momentum threshold of "<<m_PreSelMomentum<<endmsg;
sc.setCode(101); return sc;
sc = StatusCode{101}; return sc;
}
//track not in acceptance (standard definition)
if (!(isTrackInAcceptance(seed)))
{
if (msgLevel(MSG::DEBUG) ) debug()<< "Track not in MuonChambers acceptance"<<endmsg;
sc.setCode(102); return sc;
sc = StatusCode{102}; return sc;
}
return sc;
}
......@@ -113,7 +113,7 @@ StatusCode Chi2MuIDTool::muonCandidate(const LHCb::Track& seed,
if (ids_init.empty()) {
if ( !exist<SmartMuonMeasProvider>("Rec/Muon/SmartMuonMeasProvider") ) {
sc.setCode(201);
sc = StatusCode{201};
return Error("SmartMuonMeasProvider not in TES, please load",sc);
}
// access muon hits info from TES
......@@ -194,13 +194,13 @@ StatusCode Chi2MuIDTool::muonCandidate(const LHCb::Track& seed,
if (sc.isFailure())
{
if (msgLevel(MSG::DEBUG) ) debug()<< "muonCandidate: fit failed"<<endmsg;
sc.setCode(203);
sc = StatusCode{203};
return sc;
}
else{
if (msgLevel(MSG::DEBUG) ) debug()<< "muonCandidate: myquality="<<myquality<<endmsg;
if (myquality>=m_chi2cut) {
sc.setCode(203);
sc = StatusCode{203};
return sc;
}
......@@ -220,13 +220,13 @@ StatusCode Chi2MuIDTool::muonQuality(LHCb::Track& muTrack, double& Quality)
Warning("muonQuality:: MUTRACK WITH MORE THAN ONE SEED STATE ON IT",StatusCode::SUCCESS).ignore();
else if (muTrack.states().size()<1)
{
sc.setCode(301);
sc = StatusCode{301};
return Error("muonQuality:: MUTRACK WITHOUT ANY SEED STATE ON IT",sc);
}
if (muTrack.lhcbIDs().empty())
{
sc.setCode(302);
sc = StatusCode{302};
return Error("muonQuality:: NO LHCbIDs ON TRACK!",sc);
}
......@@ -243,7 +243,7 @@ StatusCode Chi2MuIDTool::muonQuality(LHCb::Track& muTrack, double& Quality)
}
if (sc2.isFailure()) {
sc.setCode(303);
sc = StatusCode{303};
return Error("WRONG FIT PERFORMED",sc);
}
......@@ -413,25 +413,24 @@ StatusCode Chi2MuIDTool::makeStates(const LHCb::Track& seed) {
StatusCode sc = StatusCode::SUCCESS;
const std::vector<LHCb::State*> & muStates = seed.states();
if (muStates.size()==0) {
sc.setCode(200);
if (seed.states().size()==0) {
sc = StatusCode{200};
return Error("MAKE STATES ERROR: NO AVAILABLE STATES IN SEED");
}
LHCb::State* muState = (LHCb::State*)&(seed.closestState(9450.));
const LHCb::State& muState = seed.closestState(9450.);
if (msgLevel(MSG::DEBUG) ) {
debug()<<"muState"<<endmsg;
debug()<<muState<<endmsg;
debug()<<"x="<<muState->x()<<",y="<<muState->y()<<",z="<<muState->z()<<endmsg;
debug()<<&muState<<endmsg;
debug()<<"x="<<muState.x()<<",y="<<muState.y()<<",z="<<muState.z()<<endmsg;
}
//to be refined: even if the pointer is the same, it may happen that is is
//pointing really to different states (from the previous event),
//so the extrapolation would not be the correct. To avoid that, extrapolate
//to one station and check if the momentum coincides
if (m_mySeedState==muState) {
if (m_mySeedState==&muState) {
if (msgLevel(MSG::DEBUG) ) debug()<<
"m_mySeedState and muState same pointer. Checking first state"<<endmsg;
......@@ -439,7 +438,7 @@ StatusCode Chi2MuIDTool::makeStates(const LHCb::Track& seed) {
int i=0;
bool cond=true;
for (auto z : m_zstations) {
LHCb::State muStateC(*muState);
LHCb::State muStateC(muState);
StatusCode code= m_extrapolator->propagate(muStateC,z);
if (code.isSuccess()) {
if (muStateC.p() != m_states[i].p()) cond=false;
......@@ -454,20 +453,20 @@ StatusCode Chi2MuIDTool::makeStates(const LHCb::Track& seed) {
if (cond) return sc;
}
else m_mySeedState=muState;
else m_mySeedState=&muState;
m_states.clear();
if (msgLevel(MSG::DEBUG) ) debug()<< " seed state = "<< *muState << endmsg;
if (msgLevel(MSG::DEBUG) ) debug()<< " seed state = "<< muState << endmsg;
//propagate state to each station
//for control purpose, also check is extrapolation was succesful for every station
int ist=0;
for (auto z : m_zstations ) {
//const LHCb::State& muState= seed.firstState();
// LHCb::State* muStateC = muState.clone();
// LHCb::State* muStateC = new LHCb::State(muState);
LHCb::State muStateC(*muState);
LHCb::State muStateC(muState);
//if (msgLevel(MSG::DEBUG) ) debug()<< " seed first state clone"<< muStateC;
StatusCode code= m_extrapolator->propagate(muStateC,z);
if (msgLevel(MSG::DEBUG) ) debug() << " makeState: state at " << z << " = " << muStateC << endmsg;
......@@ -551,7 +550,7 @@ StatusCode Chi2MuIDTool::search(const LHCb::Track& seed, LHCb::Track& muTrack) {
StatusCode sc1 = makeStates(seed);
if (sc1.isFailure())
{
sc.setCode(202);
sc = StatusCode{202};
return Error("search: make states",sc);
}
......@@ -567,14 +566,14 @@ StatusCode Chi2MuIDTool::search(const LHCb::Track& seed, LHCb::Track& muTrack) {
// apply isMuon
if (!m_applyIsMuon){
if (!muTrack.lhcbIDs().empty()) return sc;
sc.setCode(204);
sc = StatusCode{204};
return sc;
}
bool ism = m_IsMuonTool->IsMuonCandidate(muTrack);
if (!ism)
{
sc.setCode(203); return sc;
sc = StatusCode{203}; return sc;
}
......@@ -592,7 +591,7 @@ StatusCode Chi2MuIDTool::findTrackRegions(const LHCb::Track& muTrack, std::vect
sc=makeStates(muTrack);
if (sc.isFailure())
{
sc.setCode(303);
sc = StatusCode{303};
return sc;
}
......
......@@ -108,7 +108,7 @@ private:
Gaudi::Property<bool> m_useBkg {this, "UseBkg", false, "Use background and return clratio?"};
LHCb::State* m_mySeedState = nullptr;
const LHCb::State* m_mySeedState = nullptr;
Gaudi::Property<float> m_2hits {this, "MinMomSt3", 3500, "Min momentum to accept hits in stations 3 and 4"};
Gaudi::Property<float> m_3hits {this, "MinMomSt4", 4500, "Min momentum to accept hits in station 4"};
......
......@@ -236,7 +236,7 @@ StatusCode DLLMuonTool::initialize() {
m_tanhCumulHistoNonMuonR1.push_back(&m_tanhCumulHistoNonMuonR1_5.value());
m_tanhCumulHistoNonMuonR1.push_back(&m_tanhCumulHistoNonMuonR1_6.value());
m_tanhCumulHistoNonMuonR1.push_back(&m_tanhCumulHistoNonMuonR1_7.value());
m_tanhCumulHistoNonMuonR2.push_back(&m_tanhCumulHistoNonMuonR2_1.value());
m_tanhCumulHistoNonMuonR2.push_back(&m_tanhCumulHistoNonMuonR2_2.value());
m_tanhCumulHistoNonMuonR2.push_back(&m_tanhCumulHistoNonMuonR2_3.value());
......@@ -340,7 +340,7 @@ double DLLMuonTool::calcDist(
// calculate the square of the distances
unsigned nstn = 0;
for (unsigned stn = 0; stn != s_usedStations; ++stn) {
for (unsigned stn = 0; stn != s_usedStations; ++stn) {
if (msgLevel(MSG::DEBUG)) {
debug() << "calcDist: station: " << stn << " mCoordDX = " << mCoordDX[stn]
<< " mCoordDY = " << mCoordDY[stn] << endmsg;
......@@ -367,7 +367,7 @@ double DLLMuonTool::calcDist(
/** Calculate the number of tracks that share hits
*/
bool DLLMuonTool::calcNShared(
LHCb::MuonPID* muonid, LHCb::MuonPIDs* pMuids,
LHCb::MuonPID* muonid, LHCb::MuonPIDs* pMuids,
const CommonConstMuonHits& hits,
const ICommonMuonTool::MuonTrackExtrapolation& extr,
std::map<LHCb::MuonPID*, double>* m_muonDistMap,
......@@ -387,7 +387,7 @@ bool DLLMuonTool::calcNShared(
<< endmsg;
if (dsquare1 < 0.) {
muonid->setNShared(100);
return Warning("calcDist 1 failure", false);
return Warning("calcDist 1 failure", StatusCode::FAILURE).isSuccess();
}
// Store distance in the muon map
(*m_muonDistMap)[muonid] = dsquare1;
......@@ -433,7 +433,7 @@ bool DLLMuonTool::calcNShared(
"tracks." << endmsg;
if (dsquare2 < 0.) {
muonid->setNShared(100);
return Warning("calcDist 2 failure", false);
return Warning("calcDist 2 failure", StatusCode::FAILURE).isSuccess();
}
if (msgLevel(MSG::DEBUG))
debug() << " For SECONDARY track with momentum = "
......@@ -450,7 +450,7 @@ bool DLLMuonTool::calcNShared(
if (dsquare2 < dsquare1) {
nNSH = muonid->nShared();
if (msgLevel(MSG::DEBUG))
debug() <<
debug() <<
"Setting the nShared to the original track. NShared = "
<< nNSH << endmsg;
muonid->setNShared(nNSH + 1);
......@@ -645,10 +645,10 @@ double DLLMuonTool::calc_closestDist(
// comment: Returns the squared distance calculated with closest hit
//=====================================================================
// TODO(kazeevn) port all 4/5 code to this stack implementation
std::array<double, 5> closest_x_data = {-1, -1, -1, -1, -1};
boost::iterator_range<double*> closest_x(closest_x_data.data(),
boost::iterator_range<double*> closest_x(closest_x_data.data(),
closest_x_data.data() + m_stationsCount);
std::vector<double> closest_y(m_stationsCount, -1);
std::vector<double> Fdist(m_stationsCount, 0);
......@@ -680,7 +680,7 @@ double DLLMuonTool::calc_closestDist(
if (msgLevel(MSG::DEBUG))
debug() << "The FOI dimension is, foiXDim = " << foiXDim
<< ", foiYDim = " << foiYDim << endmsg;
if (s >= m_muonTool->getFirstUsedStation()) {
if (s >= m_muonTool->getFirstUsedStation()) {
if ((fabs(hit->x() - extrapolation[s].first) < foiXDim) &&
(fabs(hit->y() - extrapolation[s].second) < foiYDim)) {
if (msgLevel(MSG::DEBUG))
......@@ -1096,8 +1096,8 @@ bool DLLMuonTool::compareHits(const CommonConstMuonHits& hits1,
std::begin(hits2), std::end(hits2),
[&](const CommonMuonHit* hit2) { // second hits
if (msgLevel(MSG::DEBUG)) {
debug() << "compareHits: The hit1 is = " <<
hit1->tile().key() << ". The hit2 is = " <<
debug() << "compareHits: The hit1 is = " <<
hit1->tile().key() << ". The hit2 is = " <<
hit2->tile().key() << endmsg;
}
if (hit1->tile().key() == hit2->tile().key()) {
......
......@@ -23,14 +23,14 @@ StatusCode DistMuIDTool::muonQuality(LHCb::Track& muTrack, double& Quality)
if (muTrack.states().size()>1) warning()<<"MUTRACK WITH MORE THAN ONE SEED STATE ON IT"<<endmsg;
else if (muTrack.states().empty())
{
sc.setCode(301);
sc = StatusCode{301};
Quality=0;
return Error("MUTRACK WITHOUT ANY SEED STATE ON IT",sc);
}
if (muTrack.lhcbIDs().empty())
{
sc.setCode(302);
sc = StatusCode{302};
Quality=0;
return Error("NO LHCbIDs ON TRACK. IMPOSSIBLE TO CALCULATE QUALITY",sc);
}
......@@ -60,7 +60,7 @@ StatusCode DistMuIDTool::computeDistance(const LHCb::Track& muTrack, double& dis
sc=makeStates(muTrack);
if (sc.isFailure()) {
sc.setCode(303);
sc = StatusCode{303};
return sc;
}
......
......@@ -38,12 +38,12 @@ StatusCode GetArrival::initialize() {
auto un_init = [](double x) { return x == -1. ; };
if (m_useFunct) {
if (std::any_of(m_beta.begin(), m_beta.end(),un_init)) {
m_init.setCode(401);
m_init = StatusCode{401};
return sc;
// return Error( "BETAS NOT INITIALIZED", m_init);
}
if (std::any_of(m_alpha.begin(), m_alpha.end(),un_init)) {
m_init.setCode(401);
m_init = StatusCode{401};
return sc;
// return Error( "ALPHAS NOT INITIALIZED", m_init);
}
......@@ -51,7 +51,7 @@ StatusCode GetArrival::initialize() {
//check if tool has been initialized
if (std::any_of(m_moms.begin(), m_moms.end(), un_init)) {
//TODO: sure?
m_init.setCode(401);
m_init = StatusCode{401};
if (msgLevel(MSG::DEBUG) ) debug() << "ARRIVAL TOOL NOT INITIALIZED"<<endmsg;
// m_init.setChecked();
return sc;
......@@ -61,7 +61,7 @@ StatusCode GetArrival::initialize() {
unsigned int npoints = m_moms.size();
if (msgLevel(MSG::DEBUG) ) debug() << " npoints: " << npoints << endmsg;
if ((m_probs.size()%npoints)!=0){
m_init.setCode(402);
m_init = StatusCode{402};
return sc;
// return Error( "INPUT VALUES WRONG SIZE PER STATION", m_init);
}
......@@ -202,7 +202,7 @@ StatusCode GetArrival::getArrivalFromTrack(const LHCb::Track& mutrack,double& pa
}
if (mutrack.lhcbIDs().empty()) {
sc.setCode(410);
sc = StatusCode{410};
return Error("NO LHCbIDs ON TRACK. IMPOSSIBLE TO CALCULATE QUALITY",sc);
}
......@@ -210,7 +210,7 @@ StatusCode GetArrival::getArrivalFromTrack(const LHCb::Track& mutrack,double& pa
sc = getStationsFromTrack(mutrack,type_st);
if (sc.isFailure())
{
sc.setCode(411);
sc = StatusCode{411};
return Error("COULD NOT RETRIEVE STS FROM LHCbIDs",sc);
}
......@@ -293,7 +293,7 @@ StatusCode GetArrival::clArrival(const LHCb::Track& muTrack, double& clarr){
}
if (muTrack.lhcbIDs().empty()) {
sc.setCode(410);
sc = StatusCode{410};
return Error("NO LHCbIDs ON TRACK. IMPOSSIBLE TO CALCULATE CL",sc);
}
......@@ -302,7 +302,7 @@ StatusCode GetArrival::clArrival(const LHCb::Track& muTrack, double& clarr){
sc = getStationsFromTrack(muTrack,type_st);
if (sc.isFailure()) {
clarr=0.;
sc.setCode(411);
sc = StatusCode{411};
return Error("COULD NOT RETRIEVE STS FROM LHCbIDs",sc);
}
return clArrival(muTrack.p(), type_st, clarr);
......@@ -314,7 +314,7 @@ StatusCode GetArrival::clArrival(const double p,const std::vector<int>& type_st,
StatusCode sc = StatusCode::SUCCESS;
if (countArray(type_st,4,1)<m_minhits) {
sc.setCode(412);
sc = StatusCode{412};
if (msgLevel(MSG::DEBUG) ) debug()<<"number of hits less than min"<<endmsg;
return sc;
}
......
......@@ -967,7 +967,7 @@ StatusCode MuonIDAlg::execute() {
// If required, save all tracks. If tracks already created, simply clone them
if (m_DoAllMuonTracks) {
LHCb::Track* mutrack_all;
if (pMuid->IsMuonLoose()) mutrack_all=mutrack->clone();
if (pMuid->IsMuonLoose()) mutrack_all = new LHCb::Track(*mutrack);
else mutrack_all = makeMuonTrack(*pMuid);
mutracks_all->insert( mutrack_all, track->key() );
}
......@@ -2600,10 +2600,10 @@ LHCb::Track* MuonIDAlg::makeMuonTrack(const LHCb::MuonPID& mupid){
}
}
if (m_mutrack.states().size()) mtrack.reset( m_mutrack.cloneWithKey() );
else
{
mtrack = std::make_unique<LHCb::Track>( mupid.key() );
if (m_mutrack.states().size()) {
mtrack.reset(new LHCb::Track(m_mutrack, m_mutrack.key()));
} else {
mtrack.reset( new LHCb::Track( mupid.key() ) );
mtrack->addToStates( mother->closestState(9450.) );
}
}
......
......@@ -209,7 +209,7 @@ void MuonMatchVelo::match( const LHCb::Track& seed, LHCb::Track::Vector& tracks
}) ) {
// There is a good enough candidate, put the seed into the output
// unmodified.
std::unique_ptr<LHCb::Track> out{seed.clone()};
std::unique_ptr<LHCb::Track> out{new LHCb::Track(seed)};
out->addToAncestors(seed);
tracks.push_back(out.release());
}
......@@ -229,7 +229,7 @@ void MuonMatchVelo::match( const LHCb::Track& seed, LHCb::Track::Vector& tracks
auto& bst = best->state;
std::unique_ptr<LHCb::Track> out{seed.clone()};
std::unique_ptr<LHCb::Track> out{new LHCb::Track(seed)};
out->addToAncestors(seed);
out->addInfo(35, slope - bst->tx());
......
......@@ -421,7 +421,7 @@ void MuonMatchVeloUT::match( const LHCb::Track& seed, LHCb::Track::Vector& track
return c.fitted() && c.fitatt->chi2ndof < m_maxChi2DoFX;
}) ) {
// There is a good enough candidate, put the seed into the output unmodified.
std::unique_ptr<LHCb::Track> out{seed.clone()};
std::unique_ptr<LHCb::Track> out{new LHCb::Track(seed)};
out->addToAncestors(seed);
tracks.push_back(out.release());
}
......@@ -443,16 +443,14 @@ void MuonMatchVeloUT::match( const LHCb::Track& seed, LHCb::Track::Vector& track
auto& bst = best->state;
std::unique_ptr<LHCb::Track> out{seed.clone()};
std::unique_ptr<LHCb::Track> out{new LHCb::Track(seed)};
out->addToAncestors(seed);
out->addInfo(35, slope - bst->tx());
double down = m_fieldSvc->isDown() ? -1 : +1;
double q = down*((slope < bst->tx()) - (slope > bst->tx()));
for ( const auto& state : out->states() )
state->setQOverP(q/best->fitatt->p);
out->setQOverPInAllStates(q/best->fitatt->p);
tracks.push_back(out.release());
}
}
......
......@@ -297,7 +297,7 @@ StatusCode AlignMuonRec::execute() {
verbose() << " m_matchChisq = " << m_matchChisq << endmsg;
debug() << "Match found: Chisq = " << Chisq << endmsg;
flag = true;
mytr = bestTrack->clone();
mytr = new LHCb::Track(*bestTrack);
bestChisq = Chisq;
}else {
debug() << "Chisquare too big " << Chisq << endmsg;
......
......@@ -19,7 +19,7 @@ struct IPrForwardTool : public extend_interfaces<IAlgTool> {
DeclareInterfaceID( IPrForwardTool, 2, 0);
virtual void extendTrack( const LHCb::Tracks& velo, LHCb::Tracks& result , const PrFTHitHandler<PrHit>& hitHandler) const = 0;
virtual void extendTrack( const std::vector<LHCb::Track>& velo, std::vector<LHCb::Track>& result , const PrFTHitHandler<PrHit>& hitHandler) const = 0;
// -- Debugging stuff
......
......@@ -174,15 +174,15 @@ StatusCode PrForwardTool::initialize ( ) {
//=========================================================================
// Main method: Process a track
//=========================================================================
void PrForwardTool::extendTrack (const LHCb::Tracks& velo, LHCb::Tracks& result, const PrFTHitHandler<PrHit>& FTHitHandler) const {
void PrForwardTool::extendTrack (const std::vector<LHCb::Track>& velo, std::vector<LHCb::Track>& result, const PrFTHitHandler<PrHit>& FTHitHandler) const {
std::vector<PrForwardTrack> tracks; tracks.reserve(velo.size());
//in the worst(!) case preslection <<< HERE!
for(const auto& track: velo) {
if( not ( track->checkFlag( LHCb::Track::Invalid) ) && not (track->checkFlag( LHCb::Track::Backward) ) // accept track
&& not ( m_preselection && track->pt() < m_preselectionPT ) // preselect the VeloUT tracks
&& not ( std::fabs(track->closestState(StateParameters::ZEndVelo).qOverP()) > 0.001 ) //very low momentum tracks P < 1GeV of no interest
if( not ( track.checkFlag( LHCb::Track::Invalid) ) && not (track.checkFlag( LHCb::Track::Backward) ) // accept track
&& not ( m_preselection && track.pt() < m_preselectionPT ) // preselect the VeloUT tracks
&& not ( std::fabs(track.closestState(StateParameters::ZEndVelo).qOverP()) > 0.001 ) //very low momentum tracks P < 1GeV of no interest
) {
tracks.emplace_back(track);
}
......@@ -215,33 +215,33 @@ void PrForwardTool::extendTrack (const LHCb::Tracks& velo, LHCb::Tracks& result,
//calculate y of velo at zref to decide on which side to search
const float yAtRef = track.seed().y(m_zReference);
// -- it happens rarely that we have to collect in both halves
if(yAtRef>-5.f){
// -- it happens rarely that we have to collect in both halves
if(yAtRef>-5.f){
collectAllXHits(allXHitsTop, track, 0, FTHitHandler, pars, magScaleFactor);
selectXCandidates(trackCandidates, track, allXHitsTop, 0, FTHitHandler, pars);
}
if(yAtRef< 5.f){
}
if(yAtRef< 5.f){
collectAllXHits(allXHitsBottom, track, 1, FTHitHandler, pars, magScaleFactor);
selectXCandidates(trackCandidates, track, allXHitsBottom, 1, FTHitHandler, pars);
}
// -- > Debug --------
if ( msgLevel(MSG::DEBUG)) {
info() << endmsg
<< "=============== Selected " << trackCandidates.size() << " candidates in 1st loop."
<< endmsg
<< endmsg;
int nValidTracks = 0;
}
// -- > Debug --------
if ( msgLevel(MSG::DEBUG)) {
info() << endmsg
<< "=============== Selected " << trackCandidates.size() << " candidates in 1st loop."
<< endmsg
<< endmsg;
int nValidTracks = 0;
for ( const auto& trackcand : trackCandidates ){
if ( trackcand.valid() ) printTrack( trackcand );
nValidTracks++;
}
info () << " valid tracks : " << nValidTracks << endmsg;
nValidTracks++;
}
// -- < Debug --------
info () << " valid tracks : " << nValidTracks << endmsg;
}
// -- < Debug --------
//Stereo hit search and full Fit
selectFullCandidates(trackCandidates, FTHitHandler, pars, magScaleFactor);
//Stereo hit search and full Fit
selectFullCandidates(trackCandidates, FTHitHandler, pars, magScaleFactor);
// erase tracks not valid
trackCandidates.erase(std::remove_if(trackCandidates.begin(),
......@@ -249,27 +249,27 @@ void PrForwardTool::extendTrack (const LHCb::Tracks& velo, LHCb::Tracks& result,
[](const auto& track) { return not track.valid(); }),
trackCandidates.end());
// -- > Debug --------
if ( msgLevel(MSG::DEBUG) ) {
// -- > Debug --------
if ( msgLevel(MSG::DEBUG) ) {
auto velot = std::next(velo.begin(), i);
info() << "********** final list of 1st loop candidates, Velo = " << (*velot)->key() << " ********" << endmsg;
info() << "********** final list of 1st loop candidates, Velo = " << (*velot).key() << " ********" << endmsg;
for ( const auto& trackcand : trackCandidates ){
printTrack( trackcand );
}
}
// -- < Debug --------
}
// -- < Debug --------
//check tracks, if no OK track is found start second Loop search
//check tracks, if no OK track is found start second Loop search
bool ok = std::any_of(trackCandidates.begin(), trackCandidates.end(),
[](const auto& track) {
return track.hits().size() > 10;
});
if(!ok && m_secondLoop){
//Second loop Hough Cluster search
if(!ok && m_secondLoop){
//Second loop Hough Cluster search
if(yAtRef>-5.f)selectXCandidates(trackCandidates2ndLoop, track, allXHitsTop, 0, FTHitHandler, pars2ndLoop);
if(yAtRef< 5.f)selectXCandidates(trackCandidates2ndLoop, track, allXHitsBottom, 1, FTHitHandler, pars2ndLoop);
selectFullCandidates(trackCandidates2ndLoop, FTHitHandler, pars2ndLoop, magScaleFactor);
selectFullCandidates(trackCandidates2ndLoop, FTHitHandler, pars2ndLoop, magScaleFactor);
trackCandidates.insert(std::end(trackCandidates),
std::begin(trackCandidates2ndLoop),
std::remove_if(trackCandidates2ndLoop.begin(),
......@@ -279,18 +279,18 @@ void PrForwardTool::extendTrack (const LHCb::Tracks& velo, LHCb::Tracks& result,
ok = not trackCandidates.empty();
}
//clone+ghost killing after merging
if(ok || !m_secondLoop){
std::sort(trackCandidates.begin(), trackCandidates.end(), PrForwardTrack::LowerByQuality() );
float minQuality = m_maxQuality;
for ( auto& track : trackCandidates ){
if(track.quality() + m_deltaQuality < minQuality) minQuality = track.quality() + m_deltaQuality;
if(track.quality() > minQuality) track.setValid(false);
}
makeLHCbTracks(trackCandidates, result);
//clone+ghost killing after merging
if(ok || !m_secondLoop){
std::sort(trackCandidates.begin(), trackCandidates.end(), PrForwardTrack::LowerByQuality() );
float minQuality = m_maxQuality;
for ( auto& track : trackCandidates ){
if(track.quality() + m_deltaQuality < minQuality) minQuality = track.quality() + m_deltaQuality;
if(track.quality() > minQuality) track.setValid(false);
}
makeLHCbTracks(trackCandidates, result);
}
}
}
//=========================================================================
......@@ -339,14 +339,14 @@ void PrForwardTool::selectFullCandidates(PrForwardTracks& trackCandidates, const
const float qOverP = calcqOverP(cand, magScaleFactor);
//orig params before fitting , TODO faster if only calc once?? mem usage?
const float xAtRef = cand.x(m_zReference );
float dSlope = ( cand.seed().x(m_zReference) - xAtRef ) / ( m_zReference - m_zMagnetParams[0]);
const float zMagSlope = m_zMagnetParams[2] * cand.seed().tx2 + m_zMagnetParams[3] * cand.seed().ty2;
const float zMag = m_zMagnetParams[0] + m_zMagnetParams[1] * dSlope * dSlope + zMagSlope;
const float xMag = cand.seed().x( zMag );
const float slopeT = ( xAtRef - xMag ) / ( m_zReference - zMag );
dSlope = slopeT - cand.seed().tx;
const float dyCoef = dSlope * dSlope * cand.seed().ty;
const float xAtRef = cand.x(m_zReference );
float dSlope = ( cand.seed().x(m_zReference) - xAtRef ) / ( m_zReference - m_zMagnetParams[0]);
const float zMagSlope = m_zMagnetParams[2] * cand.seed().tx2 + m_zMagnetParams[3] * cand.seed().ty2;
const float zMag = m_zMagnetParams[0] + m_zMagnetParams[1] * dSlope * dSlope + zMagSlope;
const float xMag = cand.seed().x( zMag );
const float slopeT = ( xAtRef - xMag ) / ( m_zReference - zMag );
dSlope = slopeT - cand.seed().tx;
const float dyCoef = dSlope * dSlope * cand.seed().ty;
float bx = slopeT;
float ay = cand.seed().y( m_zReference );
......@@ -369,9 +369,9 @@ void PrForwardTool::selectFullCandidates(PrForwardTracks& trackCandidates, const
mlpInput[6] = ay - ay1;
float quality = 0.f;
/// WARNING: if the NN classes straight out of TMVA are used, put a mutex here!
if(pars.minXHits > 4) quality = m_MLPReader_1st.GetMvaValue(mlpInput); //1st loop NN
else quality = m_MLPReader_2nd.GetMvaValue(mlpInput); //2nd loop NN
/// WARNING: if the NN classes straight out of TMVA are used, put a mutex here!
if(pars.minXHits > 4) quality = m_MLPReader_1st.GetMvaValue(mlpInput); //1st loop NN
else quality = m_MLPReader_2nd.GetMvaValue(mlpInput); //2nd loop NN
quality = 1.f-quality; //backward compability
......@@ -468,7 +468,7 @@ void PrForwardTool::collectAllXHits (std::vector<ModPrHit>& allXHits, const PrFo
const unsigned int triangleZone = m_triangleZones[iZone] - side;
// -- Use search to find the lower bound of the range of x values
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, xMin);
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, xMin);
const auto itEnd = FTHitHandler.getIterator_lowerBound( zoneNumber,xMax );
// range of xHits of current window ([xMin, xMax]) on the current zone
......@@ -484,7 +484,7 @@ void PrForwardTool::collectAllXHits (std::vector<ModPrHit>& allXHits, const PrFo
float xPredUv = xInUv + ( itH->x() - xInZone) * zRatio - dx;//predicted hit in UV-layer
float maxDx = m_tolYCollectX + ( std::fabs( itH->x() -xCentral ) + std::fabs( yInZone ) ) * m_tolYSlopeCollectX;
float xMinUV = xPredUv - maxDx;
auto itUV1 = FTHitHandler.getIterator_lowerBound(uvZoneNumber, xMinUV);
auto itUV1 = FTHitHandler.getIterator_lowerBound(uvZoneNumber, xMinUV);
const auto itUV1end = FTHitHandler.getIterator_End( uvZoneNumber );
......@@ -492,7 +492,7 @@ void PrForwardTool::collectAllXHits (std::vector<ModPrHit>& allXHits, const PrFo
const float maxDxProto = m_tolYCollectX + std::abs( yInZone ) * m_tolYSlopeCollectX;
if(std::fabs(yInZone) > m_tolYTriangleSearch){ //cuts very slightly into distribution, 100% save cut is ~50
//no triangle search necessary!
//no triangle search necessary!
for (auto& xHit : xHits) { //loop over all xHits in a layer between xMin and xMax
const float xPredUv = xPredUVProto + xHit.x()* zRatio;//predicted hit in UV-layer
const float maxDx = maxDxProto + std::fabs( xHit.x() -xCentral )* m_tolYSlopeCollectX;
......@@ -503,8 +503,8 @@ void PrForwardTool::collectAllXHits (std::vector<ModPrHit>& allXHits, const PrFo
}
}
}else{
//triangle search
auto itUV2 = FTHitHandler.getIterator_lowerBound(triangleZone, xMinUV);
//triangle search
auto itUV2 = FTHitHandler.getIterator_lowerBound(triangleZone, xMinUV);
const auto itUV2end = FTHitHandler.getIterator_End( triangleZone );
for (auto& xHit : xHits) { //loop over all xHits in a layer between xMin and xMax
const float xPredUv = xPredUVProto + xHit.x()* zRatio;//predicted hit in UV-layer
......@@ -566,7 +566,7 @@ void PrForwardTool::selectXCandidates(PrForwardTracks& trackCandidates, const Pr
while( true ) {
//find next unused Hits
while (it1+ pars.minXHits - 1 < itEnd && !it1->isValid()) ++it1;
while (it1+ pars.minXHits - 1 < itEnd && !it1->isValid()) ++it1;
it2 = it1 + pars.minXHits; //it2 pointing at last+1 element, like list.end()
while (it2 <= itEnd && !(it2 - 1)->isValid()) ++it2;
if (it2 > itEnd) break; //Minimum is after the end!
......@@ -742,7 +742,7 @@ void PrForwardTool::selectXCandidates(PrForwardTracks& trackCandidates, const Pr
//overwriting is faster than resetting, attention: values which are not overwritten do not make sense!!
pc.clear();
pc.set(coordToFit); //too difficult to keep track of add and delete, just do it again..
//only unused(!) hits in coordToFit now
//only unused(!) hits in coordToFit now
bool ok = pc.nbDifferent() > 3;
PrForwardTrack track(seed);
......@@ -1100,7 +1100,7 @@ bool PrForwardTool::fitYProjection(PrForwardTrack& track, std::vector<const PrHi
// -- > Debug --------
if ( msgLevel(MSG::DEBUG) ) info() << "-- not enough different planes after removing worst: " << pc.nbDifferent()
<< " for " << pars.minStereoHits << " --" << endmsg;
<< " for " << pars.minStereoHits << " --" << endmsg;
// -- < Debug --------
return false;
......@@ -1142,7 +1142,7 @@ bool PrForwardTool::addHitsOnEmptyXLayers(PrForwardTrack& track, unsigned int si
const PrHit* best = nullptr;
// -- Use a search to find the lower bound of the range of x values
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, minX);
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, minX);
const auto itEnd = FTHitHandler.getIterator_End(zoneNumber);
for ( ; itEnd != itH; ++itH ) {
if( itH->x() > maxX ) break;
......@@ -1203,7 +1203,7 @@ bool PrForwardTool::addHitsOnEmptyStereoLayers ( PrForwardTrack& track, std::vec
const float dxTol = m_tolY + m_tolYSlope * ( fabs( xPred - track.seed().x(zZone)) + fabs(yZone) );
// -- Use a binary search to find the lower bound of the range of x values
// -- This takes the y value into account
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, -dxTol - yZone * zone.dxDy() + xPred);
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, -dxTol - yZone * zone.dxDy() + xPred);
const auto itEnd = FTHitHandler.getIterator_End( zoneNumber );
const PrHit* best = nullptr;
......@@ -1224,14 +1224,14 @@ bool PrForwardTool::addHitsOnEmptyStereoLayers ( PrForwardTrack& track, std::vec
}else{
//no triangle search, thus no min max check
for ( ; itEnd != itH; ++itH ) {
const float dx = itH->x( yZone ) - xPred ;
if ( dx > dxTol ) break;
const float d = itH->distance(xPred,yZone);
const float chi2 = d*d * itH->w();
if ( chi2 < bestChi2 ) {
bestChi2 = chi2;
best = &*itH;
}
const float dx = itH->x( yZone ) - xPred ;
if ( dx > dxTol ) break;
const float d = itH->distance(xPred,yZone);
const float chi2 = d*d * itH->w();
if ( chi2 < bestChi2 ) {
bestChi2 = chi2;
best = &*itH;
}
}
}
......@@ -1281,7 +1281,7 @@ std::vector<ModPrHit> PrForwardTool::collectStereoHits(PrForwardTrack& track,
// -- Use a binary search to find the lower bound of the range of x values
// -- This takes the y value into account
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, -dxTol - yZone * zone.dxDy() + xPred);
auto itH = FTHitHandler.getIterator_lowerBound(zoneNumber, -dxTol - yZone * zone.dxDy() + xPred);
const auto itEnd = FTHitHandler.getIterator_End( zoneNumber );
if(triangleSearch){
for ( ; itEnd != itH; ++itH ) {
......@@ -1357,7 +1357,7 @@ bool PrForwardTool::selectStereoHits( PrForwardTrack& track, const PrFTHitHandle
//add next, if it decreases the range size and is empty
if ( (pc.nbInPlane(*endRange) == 0)
&&(averageCoord - beginRange->coord > endRange->coord - averageCoord )) {
&&(averageCoord - beginRange->coord > endRange->coord - averageCoord )) {
pc.addHit( *endRange );
sumCoord += (endRange++)->coord;
continue;
......@@ -1422,25 +1422,22 @@ bool PrForwardTool::selectStereoHits( PrForwardTrack& track, const PrFTHitHandle
//=========================================================================
// Convert the local track to the LHCb representation
//=========================================================================
void PrForwardTool::makeLHCbTracks ( PrForwardTracks& trackCandidates, LHCb::Tracks& result )const {
void PrForwardTool::makeLHCbTracks ( PrForwardTracks& trackCandidates, std::vector<LHCb::Track>& result )const {
auto validEnd = std::remove_if(trackCandidates.begin(), trackCandidates.end(),
[](const auto& track) { return not track.valid(); });
const range_of_const_<PrForwardTrack> validTracks{ trackCandidates.begin(), validEnd };
std::vector<LHCb::LHCbID> ids;
for (const auto& cand : validTracks ){
LHCb::Track* tmp = cand.track()->clone();
tmp->setType( LHCb::Track::Types::Long );
tmp->setHistory( LHCb::Track::History::PrForward );
tmp->addToAncestors( cand.track() );
LHCb::Track tmp{*(cand.track())};
tmp.setType( LHCb::Track::Types::Long );
tmp.setHistory( LHCb::Track::History::PrForward );
tmp.addToAncestors( cand.track() );
const double qOverP = cand.getQoP();
const double errQop2 = 0.1 * 0.1 * qOverP * qOverP;
for ( const auto& state : tmp->states() ){
state->setQOverP( qOverP );
state->setErrQOverP2( errQop2 );
}
tmp.setQOverPAndErrInAllStates(qOverP, errQop2);
LHCb::State tState;
const double z = StateParameters::ZEndT;
......@@ -1450,32 +1447,38 @@ void PrForwardTool::makeLHCbTracks ( PrForwardTracks& trackCandidates, LHCb::Tra
//== overestimated covariance matrix, as input to the Kalman fit
tState.setCovariance( m_geoTool->covariance( qOverP ) );
tmp->addToStates( tState );
tmp.addToStates( tState );
//== LHCb ids.
tmp->setPatRecStatus( LHCb::Track::PatRecStatus::PatRecIDs );
tmp.setPatRecStatus( LHCb::Track::PatRecStatus::PatRecIDs );
ids.clear();
ids.reserve(cand.hits().size());
for (const auto& hit : cand.hits() ){
tmp->addToLhcbIDs( hit->id() );
ids.push_back( hit->id() );
}
tmp->setChi2PerDoF( cand.chi2PerDoF() );
tmp->setNDoF( cand.nDoF() );
tmp->addInfo( LHCb::Track::AdditionalInfo::PatQuality, cand.quality() );
std::sort(ids.begin(), ids.end());
tmp.addSortedToLhcbIDs(ids);
tmp.setChi2PerDoF( cand.chi2PerDoF() );
tmp.setNDoF( cand.nDoF() );
tmp.addInfo( LHCb::Track::AdditionalInfo::PatQuality, cand.quality() );
//ADD UT hits on track
if ( nullptr != m_addUTHitsTool && !m_useMomentumEstimate) { //FIXME switch of if veloUT tracks as input
StatusCode sc = m_addUTHitsTool->addUTHits( *tmp );
StatusCode sc = m_addUTHitsTool->addUTHits( tmp );
if (sc.isFailure()){
if( msgLevel(MSG::DEBUG) )
debug()<<" Failure in adding UT hits to track"<<endmsg;
}
}
result.insert( tmp );
result.push_back(std::move(tmp));
// -- > Debug --------
if ( msgLevel(MSG::DEBUG) ) info() << "Store track " << (*(result.end()-1))->key() << " quality " << (*(result.end()-1))->info( LHCb::Track::AdditionalInfo::PatQuality, 0. ) << endmsg;
if ( msgLevel(MSG::DEBUG) ) info() << "Store track " << result.back().key() << " quality " << result.back().info( LHCb::Track::AdditionalInfo::PatQuality, 0. ) << endmsg;
// -- < Debug --------
}
......
......@@ -46,7 +46,7 @@ struct PrParameters {
*/
class PrForwardTool : public extends<GaudiTool, IPrForwardTool>{
public:
template<typename T>
using range_of_ = boost::iterator_range<typename std::vector<T>::iterator>;
......@@ -61,7 +61,7 @@ public:
virtual StatusCode initialize() override;
// -- MAIN METHOD
void extendTrack( const LHCb::Tracks& velo, LHCb::Tracks& result, const PrFTHitHandler<PrHit>& FTHitHandler ) const override;
void extendTrack( const std::vector<LHCb::Track>& velo, std::vector<LHCb::Track>& result, const PrFTHitHandler<PrHit>& FTHitHandler ) const override;
// ====================================================================================
// -- DEBUG HELPERS
......@@ -211,8 +211,8 @@ private:
PrPlaneCounter& pc) const;
//save good tracks
void makeLHCbTracks( PrForwardTracks& trackCandidates, LHCb::Tracks& result ) const;
void makeLHCbTracks( PrForwardTracks& trackCandidates, std::vector<LHCb::Track>& result ) const;
// -- Debug vars
IPrDebugTool* m_debugTool = nullptr;
int m_wantedKey;
......
......@@ -78,8 +78,8 @@ struct VeloSeed {
class PrForwardTrack final {
public:
/// Constructor with only a Velo track
PrForwardTrack( const LHCb::Track* track)
: m_track(track), m_seed{track->closestState(StateParameters::ZEndVelo)},
PrForwardTrack( const LHCb::Track& track )
: m_track(&track), m_seed{track.closestState(StateParameters::ZEndVelo)},
m_valid(true),
m_xParams({m_seed.x0 + (m_zRef - m_seed.z0) * m_seed.tx, m_seed.tx, 0.f}),
m_yParams({m_seed.y0 + (m_zRef - m_seed.z0) * m_seed.ty, m_seed.ty, 0.f}),
......
......@@ -77,17 +77,17 @@ StatusCode PrForwardTracking::initialize() {
//=============================================================================
// Main execution
//=============================================================================
LHCb::Tracks PrForwardTracking::operator()(const PrFTHitHandler<PrHit>& prFTHitHandler,
const LHCb::Tracks& velo) const {
std::vector<LHCb::Track> PrForwardTracking::operator()(const PrFTHitHandler<PrHit>& prFTHitHandler,
const std::vector<LHCb::Track>& veloUT) const {
if ( msgLevel(MSG::DEBUG) ) debug() << "==> Execute" << endmsg;
if ( m_doTiming ) {
m_timerTool->start( m_timeTotal );
m_timerTool->start( m_timePrepare );
}
LHCb::Tracks result;
std::vector<LHCb::Track> result;
if (velo.empty()) {
if (veloUT.empty()) {
return result;
}
......@@ -113,7 +113,7 @@ LHCb::Tracks PrForwardTracking::operator()(const PrFTHitHandler<PrHit>& prFTHitH
// -- Loop over all Velo input tracks and try to find extension in the T-stations
// -- This is the main 'work' of the forward tracking.
m_forwardTool->extendTrack(velo, result , prFTHitHandler);
m_forwardTool->extendTrack(veloUT, result , prFTHitHandler);
//============================================================
//== Final processing: filtering of duplicates,...
......@@ -126,25 +126,25 @@ LHCb::Tracks PrForwardTracking::operator()(const PrFTHitHandler<PrHit>& prFTHitH
// -- Sort the tracks according to their x-position of the state in the T-stations
// -- in order to make the final loop faster.
std::sort( result.begin(), result.end(),
[](const LHCb::Track* track1, const LHCb::Track* track2){
return track1->stateAt( LHCb::State::AtT )->x() < track2->stateAt( LHCb::State::AtT )->x();
[](const LHCb::Track& track1, const LHCb::Track& track2){
return track1.stateAt( LHCb::State::AtT )->x() < track2.stateAt( LHCb::State::AtT )->x();
});
auto notFT = [](const LHCb::LHCbID& id) { return !id.isFT(); };
for ( LHCb::Tracks::iterator itT1 = result.begin(); result.end() != itT1; ++itT1 ) {
LHCb::State* state1 = (*itT1)->stateAt( LHCb::State::AtT );
for ( auto itT1 = result.begin(); result.end() != itT1; ++itT1 ) {
LHCb::State* state1 = itT1->stateAt( LHCb::State::AtT );
for ( LHCb::Tracks::iterator itT2 = itT1+1; result.end() != itT2; ++itT2 ) {
LHCb::State* state2 = (*itT2)->stateAt( LHCb::State::AtT );
for ( auto itT2 = itT1+1; result.end() != itT2; ++itT2 ) {
LHCb::State* state2 = itT2->stateAt( LHCb::State::AtT );
double dx = state1->x() - state2->x();
if ( std::fabs(dx) > 50. ) break; // The distance only gets larger, as the vectors are sorted
double dy = state1->y() - state2->y();
if ( std::fabs(dy) > 100. ) continue;
// -- Find the beginning of the FT LHCbIDs
const auto& id1 = (*itT1)->lhcbIDs();
const auto& id2 = (*itT2)->lhcbIDs();
const auto& id1 = (*itT1).lhcbIDs();
const auto& id2 = (*itT2).lhcbIDs();
// -- Velo track has at least three hits, so advance by three
// checking whether we have the correct minimal number of velo hits
......@@ -165,17 +165,17 @@ LHCb::Tracks PrForwardTracking::operator()(const PrFTHitHandler<PrHit>& prFTHitH
int n2 = std::distance( begin2, id2.end() );
if ( nCommon > .4 * (n1 + n2 ) ) {
float q1 = (*itT1)->info( LHCb::Track::AdditionalInfo::PatQuality, 0. );
float q2 = (*itT2)->info( LHCb::Track::AdditionalInfo::PatQuality, 0. );
if ( msgLevel( MSG::DEBUG ) ) debug() << (*itT1)->key() << " (q=" << q1 << ") and "
<< (*itT2)->key() << " (q=" << q2 << ") share "
float q1 = itT1->info( LHCb::Track::AdditionalInfo::PatQuality, 0. );
float q2 = itT2->info( LHCb::Track::AdditionalInfo::PatQuality, 0. );
if ( msgLevel( MSG::DEBUG ) ) debug() << itT1->key() << " (q=" << q1 << ") and "
<< itT2->key() << " (q=" << q2 << ") share "
<< nCommon << " FT hits" << endmsg;
if ( q1 + m_deltaQuality < q2 ) {
if ( msgLevel( MSG::DEBUG ) ) debug() << "Erase " << (*itT2)->key() << endmsg;
if ( msgLevel( MSG::DEBUG ) ) debug() << "Erase " << itT2->key() << endmsg;
result.erase( itT2 );
itT2 = itT1;
} else if ( q2 + m_deltaQuality < q1 ) {
if ( msgLevel( MSG::DEBUG ) ) debug() << "Erase " << (*itT1)->key() << endmsg;
if ( msgLevel( MSG::DEBUG ) ) debug() << "Erase " << itT1->key() << endmsg;
result.erase( itT1 );
itT1 = result.begin();
itT2 = itT1;
......