23 for (
auto itHit : layerHits) {
26 if (
abs(itHit - phiMean - phiRefHit) <
abs(phiDist))
27 phiDist = itHit - phiMean - phiRefHit;
37 int pdfVal =
pdfAllRef[iLayer][iRefLayer][phiDist];
44 unsigned int iLayer = 2;
56 for (
auto itHit : layerHits) {
59 if (
abs(itHit - phiRefHit) < phiDist)
60 phiDist = itHit - phiRefHit;
64 if (nHitsInLayer > 1 || nHitsInLayer == 0)
85 ++
pdfAllRef[iLayer][iRefLayer][phiDistShift];
90 out <<
"GoldenPattern " << aPattern.
theKey << std::endl;
91 out <<
"Number of reference layers: " << aPattern.
meanDistPhi[0].size()
92 <<
", number of measurement layers: " << aPattern.
pdfAllRef.size() << std::endl;
99 out <<
"Mean dist phi per layer:" << std::endl;
100 for (
unsigned int iRefLayer = 0; iRefLayer < aPattern.
meanDistPhi[0].size(); ++iRefLayer) {
101 out <<
"Ref layer: " << iRefLayer <<
" (";
102 for (
unsigned int iLayer = 0; iLayer < aPattern.
meanDistPhi.size(); ++iLayer) {
103 out << std::setw(3) << aPattern.
meanDistPhi[iLayer][iRefLayer] <<
"\t";
105 out <<
")" << std::endl;
109 out <<
"Counts number per layer:" << std::endl;
110 for (
unsigned int iRefLayer = 0; iRefLayer < aPattern.
meanDistPhi[0].size(); ++iRefLayer) {
111 out <<
"Ref layer: " << iRefLayer <<
" (";
112 for (
unsigned int iLayer = 0; iLayer < aPattern.
meanDistPhi.size(); ++iLayer) {
115 out <<
")" << std::endl;
119 unsigned int nPdfAddrBits = 7;
120 out <<
"PDF per layer:" << std::endl;
121 for (
unsigned int iRefLayer = 0; iRefLayer < aPattern.
pdfAllRef[0].size(); ++iRefLayer) {
122 out <<
"Ref layer: " << iRefLayer;
123 for (
unsigned int iLayer = 0; iLayer < aPattern.
pdfAllRef.size(); ++iLayer) {
124 out <<
", measurement layer: " << iLayer << std::endl;
125 for (
unsigned int iPdf = 0; iPdf < exp2(nPdfAddrBits); ++iPdf) {
126 out << std::setw(2) << aPattern.
pdfAllRef[iLayer][iRefLayer][iPdf] <<
" ";
153 for (
unsigned int iRefLayer = 0; iRefLayer <
pdfAllRef[0].size(); ++iRefLayer) {
154 for (
unsigned int iLayer = 0; iLayer <
pdfAllRef.size(); ++iLayer) {
155 for (
unsigned int iPdf = 0; iPdf <
pdfAllRef[iLayer][iRefLayer].size(); ++iPdf) {
156 float pVal =
log((
float)
pdfAllRef[iLayer][iRefLayer][iPdf] /
169 for (
unsigned int iRefLayer = 0; iRefLayer <
meanDistPhi[0].size(); ++iRefLayer) {
170 for (
unsigned int iLayer = 0; iLayer <
meanDistPhi.size(); ++iLayer) {
184 int digitisedVal, truncatedValue;
185 for (
unsigned int iRefLayer = 0; iRefLayer <
pdfAllRef[0].size(); ++iRefLayer) {
186 for (
unsigned int iLayer = 0; iLayer <
pdfAllRef.size(); ++iLayer) {
187 for (
unsigned int iPdf = 0; iPdf <
pdfAllRef[iLayer][iRefLayer].size(); ++iPdf) {
201 digitisedVal = rint((
std::pow(2, nPdfValBits) - 1) - (pVal / minPlog) * (
std::pow(2, nPdfValBits) - 1));
203 truncatedValue = 0 | (digitisedVal & ((int)
pow(2, nPdfValBits) - 1));
204 pdfAllRef[iLayer][iRefLayer][iPdf] = truncatedValue;
210 for (
unsigned int iRefLayer = 0; iRefLayer <
pdfAllRef[0].size(); ++iRefLayer) {
211 for (
unsigned int iLayer = 0; iLayer <
pdfAllRef.size(); ++iLayer) {
212 for (
unsigned int iPdf = 0; iPdf <
pdfAllRef[iLayer][iRefLayer].size(); ++iPdf) {
217 if (index < 0 || index > exp2(nPdfAddrBits) - 1)
219 pdfAllRef[iLayer][iRefLayer][
index] = pdfAllRefTmp[iLayer][iRefLayer][iPdf];
227 for (
unsigned int iRefLayer = 0; iRefLayer <
meanDistPhi[0].size(); ++iRefLayer) {
228 for (
unsigned int iLayer = 0; iLayer <
meanDistPhi.size(); ++iLayer) {
static std::vector< std::string > checklist log
unsigned int nRefLayers() const
vector2D meanDistPhiCounts
std::vector< int > vector1D
unsigned int nLayers() const
unsigned int nPhiBins() const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
std::pair< int, bool > layerResult
const OMTFConfiguration * myOmtfConfig
bool hasCounts()
Check if the GP has any counts in any of referecne layers;.
GoldenPattern::layerResult process1Layer1RefLayer(unsigned int iRefLayer, unsigned int iLayer, const int refPhi, const OMTFinput::vector1D &layerHits)
void normalise(unsigned int nPdfAddrBits)
std::vector< vector1D > vector2D
std::vector< vector2D > vector3D
Key theKey
Pattern kinematical identification (iEta,iPt,iCharge)
unsigned int nPdfAddrBits() const
Abs< T >::type abs(const T &t)
void reset()
Reset contents of all data vectors, keeping the vectors size.
int propagateRefPhi(int phiRef, int etaRef, unsigned int iRefLayer)
const std::vector< int > & getRefToLogicNumber() const
void addCount(unsigned int iRefLayer, unsigned int iLayer, const int refPhi, const OMTFinput::vector1D &layerHits)
Add a single count to the relevant pdf bin in three dimensions.
unsigned int nPdfValBits() const
Power< A, B >::type pow(const A &a, const B &b)