Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
28c5e70
cluserless
VinInn Jun 13, 2020
2d29238
put ahead of time
VinInn Jun 13, 2020
bb67896
make OmniRef aout of SoA
VinInn Jun 14, 2020
e7e3edc
add one more assert
VinInn Jun 14, 2020
c77fc8c
make ref, make Omni, store
VinInn Jun 14, 2020
0fc3cbb
formatted
VinInn Jun 14, 2020
0aae493
fix track builder
VinInn Jun 14, 2020
1bfde7c
make cluster-less hit not re-fittable
VinInn Jun 14, 2020
9237b81
a consolidated producer
VinInn Jun 15, 2020
77a73d1
a consolidated producer
VinInn Jun 15, 2020
36eb5b1
avoid copy
VinInn Jun 16, 2020
b611033
make host version of SOA
VinInn Jun 16, 2020
73a7f15
use rechit in mask
VinInn Jun 17, 2020
b247a5f
start to convert to consume rechits
VinInn Jun 17, 2020
66f3a09
compiles
VinInn Jun 17, 2020
d34c66f
Synchronise with CMSSW_11_1_0_pre9_CANDIDATE
fwyzard Jun 17, 2020
ac73a72
iterative tracking consumes pixel rechits
VinInn Jun 18, 2020
9313467
protect cloning and make a test
VinInn Jun 19, 2020
fad436e
more protections
VinInn Jun 19, 2020
61148a3
back to almost clusterless
VinInn Jun 19, 2020
5270d42
fix omni comparisons
VinInn Jun 20, 2020
9de1160
Merged ClusterLess from repository VinInn with cms-merge-topic
VinInn Jun 22, 2020
35ad1ac
make clusterTPassociation working
VinInn Jun 22, 2020
a8cc00f
back to default
VinInn Jun 22, 2020
be468b5
back to default
VinInn Jun 22, 2020
97b2418
Merged ClusterLess from repository VinInn with cms-merge-topic
VinInn Jun 23, 2020
6119dca
make phase2 wf to run
VinInn Jun 28, 2020
1eb872b
fix run2 wf as well
VinInn Jun 28, 2020
687f0cf
code format
VinInn Jun 28, 2020
36428c8
add specific customize for HLT
VinInn Jun 29, 2020
5aef6bc
Merged ClusterLess from repository VinInn with cms-merge-topic
VinInn Jul 6, 2020
c3f74a5
use pixmx on gpu, test improved error in z in legacy
VinInn Jul 7, 2020
e7f8988
fix merge conflicts
VinInn Jul 14, 2020
12885fe
Merged ClusterLess11 from repository VinInn with cms-merge-topic
VinInn Jul 14, 2020
ba763a5
sample errors from size and charge
VinInn Jul 15, 2020
725a70a
fix some trivial bugs
VinInn Jul 15, 2020
0dc1cfc
use a different charge scale for y
VinInn Jul 15, 2020
ff8ca56
sample error by position
VinInn Jul 16, 2020
82a87eb
fix position
VinInn Jul 16, 2020
048a4f9
reduce size, fix ape
VinInn Jul 17, 2020
5d45c15
add sign to angle (makes not diff)
VinInn Jul 18, 2020
142fb0d
make last bin overflow
VinInn Jul 19, 2020
1912e22
remove printputs
VinInn Jul 19, 2020
2025e6f
add a status word
VinInn Jul 19, 2020
ec3314e
new file
VinInn Jul 20, 2020
2ac98ff
make CPEFast to better reproduce Generic
VinInn Jul 20, 2020
d9c676b
keep total charge as original one
VinInn Jul 20, 2020
1d574c7
code format
VinInn Jul 20, 2020
55f87f8
move default to 25
VinInn Jul 21, 2020
e106a69
Merged NewFastErr from repository VinInn with cms-merge-topic
VinInn Jul 23, 2020
707bf99
merge
VinInn Jul 23, 2020
9309dbf
Merged ClusterLess12 from repository VinInn with cms-merge-topic
VinInn Jul 23, 2020
247c9c8
add status
VinInn Jul 23, 2020
3c099a7
store a real SOA
VinInn Jul 23, 2020
c62aeb4
add dicts
VinInn Jul 23, 2020
9d3dac4
fix legacy
VinInn Jul 24, 2020
62c4d70
remove forgotten cout
VinInn Jul 26, 2020
6eae626
compiles
VinInn Jul 26, 2020
aded9c1
compiles
VinInn Jul 26, 2020
d21f745
compiles
VinInn Jul 26, 2020
ab661f9
compiles
VinInn Jul 26, 2020
7b18d05
also in CPU workflow
VinInn Jul 26, 2020
ac49b84
remove test mods
VinInn Jul 26, 2020
5ced788
make use of __cpp_if_constexpr
VinInn Jul 26, 2020
a9e1e67
Merged ClusterLess12 from repository VinInn with cms-merge-topic
VinInn Jul 28, 2020
a7fa30a
fix few more places
VinInn Jul 28, 2020
beaed19
debug it
VinInn Jul 30, 2020
309189b
debug it
VinInn Jul 30, 2020
22fae70
add IBC
VinInn Jul 30, 2020
66eb96f
code format
VinInn Jul 30, 2020
af7b136
oops
VinInn Jul 30, 2020
5424495
fix setting og charge and status
VinInn Jul 31, 2020
90c8033
remove duplicate code
VinInn Jul 31, 2020
a121549
improve debug
VinInn Aug 2, 2020
4745ebe
fix cluster skipping
VinInn Aug 4, 2020
780bedb
compute error using track-angle
VinInn Aug 6, 2020
5274395
clean
VinInn Aug 9, 2020
5f2c828
test status
VinInn Aug 9, 2020
c19ff24
clean
VinInn Aug 11, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CUDADataFormats/TrackingRecHit/interface/SiPixelStatus.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef CUDADataFormats_TrackingRecHit_interface_SiPixelStatus_H
#define CUDADataFormats_TrackingRecHit_interface_SiPixelStatus_H

#include <cstdint>

struct SiPixelStatus {
uint8_t isBigX : 1;
uint8_t isOneX : 1;
uint8_t isBigY : 1;
uint8_t isOneY : 1;
uint8_t qBin : 3;
};

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ class TrackingRecHit2DHeterogeneous {

TrackingRecHit2DHeterogeneous() = default;

explicit TrackingRecHit2DHeterogeneous(uint32_t nHits,
pixelCPEforGPU::ParamsOnGPU const* cpeParams,
uint32_t const* hitsModuleStart,
cudaStream_t stream);
explicit TrackingRecHit2DHeterogeneous(
uint32_t nHits,
pixelCPEforGPU::ParamsOnGPU const* cpeParams,
uint32_t const* hitsModuleStart,
cudaStream_t stream,
TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits> const* input = nullptr);

~TrackingRecHit2DHeterogeneous() = default;

Expand All @@ -41,6 +43,9 @@ class TrackingRecHit2DHeterogeneous {
cms::cuda::host::unique_ptr<uint16_t[]> detIndexToHostAsync(cudaStream_t stream) const;
cms::cuda::host::unique_ptr<uint32_t[]> hitsModuleStartToHostAsync(cudaStream_t stream) const;

// needs specialization for Host
void copyFromGPU(TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits> const* input, cudaStream_t stream);

private:
static constexpr uint32_t n16 = 4;
static constexpr uint32_t n32 = 9;
Expand All @@ -64,28 +69,35 @@ class TrackingRecHit2DHeterogeneous {
int16_t* m_iphi;
};

using TrackingRecHit2DGPU = TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits>;
using TrackingRecHit2DCUDA = TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits>;
using TrackingRecHit2DCPU = TrackingRecHit2DHeterogeneous<cms::cudacompat::CPUTraits>;
using TrackingRecHit2DHost = TrackingRecHit2DHeterogeneous<cms::cudacompat::HostTraits>;

#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h"
#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"

template <typename Traits>
TrackingRecHit2DHeterogeneous<Traits>::TrackingRecHit2DHeterogeneous(uint32_t nHits,
pixelCPEforGPU::ParamsOnGPU const* cpeParams,
uint32_t const* hitsModuleStart,
cudaStream_t stream)
TrackingRecHit2DHeterogeneous<Traits>::TrackingRecHit2DHeterogeneous(
uint32_t nHits,
pixelCPEforGPU::ParamsOnGPU const* cpeParams,
uint32_t const* hitsModuleStart,
cudaStream_t stream,
TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits> const* input)
: m_nHits(nHits), m_hitsModuleStart(hitsModuleStart) {
auto view = Traits::template make_host_unique<TrackingRecHit2DSOAView>(stream);

view->m_nHits = nHits;
m_view = Traits::template make_device_unique<TrackingRecHit2DSOAView>(stream);
m_AverageGeometryStore = Traits::template make_device_unique<TrackingRecHit2DSOAView::AverageGeometry>(stream);
m_view = Traits::template make_unique<TrackingRecHit2DSOAView>(stream); // leave it on host and pass it by value?
m_AverageGeometryStore = Traits::template make_unique<TrackingRecHit2DSOAView::AverageGeometry>(stream);
view->m_averageGeometry = m_AverageGeometryStore.get();
view->m_cpeParams = cpeParams;
view->m_hitsModuleStart = hitsModuleStart;

// if empy do not bother
if (0 == nHits) {
if
#ifndef __CUDACC__
#ifdef __cpp_if_constexpr
constexpr
#endif
(std::is_same<Traits, cms::cudacompat::GPUTraits>::value) {
Expand All @@ -101,38 +113,57 @@ TrackingRecHit2DHeterogeneous<Traits>::TrackingRecHit2DHeterogeneous(uint32_t nH
// if ordering is relevant they may have to be stored phi-ordered by layer or so
// this will break 1to1 correspondence with cluster and module locality
// so unless proven VERY inefficient we keep it ordered as generated
m_store16 = Traits::template make_device_unique<uint16_t[]>(nHits * n16, stream);
m_store32 = Traits::template make_device_unique<float[]>(nHits * n32 + 11, stream);
m_HistStore = Traits::template make_device_unique<TrackingRecHit2DSOAView::Hist>(stream);

auto get16 = [&](int i) { return m_store16.get() + i * nHits; };
// host copy is "reduced" (to be reviewed at some point)
if
#ifdef __cpp_if_constexpr
constexpr
#endif
(std::is_same<Traits, cms::cudacompat::HostTraits>::value) {
// it has to compile for ALL cases
copyFromGPU(input, stream);
} else {
assert(input == nullptr);
m_store16 = Traits::template make_unique<uint16_t[]>(nHits * n16, stream);
m_store32 = Traits::template make_unique<float[]>(nHits * n32 + 11, stream);
m_HistStore = Traits::template make_unique<TrackingRecHit2DSOAView::Hist>(stream);
}

auto get32 = [&](int i) { return m_store32.get() + i * nHits; };

// copy all the pointers
m_hist = view->m_hist = m_HistStore.get();

view->m_xl = get32(0);
view->m_yl = get32(1);
view->m_xerr = get32(2);
view->m_yerr = get32(3);
view->m_chargeAndStatus = reinterpret_cast<uint32_t*>(get32(4));

view->m_xg = get32(4);
view->m_yg = get32(5);
view->m_zg = get32(6);
view->m_rg = get32(7);

m_iphi = view->m_iphi = reinterpret_cast<int16_t*>(get16(0));

view->m_charge = reinterpret_cast<int32_t*>(get32(8));
view->m_xsize = reinterpret_cast<int16_t*>(get16(2));
view->m_ysize = reinterpret_cast<int16_t*>(get16(3));
view->m_detInd = get16(1);

m_hitsLayerStart = view->m_hitsLayerStart = reinterpret_cast<uint32_t*>(get32(n32));
if
#ifdef __cpp_if_constexpr
constexpr
#endif
(!std::is_same<Traits, cms::cudacompat::HostTraits>::value) {
assert(input == nullptr);
view->m_xg = get32(5);
view->m_yg = get32(6);
view->m_zg = get32(7);
view->m_rg = get32(8);

auto get16 = [&](int i) { return m_store16.get() + i * nHits; };
m_iphi = view->m_iphi = reinterpret_cast<int16_t*>(get16(1));

view->m_xsize = reinterpret_cast<int16_t*>(get16(2));
view->m_ysize = reinterpret_cast<int16_t*>(get16(3));
view->m_detInd = get16(0);

m_hist = view->m_hist = m_HistStore.get();
m_hitsLayerStart = view->m_hitsLayerStart = reinterpret_cast<uint32_t*>(get32(n32));
}

// transfer view
if
#ifndef __CUDACC__
#ifdef __cpp_if_constexpr
constexpr
#endif
(std::is_same<Traits, cms::cudacompat::GPUTraits>::value) {
Expand All @@ -142,9 +173,4 @@ TrackingRecHit2DHeterogeneous<Traits>::TrackingRecHit2DHeterogeneous(uint32_t nH
}
}

using TrackingRecHit2DGPU = TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits>;
using TrackingRecHit2DCUDA = TrackingRecHit2DHeterogeneous<cms::cudacompat::GPUTraits>;
using TrackingRecHit2DCPU = TrackingRecHit2DHeterogeneous<cms::cudacompat::CPUTraits>;
using TrackingRecHit2DHost = TrackingRecHit2DHeterogeneous<cms::cudacompat::HostTraits>;

#endif // CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DHeterogeneous_h
52 changes: 52 additions & 0 deletions CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DReduced.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#ifndef CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DReduced_h
#define CUDADataFormats_TrackingRecHit_interface_TrackingRecHit2DReduced_h

#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h"
#include "CUDADataFormats/Common/interface/HostProduct.h"

// a reduced (in content and therefore in size) version to be used on CPU for Legacy reconstruction
class TrackingRecHit2DReduced {
public:
using HLPstorage = HostProduct<float[]>;
using HIDstorage = HostProduct<uint16_t[]>;

template <typename UP32, typename UP16>
TrackingRecHit2DReduced(UP32&& istore32, UP16&& istore16, int nhits)
: m_store32(std::move(istore32)), m_store16(std::move(istore16)), m_nHits(nhits) {
auto get32 = [&](int i) { return const_cast<float*>(m_store32.get()) + i * nhits; };

// copy all the pointers (better be in sync with the producer store)

m_view.m_xl = get32(0);
m_view.m_yl = get32(1);
m_view.m_xerr = get32(2);
m_view.m_yerr = get32(3);
m_view.m_chargeAndStatus = reinterpret_cast<uint32_t*>(get32(4));
m_view.m_detInd = const_cast<uint16_t*>(m_store16.get());
}

// view only!
TrackingRecHit2DReduced(TrackingRecHit2DSOAView const& iview, int nhits) : m_view(iview), m_nHits(nhits) {}

TrackingRecHit2DReduced() = default;
~TrackingRecHit2DReduced() = default;

TrackingRecHit2DReduced(const TrackingRecHit2DReduced&) = delete;
TrackingRecHit2DReduced& operator=(const TrackingRecHit2DReduced&) = delete;
TrackingRecHit2DReduced(TrackingRecHit2DReduced&&) = default;
TrackingRecHit2DReduced& operator=(TrackingRecHit2DReduced&&) = default;

TrackingRecHit2DSOAView& view() { return m_view; }
TrackingRecHit2DSOAView const& view() const { return m_view; }

auto nHits() const { return m_nHits; }

TrackingRecHit2DSOAView m_view;

HLPstorage m_store32;
HIDstorage m_store16;

int m_nHits;
};

#endif
24 changes: 21 additions & 3 deletions CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DSOAView.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@
#include "HeterogeneousCore/CUDAUtilities/interface/HistoContainer.h"
#include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h"
#include "Geometry/TrackerGeometryBuilder/interface/phase1PixelTopology.h"
#include "CUDADataFormats/TrackingRecHit/interface/SiPixelStatus.h"

namespace pixelCPEforGPU {
struct ParamsOnGPU;
}

class TrackingRecHit2DSOAView {
public:
using Status = SiPixelStatus;
static_assert(sizeof(Status) == sizeof(uint8_t));

static constexpr uint32_t maxHits() { return gpuClustering::MaxNumClusters; }
using hindex_type = uint16_t; // if above is <=2^16

Expand All @@ -24,6 +28,7 @@ class TrackingRecHit2DSOAView {

template <typename>
friend class TrackingRecHit2DHeterogeneous;
friend class TrackingRecHit2DReduced;

__device__ __forceinline__ uint32_t nHits() const { return m_nHits; }

Expand All @@ -49,8 +54,20 @@ class TrackingRecHit2DSOAView {
__device__ __forceinline__ int16_t& iphi(int i) { return m_iphi[i]; }
__device__ __forceinline__ int16_t iphi(int i) const { return __ldg(m_iphi + i); }

__device__ __forceinline__ int32_t& charge(int i) { return m_charge[i]; }
__device__ __forceinline__ int32_t charge(int i) const { return __ldg(m_charge + i); }

__device__ __forceinline__ void setChargeAndStatus(int i, uint32_t ich, Status is) {
// static_assert(0xffffff == chargeMask());
ich = std::min(ich, chargeMask());
uint32_t w = *reinterpret_cast<uint8_t*>(&is);
ich |= (w << 24);
m_chargeAndStatus[i] = ich;
}

__device__ __forceinline__ Status status(int i) const {
uint8_t w = __ldg(m_chargeAndStatus + i) >> 24;
return *reinterpret_cast<Status*>(&w);
}
__device__ __forceinline__ uint32_t charge(int i) const { return __ldg(m_chargeAndStatus + i) & chargeMask(); }
__device__ __forceinline__ int16_t& clusterSizeX(int i) { return m_xsize[i]; }
__device__ __forceinline__ int16_t clusterSizeX(int i) const { return __ldg(m_xsize + i); }
__device__ __forceinline__ int16_t& clusterSizeY(int i) { return m_ysize[i]; }
Expand Down Expand Up @@ -81,7 +98,8 @@ class TrackingRecHit2DSOAView {
int16_t* m_iphi;

// cluster properties
int32_t* m_charge;
static constexpr uint32_t chargeMask() { return (1 << 24) - 1; }
uint32_t* m_chargeAndStatus;
int16_t* m_xsize;
int16_t* m_ysize;
uint16_t* m_detInd;
Expand Down
24 changes: 19 additions & 5 deletions CUDADataFormats/TrackingRecHit/src/TrackingRecHit2DCUDA.cc
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DCUDA.h"
#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DHeterogeneous.h"
#include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h"
#include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
#include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h"

template <>
cms::cuda::host::unique_ptr<float[]> TrackingRecHit2DCUDA::localCoordToHostAsync(cudaStream_t stream) const {
auto ret = cms::cuda::make_host_unique<float[]>(4 * nHits(), stream);
cms::cuda::copyAsync(ret, m_store32, 4 * nHits(), stream);
cms::cuda::host::unique_ptr<float[]> TrackingRecHit2DGPU::localCoordToHostAsync(cudaStream_t stream) const {
auto ret = cms::cuda::make_host_unique<float[]>(5 * nHits(), stream);
cms::cuda::copyAsync(ret, m_store32, 5 * nHits(), stream);
return ret;
}

template <>
cms::cuda::host::unique_ptr<uint32_t[]> TrackingRecHit2DCUDA::hitsModuleStartToHostAsync(cudaStream_t stream) const {
cms::cuda::host::unique_ptr<uint16_t[]> TrackingRecHit2DGPU::detIndexToHostAsync(cudaStream_t stream) const {
auto ret = cms::cuda::make_host_unique<uint16_t[]>(nHits(), stream);
cms::cuda::copyAsync(ret, m_store16, nHits(), stream);
return ret;
}

template <>
cms::cuda::host::unique_ptr<uint32_t[]> TrackingRecHit2DGPU::hitsModuleStartToHostAsync(cudaStream_t stream) const {
auto ret = cms::cuda::make_host_unique<uint32_t[]>(2001, stream);
cudaCheck(cudaMemcpyAsync(ret.get(), m_hitsModuleStart, 4 * 2001, cudaMemcpyDefault, stream));
return ret;
}

// the only specialization needed
template <>
void TrackingRecHit2DHost::copyFromGPU(TrackingRecHit2DGPU const* input, cudaStream_t stream) {
assert(input);
m_store32 = input->localCoordToHostAsync(stream);
}
1 change: 1 addition & 0 deletions CUDADataFormats/TrackingRecHit/src/classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "CUDADataFormats/Common/interface/Product.h"
#include "CUDADataFormats/Common/interface/HostProduct.h"
#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DCUDA.h"
#include "CUDADataFormats/TrackingRecHit/interface/TrackingRecHit2DReduced.h"
#include "DataFormats/Common/interface/Wrapper.h"

#endif // CUDADataFormats_SiPixelCluster_src_classes_h
6 changes: 6 additions & 0 deletions CUDADataFormats/TrackingRecHit/src/classes_def.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
<class name="edm::Wrapper<TrackingRecHit2DCPU>" persistent="false"/>
<class name="edm::Wrapper<TrackingRecHit2DHost>" persistent="false"/>
<class name="edm::Wrapper<cms::cuda::Product<TrackingRecHit2DGPU>>" persistent="false"/>
<class name="TrackingRecHit2DReduced" persistent="false"/>
<class name="edm::Wrapper<TrackingRecHit2DReduced>" persistent="false"/>
<class name="HostProduct<unsigned short[]>" persistent="false"/>
<class name="edm::Wrapper<HostProduct<unsigned short[]>>" persistent="false"/>
<class name="HostProduct<unsigned int[]>" persistent="false"/>
<class name="edm::Wrapper<HostProduct<unsigned int[]>>" persistent="false"/>
<class name="HostProduct<unsigned float[]>" persistent="false"/>
<class name="edm::Wrapper<HostProduct<unsigned float[]>>" persistent="false"/>
</lcgdict>
1 change: 1 addition & 0 deletions CUDADataFormats/TrackingRecHit/test/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<use name="CUDADataFormats/TrackingRecHit"/>
<flags CUDA_FLAGS="-g -DGPU_DEBUG"/>
<bin file="TrackingRecHit2DCUDA_t.cpp TrackingRecHit2DCUDA_t.cu" name="TrackingRecHit2DCUDA_t"/>
<bin file="SiPixelStatus_t.cpp"/>
32 changes: 32 additions & 0 deletions CUDADataFormats/TrackingRecHit/test/SiPixelStatus_t.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include "CUDADataFormats/TrackingRecHit/interface/SiPixelStatus.h"

#include<cassert>

int main() {

assert(sizeof(SiPixelStatus)==sizeof(uint8_t));

SiPixelStatus status;
status.isOneX = true;
status.isOneY = false;


status.isBigX = 1;
status.isBigY = 0;


assert(status.isOneX);
assert(false==(!status.isOneX));
assert(1==status.isOneX);
assert(!status.isOneY);
assert(0==status.isOneY);

assert(status.isBigX);
assert(false==(!status.isBigX));
assert(1==status.isBigX);
assert(!status.isBigY);
assert(0==status.isBigY);


return 0;
}
Loading