#include "L1Algo.h" #include "L1Grid.h" #include "L1HitPoint.h" void L1Algo::Init( const vector& geo ) { for(int iProc=0; iProc<4; iProc++) { for(int i=0; i<8; i++){ threadNumberToCpuMap[2*i+0 + iProc*20] = 4*i + iProc; threadNumberToCpuMap[2*i+1 + iProc*20] = 4*i + 32 + iProc; } for(int i=0; i<2; i++){ threadNumberToCpuMap[2*i+0 + 16 + iProc*20] = 4*i + iProc + 64; threadNumberToCpuMap[2*i+1 + 16 + iProc*20] = 4*i + 8 + iProc + 64; } } //lxir039 // for (int i=0; i<8; i++){ // threadNumberToCpuMap[2*i+0] = 15-i; // threadNumberToCpuMap[2*i+1] = 15-(i+8); // } int ind=0; { L1FieldValue B[3]; fvec z[3]; for( int i=0; i<3; i++){ z[i] = geo[ind++]; B[i].x = geo[ind++]; B[i].y = geo[ind++]; B[i].z = geo[ind++]; #ifndef TBB2 std::cout<<"L1Algo Input Magnetic field:"<(geo[ind++]); NMvdStations = static_cast(geo[ind++]); // cout << "N MVD & STS stations: " << NMvdStations << " " << NStations-NMvdStations << endl; #ifndef TBB2 std::cout<<"L1Algo Input "<( geo[ind++] ); for( int iC=0; iC( geo[ind++] ); fMomentumCutOff = geo[ind++]; fGhostSuppression = static_cast( geo[ind++] ); { fvec By0 = vStations[NStations-1].fieldSlice.cy[0]; fvec z0 = vStations[NStations-1].z; fvec sy = 0., Sy = 0.; for( int i=NStations-1; i>=0; i-- ){ L1Station &st = vStations[i]; fvec dz = st.z-z0; fvec By = vStations[i].fieldSlice.cy[0]; Sy += dz*sy + dz*dz*By/2.; sy += dz*By; st.Sy = Sy; z0 = st.z; } } // for( int iS = 0; iS < NStations; ++iS ) { /// Grid is created for each station with the same step: xStep,yStep // L1Grid &grid = vGrid[iS]; // // // grid.Create(-1,1,-0.6,0.6,xStep,yStep); // grid.Create(-1,1,-0.6,0.6,0.00317899,0.00105966); // } #ifndef TBB2 std::cout<<"L1Algo initialized"< & StsHits_, const vector< L1Strip > & StsStrips_, const vector< L1Strip > & StsStripsB_, const vector< fscal > & StsZPos_, const vector< unsigned char > & SFlag_, const vector< unsigned char > & SFlagB_, const THitI* StsHitsStartIndex_, const THitI* StsHitsStopIndex_ ) { vStsHits = & StsHits_; vStsStrips = & StsStrips_; vStsStripsB = & StsStripsB_; vStsZPos = & StsZPos_; vSFlag = & SFlag_; vSFlagB = & SFlagB_; std::cout << "nhits " << vStsHits->size() << " strips " << vStsStrips->size() << " " << vStsStripsB->size() << " flags " << vSFlag->size() << " " << vSFlagB->size() << std::endl; StsHitsStartIndex = StsHitsStartIndex_; StsHitsStopIndex = StsHitsStopIndex_; /* vStsHits.resize(StsHits_.size()); vStsStrips.resize(StsStrips_.size()); vStsStripsB.resize(StsStripsB_.size()); vStsZPos.resize(StsZPos_.size()); vSFlag.resize(SFlag_.size()); vSFlagB.resize(SFlagB_.size()); for(Tindex i=0; i< static_cast(StsHits_.size()); ++i ) vStsHits[i] = StsHits_[i]; for(Tindex i=0; i< static_cast(StsStrips_.size()); ++i ) vStsStrips[i] = StsStrips_[i]; for(Tindex i=0; i< static_cast(StsStripsB_.size()); ++i ) vStsStripsB[i] = StsStripsB_[i]; for(Tindex i=0; i< static_cast(StsZPos_.size()); ++i ) vStsZPos[i] = StsZPos_[i]; for(Tindex i=0; i< static_cast(SFlag_.size()); ++i ) vSFlag[i] = SFlag_[i]; for(Tindex i=0; i< static_cast(SFlagB_.size()); ++i ) vSFlagB[i] = SFlagB_[i]; for(Tindex i=0; i b.trip.GetLevel() ); // } // // bool L1Algo::SortCand(CandSort const& a, CandSort const& b) { // if (a.cand.Lengtha != b.cand.Lengtha) return (a.cand.Lengtha > b.cand.Lengtha); // // if (a.cand.ista != b.cand.ista ) return (a.cand.ista < b.cand.ista ); // // if (a.cand.chi2 != b.cand.chi2 )return (a.cand.chi2 < b.cand.chi2 ); // //return (a->chi2 < b->chi2 ); // // return (a->CandIndex < b->CandIndex ); // // return (a.cand.CandIndex > b.cand.CandIndex ); // } inline int L1Algo::PackIndex(const int& a, const int& b, const int& c) { return (a) + ((b)*10000) + (c*100000000); } inline int L1Algo::UnPackIndex(const int& i, int& a, int& b, int& c) { return (a) + ((b)*10000) + (c*100000000); }