ATLAS Offline Software
FlexBinChunk.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Header file for class FlexBinChunk //
9 // //
10 // Description: The basic chunk, holding bin contents for //
11 // 16-bin. //
12 // //
13 // Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
14 // Initial version: March 2009 //
15 // //
17 
18 #ifndef FLEXBINCHUNK_H
19 #define FLEXBINCHUNK_H
20 
21 #define FLEXBINCHUNK_NBINS 16
22 
23 #include <cassert>
24 #include <limits>
25 #include "LWPools.h"
26 #include "LWHistGlobalSettings.h"
27 #include "LWHistBitUtils.h"
28 
29 template <class T>
30 class FlexBinChunk {
31 public:
32 
35 
36  //Todo: fill(..) and setBinContent(..) methods should return bool,
37  // indicating if the number of (fully?) allocated bins changed
38  // (so group can consider going to reverted mode).
39  void fill(unsigned bin);
40  void fill(unsigned bin, const double& weight);
41 
42  T getBinContent(unsigned bin) const;
43  void setBinContent(unsigned bin, const T& val);
44 
45  void copyContents(T*cont) const;
46  double Integral() const;
47 
48 private:
49 
52 
53  char * m_data;
54  uint32_t m_stages;//2 bits per bin (the two left-most for bin 0, the two right-most for bin 15)
55 
56  //Helpers for working with m_stages:
57  unsigned getStage(unsigned bin) const { return (m_stages >> (2*FLEXBINCHUNK_NBINS-2*(bin+1))) & 0x3; }
58  bool isEmpty(unsigned bin) const { return getStage(bin)==0x0; }
59  bool isChar(unsigned bin) const { return getStage(bin)==0x1; }
60  bool isShort(unsigned bin) const { return getStage(bin)==0x2; }
61  bool isFull(unsigned bin) const { return getStage(bin)==0x3; }
62 
63  //NB: We could put some of these methods outside of the template (to avoid multiple instantations)
64  bool stageIsEmpty(unsigned stage/*0x0, 0x1, 0x2 or 0x3*/) const { return stage==0x0; }
65  bool stageIsChar(unsigned stage/*0x0, 0x1, 0x2 or 0x3*/) const { return stage==0x1; }
66  bool stageIsShort(unsigned stage/*0x0, 0x1, 0x2 or 0x3*/) const { return stage==0x2; }
67  bool stageIsFull(unsigned stage/*0x0, 0x1, 0x2 or 0x3*/) const { return stage==0x3; }
68 
69  void setStage(unsigned bin, unsigned stage/*0x0, 0x1, 0x2 or 0x3*/);
70 
71  unsigned calcOffset(unsigned bin ) const;
72 
73  template <class Told, class Tnew>
74  unsigned changeBinStage(unsigned bin, unsigned offset);//returns new length of m_data
75  template <class T2>
76  T2& getBinValRef(unsigned offset);
77  template <class T2>
78  T2 getBinVal(unsigned offset) const;
79 
80  unsigned moveToFullStage(unsigned bin, unsigned currentstage,unsigned offset);//returns new length of m_data
81 
82 #if FLEXBINCHUNK_CONVERTALLTHRESHOLD != FLEXBINCHUNK_NBINS
83  void possibleMoveAllBins(unsigned newarrsize);//do nothing if newarrsize==0
84  template <class T2>
85  void moveAllBinsToStage(uint16_t oldallocsize);
86 #define FLEXBINCHUNK_TESTMOVEALLBINS(newarrsize) if (newarrsize) possibleMoveAllBins(newarrsize)
87 #else
88 #define FLEXBINCHUNK_TESTMOVEALLBINS(newarrsize) if (newarrsize);
89 //(not empty to avoid compiler warnings)
90 #endif
91 };
92 
93 #include "FlexBinChunk.icc"
94 
95 #endif
LWPools.h
FlexBinChunk::isChar
bool isChar(unsigned bin) const
Definition: FlexBinChunk.h:59
FlexBinChunk::m_data
char * m_data
Definition: FlexBinChunk.h:53
FlexBinChunk::changeBinStage
unsigned changeBinStage(unsigned bin, unsigned offset)
FlexBinChunk::stageIsEmpty
bool stageIsEmpty(unsigned stage) const
Definition: FlexBinChunk.h:64
python.FPGATrackSimAnalysisConfig.stage
stage
Definition: FPGATrackSimAnalysisConfig.py:451
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
FlexBinChunk::FlexBinChunk
FlexBinChunk(const FlexBinChunk &)
FlexBinChunk::~FlexBinChunk
~FlexBinChunk()
FlexBinChunk::fill
void fill(unsigned bin, const double &weight)
FlexBinChunk::fill
void fill(unsigned bin)
LWHistBitUtils.h
bin
Definition: BinsDiffFromStripMedian.h:43
FlexBinChunk::m_stages
uint32_t m_stages
Definition: FlexBinChunk.h:54
FlexBinChunk::calcOffset
unsigned calcOffset(unsigned bin) const
FlexBinChunk::setStage
void setStage(unsigned bin, unsigned stage)
FlexBinChunk::possibleMoveAllBins
void possibleMoveAllBins(unsigned newarrsize)
LWHistGlobalSettings.h
FlexBinChunk::copyContents
void copyContents(T *cont) const
FlexBinChunk::getBinContent
T getBinContent(unsigned bin) const
FlexBinChunk::setBinContent
void setBinContent(unsigned bin, const T &val)
FlexBinChunk::stageIsFull
bool stageIsFull(unsigned stage) const
Definition: FlexBinChunk.h:67
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:190
FlexBinChunk
Definition: FlexBinChunk.h:30
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
FlexBinChunk::moveToFullStage
unsigned moveToFullStage(unsigned bin, unsigned currentstage, unsigned offset)
FlexBinChunk::getBinValRef
T2 & getBinValRef(unsigned offset)
FlexBinChunk::isShort
bool isShort(unsigned bin) const
Definition: FlexBinChunk.h:60
FlexBinChunk::moveAllBinsToStage
void moveAllBinsToStage(uint16_t oldallocsize)
FlexBinChunk::isFull
bool isFull(unsigned bin) const
Definition: FlexBinChunk.h:61
FlexBinChunk::getStage
unsigned getStage(unsigned bin) const
Definition: FlexBinChunk.h:57
FlexBinChunk::getBinVal
T2 getBinVal(unsigned offset) const
FlexBinChunk::FlexBinChunk
FlexBinChunk()
FlexBinChunk::stageIsShort
bool stageIsShort(unsigned stage) const
Definition: FlexBinChunk.h:66
FlexBinChunk::stageIsChar
bool stageIsChar(unsigned stage) const
Definition: FlexBinChunk.h:65
FlexBinChunk::operator=
FlexBinChunk & operator=(const FlexBinChunk &)
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
FlexBinChunk.icc
FlexBinChunk::Integral
double Integral() const
FLEXBINCHUNK_NBINS
#define FLEXBINCHUNK_NBINS
Definition: FlexBinChunk.h:21
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
FlexBinChunk::isEmpty
bool isEmpty(unsigned bin) const
Definition: FlexBinChunk.h:58