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 StatusCode
sc = StatusCode::SUCCESS;
683 std::list<ODRESULT> listODResults;
684 listODResults.clear();
685 Float_t fRecPosX = -9999.0;
686 Float_t fRecPosY = -9999.0;
688 std::map<string, int> mapRecoMethods;
689 mapRecoMethods.clear();
690 mapRecoMethods.insert(std::pair<string, int>(
"ODTracking", 1));
691 mapRecoMethods.insert(std::pair<string, int>(
"MDTracking", 2));
692 mapRecoMethods.insert(std::pair<string, int>(
"MDOverlap", 3));
693 mapRecoMethods.insert(std::pair<string, int>(
"CenterGravity", 4));
694 mapRecoMethods.insert(std::pair<string, int>(
"MDMultiple", 5));
695 mapRecoMethods.insert(std::pair<string, int>(
"HalfReco", 6));
696 mapRecoMethods.insert(std::pair<string, int>(
"MDGap", 7));
697 mapRecoMethods.insert(std::pair<string, int>(
"EdgeMethod", 8));
699 std::vector<int> vecFibSel;
702 switch(mapRecoMethods[strAlgo])
712 std::list<ODRESULT>::const_iterator iter;
713 for(iter=listODResults.begin(); iter!=listODResults.end(); ++iter)
715 ODResults.
iSide = (*iter).iSide;
716 ODResults.
fRecPos = (*iter).fRecPos;
717 ODResults.
fOverY = (*iter).fOverY;
718 ODResults.
iNumY = (*iter).iNumY;
720 if ((ODResults.
fRecPos != -9999.0))
723 std::fill_n(&iFibSel[0][0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
729 vecFibSel.push_back(iFibSel[ODResults.
iSide][iPlate]);
743 sc = pMDTracking->
Execute(eRPName-1, ListMDHits);
744 sc = pMDTracking->
Finalize(fRecPosX, fRecPosY);
746 if (fRecPosX!=-9999.0 && fRecPosY!=-9999.0)
749 Int_t iNumU = 0, iNumV = 0;
750 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
751 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
753 pMDTracking->
GetData(iNumU, iNumV, fOverlapU, fOverlapV, iFibSel);
755 for (
int & iLayer : iFibSel)
757 vecFibSel.push_back(iLayer);
772 sc = pMDOverlap->
Finalize(fRecPosX, fRecPosY);
775 Int_t iNumU = 0, iNumV = 0;
776 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
777 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
780 if (fRecPosX!=-9999 && fRecPosY!=-9999)
783 for (
int & iLayer : iFibSel)
785 vecFibSel.push_back(iLayer);
800 sc = pCenterGravity->
Finalize(fRecPosX, fRecPosY);
803 Int_t iNumU = 0, iNumV = 0;
804 Float_t fOverlapU = -9999.0, fOverlapV = -9999.0;
805 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
807 pCenterGravity->
GetData(iFibSel);
808 if (fRecPosX!=-9999 && fRecPosY!=-9999)
811 for (
int & iLayer : iFibSel)
813 vecFibSel.push_back(iLayer);
819 delete pCenterGravity;
831 sc = pMDMultiple->
Finalize(fRecPosX, fRecPosY);
835 std::fill_n(&iFibSel[0][0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
836 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
837 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
838 memset(&iNumU, 0,
sizeof(iNumU));
839 memset(&iNumV, 0,
sizeof(iNumV));
841 pMDMultiple->
GetData(iNumU, iNumV, fOverU, fOverV, iFibSel);
842 for (Int_t iTrack=0; iTrack<
NTRACK; iTrack++)
844 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
849 vecFibSel.push_back(iFibSel[iTrack][iLayer]);
864 Int_t iNumU[2] = {0, 0};
865 Int_t iNumV[2] = {0, 0};
868 Float_t fOverlapU[2] = {-9999, -9999};
869 Float_t fOverlapV[2] = {-9999, -9999};
870 Float_t fRecPosX[2] = {-9999, -9999};
871 Float_t fRecPosY[2] = {-9999, -9999};
874 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
876 std::vector<int> vecFibSel0;
877 std::vector<int> vecFibSel1;
881 if (eRPName==1 || eRPName==3 || eRPName==6 || eRPName==8)
893 sc = pHalfReco->
Execute(eRPName-1, ListMDHits);
894 sc = pHalfReco->
Finalize(fRecPosX[0], fRecPosY[0]);
896 pHalfReco->
GetData(iNumU[0], iNumV[0], fOverlapU[0], fOverlapV[0], iFibSel);
898 for (
int & iLayer : iFibSel)
900 vecFibSel0.push_back(iLayer);
904 sc = pHalfReco->
Execute(eRPName-1, ListMDHits);
905 sc = pHalfReco->
Finalize(fRecPosX[1], fRecPosY[1]);
907 pHalfReco->
GetData(iNumU[1], iNumV[1], fOverlapU[1], fOverlapV[1], iFibSel);
909 for (
int & iLayer : iFibSel)
911 vecFibSel1.push_back(iLayer);
914 if (fRecPosX[0]!=-9999.0 && fRecPosY[0]!=-9999.0 && fRecPosX[1]!=-9999.0 && fRecPosY[1]!=-9999.0)
937 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
938 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
939 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
941 pMDGap->
GetData(iNumU, iNumV, fOverU, fOverV, iFibSel);
942 for (Int_t iTrack=0; iTrack<
NTRACK; iTrack++)
944 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
947 for (
int & iLayer : iFibSel)
949 vecFibSel.push_back(iLayer);
970 std::fill_n(&iFibSel[0],
sizeof(iFibSel)/
sizeof(Int_t), -9999);
971 std::fill_n(&fOverU[0],
sizeof(fOverU)/
sizeof(Float_t), -9999.0);
972 std::fill_n(&fOverV[0],
sizeof(fOverV)/
sizeof(Float_t), -9999.0);
975 std::vector<ALFA_EdgeMethod::Track> tracks;
978 for (UInt_t iTrack=0; iTrack<tracks.size(); iTrack++)
980 pEdgeMethod->
selectedFibers(eRPName - 1, tracks.at(iTrack), iFibSel);
982 iNumU[iTrack] = tracks.at(iTrack).first.second;
983 iNumV[iTrack] = tracks.at(iTrack).second.second;
984 fOverU[iTrack] = tracks.at(iTrack).first.first.second;
985 fOverV[iTrack] = tracks.at(iTrack).second.first.second;
986 fRecPosX[iTrack] = 0.5*TMath::Sqrt2()*(-tracks.at(iTrack).first.first.first-tracks.at(iTrack).second.first.first);
987 fRecPosY[iTrack] = 0.5*TMath::Sqrt2()*(-tracks.at(iTrack).first.first.first+tracks.at(iTrack).second.first.first);
989 if (fRecPosX[iTrack] != -9999.0 && fRecPosY[iTrack] != -9999.0)
992 for (
int & iLayer : iFibSel)
994 vecFibSel.push_back(iLayer);
1002 sc = StatusCode::SUCCESS;
1008 std::cout <<
"strAlgo: " << strAlgo << std::endl;
1009 return StatusCode::SUCCESS;