44 , fPixelChargeHistos(nullptr)
45 , fTotalChargeInNpixelsArray(nullptr)
46 , fResolutionHistoX(nullptr)
47 , fResolutionHistoY(nullptr)
48 , fResolutionHistoCleanX(nullptr)
49 , fResolutionHistoCleanY(nullptr)
50 , fResolutionHistoMergedX(nullptr)
51 , fResolutionHistoMergedY(nullptr)
52 , fBadHitHisto(nullptr)
55 , fGausArrayLimit(5000)
63 , fFullClusterHisto(nullptr)
76 , fLayerRadiusInner(0.)
84 , fBranchName(
"MvdHit")
100 LOG(debug) <<
"CbmMvdSensorClusterfinderTask : Initialisation of sensor " <<
fSensor->GetName();
122 fResolutionHistoX =
new TH1F(
"SinglePointResolution_X",
"SinglePointResolution_X", 10000, -0.0100, 0.0100);
123 fResolutionHistoY =
new TH1F(
"SinglePointResolution_Y",
"SinglePointResolution_Y", 10000, -0.0100, 0.0100);
125 new TH1F(
"SinglePointResolution_X_Clean",
"SinglePointResolution_X_Clean", 10000, -0.0100, 0.0100);
127 new TH1F(
"SinglePointResolution_Y_Clean",
"SinglePointResolution_Y_Clean", 10000, -0.0100, 0.0100);
129 new TH1F(
"SinglePointResolution_X_Merged",
"SinglePointResolution_X_Merged", 10000, -0.0100, 0.0100);
131 new TH1F(
"SinglePointResolution_Y_Merged",
"SinglePointResolution_Y_Merged", 10000, -0.0100, 0.0100);
132 fBadHitHisto =
new TH2F(
"BadHits",
"Hits above 0.003cm", 1000, -2.5, 2.5, 1000, -2.5, 2.5);
133 fFullClusterHisto =
new TH1F(
"ChargeOfAllPixels",
"ChargeOfAllPixels", 12000, 0, 12000);
150 size_t buf_size = 20;
151 char* histoName =
new char[buf_size];
153 for (Int_t i = 0; i < 49; i++) {
154 snprintf(histoName, buf_size - 1,
"ChargePixel%i", i + 1);
155 histo =
new TH1F(histoName, histoName, 200, 0, 200);
162 char* histoTotalChargeName =
new char[buf_size];
163 TH1F* histoTotalCharge;
164 for (Int_t i = 0; i < 49; i++) {
166 snprintf(histoTotalChargeName, buf_size - 1,
"totalChargeInNPixels%i", i + 1);
167 histoTotalCharge =
new TH1F(histoTotalChargeName, histoTotalChargeName, 12000, 0, 12000);
170 delete[] histoTotalChargeName;
173 histo =
new TH1F(
"ChargePixelSeed",
"ChargePixelSeed", 200, 0, 14000);
176 histo =
new TH1F(
"ChargePixel9of49",
"ChargePixel 9 Of 49", 200, 0, 14000);
179 histo =
new TH1F(
"ChargePixel25of49",
"ChargePixel 25 Of 49", 200, 0, 14000);
182 histo =
new TH1F(
"ChargePixel49of49",
"ChargePixel 49 Of 49", 200, 0, 14000);
185 histo =
new TH1F(
"ChargePixel9of49Sorted",
"ChargePixel 9 Of 49 Sorted", 200, 0, 14000);
188 histo =
new TH1F(
"ChargePixel25of49Sorted",
"ChargePixel 25 Of 49 Sorted", 200, 0, 14000);
191 histo =
new TH1F(
"ChargePixel49of49Sorted",
"ChargePixel 49 Of 49 Sorted", 49, 0.5, 49.5);
221 LOG(debug) <<
"CbmMvdSensorClusterfinderTask::Exec starting" << endl;
222 LOG(debug) <<
"Detected " <<
fInputBuffer->GetEntriesFast() <<
" digis for sensor " <<
fSensor->GetName();
226 Fatal(
"CbmMvdSensorClusterfinderTask::Exec - fInputBuffer missing",
227 "CbmMvdSensorClusterfinderTask::Exec - fInputBuffer missing");
239 for (Int_t i = 0; i <
fInputBuffer->GetEntriesFast(); i++) {
253 for (Int_t i =
fInputBuffer->GetEntriesFast() - 1; i >= 0; --i) {
269 Int_t currentFrame{minFrame};
270 for (currentFrame = minFrame; currentFrame < maxFrame + 1; currentFrame++) {
272 LOG(debug) <<
"CbmMvdSensorClusterfinderTask::Exec() - Running frame " << currentFrame;
279 for (Int_t i =
fInputBuffer->GetEntriesFast() - 1; i >= 0; --i) {
288 for (Int_t iDigi = 0; iDigi <
fPixelUsed->GetSize(); iDigi++) {
337 LOG(debug) <<
"CbmMvdSensorClusterfinderTask::Exec - Running Sensor " <<
fSensor->GetName();
338 LOG(debug) <<
"CbmMvdSensorClusterfinderTask::Exec - InputBufferSize " <<
fInputFrameBuffer->GetEntriesFast();
342 vector<Int_t>* clusterArray =
new vector<Int_t>;
351 LOG(error) <<
"CbmMvdSensorFindHitTask - Fatal: No Digits found in this event.";
365 for (Int_t k = 0; k < nDigis; k++) {
370 LOG(fatal) <<
"RefID of this digi is -1 this should not happend ";
397 for (iDigi = 0; iDigi < nDigis; iDigi++) {
399 LOG_IF(debug, iDigi % 10000 == 0) <<
GetName() <<
" Digi:" << iDigi;
415 LOG(debug) <<
"CbmMvdSensorClusterfinderTask: Checking for seed pixels...";
419 clusterArray->clear();
420 clusterArray->push_back(iDigi);
433 for (ULong64_t iCluster = 0; iCluster < clusterArray->size(); iCluster++) {
435 LOG(debug) <<
" CbmMvdSensorClusterfinderTask: Calling method CheckForNeighbours()...";
445 pair<Int_t, Int_t> pixelCoords;
446 Int_t clusterSize = clusterArray->size();
455 for (i = 0; i < clusterSize; i++) {
464 pixelCharge = digiInCluster->
GetCharge();
479 clusterArray->clear();
501 pair<Int_t, Int_t> a(channelX, channelY);
505 a = std::make_pair(channelX + 1, channelY);
512 clusterArray->push_back(i);
514 pixelUsed->AddAt(1, i);
518 a = std::make_pair(channelX - 1, channelY);
525 clusterArray->push_back(i);
526 pixelUsed->AddAt(1, i);
530 a = std::make_pair(channelX, channelY - 1);
536 clusterArray->push_back(i);
537 pixelUsed->AddAt(1, i);
541 a = std::make_pair(channelX, channelY + 1);
548 clusterArray->push_back(i);
549 pixelUsed->AddAt(1, i);
583 Int_t seedIndexX = 0, seedIndexY = 0;
584 Float_t seedCharge = 0.;
586 std::map<std::pair<Int_t, Int_t>, Int_t> clusterMap = cluster->
GetPixelMap();
590 chargeArray3D[k][j] = gRandom->Gaus(0,
fSigmaNoise);
593 for (std::map<std::pair<Int_t, Int_t>, Int_t>::iterator iter = clusterMap.begin(); iter != clusterMap.end(); iter++) {
594 if (iter->second > seedCharge) {
595 seedCharge = iter->second;
596 seedIndexX = iter->first.first;
597 seedIndexY = iter->first.second;
601 for (std::map<std::pair<Int_t, Int_t>, Int_t>::iterator iter = clusterMap.begin(); iter != clusterMap.end(); iter++) {
603 Int_t relativeX = iter->first.first + seedPixelOffset - seedIndexX;
604 Int_t relativeY = iter->first.second + seedPixelOffset - seedIndexY;
606 if (
fVerbose > 1) LOG(debug) << relativeX <<
" " << relativeY <<
" " << iter->first.first <<
" " << seedIndexX;
609 if (relativeX >= 0 && relativeX < fChargeArraySize && relativeY >= 0 && relativeY <
fChargeArraySize) {
610 chargeArray3D[relativeX][relativeY] = iter->second;
613 if ((relativeX - seedPixelOffset == 0) && (relativeY - seedPixelOffset == 0)) {
618 std::stringstream ss;
621 ss << chargeArray3D[i][j] <<
" ";
625 LOG(info) << ss.str();
635 Int_t qSeed = chargeArray3D[seedPixelOffset][seedPixelOffset];
638 for (Int_t k = seedPixelOffset - 1; k < seedPixelOffset + 1; k++) {
639 for (Int_t j = seedPixelOffset - 1; j < seedPixelOffset + 1; j++) {
640 q9 = q9 + chargeArray3D[k][j];
658 for (Int_t k = seedPixelOffset - 2; k < seedPixelOffset + 2; k++) {
659 for (Int_t j = seedPixelOffset - 2; j < seedPixelOffset + 2; j++) {
660 q25 = q25 + chargeArray3D[k][j];
665 for (Int_t k = seedPixelOffset - 3; k < seedPixelOffset + 3; k++) {
666 for (Int_t j = seedPixelOffset - 3; j < seedPixelOffset + 3; j++) {
667 q49 = q49 + chargeArray3D[k][j];
686 for (Int_t i = 0; i < 9; i++) {
687 qSort += chargeArray[orderArray[i]];
691 for (Int_t i = 9; i < 25; i++) {
692 qSort += chargeArray[orderArray[i]];
696 TH1F* histoTotalCharge;
699 qSort += chargeArray[orderArray[i]];
702 histoTotalCharge->Fill(qSort);