Skip to content
Snippets Groups Projects

TRD Incomplete cluster recognition

Merged Axel Puntke requested to merge apuntke/cbmroot:incompl_cluster_recog into master
All threads resolved!
1 file
+ 27
31
Compare changes
  • Side-by-side
  • Inline
@@ -542,8 +542,7 @@ CbmTrdHit* CbmTrdModuleRecR::MakeHit(Int_t clusterId, const CbmTrdCluster* clust
}
// Set charge of incomplete clusters (missing NTs) to 0 (not deleting them because they are still relevant for tracking)
if (!IsClusterComplete(cluster))
totalCharge = 0.0;
if (!IsClusterComplete(cluster)) totalCharge = 0.0;
Int_t nofHits = fHits->GetEntriesFast();
@@ -587,51 +586,48 @@ bool CbmTrdModuleRecR::IsClusterComplete(const CbmTrdCluster* cluster)
{
uint32_t colMin = fDigiPar->GetNofColumns();
uint32_t rowMin = fDigiPar->GetNofRows();
for (int i = 0; i < cluster->GetNofDigis(); ++i)
{
for (int i = 0; i < cluster->GetNofDigis(); ++i) {
const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(cluster->GetDigi(i));
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
if (digiCol < colMin)
colMin = digiCol;
if (digiRow < rowMin)
rowMin = digiRow;
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
if (digiCol < colMin) colMin = digiCol;
if (digiRow < rowMin) rowMin = digiRow;
}
const UShort_t nCols = cluster->GetNCols();
const UShort_t nRows = cluster->GetNRows();
CbmTrdDigi* digiMap[nRows][nCols]; //create array on stack for optimal performance
memset(digiMap, 0, sizeof(CbmTrdDigi*) * nCols * nRows); //init with nullpointers
for (int i = 0; i < cluster->GetNofDigis(); ++i)
{
CbmTrdDigi* digiMap[nRows][nCols]; //create array on stack for optimal performance
memset(digiMap, 0, sizeof(CbmTrdDigi*) * nCols * nRows); //init with nullpointers
for (int i = 0; i < cluster->GetNofDigis(); ++i) {
const CbmTrdDigi* digi = CbmDigiManager::Instance()->Get<CbmTrdDigi>(cluster->GetDigi(i));
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
int digiCol = fDigiPar->GetPadColumn(digi->GetAddressChannel());
int digiRow = fDigiPar->GetPadRow(digi->GetAddressChannel());
if (digiMap[digiRow - rowMin][digiCol - colMin])
return false; // To be investigated why this sometimes happens (Redmin Issue 2914)
return false; // To be investigated why this sometimes happens (Redmin Issue 2914)
digiMap[digiRow - rowMin][digiCol - colMin] = const_cast<CbmTrdDigi*>(digi);
}
// check if each row of the cluster starts and ends with a kNeighbor digi
for (int iRow = 0; iRow < nRows; ++iRow)
{
for (int iRow = 0; iRow < nRows; ++iRow) {
int colStart = 0;
while (digiMap[iRow][colStart] == nullptr) ++colStart;
while (digiMap[iRow][colStart] == nullptr)
++colStart;
if (digiMap[iRow][colStart]->GetTriggerType() != static_cast<Int_t>(CbmTrdDigi::eTriggerType::kNeighbor))
return false;
int colStop = nCols - 1;
while (digiMap[iRow][colStop] == nullptr) --colStop;
while (digiMap[iRow][colStop] == nullptr)
--colStop;
if (digiMap[iRow][colStop]->GetTriggerType() != static_cast<Int_t>(CbmTrdDigi::eTriggerType::kNeighbor))
return false;
}
}
return true;
}
Loading