#include "L1HitsSortHelper.h" #include #include #include "L1StsHit.h" #include "L1HitPoint.h" #include "L1Grid.h" #include #include using std::vector; L1HitsSortHelper::L1HitsSortHelper(){ fD.resize(2000000); } void L1HitsSortHelper::Fill(vector * hits, vector * points, vector * indices, const L1Grid* grid, int nStations, THitI* iStart, THitI* iStop ){ fHits=(hits); fPoints=(points); fIndices=(indices); fGrid=grid; fStsHitsUnusedStartIndex=iStart; fStsHitsUnusedStopIndex=iStop; fNStations=nStations; // for ( int g = 0; g < 100; ++g ) for ( int iS = 0; iS < fNStations; ++iS ) { #pragma omp parallel for schedule(dynamic, 160) for( int i = (fStsHitsUnusedStartIndex[iS]); i < static_cast(fStsHitsUnusedStopIndex[iS]); i++ ) { fD[i].h = &((*hits)[i]); fD[i].p = &((*points)[i]); fD[i].i = ((*indices)[i]); fD[i].bin = fGrid[iS].GetBinBounded( fD[i].p->Xs(), fD[i].p->Ys() ); } } } void L1HitsSortHelper::Sort(int nDontUsedHits, vector * pointsBuf, vector * hitsBuf){ #pragma omp parallel for for ( int iS = 0; iS < fNStations; iS++ ) { sort(fD.begin()+fStsHitsUnusedStartIndex[iS], fD.begin()+fStsHitsUnusedStopIndex[iS], L1HitsSortHelperData::compare); } #pragma omp parallel for schedule(dynamic, 260) for ( int i = 0; i < nDontUsedHits; i++ ) { (*hitsBuf)[i] = *fD[i].h; (*pointsBuf)[i] = *fD[i].p; (*fIndices)[i] = fD[i].i; } #pragma omp parallel for schedule(dynamic, 110) for ( int i = 0; i < nDontUsedHits; i++ ) { (*fHits)[i]=(*hitsBuf)[i]; (*fPoints)[i]=(*pointsBuf)[i]; } }