diff --git a/.gitignore b/.gitignore index ac9e1b3e..7384297b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ scripts/moduleconnection*.txt .make.log* bin/doAnalysis bin/sdl +bin/sdl_cuda +bin/sdl_cpu code/rooutil/librooutil.so code/rooutil/rooutil.so .gitversion.txt diff --git a/Makefile b/Makefile index 3d775393..66856b13 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ # Simple makefile -EXES=bin/sdl - -ROOUTIL=code/rooutil/ +EXES := bin/sdl_cpu bin/sdl_cuda SOURCES=$(wildcard code/core/*.cc) OBJECTS=$(SOURCES:.cc=.o) +OBJECTS_CPU=$(SOURCES:.cc=_cpu.o) +OBJECTS_CUDA=$(SOURCES:.cc=_cuda.o) HEADERS=$(SOURCES:.cc=.h) CXX = g++ @@ -14,11 +14,12 @@ CXXFLAGS = -g -O2 -Wall -fPIC -Wshadow -Woverloaded-virtual -lineinfo -fopen LDFLAGS = -g -O2 -Wall -fPIC -Wshadow -Woverloaded-virtual SOFLAGS = -g -shared CXXFLAGS = -g -O2 -Wall -fPIC -Wshadow -Woverloaded-virtual -LDFLAGS = -g -O2 -lsdl -L${TRACKLOOPERDIR}/SDL/cuda -L${TRACKLOOPERDIR}/SDL/cpu +LDFLAGS = -g -O2 $(SDLLIB) -L${TRACKLOOPERDIR}/SDL ROOTLIBS = $(shell root-config --libs) ROOTCFLAGS = $(foreach option, $(shell root-config --cflags), $(option)) ALPAKAINCLUDE = -I${ALPAKA_ROOT}/include -I/${BOOST_ROOT}/include -std=c++17 -DALPAKA_DEBUG=0 -ALPAKASERIAL = -DALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED +ALPAKA_CPU = -DALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED +ALPAKA_CUDA = -DALPAKA_ACC_GPU_CUDA_ENABLED -DALPAKA_HOST_ONLY CFLAGS = $(ROOTCFLAGS) -Wall -Wno-unused-function -g -O2 -fPIC -fno-var-tracking -ISDL -I$(shell pwd) -Icode -Icode/core -I${CUDA_HOME}/include -fopenmp EXTRACFLAGS = $(shell rooutil-config) -g EXTRAFLAGS = -fPIC -ITMultiDrawTreePlayer -Wunused-variable -lTMVA -lEG -lGenVector -lXMLIO -lMLP -lTreePlayer -L${CUDA_HOME}/lib64 -lcudart -fopenmp @@ -30,40 +31,45 @@ CUTVALUEFLAG_FLAGS = -DCUT_VALUE_DEBUG PRIMITIVEFLAG = PRIMITIVEFLAG_FLAGS = -DPRIMITIVE_STUDY -all: $(ROOUTIL) efficiency $(EXES) +all: rooutil efficiency $(EXES) cutvalue: CUTVALUEFLAG = ${CUTVALUEFLAG_FLAGS} -cutvalue: $(ROOUTIL) efficiency $(EXES) +cutvalue: rooutil efficiency $(EXES) primitive: PRIMITIVEFLAG = ${PRIMITIVEFLAG_FLAGS} -primitive: $(ROOUTIL) efficiency $(EXES) +primitive: rooutil efficiency $(EXES) cutvalue_primitive: CUTVALUEFLAG = ${CUTVALUEFLAG_FLAGS} cutvalue_primitive: PRIMITIVEFLAG = ${PRIMITIVEFLAG_FLAGS} -cutvalue_primitive: $(ROOUTIL) efficiency $(EXES) - +cutvalue_primitive: rooutil efficiency $(EXES) bin/doAnalysis: bin/doAnalysis.o $(OBJECTS) - $(CXX) $(PTCUTFLAG) $(LDFLAGS) $^ $(ROOTLIBS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(EXTRAFLAGS) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKASERIAL) -o $@ + $(CXX) $(PTCUTFLAG) $(LDFLAGS) $^ $(ROOTLIBS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(EXTRAFLAGS) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKA_CPU) -o $@ -bin/sdl: bin/sdl.o $(OBJECTS) - $(CXX) $(PTCUTFLAG) $(LDFLAGS) $^ $(ROOTLIBS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(EXTRAFLAGS) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKASERIAL) -o $@ +bin/sdl_cpu: SDLLIB=-lsdl_cpu +bin/sdl_cpu: bin/sdl_cpu.o $(OBJECTS_CPU) + $(CXX) $(PTCUTFLAG) $(LDFLAGS) $^ $(ROOTLIBS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(EXTRAFLAGS) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKA_CPU) -o $@ +bin/sdl_cuda: SDLLIB=-lsdl_cuda +bin/sdl_cuda: bin/sdl_cuda.o $(OBJECTS_CUDA) + $(CXX) $(PTCUTFLAG) $(LDFLAGS) $^ $(ROOTLIBS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(EXTRAFLAGS) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKA_CUDA) -o $@ -%.o: %.cc - $(CXX) $(PTCUTFLAG) $(CFLAGS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKASERIAL) $< -c -o $@ +%_cpu.o: %.cc rooutil + $(CXX) $(PTCUTFLAG) $(CFLAGS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKA_CPU) $< -c -o $@ +%_cuda.o: %.cc rooutil + $(CXX) $(PTCUTFLAG) $(CFLAGS) $(EXTRACFLAGS) $(CUTVALUEFLAG) $(PRIMITIVEFLAG) $(DOQUINTUPLET) $(ALPAKAINCLUDE) $(ALPAKA_CUDA) $< -c -o $@ -$(ROOUTIL): +rooutil: $(MAKE) -C code/rooutil/ -efficiency: +efficiency: rooutil $(MAKE) -C efficiency/ clean: - rm -f $(OBJECTS) bin/*.o $(EXES) + rm -f $(OBJECTS) bin/*.o $(EXES) bin/sdl rm -f code/rooutil/*.so code/rooutil/*.o rm -f bin/sdl.o rm -f SDL/*.o cd efficiency/ && make clean -.PHONY: $(ROOUTIL) efficiency +.PHONY: rooutil efficiency diff --git a/SDL/EndcapGeometry.cc b/SDL/EndcapGeometry.cc index 813ae229..e9c1967d 100644 --- a/SDL/EndcapGeometry.cc +++ b/SDL/EndcapGeometry.cc @@ -1,27 +1,16 @@ #include "EndcapGeometry.h" -SDL::EndcapGeometry* SDL::endcapGeometry = new SDL::EndcapGeometry(); - -void SDL::freeEndcap() { - if (SDL::endcapGeometry != nullptr) { - delete SDL::endcapGeometry; - SDL::endcapGeometry = nullptr; - } -} - -SDL::EndcapGeometry::EndcapGeometry(unsigned int sizef) +SDL::EndcapGeometry::EndcapGeometry(unsigned int sizef) : geoMapDetId_buf(allocBufWrapper(devAcc, sizef)), geoMapPhi_buf(allocBufWrapper(devAcc, sizef)) {} -SDL::EndcapGeometry::EndcapGeometry(std::string filename, unsigned int sizef) +SDL::EndcapGeometry::EndcapGeometry(std::string filename, unsigned int sizef) : geoMapDetId_buf(allocBufWrapper(devAcc, sizef)), geoMapPhi_buf(allocBufWrapper(devAcc, sizef)) { load(filename); } -SDL::EndcapGeometry::~EndcapGeometry() {} - -void SDL::EndcapGeometry::load(std::string filename) { +void SDL::EndcapGeometry::load(std::string filename) { dxdy_slope_.clear(); centroid_phis_.clear(); @@ -44,7 +33,7 @@ void SDL::EndcapGeometry::load(std::string filename) { fillGeoMapArraysExplicit(); } -void SDL::EndcapGeometry::fillGeoMapArraysExplicit() { +void SDL::EndcapGeometry::fillGeoMapArraysExplicit() { QueueAcc queue(devAcc); int phi_size = centroid_phis_.size(); @@ -82,4 +71,4 @@ void SDL::EndcapGeometry::fillGeoMapArraysExplicit() { alpaka::wait(queue); } -float SDL::EndcapGeometry::getdxdy_slope(unsigned int detid) { return dxdy_slope_[detid]; } \ No newline at end of file +float SDL::EndcapGeometry::getdxdy_slope(unsigned int detid) { return dxdy_slope_[detid]; } diff --git a/SDL/EndcapGeometry.h b/SDL/EndcapGeometry.h index 4c51a8ea..eb9e4806 100644 --- a/SDL/EndcapGeometry.h +++ b/SDL/EndcapGeometry.h @@ -12,7 +12,10 @@ #include "Constants.h" namespace SDL { - class EndcapGeometry { + template + class EndcapGeometry {}; + template <> + class EndcapGeometry { private: std::map dxdy_slope_; // dx/dy slope std::map centroid_phis_; // centroid phi @@ -25,7 +28,7 @@ namespace SDL { EndcapGeometry(unsigned int sizef = endcap_size); EndcapGeometry(std::string filename, unsigned int sizef = endcap_size); - ~EndcapGeometry(); + ~EndcapGeometry() = default; void load(std::string); @@ -33,8 +36,6 @@ namespace SDL { void CreateGeoMapArraysExplicit(); float getdxdy_slope(unsigned int detid); }; - void freeEndcap(); - extern EndcapGeometry* endcapGeometry; } // namespace SDL #endif diff --git a/SDL/Event.cc b/SDL/Event.cc index f26c6ee4..c626fd0d 100644 --- a/SDL/Event.cc +++ b/SDL/Event.cc @@ -1,13 +1,7 @@ #include "Event.h" +#include "Globals.h" -SDL::modules* SDL::modulesInGPU = new SDL::modules(); -SDL::modulesBuffer* SDL::modulesBuffers = new SDL::modulesBuffer(devAcc); -SDL::modulesBuffer const* SDL::modulesBuffersES = nullptr; -std::shared_ptr SDL::pixelMapping = std::make_shared(); -uint16_t SDL::nModules; -uint16_t SDL::nLowerModules; - -void SDL::Event::init(bool verbose) { +void SDL::Event::init(bool verbose) { addObjects = verbose; hitsInGPU = nullptr; mdsInGPU = nullptr; @@ -26,7 +20,6 @@ void SDL::Event::init(bool verbose) { tripletsInCPU = nullptr; trackCandidatesInCPU = nullptr; modulesInCPU = nullptr; - modulesInCPUFull = nullptr; quintupletsInCPU = nullptr; pixelTripletsInCPU = nullptr; pixelQuintupletsInCPU = nullptr; @@ -51,9 +44,9 @@ void SDL::Event::init(bool verbose) { } // Standalone constructor that has each event object create its own queue. -SDL::Event::Event(bool verbose) : queue(alpaka::getDevByIdx(platformAcc, 0u)) { init(verbose); } +SDL::Event::Event(bool verbose) : queue(alpaka::getDevByIdx(platformAcc, 0u)) { init(verbose); } -void SDL::Event::resetEvent() { +void SDL::Event::resetEvent() { //reset the arrays for (int i = 0; i < 6; i++) { n_hits_by_layer_barrel_[i] = 0; @@ -157,53 +150,43 @@ void SDL::Event::resetEvent() { delete modulesInCPU; modulesInCPU = nullptr; } - if (modulesInCPUFull != nullptr) { - delete modulesInCPUFull; - modulesInCPUFull = nullptr; - } } -void SDL::initModules(const char* moduleMetaDataFilePath) { +void SDL::Event::initModules(const MapPLStoLayer& pLStoLayer, const char* moduleMetaDataFilePath) { QueueAcc queue(devAcc); // nModules gets filled here - loadModulesFromFile(modulesBuffers, nModules, nLowerModules, *pixelMapping, queue, moduleMetaDataFilePath); - - // Set the relevant data pointers. - modulesBuffersES = modulesBuffers; - modulesInGPU->setData(*modulesBuffersES); -} - -// Temporary solution to the global variables. Should be freed with shared_ptr. -void SDL::freeModules() { - if (SDL::modulesBuffers != nullptr) { - delete SDL::modulesBuffers; - SDL::modulesBuffers = nullptr; - } - if (SDL::modulesInGPU != nullptr) { - delete SDL::modulesInGPU; - SDL::modulesInGPU = nullptr; - } + loadModulesFromFile(Globals::modulesBuffers, + Globals::nModules, + Globals::nLowerModules, + *Globals::pixelMapping, + queue, + moduleMetaDataFilePath, + pLStoLayer); + + // hand over to the const access ("ES") + Globals::modulesBuffersES = Globals::modulesBuffers; } -void SDL::Event::addHitToEvent(std::vector x, - std::vector y, - std::vector z, - std::vector detId, - std::vector idxInNtuple) { +void SDL::Event::addHitToEvent(std::vector x, + std::vector y, + std::vector z, + std::vector detId, + std::vector idxInNtuple) { // Use the actual number of hits instead of a max. unsigned int nHits = x.size(); // Initialize space on device/host for next event. if (hitsInGPU == nullptr) { hitsInGPU = new SDL::hits(); - hitsBuffers = new SDL::hitsBuffer(nModules, nHits, devAcc, queue); + hitsBuffers = new SDL::hitsBuffer(Globals::nModules, nHits, devAcc, queue); hitsInGPU->setData(*hitsBuffers); } if (rangesInGPU == nullptr) { rangesInGPU = new SDL::objectRanges(); - rangesBuffers = new SDL::objectRangesBuffer(nModules, nLowerModules, devAcc, queue); + rangesBuffers = + new SDL::objectRangesBuffer(Globals::nModules, Globals::nLowerModules, devAcc, queue); rangesInGPU->setData(*rangesBuffers); } @@ -224,17 +207,18 @@ void SDL::Event::addHitToEvent(std::vector x, WorkDiv const hit_loop_workdiv = createWorkDiv(blocksPerGrid1, threadsPerBlock1, elementsPerThread); hitLoopKernel hit_loop_kernel; - auto const hit_loop_task(alpaka::createTaskKernel(hit_loop_workdiv, - hit_loop_kernel, - Endcap, - TwoS, - nModules, - SDL::endcapGeometry->nEndCapMap, - alpaka::getPtrNative(SDL::endcapGeometry->geoMapDetId_buf), - alpaka::getPtrNative(SDL::endcapGeometry->geoMapPhi_buf), - *modulesInGPU, - *hitsInGPU, - nHits)); + auto const hit_loop_task( + alpaka::createTaskKernel(hit_loop_workdiv, + hit_loop_kernel, + Endcap, + TwoS, + Globals::nModules, + SDL::Globals::endcapGeometry->nEndCapMap, + alpaka::getPtrNative(SDL::Globals::endcapGeometry->geoMapDetId_buf), + alpaka::getPtrNative(SDL::Globals::endcapGeometry->geoMapPhi_buf), + *Globals::modulesBuffersES->data(), + *hitsInGPU, + nHits)); alpaka::enqueue(queue, hit_loop_task); @@ -243,8 +227,11 @@ void SDL::Event::addHitToEvent(std::vector x, WorkDiv const module_ranges_workdiv = createWorkDiv(blocksPerGrid2, threadsPerBlock2, elementsPerThread); moduleRangesKernel module_ranges_kernel; - auto const module_ranges_task(alpaka::createTaskKernel( - module_ranges_workdiv, module_ranges_kernel, *modulesInGPU, *hitsInGPU, nLowerModules)); + auto const module_ranges_task(alpaka::createTaskKernel(module_ranges_workdiv, + module_ranges_kernel, + *Globals::modulesBuffersES->data(), + *hitsInGPU, + Globals::nLowerModules)); // Waiting isn't needed after second kernel call. Saves ~100 us. // This is because addPixelSegmentToEvent (which is run next) doesn't rely on hitsBuffers->hitrange variables. @@ -252,24 +239,24 @@ void SDL::Event::addHitToEvent(std::vector x, alpaka::enqueue(queue, module_ranges_task); } -void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, - std::vector hitIndices1, - std::vector hitIndices2, - std::vector hitIndices3, - std::vector dPhiChange, - std::vector ptIn, - std::vector ptErr, - std::vector px, - std::vector py, - std::vector pz, - std::vector eta, - std::vector etaErr, - std::vector phi, - std::vector charge, - std::vector seedIdx, - std::vector superbin, - std::vector pixelType, - std::vector isQuad) { +void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, + std::vector hitIndices1, + std::vector hitIndices2, + std::vector hitIndices3, + std::vector dPhiChange, + std::vector ptIn, + std::vector ptErr, + std::vector px, + std::vector py, + std::vector pz, + std::vector eta, + std::vector etaErr, + std::vector phi, + std::vector charge, + std::vector seedIdx, + std::vector superbin, + std::vector pixelType, + std::vector isQuad) { unsigned int size = ptIn.size(); if (size > N_MAX_PIXEL_SEGMENTS_PER_MODULE) { @@ -282,12 +269,12 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, } unsigned int mdSize = 2 * size; - uint16_t pixelModuleIndex = (*detIdToIndex)[1]; + uint16_t pixelModuleIndex = Globals::pixelMapping->pixelModuleIndex; if (mdsInGPU == nullptr) { // Create a view for the element nLowerModules inside rangesBuffers->miniDoubletModuleOccupancy - auto dst_view_miniDoubletModuleOccupancy = - alpaka::createSubView(rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)nLowerModules); + auto dst_view_miniDoubletModuleOccupancy = alpaka::createSubView( + rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)Globals::nLowerModules); // Create a source view for the value to be set int value = N_MAX_PIXEL_MD_PER_MODULES; @@ -302,8 +289,10 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, createWorkDiv(blocksPerGridCreateMD, threadsPerBlockCreateMD, elementsPerThread); SDL::createMDArrayRangesGPU createMDArrayRangesGPU_kernel; - auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel( - createMDArrayRangesGPU_workDiv, createMDArrayRangesGPU_kernel, *modulesInGPU, *rangesInGPU)); + auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel(createMDArrayRangesGPU_workDiv, + createMDArrayRangesGPU_kernel, + *Globals::modulesBuffersES->data(), + *rangesInGPU)); alpaka::enqueue(queue, createMDArrayRangesGPUTask); alpaka::wait(queue); @@ -317,7 +306,7 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, nTotalMDs += N_MAX_PIXEL_MD_PER_MODULES; mdsInGPU = new SDL::miniDoublets(); - miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, nLowerModules, devAcc, queue); + miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, Globals::nLowerModules, devAcc, queue); mdsInGPU->setData(*miniDoubletsBuffers); alpaka::memcpy(queue, miniDoubletsBuffers->nMemoryLocations_buf, nTotalMDs_view); @@ -333,8 +322,11 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, createWorkDiv(blocksPerGridCreateSeg, threadsPerBlockCreateSeg, elementsPerThread); SDL::createSegmentArrayRanges createSegmentArrayRanges_kernel; - auto const createSegmentArrayRangesTask(alpaka::createTaskKernel( - createSegmentArrayRanges_workDiv, createSegmentArrayRanges_kernel, *modulesInGPU, *rangesInGPU, *mdsInGPU)); + auto const createSegmentArrayRangesTask(alpaka::createTaskKernel(createSegmentArrayRanges_workDiv, + createSegmentArrayRanges_kernel, + *Globals::modulesBuffersES->data(), + *rangesInGPU, + *mdsInGPU)); alpaka::enqueue(queue, createSegmentArrayRangesTask); alpaka::wait(queue); @@ -347,8 +339,8 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, nTotalSegments += N_MAX_PIXEL_SEGMENTS_PER_MODULE; segmentsInGPU = new SDL::segments(); - segmentsBuffers = - new SDL::segmentsBuffer(nTotalSegments, nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); + segmentsBuffers = new SDL::segmentsBuffer( + nTotalSegments, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); segmentsInGPU->setData(*segmentsBuffers); alpaka::memcpy(queue, segmentsBuffers->nMemoryLocations_buf, nTotalSegments_view); @@ -408,7 +400,7 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, addPixelSegmentToEventKernel addPixelSegmentToEvent_kernel; auto const addPixelSegmentToEvent_task(alpaka::createTaskKernel(addPixelSegmentToEvent_workdiv, addPixelSegmentToEvent_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *rangesInGPU, *hitsInGPU, *mdsInGPU, @@ -425,10 +417,10 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitIndices0, alpaka::wait(queue); } -void SDL::Event::createMiniDoublets() { +void SDL::Event::createMiniDoublets() { // Create a view for the element nLowerModules inside rangesBuffers->miniDoubletModuleOccupancy - auto dst_view_miniDoubletModuleOccupancy = - alpaka::createSubView(rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)nLowerModules); + auto dst_view_miniDoubletModuleOccupancy = alpaka::createSubView( + rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)Globals::nLowerModules); // Create a source view for the value to be set int value = N_MAX_PIXEL_MD_PER_MODULES; @@ -443,8 +435,10 @@ void SDL::Event::createMiniDoublets() { createWorkDiv(blocksPerGridCreateMD, threadsPerBlockCreateMD, elementsPerThread); SDL::createMDArrayRangesGPU createMDArrayRangesGPU_kernel; - auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel( - createMDArrayRangesGPU_workDiv, createMDArrayRangesGPU_kernel, *modulesInGPU, *rangesInGPU)); + auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel(createMDArrayRangesGPU_workDiv, + createMDArrayRangesGPU_kernel, + *Globals::modulesBuffersES->data(), + *rangesInGPU)); alpaka::enqueue(queue, createMDArrayRangesGPUTask); alpaka::wait(queue); @@ -460,19 +454,20 @@ void SDL::Event::createMiniDoublets() { if (mdsInGPU == nullptr) { mdsInGPU = new SDL::miniDoublets(); - miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, nLowerModules, devAcc, queue); + miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, Globals::nLowerModules, devAcc, queue); mdsInGPU->setData(*miniDoubletsBuffers); } Vec const threadsPerBlockCreateMDInGPU = createVec(1, 16, 32); - Vec const blocksPerGridCreateMDInGPU = createVec(1, nLowerModules / threadsPerBlockCreateMDInGPU[1], 1); + Vec const blocksPerGridCreateMDInGPU = + createVec(1, Globals::nLowerModules / threadsPerBlockCreateMDInGPU[1], 1); WorkDiv const createMiniDoubletsInGPUv2_workDiv = createWorkDiv(blocksPerGridCreateMDInGPU, threadsPerBlockCreateMDInGPU, elementsPerThread); SDL::createMiniDoubletsInGPUv2 createMiniDoubletsInGPUv2_kernel; auto const createMiniDoubletsInGPUv2Task(alpaka::createTaskKernel(createMiniDoubletsInGPUv2_workDiv, createMiniDoubletsInGPUv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *hitsInGPU, *mdsInGPU, *rangesInGPU)); @@ -488,7 +483,7 @@ void SDL::Event::createMiniDoublets() { auto const addMiniDoubletRangesToEventExplicitTask( alpaka::createTaskKernel(addMiniDoubletRangesToEventExplicit_workDiv, addMiniDoubletRangesToEventExplicit_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *mdsInGPU, *rangesInGPU, *hitsInGPU)); @@ -501,23 +496,23 @@ void SDL::Event::createMiniDoublets() { } } -void SDL::Event::createSegmentsWithModuleMap() { +void SDL::Event::createSegmentsWithModuleMap() { if (segmentsInGPU == nullptr) { segmentsInGPU = new SDL::segments(); - segmentsBuffers = - new SDL::segmentsBuffer(nTotalSegments, nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); + segmentsBuffers = new SDL::segmentsBuffer( + nTotalSegments, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); segmentsInGPU->setData(*segmentsBuffers); } Vec const threadsPerBlockCreateSeg = createVec(1, 1, 64); - Vec const blocksPerGridCreateSeg = createVec(1, 1, nLowerModules); + Vec const blocksPerGridCreateSeg = createVec(1, 1, Globals::nLowerModules); WorkDiv const createSegmentsInGPUv2_workDiv = createWorkDiv(blocksPerGridCreateSeg, threadsPerBlockCreateSeg, elementsPerThread); SDL::createSegmentsInGPUv2 createSegmentsInGPUv2_kernel; auto const createSegmentsInGPUv2Task(alpaka::createTaskKernel(createSegmentsInGPUv2_workDiv, createSegmentsInGPUv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *mdsInGPU, *segmentsInGPU, *rangesInGPU)); @@ -530,11 +525,12 @@ void SDL::Event::createSegmentsWithModuleMap() { createWorkDiv(blocksPerGridAddSeg, threadsPerBlockAddSeg, elementsPerThread); SDL::addSegmentRangesToEventExplicit addSegmentRangesToEventExplicit_kernel; - auto const addSegmentRangesToEventExplicitTask(alpaka::createTaskKernel(addSegmentRangesToEventExplicit_workDiv, - addSegmentRangesToEventExplicit_kernel, - *modulesInGPU, - *segmentsInGPU, - *rangesInGPU)); + auto const addSegmentRangesToEventExplicitTask( + alpaka::createTaskKernel(addSegmentRangesToEventExplicit_workDiv, + addSegmentRangesToEventExplicit_kernel, + *Globals::modulesBuffersES->data(), + *segmentsInGPU, + *rangesInGPU)); alpaka::enqueue(queue, addSegmentRangesToEventExplicitTask); alpaka::wait(queue); @@ -544,7 +540,7 @@ void SDL::Event::createSegmentsWithModuleMap() { } } -void SDL::Event::createTriplets() { +void SDL::Event::createTriplets() { if (tripletsInGPU == nullptr) { Vec const threadsPerBlockCreateTrip = createVec(1, 1, 1024); Vec const blocksPerGridCreateTrip = createVec(1, 1, 1); @@ -552,8 +548,11 @@ void SDL::Event::createTriplets() { createWorkDiv(blocksPerGridCreateTrip, threadsPerBlockCreateTrip, elementsPerThread); SDL::createTripletArrayRanges createTripletArrayRanges_kernel; - auto const createTripletArrayRangesTask(alpaka::createTaskKernel( - createTripletArrayRanges_workDiv, createTripletArrayRanges_kernel, *modulesInGPU, *rangesInGPU, *segmentsInGPU)); + auto const createTripletArrayRangesTask(alpaka::createTaskKernel(createTripletArrayRanges_workDiv, + createTripletArrayRanges_kernel, + *Globals::modulesBuffersES->data(), + *rangesInGPU, + *segmentsInGPU)); alpaka::enqueue(queue, createTripletArrayRangesTask); alpaka::wait(queue); @@ -565,8 +564,8 @@ void SDL::Event::createTriplets() { alpaka::wait(queue); tripletsInGPU = new SDL::triplets(); - tripletsBuffers = - new SDL::tripletsBuffer(*alpaka::getPtrNative(maxTriplets_buf), nLowerModules, devAcc, queue); + tripletsBuffers = new SDL::tripletsBuffer( + *alpaka::getPtrNative(maxTriplets_buf), Globals::nLowerModules, devAcc, queue); tripletsInGPU->setData(*tripletsBuffers); alpaka::memcpy(queue, tripletsBuffers->nMemoryLocations_buf, maxTriplets_buf, 1); @@ -577,27 +576,31 @@ void SDL::Event::createTriplets() { unsigned int max_InnerSeg = 0; // Allocate host index - auto index_buf = allocBufWrapper(devHost, nLowerModules, queue); + auto index_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); uint16_t* index = alpaka::getPtrNative(index_buf); // Allocate device index - auto index_gpu_buf = allocBufWrapper(devAcc, nLowerModules, queue); + auto index_gpu_buf = allocBufWrapper(devAcc, Globals::nLowerModules, queue); // Allocate and copy nSegments from device to host - auto nSegments_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, nSegments_buf, segmentsBuffers->nSegments_buf, nLowerModules); + auto nSegments_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, nSegments_buf, segmentsBuffers->nSegments_buf, Globals::nLowerModules); alpaka::wait(queue); unsigned int* nSegments = alpaka::getPtrNative(nSegments_buf); // Allocate and copy module_nConnectedModules from device to host - auto module_nConnectedModules_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_nConnectedModules_buf, modulesBuffersES->nConnectedModules_buf, nLowerModules); + auto module_nConnectedModules_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, + module_nConnectedModules_buf, + Globals::modulesBuffersES->nConnectedModules_buf, + Globals::nLowerModules); alpaka::wait(queue); uint16_t* module_nConnectedModules = alpaka::getPtrNative(module_nConnectedModules_buf); - for (uint16_t innerLowerModuleIndex = 0; innerLowerModuleIndex < nLowerModules; innerLowerModuleIndex++) { + for (uint16_t innerLowerModuleIndex = 0; innerLowerModuleIndex < Globals::nLowerModules; + innerLowerModuleIndex++) { uint16_t nConnectedModules = module_nConnectedModules[innerLowerModuleIndex]; unsigned int nInnerSegments = nSegments[innerLowerModuleIndex]; if (nConnectedModules != 0 and nInnerSegments != 0) { @@ -619,7 +622,7 @@ void SDL::Event::createTriplets() { SDL::createTripletsInGPUv2 createTripletsInGPUv2_kernel; auto const createTripletsInGPUv2Task(alpaka::createTaskKernel(createTripletsInGPUv2_workDiv, createTripletsInGPUv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -635,11 +638,12 @@ void SDL::Event::createTriplets() { createWorkDiv(blocksPerGridAddTrip, threadsPerBlockAddTrip, elementsPerThread); SDL::addTripletRangesToEventExplicit addTripletRangesToEventExplicit_kernel; - auto const addTripletRangesToEventExplicitTask(alpaka::createTaskKernel(addTripletRangesToEventExplicit_workDiv, - addTripletRangesToEventExplicit_kernel, - *modulesInGPU, - *tripletsInGPU, - *rangesInGPU)); + auto const addTripletRangesToEventExplicitTask( + alpaka::createTaskKernel(addTripletRangesToEventExplicit_workDiv, + addTripletRangesToEventExplicit_kernel, + *Globals::modulesBuffersES->data(), + *tripletsInGPU, + *rangesInGPU)); alpaka::enqueue(queue, addTripletRangesToEventExplicitTask); alpaka::wait(queue); @@ -649,7 +653,7 @@ void SDL::Event::createTriplets() { } } -void SDL::Event::createTrackCandidates() { +void SDL::Event::createTrackCandidates() { if (trackCandidatesInGPU == nullptr) { trackCandidatesInGPU = new SDL::trackCandidates(); trackCandidatesBuffers = new SDL::trackCandidatesBuffer( @@ -671,7 +675,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanpT3 crossCleanpT3_kernel; auto const crossCleanpT3Task(alpaka::createTaskKernel(crossCleanpT3_workDiv, crossCleanpT3_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *rangesInGPU, *pixelTripletsInGPU, *segmentsInGPU, @@ -687,7 +691,7 @@ void SDL::Event::createTrackCandidates() { SDL::addpT3asTrackCandidatesInGPU addpT3asTrackCandidatesInGPU_kernel; auto const addpT3asTrackCandidatesInGPUTask(alpaka::createTaskKernel(addpT3asTrackCandidatesInGPU_workDiv, addpT3asTrackCandidatesInGPU_kernel, - nLowerModules, + Globals::nLowerModules, *pixelTripletsInGPU, *trackCandidatesInGPU, *segmentsInGPU, @@ -718,7 +722,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanT5 crossCleanT5_kernel; auto const crossCleanT5Task(alpaka::createTaskKernel(crossCleanT5_workDiv, crossCleanT5_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *quintupletsInGPU, *pixelQuintupletsInGPU, *pixelTripletsInGPU, @@ -734,7 +738,7 @@ void SDL::Event::createTrackCandidates() { SDL::addT5asTrackCandidateInGPU addT5asTrackCandidateInGPU_kernel; auto const addT5asTrackCandidateInGPUTask(alpaka::createTaskKernel(addT5asTrackCandidateInGPU_workDiv, addT5asTrackCandidateInGPU_kernel, - nLowerModules, + Globals::nLowerModules, *quintupletsInGPU, *trackCandidatesInGPU, *rangesInGPU)); @@ -748,8 +752,8 @@ void SDL::Event::createTrackCandidates() { createWorkDiv(blocksPerGridCheckHitspLS, threadsPerBlockCheckHitspLS, elementsPerThread); SDL::checkHitspLS checkHitspLS_kernel; - auto const checkHitspLSTask( - alpaka::createTaskKernel(checkHitspLS_workDiv, checkHitspLS_kernel, *modulesInGPU, *segmentsInGPU, true)); + auto const checkHitspLSTask(alpaka::createTaskKernel( + checkHitspLS_workDiv, checkHitspLS_kernel, *Globals::modulesBuffersES->data(), *segmentsInGPU, true)); alpaka::enqueue(queue, checkHitspLSTask); #endif @@ -762,7 +766,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanpLS crossCleanpLS_kernel; auto const crossCleanpLSTask(alpaka::createTaskKernel(crossCleanpLS_workDiv, crossCleanpLS_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *rangesInGPU, *pixelTripletsInGPU, *trackCandidatesInGPU, @@ -781,7 +785,7 @@ void SDL::Event::createTrackCandidates() { SDL::addpLSasTrackCandidateInGPU addpLSasTrackCandidateInGPU_kernel; auto const addpLSasTrackCandidateInGPUTask(alpaka::createTaskKernel(addpLSasTrackCandidateInGPU_workDiv, addpLSasTrackCandidateInGPU_kernel, - nLowerModules, + Globals::nLowerModules, *trackCandidatesInGPU, *segmentsInGPU)); @@ -813,7 +817,7 @@ void SDL::Event::createTrackCandidates() { } } -void SDL::Event::createPixelTriplets() { +void SDL::Event::createPixelTriplets() { if (pixelTripletsInGPU == nullptr) { pixelTripletsInGPU = new SDL::pixelTriplets(); pixelTripletsBuffers = new SDL::pixelTripletsBuffer(N_MAX_PIXEL_TRIPLETS, devAcc, queue); @@ -823,7 +827,8 @@ void SDL::Event::createPixelTriplets() { unsigned int nInnerSegments; auto nInnerSegments_src_view = alpaka::createView(devHost, &nInnerSegments, (size_t)1u); - auto dev_view_nSegments = alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)nLowerModules); + auto dev_view_nSegments = + alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)Globals::nLowerModules); alpaka::memcpy(queue, nInnerSegments_src_view, dev_view_nSegments); alpaka::wait(queue); @@ -846,9 +851,10 @@ void SDL::Event::createPixelTriplets() { unsigned int* connectedPixelIndex_host = alpaka::getPtrNative(connectedPixelIndex_host_buf); alpaka::wait(queue); - int pixelIndexOffsetPos = pixelMapping->connectedPixelsIndex[44999] + pixelMapping->connectedPixelsSizes[44999]; - int pixelIndexOffsetNeg = - pixelMapping->connectedPixelsIndexPos[44999] + pixelMapping->connectedPixelsSizes[44999] + pixelIndexOffsetPos; + int pixelIndexOffsetPos = Globals::pixelMapping->connectedPixelsIndex[44999] + + Globals::pixelMapping->connectedPixelsSizes[44999]; + int pixelIndexOffsetNeg = Globals::pixelMapping->connectedPixelsIndexPos[44999] + + Globals::pixelMapping->connectedPixelsSizes[44999] + pixelIndexOffsetPos; // TODO: check if a map/reduction to just eligible pLSs would speed up the kernel // the current selection still leaves a significant fraction of unmatchable pLSs @@ -864,19 +870,19 @@ void SDL::Event::createPixelTriplets() { // Used pixel type to select correct size-index arrays if (pixelType == 0) { connectedPixelSize_host[i] = - pixelMapping->connectedPixelsSizes[superbin]; // number of connected modules to this pixel - auto connectedIdxBase = pixelMapping->connectedPixelsIndex[superbin]; + Globals::pixelMapping->connectedPixelsSizes[superbin]; // number of connected modules to this pixel + auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndex[superbin]; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected modules for this superbin in map } else if (pixelType == 1) { connectedPixelSize_host[i] = - pixelMapping->connectedPixelsSizesPos[superbin]; // number of pixel connected modules - auto connectedIdxBase = pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; + Globals::pixelMapping->connectedPixelsSizesPos[superbin]; // number of pixel connected modules + auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected pixel modules } else if (pixelType == 2) { connectedPixelSize_host[i] = - pixelMapping->connectedPixelsSizesNeg[superbin]; // number of pixel connected modules - auto connectedIdxBase = pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; + Globals::pixelMapping->connectedPixelsSizesNeg[superbin]; // number of pixel connected modules + auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected pixel modules } } @@ -894,7 +900,7 @@ void SDL::Event::createPixelTriplets() { auto const createPixelTripletsInGPUFromMapv2Task( alpaka::createTaskKernel(createPixelTripletsInGPUFromMapv2_workDiv, createPixelTripletsInGPUFromMapv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *rangesInGPU, *mdsInGPU, *segmentsInGPU, @@ -934,7 +940,7 @@ void SDL::Event::createPixelTriplets() { alpaka::wait(queue); } -void SDL::Event::createQuintuplets() { +void SDL::Event::createQuintuplets() { Vec const threadsPerBlockCreateQuints = createVec(1, 1, 1024); Vec const blocksPerGridCreateQuints = createVec(1, 1, 1); WorkDiv const createEligibleModulesListForQuintupletsGPU_workDiv = @@ -944,7 +950,7 @@ void SDL::Event::createQuintuplets() { auto const createEligibleModulesListForQuintupletsGPUTask( alpaka::createTaskKernel(createEligibleModulesListForQuintupletsGPU_workDiv, createEligibleModulesListForQuintupletsGPU_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *tripletsInGPU, *rangesInGPU)); @@ -963,7 +969,8 @@ void SDL::Event::createQuintuplets() { if (quintupletsInGPU == nullptr) { quintupletsInGPU = new SDL::quintuplets(); - quintupletsBuffers = new SDL::quintupletsBuffer(nTotalQuintuplets, nLowerModules, devAcc, queue); + quintupletsBuffers = + new SDL::quintupletsBuffer(nTotalQuintuplets, Globals::nLowerModules, devAcc, queue); quintupletsInGPU->setData(*quintupletsBuffers); alpaka::memcpy(queue, quintupletsBuffers->nMemoryLocations_buf, nTotalQuintuplets_buf, 1); @@ -978,7 +985,7 @@ void SDL::Event::createQuintuplets() { SDL::createQuintupletsInGPUv2 createQuintupletsInGPUv2_kernel; auto const createQuintupletsInGPUv2Task(alpaka::createTaskKernel(createQuintupletsInGPUv2_workDiv, createQuintupletsInGPUv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -997,7 +1004,7 @@ void SDL::Event::createQuintuplets() { auto const removeDupQuintupletsInGPUAfterBuildTask( alpaka::createTaskKernel(removeDupQuintupletsInGPUAfterBuild_workDiv, removeDupQuintupletsInGPUAfterBuild_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *quintupletsInGPU, *rangesInGPU)); @@ -1012,7 +1019,7 @@ void SDL::Event::createQuintuplets() { auto const addQuintupletRangesToEventExplicitTask( alpaka::createTaskKernel(addQuintupletRangesToEventExplicit_workDiv, addQuintupletRangesToEventExplicit_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *quintupletsInGPU, *rangesInGPU)); @@ -1024,7 +1031,7 @@ void SDL::Event::createQuintuplets() { } } -void SDL::Event::pixelLineSegmentCleaning() { +void SDL::Event::pixelLineSegmentCleaning() { #ifndef NOPLSDUPCLEAN Vec const threadsPerBlockCheckHitspLS = createVec(1, 16, 16); Vec const blocksPerGridCheckHitspLS = createVec(1, MAX_BLOCKS * 4, MAX_BLOCKS / 4); @@ -1032,15 +1039,15 @@ void SDL::Event::pixelLineSegmentCleaning() { createWorkDiv(blocksPerGridCheckHitspLS, threadsPerBlockCheckHitspLS, elementsPerThread); SDL::checkHitspLS checkHitspLS_kernel; - auto const checkHitspLSTask( - alpaka::createTaskKernel(checkHitspLS_workDiv, checkHitspLS_kernel, *modulesInGPU, *segmentsInGPU, false)); + auto const checkHitspLSTask(alpaka::createTaskKernel( + checkHitspLS_workDiv, checkHitspLS_kernel, *Globals::modulesBuffersES->data(), *segmentsInGPU, false)); alpaka::enqueue(queue, checkHitspLSTask); alpaka::wait(queue); #endif } -void SDL::Event::createPixelQuintuplets() { +void SDL::Event::createPixelQuintuplets() { if (pixelQuintupletsInGPU == nullptr) { pixelQuintupletsInGPU = new SDL::pixelQuintuplets(); pixelQuintupletsBuffers = new SDL::pixelQuintupletsBuffer(N_MAX_PIXEL_QUINTUPLETS, devAcc, queue); @@ -1057,7 +1064,8 @@ void SDL::Event::createPixelQuintuplets() { auto nInnerSegments_src_view = alpaka::createView(devHost, &nInnerSegments, (size_t)1u); // Create a sub-view for the device buffer - auto dev_view_nSegments = alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)nLowerModules); + auto dev_view_nSegments = + alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)Globals::nLowerModules); alpaka::memcpy(queue, nInnerSegments_src_view, dev_view_nSegments); alpaka::wait(queue); @@ -1080,9 +1088,10 @@ void SDL::Event::createPixelQuintuplets() { unsigned int* connectedPixelIndex_host = alpaka::getPtrNative(connectedPixelIndex_host_buf); alpaka::wait(queue); - int pixelIndexOffsetPos = pixelMapping->connectedPixelsIndex[44999] + pixelMapping->connectedPixelsSizes[44999]; - int pixelIndexOffsetNeg = - pixelMapping->connectedPixelsIndexPos[44999] + pixelMapping->connectedPixelsSizes[44999] + pixelIndexOffsetPos; + int pixelIndexOffsetPos = Globals::pixelMapping->connectedPixelsIndex[44999] + + Globals::pixelMapping->connectedPixelsSizes[44999]; + int pixelIndexOffsetNeg = Globals::pixelMapping->connectedPixelsIndexPos[44999] + + Globals::pixelMapping->connectedPixelsSizes[44999] + pixelIndexOffsetPos; // Loop over # pLS for (unsigned int i = 0; i < nInnerSegments; i++) { @@ -1096,16 +1105,20 @@ void SDL::Event::createPixelQuintuplets() { // Used pixel type to select correct size-index arrays if (pixelType == 0) { connectedPixelSize_host[i] = - pixelMapping->connectedPixelsSizes[superbin]; //number of connected modules to this pixel - unsigned int connectedIdxBase = pixelMapping->connectedPixelsIndex[superbin]; + Globals::pixelMapping->connectedPixelsSizes[superbin]; //number of connected modules to this pixel + unsigned int connectedIdxBase = Globals::pixelMapping->connectedPixelsIndex[superbin]; connectedPixelIndex_host[i] = connectedIdxBase; } else if (pixelType == 1) { - connectedPixelSize_host[i] = pixelMapping->connectedPixelsSizesPos[superbin]; //number of pixel connected modules - unsigned int connectedIdxBase = pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; + connectedPixelSize_host[i] = + Globals::pixelMapping->connectedPixelsSizesPos[superbin]; //number of pixel connected modules + unsigned int connectedIdxBase = + Globals::pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; connectedPixelIndex_host[i] = connectedIdxBase; } else if (pixelType == 2) { - connectedPixelSize_host[i] = pixelMapping->connectedPixelsSizesNeg[superbin]; //number of pixel connected modules - unsigned int connectedIdxBase = pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; + connectedPixelSize_host[i] = + Globals::pixelMapping->connectedPixelsSizesNeg[superbin]; //number of pixel connected modules + unsigned int connectedIdxBase = + Globals::pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; connectedPixelIndex_host[i] = connectedIdxBase; } } @@ -1123,7 +1136,7 @@ void SDL::Event::createPixelQuintuplets() { auto const createPixelQuintupletsInGPUFromMapv2Task( alpaka::createTaskKernel(createPixelQuintupletsInGPUFromMapv2_workDiv, createPixelQuintupletsInGPUFromMapv2_kernel, - *modulesInGPU, + *Globals::modulesBuffersES->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -1158,7 +1171,7 @@ void SDL::Event::createPixelQuintuplets() { SDL::addpT5asTrackCandidateInGPU addpT5asTrackCandidateInGPU_kernel; auto const addpT5asTrackCandidateInGPUTask(alpaka::createTaskKernel(addpT5asTrackCandidateInGPU_workDiv, addpT5asTrackCandidateInGPU_kernel, - nLowerModules, + Globals::nLowerModules, *pixelQuintupletsInGPU, *trackCandidatesInGPU, *segmentsInGPU, @@ -1177,18 +1190,20 @@ void SDL::Event::createPixelQuintuplets() { #endif } -void SDL::Event::addMiniDoubletsToEventExplicit() { - auto nMDsCPU_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, nMDsCPU_buf, miniDoubletsBuffers->nMDs_buf, nLowerModules); +void SDL::Event::addMiniDoubletsToEventExplicit() { + auto nMDsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, nMDsCPU_buf, miniDoubletsBuffers->nMDs_buf, Globals::nLowerModules); - auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); - auto module_layers_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); - auto module_hitRanges_buf = allocBufWrapper(devHost, nLowerModules * 2, queue); - alpaka::memcpy(queue, module_hitRanges_buf, hitsBuffers->hitRanges_buf, nLowerModules * 2); + auto module_hitRanges_buf = allocBufWrapper(devHost, Globals::nLowerModules * 2, queue); + alpaka::memcpy(queue, module_hitRanges_buf, hitsBuffers->hitRanges_buf, Globals::nLowerModules * 2); alpaka::wait(queue); @@ -1197,7 +1212,7 @@ void SDL::Event::addMiniDoubletsToEventExplicit() { short* module_layers = alpaka::getPtrNative(module_layers_buf); int* module_hitRanges = alpaka::getPtrNative(module_hitRanges_buf); - for (unsigned int i = 0; i < nLowerModules; i++) { + for (unsigned int i = 0; i < Globals::nLowerModules; i++) { if (!(nMDsCPU[i] == 0 or module_hitRanges[i * 2] == -1)) { if (module_subdets[i] == Barrel) { n_minidoublets_by_layer_barrel_[module_layers[i] - 1] += nMDsCPU[i]; @@ -1208,15 +1223,17 @@ void SDL::Event::addMiniDoubletsToEventExplicit() { } } -void SDL::Event::addSegmentsToEventExplicit() { - auto nSegmentsCPU_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, nSegmentsCPU_buf, segmentsBuffers->nSegments_buf, nLowerModules); +void SDL::Event::addSegmentsToEventExplicit() { + auto nSegmentsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, nSegmentsCPU_buf, segmentsBuffers->nSegments_buf, Globals::nLowerModules); - auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); - auto module_layers_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); alpaka::wait(queue); @@ -1224,7 +1241,7 @@ void SDL::Event::addSegmentsToEventExplicit() { short* module_subdets = alpaka::getPtrNative(module_subdets_buf); short* module_layers = alpaka::getPtrNative(module_layers_buf); - for (unsigned int i = 0; i < nLowerModules; i++) { + for (unsigned int i = 0; i < Globals::nLowerModules; i++) { if (!(nSegmentsCPU[i] == 0)) { if (module_subdets[i] == Barrel) { n_segments_by_layer_barrel_[module_layers[i] - 1] += nSegmentsCPU[i]; @@ -1235,18 +1252,23 @@ void SDL::Event::addSegmentsToEventExplicit() { } } -void SDL::Event::addQuintupletsToEventExplicit() { - auto nQuintupletsCPU_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, nQuintupletsCPU_buf, quintupletsBuffers->nQuintuplets_buf, nLowerModules); +void SDL::Event::addQuintupletsToEventExplicit() { + auto nQuintupletsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, nQuintupletsCPU_buf, quintupletsBuffers->nQuintuplets_buf, Globals::nLowerModules); - auto module_subdets_buf = allocBufWrapper(devHost, nModules, queue); - alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nModules); + auto module_subdets_buf = allocBufWrapper(devHost, Globals::nModules, queue); + alpaka::memcpy( + queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nModules); - auto module_layers_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); - auto module_quintupletModuleIndices_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_quintupletModuleIndices_buf, rangesBuffers->quintupletModuleIndices_buf, nLowerModules); + auto module_quintupletModuleIndices_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, + module_quintupletModuleIndices_buf, + rangesBuffers->quintupletModuleIndices_buf, + Globals::nLowerModules); alpaka::wait(queue); @@ -1255,7 +1277,7 @@ void SDL::Event::addQuintupletsToEventExplicit() { short* module_layers = alpaka::getPtrNative(module_layers_buf); int* module_quintupletModuleIndices = alpaka::getPtrNative(module_quintupletModuleIndices_buf); - for (uint16_t i = 0; i < nLowerModules; i++) { + for (uint16_t i = 0; i < Globals::nLowerModules; i++) { if (!(nQuintupletsCPU[i] == 0 or module_quintupletModuleIndices[i] == -1)) { if (module_subdets[i] == Barrel) { n_quintuplets_by_layer_barrel_[module_layers[i] - 1] += nQuintupletsCPU[i]; @@ -1266,22 +1288,24 @@ void SDL::Event::addQuintupletsToEventExplicit() { } } -void SDL::Event::addTripletsToEventExplicit() { - auto nTripletsCPU_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, nTripletsCPU_buf, tripletsBuffers->nTriplets_buf, nLowerModules); +void SDL::Event::addTripletsToEventExplicit() { + auto nTripletsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy(queue, nTripletsCPU_buf, tripletsBuffers->nTriplets_buf, Globals::nLowerModules); - auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); - auto module_layers_buf = allocBufWrapper(devHost, nLowerModules, queue); - alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + alpaka::memcpy( + queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); alpaka::wait(queue); unsigned int* nTripletsCPU = alpaka::getPtrNative(nTripletsCPU_buf); short* module_subdets = alpaka::getPtrNative(module_subdets_buf); short* module_layers = alpaka::getPtrNative(module_layers_buf); - for (uint16_t i = 0; i < nLowerModules; i++) { + for (uint16_t i = 0; i < Globals::nLowerModules; i++) { if (nTripletsCPU[i] != 0) { if (module_subdets[i] == Barrel) { n_triplets_by_layer_barrel_[module_layers[i] - 1] += nTripletsCPU[i]; @@ -1292,7 +1316,7 @@ void SDL::Event::addTripletsToEventExplicit() { } } -unsigned int SDL::Event::getNumberOfHits() { +unsigned int SDL::Event::getNumberOfHits() { unsigned int hits = 0; for (auto& it : n_hits_by_layer_barrel_) { hits += it; @@ -1304,18 +1328,22 @@ unsigned int SDL::Event::getNumberOfHits() { return hits; } -unsigned int SDL::Event::getNumberOfHitsByLayer(unsigned int layer) { +unsigned int SDL::Event::getNumberOfHitsByLayer(unsigned int layer) { if (layer == 6) return n_hits_by_layer_barrel_[layer]; else return n_hits_by_layer_barrel_[layer] + n_hits_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfHitsByLayerBarrel(unsigned int layer) { return n_hits_by_layer_barrel_[layer]; } +unsigned int SDL::Event::getNumberOfHitsByLayerBarrel(unsigned int layer) { + return n_hits_by_layer_barrel_[layer]; +} -unsigned int SDL::Event::getNumberOfHitsByLayerEndcap(unsigned int layer) { return n_hits_by_layer_endcap_[layer]; } +unsigned int SDL::Event::getNumberOfHitsByLayerEndcap(unsigned int layer) { + return n_hits_by_layer_endcap_[layer]; +} -unsigned int SDL::Event::getNumberOfMiniDoublets() { +unsigned int SDL::Event::getNumberOfMiniDoublets() { unsigned int miniDoublets = 0; for (auto& it : n_minidoublets_by_layer_barrel_) { miniDoublets += it; @@ -1327,22 +1355,22 @@ unsigned int SDL::Event::getNumberOfMiniDoublets() { return miniDoublets; } -unsigned int SDL::Event::getNumberOfMiniDoubletsByLayer(unsigned int layer) { +unsigned int SDL::Event::getNumberOfMiniDoubletsByLayer(unsigned int layer) { if (layer == 6) return n_minidoublets_by_layer_barrel_[layer]; else return n_minidoublets_by_layer_barrel_[layer] + n_minidoublets_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfMiniDoubletsByLayerBarrel(unsigned int layer) { +unsigned int SDL::Event::getNumberOfMiniDoubletsByLayerBarrel(unsigned int layer) { return n_minidoublets_by_layer_barrel_[layer]; } -unsigned int SDL::Event::getNumberOfMiniDoubletsByLayerEndcap(unsigned int layer) { +unsigned int SDL::Event::getNumberOfMiniDoubletsByLayerEndcap(unsigned int layer) { return n_minidoublets_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfSegments() { +unsigned int SDL::Event::getNumberOfSegments() { unsigned int segments = 0; for (auto& it : n_segments_by_layer_barrel_) { segments += it; @@ -1354,22 +1382,22 @@ unsigned int SDL::Event::getNumberOfSegments() { return segments; } -unsigned int SDL::Event::getNumberOfSegmentsByLayer(unsigned int layer) { +unsigned int SDL::Event::getNumberOfSegmentsByLayer(unsigned int layer) { if (layer == 6) return n_segments_by_layer_barrel_[layer]; else return n_segments_by_layer_barrel_[layer] + n_segments_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfSegmentsByLayerBarrel(unsigned int layer) { +unsigned int SDL::Event::getNumberOfSegmentsByLayerBarrel(unsigned int layer) { return n_segments_by_layer_barrel_[layer]; } -unsigned int SDL::Event::getNumberOfSegmentsByLayerEndcap(unsigned int layer) { +unsigned int SDL::Event::getNumberOfSegmentsByLayerEndcap(unsigned int layer) { return n_segments_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfTriplets() { +unsigned int SDL::Event::getNumberOfTriplets() { unsigned int triplets = 0; for (auto& it : n_triplets_by_layer_barrel_) { triplets += it; @@ -1381,22 +1409,22 @@ unsigned int SDL::Event::getNumberOfTriplets() { return triplets; } -unsigned int SDL::Event::getNumberOfTripletsByLayer(unsigned int layer) { +unsigned int SDL::Event::getNumberOfTripletsByLayer(unsigned int layer) { if (layer == 6) return n_triplets_by_layer_barrel_[layer]; else return n_triplets_by_layer_barrel_[layer] + n_triplets_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfTripletsByLayerBarrel(unsigned int layer) { +unsigned int SDL::Event::getNumberOfTripletsByLayerBarrel(unsigned int layer) { return n_triplets_by_layer_barrel_[layer]; } -unsigned int SDL::Event::getNumberOfTripletsByLayerEndcap(unsigned int layer) { +unsigned int SDL::Event::getNumberOfTripletsByLayerEndcap(unsigned int layer) { return n_triplets_by_layer_endcap_[layer]; } -int SDL::Event::getNumberOfPixelTriplets() { +int SDL::Event::getNumberOfPixelTriplets() { auto nPixelTriplets_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nPixelTriplets_buf, pixelTripletsBuffers->nPixelTriplets_buf, 1); @@ -1407,7 +1435,7 @@ int SDL::Event::getNumberOfPixelTriplets() { return nPixelTriplets; } -int SDL::Event::getNumberOfPixelQuintuplets() { +int SDL::Event::getNumberOfPixelQuintuplets() { auto nPixelQuintuplets_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nPixelQuintuplets_buf, pixelQuintupletsBuffers->nPixelQuintuplets_buf, 1); @@ -1418,7 +1446,7 @@ int SDL::Event::getNumberOfPixelQuintuplets() { return nPixelQuintuplets; } -unsigned int SDL::Event::getNumberOfQuintuplets() { +unsigned int SDL::Event::getNumberOfQuintuplets() { unsigned int quintuplets = 0; for (auto& it : n_quintuplets_by_layer_barrel_) { quintuplets += it; @@ -1430,22 +1458,22 @@ unsigned int SDL::Event::getNumberOfQuintuplets() { return quintuplets; } -unsigned int SDL::Event::getNumberOfQuintupletsByLayer(unsigned int layer) { +unsigned int SDL::Event::getNumberOfQuintupletsByLayer(unsigned int layer) { if (layer == 6) return n_quintuplets_by_layer_barrel_[layer]; else return n_quintuplets_by_layer_barrel_[layer] + n_quintuplets_by_layer_endcap_[layer]; } -unsigned int SDL::Event::getNumberOfQuintupletsByLayerBarrel(unsigned int layer) { +unsigned int SDL::Event::getNumberOfQuintupletsByLayerBarrel(unsigned int layer) { return n_quintuplets_by_layer_barrel_[layer]; } -unsigned int SDL::Event::getNumberOfQuintupletsByLayerEndcap(unsigned int layer) { +unsigned int SDL::Event::getNumberOfQuintupletsByLayerEndcap(unsigned int layer) { return n_quintuplets_by_layer_endcap_[layer]; } -int SDL::Event::getNumberOfTrackCandidates() { +int SDL::Event::getNumberOfTrackCandidates() { auto nTrackCandidates_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nTrackCandidates_buf, trackCandidatesBuffers->nTrackCandidates_buf, 1); @@ -1456,7 +1484,7 @@ int SDL::Event::getNumberOfTrackCandidates() { return nTrackCandidates; } -int SDL::Event::getNumberOfPT5TrackCandidates() { +int SDL::Event::getNumberOfPT5TrackCandidates() { auto nTrackCandidatesPT5_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nTrackCandidatesPT5_buf, trackCandidatesBuffers->nTrackCandidatespT5_buf, 1); @@ -1467,7 +1495,7 @@ int SDL::Event::getNumberOfPT5TrackCandidates() { return nTrackCandidatesPT5; } -int SDL::Event::getNumberOfPT3TrackCandidates() { +int SDL::Event::getNumberOfPT3TrackCandidates() { auto nTrackCandidatesPT3_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nTrackCandidatesPT3_buf, trackCandidatesBuffers->nTrackCandidatespT3_buf, 1); @@ -1478,7 +1506,7 @@ int SDL::Event::getNumberOfPT3TrackCandidates() { return nTrackCandidatesPT3; } -int SDL::Event::getNumberOfPLSTrackCandidates() { +int SDL::Event::getNumberOfPLSTrackCandidates() { auto nTrackCandidatesPLS_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nTrackCandidatesPLS_buf, trackCandidatesBuffers->nTrackCandidatespLS_buf, 1); @@ -1489,7 +1517,7 @@ int SDL::Event::getNumberOfPLSTrackCandidates() { return nTrackCandidatesPLS; } -int SDL::Event::getNumberOfPixelTrackCandidates() { +int SDL::Event::getNumberOfPixelTrackCandidates() { auto nTrackCandidates_buf = allocBufWrapper(devHost, 1, queue); auto nTrackCandidatesT5_buf = allocBufWrapper(devHost, 1, queue); @@ -1503,7 +1531,7 @@ int SDL::Event::getNumberOfPixelTrackCandidates() { return nTrackCandidates - nTrackCandidatesT5; } -int SDL::Event::getNumberOfT5TrackCandidates() { +int SDL::Event::getNumberOfT5TrackCandidates() { auto nTrackCandidatesT5_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nTrackCandidatesT5_buf, trackCandidatesBuffers->nTrackCandidatesT5_buf, 1); @@ -1514,7 +1542,7 @@ int SDL::Event::getNumberOfT5TrackCandidates() { return nTrackCandidatesT5; } -SDL::hitsBuffer* SDL::Event::getHits() //std::shared_ptr should take care of garbage collection +SDL::hitsBuffer* SDL::Event::getHits() //std::shared_ptr should take care of garbage collection { if (hitsInCPU == nullptr) { auto nHits_buf = allocBufWrapper(devHost, 1, queue); @@ -1522,7 +1550,7 @@ SDL::hitsBuffer* SDL::Event::getHits() //std::shared_ptr should alpaka::wait(queue); unsigned int nHits = *alpaka::getPtrNative(nHits_buf); - hitsInCPU = new SDL::hitsBuffer(nModules, nHits, devHost, queue); + hitsInCPU = new SDL::hitsBuffer(Globals::nModules, nHits, devHost, queue); hitsInCPU->setData(*hitsInCPU); *alpaka::getPtrNative(hitsInCPU->nHits_buf) = nHits; @@ -1537,14 +1565,14 @@ SDL::hitsBuffer* SDL::Event::getHits() //std::shared_ptr should return hitsInCPU; } -SDL::hitsBuffer* SDL::Event::getHitsInCMSSW() { +SDL::hitsBuffer* SDL::Event::getHitsInCMSSW() { if (hitsInCPU == nullptr) { auto nHits_buf = allocBufWrapper(devHost, 1, queue); alpaka::memcpy(queue, nHits_buf, hitsBuffers->nHits_buf, 1); alpaka::wait(queue); unsigned int nHits = *alpaka::getPtrNative(nHits_buf); - hitsInCPU = new SDL::hitsBuffer(nModules, nHits, devHost, queue); + hitsInCPU = new SDL::hitsBuffer(Globals::nModules, nHits, devHost, queue); hitsInCPU->setData(*hitsInCPU); *alpaka::getPtrNative(hitsInCPU->nHits_buf) = nHits; @@ -1554,28 +1582,35 @@ SDL::hitsBuffer* SDL::Event::getHitsInCMSSW() { return hitsInCPU; } -SDL::objectRangesBuffer* SDL::Event::getRanges() { +SDL::objectRangesBuffer* SDL::Event::getRanges() { if (rangesInCPU == nullptr) { - rangesInCPU = new SDL::objectRangesBuffer(nModules, nLowerModules, devHost, queue); + rangesInCPU = new SDL::objectRangesBuffer( + Globals::nModules, Globals::nLowerModules, devHost, queue); rangesInCPU->setData(*rangesInCPU); - alpaka::memcpy(queue, rangesInCPU->hitRanges_buf, rangesBuffers->hitRanges_buf, 2 * nModules); - alpaka::memcpy( - queue, rangesInCPU->quintupletModuleIndices_buf, rangesBuffers->quintupletModuleIndices_buf, nLowerModules); + alpaka::memcpy(queue, rangesInCPU->hitRanges_buf, rangesBuffers->hitRanges_buf, 2 * Globals::nModules); + alpaka::memcpy(queue, + rangesInCPU->quintupletModuleIndices_buf, + rangesBuffers->quintupletModuleIndices_buf, + Globals::nLowerModules); alpaka::memcpy(queue, rangesInCPU->miniDoubletModuleIndices_buf, rangesBuffers->miniDoubletModuleIndices_buf, - nLowerModules + 1); - alpaka::memcpy( - queue, rangesInCPU->segmentModuleIndices_buf, rangesBuffers->segmentModuleIndices_buf, nLowerModules + 1); - alpaka::memcpy( - queue, rangesInCPU->tripletModuleIndices_buf, rangesBuffers->tripletModuleIndices_buf, nLowerModules); + Globals::nLowerModules + 1); + alpaka::memcpy(queue, + rangesInCPU->segmentModuleIndices_buf, + rangesBuffers->segmentModuleIndices_buf, + Globals::nLowerModules + 1); + alpaka::memcpy(queue, + rangesInCPU->tripletModuleIndices_buf, + rangesBuffers->tripletModuleIndices_buf, + Globals::nLowerModules); alpaka::wait(queue); } return rangesInCPU; } -SDL::miniDoubletsBuffer* SDL::Event::getMiniDoublets() { +SDL::miniDoubletsBuffer* SDL::Event::getMiniDoublets() { if (mdsInCPU == nullptr) { // Get nMemoryLocations parameter to initialize host based mdsInCPU auto nMemHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1583,21 +1618,24 @@ SDL::miniDoubletsBuffer* SDL::Event::getMiniDoublets() { alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - mdsInCPU = new SDL::miniDoubletsBuffer(nMemHost, nLowerModules, devHost, queue); + mdsInCPU = new SDL::miniDoubletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); mdsInCPU->setData(*mdsInCPU); *alpaka::getPtrNative(mdsInCPU->nMemoryLocations_buf) = nMemHost; alpaka::memcpy(queue, mdsInCPU->anchorHitIndices_buf, miniDoubletsBuffers->anchorHitIndices_buf, nMemHost); alpaka::memcpy(queue, mdsInCPU->outerHitIndices_buf, miniDoubletsBuffers->outerHitIndices_buf, nMemHost); alpaka::memcpy(queue, mdsInCPU->dphichanges_buf, miniDoubletsBuffers->dphichanges_buf, nMemHost); - alpaka::memcpy(queue, mdsInCPU->nMDs_buf, miniDoubletsBuffers->nMDs_buf, (nLowerModules + 1)); - alpaka::memcpy(queue, mdsInCPU->totOccupancyMDs_buf, miniDoubletsBuffers->totOccupancyMDs_buf, (nLowerModules + 1)); + alpaka::memcpy(queue, mdsInCPU->nMDs_buf, miniDoubletsBuffers->nMDs_buf, (Globals::nLowerModules + 1)); + alpaka::memcpy(queue, + mdsInCPU->totOccupancyMDs_buf, + miniDoubletsBuffers->totOccupancyMDs_buf, + (Globals::nLowerModules + 1)); alpaka::wait(queue); } return mdsInCPU; } -SDL::segmentsBuffer* SDL::Event::getSegments() { +SDL::segmentsBuffer* SDL::Event::getSegments() { if (segmentsInCPU == nullptr) { // Get nMemoryLocations parameter to initialize host based segmentsInCPU auto nMemHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1606,11 +1644,12 @@ SDL::segmentsBuffer* SDL::Event::getSegments() { unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); segmentsInCPU = new SDL::segmentsBuffer( - nMemHost, nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devHost, queue); + nMemHost, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devHost, queue); segmentsInCPU->setData(*segmentsInCPU); *alpaka::getPtrNative(segmentsInCPU->nMemoryLocations_buf) = nMemHost; - alpaka::memcpy(queue, segmentsInCPU->nSegments_buf, segmentsBuffers->nSegments_buf, (nLowerModules + 1)); + alpaka::memcpy( + queue, segmentsInCPU->nSegments_buf, segmentsBuffers->nSegments_buf, (Globals::nLowerModules + 1)); alpaka::memcpy(queue, segmentsInCPU->mdIndices_buf, segmentsBuffers->mdIndices_buf, 2 * nMemHost); alpaka::memcpy(queue, segmentsInCPU->innerMiniDoubletAnchorHitIndices_buf, @@ -1620,8 +1659,10 @@ SDL::segmentsBuffer* SDL::Event::getSegments() { segmentsInCPU->outerMiniDoubletAnchorHitIndices_buf, segmentsBuffers->outerMiniDoubletAnchorHitIndices_buf, nMemHost); - alpaka::memcpy( - queue, segmentsInCPU->totOccupancySegments_buf, segmentsBuffers->totOccupancySegments_buf, (nLowerModules + 1)); + alpaka::memcpy(queue, + segmentsInCPU->totOccupancySegments_buf, + segmentsBuffers->totOccupancySegments_buf, + (Globals::nLowerModules + 1)); alpaka::memcpy(queue, segmentsInCPU->ptIn_buf, segmentsBuffers->ptIn_buf, N_MAX_PIXEL_SEGMENTS_PER_MODULE); alpaka::memcpy(queue, segmentsInCPU->eta_buf, segmentsBuffers->eta_buf, N_MAX_PIXEL_SEGMENTS_PER_MODULE); alpaka::memcpy(queue, segmentsInCPU->phi_buf, segmentsBuffers->phi_buf, N_MAX_PIXEL_SEGMENTS_PER_MODULE); @@ -1634,7 +1675,7 @@ SDL::segmentsBuffer* SDL::Event::getSegments() { return segmentsInCPU; } -SDL::tripletsBuffer* SDL::Event::getTriplets() { +SDL::tripletsBuffer* SDL::Event::getTriplets() { if (tripletsInCPU == nullptr) { // Get nMemoryLocations parameter to initialize host based tripletsInCPU auto nMemHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1642,7 +1683,7 @@ SDL::tripletsBuffer* SDL::Event::getTriplets() { alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - tripletsInCPU = new SDL::tripletsBuffer(nMemHost, nLowerModules, devHost, queue); + tripletsInCPU = new SDL::tripletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); tripletsInCPU->setData(*tripletsInCPU); *alpaka::getPtrNative(tripletsInCPU->nMemoryLocations_buf) = nMemHost; @@ -1666,15 +1707,18 @@ SDL::tripletsBuffer* SDL::Event::getTriplets() { alpaka::memcpy(queue, tripletsInCPU->betaIn_buf, tripletsBuffers->betaIn_buf, nMemHost); alpaka::memcpy(queue, tripletsInCPU->betaOut_buf, tripletsBuffers->betaOut_buf, nMemHost); alpaka::memcpy(queue, tripletsInCPU->pt_beta_buf, tripletsBuffers->pt_beta_buf, nMemHost); - alpaka::memcpy(queue, tripletsInCPU->nTriplets_buf, tripletsBuffers->nTriplets_buf, nLowerModules); alpaka::memcpy( - queue, tripletsInCPU->totOccupancyTriplets_buf, tripletsBuffers->totOccupancyTriplets_buf, nLowerModules); + queue, tripletsInCPU->nTriplets_buf, tripletsBuffers->nTriplets_buf, Globals::nLowerModules); + alpaka::memcpy(queue, + tripletsInCPU->totOccupancyTriplets_buf, + tripletsBuffers->totOccupancyTriplets_buf, + Globals::nLowerModules); alpaka::wait(queue); } return tripletsInCPU; } -SDL::quintupletsBuffer* SDL::Event::getQuintuplets() { +SDL::quintupletsBuffer* SDL::Event::getQuintuplets() { if (quintupletsInCPU == nullptr) { // Get nMemoryLocations parameter to initialize host based quintupletsInCPU auto nMemHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1682,15 +1726,19 @@ SDL::quintupletsBuffer* SDL::Event::getQuintuplets() { alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - quintupletsInCPU = new SDL::quintupletsBuffer(nMemHost, nLowerModules, devHost, queue); + quintupletsInCPU = + new SDL::quintupletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); quintupletsInCPU->setData(*quintupletsInCPU); *alpaka::getPtrNative(quintupletsInCPU->nMemoryLocations_buf) = nMemHost; - alpaka::memcpy(queue, quintupletsInCPU->nQuintuplets_buf, quintupletsBuffers->nQuintuplets_buf, nLowerModules); + alpaka::memcpy(queue, + quintupletsInCPU->nQuintuplets_buf, + quintupletsBuffers->nQuintuplets_buf, + Globals::nLowerModules); alpaka::memcpy(queue, quintupletsInCPU->totOccupancyQuintuplets_buf, quintupletsBuffers->totOccupancyQuintuplets_buf, - nLowerModules); + Globals::nLowerModules); alpaka::memcpy(queue, quintupletsInCPU->tripletIndices_buf, quintupletsBuffers->tripletIndices_buf, 2 * nMemHost); alpaka::memcpy( queue, quintupletsInCPU->lowerModuleIndices_buf, quintupletsBuffers->lowerModuleIndices_buf, 5 * nMemHost); @@ -1710,7 +1758,7 @@ SDL::quintupletsBuffer* SDL::Event::getQuintuplets() { return quintupletsInCPU; } -SDL::pixelTripletsBuffer* SDL::Event::getPixelTriplets() { +SDL::pixelTripletsBuffer* SDL::Event::getPixelTriplets() { if (pixelTripletsInCPU == nullptr) { // Get nPixelTriplets parameter to initialize host based quintupletsInCPU auto nPixelTriplets_buf = allocBufWrapper(devHost, 1, queue); @@ -1751,7 +1799,7 @@ SDL::pixelTripletsBuffer* SDL::Event::getPixelTriplets() { return pixelTripletsInCPU; } -SDL::pixelQuintupletsBuffer* SDL::Event::getPixelQuintuplets() { +SDL::pixelQuintupletsBuffer* SDL::Event::getPixelQuintuplets() { if (pixelQuintupletsInCPU == nullptr) { // Get nPixelQuintuplets parameter to initialize host based quintupletsInCPU auto nPixelQuintuplets_buf = allocBufWrapper(devHost, 1, queue); @@ -1788,7 +1836,7 @@ SDL::pixelQuintupletsBuffer* SDL::Event::getPixelQuintuplets() { return pixelQuintupletsInCPU; } -SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidates() { +SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidates() { if (trackCandidatesInCPU == nullptr) { // Get nTrackCanHost parameter to initialize host based trackCandidatesInCPU auto nTrackCanHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1822,7 +1870,7 @@ SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidates() { return trackCandidatesInCPU; } -SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidatesInCMSSW() { +SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidatesInCMSSW() { if (trackCandidatesInCPU == nullptr) { // Get nTrackCanHost parameter to initialize host based trackCandidatesInCPU auto nTrackCanHost_buf = allocBufWrapper(devHost, 1, queue); @@ -1848,67 +1896,12 @@ SDL::trackCandidatesBuffer* SDL::Event::getTrackCandidatesInCMSS return trackCandidatesInCPU; } -SDL::modulesBuffer* SDL::Event::getFullModules() { - if (modulesInCPUFull == nullptr) { - // The last input here is just a small placeholder for the allocation. - modulesInCPUFull = new SDL::modulesBuffer(devHost, nModules, 1); - modulesInCPUFull->setData(*modulesInCPUFull); - - alpaka::memcpy(queue, modulesInCPUFull->detIds_buf, modulesBuffersES->detIds_buf, nModules); - alpaka::memcpy( - queue, modulesInCPUFull->moduleMap_buf, modulesBuffersES->moduleMap_buf, MAX_CONNECTED_MODULES * nModules); - alpaka::memcpy(queue, modulesInCPUFull->nConnectedModules_buf, modulesBuffersES->nConnectedModules_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->drdzs_buf, modulesBuffersES->drdzs_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->dxdys_buf, modulesBuffersES->dxdys_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->nLowerModules_buf, modulesBuffersES->nLowerModules_buf, 1); - alpaka::memcpy(queue, modulesInCPUFull->nModules_buf, modulesBuffersES->nModules_buf, 1); - alpaka::memcpy(queue, modulesInCPUFull->layers_buf, modulesBuffersES->layers_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->rings_buf, modulesBuffersES->rings_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->modules_buf, modulesBuffersES->modules_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->rods_buf, modulesBuffersES->rods_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->subdets_buf, modulesBuffersES->subdets_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->sides_buf, modulesBuffersES->sides_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->isInverted_buf, modulesBuffersES->isInverted_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->isLower_buf, modulesBuffersES->isLower_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->moduleType_buf, modulesBuffersES->moduleType_buf, nModules); - alpaka::memcpy(queue, modulesInCPUFull->moduleLayerType_buf, modulesBuffersES->moduleLayerType_buf, nModules); - alpaka::wait(queue); - } - return modulesInCPUFull; -} - -SDL::modulesBuffer* SDL::Event::getModules() { +SDL::modulesBuffer* SDL::Event::getModules(bool isFull) { if (modulesInCPU == nullptr) { // The last input here is just a small placeholder for the allocation. - modulesInCPU = new SDL::modulesBuffer(devHost, nModules, 1); - modulesInCPU->setData(*modulesInCPU); - - alpaka::memcpy(queue, modulesInCPU->nLowerModules_buf, modulesBuffersES->nLowerModules_buf, 1); - alpaka::memcpy(queue, modulesInCPU->nModules_buf, modulesBuffersES->nModules_buf, 1); - alpaka::memcpy(queue, modulesInCPU->detIds_buf, modulesBuffersES->detIds_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->isLower_buf, modulesBuffersES->isLower_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->layers_buf, modulesBuffersES->layers_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->subdets_buf, modulesBuffersES->subdets_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->rings_buf, modulesBuffersES->rings_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->rods_buf, modulesBuffersES->rods_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->modules_buf, modulesBuffersES->modules_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->sides_buf, modulesBuffersES->sides_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->eta_buf, modulesBuffersES->eta_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->r_buf, modulesBuffersES->r_buf, nModules); - alpaka::memcpy(queue, modulesInCPU->moduleType_buf, modulesBuffersES->moduleType_buf, nModules); - alpaka::wait(queue); + modulesInCPU = new SDL::modulesBuffer(devHost); + + modulesInCPU->copyFromSrc(queue, *Globals::modulesBuffersES, isFull); } return modulesInCPU; } - -unsigned int SDL::getBackend() { -#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED - return 0; -#elif ALPAKA_ACC_CPU_B_SEQ_T_THREADS_ENABLED - return 1; -#elif ALPAKA_ACC_GPU_CUDA_ENABLED - return 2; -#elif ALPAKA_ACC_GPU_HIP_ENABLED - return 3; -#endif -} diff --git a/SDL/Event.h b/SDL/Event.h index c8dc9793..c5f5b66c 100644 --- a/SDL/Event.h +++ b/SDL/Event.h @@ -14,7 +14,11 @@ #include "Constants.h" namespace SDL { - class Event { + template + class Event {}; + + template <> + class Event { private: QueueAcc queue; bool addObjects; @@ -61,7 +65,6 @@ namespace SDL { tripletsBuffer* tripletsInCPU; trackCandidatesBuffer* trackCandidatesInCPU; modulesBuffer* modulesInCPU; - modulesBuffer* modulesInCPUFull; quintupletsBuffer* quintupletsInCPU; pixelTripletsBuffer* pixelTripletsInCPU; pixelQuintupletsBuffer* pixelQuintupletsInCPU; @@ -106,7 +109,7 @@ namespace SDL { std::vector pixelType, std::vector isQuad); - /*functions that map the objects to the appropriate modules*/ + // functions that map the objects to the appropriate modules void addMiniDoubletsToEventExplicit(); void addSegmentsToEventExplicit(); void addTripletsToEventExplicit(); @@ -171,21 +174,12 @@ namespace SDL { trackCandidatesBuffer* getTrackCandidatesInCMSSW(); pixelTripletsBuffer* getPixelTriplets(); pixelQuintupletsBuffer* getPixelQuintuplets(); - modulesBuffer* getModules(); - modulesBuffer* getFullModules(); + modulesBuffer* getModules(bool isFull = false); + + //read from file and init + static void initModules(const MapPLStoLayer& pLStoLayer, + const char* moduleMetaDataFilePath = "data/OT800_IT615_pt0.8/sensor_centroids.txt"); }; - //global stuff - extern SDL::modules* modulesInGPU; - extern SDL::modulesBuffer* modulesBuffers; - extern SDL::modulesBuffer const* modulesBuffersES; // not owned const buffers - extern uint16_t nModules; - extern uint16_t nLowerModules; - void initModules( - const char* moduleMetaDataFilePath = "data/OT800_IT615_pt0.8/sensor_centroids.txt"); //read from file and init - void freeModules(); - void initModulesHost(); //read from file and init - extern std::shared_ptr pixelMapping; - unsigned int getBackend(); } // namespace SDL #endif diff --git a/SDL/Globals.cc b/SDL/Globals.cc new file mode 100644 index 00000000..a3431175 --- /dev/null +++ b/SDL/Globals.cc @@ -0,0 +1,27 @@ +#include "Globals.h" + +SDL::modulesBuffer* SDL::Globals::modulesBuffers = nullptr; +SDL::modulesBuffer const* SDL::Globals::modulesBuffersES = nullptr; +std::shared_ptr SDL::Globals::pixelMapping = nullptr; +uint16_t SDL::Globals::nModules; +uint16_t SDL::Globals::nLowerModules; + +SDL::EndcapGeometry* SDL::Globals::endcapGeometry = new SDL::EndcapGeometry(); + +SDL::TiltedGeometry SDL::Globals::tiltedGeometry; +SDL::ModuleConnectionMap SDL::Globals::moduleConnectionMap; + +void SDL::Globals::freeEndcap() { + if (endcapGeometry != nullptr) { + delete endcapGeometry; + endcapGeometry = nullptr; + } +} + +// Temporary solution to the global variables. Should be freed with shared_ptr. +void SDL::Globals::freeModules() { + if (modulesBuffers != nullptr) { + delete modulesBuffers; + modulesBuffers = nullptr; + } +} diff --git a/SDL/Globals.h b/SDL/Globals.h new file mode 100644 index 00000000..4aa5f95c --- /dev/null +++ b/SDL/Globals.h @@ -0,0 +1,32 @@ +#ifndef Globals_h +#define Globals_h + +#include "Constants.h" +#include "Module.h" +#include "TiltedGeometry.h" +#include "EndcapGeometry.h" +#include "ModuleConnectionMap.h" +#include "PixelMap.h" + +namespace SDL { + template + struct Globals; + template <> + struct Globals { + static SDL::modulesBuffer* modulesBuffers; + static SDL::modulesBuffer const* modulesBuffersES; // not owned const buffers + static uint16_t nModules; + static uint16_t nLowerModules; + static std::shared_ptr pixelMapping; + + static EndcapGeometry* endcapGeometry; + static TiltedGeometry tiltedGeometry; + static ModuleConnectionMap moduleConnectionMap; + + static void freeEndcap(); + static void freeModules(); + }; + +} // namespace SDL + +#endif diff --git a/SDL/LST.cc b/SDL/LST.cc index 38c5e8ef..73a754f2 100644 --- a/SDL/LST.cc +++ b/SDL/LST.cc @@ -1,82 +1,262 @@ #include "LST.h" +#include "Event.h" +#include "Globals.h" + +#include "Math/Vector3D.h" +using XYZVector = ROOT::Math::XYZVector; namespace { - TString trackLooperDir() { return getenv("LST_BASE"); } + std::string trackLooperDir() { return getenv("LST_BASE"); } - TString get_absolute_path_after_check_file_exists(const std::string name) { + std::string get_absolute_path_after_check_file_exists(const std::string name) { std::filesystem::path fullpath = std::filesystem::absolute(name.c_str()); if (not std::filesystem::exists(fullpath)) { std::cout << "ERROR: Could not find the file = " << fullpath << std::endl; exit(2); } - return TString(fullpath.string().c_str()); + return fullpath.string(); } - void loadMaps() { + void loadMaps(SDL::MapPLStoLayer& pLStoLayer) { // Module orientation information (DrDz or phi angles) - TString endcap_geom = get_absolute_path_after_check_file_exists( - TString::Format("%s/data/OT800_IT615_pt0.8/endcap_orientation.txt", trackLooperDir().Data()).Data()); - TString tilted_geom = get_absolute_path_after_check_file_exists( - TString::Format("%s/data/OT800_IT615_pt0.8/tilted_barrel_orientation.txt", trackLooperDir().Data()).Data()); - SDL::endcapGeometry->load(endcap_geom.Data()); // centroid values added to the map - SDL::tiltedGeometry.load(tilted_geom.Data()); + auto endcap_geom = + get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/endcap_orientation.txt"); + auto tilted_geom = get_absolute_path_after_check_file_exists( + trackLooperDir() + "/data/OT800_IT615_pt0.8/tilted_barrel_orientation.txt"); + SDL::Globals::endcapGeometry->load(endcap_geom); // centroid values added to the map + SDL::Globals::tiltedGeometry.load(tilted_geom); // Module connection map (for line segment building) - TString mappath = get_absolute_path_after_check_file_exists( - TString::Format("%s/data/OT800_IT615_pt0.8/module_connection_tracing_merged.txt", trackLooperDir().Data()) - .Data()); - SDL::moduleConnectionMap.load(mappath.Data()); + auto mappath = get_absolute_path_after_check_file_exists( + trackLooperDir() + "/data/OT800_IT615_pt0.8/module_connection_tracing_merged.txt"); + SDL::Globals::moduleConnectionMap.load(mappath); - TString pLSMapDir = trackLooperDir() + "/data/OT800_IT615_pt0.8/pixelmap/pLS_map"; - std::string connects[] = {"_layer1_subdet5", "_layer2_subdet5", "_layer1_subdet4", "_layer2_subdet4"}; - TString path; + auto pLSMapDir = trackLooperDir() + "/data/OT800_IT615_pt0.8/pixelmap/pLS_map"; + const std::array connects{ + {"_layer1_subdet5", "_layer2_subdet5", "_layer1_subdet4", "_layer2_subdet4"}}; + std::string path; - for (std::string& connect : connects) { - auto connectData = connect.data(); + static_assert(connects.size() == std::tuple_size>{}); + for (unsigned int i = 0; i < connects.size(); i++) { + auto connectData = connects[i].data(); - path = TString::Format("%s%s.txt", pLSMapDir.Data(), connectData).Data(); - SDL::moduleConnectionMap_pLStoLayer.emplace_back( - SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path.Data()).Data())); + path = pLSMapDir + connectData + ".txt"; + pLStoLayer[0][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); - path = TString::Format("%s_pos%s.txt", pLSMapDir.Data(), connectData).Data(); - SDL::moduleConnectionMap_pLStoLayer_pos.emplace_back( - SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path.Data()).Data())); + path = pLSMapDir + "_pos" + connectData + ".txt"; + pLStoLayer[1][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); - path = TString::Format("%s_neg%s.txt", pLSMapDir.Data(), connectData).Data(); - SDL::moduleConnectionMap_pLStoLayer_neg.emplace_back( - SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path.Data()).Data())); + path = pLSMapDir + "_neg" + connectData + ".txt"; + pLStoLayer[2][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); } } } // namespace -void SDL::LST::loadAndFillES(alpaka::QueueCpuBlocking& queue, struct modulesBuffer* modules) { - ::loadMaps(); +void SDL::LST::loadAndFillES(alpaka::QueueCpuBlocking& queue, struct modulesBuffer* modules) { + SDL::MapPLStoLayer pLStoLayer; + ::loadMaps(pLStoLayer); + + auto path = + get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/sensor_centroids.txt"); + if (SDL::Globals::modulesBuffers == nullptr) { + SDL::Globals::modulesBuffers = new SDL::modulesBuffer(SDL::devAcc); + } + if (SDL::Globals::pixelMapping == nullptr) { + SDL::Globals::pixelMapping = std::make_shared(); + } + SDL::loadModulesFromFile(modules, + SDL::Globals::nModules, + SDL::Globals::nLowerModules, + *SDL::Globals::pixelMapping, + queue, + path.c_str(), + pLStoLayer); +} + +void SDL::LST::run(SDL::QueueAcc& queue, + const SDL::modulesBuffer* modules, + bool verbose, + const std::vector see_px, + const std::vector see_py, + const std::vector see_pz, + const std::vector see_dxy, + const std::vector see_dz, + const std::vector see_ptErr, + const std::vector see_etaErr, + const std::vector see_stateTrajGlbX, + const std::vector see_stateTrajGlbY, + const std::vector see_stateTrajGlbZ, + const std::vector see_stateTrajGlbPx, + const std::vector see_stateTrajGlbPy, + const std::vector see_stateTrajGlbPz, + const std::vector see_q, + const std::vector> see_hitIdx, + const std::vector ph2_detId, + const std::vector ph2_x, + const std::vector ph2_y, + const std::vector ph2_z) { + SDL::Globals::modulesBuffersES = modules; + auto event = SDL::Event(verbose, queue); + prepareInput(see_px, + see_py, + see_pz, + see_dxy, + see_dz, + see_ptErr, + see_etaErr, + see_stateTrajGlbX, + see_stateTrajGlbY, + see_stateTrajGlbZ, + see_stateTrajGlbPx, + see_stateTrajGlbPy, + see_stateTrajGlbPz, + see_q, + see_hitIdx, + ph2_detId, + ph2_x, + ph2_y, + ph2_z); + + event.addHitToEvent(in_trkX_, in_trkY_, in_trkZ_, in_hitId_, in_hitIdxs_); + event.addPixelSegmentToEvent(in_hitIndices_vec0_, + in_hitIndices_vec1_, + in_hitIndices_vec2_, + in_hitIndices_vec3_, + in_deltaPhi_vec_, + in_ptIn_vec_, + in_ptErr_vec_, + in_px_vec_, + in_py_vec_, + in_pz_vec_, + in_eta_vec_, + in_etaErr_vec_, + in_phi_vec_, + in_charge_vec_, + in_seedIdx_vec_, + in_superbin_vec_, + in_pixelType_vec_, + in_isQuad_vec_); + event.createMiniDoublets(); + if (verbose) { + printf("# of Mini-doublets produced: %d\n", event.getNumberOfMiniDoublets()); + printf("# of Mini-doublets produced barrel layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(0)); + printf("# of Mini-doublets produced barrel layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(1)); + printf("# of Mini-doublets produced barrel layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(2)); + printf("# of Mini-doublets produced barrel layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(3)); + printf("# of Mini-doublets produced barrel layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(4)); + printf("# of Mini-doublets produced barrel layer 6: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(5)); + printf("# of Mini-doublets produced endcap layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(0)); + printf("# of Mini-doublets produced endcap layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(1)); + printf("# of Mini-doublets produced endcap layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(2)); + printf("# of Mini-doublets produced endcap layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(3)); + printf("# of Mini-doublets produced endcap layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(4)); + } + + event.createSegmentsWithModuleMap(); + if (verbose) { + printf("# of Segments produced: %d\n", event.getNumberOfSegments()); + printf("# of Segments produced layer 1-2: %d\n", event.getNumberOfSegmentsByLayerBarrel(0)); + printf("# of Segments produced layer 2-3: %d\n", event.getNumberOfSegmentsByLayerBarrel(1)); + printf("# of Segments produced layer 3-4: %d\n", event.getNumberOfSegmentsByLayerBarrel(2)); + printf("# of Segments produced layer 4-5: %d\n", event.getNumberOfSegmentsByLayerBarrel(3)); + printf("# of Segments produced layer 5-6: %d\n", event.getNumberOfSegmentsByLayerBarrel(4)); + printf("# of Segments produced endcap layer 1: %d\n", event.getNumberOfSegmentsByLayerEndcap(0)); + printf("# of Segments produced endcap layer 2: %d\n", event.getNumberOfSegmentsByLayerEndcap(1)); + printf("# of Segments produced endcap layer 3: %d\n", event.getNumberOfSegmentsByLayerEndcap(2)); + printf("# of Segments produced endcap layer 4: %d\n", event.getNumberOfSegmentsByLayerEndcap(3)); + printf("# of Segments produced endcap layer 5: %d\n", event.getNumberOfSegmentsByLayerEndcap(4)); + } + + event.createTriplets(); + if (verbose) { + printf("# of T3s produced: %d\n", event.getNumberOfTriplets()); + printf("# of T3s produced layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerBarrel(0)); + printf("# of T3s produced layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerBarrel(1)); + printf("# of T3s produced layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerBarrel(2)); + printf("# of T3s produced layer 4-5-6: %d\n", event.getNumberOfTripletsByLayerBarrel(3)); + printf("# of T3s produced endcap layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerEndcap(0)); + printf("# of T3s produced endcap layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerEndcap(1)); + printf("# of T3s produced endcap layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerEndcap(2)); + printf("# of T3s produced endcap layer 1: %d\n", event.getNumberOfTripletsByLayerEndcap(0)); + printf("# of T3s produced endcap layer 2: %d\n", event.getNumberOfTripletsByLayerEndcap(1)); + printf("# of T3s produced endcap layer 3: %d\n", event.getNumberOfTripletsByLayerEndcap(2)); + printf("# of T3s produced endcap layer 4: %d\n", event.getNumberOfTripletsByLayerEndcap(3)); + printf("# of T3s produced endcap layer 5: %d\n", event.getNumberOfTripletsByLayerEndcap(4)); + } + + event.createQuintuplets(); + if (verbose) { + printf("# of Quintuplets produced: %d\n", event.getNumberOfQuintuplets()); + printf("# of Quintuplets produced layer 1-2-3-4-5-6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(0)); + printf("# of Quintuplets produced layer 2: %d\n", event.getNumberOfQuintupletsByLayerBarrel(1)); + printf("# of Quintuplets produced layer 3: %d\n", event.getNumberOfQuintupletsByLayerBarrel(2)); + printf("# of Quintuplets produced layer 4: %d\n", event.getNumberOfQuintupletsByLayerBarrel(3)); + printf("# of Quintuplets produced layer 5: %d\n", event.getNumberOfQuintupletsByLayerBarrel(4)); + printf("# of Quintuplets produced layer 6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(5)); + printf("# of Quintuplets produced endcap layer 1: %d\n", event.getNumberOfQuintupletsByLayerEndcap(0)); + printf("# of Quintuplets produced endcap layer 2: %d\n", event.getNumberOfQuintupletsByLayerEndcap(1)); + printf("# of Quintuplets produced endcap layer 3: %d\n", event.getNumberOfQuintupletsByLayerEndcap(2)); + printf("# of Quintuplets produced endcap layer 4: %d\n", event.getNumberOfQuintupletsByLayerEndcap(3)); + printf("# of Quintuplets produced endcap layer 5: %d\n", event.getNumberOfQuintupletsByLayerEndcap(4)); + } + + event.pixelLineSegmentCleaning(); + + event.createPixelQuintuplets(); + if (verbose) + printf("# of Pixel Quintuplets produced: %d\n", event.getNumberOfPixelQuintuplets()); - TString path = get_absolute_path_after_check_file_exists( - TString::Format("%s/data/OT800_IT615_pt0.8/sensor_centroids.txt", trackLooperDir().Data()).Data()); - SDL::loadModulesFromFile(modules, SDL::nModules, SDL::nLowerModules, *SDL::pixelMapping, queue, path.Data()); + event.createPixelTriplets(); + if (verbose) + printf("# of Pixel T3s produced: %d\n", event.getNumberOfPixelTriplets()); + + event.createTrackCandidates(); + if (verbose) { + printf("# of TrackCandidates produced: %d\n", event.getNumberOfTrackCandidates()); + printf(" # of Pixel TrackCandidates produced: %d\n", event.getNumberOfPixelTrackCandidates()); + printf(" # of pT5 TrackCandidates produced: %d\n", event.getNumberOfPT5TrackCandidates()); + printf(" # of pT3 TrackCandidates produced: %d\n", event.getNumberOfPT3TrackCandidates()); + printf(" # of pLS TrackCandidates produced: %d\n", event.getNumberOfPLSTrackCandidates()); + printf(" # of T5 TrackCandidates produced: %d\n", event.getNumberOfT5TrackCandidates()); + } + + getOutput(event); + + event.resetEvent(); } -void SDL::LST::prepareInput(const std::vector see_px, - const std::vector see_py, - const std::vector see_pz, - const std::vector see_dxy, - const std::vector see_dz, - const std::vector see_ptErr, - const std::vector see_etaErr, - const std::vector see_stateTrajGlbX, - const std::vector see_stateTrajGlbY, - const std::vector see_stateTrajGlbZ, - const std::vector see_stateTrajGlbPx, - const std::vector see_stateTrajGlbPy, - const std::vector see_stateTrajGlbPz, - const std::vector see_q, - const std::vector> see_hitIdx, - const std::vector ph2_detId, - const std::vector ph2_x, - const std::vector ph2_y, - const std::vector ph2_z) { +namespace { + XYZVector calculateR3FromPCA(const XYZVector& p3, const float dxy, const float dz) { + const float pt = p3.rho(); + const float p = p3.r(); + const float vz = dz * pt * pt / p / p; + + const float vx = -dxy * p3.y() / pt - p3.x() / p * p3.z() / p * dz; + const float vy = dxy * p3.x() / pt - p3.y() / p * p3.z() / p * dz; + return {vx, vy, vz}; + } +} // namespace + +void SDL::LST::prepareInput(const std::vector see_px, + const std::vector see_py, + const std::vector see_pz, + const std::vector see_dxy, + const std::vector see_dz, + const std::vector see_ptErr, + const std::vector see_etaErr, + const std::vector see_stateTrajGlbX, + const std::vector see_stateTrajGlbY, + const std::vector see_stateTrajGlbZ, + const std::vector see_stateTrajGlbPx, + const std::vector see_stateTrajGlbPy, + const std::vector see_stateTrajGlbPz, + const std::vector see_q, + const std::vector> see_hitIdx, + const std::vector ph2_detId, + const std::vector ph2_x, + const std::vector ph2_y, + const std::vector ph2_z) { unsigned int count = 0; auto n_see = see_stateTrajGlbPx.size(); std::vector px_vec; @@ -122,22 +302,22 @@ void SDL::LST::prepareInput(const std::vector see_px, const int hit_size = trkX.size(); for (size_t iSeed = 0; iSeed < n_see; iSeed++) { - ROOT::Math::PxPyPzMVector p3LH(see_stateTrajGlbPx[iSeed], see_stateTrajGlbPy[iSeed], see_stateTrajGlbPz[iSeed], 0); - ROOT::Math::XYZVector p3LH_helper(see_stateTrajGlbPx[iSeed], see_stateTrajGlbPy[iSeed], see_stateTrajGlbPz[iSeed]); - float ptIn = p3LH.Pt(); - float eta = p3LH.Eta(); + XYZVector p3LH(see_stateTrajGlbPx[iSeed], see_stateTrajGlbPy[iSeed], see_stateTrajGlbPz[iSeed]); + XYZVector p3LH_helper(see_stateTrajGlbPx[iSeed], see_stateTrajGlbPy[iSeed], see_stateTrajGlbPz[iSeed]); + float ptIn = p3LH.rho(); + float eta = p3LH.eta(); float ptErr = see_ptErr[iSeed]; if ((ptIn > 0.8 - 2 * ptErr)) { - ROOT::Math::XYZVector r3LH(see_stateTrajGlbX[iSeed], see_stateTrajGlbY[iSeed], see_stateTrajGlbZ[iSeed]); - ROOT::Math::PxPyPzMVector p3PCA(see_px[iSeed], see_py[iSeed], see_pz[iSeed], 0); - ROOT::Math::XYZVector r3PCA(calculateR3FromPCA(p3PCA, see_dxy[iSeed], see_dz[iSeed])); + XYZVector r3LH(see_stateTrajGlbX[iSeed], see_stateTrajGlbY[iSeed], see_stateTrajGlbZ[iSeed]); + XYZVector p3PCA(see_px[iSeed], see_py[iSeed], see_pz[iSeed]); + XYZVector r3PCA(calculateR3FromPCA(p3PCA, see_dxy[iSeed], see_dz[iSeed])); - float pixelSegmentDeltaPhiChange = (r3LH - p3LH_helper).Phi(); + float pixelSegmentDeltaPhiChange = (r3LH - p3LH_helper).phi(); //FIXME: this looks like a bug float etaErr = see_etaErr[iSeed]; - float px = p3LH.Px(); - float py = p3LH.Py(); - float pz = p3LH.Pz(); + float px = p3LH.x(); + float py = p3LH.y(); + float pz = p3LH.z(); int charge = see_q[iSeed]; int pixtype = -1; @@ -166,22 +346,22 @@ void SDL::LST::prepareInput(const std::vector see_px, count++; } - trkX.push_back(r3PCA.X()); - trkY.push_back(r3PCA.Y()); - trkZ.push_back(r3PCA.Z()); - trkX.push_back(p3PCA.Pt()); - float p3PCA_Eta = p3PCA.Eta(); + trkX.push_back(r3PCA.x()); + trkY.push_back(r3PCA.y()); + trkZ.push_back(r3PCA.z()); + trkX.push_back(p3PCA.rho()); + float p3PCA_Eta = p3PCA.eta(); trkY.push_back(p3PCA_Eta); - float p3PCA_Phi = p3PCA.Phi(); + float p3PCA_Phi = p3PCA.phi(); trkZ.push_back(p3PCA_Phi); - trkX.push_back(r3LH.X()); - trkY.push_back(r3LH.Y()); - trkZ.push_back(r3LH.Z()); + trkX.push_back(r3LH.x()); + trkY.push_back(r3LH.y()); + trkZ.push_back(r3LH.z()); hitId.push_back(1); hitId.push_back(1); hitId.push_back(1); if (see_hitIdx[iSeed].size() > 3) { - trkX.push_back(r3LH.X()); + trkX.push_back(r3LH.x()); trkY.push_back(see_dxy[iSeed]); trkZ.push_back(see_dz[iSeed]); hitId.push_back(1); @@ -198,7 +378,7 @@ void SDL::LST::prepareInput(const std::vector see_px, ptErr_vec.push_back(ptErr); etaErr_vec.push_back(etaErr); eta_vec.push_back(eta); - float phi = p3LH.Phi(); + float phi = p3LH.phi(); phi_vec.push_back(phi); charge_vec.push_back(charge); seedIdx_vec.push_back(iSeed); @@ -250,23 +430,11 @@ void SDL::LST::prepareInput(const std::vector see_px, in_isQuad_vec_ = isQuad_vec; } -ROOT::Math::XYZVector SDL::LST::calculateR3FromPCA(const ROOT::Math::PxPyPzMVector& p3, - const float dxy, - const float dz) { - const float pt = p3.Pt(); - const float p = p3.P(); - const float vz = dz * pt * pt / p / p; - - const float vx = -dxy * p3.y() / pt - p3.x() / p * p3.z() / p * dz; - const float vy = dxy * p3.x() / pt - p3.y() / p * p3.z() / p * dz; - return ROOT::Math::XYZVector(vx, vy, vz); -} - -void SDL::LST::getOutput(SDL::Event& event) { - std::vector> tc_hitIdxs_; - std::vector tc_len_; - std::vector tc_seedIdx_; - std::vector tc_trackCandidateType_; +void SDL::LST::getOutput(SDL::Event& event) { + std::vector> tc_hitIdxs; + std::vector tc_len; + std::vector tc_seedIdx; + std::vector tc_trackCandidateType; SDL::hitsBuffer& hitsInGPU = (*event.getHitsInCMSSW()); SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event.getTrackCandidatesInCMSSW()); @@ -277,22 +445,22 @@ void SDL::LST::getOutput(SDL::Event& event) { std::vector hit_idx = getHitIdxs(trackCandidateType, idx, trackCandidatesInGPU.hitIndices, hitsInGPU.idxs); - tc_hitIdxs_.push_back(hit_idx); - tc_len_.push_back(hit_idx.size()); - tc_seedIdx_.push_back(trackCandidatesInGPU.pixelSeedIndex[idx]); - tc_trackCandidateType_.push_back(trackCandidateType); + tc_hitIdxs.push_back(hit_idx); + tc_len.push_back(hit_idx.size()); + tc_seedIdx.push_back(trackCandidatesInGPU.pixelSeedIndex[idx]); + tc_trackCandidateType.push_back(trackCandidateType); } - out_tc_hitIdxs_ = tc_hitIdxs_; - out_tc_len_ = tc_len_; - out_tc_seedIdx_ = tc_seedIdx_; - out_tc_trackCandidateType_ = tc_trackCandidateType_; + out_tc_hitIdxs_ = tc_hitIdxs; + out_tc_len_ = tc_len; + out_tc_seedIdx_ = tc_seedIdx; + out_tc_trackCandidateType_ = tc_trackCandidateType; } -std::vector SDL::LST::getHitIdxs(const short trackCandidateType, - const unsigned int TCIdx, - const unsigned int* TCHitIndices, - const unsigned int* hitIndices) { +std::vector SDL::LST::getHitIdxs(const short trackCandidateType, + const unsigned int TCIdx, + const unsigned int* TCHitIndices, + const unsigned int* hitIndices) { std::vector hits; unsigned int maxNHits = 0; diff --git a/SDL/LST.h b/SDL/LST.h index 585e9ae8..b8a2da41 100644 --- a/SDL/LST.h +++ b/SDL/LST.h @@ -1,26 +1,33 @@ #ifndef LST_H #define LST_H +#include "Constants.h" + #include #include #include #include +#include + +namespace SDL { + template + class Event; -#include "TString.h" -#include "Math/Vector3D.h" -#include + template + struct modulesBuffer; -#include "Event.h" + template + class LST; -namespace SDL { - class LST { + template <> + class LST { public: LST() = default; static void loadAndFillES(alpaka::QueueCpuBlocking& queue, struct modulesBuffer* modules); - template - void run(TQueue& queue, + void run(SDL::QueueAcc& queue, + const SDL::modulesBuffer* modules, bool verbose, const std::vector see_px, const std::vector see_py, @@ -40,135 +47,7 @@ namespace SDL { const std::vector ph2_detId, const std::vector ph2_x, const std::vector ph2_y, - const std::vector ph2_z) { - auto event = SDL::Event(verbose, queue); - prepareInput(see_px, - see_py, - see_pz, - see_dxy, - see_dz, - see_ptErr, - see_etaErr, - see_stateTrajGlbX, - see_stateTrajGlbY, - see_stateTrajGlbZ, - see_stateTrajGlbPx, - see_stateTrajGlbPy, - see_stateTrajGlbPz, - see_q, - see_hitIdx, - ph2_detId, - ph2_x, - ph2_y, - ph2_z); - - event.addHitToEvent(in_trkX_, in_trkY_, in_trkZ_, in_hitId_, in_hitIdxs_); - event.addPixelSegmentToEvent(in_hitIndices_vec0_, - in_hitIndices_vec1_, - in_hitIndices_vec2_, - in_hitIndices_vec3_, - in_deltaPhi_vec_, - in_ptIn_vec_, - in_ptErr_vec_, - in_px_vec_, - in_py_vec_, - in_pz_vec_, - in_eta_vec_, - in_etaErr_vec_, - in_phi_vec_, - in_charge_vec_, - in_seedIdx_vec_, - in_superbin_vec_, - in_pixelType_vec_, - in_isQuad_vec_); - event.createMiniDoublets(); - if (verbose) { - printf("# of Mini-doublets produced: %d\n", event.getNumberOfMiniDoublets()); - printf("# of Mini-doublets produced barrel layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(0)); - printf("# of Mini-doublets produced barrel layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(1)); - printf("# of Mini-doublets produced barrel layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(2)); - printf("# of Mini-doublets produced barrel layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(3)); - printf("# of Mini-doublets produced barrel layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(4)); - printf("# of Mini-doublets produced barrel layer 6: %d\n", event.getNumberOfMiniDoubletsByLayerBarrel(5)); - printf("# of Mini-doublets produced endcap layer 1: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(0)); - printf("# of Mini-doublets produced endcap layer 2: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(1)); - printf("# of Mini-doublets produced endcap layer 3: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(2)); - printf("# of Mini-doublets produced endcap layer 4: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(3)); - printf("# of Mini-doublets produced endcap layer 5: %d\n", event.getNumberOfMiniDoubletsByLayerEndcap(4)); - } - - event.createSegmentsWithModuleMap(); - if (verbose) { - printf("# of Segments produced: %d\n", event.getNumberOfSegments()); - printf("# of Segments produced layer 1-2: %d\n", event.getNumberOfSegmentsByLayerBarrel(0)); - printf("# of Segments produced layer 2-3: %d\n", event.getNumberOfSegmentsByLayerBarrel(1)); - printf("# of Segments produced layer 3-4: %d\n", event.getNumberOfSegmentsByLayerBarrel(2)); - printf("# of Segments produced layer 4-5: %d\n", event.getNumberOfSegmentsByLayerBarrel(3)); - printf("# of Segments produced layer 5-6: %d\n", event.getNumberOfSegmentsByLayerBarrel(4)); - printf("# of Segments produced endcap layer 1: %d\n", event.getNumberOfSegmentsByLayerEndcap(0)); - printf("# of Segments produced endcap layer 2: %d\n", event.getNumberOfSegmentsByLayerEndcap(1)); - printf("# of Segments produced endcap layer 3: %d\n", event.getNumberOfSegmentsByLayerEndcap(2)); - printf("# of Segments produced endcap layer 4: %d\n", event.getNumberOfSegmentsByLayerEndcap(3)); - printf("# of Segments produced endcap layer 5: %d\n", event.getNumberOfSegmentsByLayerEndcap(4)); - } - - event.createTriplets(); - if (verbose) { - printf("# of T3s produced: %d\n", event.getNumberOfTriplets()); - printf("# of T3s produced layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerBarrel(0)); - printf("# of T3s produced layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerBarrel(1)); - printf("# of T3s produced layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerBarrel(2)); - printf("# of T3s produced layer 4-5-6: %d\n", event.getNumberOfTripletsByLayerBarrel(3)); - printf("# of T3s produced endcap layer 1-2-3: %d\n", event.getNumberOfTripletsByLayerEndcap(0)); - printf("# of T3s produced endcap layer 2-3-4: %d\n", event.getNumberOfTripletsByLayerEndcap(1)); - printf("# of T3s produced endcap layer 3-4-5: %d\n", event.getNumberOfTripletsByLayerEndcap(2)); - printf("# of T3s produced endcap layer 1: %d\n", event.getNumberOfTripletsByLayerEndcap(0)); - printf("# of T3s produced endcap layer 2: %d\n", event.getNumberOfTripletsByLayerEndcap(1)); - printf("# of T3s produced endcap layer 3: %d\n", event.getNumberOfTripletsByLayerEndcap(2)); - printf("# of T3s produced endcap layer 4: %d\n", event.getNumberOfTripletsByLayerEndcap(3)); - printf("# of T3s produced endcap layer 5: %d\n", event.getNumberOfTripletsByLayerEndcap(4)); - } - - event.createQuintuplets(); - if (verbose) { - printf("# of Quintuplets produced: %d\n", event.getNumberOfQuintuplets()); - printf("# of Quintuplets produced layer 1-2-3-4-5-6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(0)); - printf("# of Quintuplets produced layer 2: %d\n", event.getNumberOfQuintupletsByLayerBarrel(1)); - printf("# of Quintuplets produced layer 3: %d\n", event.getNumberOfQuintupletsByLayerBarrel(2)); - printf("# of Quintuplets produced layer 4: %d\n", event.getNumberOfQuintupletsByLayerBarrel(3)); - printf("# of Quintuplets produced layer 5: %d\n", event.getNumberOfQuintupletsByLayerBarrel(4)); - printf("# of Quintuplets produced layer 6: %d\n", event.getNumberOfQuintupletsByLayerBarrel(5)); - printf("# of Quintuplets produced endcap layer 1: %d\n", event.getNumberOfQuintupletsByLayerEndcap(0)); - printf("# of Quintuplets produced endcap layer 2: %d\n", event.getNumberOfQuintupletsByLayerEndcap(1)); - printf("# of Quintuplets produced endcap layer 3: %d\n", event.getNumberOfQuintupletsByLayerEndcap(2)); - printf("# of Quintuplets produced endcap layer 4: %d\n", event.getNumberOfQuintupletsByLayerEndcap(3)); - printf("# of Quintuplets produced endcap layer 5: %d\n", event.getNumberOfQuintupletsByLayerEndcap(4)); - } - - event.pixelLineSegmentCleaning(); - - event.createPixelQuintuplets(); - if (verbose) - printf("# of Pixel Quintuplets produced: %d\n", event.getNumberOfPixelQuintuplets()); - - event.createPixelTriplets(); - if (verbose) - printf("# of Pixel T3s produced: %d\n", event.getNumberOfPixelTriplets()); - - event.createTrackCandidates(); - if (verbose) { - printf("# of TrackCandidates produced: %d\n", event.getNumberOfTrackCandidates()); - printf(" # of Pixel TrackCandidates produced: %d\n", event.getNumberOfPixelTrackCandidates()); - printf(" # of pT5 TrackCandidates produced: %d\n", event.getNumberOfPT5TrackCandidates()); - printf(" # of pT3 TrackCandidates produced: %d\n", event.getNumberOfPT3TrackCandidates()); - printf(" # of pLS TrackCandidates produced: %d\n", event.getNumberOfPLSTrackCandidates()); - printf(" # of T5 TrackCandidates produced: %d\n", event.getNumberOfT5TrackCandidates()); - } - - getOutput(event); - - event.resetEvent(); - } + const std::vector ph2_z); std::vector> hits() { return out_tc_hitIdxs_; } std::vector len() { return out_tc_len_; } std::vector seedIdx() { return out_tc_seedIdx_; } @@ -195,9 +74,7 @@ namespace SDL { const std::vector ph2_y, const std::vector ph2_z); - ROOT::Math::XYZVector calculateR3FromPCA(const ROOT::Math::PxPyPzMVector& p3, const float dxy, const float dz); - - void getOutput(SDL::Event& event); + void getOutput(SDL::Event& event); std::vector getHitIdxs(const short trackCandidateType, const unsigned int TCIdx, const unsigned int* TCHitIndices, diff --git a/SDL/Makefile b/SDL/Makefile index 369ef7af..2b3e73ef 100644 --- a/SDL/Makefile +++ b/SDL/Makefile @@ -27,12 +27,11 @@ LIBS=$(LIB_CUDA) $(LIB_CPU) # # Different architectures to optimize for -GENCODE_SM70 := -gencode arch=compute_70,code=[sm_70,compute_70] -GENCODE_SM89 := -gencode arch=compute_89,code=[sm_89,compute_89] +GENCODE_CUDA := -gencode arch=compute_70,code=[sm_70,compute_70] -gencode arch=compute_89,code=[sm_89,compute_89] CXX = g++ CXXFLAGS_CPU = -march=native -mtune=native -Ofast -fno-reciprocal-math -fopenmp-simd -g -Wall -Wshadow -Woverloaded-virtual -fPIC -fopenmp -I.. -CXXFLAGS_CUDA = -O3 -g --compiler-options -Wall --compiler-options -Wshadow --compiler-options -Woverloaded-virtual --compiler-options -fPIC --compiler-options -fopenmp -dc -lineinfo --ptxas-options=-v --cudart shared $(GENCODE_SM70) $(GENCODE_SM89) --use_fast_math --default-stream per-thread -I.. +CXXFLAGS_CUDA = -O3 -g --compiler-options -Wall --compiler-options -Wshadow --compiler-options -Woverloaded-virtual --compiler-options -fPIC --compiler-options -fopenmp -dc -lineinfo --ptxas-options=-v --cudart shared $(GENCODE_CUDA) --use_fast_math --default-stream per-thread -I.. CMSSWINCLUDE := -I${CMSSW_BASE}/src ifdef CMSSW_RELEASE_BASE CMSSWINCLUDE := ${CMSSWINCLUDE} -I${CMSSW_RELEASE_BASE}/src @@ -40,7 +39,8 @@ endif ALPAKAINCLUDE = -I${ALPAKA_ROOT}/include -I/${BOOST_ROOT}/include -std=c++17 ${CMSSWINCLUDE} ALPAKASERIAL = -DALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED ALPAKACUDA = -DALPAKA_ACC_GPU_CUDA_ENABLED -DALPAKA_ACC_GPU_CUDA_ONLY --expt-relaxed-constexpr -ROOTCFLAGS = -pthread -m64 -I$(ROOT_ROOT)/include +ROOTINCLUDE = -I$(ROOT_ROOT)/include +ROOTCFLAGS = -pthread -m64 $(ROOTINCLUDE) PRINTFLAG = -DT4FromT3 DUPLICATES = -DDUP_pLS -DDUP_T5 -DDUP_pT5 -DDUP_pT3 -DCrossclean_T5 -DCrossclean_pT3 #-DFP16_Base CACHEFLAG = @@ -48,7 +48,7 @@ PTCUTFLAG = LSTWARNINGSFLAG = CMSSW_WERRORS_CPU = -Werror=pointer-arith -Werror=overlength-strings -Werror=return-type -Werror=missing-braces -Werror=unused-value -Werror=unused-label \ -Werror=address -Werror=format -Werror=sign-compare -Werror=write-strings -Werror=delete-non-virtual-dtor -Werror=strict-aliasing -Werror=narrowing \ - -Werror=unused-but-set-variable -Werror=reorder -Werror=unused-variable -Werror=conversion-null -Werror=return-local-addr -Wnon-virtual-dtor -Werror=switch + -Werror=unused-but-set-variable -Werror=reorder -Werror=unused-variable -Werror=conversion-null -Werror=return-local-addr -Wnon-virtual-dtor -Werror=switch CMSSW_WERRORS_CUDA = $(patsubst %,-Xcompiler %,$(CMSSW_WERRORS_CPU)) CACHEFLAG_FLAGS = -DCACHE_ALLOC T5CUTFLAGS = $(T5DNNFLAG) $(T5RZCHI2FLAG) $(T5RPHICHI2FLAG) @@ -59,24 +59,18 @@ ALPAKABACKEND_CPU = $(ALPAKASERIAL) COMPILE_CMD_CPU = $(LD_CPU) -c LD_CUDA = nvcc -SOFLAGS_CUDA = -g -shared --compiler-options -fPIC --cudart shared $(GENCODE_SM70) $(GENCODE_SM89) +SOFLAGS_CUDA = -g -shared --compiler-options -fPIC --cudart shared $(GENCODE_CUDA) ALPAKABACKEND_CUDA = $(ALPAKACUDA) COMPILE_CMD_CUDA = $(LD_CUDA) -x cu CUTVALUEFLAG = CUTVALUEFLAG_FLAGS = -DCUT_VALUE_DEBUG -LST_cpu.o: LST.cc - $(CXX) -c $(CXXFLAGS_CPU) $(ROOTLIBS) $(PRINTFLAG) $(CACHEFLAG) $(DUPLICATES) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(ROOTCFLAGS) $(ALPAKAINCLUDE) $(PTCUTFLAG) $(ALPAKASERIAL) $< -o $@ - -LST_cuda.o: LST.cc - $(CXX) -c $(CXXFLAGS_CPU) $(ROOTLIBS) $(PRINTFLAG) $(CACHEFLAG) $(DUPLICATES) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(ROOTCFLAGS) $(ALPAKAINCLUDE) $(PTCUTFLAG) $(ALPAKASERIAL) $< -o $@ - %_cpu.o: %.cc - $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(PRINTFLAG) $(CACHEFLAG) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(NOPLSDUPCLEANFLAG) $(TCPLSTRIPLETSFLAG) $(PTCUTFLAG) $(DUPLICATES) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ + $(COMPILE_CMD_CPU) $(CXXFLAGS_CPU) $(ROOTINCLUDE) $(PRINTFLAG) $(CACHEFLAG) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CPU) $(T5CUTFLAGS) $(NOPLSDUPCLEANFLAG) $(TCPLSTRIPLETSFLAG) $(PTCUTFLAG) $(DUPLICATES) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CPU) $< -o $@ %_cuda.o: %.cc - $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(PRINTFLAG) $(CACHEFLAG) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(NOPLSDUPCLEANFLAG) $(TCPLSTRIPLETSFLAG) $(PTCUTFLAG) $(DUPLICATES) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ + $(COMPILE_CMD_CUDA) $(CXXFLAGS_CUDA) $(ROOTINCLUDE) $(PRINTFLAG) $(CACHEFLAG) $(CUTVALUEFLAG) $(LSTWARNINGSFLAG) $(CMSSW_WERRORS_CUDA) $(T5CUTFLAGS) $(NOPLSDUPCLEANFLAG) $(TCPLSTRIPLETSFLAG) $(PTCUTFLAG) $(DUPLICATES) $(ALPAKAINCLUDE) $(ALPAKABACKEND_CUDA) $< -o $@ $(LIB_CUDA): $(CCOBJECTS_CUDA) $(LSTOBJECTS_CUDA) $(LD_CUDA) $(SOFLAGS_CUDA) $^ -o $@ diff --git a/SDL/Module.h b/SDL/Module.h index cbfba2d8..afc32a14 100644 --- a/SDL/Module.h +++ b/SDL/Module.h @@ -283,47 +283,52 @@ namespace SDL { Buf sdlLayers_buf; Buf connectedPixels_buf; - template - modulesBuffer(TDevAcc const& devAccIn, unsigned int nMod = modules_size, unsigned int nPixs = pix_tot) - : detIds_buf(allocBufWrapper(devAccIn, nMod)), - moduleMap_buf(allocBufWrapper(devAccIn, nMod * MAX_CONNECTED_MODULES)), - mapdetId_buf(allocBufWrapper(devAccIn, nMod)), - mapIdx_buf(allocBufWrapper(devAccIn, nMod)), - nConnectedModules_buf(allocBufWrapper(devAccIn, nMod)), - drdzs_buf(allocBufWrapper(devAccIn, nMod)), - dxdys_buf(allocBufWrapper(devAccIn, nMod)), - nModules_buf(allocBufWrapper(devAccIn, 1)), - nLowerModules_buf(allocBufWrapper(devAccIn, 1)), - partnerModuleIndices_buf(allocBufWrapper(devAccIn, nMod)), - - layers_buf(allocBufWrapper(devAccIn, nMod)), - rings_buf(allocBufWrapper(devAccIn, nMod)), - modules_buf(allocBufWrapper(devAccIn, nMod)), - rods_buf(allocBufWrapper(devAccIn, nMod)), - subdets_buf(allocBufWrapper(devAccIn, nMod)), - sides_buf(allocBufWrapper(devAccIn, nMod)), - eta_buf(allocBufWrapper(devAccIn, nMod)), - r_buf(allocBufWrapper(devAccIn, nMod)), - isInverted_buf(allocBufWrapper(devAccIn, nMod)), - isLower_buf(allocBufWrapper(devAccIn, nMod)), - isAnchor_buf(allocBufWrapper(devAccIn, nMod)), - moduleType_buf(allocBufWrapper(devAccIn, nMod)), - moduleLayerType_buf(allocBufWrapper(devAccIn, nMod)), - sdlLayers_buf(allocBufWrapper(devAccIn, nMod)), - connectedPixels_buf(allocBufWrapper(devAccIn, nPixs)) {} + modulesBuffer(TDev const& dev, unsigned int nMod = modules_size, unsigned int nPixs = pix_tot) + : detIds_buf(allocBufWrapper(dev, nMod)), + moduleMap_buf(allocBufWrapper(dev, nMod * MAX_CONNECTED_MODULES)), + mapdetId_buf(allocBufWrapper(dev, nMod)), + mapIdx_buf(allocBufWrapper(dev, nMod)), + nConnectedModules_buf(allocBufWrapper(dev, nMod)), + drdzs_buf(allocBufWrapper(dev, nMod)), + dxdys_buf(allocBufWrapper(dev, nMod)), + nModules_buf(allocBufWrapper(dev, 1)), + nLowerModules_buf(allocBufWrapper(dev, 1)), + partnerModuleIndices_buf(allocBufWrapper(dev, nMod)), + + layers_buf(allocBufWrapper(dev, nMod)), + rings_buf(allocBufWrapper(dev, nMod)), + modules_buf(allocBufWrapper(dev, nMod)), + rods_buf(allocBufWrapper(dev, nMod)), + subdets_buf(allocBufWrapper(dev, nMod)), + sides_buf(allocBufWrapper(dev, nMod)), + eta_buf(allocBufWrapper(dev, nMod)), + r_buf(allocBufWrapper(dev, nMod)), + isInverted_buf(allocBufWrapper(dev, nMod)), + isLower_buf(allocBufWrapper(dev, nMod)), + isAnchor_buf(allocBufWrapper(dev, nMod)), + moduleType_buf(allocBufWrapper(dev, nMod)), + moduleLayerType_buf(allocBufWrapper(dev, nMod)), + sdlLayers_buf(allocBufWrapper(dev, nMod)), + connectedPixels_buf(allocBufWrapper(dev, nPixs)) { + setData(*this); + } - template - inline void copyFromSrc(TQueue queue, const modulesBuffer& src) { + template + inline void copyFromSrc(TQueue queue, const modulesBuffer& src, bool isFull = true) { alpaka::memcpy(queue, detIds_buf, src.detIds_buf); - alpaka::memcpy(queue, moduleMap_buf, src.moduleMap_buf); - alpaka::memcpy(queue, mapdetId_buf, src.mapdetId_buf); - alpaka::memcpy(queue, mapIdx_buf, src.mapIdx_buf); - alpaka::memcpy(queue, nConnectedModules_buf, src.nConnectedModules_buf); - alpaka::memcpy(queue, drdzs_buf, src.drdzs_buf); - alpaka::memcpy(queue, dxdys_buf, src.dxdys_buf); + if (isFull) { + alpaka::memcpy(queue, moduleMap_buf, src.moduleMap_buf); + alpaka::memcpy(queue, mapdetId_buf, src.mapdetId_buf); + alpaka::memcpy(queue, mapIdx_buf, src.mapIdx_buf); + alpaka::memcpy(queue, nConnectedModules_buf, src.nConnectedModules_buf); + alpaka::memcpy(queue, drdzs_buf, src.drdzs_buf); + alpaka::memcpy(queue, dxdys_buf, src.dxdys_buf); + } alpaka::memcpy(queue, nModules_buf, src.nModules_buf); alpaka::memcpy(queue, nLowerModules_buf, src.nLowerModules_buf); - alpaka::memcpy(queue, partnerModuleIndices_buf, src.partnerModuleIndices_buf); + if (isFull) { + alpaka::memcpy(queue, partnerModuleIndices_buf, src.partnerModuleIndices_buf); + } alpaka::memcpy(queue, layers_buf, src.layers_buf); alpaka::memcpy(queue, rings_buf, src.rings_buf); @@ -333,13 +338,19 @@ namespace SDL { alpaka::memcpy(queue, sides_buf, src.sides_buf); alpaka::memcpy(queue, eta_buf, src.eta_buf); alpaka::memcpy(queue, r_buf, src.r_buf); - alpaka::memcpy(queue, isInverted_buf, src.isInverted_buf); + if (isFull) { + alpaka::memcpy(queue, isInverted_buf, src.isInverted_buf); + } alpaka::memcpy(queue, isLower_buf, src.isLower_buf); - alpaka::memcpy(queue, isAnchor_buf, src.isAnchor_buf); + if (isFull) { + alpaka::memcpy(queue, isAnchor_buf, src.isAnchor_buf); + } alpaka::memcpy(queue, moduleType_buf, src.moduleType_buf); - alpaka::memcpy(queue, moduleLayerType_buf, src.moduleLayerType_buf); - alpaka::memcpy(queue, sdlLayers_buf, src.sdlLayers_buf); - alpaka::memcpy(queue, connectedPixels_buf, src.connectedPixels_buf); + if (isFull) { + alpaka::memcpy(queue, moduleLayerType_buf, src.moduleLayerType_buf); + alpaka::memcpy(queue, sdlLayers_buf, src.sdlLayers_buf); + alpaka::memcpy(queue, connectedPixels_buf, src.connectedPixels_buf); + } alpaka::wait(queue); } @@ -351,6 +362,8 @@ namespace SDL { : modulesBuffer(alpaka::getDev(queue), nMod, nPixs) { copyFromSrc(queue, src); } + + inline SDL::modules const* data() const { return this; } }; } // namespace SDL diff --git a/SDL/ModuleConnectionMap.cc b/SDL/ModuleConnectionMap.cc index 5cc67d09..27cf6c6d 100644 --- a/SDL/ModuleConnectionMap.cc +++ b/SDL/ModuleConnectionMap.cc @@ -1,17 +1,12 @@ #include "ModuleConnectionMap.h" -SDL::ModuleConnectionMap SDL::moduleConnectionMap; -std::vector SDL::moduleConnectionMap_pLStoLayer(7); -std::vector SDL::moduleConnectionMap_pLStoLayer_pos(7); -std::vector SDL::moduleConnectionMap_pLStoLayer_neg(7); +SDL::ModuleConnectionMap::ModuleConnectionMap() {} -SDL::ModuleConnectionMap::ModuleConnectionMap() {} +SDL::ModuleConnectionMap::ModuleConnectionMap(std::string filename) { load(filename); } -SDL::ModuleConnectionMap::ModuleConnectionMap(std::string filename) { load(filename); } +SDL::ModuleConnectionMap::~ModuleConnectionMap() {} -SDL::ModuleConnectionMap::~ModuleConnectionMap() {} - -void SDL::ModuleConnectionMap::load(std::string filename) { +void SDL::ModuleConnectionMap::load(std::string filename) { moduleConnections_.clear(); std::ifstream ifile; @@ -37,7 +32,7 @@ void SDL::ModuleConnectionMap::load(std::string filename) { } } -void SDL::ModuleConnectionMap::add(std::string filename) { +void SDL::ModuleConnectionMap::add(std::string filename) { std::ifstream ifile; ifile.open(filename.c_str()); std::string line; @@ -69,7 +64,7 @@ void SDL::ModuleConnectionMap::add(std::string filename) { } } -void SDL::ModuleConnectionMap::print() { +void SDL::ModuleConnectionMap::print() { std::cout << "Printing ModuleConnectionMap" << std::endl; for (auto& pair : moduleConnections_) { unsigned int detid = pair.first; @@ -81,9 +76,9 @@ void SDL::ModuleConnectionMap::print() { } } -const std::vector& SDL::ModuleConnectionMap::getConnectedModuleDetIds(unsigned int detid) const { +const std::vector& SDL::ModuleConnectionMap::getConnectedModuleDetIds(unsigned int detid) const { static const std::vector dummy; auto const mList = moduleConnections_.find(detid); return mList != moduleConnections_.end() ? mList->second : dummy; } -int SDL::ModuleConnectionMap::size() const { return moduleConnections_.size(); } +int SDL::ModuleConnectionMap::size() const { return moduleConnections_.size(); } diff --git a/SDL/ModuleConnectionMap.h b/SDL/ModuleConnectionMap.h index 614ebb20..48290007 100644 --- a/SDL/ModuleConnectionMap.h +++ b/SDL/ModuleConnectionMap.h @@ -8,8 +8,14 @@ #include #include +#include "Constants.h" + namespace SDL { - class ModuleConnectionMap { + //FIXME: move to non-alpaka single arch build + template + class ModuleConnectionMap; + template <> + class ModuleConnectionMap { private: std::map> moduleConnections_; @@ -26,10 +32,7 @@ namespace SDL { int size() const; }; - extern ModuleConnectionMap moduleConnectionMap; - extern std::vector moduleConnectionMap_pLStoLayer; - extern std::vector moduleConnectionMap_pLStoLayer_pos; - extern std::vector moduleConnectionMap_pLStoLayer_neg; + using MapPLStoLayer = std::array, 4>, 3>; } // namespace SDL #endif diff --git a/SDL/ModuleMethods.h b/SDL/ModuleMethods.h index 39f5bf91..e9cdd81d 100644 --- a/SDL/ModuleMethods.h +++ b/SDL/ModuleMethods.h @@ -9,53 +9,27 @@ #include "TiltedGeometry.h" #include "EndcapGeometry.h" #include "ModuleConnectionMap.h" +#include "PixelMap.h" +#include "Globals.h" namespace SDL { - // TODO: Change this to remove it from global scope. - inline std::map* detIdToIndex; - inline std::map* module_x; - inline std::map* module_y; - inline std::map* module_z; - inline std::map* module_type; // 23 : Ph2PSP, 24 : Ph2PSS, 25 : Ph2SS - // https://github.com/cms-sw/cmssw/blob/5e809e8e0a625578aa265dc4b128a93830cb5429/Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h#L29 - - // PixelMap is never allocated on the device. - // This is also not passed to any of the kernels, so we can combine the structs. - struct pixelMap { - Buf connectedPixelsIndex_buf; - Buf connectedPixelsSizes_buf; - Buf connectedPixelsIndexPos_buf; - Buf connectedPixelsSizesPos_buf; - Buf connectedPixelsIndexNeg_buf; - Buf connectedPixelsSizesNeg_buf; - - unsigned int* connectedPixelsIndex; - unsigned int* connectedPixelsSizes; - unsigned int* connectedPixelsIndexPos; - unsigned int* connectedPixelsSizesPos; - unsigned int* connectedPixelsIndexNeg; - unsigned int* connectedPixelsSizesNeg; - - int* pixelType; - - pixelMap(unsigned int sizef = size_superbins) - : connectedPixelsIndex_buf(allocBufWrapper(devHost, sizef)), - connectedPixelsSizes_buf(allocBufWrapper(devHost, sizef)), - connectedPixelsIndexPos_buf(allocBufWrapper(devHost, sizef)), - connectedPixelsSizesPos_buf(allocBufWrapper(devHost, sizef)), - connectedPixelsIndexNeg_buf(allocBufWrapper(devHost, sizef)), - connectedPixelsSizesNeg_buf(allocBufWrapper(devHost, sizef)) { - connectedPixelsIndex = alpaka::getPtrNative(connectedPixelsIndex_buf); - connectedPixelsSizes = alpaka::getPtrNative(connectedPixelsSizes_buf); - connectedPixelsIndexPos = alpaka::getPtrNative(connectedPixelsIndexPos_buf); - connectedPixelsSizesPos = alpaka::getPtrNative(connectedPixelsSizesPos_buf); - connectedPixelsIndexNeg = alpaka::getPtrNative(connectedPixelsIndexNeg_buf); - connectedPixelsSizesNeg = alpaka::getPtrNative(connectedPixelsSizesNeg_buf); - } + struct ModuleMetaData { + std::map detIdToIndex; + std::map module_x; + std::map module_y; + std::map module_z; + std::map module_type; // 23 : Ph2PSP, 24 : Ph2PSS, 25 : Ph2SS + // https://github.com/cms-sw/cmssw/blob/5e809e8e0a625578aa265dc4b128a93830cb5429/Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h#L29 }; template - inline void fillPixelMap(struct modulesBuffer* modulesBuf, struct pixelMap& pixelMapping, TQueue queue) { + inline void fillPixelMap(struct modulesBuffer* modulesBuf, + struct pixelMap& pixelMapping, + TQueue queue, + const MapPLStoLayer& pLStoLayer, + struct ModuleMetaData& mmd) { + pixelMapping.pixelModuleIndex = mmd.detIdToIndex[1]; + std::vector connectedModuleDetIds; std::vector connectedModuleDetIds_pos; std::vector connectedModuleDetIds_neg; @@ -65,7 +39,7 @@ namespace SDL { int totalSizes_neg = 0; for (unsigned int isuperbin = 0; isuperbin < size_superbins; isuperbin++) { int sizes = 0; - for (auto const& mCM_pLS : moduleConnectionMap_pLStoLayer) { + for (auto const& mCM_pLS : pLStoLayer[0]) { std::vector connectedModuleDetIds_pLS = mCM_pLS.getConnectedModuleDetIds(isuperbin + size_superbins); connectedModuleDetIds.insert( @@ -77,7 +51,7 @@ namespace SDL { totalSizes += sizes; int sizes_pos = 0; - for (auto const& mCM_pLS : moduleConnectionMap_pLStoLayer_pos) { + for (auto const& mCM_pLS : pLStoLayer[1]) { std::vector connectedModuleDetIds_pLS_pos = mCM_pLS.getConnectedModuleDetIds(isuperbin); connectedModuleDetIds_pos.insert(connectedModuleDetIds_pos.end(), connectedModuleDetIds_pLS_pos.begin(), @@ -89,7 +63,7 @@ namespace SDL { totalSizes_pos += sizes_pos; int sizes_neg = 0; - for (auto const& mCM_pLS : moduleConnectionMap_pLStoLayer_neg) { + for (auto const& mCM_pLS : pLStoLayer[2]) { std::vector connectedModuleDetIds_pLS_neg = mCM_pLS.getConnectedModuleDetIds(isuperbin); connectedModuleDetIds_neg.insert(connectedModuleDetIds_neg.end(), connectedModuleDetIds_pLS_neg.begin(), @@ -115,13 +89,13 @@ namespace SDL { unsigned int* connectedPixels = alpaka::getPtrNative(connectedPixels_buf); for (int icondet = 0; icondet < totalSizes; icondet++) { - connectedPixels[icondet] = (*detIdToIndex)[connectedModuleDetIds[icondet]]; + connectedPixels[icondet] = mmd.detIdToIndex[connectedModuleDetIds[icondet]]; } for (int icondet = 0; icondet < totalSizes_pos; icondet++) { - connectedPixels[icondet + totalSizes] = (*detIdToIndex)[connectedModuleDetIds_pos[icondet]]; + connectedPixels[icondet + totalSizes] = mmd.detIdToIndex[connectedModuleDetIds_pos[icondet]]; } for (int icondet = 0; icondet < totalSizes_neg; icondet++) { - connectedPixels[icondet + totalSizes + totalSizes_pos] = (*detIdToIndex)[connectedModuleDetIds_neg[icondet]]; + connectedPixels[icondet + totalSizes + totalSizes_pos] = mmd.detIdToIndex[connectedModuleDetIds_neg[icondet]]; } alpaka::memcpy(queue, modulesBuf->connectedPixels_buf, connectedPixels_buf, connectedPix_size); @@ -131,20 +105,21 @@ namespace SDL { template inline void fillConnectedModuleArrayExplicit(struct modulesBuffer* modulesBuf, unsigned int nMod, - TQueue queue) { + TQueue queue, + struct ModuleMetaData& mmd) { auto moduleMap_buf = allocBufWrapper(devHost, nMod * MAX_CONNECTED_MODULES); uint16_t* moduleMap = alpaka::getPtrNative(moduleMap_buf); auto nConnectedModules_buf = allocBufWrapper(devHost, nMod); uint16_t* nConnectedModules = alpaka::getPtrNative(nConnectedModules_buf); - for (auto it = (*detIdToIndex).begin(); it != (*detIdToIndex).end(); ++it) { + for (auto it = mmd.detIdToIndex.begin(); it != mmd.detIdToIndex.end(); ++it) { unsigned int detId = it->first; uint16_t index = it->second; - auto& connectedModules = moduleConnectionMap.getConnectedModuleDetIds(detId); + auto& connectedModules = Globals::moduleConnectionMap.getConnectedModuleDetIds(detId); nConnectedModules[index] = connectedModules.size(); for (uint16_t i = 0; i < nConnectedModules[index]; i++) { - moduleMap[index * MAX_CONNECTED_MODULES + i] = (*detIdToIndex)[connectedModules[i]]; + moduleMap[index * MAX_CONNECTED_MODULES + i] = mmd.detIdToIndex[connectedModules[i]]; } } @@ -154,7 +129,10 @@ namespace SDL { }; template - inline void fillMapArraysExplicit(struct modulesBuffer* modulesBuf, unsigned int nMod, TQueue queue) { + inline void fillMapArraysExplicit(struct modulesBuffer* modulesBuf, + unsigned int nMod, + TQueue queue, + struct ModuleMetaData& mmd) { auto mapIdx_buf = allocBufWrapper(devHost, nMod); uint16_t* mapIdx = alpaka::getPtrNative(mapIdx_buf); @@ -162,7 +140,7 @@ namespace SDL { unsigned int* mapdetId = alpaka::getPtrNative(mapdetId_buf); unsigned int counter = 0; - for (auto it = (*detIdToIndex).begin(); it != (*detIdToIndex).end(); ++it) { + for (auto it = mmd.detIdToIndex.begin(); it != mmd.detIdToIndex.end(); ++it) { unsigned int detId = it->first; unsigned int index = it->second; mapIdx[counter] = index; @@ -204,12 +182,9 @@ namespace SDL { uint16_t& nLowerModules, struct pixelMap& pixelMapping, TQueue& queue, - const char* moduleMetaDataFilePath) { - detIdToIndex = new std::map; - module_x = new std::map; - module_y = new std::map; - module_z = new std::map; - module_type = new std::map; + const char* moduleMetaDataFilePath, + const MapPLStoLayer& pLStoLayer) { + ModuleMetaData mmd; /* Load the whole text file into the map first*/ @@ -230,16 +205,16 @@ namespace SDL { while (std::getline(ss, token, ',')) { if (count_number == 0) { temp_detId = stoi(token); - (*detIdToIndex)[temp_detId] = counter; + mmd.detIdToIndex[temp_detId] = counter; } if (count_number == 1) - (*module_x)[temp_detId] = std::stof(token); + mmd.module_x[temp_detId] = std::stof(token); if (count_number == 2) - (*module_y)[temp_detId] = std::stof(token); + mmd.module_y[temp_detId] = std::stof(token); if (count_number == 3) - (*module_z)[temp_detId] = std::stof(token); + mmd.module_z[temp_detId] = std::stof(token); if (count_number == 4) { - (*module_type)[temp_detId] = std::stoi(token); + mmd.module_type[temp_detId] = std::stoi(token); counter++; } count_number++; @@ -248,7 +223,7 @@ namespace SDL { } } - (*detIdToIndex)[1] = counter; //pixel module is the last module in the module list + mmd.detIdToIndex[1] = counter; //pixel module is the last module in the module list counter++; nModules = counter; @@ -304,12 +279,12 @@ namespace SDL { uint16_t lowerModuleCounter = 0; uint16_t upperModuleCounter = nLowerModules + 1; //0 to nLowerModules - 1 => only lower modules, nLowerModules - pixel module, nLowerModules + 1 to nModules => upper modules - for (auto it = (*detIdToIndex).begin(); it != (*detIdToIndex).end(); it++) { + for (auto it = mmd.detIdToIndex.begin(); it != mmd.detIdToIndex.end(); it++) { unsigned int detId = it->first; - float m_x = (*module_x)[detId]; - float m_y = (*module_y)[detId]; - float m_z = (*module_z)[detId]; - unsigned int m_t = (*module_type)[detId]; + float m_x = mmd.module_x[detId]; + float m_y = mmd.module_y[detId]; + float m_z = mmd.module_z[detId]; + unsigned int m_t = mmd.module_type[detId]; float eta, r; @@ -342,7 +317,7 @@ namespace SDL { index = nLowerModules; //pixel } //reassigning indices! - (*detIdToIndex)[detId] = index; + mmd.detIdToIndex[detId] = index; host_detIds[index] = detId; host_layers[index] = layer; host_rings[index] = ring; @@ -374,8 +349,9 @@ namespace SDL { host_isAnchor[index] = false; } - host_dxdys[index] = (subdet == Endcap) ? endcapGeometry->getdxdy_slope(detId) : tiltedGeometry.getDxDy(detId); - host_drdzs[index] = (subdet == Barrel) ? tiltedGeometry.getDrDz(detId) : 0; + host_dxdys[index] = (subdet == Endcap) ? Globals::endcapGeometry->getdxdy_slope(detId) + : Globals::tiltedGeometry.getDxDy(detId); + host_drdzs[index] = (subdet == Barrel) ? Globals::tiltedGeometry.getDrDz(detId) : 0; } host_sdlLayers[index] = @@ -383,12 +359,12 @@ namespace SDL { } //partner module stuff, and slopes and drdz move around - for (auto it = (*detIdToIndex).begin(); it != (*detIdToIndex).end(); it++) { + for (auto it = mmd.detIdToIndex.begin(); it != mmd.detIdToIndex.end(); it++) { auto& detId = it->first; auto& index = it->second; if (detId != 1) { host_partnerModuleIndices[index] = - (*detIdToIndex)[SDL::modules::parsePartnerModuleId(detId, host_isLower[index], host_isInverted[index])]; + mmd.detIdToIndex[SDL::modules::parsePartnerModuleId(detId, host_isLower[index], host_isInverted[index])]; //add drdz and slope importing stuff here! if (host_drdzs[index] == 0) { host_drdzs[index] = host_drdzs[host_partnerModuleIndices[index]]; @@ -426,9 +402,9 @@ namespace SDL { alpaka::memcpy(queue, modulesBuf->sdlLayers_buf, sdlLayers_buf); alpaka::wait(queue); - fillConnectedModuleArrayExplicit(modulesBuf, nModules, queue); - fillMapArraysExplicit(modulesBuf, nModules, queue); - fillPixelMap(modulesBuf, pixelMapping, queue); + fillConnectedModuleArrayExplicit(modulesBuf, nModules, queue, mmd); + fillMapArraysExplicit(modulesBuf, nModules, queue, mmd); + fillPixelMap(modulesBuf, pixelMapping, queue, pLStoLayer, mmd); }; } // namespace SDL #endif diff --git a/SDL/PixelMap.h b/SDL/PixelMap.h new file mode 100644 index 00000000..01a58cb0 --- /dev/null +++ b/SDL/PixelMap.h @@ -0,0 +1,35 @@ +#ifndef PixelMap_h +#define PixelMap_h + +#include +#include + +#include "Constants.h" + +namespace SDL { + // PixelMap is never allocated on the device. + // This is also not passed to any of the kernels, so we can combine the structs. + struct pixelMap { + uint16_t pixelModuleIndex; + + std::vector connectedPixelsIndex; + std::vector connectedPixelsSizes; + std::vector connectedPixelsIndexPos; + std::vector connectedPixelsSizesPos; + std::vector connectedPixelsIndexNeg; + std::vector connectedPixelsSizesNeg; + + int* pixelType; + + pixelMap(unsigned int sizef = size_superbins) + : pixelModuleIndex(0), + connectedPixelsIndex(sizef), + connectedPixelsSizes(sizef), + connectedPixelsIndexPos(sizef), + connectedPixelsSizesPos(sizef), + connectedPixelsIndexNeg(sizef), + connectedPixelsSizesNeg(sizef) {} + }; +} // namespace SDL + +#endif diff --git a/SDL/TiltedGeometry.cc b/SDL/TiltedGeometry.cc index d62d34d2..736983a3 100644 --- a/SDL/TiltedGeometry.cc +++ b/SDL/TiltedGeometry.cc @@ -1,14 +1,8 @@ #include "TiltedGeometry.h" -SDL::TiltedGeometry SDL::tiltedGeometry; +SDL::TiltedGeometry::TiltedGeometry(std::string filename) { load(filename); } -SDL::TiltedGeometry::TiltedGeometry() {} - -SDL::TiltedGeometry::TiltedGeometry(std::string filename) { load(filename); } - -SDL::TiltedGeometry::~TiltedGeometry() {} - -void SDL::TiltedGeometry::load(std::string filename) { +void SDL::TiltedGeometry::load(std::string filename) { drdzs_.clear(); dxdys_.clear(); @@ -31,7 +25,7 @@ void SDL::TiltedGeometry::load(std::string filename) { } } -float SDL::TiltedGeometry::getDrDz(unsigned int detid) { +float SDL::TiltedGeometry::getDrDz(unsigned int detid) { if (drdzs_.find(detid) != drdzs_.end()) { return drdzs_[detid]; } else { @@ -39,7 +33,7 @@ float SDL::TiltedGeometry::getDrDz(unsigned int detid) { } } -float SDL::TiltedGeometry::getDxDy(unsigned int detid) { +float SDL::TiltedGeometry::getDxDy(unsigned int detid) { if (dxdys_.find(detid) != dxdys_.end()) { return dxdys_[detid]; } else { diff --git a/SDL/TiltedGeometry.h b/SDL/TiltedGeometry.h index c1b5321a..68d55880 100644 --- a/SDL/TiltedGeometry.h +++ b/SDL/TiltedGeometry.h @@ -9,16 +9,21 @@ #include #include +#include "Constants.h" + namespace SDL { - class TiltedGeometry { + template + class TiltedGeometry; + template <> + class TiltedGeometry { private: std::map drdzs_; // dr/dz slope std::map dxdys_; // dx/dy slope public: - TiltedGeometry(); + TiltedGeometry() = default; TiltedGeometry(std::string filename); - ~TiltedGeometry(); + ~TiltedGeometry() = default; void load(std::string); @@ -26,7 +31,6 @@ namespace SDL { float getDxDy(unsigned int detid); }; - extern TiltedGeometry tiltedGeometry; } // namespace SDL #endif diff --git a/bin/sdl.cc b/bin/sdl.cc index 45961824..fcd516fe 100644 --- a/bin/sdl.cc +++ b/bin/sdl.cc @@ -1,5 +1,7 @@ #include "sdl.h" +#include + //___________________________________________________________________________________________________________________________________________________________________________________________ int main(int argc, char** argv) { @@ -219,14 +221,6 @@ int main(int argc, char** argv) // --write_ntuple ana.do_write_ntuple = result["write_ntuple"].as(); - //_______________________________________________________________________________ - // check if cpu library was loaded - // 0 = cpu serial - // 1 = cpu threads - // 2 = cuda - // 3 = hip - ana.do_run_cpu = SDL::getBackend() < 2; - //_______________________________________________________________________________ // --optimization @@ -261,6 +255,7 @@ int main(int argc, char** argv) // Printing out the option settings overview std::cout << "=========================================================" << std::endl; + std::cout << " Running for Acc = " << alpaka::getAccName() << std::endl; std::cout << " Setting of the analysis job based on provided arguments " << std::endl; std::cout << "---------------------------------------------------------" << std::endl; std::cout << " ana.input_file_list_tstring: " << ana.input_file_list_tstring << std::endl; @@ -269,7 +264,6 @@ int main(int argc, char** argv) std::cout << " ana.nsplit_jobs: " << ana.nsplit_jobs << std::endl; std::cout << " ana.job_index: " << ana.job_index << std::endl; std::cout << " ana.specific_event_index: " << ana.specific_event_index << std::endl; - std::cout << " ana.do_run_cpu: " << ana.do_run_cpu << std::endl; std::cout << " ana.do_write_ntuple: " << ana.do_write_ntuple << std::endl; std::cout << " ana.mode: " << ana.mode << std::endl; std::cout << " ana.streams: " << ana.streams << std::endl; @@ -386,10 +380,10 @@ void run_sdl() full_timer.Reset(); full_timer.Start(); - std::vector events; + std::vector*> events; for (int s = 0; s < ana.streams; s++) { - SDL::Event *event = new SDL::Event(ana.verbose>=2); + SDL::Event *event = new SDL::Event(ana.verbose>=2); events.push_back(event); } float timeForEventCreation = full_timer.RealTime()*1000; @@ -528,8 +522,8 @@ void run_sdl() delete events.at(s); } - SDL::freeModules(); - SDL::freeEndcap(); + SDL::Globals::freeModules(); + SDL::Globals::freeEndcap(); delete ana.output_tfile; } diff --git a/bin/sdl_make_tracklooper b/bin/sdl_make_tracklooper index 97362e50..16e2d314 100755 --- a/bin/sdl_make_tracklooper +++ b/bin/sdl_make_tracklooper @@ -120,7 +120,7 @@ if $MAKECACHE; then MAKETARGET=${MAKETARGET}_cache; fi # If make clean binaries are called then first make clean before making if $MAKECLEANBINARIES; then - echo "First make cleaning all of TrackLooper objects and libsdl.so" | tee -a ${LOG} + echo "First make cleaning all of TrackLooper objects and libsdl*.so" | tee -a ${LOG} cd SDL;make clean >>${LOG} 2>&1;cd -; make clean >> ${LOG} 2>&1 fi @@ -151,10 +151,13 @@ else fi BACKENDOPT="BACKEND=all" +EXES="bin/sdl_cpu bin/sdl_cuda" if [ "$ONLYCUDABACKEND" == true ]; then BACKENDOPT="BACKEND=cuda" + EXES="bin/sdl_cuda" elif [ "$ONLYCPUBACKEND" == true ]; then BACKENDOPT="BACKEND=cpu" + EXES="bin/sdl_cpu" fi NOPLSDUPCLEANOPT= @@ -193,7 +196,6 @@ if ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cpu"* ]]) && [ ! -f elif ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cuda"* ]]) && [ ! -f SDL/libsdl_cuda.so ]; then echo "ERROR: libsdl_cuda.so failed to compile!" | tee -a ${LOG} echo "See ${LOG} file for more detail..." | tee -a ${LOG} - echo $BACKENDOPT exit 1 fi @@ -215,15 +217,26 @@ echo "-------------------------------------------------------------------------- echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 echo "---------------------------------------------------------------------------------------------" >> ${LOG} 2>&1 if $SHOWLOG; then - make ${TRACKLOOPERTARGET} ${PTCUTOPT} -j 2>&1 | tee -a ${LOG} + make EXES="${EXES}" ${TRACKLOOPERTARGET} ${PTCUTOPT} -j 2>&1 | tee -a ${LOG} else - make ${TRACKLOOPERTARGET} ${PTCUTOPT} -j >> ${LOG} 2>&1 + make EXES="${EXES}" ${TRACKLOOPERTARGET} ${PTCUTOPT} -j >> ${LOG} 2>&1 fi -if [ ! -f bin/sdl ]; then - echo "ERROR: bin/sdl failed to compile!" | tee -a ${LOG} - echo "See ${LOG} file for more detail..." | tee -a ${LOG} - exit 1 +if ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cpu"* ]]) && [ ! -f bin/sdl_cpu ]; then + echo "ERROR: bin/sdl_cpu failed to compile!" | tee -a ${LOG} + echo "See ${LOG} file for more detail..." | tee -a ${LOG} + exit 1 +elif ([[ "$BACKENDOPT" == *"all"* ]] || [[ "$BACKENDOPT" == *"cuda"* ]]) && [ ! -f bin/sdl_cuda ]; then + echo "ERROR: bin/sdl_cuda failed to compile!" | tee -a ${LOG} + echo "See ${LOG} file for more detail..." | tee -a ${LOG} + exit 1 +fi +if [ "${ONLYCPUBACKEND}" == true ]; then + ln -sfr bin/sdl_cpu bin/sdl +elif [ "${ONLYCUDABACKEND}" == true ]; then + ln -sfr bin/sdl_cuda bin/sdl +else + ln -sfr bin/sdl_cpu bin/sdl fi echo "" >> ${LOG} diff --git a/bin/sdl_run b/bin/sdl_run index 58684622..37f8c2a6 100755 --- a/bin/sdl_run +++ b/bin/sdl_run @@ -24,7 +24,7 @@ usage() echo " -n number of events (Number of events to run over)" echo " -t tag for this run (Tag for this run)" echo " -d delete previous output (Delete the previous outputs and re-run)" - echo " -b backend (Select between GPU and CPU backend)" + echo " -b backend (Select a backend: cuda or cpu; default cuda)" echo exit } @@ -50,38 +50,39 @@ if [ -z ${FLAGS} ]; then PRECOMPILED=true; else PRECOMPILED=false; fi if [ -z ${SAMPLE} ]; then usage; fi if [ -z ${NEVENTS} ]; then NEVENTS=-1; fi if [ -z ${TAG} ]; then usage; fi - -# If it will not be compiled, then make sure that it was precompiled -if ${PRECOMPILED}; then - if [ ! -f ${TRACKLOOPERDIR}/bin/sdl ] || ( [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cuda.so ] && [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cpu.so ] ); then - echo "SDL library or binary has not been compiled. Please use -f flag." - usage - fi -fi +if [ -z ${BACKEND} ]; then BACKEND="cuda"; fi # If a backend is specified then make sure that corresponding library exists # and set the environment variable to preload it. -if [ -z ${BACKEND} ]; then - BACKEND="default" -elif [ "${BACKEND}" == "cuda" ]; then +if [ "${BACKEND}" == "cuda" ]; then if ([ ${PRECOMPILED} != true ] && [[ "${FLAGS}" == *"C"* ]]) || - ([ ${PRECOMPILED} == true ] && ([ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cuda.so ] || [ ! -f ${TRACKLOOPERDIR}/SDL/cuda/libsdl.so ])); then + ([ ${PRECOMPILED} == true ] && [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cuda.so ]); then echo "Error: CUDA backend was not compiled." exit 1 fi - export LD_LIBRARY_PATH=${TRACKLOOPERDIR}/SDL/cuda/:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH=${TRACKLOOPERDIR}/SDL/:$LD_LIBRARY_PATH + ln -s -f ${TRACKLOOPERDIR}/bin/sdl_cuda ${TRACKLOOPERDIR}/bin/sdl elif [ "${BACKEND}" == "cpu" ]; then if ([ ${PRECOMPILED} != true ] && [[ "${FLAGS}" == *"G"* ]]) || - ([ ${PRECOMPILED} == true ] && ([ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cpu.so ] || [ ! -f ${TRACKLOOPERDIR}/SDL/cpu/libsdl.so ])); then + ([ ${PRECOMPILED} == true ] && [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cpu.so ]); then echo "Error: CPU backend was not compiled." exit 1 fi - export LD_LIBRARY_PATH=${TRACKLOOPERDIR}/SDL/cpu/:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH=${TRACKLOOPERDIR}/SDL/:$LD_LIBRARY_PATH + ln -s -f ${TRACKLOOPERDIR}/bin/sdl_cpu ${TRACKLOOPERDIR}/bin/sdl else - echo "Error: backend options are gpu or cuda." + echo "Error: backend options are cpu or cuda." exit 1 fi +# If it will not be compiled, then make sure that it was precompiled +if ${PRECOMPILED}; then + if [ ! -h ${TRACKLOOPERDIR}/bin/sdl ] || ( [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cuda.so ] && [ ! -f ${TRACKLOOPERDIR}/SDL/libsdl_cpu.so ] ); then + echo "SDL library or binary has not been compiled. Please use -f flag." + usage + fi +fi + # Check that the FLAGS start with "-" character if [[ ${PRECOMPILED} == true ]] || [[ ${FLAGS:0:1} == "-" ]]; then : diff --git a/code/core/AccessHelper.cc b/code/core/AccessHelper.cc index eaa33df4..59118e66 100644 --- a/code/core/AccessHelper.cc +++ b/code/core/AccessHelper.cc @@ -5,7 +5,7 @@ // =============== //____________________________________________________________________________________________ -std::tuple, std::vector> convertHitsToHitIdxsAndHitTypes(SDL::Event* event, std::vector hits) +std::tuple, std::vector> convertHitsToHitIdxsAndHitTypes(SDL::Event* event, std::vector hits) { SDL::hitsBuffer& hitsInGPU = *(event->getHits()); std::vector hitidxs; @@ -26,7 +26,7 @@ std::tuple, std::vector> convertHitsToHi // =============== //____________________________________________________________________________________________ -std::vector getPixelHitsFrompLS(SDL::Event* event, unsigned int pLS) +std::vector getPixelHitsFrompLS(SDL::Event* event, unsigned int pLS) { SDL::segmentsBuffer& segments_ = *(event->getSegments()); SDL::miniDoubletsBuffer& miniDoublets_ = *(event->getMiniDoublets()); @@ -46,7 +46,7 @@ std::vector getPixelHitsFrompLS(SDL::Event* event, unsigned int pL } //____________________________________________________________________________________________ -std::vector getPixelHitIdxsFrompLS(SDL::Event* event, unsigned int pLS) +std::vector getPixelHitIdxsFrompLS(SDL::Event* event, unsigned int pLS) { SDL::hitsBuffer& hitsInGPU = *(event->getHits()); std::vector hits = getPixelHitsFrompLS(event, pLS); @@ -57,7 +57,7 @@ std::vector getPixelHitIdxsFrompLS(SDL::Event* event, unsigned int } //____________________________________________________________________________________________ -std::vector getPixelHitTypesFrompLS(SDL::Event* event, unsigned int pLS) +std::vector getPixelHitTypesFrompLS(SDL::Event* event, unsigned int pLS) { std::vector hits = getPixelHitsFrompLS(event, pLS); std::vector hittypes(hits.size(), 0); @@ -65,7 +65,7 @@ std::vector getPixelHitTypesFrompLS(SDL::Event* event, unsigned in } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFrompLS(SDL::Event* event, unsigned pLS) +std::tuple, std::vector> getHitIdxsAndHitTypesFrompLS(SDL::Event* event, unsigned pLS) { return convertHitsToHitIdxsAndHitTypes(event, getPixelHitsFrompLS(event, pLS)); } @@ -75,7 +75,7 @@ std::tuple, std::vector> getHitIdxsAndHi // ============== //____________________________________________________________________________________________ -std::vector getHitsFromMD(SDL::Event* event, unsigned int MD) +std::vector getHitsFromMD(SDL::Event* event, unsigned int MD) { SDL::miniDoubletsBuffer& miniDoublets_ = *(event->getMiniDoublets()); unsigned int hit_1 = miniDoublets_.anchorHitIndices[MD]; @@ -84,7 +84,7 @@ std::vector getHitsFromMD(SDL::Event* event, unsigned int MD) } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFromMD(SDL::Event* event, unsigned MD) +std::tuple, std::vector> getHitIdxsAndHitTypesFromMD(SDL::Event* event, unsigned MD) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFromMD(event, MD)); } @@ -94,7 +94,7 @@ std::tuple, std::vector> getHitIdxsAndHi // ============== //____________________________________________________________________________________________ -std::vector getMDsFromLS(SDL::Event* event, unsigned int LS) +std::vector getMDsFromLS(SDL::Event* event, unsigned int LS) { SDL::segmentsBuffer& segments_ = *(event->getSegments()); unsigned int MD_1 = segments_.mdIndices[2 * LS]; @@ -103,7 +103,7 @@ std::vector getMDsFromLS(SDL::Event* event, unsigned int LS) } //____________________________________________________________________________________________ -std::vector getHitsFromLS(SDL::Event* event, unsigned int LS) +std::vector getHitsFromLS(SDL::Event* event, unsigned int LS) { std::vector MDs = getMDsFromLS(event, LS); std::vector hits_0 = getHitsFromMD(event, MDs[0]); @@ -112,7 +112,7 @@ std::vector getHitsFromLS(SDL::Event* event, unsigned int LS) } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFromLS(SDL::Event* event, unsigned LS) +std::tuple, std::vector> getHitIdxsAndHitTypesFromLS(SDL::Event* event, unsigned LS) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFromLS(event, LS)); } @@ -122,7 +122,7 @@ std::tuple, std::vector> getHitIdxsAndHi // ============== //____________________________________________________________________________________________ -std::vector getLSsFromT3(SDL::Event* event, unsigned int T3) +std::vector getLSsFromT3(SDL::Event* event, unsigned int T3) { SDL::tripletsBuffer& triplets_ = *(event->getTriplets()); unsigned int LS_1 = triplets_.segmentIndices[2 * T3]; @@ -131,7 +131,7 @@ std::vector getLSsFromT3(SDL::Event* event, unsigned int T3) } //____________________________________________________________________________________________ -std::vector getMDsFromT3(SDL::Event* event, unsigned int T3) +std::vector getMDsFromT3(SDL::Event* event, unsigned int T3) { std::vector LSs = getLSsFromT3(event, T3); std::vector MDs_0 = getMDsFromLS(event, LSs[0]); @@ -140,7 +140,7 @@ std::vector getMDsFromT3(SDL::Event* event, unsigned int T3) } //____________________________________________________________________________________________ -std::vector getHitsFromT3(SDL::Event* event, unsigned int T3) +std::vector getHitsFromT3(SDL::Event* event, unsigned int T3) { std::vector MDs = getMDsFromT3(event, T3); std::vector hits_0 = getHitsFromMD(event, MDs[0]); @@ -150,7 +150,7 @@ std::vector getHitsFromT3(SDL::Event* event, unsigned int T3) } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFromT3(SDL::Event* event, unsigned T3) +std::tuple, std::vector> getHitIdxsAndHitTypesFromT3(SDL::Event* event, unsigned T3) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFromT3(event, T3)); } @@ -160,7 +160,7 @@ std::tuple, std::vector> getHitIdxsAndHi // ============== //____________________________________________________________________________________________ -std::vector getT3sFromT5(SDL::Event* event, unsigned int T5) +std::vector getT3sFromT5(SDL::Event* event, unsigned int T5) { SDL::quintupletsBuffer& quintuplets_ = *(event->getQuintuplets()); unsigned int T3_1 = quintuplets_.tripletIndices[2 * T5]; @@ -169,7 +169,7 @@ std::vector getT3sFromT5(SDL::Event* event, unsigned int T5) } //____________________________________________________________________________________________ -std::vector getLSsFromT5(SDL::Event* event, unsigned int T5) +std::vector getLSsFromT5(SDL::Event* event, unsigned int T5) { std::vector T3s = getT3sFromT5(event, T5); std::vector LSs_0 = getLSsFromT3(event, T3s[0]); @@ -178,7 +178,7 @@ std::vector getLSsFromT5(SDL::Event* event, unsigned int T5) } //____________________________________________________________________________________________ -std::vector getMDsFromT5(SDL::Event* event, unsigned int T5) +std::vector getMDsFromT5(SDL::Event* event, unsigned int T5) { std::vector LSs = getLSsFromT5(event, T5); std::vector MDs_0 = getMDsFromLS(event, LSs[0]); @@ -189,7 +189,7 @@ std::vector getMDsFromT5(SDL::Event* event, unsigned int T5) } //____________________________________________________________________________________________ -std::vector getHitsFromT5(SDL::Event* event, unsigned int T5) +std::vector getHitsFromT5(SDL::Event* event, unsigned int T5) { std::vector MDs = getMDsFromT5(event, T5); std::vector hits_0 = getHitsFromMD(event, MDs[0]); @@ -201,7 +201,7 @@ std::vector getHitsFromT5(SDL::Event* event, unsigned int T5) } //____________________________________________________________________________________________ -std::vector getHitIdxsFromT5(SDL::Event* event, unsigned int T5) +std::vector getHitIdxsFromT5(SDL::Event* event, unsigned int T5) { SDL::hitsBuffer& hitsInGPU = *(event->getHits()); std::vector hits = getHitsFromT5(event, T5); @@ -211,7 +211,7 @@ std::vector getHitIdxsFromT5(SDL::Event* event, unsigned int T5) return hitidxs; } //____________________________________________________________________________________________ -std::vector getModuleIdxsFromT5(SDL::Event* event, unsigned int T5) +std::vector getModuleIdxsFromT5(SDL::Event* event, unsigned int T5) { std::vector hits = getHitsFromT5(event, T5); std::vector module_idxs; @@ -223,13 +223,13 @@ std::vector getModuleIdxsFromT5(SDL::Event* event, unsigned int T5 return module_idxs; } //____________________________________________________________________________________________ -std::vector getHitTypesFromT5(SDL::Event* event, unsigned int T5) +std::vector getHitTypesFromT5(SDL::Event* event, unsigned int T5) { return {4, 4, 4, 4, 4, 4, 4, 4, 4, 4};; } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFromT5(SDL::Event* event, unsigned T5) +std::tuple, std::vector> getHitIdxsAndHitTypesFromT5(SDL::Event* event, unsigned T5) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFromT5(event, T5)); } @@ -239,7 +239,7 @@ std::tuple, std::vector> getHitIdxsAndHi // =============== //____________________________________________________________________________________________ -unsigned int getPixelLSFrompT3(SDL::Event* event, unsigned int pT3) +unsigned int getPixelLSFrompT3(SDL::Event* event, unsigned int pT3) { SDL::pixelTripletsBuffer& pixelTriplets_ = *(event->getPixelTriplets()); SDL::objectRangesBuffer& rangesInGPU = (*event->getRanges()); @@ -249,42 +249,42 @@ unsigned int getPixelLSFrompT3(SDL::Event* event, unsigned int pT3) } //____________________________________________________________________________________________ -unsigned int getT3FrompT3(SDL::Event* event, unsigned int pT3) +unsigned int getT3FrompT3(SDL::Event* event, unsigned int pT3) { SDL::pixelTriplets& pixelTriplets_ = *(event->getPixelTriplets()); return pixelTriplets_.tripletIndices[pT3]; } //____________________________________________________________________________________________ -std::vector getLSsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getLSsFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int T3 = getT3FrompT3(event, pT3); return getLSsFromT3(event, T3); } //____________________________________________________________________________________________ -std::vector getMDsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getMDsFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int T3 = getT3FrompT3(event, pT3); return getMDsFromT3(event, T3); } //____________________________________________________________________________________________ -std::vector getOuterTrackerHitsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getOuterTrackerHitsFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int T3 = getT3FrompT3(event, pT3); return getHitsFromT3(event, T3); } //____________________________________________________________________________________________ -std::vector getPixelHitsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getPixelHitsFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int pLS = getPixelLSFrompT3(event, pT3); return getPixelHitsFrompLS(event, pLS); } //____________________________________________________________________________________________ -std::vector getHitsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getHitsFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int pLS = getPixelLSFrompT3(event, pT3); unsigned int T3 = getT3FrompT3(event, pT3); @@ -295,7 +295,7 @@ std::vector getHitsFrompT3(SDL::Event* event, unsigned int pT3) } //____________________________________________________________________________________________ -std::vector getHitIdxsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getHitIdxsFrompT3(SDL::Event* event, unsigned int pT3) { SDL::hitsBuffer& hitsInGPU = *(event->getHits()); std::vector hits = getHitsFrompT3(event, pT3); @@ -305,7 +305,7 @@ std::vector getHitIdxsFrompT3(SDL::Event* event, unsigned int pT3) return hitidxs; } //____________________________________________________________________________________________ -std::vector getModuleIdxsFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getModuleIdxsFrompT3(SDL::Event* event, unsigned int pT3) { std::vector hits = getOuterTrackerHitsFrompT3(event, pT3); std::vector module_idxs; @@ -317,7 +317,7 @@ std::vector getModuleIdxsFrompT3(SDL::Event* event, unsigned int p return module_idxs; } //____________________________________________________________________________________________ -std::vector getHitTypesFrompT3(SDL::Event* event, unsigned int pT3) +std::vector getHitTypesFrompT3(SDL::Event* event, unsigned int pT3) { unsigned int pLS = getPixelLSFrompT3(event, pT3); std::vector pixelHits = getPixelHitsFrompLS(event, pLS); @@ -329,7 +329,7 @@ std::vector getHitTypesFrompT3(SDL::Event* event, unsigned int pT3 } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFrompT3(SDL::Event* event, unsigned pT3) +std::tuple, std::vector> getHitIdxsAndHitTypesFrompT3(SDL::Event* event, unsigned pT3) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFrompT3(event, pT3)); } @@ -339,7 +339,7 @@ std::tuple, std::vector> getHitIdxsAndHi // =============== //____________________________________________________________________________________________ -unsigned int getPixelLSFrompT5(SDL::Event* event, unsigned int pT5) +unsigned int getPixelLSFrompT5(SDL::Event* event, unsigned int pT5) { SDL::pixelQuintupletsBuffer& pixelQuintuplets_ = *(event->getPixelQuintuplets()); SDL::objectRangesBuffer& rangesInGPU = (*event->getRanges()); @@ -349,42 +349,42 @@ unsigned int getPixelLSFrompT5(SDL::Event* event, unsigned int pT5) } //____________________________________________________________________________________________ -unsigned int getT5FrompT5(SDL::Event* event, unsigned int pT5) +unsigned int getT5FrompT5(SDL::Event* event, unsigned int pT5) { SDL::pixelQuintupletsBuffer& pixelQuintuplets_ = *(event->getPixelQuintuplets()); return pixelQuintuplets_.T5Indices[pT5]; } //____________________________________________________________________________________________ -std::vector getT3sFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getT3sFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int T5 = getT5FrompT5(event, pT5); return getT3sFromT5(event, T5); } //____________________________________________________________________________________________ -std::vector getLSsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getLSsFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int T5 = getT5FrompT5(event, pT5); return getLSsFromT5(event, T5); } //____________________________________________________________________________________________ -std::vector getMDsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getMDsFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int T5 = getT5FrompT5(event, pT5); return getMDsFromT5(event, T5); } //____________________________________________________________________________________________ -std::vector getOuterTrackerHitsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getOuterTrackerHitsFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int T5 = getT5FrompT5(event, pT5); return getHitsFromT5(event, T5); } //____________________________________________________________________________________________ -std::vector getPixelHitsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getPixelHitsFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int pLS = getPixelLSFrompT5(event, pT5); return getPixelHitsFrompLS(event, pLS); @@ -392,7 +392,7 @@ std::vector getPixelHitsFrompT5(SDL::Event* event, unsigned int pT //____________________________________________________________________________________________ -std::vector getHitsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getHitsFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int pLS = getPixelLSFrompT5(event, pT5); unsigned int T5 = getT5FrompT5(event, pT5); @@ -403,7 +403,7 @@ std::vector getHitsFrompT5(SDL::Event* event, unsigned int pT5) } //____________________________________________________________________________________________ -std::vector getHitIdxsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getHitIdxsFrompT5(SDL::Event* event, unsigned int pT5) { SDL::hitsBuffer& hitsInGPU = *(event->getHits()); std::vector hits = getHitsFrompT5(event, pT5); @@ -414,7 +414,7 @@ std::vector getHitIdxsFrompT5(SDL::Event* event, unsigned int pT5) } //____________________________________________________________________________________________ -std::vector getModuleIdxsFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getModuleIdxsFrompT5(SDL::Event* event, unsigned int pT5) { std::vector hits = getOuterTrackerHitsFrompT5(event, pT5); std::vector module_idxs; @@ -427,7 +427,7 @@ std::vector getModuleIdxsFrompT5(SDL::Event* event, unsigned int p } //____________________________________________________________________________________________ -std::vector getHitTypesFrompT5(SDL::Event* event, unsigned int pT5) +std::vector getHitTypesFrompT5(SDL::Event* event, unsigned int pT5) { unsigned int pLS = getPixelLSFrompT5(event, pT5); std::vector pixelHits = getPixelHitsFrompLS(event, pLS); @@ -439,7 +439,7 @@ std::vector getHitTypesFrompT5(SDL::Event* event, unsigned int pT5 } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFrompT5(SDL::Event* event, unsigned pT5) +std::tuple, std::vector> getHitIdxsAndHitTypesFrompT5(SDL::Event* event, unsigned pT5) { return convertHitsToHitIdxsAndHitTypes(event, getHitsFrompT5(event, pT5)); } @@ -449,7 +449,7 @@ std::tuple, std::vector> getHitIdxsAndHi // ============== //____________________________________________________________________________________________ -std::vector getLSsFromTC(SDL::Event* event, unsigned int TC) +std::vector getLSsFromTC(SDL::Event* event, unsigned int TC) { // Get the type of the track candidate SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); @@ -465,7 +465,7 @@ std::vector getLSsFromTC(SDL::Event* event, unsigned int TC) } //____________________________________________________________________________________________ -std::tuple, std::vector> getHitIdxsAndHitTypesFromTC(SDL::Event* event, unsigned TC) +std::tuple, std::vector> getHitIdxsAndHitTypesFromTC(SDL::Event* event, unsigned TC) { // Get the type of the track candidate SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); diff --git a/code/core/AccessHelper.h b/code/core/AccessHelper.h index 98c4a054..010b86c7 100644 --- a/code/core/AccessHelper.h +++ b/code/core/AccessHelper.h @@ -14,69 +14,69 @@ enum }; // ----* Hit *---- -std::tuple, std::vector> convertHitsToHitIdxsAndHitTypes(SDL::Event* event, std::vector hits); +std::tuple, std::vector> convertHitsToHitIdxsAndHitTypes(SDL::Event* event, std::vector hits); // ----* pLS *---- -std::vector getPixelHitsFrompLS(SDL::Event* event, unsigned int pLS); -std::vector getPixelHitIdxsFrompLS(SDL::Event* event, unsigned int pLS); -std::vector getPixelHitTypesFrompLS(SDL::Event* event, unsigned int pLS); -std::tuple, std::vector> getHitIdxsAndHitTypesFrompLS(SDL::Event* event, unsigned pLS); +std::vector getPixelHitsFrompLS(SDL::Event* event, unsigned int pLS); +std::vector getPixelHitIdxsFrompLS(SDL::Event* event, unsigned int pLS); +std::vector getPixelHitTypesFrompLS(SDL::Event* event, unsigned int pLS); +std::tuple, std::vector> getHitIdxsAndHitTypesFrompLS(SDL::Event* event, unsigned pLS); // ----* MD *---- -std::vector getHitsFromMD(SDL::Event* event, unsigned int MD); -std::tuple, std::vector> getHitIdxsAndHitTypesFromMD(SDL::Event* event, unsigned MD); +std::vector getHitsFromMD(SDL::Event* event, unsigned int MD); +std::tuple, std::vector> getHitIdxsAndHitTypesFromMD(SDL::Event* event, unsigned MD); // ----* LS *---- -std::vector getMDsFromLS(SDL::Event* event, unsigned int LS); -std::vector getHitsFromLS(SDL::Event* event, unsigned int LS); -std::tuple, std::vector> getHitIdxsAndHitTypesFromLS(SDL::Event* event, unsigned LS); +std::vector getMDsFromLS(SDL::Event* event, unsigned int LS); +std::vector getHitsFromLS(SDL::Event* event, unsigned int LS); +std::tuple, std::vector> getHitIdxsAndHitTypesFromLS(SDL::Event* event, unsigned LS); // ----* T3 *---- -std::vector getLSsFromT3(SDL::Event* event, unsigned int T3); -std::vector getMDsFromT3(SDL::Event* event, unsigned int T3); -std::vector getHitsFromT3(SDL::Event* event, unsigned int T3); -std::tuple, std::vector> getHitIdxsAndHitTypesFromT3(SDL::Event* event, unsigned T3); +std::vector getLSsFromT3(SDL::Event* event, unsigned int T3); +std::vector getMDsFromT3(SDL::Event* event, unsigned int T3); +std::vector getHitsFromT3(SDL::Event* event, unsigned int T3); +std::tuple, std::vector> getHitIdxsAndHitTypesFromT3(SDL::Event* event, unsigned T3); // ----* T5 *---- -std::vector getT3sFromT5(SDL::Event* event, unsigned int T5); -std::vector getLSsFromT5(SDL::Event* event, unsigned int T5); -std::vector getMDsFromT5(SDL::Event* event, unsigned int T5); -std::vector getHitsFromT5(SDL::Event* event, unsigned int T5); -std::vector getHitIdxsFromT5(SDL::Event* event, unsigned int T5); -std::vector getHitTypesFromT5(SDL::Event* event, unsigned int T5); -std::vector getModuleIdxsFromT5(SDL::Event* event, unsigned int T5); -std::tuple, std::vector> getHitIdxsAndHitTypesFromT5(SDL::Event* event, unsigned T5); +std::vector getT3sFromT5(SDL::Event* event, unsigned int T5); +std::vector getLSsFromT5(SDL::Event* event, unsigned int T5); +std::vector getMDsFromT5(SDL::Event* event, unsigned int T5); +std::vector getHitsFromT5(SDL::Event* event, unsigned int T5); +std::vector getHitIdxsFromT5(SDL::Event* event, unsigned int T5); +std::vector getHitTypesFromT5(SDL::Event* event, unsigned int T5); +std::vector getModuleIdxsFromT5(SDL::Event* event, unsigned int T5); +std::tuple, std::vector> getHitIdxsAndHitTypesFromT5(SDL::Event* event, unsigned T5); // ----* pT3 *---- -unsigned int getPixelLSFrompT3(SDL::Event* event, unsigned int pT3); -unsigned int getT3FrompT3(SDL::Event* event, unsigned int pT3); -std::vector getLSsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getMDsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getOuterTrackerHitsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getPixelHitsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getHitsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getHitIdxsFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getHitTypesFrompT3(SDL::Event* event, unsigned int pT3); -std::vector getModuleIdxsFrompT3(SDL::Event* event, unsigned int pT3); -std::tuple, std::vector> getHitIdxsAndHitTypesFrompT3(SDL::Event* event, unsigned pT3); +unsigned int getPixelLSFrompT3(SDL::Event* event, unsigned int pT3); +unsigned int getT3FrompT3(SDL::Event* event, unsigned int pT3); +std::vector getLSsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getMDsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getOuterTrackerHitsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getPixelHitsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getHitsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getHitIdxsFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getHitTypesFrompT3(SDL::Event* event, unsigned int pT3); +std::vector getModuleIdxsFrompT3(SDL::Event* event, unsigned int pT3); +std::tuple, std::vector> getHitIdxsAndHitTypesFrompT3(SDL::Event* event, unsigned pT3); // ----* pT5 *---- -unsigned int getPixelLSFrompT5(SDL::Event* event, unsigned int pT5); -unsigned int getT5FrompT5(SDL::Event* event, unsigned int pT5); -std::vector getT3sFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getLSsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getMDsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getOuterTrackerHitsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getPixelHitsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getHitsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getHitIdxsFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getHitTypesFrompT5(SDL::Event* event, unsigned int pT5); -std::vector getModuleIdxsFrompT5(SDL::Event* event, unsigned int pT5); -std::tuple, std::vector> getHitIdxsAndHitTypesFrompT5(SDL::Event* event, unsigned pT5); +unsigned int getPixelLSFrompT5(SDL::Event* event, unsigned int pT5); +unsigned int getT5FrompT5(SDL::Event* event, unsigned int pT5); +std::vector getT3sFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getLSsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getMDsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getOuterTrackerHitsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getPixelHitsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getHitsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getHitIdxsFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getHitTypesFrompT5(SDL::Event* event, unsigned int pT5); +std::vector getModuleIdxsFrompT5(SDL::Event* event, unsigned int pT5); +std::tuple, std::vector> getHitIdxsAndHitTypesFrompT5(SDL::Event* event, unsigned pT5); // ----* TC *---- -std::vector getLSsFromTC(SDL::Event* event, unsigned int TC); -std::vector getHitsFromTC(SDL::Event* event, unsigned int TC); -std::tuple, std::vector> getHitIdxsAndHitTypesFromTC(SDL::Event* event, unsigned int TC); +std::vector getLSsFromTC(SDL::Event* event, unsigned int TC); +std::vector getHitsFromTC(SDL::Event* event, unsigned int TC); +std::tuple, std::vector> getHitIdxsAndHitTypesFromTC(SDL::Event* event, unsigned int TC); #endif diff --git a/code/core/AnalysisConfig.h b/code/core/AnalysisConfig.h index 9766e8b4..34242659 100644 --- a/code/core/AnalysisConfig.h +++ b/code/core/AnalysisConfig.h @@ -103,10 +103,7 @@ class AnalysisConfig std::map>> moduleSimHits; std::map modulePopulation; - SDL::ModuleConnectionMap moduleConnectiongMapLoose; - - // Boolean to trigger whether to run CPU or GPU - bool do_run_cpu; + SDL::ModuleConnectionMap moduleConnectiongMapLoose; // Boolean to trigger whether to run cut_value_ntupling bool do_cut_value_ntuple; diff --git a/code/core/trkCore.cc b/code/core/trkCore.cc index 97185574..fd64dfc6 100644 --- a/code/core/trkCore.cc +++ b/code/core/trkCore.cc @@ -1,4 +1,5 @@ #include "trkCore.h" +#include "Globals.h" //___________________________________________________________________________________________________________________________________________________________________________________________ void loadMaps() @@ -20,24 +21,32 @@ void loadMaps() std::cout << "pLS map: " << pLSMapDir << std::endl; std::cout << "centroid: " << centroid << std::endl; - SDL::endcapGeometry->load(endcap_geom.Data()); // centroid values added to the map - SDL::tiltedGeometry.load(tilted_geom.Data()); - SDL::moduleConnectionMap.load(mappath.Data()); + SDL::Globals::endcapGeometry->load(endcap_geom.Data()); // centroid values added to the map + SDL::Globals::tiltedGeometry.load(tilted_geom.Data()); + SDL::Globals::moduleConnectionMap.load(mappath.Data()); - vector pLSMapPath{ "layer1_subdet5", "layer2_subdet5", "layer1_subdet4", "layer2_subdet4" }; + SDL::MapPLStoLayer pLStoLayer; + const std::array pLSMapPath{{ "layer1_subdet5", "layer2_subdet5", "layer1_subdet4", "layer2_subdet4" }}; + static_assert(pLStoLayer[0].size() == pLSMapPath.size()); for (unsigned int i=0; i::modulesBuffers == nullptr) { + SDL::Globals::modulesBuffers = new SDL::modulesBuffer(SDL::devAcc); + } + if (SDL::Globals::pixelMapping == nullptr) { + SDL::Globals::pixelMapping = std::make_shared(); + } + SDL::Event::initModules(pLStoLayer, centroid.Data()); } //___________________________________________________________________________________________________________________________________________________________________________________________ @@ -62,7 +71,7 @@ bool goodEvent() } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runMiniDoublet(SDL::Event *event, int evt) +float runMiniDoublet(SDL::Event *event, int evt) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Mini-Doublet start " << evt << std::endl; @@ -90,7 +99,7 @@ float runMiniDoublet(SDL::Event *event, int evt) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runSegment(SDL::Event* event) +float runSegment(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Segment start" << std::endl; @@ -117,7 +126,7 @@ float runSegment(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runT3(SDL::Event* event) +float runT3(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco T3 start" << std::endl; @@ -145,7 +154,7 @@ float runT3(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runpT3(SDL::Event* event) +float runpT3(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Pixel Triplet pT3 start" << std::endl; @@ -159,13 +168,13 @@ float runpT3(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runTrackCandidate(SDL::Event* event) +float runTrackCandidate(SDL::Event* event) { return runTrackCandidateTest_v2(event); } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runQuintuplet(SDL::Event* event) +float runQuintuplet(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Quintuplet start" << std::endl; @@ -192,7 +201,7 @@ float runQuintuplet(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runPixelLineSegment(SDL::Event* event) +float runPixelLineSegment(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Pixel Line Segment start" << std::endl; @@ -205,7 +214,7 @@ float runPixelLineSegment(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runPixelQuintuplet(SDL::Event* event) +float runPixelQuintuplet(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco Pixel Quintuplet start" << std::endl; @@ -219,7 +228,7 @@ float runPixelQuintuplet(SDL::Event* event) } //___________________________________________________________________________________________________________________________________________________________________________________________ -float runTrackCandidateTest_v2(SDL::Event* event) +float runTrackCandidateTest_v2(SDL::Event* event) { TStopwatch my_timer; if (ana.verbose >= 2) std::cout << "Reco TrackCandidate start" << std::endl; @@ -881,7 +890,7 @@ void addInputsToLineSegmentTrackingPreLoad(std::vector> &out_ } //___________________________________________________________________________________________________________________________________________________________________________________________ -float addInputsToEventPreLoad(SDL::Event* event, +float addInputsToEventPreLoad(SDL::Event* event, bool useOMP, std::vector trkX, std::vector trkY, @@ -1214,7 +1223,7 @@ void writeMetaData() //__________________________________________________________________________________________ [[deprecated]] -float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP) +float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP) { TStopwatch my_timer; @@ -1420,7 +1429,7 @@ float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP) //__________________________________________________________________________________________ [[deprecated]] -float addInputsToLineSegmentTrackingUsingExplicitMemory(SDL::Event &event) +float addInputsToLineSegmentTrackingUsingExplicitMemory(SDL::Event &event) { return addInputsToLineSegmentTracking(event, true); } diff --git a/code/core/trkCore.h b/code/core/trkCore.h index 36fb6c10..f39083fc 100644 --- a/code/core/trkCore.h +++ b/code/core/trkCore.h @@ -15,18 +15,18 @@ void loadMaps(); bool goodEvent(); -float runMiniDoublet(SDL::Event* event, int evt); -float runSegment(SDL::Event* event); -float runT4(SDL::Event* event); -float runT4x(SDL::Event* event); -float runpT4(SDL::Event* event); -float runT3(SDL::Event* event); -float runTrackCandidate(SDL::Event* event); -float runTrackCandidateTest_v2(SDL::Event* event); -float runQuintuplet(SDL::Event* event); -float runPixelQuintuplet(SDL::Event* event); -float runPixelLineSegment(SDL::Event* event); -float runpT3(SDL::Event* event); +float runMiniDoublet(SDL::Event* event, int evt); +float runSegment(SDL::Event* event); +float runT4(SDL::Event* event); +float runT4x(SDL::Event* event); +float runpT4(SDL::Event* event); +float runT3(SDL::Event* event); +float runTrackCandidate(SDL::Event* event); +float runTrackCandidateTest_v2(SDL::Event* event); +float runQuintuplet(SDL::Event* event); +float runPixelQuintuplet(SDL::Event* event); +float runPixelLineSegment(SDL::Event* event); +float runpT3(SDL::Event* event); // --------------------- ======================== --------------------- @@ -69,7 +69,7 @@ void addInputsToLineSegmentTrackingPreLoad(std::vector> &out_ std::vector> &out_pixelType_vec, std::vector> &out_isQuad_vec); -float addInputsToEventPreLoad(SDL::Event *event, +float addInputsToEventPreLoad(SDL::Event *event, bool useOMP, std::vector trkX, std::vector trkY, @@ -105,7 +105,7 @@ void writeMetaData(); // --------------------- ======================== --------------------- // DEPRECATED FUNCTION -float addInputsToLineSegmentTrackingUsingExplicitMemory(SDL::Event &event); -float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP); +float addInputsToLineSegmentTrackingUsingExplicitMemory(SDL::Event &event); +float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP); #endif diff --git a/code/core/write_sdl_ntuple.cc b/code/core/write_sdl_ntuple.cc index 56f95638..c9a9c003 100644 --- a/code/core/write_sdl_ntuple.cc +++ b/code/core/write_sdl_ntuple.cc @@ -8,7 +8,7 @@ void createOutputBranches() } //________________________________________________________________________________________________________________________________ -void fillOutputBranches(SDL::Event* event) +void fillOutputBranches(SDL::Event* event) { setOutputBranches(event); setOptionalOutputBranches(event); @@ -186,7 +186,7 @@ void createGnnNtupleBranches() } //________________________________________________________________________________________________________________________________ -void setOutputBranches(SDL::Event* event) +void setOutputBranches(SDL::Event* event) { // ============ Sim tracks ============= @@ -290,7 +290,7 @@ void setOutputBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setOptionalOutputBranches(SDL::Event* event) +void setOptionalOutputBranches(SDL::Event* event) { #ifdef CUT_VALUE_DEBUG @@ -302,7 +302,7 @@ void setOptionalOutputBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setPixelQuintupletOutputBranches(SDL::Event* event) +void setPixelQuintupletOutputBranches(SDL::Event* event) { // ============ pT5 ============= SDL::pixelQuintupletsBuffer& pixelQuintupletsInGPU = (*event->getPixelQuintuplets()); @@ -389,7 +389,7 @@ void setPixelQuintupletOutputBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setQuintupletOutputBranches(SDL::Event* event) +void setQuintupletOutputBranches(SDL::Event* event) { SDL::quintupletsBuffer& quintupletsInGPU = (*event->getQuintuplets()); SDL::objectRangesBuffer& rangesInGPU = (*event->getRanges()); @@ -471,7 +471,7 @@ void setQuintupletOutputBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setPixelTripletOutputBranches(SDL::Event* event) +void setPixelTripletOutputBranches(SDL::Event* event) { SDL::pixelTripletsBuffer& pixelTripletsInGPU = (*event->getPixelTriplets()); SDL::tripletsBuffer& tripletsInGPU = *(event->getTriplets()); @@ -556,7 +556,7 @@ void setPixelTripletOutputBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setGnnNtupleBranches(SDL::Event* event) +void setGnnNtupleBranches(SDL::Event* event) { // Get relevant information SDL::segmentsBuffer& segmentsInGPU = (*event->getSegments()); @@ -707,7 +707,7 @@ void setGnnNtupleBranches(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void setGnnNtupleMiniDoublet(SDL::Event* event, unsigned int MD) +void setGnnNtupleMiniDoublet(SDL::Event* event, unsigned int MD) { // Get relevant information SDL::miniDoubletsBuffer& miniDoubletsInGPU = (*event->getMiniDoublets()); @@ -776,7 +776,7 @@ void setGnnNtupleMiniDoublet(SDL::Event* event, unsigned int MD) } //________________________________________________________________________________________________________________________________ -std::tuple> parseTrackCandidate(SDL::Event* event, unsigned int idx) +std::tuple> parseTrackCandidate(SDL::Event* event, unsigned int idx) { // Get the type of the track candidate SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); @@ -810,7 +810,7 @@ std::tuple> parseTrackCandidate(SDL:: } //________________________________________________________________________________________________________________________________ -std::tuple, vector> parsepT5(SDL::Event* event, unsigned int idx) +std::tuple, vector> parsepT5(SDL::Event* event, unsigned int idx) { // Get relevant information SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); @@ -948,7 +948,7 @@ std::tuple, vector> pars } //________________________________________________________________________________________________________________________________ -std::tuple, vector> parsepT3(SDL::Event* event, unsigned int idx) +std::tuple, vector> parsepT3(SDL::Event* event, unsigned int idx) { // Get relevant information SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); @@ -996,7 +996,7 @@ std::tuple, vector> pars } //________________________________________________________________________________________________________________________________ -std::tuple, vector> parseT5(SDL::Event* event, unsigned int idx) +std::tuple, vector> parseT5(SDL::Event* event, unsigned int idx) { SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); SDL::tripletsBuffer& tripletsInGPU = (*event->getTriplets()); @@ -1050,7 +1050,7 @@ std::tuple, vector> pars } //________________________________________________________________________________________________________________________________ -std::tuple, vector> parsepLS(SDL::Event* event, unsigned int idx) +std::tuple, vector> parsepLS(SDL::Event* event, unsigned int idx) { SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); SDL::segmentsBuffer& segmentsInGPU = (*event->getSegments()); @@ -1098,7 +1098,7 @@ float computeRadiusFromThreeAnchorHits(float x1, float y1, float x2, float y2, f } //________________________________________________________________________________________________________________________________ -void printHitMultiplicities(SDL::Event* event) +void printHitMultiplicities(SDL::Event* event) { SDL::modulesBuffer& modulesInGPU = (*event->getModules()); SDL::objectRangesBuffer& rangesInGPU = (*event->getRanges()); @@ -1113,7 +1113,7 @@ void printHitMultiplicities(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printMiniDoubletMultiplicities(SDL::Event* event) +void printMiniDoubletMultiplicities(SDL::Event* event) { SDL::miniDoubletsBuffer& miniDoubletsInGPU = (*event->getMiniDoublets()); SDL::modulesBuffer& modulesInGPU = (*event->getModules()); @@ -1133,7 +1133,7 @@ void printMiniDoubletMultiplicities(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printAllObjects(SDL::Event* event) +void printAllObjects(SDL::Event* event) { printMDs(event); printLSs(event); @@ -1142,7 +1142,7 @@ void printAllObjects(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printMDs(SDL::Event* event) +void printMDs(SDL::Event* event) { SDL::miniDoubletsBuffer& miniDoubletsInGPU = (*event->getMiniDoublets()); SDL::hitsBuffer& hitsInGPU = (*event->getHits()); @@ -1165,7 +1165,7 @@ void printMDs(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printLSs(SDL::Event* event) +void printLSs(SDL::Event* event) { SDL::segmentsBuffer& segmentsInGPU = (*event->getSegments()); SDL::miniDoubletsBuffer& miniDoubletsInGPU = (*event->getMiniDoublets()); @@ -1198,7 +1198,7 @@ void printLSs(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printpLSs(SDL::Event* event) +void printpLSs(SDL::Event* event) { SDL::segmentsBuffer& segmentsInGPU = (*event->getSegments()); SDL::miniDoubletsBuffer& miniDoubletsInGPU = (*event->getMiniDoublets()); @@ -1228,7 +1228,7 @@ void printpLSs(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void printT3s(SDL::Event* event) +void printT3s(SDL::Event* event) { SDL::tripletsBuffer& tripletsInGPU = (*event->getTriplets()); SDL::segmentsBuffer& segmentsInGPU = (*event->getSegments()); @@ -1270,7 +1270,7 @@ void printT3s(SDL::Event* event) } //________________________________________________________________________________________________________________________________ -void debugPrintOutlierMultiplicities(SDL::Event* event) +void debugPrintOutlierMultiplicities(SDL::Event* event) { SDL::trackCandidatesBuffer& trackCandidatesInGPU = (*event->getTrackCandidates()); SDL::tripletsBuffer& tripletsInGPU = (*event->getTriplets()); diff --git a/code/core/write_sdl_ntuple.h b/code/core/write_sdl_ntuple.h index 08078807..8a3a4207 100644 --- a/code/core/write_sdl_ntuple.h +++ b/code/core/write_sdl_ntuple.h @@ -17,37 +17,37 @@ void createRequiredOutputBranches(); void createOptionalOutputBranches(); void createGnnNtupleBranches(); -void fillOutputBranches(SDL::Event* event); -void setOutputBranches(SDL::Event* event); -void setOptionalOutputBranches(SDL::Event* event); -void setPixelQuintupletOutputBranches(SDL::Event* event); -void setQuintupletOutputBranches(SDL::Event* event); -void setPixelTripletOutputBranches(SDL::Event *event); -void setGnnNtupleBranches(SDL::Event* event); -void setGnnNtupleMiniDoublet(SDL::Event* event, unsigned int MD); - - -std::tuple> parseTrackCandidate(SDL::Event* event, unsigned int); -std::tuple, vector> parsepT5(SDL::Event* event, unsigned int); -std::tuple, vector> parsepT3(SDL::Event* event, unsigned int); -std::tuple, vector> parseT5(SDL::Event* event, unsigned int); -std::tuple, vector> parsepLS(SDL::Event* event, unsigned int); +void fillOutputBranches(SDL::Event* event); +void setOutputBranches(SDL::Event* event); +void setOptionalOutputBranches(SDL::Event* event); +void setPixelQuintupletOutputBranches(SDL::Event* event); +void setQuintupletOutputBranches(SDL::Event* event); +void setPixelTripletOutputBranches(SDL::Event *event); +void setGnnNtupleBranches(SDL::Event* event); +void setGnnNtupleMiniDoublet(SDL::Event* event, unsigned int MD); + + +std::tuple> parseTrackCandidate(SDL::Event* event, unsigned int); +std::tuple, vector> parsepT5(SDL::Event* event, unsigned int); +std::tuple, vector> parsepT3(SDL::Event* event, unsigned int); +std::tuple, vector> parseT5(SDL::Event* event, unsigned int); +std::tuple, vector> parsepLS(SDL::Event* event, unsigned int); // Print multiplicities -void printMiniDoubletMultiplicities(SDL::Event* event); -void printHitMultiplicities(SDL::Event* event); +void printMiniDoubletMultiplicities(SDL::Event* event); +void printHitMultiplicities(SDL::Event* event); // Print objects (GPU) -void printAllObjects(SDL::Event* event); -void printpT4s(SDL::Event* event); -void printMDs(SDL::Event* event); -void printLSs(SDL::Event* event); -void printpLSs(SDL::Event* event); -void printT3s(SDL::Event* event); -void printT4s(SDL::Event* event); -void printTCs(SDL::Event* event); +void printAllObjects(SDL::Event* event); +void printpT4s(SDL::Event* event); +void printMDs(SDL::Event* event); +void printLSs(SDL::Event* event); +void printpLSs(SDL::Event* event); +void printT3s(SDL::Event* event); +void printT4s(SDL::Event* event); +void printTCs(SDL::Event* event); // Print anomalous multiplicities -void debugPrintOutlierMultiplicities(SDL::Event* event); +void debugPrintOutlierMultiplicities(SDL::Event* event); #endif diff --git a/setup.sh b/setup.sh index 6bc292ca..ec986854 100644 --- a/setup.sh +++ b/setup.sh @@ -24,7 +24,7 @@ echo "Setup following ROOT. Make sure the appropriate setup file has been run. O which root DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -export LD_LIBRARY_PATH=$DIR/SDL/cuda:$DIR/SDL/cpu:$DIR:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$DIR/SDL:$DIR:$LD_LIBRARY_PATH export PATH=$DIR/bin:$PATH export PATH=$DIR/efficiency/bin:$PATH export PATH=$DIR/efficiency/python:$PATH