178 return StatusCode::FAILURE;
190 ATH_MSG_ERROR(
"m_pGeometryReader: unable to record to StoreGate");
208 return StatusCode::SUCCESS;
216 std::list<eRPotName>::const_iterator iterRPName;
219 std::list<MDHIT> ListMDHits;
220 std::list<ODHIT> ListODHits;
244 return StatusCode::SUCCESS;
251 return StatusCode::SUCCESS;
262 std::string strAlgoMD;
268 eRPName = *iterRPName;
281 std::string strAlgoOD;
287 eRPName = *iterRPName;
334 return StatusCode::SUCCESS;
344 return StatusCode::SUCCESS;
377 if(
sc.isFailure() || !mcGen)
379 return StatusCode::FAILURE;
385 for(;mcGenBeg!=mcGenEnd;++mcGenBeg)
389 MDHit.
iRPot = ((*mcGenBeg)->getStation());
390 MDHit.
iPlate = ((*mcGenBeg)->getPlate());
391 MDHit.
iFiber = ((*mcGenBeg)->getFiber());
393 ListMDHits.push_back(MDHit);
397 if(
sc.isFailure() || !mcODGen)
399 return StatusCode::FAILURE;
405 for(;mcODGenBeg!=mcODGenEnd;++mcODGenBeg)
408 ODHit.
iRPot = ((*mcODGenBeg)->getStation());
409 ODHit.
iPlate = ((*mcODGenBeg)->getPlate());
410 ODHit.
iSide = ((*mcODGenBeg)->getSide());
411 ODHit.
iFiber = ((*mcODGenBeg)->getFiber());
413 ListODHits.push_back(ODHit);
418 return StatusCode::SUCCESS;
425 Int_t nPlateID, nFiberID;
430 std::list<eRPotName>::const_iterator iterRPName;
445 eRPName = *iterRPName;
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;
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;
565 ATH_MSG_DEBUG(
"begin ALFA_LocRec::StoreReconstructionGeometry()");
567 Int_t iLayer, iFiber, iPlate, iSide;
568 Float_t fParamB, fZ, fSlope;
571 pFile = fopen(szDataDestination,
"w");
572 if(pFile==NULL)
return false;
573 fprintf(pFile,
"xxxxxxxxxxxxxxxxxxx\n");
576 fprintf(pFile,
"20\n");
581 fSlope=
m_faMD[eRPName-1][iLayer][iFiber];
582 fParamB=
m_fbMD[eRPName-1][iLayer][iFiber];
583 fZ=
m_fzMD[eRPName-1][iLayer][iFiber];
585 fprintf(pFile,
" %2d %2d %7.5f %7.4f %7.3f\n", iLayer+1, iFiber+1, fSlope, fParamB, fZ);
591 fprintf(pFile,
"6\n");
598 fSlope=
m_faOD[eRPName-1][iPlate][iSide][iFiber];
599 fParamB=
m_fbOD[eRPName-1][iPlate][iSide][iFiber];
600 fZ=
m_fzOD[eRPName-1][iPlate][iSide][iFiber];
602 fprintf(pFile,
" %2d %2d %7.5f %7.4f %7.3f\n", (2*iPlate+iSide+1), iFiber+1, fSlope, fParamB, fZ);
609 ATH_MSG_DEBUG(
"end ALFA_LocRec::StoreReconstructionGeometry()");
621 std::list<eRPotName>::const_iterator iterRPName;
631 ATH_MSG_DEBUG(
"The ALFA Fiber geometry was stored in the "<<szFilename<<
" file");
636 ATH_MSG_DEBUG(
"The ALFA Fiber geometry was stored in the "<<szFilename<<
" file");
641 ATH_MSG_DEBUG(
"The ALFA Fiber geometry was stored in the "<<szFilename<<
" file");
655 ATH_MSG_DEBUG(
"The ODFiber geometry was stored in the "<<szFilename<<
" file");
660 ATH_MSG_DEBUG(
"The ODFiber geometry was stored in the "<<szFilename<<
" file");
665 ATH_MSG_DEBUG(
"The ODFiber geometry was stored in the "<<szFilename<<
" file");
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;
1034 ATH_MSG_DEBUG(
"MD - LocRecEv collection was recorded in StoreGate");
1059 ATH_MSG_DEBUG(
"OD - LocRecEv collection is recorded in StoreGate");