TrackingNtupleObjs.hpp 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873
  1. /** TrackingNtupleObjs.hpp created on 2017-12-10 17:34:34.450820 by generate_class.py
  2. * AVOID EDITING THIS FILE BY HAND!! Instead edit TrackingNtupleObjs.yaml and re-run
  3. * generate_class.py
  4. */
  5. #include "filval/filval.hpp"
  6. #include "filval/root/filval.hpp"
  7. #include<cmath>
  8. #include "TrackingNtuple.h"
  9. using namespace std;
  10. using namespace fv;
  11. using namespace fv::root;
  12. typedef TreeDataSet<TrackingNtuple> TrackingDataSet;
  13. struct PixRecHit;
  14. class PixRecHitCollection {
  15. public:
  16. class iter {
  17. public:
  18. iter(const PixRecHitCollection* collection, size_t idx)
  19. :collection(collection), idx(idx) { }
  20. iter operator++() { ++idx; return *this; }
  21. bool operator!=(const iter & other) { return idx != other.idx; }
  22. const PixRecHit operator*() const;
  23. private:
  24. const PixRecHitCollection* collection;
  25. size_t idx;
  26. };
  27. Value<vector<unsigned short>>* val_subdet;
  28. Value<vector<unsigned short>>* val_layer;
  29. Value<vector<unsigned short>>* val_ladder;
  30. Value<vector<unsigned int>>* val_detId;
  31. Value<vector<unsigned short>>* val_simType;
  32. Value<vector<float>>* val_x;
  33. Value<vector<float>>* val_y;
  34. Value<vector<float>>* val_z;
  35. Value<vector<float>>* val_xx;
  36. Value<vector<float>>* val_xy;
  37. Value<vector<float>>* val_yy;
  38. Value<vector<float>>* val_yz;
  39. Value<vector<float>>* val_zz;
  40. Value<vector<float>>* val_zx;
  41. Value<vector<float>>* val_radL;
  42. Value<vector<float>>* val_bbxi;
  43. Value<vector<vector<int>>>* val_trkIdx;
  44. Value<vector<vector<int>>>* val_seeIdx;
  45. Value<vector<vector<int>>>* val_simHitIdx;
  46. Value<vector<vector<float>>>* val_chargeFraction;
  47. PixRecHitCollection() { }
  48. void init(TrackingDataSet& tds){
  49. val_subdet = tds.track_branch_obj<vector<unsigned short>>("pix_subdet");
  50. val_layer = tds.track_branch_obj<vector<unsigned short>>("pix_layer");
  51. val_ladder = tds.track_branch_obj<vector<unsigned short>>("pix_ladder");
  52. val_detId = tds.track_branch_obj<vector<unsigned int>>("pix_detId");
  53. val_simType = tds.track_branch_obj<vector<unsigned short>>("pix_simType");
  54. val_x = tds.track_branch_obj<vector<float>>("pix_x");
  55. val_y = tds.track_branch_obj<vector<float>>("pix_y");
  56. val_z = tds.track_branch_obj<vector<float>>("pix_z");
  57. val_xx = tds.track_branch_obj<vector<float>>("pix_xx");
  58. val_xy = tds.track_branch_obj<vector<float>>("pix_xy");
  59. val_yy = tds.track_branch_obj<vector<float>>("pix_yy");
  60. val_yz = tds.track_branch_obj<vector<float>>("pix_yz");
  61. val_zz = tds.track_branch_obj<vector<float>>("pix_zz");
  62. val_zx = tds.track_branch_obj<vector<float>>("pix_zx");
  63. val_radL = tds.track_branch_obj<vector<float>>("pix_radL");
  64. val_bbxi = tds.track_branch_obj<vector<float>>("pix_bbxi");
  65. val_trkIdx = tds.track_branch_obj<vector<vector<int>>>("pix_trkIdx");
  66. val_seeIdx = tds.track_branch_obj<vector<vector<int>>>("pix_seeIdx");
  67. val_simHitIdx = tds.track_branch_obj<vector<vector<int>>>("pix_simHitIdx");
  68. val_chargeFraction = tds.track_branch_obj<vector<vector<float>>>("pix_chargeFraction");
  69. }
  70. size_t size() const { return val_subdet->get_value().size();}
  71. const PixRecHit operator[](size_t) const;
  72. iter begin() const { return iter(this, 0); }
  73. iter end() const { return iter(this, size()); }
  74. };
  75. struct PixRecHit {
  76. const PixRecHitCollection* collection;
  77. const size_t idx;
  78. PixRecHit(const PixRecHitCollection* collection, const size_t idx)
  79. :collection(collection), idx(idx) { }
  80. const unsigned short& subdet() const {return collection->val_subdet->get_value().at(idx);}
  81. const unsigned short& layer() const {return collection->val_layer->get_value().at(idx);}
  82. const unsigned short& ladder() const {return collection->val_ladder->get_value().at(idx);}
  83. const unsigned int& detId() const {return collection->val_detId->get_value().at(idx);}
  84. const unsigned short& simType() const {return collection->val_simType->get_value().at(idx);}
  85. const float& x() const {return collection->val_x->get_value().at(idx);}
  86. const float& y() const {return collection->val_y->get_value().at(idx);}
  87. const float& z() const {return collection->val_z->get_value().at(idx);}
  88. const float& xx() const {return collection->val_xx->get_value().at(idx);}
  89. const float& xy() const {return collection->val_xy->get_value().at(idx);}
  90. const float& yy() const {return collection->val_yy->get_value().at(idx);}
  91. const float& yz() const {return collection->val_yz->get_value().at(idx);}
  92. const float& zz() const {return collection->val_zz->get_value().at(idx);}
  93. const float& zx() const {return collection->val_zx->get_value().at(idx);}
  94. const float& radL() const {return collection->val_radL->get_value().at(idx);}
  95. const float& bbxi() const {return collection->val_bbxi->get_value().at(idx);}
  96. const vector<int>& trkIdx() const {return collection->val_trkIdx->get_value().at(idx);}
  97. const vector<int>& seeIdx() const {return collection->val_seeIdx->get_value().at(idx);}
  98. const vector<int>& simHitIdx() const {return collection->val_simHitIdx->get_value().at(idx);}
  99. const vector<float>& chargeFraction() const {return collection->val_chargeFraction->get_value().at(idx);}
  100. };
  101. const PixRecHit PixRecHitCollection::iter::operator*() const {
  102. return {collection, idx};
  103. }
  104. const PixRecHit PixRecHitCollection::operator[](size_t idx) const {
  105. return {this, idx};
  106. }
  107. struct SimHit;
  108. class SimHitCollection {
  109. public:
  110. class iter {
  111. public:
  112. iter(const SimHitCollection* collection, size_t idx)
  113. :collection(collection), idx(idx) { }
  114. iter operator++() { ++idx; return *this; }
  115. bool operator!=(const iter & other) { return idx != other.idx; }
  116. const SimHit operator*() const;
  117. private:
  118. const SimHitCollection* collection;
  119. size_t idx;
  120. };
  121. Value<vector<unsigned short>>* val_subdet;
  122. Value<vector<unsigned short>>* val_layer;
  123. Value<vector<unsigned int>>* val_detId;
  124. Value<vector<float>>* val_x;
  125. Value<vector<float>>* val_y;
  126. Value<vector<float>>* val_z;
  127. Value<vector<int>>* val_particle;
  128. Value<vector<short>>* val_process;
  129. Value<vector<float>>* val_eloss;
  130. Value<vector<float>>* val_tof;
  131. Value<vector<int>>* val_simTrkIdx;
  132. Value<vector<vector<int>>>* val_hitIdx;
  133. Value<vector<vector<int>>>* val_hitType;
  134. SimHitCollection() { }
  135. void init(TrackingDataSet& tds){
  136. val_subdet = tds.track_branch_obj<vector<unsigned short>>("simhit_subdet");
  137. val_layer = tds.track_branch_obj<vector<unsigned short>>("simhit_layer");
  138. val_detId = tds.track_branch_obj<vector<unsigned int>>("simhit_detId");
  139. val_x = tds.track_branch_obj<vector<float>>("simhit_x");
  140. val_y = tds.track_branch_obj<vector<float>>("simhit_y");
  141. val_z = tds.track_branch_obj<vector<float>>("simhit_z");
  142. val_particle = tds.track_branch_obj<vector<int>>("simhit_particle");
  143. val_process = tds.track_branch_obj<vector<short>>("simhit_process");
  144. val_eloss = tds.track_branch_obj<vector<float>>("simhit_eloss");
  145. val_tof = tds.track_branch_obj<vector<float>>("simhit_tof");
  146. val_simTrkIdx = tds.track_branch_obj<vector<int>>("simhit_simTrkIdx");
  147. val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("simhit_hitIdx");
  148. val_hitType = tds.track_branch_obj<vector<vector<int>>>("simhit_hitType");
  149. }
  150. size_t size() const { return val_subdet->get_value().size();}
  151. const SimHit operator[](size_t) const;
  152. iter begin() const { return iter(this, 0); }
  153. iter end() const { return iter(this, size()); }
  154. };
  155. struct SimHit {
  156. const SimHitCollection* collection;
  157. const size_t idx;
  158. SimHit(const SimHitCollection* collection, const size_t idx)
  159. :collection(collection), idx(idx) { }
  160. const unsigned short& subdet() const {return collection->val_subdet->get_value().at(idx);}
  161. const unsigned short& layer() const {return collection->val_layer->get_value().at(idx);}
  162. const unsigned int& detId() const {return collection->val_detId->get_value().at(idx);}
  163. const float& x() const {return collection->val_x->get_value().at(idx);}
  164. const float& y() const {return collection->val_y->get_value().at(idx);}
  165. const float& z() const {return collection->val_z->get_value().at(idx);}
  166. const int& particle() const {return collection->val_particle->get_value().at(idx);}
  167. const short& process() const {return collection->val_process->get_value().at(idx);}
  168. const float& eloss() const {return collection->val_eloss->get_value().at(idx);}
  169. const float& tof() const {return collection->val_tof->get_value().at(idx);}
  170. const int& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
  171. const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
  172. const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
  173. };
  174. const SimHit SimHitCollection::iter::operator*() const {
  175. return {collection, idx};
  176. }
  177. const SimHit SimHitCollection::operator[](size_t idx) const {
  178. return {this, idx};
  179. }
  180. struct Seed;
  181. class SeedCollection {
  182. public:
  183. class iter {
  184. public:
  185. iter(const SeedCollection* collection, size_t idx)
  186. :collection(collection), idx(idx) { }
  187. iter operator++() { ++idx; return *this; }
  188. bool operator!=(const iter & other) { return idx != other.idx; }
  189. const Seed operator*() const;
  190. private:
  191. const SeedCollection* collection;
  192. size_t idx;
  193. };
  194. Value<vector<short>>* val_fitok;
  195. Value<vector<float>>* val_px;
  196. Value<vector<float>>* val_py;
  197. Value<vector<float>>* val_pz;
  198. Value<vector<float>>* val_pt;
  199. Value<vector<float>>* val_eta;
  200. Value<vector<float>>* val_phi;
  201. Value<vector<float>>* val_dxy;
  202. Value<vector<float>>* val_dz;
  203. Value<vector<float>>* val_ptErr;
  204. Value<vector<float>>* val_etaErr;
  205. Value<vector<float>>* val_phiErr;
  206. Value<vector<float>>* val_dxyErr;
  207. Value<vector<float>>* val_dzErr;
  208. Value<vector<float>>* val_chi2;
  209. Value<vector<int>>* val_q;
  210. Value<vector<unsigned int>>* val_nValid;
  211. Value<vector<unsigned int>>* val_nPixel;
  212. Value<vector<unsigned int>>* val_nGlued;
  213. Value<vector<unsigned int>>* val_nStrip;
  214. Value<vector<unsigned int>>* val_algo;
  215. Value<vector<unsigned int>>* val_algoOriginal;
  216. Value<vector<int>>* val_trkIdx;
  217. Value<vector<vector<float>>>* val_shareFrac;
  218. Value<vector<vector<int>>>* val_simTrkIdx;
  219. Value<vector<vector<int>>>* val_hitIdx;
  220. Value<vector<vector<int>>>* val_hitType;
  221. Value<vector<unsigned int>>* val_offset;
  222. Value<vector<unsigned char>>* val_hitsMask;
  223. Value<vector<int>>* val_subDet2;
  224. Value<vector<float>>* val_dRz2;
  225. Value<vector<float>>* val_dPhi2;
  226. Value<vector<float>>* val_dRz2Pos;
  227. Value<vector<float>>* val_dPhi2Pos;
  228. Value<vector<int>>* val_subDet1;
  229. Value<vector<float>>* val_dRz1;
  230. Value<vector<float>>* val_dPhi1;
  231. Value<vector<float>>* val_dRz1Pos;
  232. Value<vector<float>>* val_dPhi1Pos;
  233. Value<vector<float>>* val_superClusterEnergy;
  234. Value<vector<float>>* val_superClusterEta;
  235. Value<vector<float>>* val_superClusterPhi;
  236. Value<vector<float>>* val_superClusterEt;
  237. Value<vector<int>>* val_superClusterIdx;
  238. Value<vector<unsigned int>>* val_ecalDriven;
  239. Value<vector<unsigned int>>* val_trkDriven;
  240. SeedCollection() { }
  241. void init(TrackingDataSet& tds){
  242. val_fitok = tds.track_branch_obj<vector<short>>("see_fitok");
  243. val_px = tds.track_branch_obj<vector<float>>("see_px");
  244. val_py = tds.track_branch_obj<vector<float>>("see_py");
  245. val_pz = tds.track_branch_obj<vector<float>>("see_pz");
  246. val_pt = tds.track_branch_obj<vector<float>>("see_pt");
  247. val_eta = tds.track_branch_obj<vector<float>>("see_eta");
  248. val_phi = tds.track_branch_obj<vector<float>>("see_phi");
  249. val_dxy = tds.track_branch_obj<vector<float>>("see_dxy");
  250. val_dz = tds.track_branch_obj<vector<float>>("see_dz");
  251. val_ptErr = tds.track_branch_obj<vector<float>>("see_ptErr");
  252. val_etaErr = tds.track_branch_obj<vector<float>>("see_etaErr");
  253. val_phiErr = tds.track_branch_obj<vector<float>>("see_phiErr");
  254. val_dxyErr = tds.track_branch_obj<vector<float>>("see_dxyErr");
  255. val_dzErr = tds.track_branch_obj<vector<float>>("see_dzErr");
  256. val_chi2 = tds.track_branch_obj<vector<float>>("see_chi2");
  257. val_q = tds.track_branch_obj<vector<int>>("see_q");
  258. val_nValid = tds.track_branch_obj<vector<unsigned int>>("see_nValid");
  259. val_nPixel = tds.track_branch_obj<vector<unsigned int>>("see_nPixel");
  260. val_nGlued = tds.track_branch_obj<vector<unsigned int>>("see_nGlued");
  261. val_nStrip = tds.track_branch_obj<vector<unsigned int>>("see_nStrip");
  262. val_algo = tds.track_branch_obj<vector<unsigned int>>("see_algo");
  263. val_algoOriginal = tds.track_branch_obj<vector<unsigned int>>("see_algoOriginal");
  264. val_trkIdx = tds.track_branch_obj<vector<int>>("see_trkIdx");
  265. val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("see_shareFrac");
  266. val_simTrkIdx = tds.track_branch_obj<vector<vector<int>>>("see_simTrkIdx");
  267. val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("see_hitIdx");
  268. val_hitType = tds.track_branch_obj<vector<vector<int>>>("see_hitType");
  269. val_offset = tds.track_branch_obj<vector<unsigned int>>("see_offset");
  270. val_hitsMask = tds.track_branch_obj<vector<unsigned char>>("see_hitsMask");
  271. val_subDet2 = tds.track_branch_obj<vector<int>>("see_subDet2");
  272. val_dRz2 = tds.track_branch_obj<vector<float>>("see_dRz2");
  273. val_dPhi2 = tds.track_branch_obj<vector<float>>("see_dPhi2");
  274. val_dRz2Pos = tds.track_branch_obj<vector<float>>("see_dRz2Pos");
  275. val_dPhi2Pos = tds.track_branch_obj<vector<float>>("see_dPhi2Pos");
  276. val_subDet1 = tds.track_branch_obj<vector<int>>("see_subDet1");
  277. val_dRz1 = tds.track_branch_obj<vector<float>>("see_dRz1");
  278. val_dPhi1 = tds.track_branch_obj<vector<float>>("see_dPhi1");
  279. val_dRz1Pos = tds.track_branch_obj<vector<float>>("see_dRz1Pos");
  280. val_dPhi1Pos = tds.track_branch_obj<vector<float>>("see_dPhi1Pos");
  281. val_superClusterEnergy = tds.track_branch_obj<vector<float>>("see_superClusterEnergy");
  282. val_superClusterEta = tds.track_branch_obj<vector<float>>("see_superClusterEta");
  283. val_superClusterPhi = tds.track_branch_obj<vector<float>>("see_superClusterPhi");
  284. val_superClusterEt = tds.track_branch_obj<vector<float>>("see_superClusterEt");
  285. val_superClusterIdx = tds.track_branch_obj<vector<int>>("see_superClusterIdx");
  286. val_ecalDriven = tds.track_branch_obj<vector<unsigned int>>("see_ecalDriven");
  287. val_trkDriven = tds.track_branch_obj<vector<unsigned int>>("see_trkDriven");
  288. }
  289. size_t size() const { return val_fitok->get_value().size();}
  290. const Seed operator[](size_t) const;
  291. iter begin() const { return iter(this, 0); }
  292. iter end() const { return iter(this, size()); }
  293. };
  294. struct Seed {
  295. const SeedCollection* collection;
  296. const size_t idx;
  297. Seed(const SeedCollection* collection, const size_t idx)
  298. :collection(collection), idx(idx) { }
  299. const short& fitok() const {return collection->val_fitok->get_value().at(idx);}
  300. const float& px() const {return collection->val_px->get_value().at(idx);}
  301. const float& py() const {return collection->val_py->get_value().at(idx);}
  302. const float& pz() const {return collection->val_pz->get_value().at(idx);}
  303. const float& pt() const {return collection->val_pt->get_value().at(idx);}
  304. const float& eta() const {return collection->val_eta->get_value().at(idx);}
  305. const float& phi() const {return collection->val_phi->get_value().at(idx);}
  306. const float& dxy() const {return collection->val_dxy->get_value().at(idx);}
  307. const float& dz() const {return collection->val_dz->get_value().at(idx);}
  308. const float& ptErr() const {return collection->val_ptErr->get_value().at(idx);}
  309. const float& etaErr() const {return collection->val_etaErr->get_value().at(idx);}
  310. const float& phiErr() const {return collection->val_phiErr->get_value().at(idx);}
  311. const float& dxyErr() const {return collection->val_dxyErr->get_value().at(idx);}
  312. const float& dzErr() const {return collection->val_dzErr->get_value().at(idx);}
  313. const float& chi2() const {return collection->val_chi2->get_value().at(idx);}
  314. const int& q() const {return collection->val_q->get_value().at(idx);}
  315. const unsigned int& nValid() const {return collection->val_nValid->get_value().at(idx);}
  316. const unsigned int& nPixel() const {return collection->val_nPixel->get_value().at(idx);}
  317. const unsigned int& nGlued() const {return collection->val_nGlued->get_value().at(idx);}
  318. const unsigned int& nStrip() const {return collection->val_nStrip->get_value().at(idx);}
  319. const unsigned int& algo() const {return collection->val_algo->get_value().at(idx);}
  320. const unsigned int& algoOriginal() const {return collection->val_algoOriginal->get_value().at(idx);}
  321. const int& trkIdx() const {return collection->val_trkIdx->get_value().at(idx);}
  322. const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
  323. const vector<int>& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
  324. const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
  325. const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
  326. const unsigned int& offset() const {return collection->val_offset->get_value().at(idx);}
  327. const unsigned char& hitsMask() const {return collection->val_hitsMask->get_value().at(idx);}
  328. const int& subDet2() const {return collection->val_subDet2->get_value().at(idx);}
  329. const float& dRz2() const {return collection->val_dRz2->get_value().at(idx);}
  330. const float& dPhi2() const {return collection->val_dPhi2->get_value().at(idx);}
  331. const float& dRz2Pos() const {return collection->val_dRz2Pos->get_value().at(idx);}
  332. const float& dPhi2Pos() const {return collection->val_dPhi2Pos->get_value().at(idx);}
  333. const int& subDet1() const {return collection->val_subDet1->get_value().at(idx);}
  334. const float& dRz1() const {return collection->val_dRz1->get_value().at(idx);}
  335. const float& dPhi1() const {return collection->val_dPhi1->get_value().at(idx);}
  336. const float& dRz1Pos() const {return collection->val_dRz1Pos->get_value().at(idx);}
  337. const float& dPhi1Pos() const {return collection->val_dPhi1Pos->get_value().at(idx);}
  338. const float& superClusterEnergy() const {return collection->val_superClusterEnergy->get_value().at(idx);}
  339. const float& superClusterEta() const {return collection->val_superClusterEta->get_value().at(idx);}
  340. const float& superClusterPhi() const {return collection->val_superClusterPhi->get_value().at(idx);}
  341. const float& superClusterEt() const {return collection->val_superClusterEt->get_value().at(idx);}
  342. const int& superClusterIdx() const {return collection->val_superClusterIdx->get_value().at(idx);}
  343. const unsigned int& ecalDriven() const {return collection->val_ecalDriven->get_value().at(idx);}
  344. const unsigned int& trkDriven() const {return collection->val_trkDriven->get_value().at(idx);}
  345. };
  346. const Seed SeedCollection::iter::operator*() const {
  347. return {collection, idx};
  348. }
  349. const Seed SeedCollection::operator[](size_t idx) const {
  350. return {this, idx};
  351. }
  352. struct Track;
  353. class TrackCollection {
  354. public:
  355. class iter {
  356. public:
  357. iter(const TrackCollection* collection, size_t idx)
  358. :collection(collection), idx(idx) { }
  359. iter operator++() { ++idx; return *this; }
  360. bool operator!=(const iter & other) { return idx != other.idx; }
  361. const Track operator*() const;
  362. private:
  363. const TrackCollection* collection;
  364. size_t idx;
  365. };
  366. Value<vector<float>>* val_px;
  367. Value<vector<float>>* val_py;
  368. Value<vector<float>>* val_pz;
  369. Value<vector<float>>* val_pt;
  370. Value<vector<float>>* val_inner_px;
  371. Value<vector<float>>* val_inner_py;
  372. Value<vector<float>>* val_inner_pz;
  373. Value<vector<float>>* val_inner_pt;
  374. Value<vector<float>>* val_outer_px;
  375. Value<vector<float>>* val_outer_py;
  376. Value<vector<float>>* val_outer_pz;
  377. Value<vector<float>>* val_outer_pt;
  378. Value<vector<float>>* val_eta;
  379. Value<vector<float>>* val_lambda;
  380. Value<vector<float>>* val_cotTheta;
  381. Value<vector<float>>* val_phi;
  382. Value<vector<float>>* val_dxy;
  383. Value<vector<float>>* val_dz;
  384. Value<vector<float>>* val_ptErr;
  385. Value<vector<float>>* val_etaErr;
  386. Value<vector<float>>* val_lambdaErr;
  387. Value<vector<float>>* val_phiErr;
  388. Value<vector<float>>* val_dxyErr;
  389. Value<vector<float>>* val_dzErr;
  390. Value<vector<float>>* val_refpoint_x;
  391. Value<vector<float>>* val_refpoint_y;
  392. Value<vector<float>>* val_refpoint_z;
  393. Value<vector<float>>* val_nChi2;
  394. Value<vector<int>>* val_q;
  395. Value<vector<unsigned int>>* val_nValid;
  396. Value<vector<unsigned int>>* val_nInvalid;
  397. Value<vector<unsigned int>>* val_nPixel;
  398. Value<vector<unsigned int>>* val_nStrip;
  399. Value<vector<unsigned int>>* val_nPixelLay;
  400. Value<vector<unsigned int>>* val_nStripLay;
  401. Value<vector<unsigned int>>* val_n3DLay;
  402. Value<vector<unsigned int>>* val_nOuterLost;
  403. Value<vector<unsigned int>>* val_nInnerLost;
  404. Value<vector<unsigned int>>* val_algo;
  405. Value<vector<unsigned int>>* val_originalAlgo;
  406. Value<vector<ULong64_t>>* val_algoMask;
  407. Value<vector<unsigned int>>* val_stopReason;
  408. Value<vector<short>>* val_isHP;
  409. Value<vector<int>>* val_seedIdx;
  410. Value<vector<float>>* val_vtxx;
  411. Value<vector<float>>* val_vtxy;
  412. Value<vector<float>>* val_vtxz;
  413. Value<vector<vector<float>>>* val_shareFrac;
  414. Value<vector<vector<int>>>* val_simTrkIdx;
  415. Value<vector<vector<int>>>* val_hitIdx;
  416. Value<vector<vector<int>>>* val_hitType;
  417. Value<vector<int>>* val_genIdx;
  418. Value<vector<float>>* val_genDR;
  419. TrackCollection() { }
  420. void init(TrackingDataSet& tds){
  421. val_px = tds.track_branch_obj<vector<float>>("trk_px");
  422. val_py = tds.track_branch_obj<vector<float>>("trk_py");
  423. val_pz = tds.track_branch_obj<vector<float>>("trk_pz");
  424. val_pt = tds.track_branch_obj<vector<float>>("trk_pt");
  425. val_inner_px = tds.track_branch_obj<vector<float>>("trk_inner_px");
  426. val_inner_py = tds.track_branch_obj<vector<float>>("trk_inner_py");
  427. val_inner_pz = tds.track_branch_obj<vector<float>>("trk_inner_pz");
  428. val_inner_pt = tds.track_branch_obj<vector<float>>("trk_inner_pt");
  429. val_outer_px = tds.track_branch_obj<vector<float>>("trk_outer_px");
  430. val_outer_py = tds.track_branch_obj<vector<float>>("trk_outer_py");
  431. val_outer_pz = tds.track_branch_obj<vector<float>>("trk_outer_pz");
  432. val_outer_pt = tds.track_branch_obj<vector<float>>("trk_outer_pt");
  433. val_eta = tds.track_branch_obj<vector<float>>("trk_eta");
  434. val_lambda = tds.track_branch_obj<vector<float>>("trk_lambda");
  435. val_cotTheta = tds.track_branch_obj<vector<float>>("trk_cotTheta");
  436. val_phi = tds.track_branch_obj<vector<float>>("trk_phi");
  437. val_dxy = tds.track_branch_obj<vector<float>>("trk_dxy");
  438. val_dz = tds.track_branch_obj<vector<float>>("trk_dz");
  439. val_ptErr = tds.track_branch_obj<vector<float>>("trk_ptErr");
  440. val_etaErr = tds.track_branch_obj<vector<float>>("trk_etaErr");
  441. val_lambdaErr = tds.track_branch_obj<vector<float>>("trk_lambdaErr");
  442. val_phiErr = tds.track_branch_obj<vector<float>>("trk_phiErr");
  443. val_dxyErr = tds.track_branch_obj<vector<float>>("trk_dxyErr");
  444. val_dzErr = tds.track_branch_obj<vector<float>>("trk_dzErr");
  445. val_refpoint_x = tds.track_branch_obj<vector<float>>("trk_refpoint_x");
  446. val_refpoint_y = tds.track_branch_obj<vector<float>>("trk_refpoint_y");
  447. val_refpoint_z = tds.track_branch_obj<vector<float>>("trk_refpoint_z");
  448. val_nChi2 = tds.track_branch_obj<vector<float>>("trk_nChi2");
  449. val_q = tds.track_branch_obj<vector<int>>("trk_q");
  450. val_nValid = tds.track_branch_obj<vector<unsigned int>>("trk_nValid");
  451. val_nInvalid = tds.track_branch_obj<vector<unsigned int>>("trk_nInvalid");
  452. val_nPixel = tds.track_branch_obj<vector<unsigned int>>("trk_nPixel");
  453. val_nStrip = tds.track_branch_obj<vector<unsigned int>>("trk_nStrip");
  454. val_nPixelLay = tds.track_branch_obj<vector<unsigned int>>("trk_nPixelLay");
  455. val_nStripLay = tds.track_branch_obj<vector<unsigned int>>("trk_nStripLay");
  456. val_n3DLay = tds.track_branch_obj<vector<unsigned int>>("trk_n3DLay");
  457. val_nOuterLost = tds.track_branch_obj<vector<unsigned int>>("trk_nOuterLost");
  458. val_nInnerLost = tds.track_branch_obj<vector<unsigned int>>("trk_nInnerLost");
  459. val_algo = tds.track_branch_obj<vector<unsigned int>>("trk_algo");
  460. val_originalAlgo = tds.track_branch_obj<vector<unsigned int>>("trk_originalAlgo");
  461. val_algoMask = tds.track_branch_obj<vector<ULong64_t>>("trk_algoMask");
  462. val_stopReason = tds.track_branch_obj<vector<unsigned int>>("trk_stopReason");
  463. val_isHP = tds.track_branch_obj<vector<short>>("trk_isHP");
  464. val_seedIdx = tds.track_branch_obj<vector<int>>("trk_seedIdx");
  465. val_vtxx = tds.track_branch_obj<vector<float>>("trk_vtxx");
  466. val_vtxy = tds.track_branch_obj<vector<float>>("trk_vtxy");
  467. val_vtxz = tds.track_branch_obj<vector<float>>("trk_vtxz");
  468. val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("trk_shareFrac");
  469. val_simTrkIdx = tds.track_branch_obj<vector<vector<int>>>("trk_simTrkIdx");
  470. val_hitIdx = tds.track_branch_obj<vector<vector<int>>>("trk_hitIdx");
  471. val_hitType = tds.track_branch_obj<vector<vector<int>>>("trk_hitType");
  472. val_genIdx = tds.track_branch_obj<vector<int>>("trk_genIdx");
  473. val_genDR = tds.track_branch_obj<vector<float>>("trk_genDR");
  474. }
  475. size_t size() const { return val_px->get_value().size();}
  476. const Track operator[](size_t) const;
  477. iter begin() const { return iter(this, 0); }
  478. iter end() const { return iter(this, size()); }
  479. };
  480. struct Track {
  481. const TrackCollection* collection;
  482. const size_t idx;
  483. Track(const TrackCollection* collection, const size_t idx)
  484. :collection(collection), idx(idx) { }
  485. const float& px() const {return collection->val_px->get_value().at(idx);}
  486. const float& py() const {return collection->val_py->get_value().at(idx);}
  487. const float& pz() const {return collection->val_pz->get_value().at(idx);}
  488. const float& pt() const {return collection->val_pt->get_value().at(idx);}
  489. const float& inner_px() const {return collection->val_inner_px->get_value().at(idx);}
  490. const float& inner_py() const {return collection->val_inner_py->get_value().at(idx);}
  491. const float& inner_pz() const {return collection->val_inner_pz->get_value().at(idx);}
  492. const float& inner_pt() const {return collection->val_inner_pt->get_value().at(idx);}
  493. const float& outer_px() const {return collection->val_outer_px->get_value().at(idx);}
  494. const float& outer_py() const {return collection->val_outer_py->get_value().at(idx);}
  495. const float& outer_pz() const {return collection->val_outer_pz->get_value().at(idx);}
  496. const float& outer_pt() const {return collection->val_outer_pt->get_value().at(idx);}
  497. const float& eta() const {return collection->val_eta->get_value().at(idx);}
  498. const float& lambda() const {return collection->val_lambda->get_value().at(idx);}
  499. const float& cotTheta() const {return collection->val_cotTheta->get_value().at(idx);}
  500. const float& phi() const {return collection->val_phi->get_value().at(idx);}
  501. const float& dxy() const {return collection->val_dxy->get_value().at(idx);}
  502. const float& dz() const {return collection->val_dz->get_value().at(idx);}
  503. const float& ptErr() const {return collection->val_ptErr->get_value().at(idx);}
  504. const float& etaErr() const {return collection->val_etaErr->get_value().at(idx);}
  505. const float& lambdaErr() const {return collection->val_lambdaErr->get_value().at(idx);}
  506. const float& phiErr() const {return collection->val_phiErr->get_value().at(idx);}
  507. const float& dxyErr() const {return collection->val_dxyErr->get_value().at(idx);}
  508. const float& dzErr() const {return collection->val_dzErr->get_value().at(idx);}
  509. const float& refpoint_x() const {return collection->val_refpoint_x->get_value().at(idx);}
  510. const float& refpoint_y() const {return collection->val_refpoint_y->get_value().at(idx);}
  511. const float& refpoint_z() const {return collection->val_refpoint_z->get_value().at(idx);}
  512. const float& nChi2() const {return collection->val_nChi2->get_value().at(idx);}
  513. const int& q() const {return collection->val_q->get_value().at(idx);}
  514. const unsigned int& nValid() const {return collection->val_nValid->get_value().at(idx);}
  515. const unsigned int& nInvalid() const {return collection->val_nInvalid->get_value().at(idx);}
  516. const unsigned int& nPixel() const {return collection->val_nPixel->get_value().at(idx);}
  517. const unsigned int& nStrip() const {return collection->val_nStrip->get_value().at(idx);}
  518. const unsigned int& nPixelLay() const {return collection->val_nPixelLay->get_value().at(idx);}
  519. const unsigned int& nStripLay() const {return collection->val_nStripLay->get_value().at(idx);}
  520. const unsigned int& n3DLay() const {return collection->val_n3DLay->get_value().at(idx);}
  521. const unsigned int& nOuterLost() const {return collection->val_nOuterLost->get_value().at(idx);}
  522. const unsigned int& nInnerLost() const {return collection->val_nInnerLost->get_value().at(idx);}
  523. const unsigned int& algo() const {return collection->val_algo->get_value().at(idx);}
  524. const unsigned int& originalAlgo() const {return collection->val_originalAlgo->get_value().at(idx);}
  525. const ULong64_t& algoMask() const {return collection->val_algoMask->get_value().at(idx);}
  526. const unsigned int& stopReason() const {return collection->val_stopReason->get_value().at(idx);}
  527. const short& isHP() const {return collection->val_isHP->get_value().at(idx);}
  528. const int& seedIdx() const {return collection->val_seedIdx->get_value().at(idx);}
  529. const float& vtxx() const {return collection->val_vtxx->get_value().at(idx);}
  530. const float& vtxy() const {return collection->val_vtxy->get_value().at(idx);}
  531. const float& vtxz() const {return collection->val_vtxz->get_value().at(idx);}
  532. const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
  533. const vector<int>& simTrkIdx() const {return collection->val_simTrkIdx->get_value().at(idx);}
  534. const vector<int>& hitIdx() const {return collection->val_hitIdx->get_value().at(idx);}
  535. const vector<int>& hitType() const {return collection->val_hitType->get_value().at(idx);}
  536. const int& genIdx() const {return collection->val_genIdx->get_value().at(idx);}
  537. const float& genDR() const {return collection->val_genDR->get_value().at(idx);}
  538. };
  539. const Track TrackCollection::iter::operator*() const {
  540. return {collection, idx};
  541. }
  542. const Track TrackCollection::operator[](size_t idx) const {
  543. return {this, idx};
  544. }
  545. struct SimTrack;
  546. class SimTrackCollection {
  547. public:
  548. class iter {
  549. public:
  550. iter(const SimTrackCollection* collection, size_t idx)
  551. :collection(collection), idx(idx) { }
  552. iter operator++() { ++idx; return *this; }
  553. bool operator!=(const iter & other) { return idx != other.idx; }
  554. const SimTrack operator*() const;
  555. private:
  556. const SimTrackCollection* collection;
  557. size_t idx;
  558. };
  559. Value<vector<int>>* val_event;
  560. Value<vector<int>>* val_bunchCrossing;
  561. Value<vector<int>>* val_pdgId;
  562. Value<vector<float>>* val_px;
  563. Value<vector<float>>* val_py;
  564. Value<vector<float>>* val_pz;
  565. Value<vector<float>>* val_pt;
  566. Value<vector<float>>* val_eta;
  567. Value<vector<float>>* val_phi;
  568. Value<vector<float>>* val_pca_pt;
  569. Value<vector<float>>* val_pca_eta;
  570. Value<vector<float>>* val_pca_lambda;
  571. Value<vector<float>>* val_pca_cotTheta;
  572. Value<vector<float>>* val_pca_phi;
  573. Value<vector<float>>* val_pca_dxy;
  574. Value<vector<float>>* val_pca_dz;
  575. Value<vector<int>>* val_q;
  576. Value<vector<unsigned int>>* val_nValid;
  577. Value<vector<unsigned int>>* val_nPixel;
  578. Value<vector<unsigned int>>* val_nStrip;
  579. Value<vector<unsigned int>>* val_nLay;
  580. Value<vector<unsigned int>>* val_nPixelLay;
  581. Value<vector<unsigned int>>* val_n3DLay;
  582. Value<vector<vector<int>>>* val_trkIdx;
  583. Value<vector<vector<float>>>* val_shareFrac;
  584. Value<vector<int>>* val_parentVtxIdx;
  585. Value<vector<vector<int>>>* val_decayVtxIdx;
  586. Value<vector<vector<int>>>* val_simHitIdx;
  587. Value<vector<vector<int>>>* val_seedIdx;
  588. SimTrackCollection() { }
  589. void init(TrackingDataSet& tds){
  590. val_event = tds.track_branch_obj<vector<int>>("sim_event");
  591. val_bunchCrossing = tds.track_branch_obj<vector<int>>("sim_bunchCrossing");
  592. val_pdgId = tds.track_branch_obj<vector<int>>("sim_pdgId");
  593. val_px = tds.track_branch_obj<vector<float>>("sim_px");
  594. val_py = tds.track_branch_obj<vector<float>>("sim_py");
  595. val_pz = tds.track_branch_obj<vector<float>>("sim_pz");
  596. val_pt = tds.track_branch_obj<vector<float>>("sim_pt");
  597. val_eta = tds.track_branch_obj<vector<float>>("sim_eta");
  598. val_phi = tds.track_branch_obj<vector<float>>("sim_phi");
  599. val_pca_pt = tds.track_branch_obj<vector<float>>("sim_pca_pt");
  600. val_pca_eta = tds.track_branch_obj<vector<float>>("sim_pca_eta");
  601. val_pca_lambda = tds.track_branch_obj<vector<float>>("sim_pca_lambda");
  602. val_pca_cotTheta = tds.track_branch_obj<vector<float>>("sim_pca_cotTheta");
  603. val_pca_phi = tds.track_branch_obj<vector<float>>("sim_pca_phi");
  604. val_pca_dxy = tds.track_branch_obj<vector<float>>("sim_pca_dxy");
  605. val_pca_dz = tds.track_branch_obj<vector<float>>("sim_pca_dz");
  606. val_q = tds.track_branch_obj<vector<int>>("sim_q");
  607. val_nValid = tds.track_branch_obj<vector<unsigned int>>("sim_nValid");
  608. val_nPixel = tds.track_branch_obj<vector<unsigned int>>("sim_nPixel");
  609. val_nStrip = tds.track_branch_obj<vector<unsigned int>>("sim_nStrip");
  610. val_nLay = tds.track_branch_obj<vector<unsigned int>>("sim_nLay");
  611. val_nPixelLay = tds.track_branch_obj<vector<unsigned int>>("sim_nPixelLay");
  612. val_n3DLay = tds.track_branch_obj<vector<unsigned int>>("sim_n3DLay");
  613. val_trkIdx = tds.track_branch_obj<vector<vector<int>>>("sim_trkIdx");
  614. val_shareFrac = tds.track_branch_obj<vector<vector<float>>>("sim_shareFrac");
  615. val_parentVtxIdx = tds.track_branch_obj<vector<int>>("sim_parentVtxIdx");
  616. val_decayVtxIdx = tds.track_branch_obj<vector<vector<int>>>("sim_decayVtxIdx");
  617. val_simHitIdx = tds.track_branch_obj<vector<vector<int>>>("sim_simHitIdx");
  618. val_seedIdx = tds.track_branch_obj<vector<vector<int>>>("sim_seedIdx");
  619. }
  620. size_t size() const { return val_event->get_value().size();}
  621. const SimTrack operator[](size_t) const;
  622. iter begin() const { return iter(this, 0); }
  623. iter end() const { return iter(this, size()); }
  624. };
  625. struct SimTrack {
  626. const SimTrackCollection* collection;
  627. const size_t idx;
  628. SimTrack(const SimTrackCollection* collection, const size_t idx)
  629. :collection(collection), idx(idx) { }
  630. const int& event() const {return collection->val_event->get_value().at(idx);}
  631. const int& bunchCrossing() const {return collection->val_bunchCrossing->get_value().at(idx);}
  632. const int& pdgId() const {return collection->val_pdgId->get_value().at(idx);}
  633. const float& px() const {return collection->val_px->get_value().at(idx);}
  634. const float& py() const {return collection->val_py->get_value().at(idx);}
  635. const float& pz() const {return collection->val_pz->get_value().at(idx);}
  636. const float& pt() const {return collection->val_pt->get_value().at(idx);}
  637. const float& eta() const {return collection->val_eta->get_value().at(idx);}
  638. const float& phi() const {return collection->val_phi->get_value().at(idx);}
  639. const float& pca_pt() const {return collection->val_pca_pt->get_value().at(idx);}
  640. const float& pca_eta() const {return collection->val_pca_eta->get_value().at(idx);}
  641. const float& pca_lambda() const {return collection->val_pca_lambda->get_value().at(idx);}
  642. const float& pca_cotTheta() const {return collection->val_pca_cotTheta->get_value().at(idx);}
  643. const float& pca_phi() const {return collection->val_pca_phi->get_value().at(idx);}
  644. const float& pca_dxy() const {return collection->val_pca_dxy->get_value().at(idx);}
  645. const float& pca_dz() const {return collection->val_pca_dz->get_value().at(idx);}
  646. const int& q() const {return collection->val_q->get_value().at(idx);}
  647. const unsigned int& nValid() const {return collection->val_nValid->get_value().at(idx);}
  648. const unsigned int& nPixel() const {return collection->val_nPixel->get_value().at(idx);}
  649. const unsigned int& nStrip() const {return collection->val_nStrip->get_value().at(idx);}
  650. const unsigned int& nLay() const {return collection->val_nLay->get_value().at(idx);}
  651. const unsigned int& nPixelLay() const {return collection->val_nPixelLay->get_value().at(idx);}
  652. const unsigned int& n3DLay() const {return collection->val_n3DLay->get_value().at(idx);}
  653. const vector<int>& trkIdx() const {return collection->val_trkIdx->get_value().at(idx);}
  654. const vector<float>& shareFrac() const {return collection->val_shareFrac->get_value().at(idx);}
  655. const int& parentVtxIdx() const {return collection->val_parentVtxIdx->get_value().at(idx);}
  656. const vector<int>& decayVtxIdx() const {return collection->val_decayVtxIdx->get_value().at(idx);}
  657. const vector<int>& simHitIdx() const {return collection->val_simHitIdx->get_value().at(idx);}
  658. const vector<int>& seedIdx() const {return collection->val_seedIdx->get_value().at(idx);}
  659. };
  660. const SimTrack SimTrackCollection::iter::operator*() const {
  661. return {collection, idx};
  662. }
  663. const SimTrack SimTrackCollection::operator[](size_t idx) const {
  664. return {this, idx};
  665. }
  666. struct SuperCluster;
  667. class SuperClusterCollection {
  668. public:
  669. class iter {
  670. public:
  671. iter(const SuperClusterCollection* collection, size_t idx)
  672. :collection(collection), idx(idx) { }
  673. iter operator++() { ++idx; return *this; }
  674. bool operator!=(const iter & other) { return idx != other.idx; }
  675. const SuperCluster operator*() const;
  676. private:
  677. const SuperClusterCollection* collection;
  678. size_t idx;
  679. };
  680. Value<vector<float>>* val_e;
  681. Value<vector<float>>* val_px;
  682. Value<vector<float>>* val_py;
  683. Value<vector<float>>* val_pz;
  684. Value<vector<float>>* val_x;
  685. Value<vector<float>>* val_y;
  686. Value<vector<float>>* val_z;
  687. Value<vector<vector<int>>>* val_charge;
  688. Value<vector<vector<int>>>* val_subDet1;
  689. Value<vector<vector<int>>>* val_subDet2;
  690. Value<vector<vector<float>>>* val_dRz1;
  691. Value<vector<vector<float>>>* val_dPhi1;
  692. Value<vector<vector<float>>>* val_dRz2;
  693. Value<vector<vector<float>>>* val_dPhi2;
  694. Value<vector<vector<int>>>* val_seedType;
  695. Value<vector<vector<unsigned char>>>* val_hitsMask;
  696. SuperClusterCollection() { }
  697. void init(TrackingDataSet& tds){
  698. val_e = tds.track_branch_obj<vector<float>>("scl_e");
  699. val_px = tds.track_branch_obj<vector<float>>("scl_px");
  700. val_py = tds.track_branch_obj<vector<float>>("scl_py");
  701. val_pz = tds.track_branch_obj<vector<float>>("scl_pz");
  702. val_x = tds.track_branch_obj<vector<float>>("scl_x");
  703. val_y = tds.track_branch_obj<vector<float>>("scl_y");
  704. val_z = tds.track_branch_obj<vector<float>>("scl_z");
  705. val_charge = tds.track_branch_obj<vector<vector<int>>>("scl_charge");
  706. val_subDet1 = tds.track_branch_obj<vector<vector<int>>>("scl_subDet1");
  707. val_subDet2 = tds.track_branch_obj<vector<vector<int>>>("scl_subDet2");
  708. val_dRz1 = tds.track_branch_obj<vector<vector<float>>>("scl_dRz1");
  709. val_dPhi1 = tds.track_branch_obj<vector<vector<float>>>("scl_dPhi1");
  710. val_dRz2 = tds.track_branch_obj<vector<vector<float>>>("scl_dRz2");
  711. val_dPhi2 = tds.track_branch_obj<vector<vector<float>>>("scl_dPhi2");
  712. val_seedType = tds.track_branch_obj<vector<vector<int>>>("scl_seedType");
  713. val_hitsMask = tds.track_branch_obj<vector<vector<unsigned char>>>("scl_hitsMask");
  714. }
  715. size_t size() const { return val_e->get_value().size();}
  716. const SuperCluster operator[](size_t) const;
  717. iter begin() const { return iter(this, 0); }
  718. iter end() const { return iter(this, size()); }
  719. };
  720. struct SuperCluster {
  721. const SuperClusterCollection* collection;
  722. const size_t idx;
  723. SuperCluster(const SuperClusterCollection* collection, const size_t idx)
  724. :collection(collection), idx(idx) { }
  725. const float& e() const {return collection->val_e->get_value().at(idx);}
  726. const float& px() const {return collection->val_px->get_value().at(idx);}
  727. const float& py() const {return collection->val_py->get_value().at(idx);}
  728. const float& pz() const {return collection->val_pz->get_value().at(idx);}
  729. const float& x() const {return collection->val_x->get_value().at(idx);}
  730. const float& y() const {return collection->val_y->get_value().at(idx);}
  731. const float& z() const {return collection->val_z->get_value().at(idx);}
  732. const vector<int>& charge() const {return collection->val_charge->get_value().at(idx);}
  733. const vector<int>& subDet1() const {return collection->val_subDet1->get_value().at(idx);}
  734. const vector<int>& subDet2() const {return collection->val_subDet2->get_value().at(idx);}
  735. const vector<float>& dRz1() const {return collection->val_dRz1->get_value().at(idx);}
  736. const vector<float>& dPhi1() const {return collection->val_dPhi1->get_value().at(idx);}
  737. const vector<float>& dRz2() const {return collection->val_dRz2->get_value().at(idx);}
  738. const vector<float>& dPhi2() const {return collection->val_dPhi2->get_value().at(idx);}
  739. const vector<int>& seedType() const {return collection->val_seedType->get_value().at(idx);}
  740. const vector<unsigned char>& hitsMask() const {return collection->val_hitsMask->get_value().at(idx);}
  741. };
  742. const SuperCluster SuperClusterCollection::iter::operator*() const {
  743. return {collection, idx};
  744. }
  745. const SuperCluster SuperClusterCollection::operator[](size_t idx) const {
  746. return {this, idx};
  747. }
  748. struct SimVertex;
  749. class SimVertexCollection {
  750. public:
  751. class iter {
  752. public:
  753. iter(const SimVertexCollection* collection, size_t idx)
  754. :collection(collection), idx(idx) { }
  755. iter operator++() { ++idx; return *this; }
  756. bool operator!=(const iter & other) { return idx != other.idx; }
  757. const SimVertex operator*() const;
  758. private:
  759. const SimVertexCollection* collection;
  760. size_t idx;
  761. };
  762. Value<vector<int>>* val_event;
  763. Value<vector<int>>* val_bunchCrossing;
  764. Value<vector<unsigned int>>* val_processType;
  765. Value<vector<float>>* val_x;
  766. Value<vector<float>>* val_y;
  767. Value<vector<float>>* val_z;
  768. Value<vector<vector<int>>>* val_sourceSimIdx;
  769. Value<vector<vector<int>>>* val_daughterSimIdx;
  770. SimVertexCollection() { }
  771. void init(TrackingDataSet& tds){
  772. val_event = tds.track_branch_obj<vector<int>>("simvtx_event");
  773. val_bunchCrossing = tds.track_branch_obj<vector<int>>("simvtx_bunchCrossing");
  774. val_processType = tds.track_branch_obj<vector<unsigned int>>("simvtx_processType");
  775. val_x = tds.track_branch_obj<vector<float>>("simvtx_x");
  776. val_y = tds.track_branch_obj<vector<float>>("simvtx_y");
  777. val_z = tds.track_branch_obj<vector<float>>("simvtx_z");
  778. val_sourceSimIdx = tds.track_branch_obj<vector<vector<int>>>("simvtx_sourceSimIdx");
  779. val_daughterSimIdx = tds.track_branch_obj<vector<vector<int>>>("simvtx_daughterSimIdx");
  780. }
  781. size_t size() const { return val_event->get_value().size();}
  782. const SimVertex operator[](size_t) const;
  783. iter begin() const { return iter(this, 0); }
  784. iter end() const { return iter(this, size()); }
  785. };
  786. struct SimVertex {
  787. const SimVertexCollection* collection;
  788. const size_t idx;
  789. SimVertex(const SimVertexCollection* collection, const size_t idx)
  790. :collection(collection), idx(idx) { }
  791. const int& event() const {return collection->val_event->get_value().at(idx);}
  792. const int& bunchCrossing() const {return collection->val_bunchCrossing->get_value().at(idx);}
  793. const unsigned int& processType() const {return collection->val_processType->get_value().at(idx);}
  794. const float& x() const {return collection->val_x->get_value().at(idx);}
  795. const float& y() const {return collection->val_y->get_value().at(idx);}
  796. const float& z() const {return collection->val_z->get_value().at(idx);}
  797. const vector<int>& sourceSimIdx() const {return collection->val_sourceSimIdx->get_value().at(idx);}
  798. const vector<int>& daughterSimIdx() const {return collection->val_daughterSimIdx->get_value().at(idx);}
  799. };
  800. const SimVertex SimVertexCollection::iter::operator*() const {
  801. return {collection, idx};
  802. }
  803. const SimVertex SimVertexCollection::operator[](size_t idx) const {
  804. return {this, idx};
  805. }