MpdFemtoParticle.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. /**
  2. * \class MpdFemtoParticle
  3. * \brief Main class holding particle information
  4. *
  5. * MpdFemtoParticle holds all the necessary information about a particle
  6. *
  7. * \author Grigory Nigmatkulov (NRNU MEPhI)
  8. * \date May 18, 2019
  9. * \email nigmatkulov@gmail.com
  10. */
  11. #ifndef MpdFemtoParticle_h
  12. #define MpdFemtoParticle_h
  13. // MpdFemtoMaker headers
  14. // Base
  15. #include "MpdFemtoHiddenInfo.h"
  16. // Infrastructure
  17. #include "MpdFemtoTypes.h"
  18. #include "MpdFemtoTrack.h"
  19. #include "MpdFemtoV0.h"
  20. #include "MpdFemtoKink.h"
  21. #include "MpdFemtoXi.h"
  22. #include "MpdFemtoPhysicalHelix.h"
  23. // ROOT headers
  24. #include "TLorentzVector.h"
  25. #include "TVector3.h"
  26. //_________________
  27. class MpdFemtoParticle {
  28. public:
  29. /// Default constructor
  30. MpdFemtoParticle();
  31. /// Copy constructor
  32. MpdFemtoParticle(const MpdFemtoParticle &copy);
  33. /// Constructor for MpdFemtoTrack
  34. MpdFemtoParticle(const MpdFemtoTrack * const hbtTrack, const double& mass);
  35. /// Constructor for MpdFemtoV0
  36. MpdFemtoParticle(const MpdFemtoV0 * const hbtV0, const double& mass);
  37. /// Constructor for MpdFemtoKink
  38. MpdFemtoParticle(const MpdFemtoKink * const hbtKink, const double& mass);
  39. /// Constructor for MpdFemtoXi
  40. MpdFemtoParticle(const MpdFemtoXi * const hbtXi, const double& mass);
  41. /// Assignment operator
  42. MpdFemtoParticle& operator=(const MpdFemtoParticle& copy);
  43. /// Default destructor
  44. virtual ~MpdFemtoParticle();
  45. /// Radius of the inner TPC (cm)
  46. static float mInnerTpcRadius;
  47. /// Radius of the outer TPC (cm)
  48. static float mOuterTpcRadius;
  49. /// Half length of the TPC
  50. static float mTpcHalfLength; //[cm]
  51. /// Number of points where perform calculations
  52. static const unsigned short mNumberOfPoints = 11;
  53. /// Total number of padrows in super sector
  54. static const unsigned short mNumberOfPadrows = 53;
  55. /// Radius at each padrow
  56. static float tRowRadius[mNumberOfPadrows];
  57. //
  58. // Getters
  59. //
  60. // Track information //
  61. /// Return pointer to track
  62. MpdFemtoTrack *track() const {
  63. return mTrack;
  64. }
  65. /// Return pointer to V0
  66. MpdFemtoV0 *v0() const {
  67. return mV0;
  68. }
  69. /// Return pointer to kink
  70. MpdFemtoKink *kink() const {
  71. return mKink;
  72. }
  73. /// Return pointer to xi
  74. MpdFemtoXi *xi() const {
  75. return mXi;
  76. }
  77. /// Four-momentum of particle
  78. TLorentzVector fourMomentum() const {
  79. return TLorentzVector(mPx, mPy, mPz, mEnergy);
  80. }
  81. /// Pseudorapidity of particle
  82. double eta() const {
  83. return fourMomentum().Eta();
  84. }
  85. /// Pseudorapidity of particle
  86. double pseudoRapidity() {
  87. return eta();
  88. }
  89. /// Rapidity of particle
  90. double rapidity() {
  91. return fourMomentum().Rapidity();
  92. }
  93. /// Azimuthal angle of particle
  94. double phi() const {
  95. return fourMomentum().Phi();
  96. }
  97. /// Three-momentum of particle
  98. TVector3 momentum() const {
  99. return fourMomentum().Vect();
  100. }
  101. /// Three-momentum of particle
  102. TVector3 p() const {
  103. return momentum();
  104. }
  105. /// Px of particle
  106. double px() const {
  107. return momentum().X();
  108. }
  109. /// Py of particle
  110. double py() const {
  111. return momentum().Y();
  112. }
  113. /// Pz of particle
  114. double pz() const {
  115. return momentum().Z();
  116. }
  117. /// Momentum magnitude of particle
  118. double ptot() const {
  119. return momentum().Mag();
  120. }
  121. /// Momentum magnitude squared of particle
  122. double ptot2() const {
  123. return momentum().Mag2();
  124. }
  125. /// Transverse momentum of particle
  126. double pt() const {
  127. return momentum().Perp();
  128. }
  129. /// Energy of particle
  130. double energy() const {
  131. return fourMomentum().Energy();
  132. }
  133. /// Energy of particle
  134. double e() const {
  135. return energy();
  136. }
  137. /// Energy of particle
  138. double t() const {
  139. return fourMomentum().T();
  140. }
  141. /// Energy squared of particle
  142. double energy2() const {
  143. return ( energy() * energy());
  144. }
  145. /// Primary vertex position
  146. TVector3 primaryVertex() const {
  147. return TVector3(mPrimaryVertexX, mPrimaryVertexY, mPrimaryVertexZ);
  148. }
  149. /// Helix of the track
  150. MpdFemtoPhysicalHelix helix() const {
  151. return mTrack ? mTrack->helix() : MpdFemtoPhysicalHelix();
  152. }
  153. /// Topology map of the track
  154. unsigned long topologyMap() const {
  155. return mTrack ? mTrack->topologyMap() : 0;
  156. }
  157. /// Number of hits of the track
  158. unsigned short nHits() const {
  159. return mTrack ? mTrack->nHits() : 0;
  160. }
  161. /// Number of hits of the track
  162. unsigned short numberOfHits() const {
  163. return nHits();
  164. }
  165. /// Track unique ID
  166. unsigned short trackId() const {
  167. return mTrack ? mTrack->id() : -1;
  168. }
  169. /// Position of track exit TPC points assuming start it at (0,0,0)
  170. TVector3 nominalTpcExitPoint() const {
  171. return TVector3(mTpcTrackExitPointX, mTpcTrackExitPointY, mTpcTrackExitPointZ);
  172. }
  173. /// Position of track entrance TPC points assuming start it at (0,0,0)
  174. TVector3 nominalTpcEntrancePoint() const {
  175. return TVector3(mTpcTrackEntrancePointX, mTpcTrackEntrancePointY, mTpcTrackEntrancePointZ);
  176. }
  177. /// Information about track position x at mNumberOfPoints points in TPC
  178. const float *nominalPosSampleX() const {
  179. return &mNominalPosSampleX[0];
  180. }
  181. /// Information about track position y at mNumberOfPoints points in TPC
  182. const float *nominalPosSampleY() const {
  183. return &mNominalPosSampleY[0];
  184. }
  185. /// Information about track position z at mNumberOfPoints points in TPC
  186. const float *nominalPosSampleZ() const {
  187. return &mNominalPosSampleZ[0];
  188. }
  189. /// Position x at i-th radius
  190. float nominalPosSampleX(const int& point) const;
  191. /// Position y at i-th radius
  192. float nominalPosSampleY(const int& point) const;
  193. /// Position z at i-th radius
  194. float nominalPosSampleZ(const int& point) const;
  195. /// Position at i-th radius
  196. TVector3 nominalPosSample(const int& i) const;
  197. /// Information about hit position in TPC local coordinate system
  198. float *z() {
  199. return &mZ[0];
  200. }
  201. /// Information about hit position in TPC local coordinate system
  202. float *u() {
  203. return &mU[0];
  204. }
  205. /// Information about hit position in TPC local coordinate system
  206. int *sect() {
  207. return &mSect[0];
  208. }
  209. /// Purity estimations
  210. void calculatePurity();
  211. /// Pion purity
  212. double pionPurity();
  213. /// Kaon purity
  214. double kaonPurity();
  215. /// Proton purity
  216. double protonPurity();
  217. // MpdFemtoV0 information //
  218. /// Decay point of V0
  219. TVector3 secondaryVertex() const {
  220. return TVector3(secondaryVertexX(), secondaryVertexY(), secondaryVertexZ());
  221. }
  222. /// x position of V0 decay
  223. float secondaryVertexX() const;
  224. /// y position of V0 decay
  225. float secondaryVertexY() const;
  226. /// z position of V0 decay
  227. float secondaryVertexZ() const;
  228. /// Decay point of V0
  229. TVector3 decayVertexPosition() const {
  230. return secondaryVertex();
  231. }
  232. /// Unique ID of negative daugther
  233. unsigned short negTrackId() const {
  234. return mV0->idNeg();
  235. }
  236. /// Unique ID of positive daugther
  237. unsigned short posTrackId() const {
  238. return mV0->idPos();
  239. }
  240. /// Position of the exit point of positive daughter
  241. TVector3 tpcV0PosExitPoint() const {
  242. return TVector3(tpcV0PosExitPointX(), tpcV0PosExitPointY(), tpcV0PosExitPointZ());
  243. }
  244. /// x position of the exit point of positive daughter
  245. float tpcV0PosExitPointX() const;
  246. /// y position of the exit point of positive daughter
  247. float tpcV0PosExitPointY() const;
  248. /// z position of the exit point of positive daughter
  249. float tpcV0PosExitPointZ() const;
  250. /// Position of the entrance point of positive daughter
  251. TVector3 tpcV0PosEntrancePoint() const {
  252. return TVector3(tpcV0PosEntrancePointX(), tpcV0PosEntrancePointY(), tpcV0PosEntrancePointZ());
  253. }
  254. /// x position of the entrance point of positive daughter
  255. float tpcV0PosEntrancePointX() const;
  256. /// y position of the entrance point of positive daughter
  257. float tpcV0PosEntrancePointY() const;
  258. /// z position of the entrance point of positive daughter
  259. float tpcV0PosEntrancePointZ() const;
  260. /// Position of the exit point of negative daughter
  261. TVector3 tpcV0NegExitPoint() const {
  262. return TVector3(tpcV0NegExitPointX(), tpcV0NegExitPointY(), tpcV0NegExitPointZ());
  263. }
  264. /// x position of the exit point of negative daughter
  265. float tpcV0NegExitPointX() const;
  266. /// y position of the exit point of negative daughter
  267. float tpcV0NegExitPointY() const;
  268. /// z position of the exit point of negative daughter
  269. float tpcV0NegExitPointZ() const;
  270. /// Position of the entrance point of negative daughter
  271. TVector3 tpcV0NegEntrancePoint() const {
  272. return TVector3(tpcV0NegEntrancePointX(), tpcV0NegEntrancePointY(), tpcV0NegEntrancePointZ());
  273. }
  274. /// x position of the entrance point of negative daughter
  275. float tpcV0NegEntrancePointX() const;
  276. /// y position of the entrance point of negative daughter
  277. float tpcV0NegEntrancePointY() const;
  278. /// z position of the entrance point of negative daughter
  279. float tpcV0NegEntrancePointZ() const;
  280. /// x position of the negative daughter of V0
  281. const float *tpcV0NegPosSampleX() const {
  282. return (mTpcV0NegPosSampleX) ? &mTpcV0NegPosSampleX[0] : nullptr;
  283. }
  284. /// y position of the negative daughter of V0
  285. const float *tpcV0NegPosSampleY() const {
  286. return (mTpcV0NegPosSampleY) ? &mTpcV0NegPosSampleY[0] : nullptr;
  287. }
  288. /// z position of the negative daughter of V0
  289. const float *tpcV0NegPosSampleZ() const {
  290. return (mTpcV0NegPosSampleZ) ? &mTpcV0NegPosSampleZ[0] : nullptr;
  291. }
  292. /// x position of the negative daughter of V0 at i-th point
  293. float tpcV0NegPosSampleX(const int& point) const;
  294. /// y position of the negative daughter of V0 at i-th point
  295. float tpcV0NegPosSampleY(const int& point) const;
  296. /// z position of the negative daughter of V0 at i-th point
  297. float tpcV0NegPosSampleZ(const int& point) const;
  298. /// Position of the negative daugther
  299. TVector3 tpcV0NegPosSample(const int& i) const;
  300. /// Info about hit positions in the local coordinate system (for V0 only)
  301. float *v0NegZ() {
  302. return (mV0NegZ) ? &mV0NegZ[0] : nullptr;
  303. }
  304. /// Info about hit positions in the local coordinate system (for V0 only)
  305. float *v0NegU() {
  306. return (mV0NegU) ? &mV0NegU[0] : nullptr;
  307. }
  308. /// Info about hit positions in the local coordinate system (for V0 only)
  309. int *v0NegSect() {
  310. return (mV0NegSect) ? &mV0NegSect[0] : nullptr;
  311. }
  312. /// The following method is for explicit internal calculation to fill datamembers.
  313. /// It is invoked automatically if MpdFemtoParticle constructed from MpdFemtoTrack
  314. void calculateTpcExitAndEntrancePoints(MpdFemtoPhysicalHelix *tHelix,
  315. TVector3 *PrimVert,
  316. TVector3 *SecVert,
  317. TVector3 *tmpTpcEntrancePoint,
  318. TVector3 *tmpTpcExitPoint,
  319. TVector3 *tmpPosSample,
  320. float *tmpZ,
  321. float *tmpU,
  322. int *tmpSect);
  323. //
  324. // Setters
  325. //
  326. /// Reset four-momentum
  327. void resetFourMomentum(const TLorentzVector& vec) {
  328. mPx = vec.Px();
  329. mPy = vec.Py();
  330. mPz = vec.Pz();
  331. mEnergy = vec.E();
  332. }
  333. /// Set primary vertex position
  334. void setPrimaryVertex(const TVector3& pvtx) {
  335. mPrimaryVertexX = pvtx.X();
  336. mPrimaryVertexY = pvtx.Y();
  337. mPrimaryVertexZ = pvtx.Z();
  338. }
  339. /// Set position of track exit TPC point assuming start it at (0,0,0)
  340. void setNominalTpcExitPoint(const TVector3& point) {
  341. mTpcTrackExitPointX = point.X();
  342. mTpcTrackExitPointY = point.Y();
  343. mTpcTrackExitPointZ = point.Z();
  344. }
  345. /// Set position of track entrance TPC point assuming start it at (0,0,0)
  346. void setNominalTpcEntrancePoint(const TVector3& point) {
  347. mTpcTrackEntrancePointX = point.X();
  348. mTpcTrackEntrancePointY = point.Y();
  349. mTpcTrackEntrancePointZ = point.Z();
  350. }
  351. /// Set three-coordinate of decay point
  352. void setSecondaryVertex(const TVector3& vtx) {
  353. setSecondaryVertexX(vtx.X());
  354. setSecondaryVertexY(vtx.Y());
  355. setSecondaryVertexZ(vtx.Z());
  356. }
  357. /// Set x-coordinate of decay point
  358. void setSecondaryVertexX(const float& val);
  359. /// Set y-coordinate of decay point
  360. void setSecondaryVertexY(const float& val);
  361. /// Set z-coordinate of decay point
  362. void setSecondaryVertexZ(const float& val);
  363. /// Set decay point based on V0 information
  364. void setSecondaryVertex(MpdFemtoV0 *v0) {
  365. setSecondaryVertexX(v0->decayPoint().X());
  366. setSecondaryVertexY(v0->decayPoint().Y());
  367. setSecondaryVertexZ(v0->decayPoint().Z());
  368. }
  369. /// Set decay point
  370. void setDecayPoint(const TVector3& vtx) {
  371. setSecondaryVertex(vtx);
  372. }
  373. /// Set decay point
  374. void setDecayPoint(MpdFemtoV0 *v0) {
  375. setSecondaryVertex(v0);
  376. }
  377. /// Set exit point of positive daughter of V0
  378. void setTpcV0PosExitPoint(const TVector3& vec) {
  379. setTpcV0PosExitPointX(vec.X());
  380. setTpcV0PosExitPointY(vec.Y());
  381. setTpcV0PosExitPointZ(vec.Z());
  382. }
  383. /// Set exit x position of positive daughter of V0
  384. void setTpcV0PosExitPointX(const float& val);
  385. /// Set exit y position of positive daughter of V0
  386. void setTpcV0PosExitPointY(const float& val);
  387. /// Set exit z position of positive daughter of V0
  388. void setTpcV0PosExitPointZ(const float& val);
  389. /// Set entrance point of positive daughter of V0
  390. void setTpcV0PosEntrancePoint(const TVector3& vec) {
  391. setTpcV0PosEntrancePointX(vec.X());
  392. setTpcV0PosEntrancePointY(vec.Y());
  393. setTpcV0PosEntrancePointZ(vec.Z());
  394. }
  395. /// Set entrance x position of positive daughter of V0
  396. void setTpcV0PosEntrancePointX(const float& val);
  397. /// Set entrance y position of positive daughter of V0
  398. void setTpcV0PosEntrancePointY(const float& val);
  399. /// Set entrance z position of positive daughter of V0
  400. void setTpcV0PosEntrancePointZ(const float& val);
  401. /// Set exit point of negative daughter of V0
  402. void setTpcV0NegExitPoint(const TVector3& vec) {
  403. setTpcV0NegExitPointX(vec.X());
  404. setTpcV0NegExitPointY(vec.Y());
  405. setTpcV0NegExitPointZ(vec.Z());
  406. }
  407. /// Set exit x position of negative daughter of V0
  408. void setTpcV0NegExitPointX(const float& val);
  409. /// Set exit y position of negative daughter of V0
  410. void setTpcV0NegExitPointY(const float& val);
  411. /// Set exit z position of negative daughter of V0
  412. void setTpcV0NegExitPointZ(const float& val);
  413. /// Set entrance point of negative daughter of V0
  414. void setTpcV0NegEntrancePoint(const TVector3& vec) {
  415. setTpcV0NegEntrancePointX(vec.X());
  416. setTpcV0NegEntrancePointY(vec.Y());
  417. setTpcV0NegEntrancePointZ(vec.Z());
  418. }
  419. /// Set entrance x position of negative daughter of V0
  420. void setTpcV0NegEntrancePointX(const float& val);
  421. /// Set entrance y position of negative daughter of V0
  422. void setTpcV0NegEntrancePointY(const float& val);
  423. /// Set entrance z position of negative daughter of V0
  424. void setTpcV0NegEntrancePointZ(const float& val);
  425. /// Set track positions at mNumberOfPoints points in TPC (x,y,z)
  426. void setNominalPosSample(float x[mNumberOfPoints], float y[mNumberOfPoints], float z[mNumberOfPoints]);
  427. /// Set track positions at mNumberOfPoints points in TPC (TVector3)
  428. void setNominalPosSample(TVector3 pos[mNumberOfPoints]);
  429. /// Set track x positions at i-th point in TPC
  430. void setNominalPosSampleX(const int& i, const float& val);
  431. /// Set track y positions at i-th point in TPC
  432. void setNominalPosSampleY(const int& i, const float& val);
  433. /// Set track z positions at i-th point points in TPC
  434. void setNominalPosSampleZ(const int& i, const float& val);
  435. /// Set track x positions at mNumberOfPoints points in TPC
  436. void setNominalPosSampleX(float x[mNumberOfPoints]);
  437. /// Set track y positions at mNumberOfPoints points in TPC
  438. void setNominalPosSampleY(float y[mNumberOfPoints]);
  439. /// Set track z positions at mNumberOfPoints points in TPC
  440. void setNominalPosSampleZ(float z[mNumberOfPoints]);
  441. /// Set V0 negative daughter positions at mNumberOfPoints points in TPC (x,y,z)
  442. void setTpcV0NegPosSample(float x[mNumberOfPoints], float y[mNumberOfPoints], float z[mNumberOfPoints]);
  443. /// Set V0 negative daughter positions at mNumberOfPoints points in TPC (TVector3)
  444. void setTpcV0NegPosSample(TVector3 vec[mNumberOfPoints]);
  445. /// Set V0 negative daughter x positions at mNumberOfPoints points in TPC
  446. void setTpcV0NegPosSampleX(float x[mNumberOfPoints]);
  447. /// Set V0 negative daughter y positions at mNumberOfPoints points in TPC
  448. void setTpcV0NegPosSampleY(float y[mNumberOfPoints]);
  449. /// Set V0 negative daughter z positions at mNumberOfPoints points in TPC
  450. void setTpcV0NegPosSampleZ(float z[mNumberOfPoints]);
  451. /// Set V0 negative daughter x positions at i-th point in TPC
  452. void setTpcV0NegPosSampleX(const int& i, const float& val);
  453. /// Set V0 negative daughter y positions at i-th point in TPC
  454. void setTpcV0NegPosSampleY(const int& i, const float& val);
  455. /// Set V0 negative daughter z positions at i-th point in TPC
  456. void setTpcV0NegPosSampleZ(const int& i, const float& val);
  457. /// Set information about hit positions in TPC local coordinate system
  458. void setZ(float z[mNumberOfPadrows]);
  459. /// Set information about hit positions in TPC local coordinate system
  460. void setU(float u[mNumberOfPadrows]);
  461. /// Set information about hit positions in TPC local coordinate system
  462. void setSect(int sector[mNumberOfPadrows]);
  463. /// Set information about hit positions in TPC local coordinate system
  464. void setV0NegZ(float z[mNumberOfPadrows]);
  465. /// Set information about hit positions in TPC local coordinate system
  466. void setV0NegU(float u[mNumberOfPadrows]);
  467. /// Set information about hit positions in TPC local coordinate system
  468. void setV0NegSect(int sect[mNumberOfPadrows]);
  469. /// Retrieve hidden information
  470. MpdFemtoHiddenInfo* hiddenInfo() const {
  471. return mHiddenInfo;
  472. }
  473. /// Retrieve hidden information
  474. MpdFemtoHiddenInfo* getHiddenInfo() const {
  475. return hiddenInfo();
  476. }
  477. /// Check if hidden information is valid
  478. bool validHiddenInfo() const {
  479. return (mHiddenInfo) ? true : false;
  480. }
  481. /// Set hidden information
  482. void setHiddenInfo(MpdFemtoHiddenInfo* aHiddenInfo) {
  483. mHiddenInfo = aHiddenInfo->clone();
  484. }
  485. private:
  486. /// Pointer to MpdFemtoTrack
  487. MpdFemtoTrack *mTrack;
  488. /// Pointer to MpdFemtoV0
  489. MpdFemtoV0 *mV0;
  490. /// Pointer to MpdFemtoKink
  491. MpdFemtoKink *mKink;
  492. /// Pointer to MpdFemtoXi
  493. MpdFemtoXi *mXi;
  494. /// Px of the particle
  495. float mPx;
  496. /// Py of the particle
  497. float mPy;
  498. /// Pz of the particle
  499. float mPz;
  500. /// Energy of the particle
  501. float mEnergy;
  502. /// x position of TPC entrance point
  503. float mTpcTrackEntrancePointX;
  504. /// y position of TPC entrance point
  505. float mTpcTrackEntrancePointY;
  506. /// z position of TPC entrance point
  507. float mTpcTrackEntrancePointZ;
  508. /// x position of TPC exit point
  509. float mTpcTrackExitPointX;
  510. /// y position of TPC exit point
  511. float mTpcTrackExitPointY;
  512. /// z position of TPC exit point
  513. float mTpcTrackExitPointZ;
  514. /// Calculated track x positions at each of mNumberOfPoints
  515. float mNominalPosSampleX[mNumberOfPoints];
  516. /// Calculated track y positions at each of mNumberOfPoints
  517. float mNominalPosSampleY[mNumberOfPoints];
  518. /// Calculated track z positions at each of mNumberOfPoints
  519. float mNominalPosSampleZ[mNumberOfPoints];
  520. // Next are the pointers (placeholders) for positions
  521. // of the negative V0 daughter track at mNumberOfPoints
  522. // in TPC. We will use *new* operator when the default or
  523. // MpdFemtoV0 constructors are called. For positive V0 daughters
  524. // we will use existing mNominalPosSample arrays
  525. /// Calculated V0 negative daughter x positions at each of mNumberOfPoints
  526. float *mTpcV0NegPosSampleX;
  527. /// Calculated V0 negative daughter y positions at each of mNumberOfPoints
  528. float *mTpcV0NegPosSampleY;
  529. /// Calculated V0 negative daughter z positions at each of mNumberOfPoints
  530. float *mTpcV0NegPosSampleZ;
  531. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC local coordinate system
  532. float mZ[mNumberOfPadrows];
  533. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC local coordinate system
  534. float mU[mNumberOfPadrows];
  535. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC local coordinate system
  536. int mSect[mNumberOfPadrows];
  537. // Next are the pointers (placeholders) for hit positions
  538. // of the negative V0 daughter track at each padrow of mNumberOfPadrows
  539. // at in TPC local coordinate system. We will use *new* operator
  540. // when the default or MpdFemtoV0 constructors are called.
  541. // For positive V0 daughters we will use existing
  542. // mZ,mU and mSect arrays
  543. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC
  544. /// local coordinate system of V0 negative daughter
  545. float *mV0NegZ;
  546. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC
  547. /// local coordinate system of V0 negative daughter
  548. float *mV0NegU;
  549. /// Spacial hit positions at each padrow of mNumberOfPadrows in TPC
  550. /// local coordinate system of V0 negative daughter
  551. int *mV0NegSect;
  552. /// Hidden information for simulated data
  553. MpdFemtoHiddenInfo* mHiddenInfo;
  554. /// Purity parametrization parameters
  555. float mPurity[6];
  556. static float mPrimPimPar0;
  557. static float mPrimPimPar1;
  558. static float mPrimPimPar2;
  559. static float mPrimPipPar0;
  560. static float mPrimPipPar1;
  561. static float mPrimPipPar2;
  562. static float mPrimPmPar0;
  563. static float mPrimPmPar1;
  564. static float mPrimPmPar2;
  565. static float mPrimPpPar0;
  566. static float mPrimPpPar1;
  567. static float mPrimPpPar2;
  568. /// Primary vertex x position
  569. float mPrimaryVertexX;
  570. /// Primary vertex y position
  571. float mPrimaryVertexY;
  572. /// Primary vertex z position
  573. float mPrimaryVertexZ;
  574. // To save the memory lets use pointers for next variables
  575. /// Secondary vertex x position (V0 decay point)
  576. float *mSecondaryVertexX;
  577. /// Secondary vertex y position (V0 decay point)
  578. float *mSecondaryVertexY;
  579. /// Secondary vertex z position (V0 decay point)
  580. float *mSecondaryVertexZ;
  581. // Helices of positive and negative V0 dauthers can
  582. // be returned from the MpdFemtoTrack information
  583. // Thus, for V0 daugthers we store only calculated TpcEntrance/ExitPoints
  584. /// X position of TPC entrance point of V0 positive daughter
  585. float *mTpcV0PosEntrancePointX;
  586. /// Y position of TPC entrance point of V0 positive daughter
  587. float *mTpcV0PosEntrancePointY;
  588. /// Z position of TPC entrance point of V0 positive daughter
  589. float *mTpcV0PosEntrancePointZ;
  590. /// X position of TPC exit point of V0 positive daughter
  591. float *mTpcV0PosExitPointX;
  592. /// Y position of TPC exit point of V0 positive daughter
  593. float *mTpcV0PosExitPointY;
  594. /// Z position of TPC exit point of V0 positive daughter
  595. float *mTpcV0PosExitPointZ;
  596. /// X position of TPC entrance point of V0 negative daughter
  597. float *mTpcV0NegEntrancePointX;
  598. /// Y position of TPC entrance point of V0 negative daughter
  599. float *mTpcV0NegEntrancePointY;
  600. /// Z position of TPC entrance point of V0 negative daughter
  601. float *mTpcV0NegEntrancePointZ;
  602. /// X position of TPC exit point of V0 negative daughter
  603. float *mTpcV0NegExitPointX;
  604. /// Y position of TPC exit point of V0 negative daughter
  605. float *mTpcV0NegExitPointY;
  606. /// Z position of TPC exit point of V0 negative daughter
  607. float *mTpcV0NegExitPointZ;
  608. ClassDef(MpdFemtoParticle, 1)
  609. };
  610. #endif // #define MpdFemtoParticle_h