26 typedef struct SpIndexPair {
31 bool operator()(
const std::pair<int, const TrigSiSpacePointBase*>& p1,
const std::pair<int, const TrigSiSpacePointBase*>& p2) {
32 return p1.second->z() < p2.second->z();
38 bool operator()(
const std::pair<int, const TrigSiSpacePointBase*>& p1,
const std::pair<int, const TrigSiSpacePointBase*>& p2) {
39 return p1.second->r() < p2.second->r();
48 const std::vector<short>& pixelLayers =
m_accelSvc->getLayerInformation(1);
49 const std::vector<short>& sctLayers =
m_accelSvc->getLayerInformation(2);
50 const std::vector<short>& layerTypes =
m_accelSvc->getLayerInformation(0);
56 const size_t bufferOffset = 256;
57 size_t totalSize = bufferOffset+dataTypeSize;
63 memset(pJ,0,dataTypeSize);
101 unsigned int nSP = vsp.size();
104 ATH_MSG_WARNING(
"MAX_NUMBER_SPACEPOINTS exceeded, exported data truncated ...");
110 int nLayers =
static_cast<int>(layerTypes.size());
113 std::vector<std::vector<std::pair<int, const TrigSiSpacePointBase*> > > phiLArray;
114 phiLArray.resize(nLayers*nSlices);
116 for(
unsigned int i=0;i<nSP;i++) {
118 const std::pair<IdentifierHash, IdentifierHash>& els =
sp.offlineSpacePoint()->elementIdList();
123 layerId = pixelLayers[hashId];
125 layerId = sctLayers[hashId];
131 int phiIdx = (
sp.phi()+
M_PI)/phiSliceWidth;
135 else if (phiIdx < 0) {
140 std::vector<std::pair<int, const TrigSiSpacePointBase*> >& v = phiLArray[layerId + phiIdx*nLayers];
141 v.push_back(std::pair<int, const TrigSiSpacePointBase*>(i,&
sp));
146 for(std::vector<short>::const_iterator it = layerTypes.begin();it!=layerTypes.end();++it, layerIdx++) {
147 short barrel_ec = (*it);
148 for(
int slice = 0;slice<nSlices;slice++) {
149 std::vector<std::pair<int, const TrigSiSpacePointBase*> >& v = phiLArray[layerIdx + slice*nLayers];
150 if(barrel_ec==0)
std::sort(v.begin(), v.end(), SP_INDEX_PAIR::compareZ());
151 else std::sort(v.begin(), v.end(), SP_INDEX_PAIR::compareR());
160 for(
int slice = 0;slice<nSlices;slice++) {
161 for(
int layer = 0;layer<nLayers;layer++) {
162 int layerStart = spIdx;
163 std::vector<std::pair<int, const TrigSiSpacePointBase*> >& v = phiLArray[layer + slice*nLayers];
164 for(std::vector<std::pair<int, const TrigSiSpacePointBase*> >
::iterator it = v.begin();it!=v.end();++it) {
166 sps.
m_index[spIdx] = (*it).first;
167 sps.
m_type[spIdx] =
sp->isPixel() ? 1 : 2;
168 sps.
m_x[spIdx] =
sp->x();
169 sps.
m_y[spIdx] =
sp->y();
170 sps.
m_z[spIdx] =
sp->z();
171 sps.
m_r[spIdx] =
sp->r();
177 int layerEnd = spIdx;