425 Int_t nPlateID, nFiberID;
430 std::list<eRPotName>::const_iterator iterRPName;
445 eRPName = *iterRPName;
453 if (
m_pGeometryReader->GetVFiberParams(&FiberParams, eRPName, nPlateID+1, nFiberID+1))
455 m_faMD[eRPName-1][2*nPlateID+1][nFiberID] = FiberParams.
fSlope;
456 m_fbMD[eRPName-1][2*nPlateID+1][nFiberID] = FiberParams.
fOffset;
457 m_fzMD[eRPName-1][2*nPlateID+1][nFiberID] = FiberParams.
fZPos;
466 if (
m_pGeometryReader->GetUFiberParams(&FiberParams, eRPName, nPlateID+1, nFiberID+1))
468 m_faMD[eRPName-1][2*nPlateID][nFiberID] = FiberParams.
fSlope;
469 m_fbMD[eRPName-1][2*nPlateID][nFiberID] = FiberParams.
fOffset;
470 m_fzMD[eRPName-1][2*nPlateID][nFiberID] = FiberParams.
fZPos;
482 for (nPlateID = 0; nPlateID <
ODPLATESCNT; nPlateID++)
484 for (nFiberID = 0; nFiberID <
ODFIBERSCNT; nFiberID++)
489 m_faOD[eRPName-1][nPlateID][0][nFiberID+15] = FiberParams.
fSlope;
490 m_fbOD[eRPName-1][nPlateID][0][nFiberID+15] = FiberParams.
fOffset;
491 m_fzOD[eRPName-1][nPlateID][0][nFiberID+15] = FiberParams.
fZPos;
501 m_faOD[eRPName-1][nPlateID][0][nFiberID] = FiberParams.
fSlope;
502 m_fbOD[eRPName-1][nPlateID][0][nFiberID] = FiberParams.
fOffset;
503 m_fzOD[eRPName-1][nPlateID][0][nFiberID] = FiberParams.
fZPos;
515 m_faOD[eRPName-1][nPlateID][1][14-nFiberID] = FiberParams.
fSlope;
516 m_fbOD[eRPName-1][nPlateID][1][14-nFiberID] = FiberParams.
fOffset;
517 m_fzOD[eRPName-1][nPlateID][1][14-nFiberID] = FiberParams.
fZPos;
521 m_faOD[eRPName-1][nPlateID][1][nFiberID+15] = FiberParams.
fSlope;
522 m_fbOD[eRPName-1][nPlateID][1][nFiberID+15] = FiberParams.
fOffset;
523 m_fzOD[eRPName-1][nPlateID][1][nFiberID+15] = FiberParams.
fZPos;
536 m_faOD[eRPName-1][nPlateID][1][29-nFiberID] = FiberParams.
fSlope;
537 m_fbOD[eRPName-1][nPlateID][1][29-nFiberID] = FiberParams.
fOffset;
538 m_fzOD[eRPName-1][nPlateID][1][29-nFiberID] = FiberParams.
fZPos;
542 m_faOD[eRPName-1][nPlateID][1][nFiberID] = FiberParams.
fSlope;
543 m_fbOD[eRPName-1][nPlateID][1][nFiberID] = FiberParams.
fOffset;
544 m_fzOD[eRPName-1][nPlateID][1][nFiberID] = FiberParams.
fZPos;
681 ATH_MSG_ERROR(
"ALFA_LocRec::ExecuteRecoMethod called with invalid detector enum");
682 return StatusCode::FAILURE;
684 StatusCode
sc = StatusCode::SUCCESS;
686 std::list<ODRESULT> listODResults;
687 listODResults.clear();
688 Float_t fRecPosX = -9999.0;
689 Float_t fRecPosY = -9999.0;
691 std::map<string, int> mapRecoMethods;
692 mapRecoMethods.clear();
693 mapRecoMethods.insert(std::pair<string, int>(
"ODTracking", 1));
694 mapRecoMethods.insert(std::pair<string, int>(
"MDTracking", 2));
695 mapRecoMethods.insert(std::pair<string, int>(
"MDOverlap", 3));
696 mapRecoMethods.insert(std::pair<string, int>(
"CenterGravity", 4));
697 mapRecoMethods.insert(std::pair<string, int>(
"MDMultiple", 5));
698 mapRecoMethods.insert(std::pair<string, int>(
"HalfReco", 6));
699 mapRecoMethods.insert(std::pair<string, int>(
"MDGap", 7));
700 mapRecoMethods.insert(std::pair<string, int>(
"EdgeMethod", 8));
702 std::vector<int> vecFibSel;
705 switch(mapRecoMethods[strAlgo])
715 std::list<ODRESULT>::const_iterator iter;
716 for(iter=listODResults.begin(); iter!=listODResults.end(); ++iter)
718 ODResults.
iSide = (*iter).iSide;
719 ODResults.
fRecPos = (*iter).fRecPos;
720 ODResults.
fOverY = (*iter).fOverY;
721 ODResults.
iNumY = (*iter).iNumY;
723 if ((ODResults.
fRecPos != -9999.0))
726 std::fill_n(&iFibSel[0][0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
732 vecFibSel.push_back(iFibSel[ODResults.
iSide][iPlate]);
746 sc = pMDTracking->
Execute(eRPName-1, ListMDHits);
747 sc = pMDTracking->
Finalize(fRecPosX, fRecPosY);
749 if (fRecPosX!=-9999.0 && fRecPosY!=-9999.0)
752 Int_t iNumU = 0, iNumV = 0;
753 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
754 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
756 pMDTracking->
GetData(iNumU, iNumV, fOverlapU, fOverlapV, iFibSel);
758 for (
int & iLayer : iFibSel)
760 vecFibSel.push_back(iLayer);
775 sc = pMDOverlap->
Finalize(fRecPosX, fRecPosY);
778 Int_t iNumU = 0, iNumV = 0;
779 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
780 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
783 if (fRecPosX!=-9999 && fRecPosY!=-9999)
786 for (
int & iLayer : iFibSel)
788 vecFibSel.push_back(iLayer);
803 sc = pCenterGravity->
Finalize(fRecPosX, fRecPosY);
806 Int_t iNumU = 0, iNumV = 0;
807 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
808 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
810 pCenterGravity->
GetData(iFibSel);
811 if (fRecPosX!=-9999 && fRecPosY!=-9999)
814 for (
int & iLayer : iFibSel)
816 vecFibSel.push_back(iLayer);
822 delete pCenterGravity;
834 sc = pMDMultiple->
Finalize(fRecPosX, fRecPosY);
838 std::fill_n(&iFibSel[0][0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
839 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
840 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
841 memset(&iNumU, 0,
sizeof(iNumU));
842 memset(&iNumV, 0,
sizeof(iNumV));
844 pMDMultiple->
GetData(iNumU, iNumV, fOverU, fOverV, iFibSel);
845 for (Int_t iTrack=0; iTrack<
NTRACK; iTrack++)
847 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
852 vecFibSel.push_back(iFibSel[iTrack][iLayer]);
867 Int_t iNumU[2] = {0, 0};
868 Int_t iNumV[2] = {0, 0};
871 Float_t fOverlapU[2] = {-9999, -9999};
872 Float_t fOverlapV[2] = {-9999, -9999};
873 Float_t fRecPosX[2] = {-9999, -9999};
874 Float_t fRecPosY[2] = {-9999, -9999};
877 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
879 std::vector<int> vecFibSel0;
880 std::vector<int> vecFibSel1;
884 if (eRPName==1 || eRPName==3 || eRPName==6 || eRPName==8)
896 sc = pHalfReco->
Execute(eRPName-1, ListMDHits);
897 sc = pHalfReco->
Finalize(fRecPosX[0], fRecPosY[0]);
899 pHalfReco->
GetData(iNumU[0], iNumV[0], fOverlapU[0], fOverlapV[0], iFibSel);
901 for (
int & iLayer : iFibSel)
903 vecFibSel0.push_back(iLayer);
907 sc = pHalfReco->
Execute(eRPName-1, ListMDHits);
908 sc = pHalfReco->
Finalize(fRecPosX[1], fRecPosY[1]);
910 pHalfReco->
GetData(iNumU[1], iNumV[1], fOverlapU[1], fOverlapV[1], iFibSel);
912 for (
int & iLayer : iFibSel)
914 vecFibSel1.push_back(iLayer);
917 if (fRecPosX[0]!=-9999.0 && fRecPosY[0]!=-9999.0 && fRecPosX[1]!=-9999.0 && fRecPosY[1]!=-9999.0)
940 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
941 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
942 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
944 pMDGap->
GetData(iNumU, iNumV, fOverU, fOverV, iFibSel);
945 for (Int_t iTrack=0; iTrack<
NTRACK; iTrack++)
947 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
950 for (
int & iLayer : iFibSel)
952 vecFibSel.push_back(iLayer);
973 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
974 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
975 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
978 std::vector<ALFA_EdgeMethod::Track> tracks;
981 for (UInt_t iTrack=0; iTrack<tracks.size(); iTrack++)
983 pEdgeMethod->
selectedFibers(eRPName - 1, tracks.at(iTrack), iFibSel);
985 iNumU[iTrack] = tracks.at(iTrack).first.second;
986 iNumV[iTrack] = tracks.at(iTrack).second.second;
987 fOverU[iTrack] = tracks.at(iTrack).first.first.second;
988 fOverV[iTrack] = tracks.at(iTrack).second.first.second;
989 fRecPosX[iTrack] = 0.5*TMath::Sqrt2()*(-tracks.at(iTrack).first.first.first-tracks.at(iTrack).second.first.first);
990 fRecPosY[iTrack] = 0.5*TMath::Sqrt2()*(-tracks.at(iTrack).first.first.first+tracks.at(iTrack).second.first.first);
992 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
995 for (
int & iLayer : iFibSel)
997 vecFibSel.push_back(iLayer);
1005 sc = StatusCode::SUCCESS;
1011 std::cout <<
"strAlgo: " << strAlgo << std::endl;
1012 return StatusCode::SUCCESS;