Belle II Software  release-05-02-19
globalLabel.cc
1 
2 #include <alignment/dbobjects/VXDAlignment.h>
3 #include <alignment/GlobalLabel.h>
4 #include <alignment/PedeResult.h>
5 #include <cdc/dataobjects/WireID.h>
6 #include <cdc/dbobjects/CDCAlignment.h>
7 #include <vxd/dataobjects/VxdID.h>
8 
9 #include <gtest/gtest.h>
10 
11 #include <iostream>
12 #include <string>
13 
14 using namespace std;
15 using namespace Belle2;
16 using namespace alignment;
17 
18 namespace Belle2 {
24  class GlobalLabelTest : public ::testing::Test {
25  protected:
27  short vxdSensor;
29  short cdcWire;
31  int paramid;
32 
34  virtual void SetUp()
35  {
36  vxdSensor = VxdID(1, 2, 1).getID();
37  cdcWire = WireID(1, 4, 60).getEWire();
38  paramid = 9;
39  }
40 
43  {
44  GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid).registerTimeDependent(1, 100); // timeid=1 for 1..100
45  GlobalLabel::construct<CDCAlignment>(cdcWire, paramid).registerTimeDependent(1, 50); // timeid=1 for 1..50
46  GlobalLabel::construct<CDCAlignment>(cdcWire, paramid).registerTimeDependent(51, 100); // timeid=51 for 51..100
47  }
48 
50  void setTime(unsigned int timeid)
51  {
52  unsigned int& subrun = GlobalLabel::getCurrentTimeIntervalRef();
53  subrun = timeid;
54  }
55 
57  virtual void TearDown()
58  {
59  GlobalLabel::clearTimeDependentParamaters();
60  }
61 
62  };
63 
65  TEST_F(GlobalLabelTest, LargeNumberOfTimeDependentParameters)
66  {
67  for (int ilayer = 1; ilayer < 6; ilayer++) {
68  for (unsigned int subrun = 0; subrun <= GlobalLabel::maxTID; subrun++) {
69  VxdID id(ilayer, 0, 0);
70  GlobalLabel lab = GlobalLabel::construct<VXDAlignment>(id.getID(), 1);
71  lab.registerTimeDependent(subrun, subrun);
72  lab.setParameterId(2);
73  lab.registerTimeDependent(subrun, subrun);
74  lab.setParameterId(3);
75  lab.registerTimeDependent(subrun, subrun);
76  }
77  }
78  // Ask 1000-times for time dep.label (could be in a single track)
79  for (int ilayer = 1; ilayer < 6; ilayer++) {
80  for (unsigned int i = 0; i <= GlobalLabel::maxTID; i++) {
81  setTime(i);
82  GlobalLabel movingLayer = GlobalLabel::construct<VXDAlignment>(VxdID(ilayer, 0, 0).getID(), 2);
83  GlobalLabel movingLayerStaticParam = GlobalLabel::construct<VXDAlignment>(VxdID(ilayer, 0, 0).getID(), 4);
84  GlobalLabel staticLayer = GlobalLabel::construct<VXDAlignment>(VxdID(6, 0, 0).getID(), 2);
85 
86  EXPECT_EQ(i, movingLayer.getTimeId());
87  EXPECT_EQ(0, movingLayerStaticParam.getTimeId());
88  EXPECT_EQ(0, staticLayer.getTimeId());
89  }
90  }
91 
92  }
93 
95  TEST_F(GlobalLabelTest, TimeSettingWorkflow)
96  {
97  GlobalLabel vxdlabel1 = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
98  GlobalLabel Cvxdlabel1 = GlobalLabel::construct<VXDAlignment>(vxdSensor, 2);
99  EXPECT_EQ(0, vxdlabel1.getTimeId());
100  EXPECT_EQ(0, Cvxdlabel1.getTimeId());
101 
102  registerSomeTimeDepParams();
103  GlobalLabel vxdlabel2 = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
104  GlobalLabel Cvxdlabel2 = GlobalLabel::construct<VXDAlignment>(vxdSensor, 2);
105  EXPECT_EQ(0, vxdlabel2.getTimeId());
106  EXPECT_EQ(0, Cvxdlabel2.getTimeId());
107 
108  setTime(80);
109  GlobalLabel vxdlabel3 = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
110  GlobalLabel Cvxdlabel3 = GlobalLabel::construct<VXDAlignment>(vxdSensor, 2);
111  EXPECT_EQ(1, vxdlabel3.getTimeId());
112  EXPECT_EQ(0, Cvxdlabel3.getTimeId());
113 
114  }
115 
117  TEST_F(GlobalLabelTest, GettersSettersOperators)
118  {
119  GlobalLabel vxdlabel1 = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
120  GlobalLabel vxdlabel2(100873609);
121 
122  // getters
123  EXPECT_EQ(80, GlobalLabel::getCurrentTimeIntervalRef());
124  EXPECT_EQ(paramid, vxdlabel1.getParameterId());
125  EXPECT_EQ(0, vxdlabel1.getTimeFlag());
126  EXPECT_EQ(0, vxdlabel1.getTimeId());
127  EXPECT_EQ(vxdSensor, vxdlabel1.getElementId());
128 
129  // cast operators
130  EXPECT_EQ(100873609, (int)vxdlabel1);
131  EXPECT_EQ(100873609, (unsigned int)vxdlabel1);
132 
133  // getters (GlobalLabel from label)
134  EXPECT_EQ(80, GlobalLabel::getCurrentTimeIntervalRef());
135  EXPECT_EQ(paramid, vxdlabel2.getParameterId());
136  EXPECT_EQ(0, vxdlabel2.getTimeFlag());
137  EXPECT_EQ(0, vxdlabel2.getTimeId());
138  EXPECT_EQ(vxdSensor, vxdlabel2.getElementId());
139 
140  // no detector mismatch (GlobalLabel from label)
141  // cats operator (GlobalLabel from label)
142  EXPECT_EQ(100873609, (int)vxdlabel2);
143  EXPECT_EQ(100873609, (unsigned int)vxdlabel2);
144 
145  // Assignment
146  GlobalLabel other = GlobalLabel::construct<CDCAlignment>(cdcWire, 2);
147  EXPECT_EQ(270620402, other.label());
148  other = vxdlabel1;
149  EXPECT_EQ(100873609, other.label());
150  }
151 
153  TEST_F(GlobalLabelTest, QickTestNormalOperation)
154  {
155 
156  // Test time indep. detector constructors
157  GlobalLabel vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
158  GlobalLabel cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
159  EXPECT_EQ(100873609, vxdlabel.label());
160  EXPECT_EQ(270620409, cdclabel.label());
161  EXPECT_EQ(paramid, vxdlabel.getParameterId());
162  EXPECT_EQ(paramid, cdclabel.getParameterId());
163  // Test time indep. label constructor
164  vxdlabel = GlobalLabel(100873609);
165  cdclabel = GlobalLabel(270620409);
166  EXPECT_EQ(paramid, vxdlabel.getParameterId());
167  EXPECT_EQ(paramid, cdclabel.getParameterId());
168 
169  // Register time intervals
170  registerSomeTimeDepParams();
171 
172  // Nothing to test on dump... (enable it and see the time-dep map:-)
173  //vxdlabel.dump(100);
174 
175  // Test detector time dependent constructors
176  setTime(10);
177  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
178  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
179  EXPECT_EQ(1, vxdlabel.getTimeId());
180  EXPECT_EQ(1, cdclabel.getTimeId());
181  EXPECT_EQ(paramid, vxdlabel.getParameterId());
182  EXPECT_EQ(paramid, cdclabel.getParameterId());
183 
184  // Test time dependent label constructor
185  vxdlabel = GlobalLabel(vxdlabel.label());
186  cdclabel = GlobalLabel(cdclabel.label());
187  EXPECT_EQ(paramid, vxdlabel.getParameterId());
188  EXPECT_EQ(paramid, cdclabel.getParameterId());
189  EXPECT_EQ(1, vxdlabel.getTimeId());
190  EXPECT_EQ(1, cdclabel.getTimeId());
191 
192  // Test that time dependence works correctly
193  // on several subruns
194  setTime(0);
195  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
196  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
197  EXPECT_EQ(0, vxdlabel.getTimeId());
198  EXPECT_EQ(0, cdclabel.getTimeId());
199 
200 
201  setTime(1);
202  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
203  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
204  EXPECT_EQ(1, vxdlabel.getTimeId());
205  EXPECT_EQ(1, cdclabel.getTimeId());
206 
207  setTime(51);
208  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
209  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
210  EXPECT_EQ(1, vxdlabel.getTimeId());
211  EXPECT_EQ(51, cdclabel.getTimeId());
212 
213  setTime(80);
214  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
215  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
216  EXPECT_EQ(1, vxdlabel.getTimeId());
217  EXPECT_EQ(51, cdclabel.getTimeId());
218 
219  setTime(100);
220  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
221  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
222  EXPECT_EQ(1, vxdlabel.getTimeId());
223  EXPECT_EQ(51, cdclabel.getTimeId());
224 
225  setTime(101);
226  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
227  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
228  EXPECT_EQ(0, vxdlabel.getTimeId());
229  EXPECT_EQ(0, cdclabel.getTimeId());
230 
231  // Reset time dependence
232  GlobalLabel::clearTimeDependentParamaters();
233  setTime(90);
234  vxdlabel = GlobalLabel::construct<VXDAlignment>(vxdSensor, paramid);
235  cdclabel = GlobalLabel::construct<CDCAlignment>(cdcWire, paramid);
236  EXPECT_EQ(0, vxdlabel.getTimeId());
237  EXPECT_EQ(0, cdclabel.getTimeId());
238 
239  }
241 } // namespace
Belle2::WireID
Class to identify a wire inside the CDC.
Definition: WireID.h:44
Belle2::GlobalLabel::getTimeFlag
bool getTimeFlag() const
Is label time-dependent?
Definition: GlobalLabel.h:181
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::GlobalLabel::getElementId
gidTYPE getElementId() const
Returns the element id (like VxdID for silicon sensors) to identify sets of parameters in DB objects.
Definition: GlobalLabel.h:172
Belle2::GlobalLabelTest::setTime
void setTime(unsigned int timeid)
Set current time slice for time dependent params.
Definition: globalLabel.cc:50
Belle2::GlobalLabelTest
Test fixture.
Definition: globalLabel.cc:24
Belle2::WireID::getEWire
unsigned short getEWire() const
Getter for encoded wire number.
Definition: WireID.h:164
Belle2::getID
int getID(const std::vector< double > &breaks, double t)
get id of the time point t
Definition: calibTools.h:71
Belle2::GlobalLabelTest::TearDown
virtual void TearDown()
cleanup
Definition: globalLabel.cc:57
Belle2::GlobalLabelTest::cdcWire
short cdcWire
Testing cdc id.
Definition: globalLabel.cc:29
Belle2::GlobalLabel::getTimeId
gidTYPE getTimeId() const
Get time id.
Definition: GlobalLabel.h:178
Belle2::VxdID::getID
baseType getID() const
Get the unique id.
Definition: VxdID.h:104
Belle2::GlobalLabelTest::SetUp
virtual void SetUp()
init
Definition: globalLabel.cc:34
Belle2::GlobalLabelTest::paramid
int paramid
Testng parameter id.
Definition: globalLabel.cc:31
Belle2::GlobalLabel
Class to convert to/from global labels for Millepede II to/from detector & parameter identificators.
Definition: GlobalLabel.h:51
Belle2::GlobalLabel::registerTimeDependent
void registerTimeDependent(gidTYPE start, gidTYPE end=maxTID)
Register this Detector element and parameter as time dependent with instance starting at "start" time...
Definition: GlobalLabel.cc:47
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::GlobalLabelTest::vxdSensor
short vxdSensor
Testing vxd id.
Definition: globalLabel.cc:27
Belle2::TEST_F
TEST_F(GlobalLabelTest, QickTestNormalOperation)
Test the default way of using this.
Definition: globalLabel.cc:153
Belle2::GlobalLabel::label
int label()
Returns encoded Pede label.
Definition: GlobalLabel.h:152
Belle2::GlobalLabel::getParameterId
gidTYPE getParameterId() const
Get id of alignment/calibration parameter.
Definition: GlobalLabel.h:175
Belle2::GlobalLabelTest::registerSomeTimeDepParams
void registerSomeTimeDepParams()
Register some parameters as time dependent.
Definition: globalLabel.cc:42
Belle2::GlobalLabel::setParameterId
gidTYPE setParameterId(gidTYPE paramId)
Usefull setter to quickly change only the parameter id and return back the encoded label (for use in ...
Definition: GlobalLabel.cc:74