Skip to content
Snippets Groups Projects

L1: cleanup the Fitter for the Particle Finder; remove failing requests to the run manager

Merged Sergey Gorbunov requested to merge se.gorbunov/cbmroot:frederic into master
2 files
+ 106
67
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -57,9 +57,6 @@ namespace NS_L1TrackFitter
@@ -57,9 +57,6 @@ namespace NS_L1TrackFitter
} // namespace NS_L1TrackFitter
} // namespace NS_L1TrackFitter
using namespace NS_L1TrackFitter;
using namespace NS_L1TrackFitter;
CbmL1PFFitter::CbmL1PFFitter() {}
CbmL1PFFitter::~CbmL1PFFitter() {}
inline void CbmL1PFFitter::PFFieldRegion::setFromL1FieldRegion(const L1FieldRegion& fld, int i)
inline void CbmL1PFFitter::PFFieldRegion::setFromL1FieldRegion(const L1FieldRegion& fld, int i)
{
{
@@ -98,6 +95,48 @@ inline void CbmL1PFFitter::PFFieldRegion::getL1FieldRegion(L1FieldRegion& fld, i
@@ -98,6 +95,48 @@ inline void CbmL1PFFitter::PFFieldRegion::getL1FieldRegion(L1FieldRegion& fld, i
inline CbmL1PFFitter::PFFieldRegion::PFFieldRegion(const L1FieldRegion& fld, int i) { setFromL1FieldRegion(fld, i); }
inline CbmL1PFFitter::PFFieldRegion::PFFieldRegion(const L1FieldRegion& fld, int i) { setFromL1FieldRegion(fld, i); }
 
CbmL1PFFitter::CbmL1PFFitter() {}
 
 
CbmL1PFFitter::~CbmL1PFFitter() {}
 
 
inline void CbmL1PFFitter::Initialize()
 
{
 
if (fIsInitialised) return;
 
 
fNmvdStationsActive = 0;
 
fNstsStationsActive = 0;
 
fMvdHitArray = nullptr;
 
fStsHitArray = nullptr;
 
 
FairRootManager* manager = FairRootManager::Instance();
 
 
if (!manager) { LOG(fatal) << "CbmL1PFFitter: no FairRootManager"; }
 
 
if (!CbmL1::Instance() || !CbmL1::Instance()->fpAlgo || !CbmL1::Instance()->fpAlgo->GetParameters()) {
 
LOG(fatal) << "CbmL1PFFitter: no CbmL1 task initialised ";
 
}
 
 
fNmvdStationsActive = CbmL1::Instance()->fpAlgo->GetParameters()->GetNstationsActive(L1DetectorID::kMvd);
 
fNstsStationsActive = CbmL1::Instance()->fpAlgo->GetParameters()->GetNstationsActive(L1DetectorID::kSts);
 
 
if (fNmvdStationsActive > 0) { fMvdHitArray = static_cast<TClonesArray*>(manager->GetObject("MvdHit")); }
 
if (fNstsStationsActive > 0) { fStsHitArray = static_cast<TClonesArray*>(manager->GetObject("StsHit")); }
 
 
fIsInitialised = true;
 
}
 
 
inline int CbmL1PFFitter::GetMvdStationIndex(const CbmMvdHit* hit)
 
{
 
return CbmL1::Instance()->fpAlgo->GetParameters()->GetStationIndexActive(hit->GetStationNr(), L1DetectorID::kMvd);
 
}
 
 
inline int CbmL1PFFitter::GetStsStationIndex(const CbmStsHit* hit)
 
{
 
return CbmL1::Instance()->fpAlgo->GetParameters()->GetStationIndexActive(
 
CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress()), L1DetectorID::kSts);
 
}
 
 
void FilterFirst(L1Fit& fit, fvec& x, fvec& y, fvec& dxx, fvec& dxy, fvec& dyy)
void FilterFirst(L1Fit& fit, fvec& x, fvec& y, fvec& dxx, fvec& dxy, fvec& dyy)
{
{
L1TrackPar& tr = fit.Tr();
L1TrackPar& tr = fit.Tr();
@@ -114,6 +153,8 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
@@ -114,6 +153,8 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
const std::vector<CbmStsHit>& vStsHits, const std::vector<int>& pidHypo)
const std::vector<CbmStsHit>& vStsHits, const std::vector<int>& pidHypo)
{
{
 
Initialize();
 
L1FieldValue b0, b1, b2 _fvecalignment;
L1FieldValue b0, b1, b2 _fvecalignment;
L1FieldRegion fld _fvecalignment;
L1FieldRegion fld _fvecalignment;
// fld.SetUseOriginalField();
// fld.SetUseOriginalField();
@@ -223,11 +264,9 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
@@ -223,11 +264,9 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
time = hit->GetTime();
time = hit->GetTime();
 
ista = GetMvdStationIndex(hit);
 
if (ista < 0) continue;
// ista = hit->GetStationNr();
ista =
CbmL1::Instance()->fpAlgo->GetParameters()->GetStationIndexActive(hit->GetStationNr(), L1DetectorID::kMvd);
if (ista == -1) continue;
du2[ista][iVec] = hit->GetDx() * hit->GetDx();
du2[ista][iVec] = hit->GetDx() * hit->GetDx();
dv2[ista][iVec] = hit->GetDy() * hit->GetDy();
dv2[ista][iVec] = hit->GetDy() * hit->GetDy();
dt2[ista][iVec] = hit->GetTimeError() * hit->GetTimeError();
dt2[ista][iVec] = hit->GetTimeError() * hit->GetTimeError();
@@ -240,12 +279,9 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
@@ -240,12 +279,9 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
time = hit->GetTime();
time = hit->GetTime();
 
ista = GetStsStationIndex(hit);
 
if (ista < 0) continue;
// ista = CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress())
// + NMvdStations; //hit->GetStationNr() - 1 + NMvdStations;
ista = CbmL1::Instance()->fpAlgo->GetParameters()->GetStationIndexActive(
CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress()), L1DetectorID::kSts);
if (ista == -1) continue;
du2[ista][iVec] = hit->GetDu() * hit->GetDu();
du2[ista][iVec] = hit->GetDu() * hit->GetDu();
dv2[ista][iVec] = hit->GetDv() * hit->GetDv();
dv2[ista][iVec] = hit->GetDv() * hit->GetDv();
dt2[ista][iVec] = hit->GetTimeError() * hit->GetTimeError();
dt2[ista][iVec] = hit->GetTimeError() * hit->GetTimeError();
@@ -443,23 +479,20 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
@@ -443,23 +479,20 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, const vector<int>& pidHypo)
void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, const vector<int>& pidHypo)
{
{
FairRootManager* fManger = FairRootManager::Instance();
Initialize();
TClonesArray* mvdHitArray = static_cast<TClonesArray*>(fManger->GetObject("MvdHit"));
TClonesArray* stsHitArray = static_cast<TClonesArray*>(fManger->GetObject("StsHit"));
std::vector<CbmMvdHit> vMvdHits;
std::vector<CbmMvdHit> vMvdHits;
std::vector<CbmStsHit> vStsHits;
std::vector<CbmStsHit> vStsHits;
if (mvdHitArray) {
if (fMvdHitArray) {
for (int ih = 0; ih < mvdHitArray->GetEntriesFast(); ih++) {
for (int ih = 0; ih < fMvdHitArray->GetEntriesFast(); ih++) {
CbmMvdHit hit = *dynamic_cast<const CbmMvdHit*>(mvdHitArray->At(ih));
vMvdHits.push_back(*dynamic_cast<const CbmMvdHit*>(fMvdHitArray->At(ih)));
vMvdHits.push_back(hit);
}
}
}
}
if (stsHitArray) {
if (fStsHitArray) {
for (int ih = 0; ih < stsHitArray->GetEntriesFast(); ih++) {
for (int ih = 0; ih < fStsHitArray->GetEntriesFast(); ih++) {
vStsHits.push_back(*dynamic_cast<const CbmStsHit*>(stsHitArray->At(ih)));
vStsHits.push_back(*dynamic_cast<const CbmStsHit*>(fStsHitArray->At(ih)));
}
}
}
}
@@ -470,6 +503,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, const vector<int>& pidHypo)
@@ -470,6 +503,8 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, const vector<int>& pidHypo)
void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field, vector<float>& chiToVtx,
void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field, vector<float>& chiToVtx,
CbmKFVertex& primVtx, float chiPrim)
CbmKFVertex& primVtx, float chiPrim)
{
{
 
Initialize();
 
chiToVtx.reserve(Tracks.size());
chiToVtx.reserve(Tracks.size());
int nTracks_SIMD = fvec::size();
int nTracks_SIMD = fvec::size();
@@ -479,8 +514,8 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
@@ -479,8 +514,8 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
CbmStsTrack* tr[fvec::size()] {nullptr};
CbmStsTrack* tr[fvec::size()] {nullptr};
int nStations = CbmL1::Instance()->fpAlgo->GetParameters()->GetNstationsActive();
int nStations = fNmvdStationsActive + fNstsStationsActive;
int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe();
const L1Station* sta = CbmL1::Instance()->fpAlgo->GetParameters()->GetStations().begin();
const L1Station* sta = CbmL1::Instance()->fpAlgo->GetParameters()->GetStations().begin();
fvec* zSta = new fvec[nStations];
fvec* zSta = new fvec[nStations];
for (int iSta = 0; iSta < nStations; iSta++) {
for (int iSta = 0; iSta < nStations; iSta++) {
@@ -492,10 +527,6 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
@@ -492,10 +527,6 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
L1FieldRegion fld _fvecalignment;
L1FieldRegion fld _fvecalignment;
L1FieldValue fB[3], fB_temp _fvecalignment;
L1FieldValue fB[3], fB_temp _fvecalignment;
fvec zField[3];
fvec zField[3];
FairRootManager* fManger = FairRootManager::Instance();
TClonesArray* listStsHits = static_cast<TClonesArray*>(fManger->GetObject("StsHit"));
TClonesArray* listMvdHits = 0;
if (NMvdStations > 0.) listMvdHits = static_cast<TClonesArray*>(fManger->GetObject("MvdHit"));
unsigned short N_vTracks = Tracks.size();
unsigned short N_vTracks = Tracks.size();
int ista;
int ista;
@@ -535,25 +566,26 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
@@ -535,25 +566,26 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
float posx = 0.f, posy = 0.f, posz = 0.f;
float posx = 0.f, posy = 0.f, posz = 0.f;
if (iH < nHitsTrackMvd) {
if (iH < nHitsTrackMvd) {
if (!listMvdHits) continue;
if (!fMvdHitArray) continue;
int hitIndex = tr[iVec]->GetMvdHitIndex(iH);
int hitIndex = tr[iVec]->GetMvdHitIndex(iH);
CbmMvdHit* hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
const CbmMvdHit* hit = dynamic_cast<const CbmMvdHit*>(fMvdHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = hit->GetStationNr();
ista = GetMvdStationIndex(hit);
 
if (ista < 0) continue;
}
}
else {
else {
if (!listStsHits) continue;
if (!fStsHitArray) continue;
int hitIndex = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
int hitIndex = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
CbmStsHit* hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress())
ista = GetStsStationIndex(hit);
+ NMvdStations; //hit->GetStationNr()-1+NMvdStations;
if (ista < 0) continue;
}
}
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
@@ -637,16 +669,12 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
@@ -637,16 +669,12 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field)
void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field)
{
{
 
Initialize();
 
field.reserve(Tracks.size());
field.reserve(Tracks.size());
L1FieldRegion fld _fvecalignment;
L1FieldRegion fld _fvecalignment;
FairRootManager* fManger = FairRootManager::Instance();
TClonesArray* listStsHits = static_cast<TClonesArray*>(fManger->GetObject("StsHit"));
TClonesArray* listMvdHits = 0;
int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe();
if (NMvdStations > 0.) listMvdHits = static_cast<TClonesArray*>(fManger->GetObject("MvdHit"));
int nTracks_SIMD = fvec::size();
int nTracks_SIMD = fvec::size();
L1TrackPar T; // fitting parametr coresponding to current track
L1TrackPar T; // fitting parametr coresponding to current track
@@ -671,25 +699,26 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
@@ -671,25 +699,26 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
float posx = 0.f, posy = 0.f, posz = 0.f;
float posx = 0.f, posy = 0.f, posz = 0.f;
if (iH < nHitsTrackMvd) {
if (iH < nHitsTrackMvd) {
if (!listMvdHits) continue;
if (!fMvdHitArray) continue;
int hitIndex = tr[iVec]->GetMvdHitIndex(iH);
int hitIndex = tr[iVec]->GetMvdHitIndex(iH);
CbmMvdHit* hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
const CbmMvdHit* hit = dynamic_cast<const CbmMvdHit*>(fMvdHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = hit->GetStationNr();
ista = GetMvdStationIndex(hit);
 
if (ista < 0) continue;
}
}
else {
else {
if (!listStsHits) continue;
if (!fStsHitArray) continue;
int hitIndex = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
int hitIndex = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
CbmStsHit* hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress())
ista = GetStsStationIndex(hit);
+ NMvdStations; //hit->GetStationNr()-1+NMvdStations;
if (ista < 0) continue;
}
}
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
@@ -711,16 +740,12 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
@@ -711,16 +740,12 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field)
void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks, vector<PFFieldRegion>& field)
{
{
 
Initialize();
 
field.reserve(Tracks.size());
field.reserve(Tracks.size());
L1FieldRegion fld _fvecalignment;
L1FieldRegion fld _fvecalignment;
FairRootManager* fManger = FairRootManager::Instance();
TClonesArray* listStsHits = static_cast<TClonesArray*>(fManger->GetObject("StsHit"));
TClonesArray* listMvdHits = 0;
int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe();
if (NMvdStations > 0.) listMvdHits = static_cast<TClonesArray*>(fManger->GetObject("MvdHit"));
int nTracks_SIMD = fvec::size();
int nTracks_SIMD = fvec::size();
L1TrackPar T; // fitting parametr coresponding to current track
L1TrackPar T; // fitting parametr coresponding to current track
@@ -748,25 +773,26 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
@@ -748,25 +773,26 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
int hitNumber = nHits - iH - 1;
int hitNumber = nHits - iH - 1;
if (hitNumber < nHitsTrackMvd) {
if (hitNumber < nHitsTrackMvd) {
if (!listMvdHits) continue;
if (!fMvdHitArray) continue;
int hitIndex = tr[iVec]->GetMvdHitIndex(hitNumber);
int hitIndex = tr[iVec]->GetMvdHitIndex(hitNumber);
CbmMvdHit* hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
const CbmMvdHit* hit = dynamic_cast<const CbmMvdHit*>(fMvdHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = hit->GetStationNr();
ista = GetMvdStationIndex(hit);
 
if (ista < 0) continue;
}
}
else {
else {
if (!listStsHits) continue;
if (!fStsHitArray) continue;
int hitIndex = tr[iVec]->GetHitIndex(hitNumber - nHitsTrackMvd);
int hitIndex = tr[iVec]->GetHitIndex(hitNumber - nHitsTrackMvd);
CbmStsHit* hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
posx = hit->GetX();
posx = hit->GetX();
posy = hit->GetY();
posy = hit->GetY();
posz = hit->GetZ();
posz = hit->GetZ();
ista = CbmStsSetup::Instance()->GetStationNumber(hit->GetAddress())
ista = GetStsStationIndex(hit);
+ NMvdStations; //hit->GetStationNr()-1+NMvdStations;
if (ista < 0) continue;
}
}
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
sta[ista].fieldSlice.GetFieldValue(posx, posy, fB_temp);
Loading