StFemtoEvent.cxx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. //
  2. // The StFemtoEvent holds information about the current event
  3. //
  4. // C++ headers
  5. #include <limits>
  6. #include <iostream>
  7. // FemtoDst headers
  8. #include "StFemtoEvent.h"
  9. // ROOT headers
  10. #include "TMath.h"
  11. ClassImp(StFemtoEvent)
  12. //_________________
  13. StFemtoEvent::StFemtoEvent() :
  14. mEventId(0), mRunId(0), mRefMult(0), mRefMultCorr(0), mRefMultCorrWeight(0),
  15. mRefMultPos(0), mRefMult2(0), mRefMult2Pos(0), mGRefMult(0), mCent16(-1),
  16. mNumberOfPrimaryTracks(0), mNumberOfGlobalTracks(0),
  17. mNumberOfBTofHit(0), mNumberOfTofMatched(0),mNumberOfBEMCMatched(0),
  18. mMagField(0), mVertexPositionX(0), mVertexPositionY(0), mVertexPositionZ(0),
  19. mVpdVz(0), mPrimaryVertexRanking(0), mNumberOfPrimaryVertices(0),
  20. mTransverseSphericity(-1), mTransverseSphericity2(-1),
  21. mZdcSumAdcEast(0), mZdcSumAdcWest(0),
  22. mZdcSmdEastHorizontal{}, mZdcSmdEastVertical{}, mZdcSmdWestHorizontal{}, mZdcSmdWestVertical{},
  23. mBbcAdcEast{}, mBbcAdcWest{} { // Default constructor
  24. if( !mTriggerIds.empty() ) {
  25. mTriggerIds.clear();
  26. }
  27. }
  28. //_________________
  29. StFemtoEvent::StFemtoEvent(const StFemtoEvent& ev) {
  30. // Copy constructor
  31. mEventId = ev.mEventId;
  32. mRunId = ev.mRunId;
  33. mRefMult = ev.mRefMult;
  34. mRefMultCorr = ev.mRefMultCorr;
  35. mRefMultCorrWeight = ev.mRefMultCorrWeight;
  36. mRefMultPos = ev.mRefMultPos;
  37. mGRefMult = ev.mGRefMult;
  38. mCent16 = ev.mCent16;
  39. mNumberOfPrimaryTracks = ev.mNumberOfPrimaryTracks;
  40. mNumberOfGlobalTracks = ev.mNumberOfGlobalTracks;
  41. mNumberOfBTofHit = ev.mNumberOfBTofHit;
  42. mNumberOfTofMatched = ev.mNumberOfTofMatched;
  43. mNumberOfBEMCMatched = ev.mNumberOfBEMCMatched;
  44. mMagField = ev.mMagField;
  45. mVertexPositionX = ev.mVertexPositionX;
  46. mVertexPositionY = ev.mVertexPositionY;
  47. mVertexPositionZ = ev.mVertexPositionZ;
  48. mVpdVz = ev.mVpdVz;
  49. mPrimaryVertexRanking = ev.mPrimaryVertexRanking;
  50. mNumberOfPrimaryVertices = ev.mNumberOfPrimaryVertices;
  51. mTransverseSphericity = ev.mTransverseSphericity;
  52. mTransverseSphericity2 = ev.mTransverseSphericity2;
  53. mZdcSumAdcEast = ev.mZdcSumAdcEast;
  54. mZdcSumAdcWest = ev.mZdcSumAdcWest;
  55. for(int iModule=0; iModule<8; iModule++) {
  56. mZdcSmdEastHorizontal[iModule] = ev.mZdcSmdEastHorizontal[iModule];
  57. mZdcSmdEastVertical[iModule] = ev.mZdcSmdEastVertical[iModule];
  58. mZdcSmdWestHorizontal[iModule] = ev.mZdcSmdWestHorizontal[iModule];
  59. mZdcSmdWestVertical[iModule] = ev.mZdcSmdWestVertical[iModule];
  60. }
  61. for(int iModule=0; iModule<24; iModule++) {
  62. mBbcAdcEast[iModule] = ev.mBbcAdcEast[iModule];
  63. mBbcAdcWest[iModule] = ev.mBbcAdcWest[iModule];
  64. }
  65. for(unsigned int iIter=0; ev.mTriggerIds.size(); iIter++) {
  66. mTriggerIds.at(iIter) = ev.mTriggerIds.at(iIter);
  67. }
  68. }
  69. //_________________
  70. Bool_t StFemtoEvent::isTrigger(const unsigned int& id) const {
  71. // Check if id is in the list of triggers
  72. return std::find(mTriggerIds.begin(), mTriggerIds.end(), id) != mTriggerIds.end();
  73. }
  74. //_________________
  75. void StFemtoEvent::setPrimaryVertexPosition(const Float_t& x, const Float_t& y,
  76. const Float_t& z) {
  77. // Set primary vertex position
  78. mVertexPositionX = x;
  79. mVertexPositionY = y;
  80. mVertexPositionZ = z;
  81. }
  82. //_________________
  83. void StFemtoEvent::setPrimaryVertexRanking(const Float_t& rank) {
  84. // Set primary vertex ranking according to the StFemtoEvent scheme
  85. if(rank < -1e9) { mPrimaryVertexRanking = -10; }
  86. else if(rank < -1e6) { mPrimaryVertexRanking = -9; }
  87. else if(rank < -1e3) { mPrimaryVertexRanking = -8; }
  88. else if(rank < -1e2) { mPrimaryVertexRanking = -7; }
  89. else if(rank < -10) { mPrimaryVertexRanking = -6; }
  90. else if(rank < -5) { mPrimaryVertexRanking = -5; }
  91. else if(rank < -4) { mPrimaryVertexRanking = -4; }
  92. else if(rank < -3) { mPrimaryVertexRanking = -3; }
  93. else if(rank < -2) { mPrimaryVertexRanking = -2; }
  94. else if(rank < -1) { mPrimaryVertexRanking = -1; }
  95. else if(rank < 1) { mPrimaryVertexRanking = 0; }
  96. else if(rank < 2) { mPrimaryVertexRanking = 1; }
  97. else if(rank < 3) { mPrimaryVertexRanking = 2; }
  98. else if(rank < 4) { mPrimaryVertexRanking = 3; }
  99. else if(rank < 5) { mPrimaryVertexRanking = 4; }
  100. else if(rank < 10) { mPrimaryVertexRanking = 5; }
  101. else if(rank < 1e2) { mPrimaryVertexRanking = 6; }
  102. else if(rank < 1e3) { mPrimaryVertexRanking = 7; }
  103. else if(rank < 1e6) { mPrimaryVertexRanking = 8; }
  104. else if(rank < 1e9) { mPrimaryVertexRanking = 9; }
  105. else { mPrimaryVertexRanking = 10; }
  106. }
  107. //_________________
  108. void StFemtoEvent::setRefMult(const Int_t& mult) {
  109. // Set refMult
  110. if( mult <= 0 ) {
  111. mRefMult = 0;
  112. }
  113. else {
  114. mRefMult = ( mult>std::numeric_limits<unsigned short>::max() ?
  115. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  116. }
  117. }
  118. //_________________
  119. void StFemtoEvent::setRefMultPos(const Int_t& mult) {
  120. // Set refMult estimated by positive particles
  121. if( mult <= 0) {
  122. mRefMultPos = 0;
  123. }
  124. else {
  125. mRefMultPos = ( mult>std::numeric_limits<unsigned short>::max() ?
  126. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  127. }
  128. }
  129. //_________________
  130. void StFemtoEvent::setRefMult2(const Int_t& mult) {
  131. // Set refMult2
  132. if( mult <= 0 ) {
  133. mRefMult2 = 0;
  134. }
  135. else {
  136. mRefMult2 = ( mult>std::numeric_limits<unsigned short>::max() ?
  137. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  138. }
  139. }
  140. //_________________
  141. void StFemtoEvent::setRefMult2Pos(const Int_t& mult) {
  142. // Set refMult2 estimated by positive particles
  143. if( mult <= 0) {
  144. mRefMult2Pos = 0;
  145. }
  146. else {
  147. mRefMult2Pos = ( mult>std::numeric_limits<unsigned short>::max() ?
  148. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  149. }
  150. }
  151. //_________________
  152. void StFemtoEvent::setRefMultCorr(const Float_t& mult) {
  153. // Set refMultCorr(ected) that comes from StRefMultCorr
  154. if( mult <= 0 ) {
  155. mRefMultCorr = 0;
  156. }
  157. else {
  158. mRefMultCorr = ( (mult * 10.)>std::numeric_limits<unsigned short>::max() ?
  159. std::numeric_limits<unsigned short>::max() :
  160. (UShort_t)TMath::Nint( mult * 10. ) );
  161. }
  162. }
  163. //_________________
  164. void StFemtoEvent::setNumberOfTofMatched(const Int_t& mult) {
  165. // Set number of primary tracks that matched TOF
  166. if( mult <= 0 ) {
  167. mNumberOfTofMatched = 0;
  168. }
  169. else {
  170. mNumberOfTofMatched = ( mult>std::numeric_limits<unsigned short>::max() ?
  171. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  172. }
  173. }
  174. //_________________
  175. void StFemtoEvent::setNumberOfBEMCMatched(const Int_t& mult) {
  176. // Set number of primary tracks that matched BEMC
  177. if( mult <= 0 ) {
  178. mNumberOfBEMCMatched = 0;
  179. }
  180. else {
  181. mNumberOfBEMCMatched = ( mult>std::numeric_limits<unsigned short>::max() ?
  182. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  183. }
  184. }
  185. //_________________
  186. void StFemtoEvent::setRefMultCorrWeight(const Float_t& w) {
  187. // Set refMultCorrWeight obtained from StRefMultCorr
  188. if( w<=0 ) {
  189. mRefMultCorrWeight = 0;
  190. }
  191. else {
  192. mRefMultCorrWeight = ( (w * 10000.) > std::numeric_limits<unsigned short>::max() ?
  193. std::numeric_limits<unsigned short>::max() :
  194. (UShort_t)TMath::Nint( w * 10000. ) );
  195. }
  196. }
  197. //_________________
  198. void StFemtoEvent::setGRefMult(const Int_t& mult) {
  199. // Set gRefMult
  200. if( mult <= 0 ) {
  201. mGRefMult = 0;
  202. }
  203. else {
  204. mGRefMult = ( mult>std::numeric_limits<unsigned short>::max() ?
  205. std::numeric_limits<unsigned short>::max() : (UShort_t)mult );
  206. }
  207. }
  208. //_________________
  209. void StFemtoEvent::setNumberOfPrimaryTracks(const Int_t& mult) {
  210. // Set number of primary track reconstructed in the event
  211. if( mult <= 0 ) {
  212. mNumberOfPrimaryTracks = 0;
  213. }
  214. else {
  215. mNumberOfPrimaryTracks = ( mult>std::numeric_limits<unsigned short>::max() ?
  216. std::numeric_limits<unsigned short>::max() :
  217. (UShort_t)mult );
  218. }
  219. }
  220. //_________________
  221. void StFemtoEvent::setNumberOfGlobalTracks(const Int_t& mult) {
  222. // Set number of global tracks reconstructed in the event
  223. if( mult <= 0 ) {
  224. mNumberOfGlobalTracks = 0;
  225. }
  226. else {
  227. mNumberOfGlobalTracks = ( mult>std::numeric_limits<unsigned short>::max() ?
  228. std::numeric_limits<unsigned short>::max() :
  229. (UShort_t)mult );
  230. }
  231. }
  232. //_________________
  233. void StFemtoEvent::setNumberOfPrimaryVertices(const Int_t& mult) {
  234. // Set number of primary vertices reconstructed in the event
  235. if( mult <= 0 ) {
  236. mNumberOfPrimaryVertices = 0;
  237. }
  238. else {
  239. mNumberOfPrimaryVertices = ( mult>std::numeric_limits<unsigned short>::max() ?
  240. std::numeric_limits<unsigned short>::max() :
  241. (UShort_t)mult );
  242. }
  243. }
  244. //_________________
  245. void StFemtoEvent::setNumberOfBTofHit(const Int_t& mult) {
  246. // Set number of hits in TOF (trays)
  247. if( mult <= 0 ) {
  248. mNumberOfBTofHit = 0;
  249. }
  250. else {
  251. mNumberOfBTofHit = ( mult>std::numeric_limits<unsigned short>::max() ?
  252. std::numeric_limits<unsigned short>::max() :
  253. (UShort_t)mult );
  254. }
  255. }
  256. //_________________
  257. void StFemtoEvent::setTransverseSphericity(const Float_t& sph) {
  258. // Set transverse sphericity estimated in |eta|<0.5
  259. if(sph<0. || sph>1.) {
  260. mTransverseSphericity = -1;
  261. }
  262. else {
  263. mTransverseSphericity = (Char_t)(sph * 100.);
  264. }
  265. }
  266. //_________________
  267. void StFemtoEvent::setTransverseSphericity2(const Float_t& sph) {
  268. // Set transverse sphericity estimated in |eta|<1
  269. if(sph<0. || sph>1.) {
  270. mTransverseSphericity2 = -1;
  271. }
  272. else {
  273. mTransverseSphericity2 = (UChar_t)(sph * 100.);
  274. }
  275. }
  276. //_________________
  277. Int_t StFemtoEvent::cent9() const {
  278. // Return centality esitmated for 9 bins
  279. if(mCent16 == 15) {
  280. return 8; //0-5%
  281. }
  282. else if(mCent16 == 14) {
  283. return 7; //5-10%
  284. }
  285. else if( (mCent16 == 13) || (mCent16 == 12) ) {
  286. return 6; //10-20%
  287. }
  288. else if( (mCent16 == 11) || (mCent16 == 10) ) {
  289. return 5; //20-30%
  290. }
  291. else if( (mCent16 == 9) || (mCent16 == 8) ) {
  292. return 4; //30-40%
  293. }
  294. else if( (mCent16 == 7) || (mCent16 == 6) ) {
  295. return 3; //40-50%
  296. }
  297. else if( (mCent16 == 5) || (mCent16 == 4) ) {
  298. return 2; //50-60%
  299. }
  300. else if( (mCent16 == 3) || (mCent16 == 2) ) {
  301. return 1; //60-70%
  302. }
  303. else if( (mCent16 == 1) || (mCent16 == 0) ) {
  304. return 0; //70-80%
  305. }
  306. else {
  307. return -1;
  308. }
  309. }
  310. //_________________
  311. void StFemtoEvent::setZdcSumAdcEast(const Float_t& x) {
  312. // Set sum of ADC for east ZDC
  313. if( x < 0) {
  314. mZdcSumAdcEast = 0;
  315. }
  316. else {
  317. mZdcSumAdcEast = ( x>std::numeric_limits<unsigned short>::max() ?
  318. std::numeric_limits<unsigned short>::max() :
  319. (UShort_t)TMath::Nint( x ) );
  320. }
  321. }
  322. //_________________
  323. void StFemtoEvent::setZdcSumAdcWest(const Float_t& x) {
  324. // Set sum of ADC for west ZDC
  325. if( x < 0) {
  326. mZdcSumAdcWest = 0;
  327. }
  328. else {
  329. mZdcSumAdcWest = ( x>std::numeric_limits<unsigned short>::max() ?
  330. std::numeric_limits<unsigned short>::max() :
  331. (UShort_t)TMath::Nint( x ) );
  332. }
  333. }
  334. //_________________
  335. void StFemtoEvent::setZdcSmdEastHorizontal(const Int_t& iMod, const Float_t& x) {
  336. // Set ADC for east ZDC i-th horizontal strip
  337. if( x < 0 ) {
  338. mZdcSmdEastHorizontal[iMod] = 0;
  339. }
  340. else {
  341. mZdcSmdEastHorizontal[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  342. std::numeric_limits<unsigned short>::max() :
  343. (UShort_t)TMath::Nint( x ) );
  344. }
  345. }
  346. //_________________
  347. void StFemtoEvent::setZdcSmdEastVertical(const Int_t& iMod, const Float_t& x) {
  348. // Set ADC for east ZDC i-th vertical strip
  349. if( x < 0 ) {
  350. mZdcSmdEastVertical[iMod] = 0;
  351. }
  352. else {
  353. mZdcSmdEastVertical[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  354. std::numeric_limits<unsigned short>::max() :
  355. (UShort_t)TMath::Nint( x ) );
  356. }
  357. }
  358. //_________________
  359. void StFemtoEvent::setZdcSmdWestHorizontal(const Int_t& iMod, const Float_t& x) {
  360. // Set ADC for west ZDC i-th horizontal strip
  361. if( x < 0 ) {
  362. mZdcSmdWestHorizontal[iMod] = 0;
  363. }
  364. else {
  365. mZdcSmdWestHorizontal[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  366. std::numeric_limits<unsigned short>::max() :
  367. (UShort_t)TMath::Nint( x ) );
  368. }
  369. }
  370. //_________________
  371. void StFemtoEvent::setZdcSmdWestVertical(const Int_t& iMod, const Float_t& x) {
  372. // Set ADC for west ZDC i-th vertical strip
  373. if( x < 0 ) {
  374. mZdcSmdWestVertical[iMod] = 0;
  375. }
  376. else {
  377. mZdcSmdWestVertical[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  378. std::numeric_limits<unsigned short>::max() :
  379. (UShort_t)TMath::Nint( x ) );
  380. }
  381. }
  382. //_________________
  383. void StFemtoEvent::setBbcAdcEast(const Int_t& iMod, const UShort_t& x) {
  384. // Set ADC for east BBC i-th PMT box
  385. if( x < 0 ) {
  386. mBbcAdcEast[iMod] = 0;
  387. }
  388. else {
  389. mBbcAdcEast[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  390. std::numeric_limits<unsigned short>::max() :
  391. (UShort_t)x );
  392. }
  393. }
  394. //_________________
  395. void StFemtoEvent::setBbcAdcWest(const Int_t& iMod, const UShort_t& x) {
  396. // Set ADC for west BBC i-th PMT box
  397. if( x < 0 ) {
  398. mBbcAdcWest[iMod] = 0;
  399. }
  400. else {
  401. mBbcAdcWest[iMod] = ( x>std::numeric_limits<unsigned short>::max() ?
  402. std::numeric_limits<unsigned short>::max() :
  403. (UShort_t)x );
  404. }
  405. }
  406. //_________________
  407. void StFemtoEvent::setTriggerId(const UInt_t& id) {
  408. // Add trigger id to the list if it is not there yet
  409. // Check if the trigger id is already in the mTriggerIds vector
  410. if ( std::find(mTriggerIds.begin(),
  411. mTriggerIds.end(),
  412. id) != mTriggerIds.end() ) {
  413. mTriggerIds.push_back(id);
  414. }
  415. }
  416. //_________________
  417. void StFemtoEvent::addTriggerId(const UInt_t& id) {
  418. // Add trigger id to the list if it is not there yet
  419. setTriggerId(id);
  420. }
  421. //_________________
  422. void StFemtoEvent::print() {
  423. // Print basic event information
  424. std::cout << "eventId: " << eventId() << " runId: " << runId() << " year: " << year() << " day: " << day()
  425. << std::endl
  426. << "refMult: " << refMult() << " refMult2: " << refMult2() << " refMultCorr: " << refMultCorr()
  427. << " gRefMult: " << gRefMult() << std::endl
  428. << "cent9: " << cent9() << " cent16: " << cent16() << std::endl
  429. << "# bTofHit: " << numberOfBTofHit() << " # primaryTracks: " << numberOfPrimaryTracks()
  430. << "# globalTracks: " << numberOfGlobalTracks() << " # tofMatched: " << numberOfTofMatched()
  431. << std::endl
  432. << "bField: " << magneticField() << " transverseSph: " << transverseSphericity()
  433. << " transverseSph2: " << transverseSphericity2() << std::endl
  434. << "Vertex position x,y,z: " << primaryVertex().X() << " , " << primaryVertex().Y()
  435. << " , " << primaryVertex().Z() << std::endl
  436. << "vpdVz: " << vpdVz() << " ranking: " << ranking() << std::endl
  437. << "trigger Ids:";
  438. for(UInt_t iTrg=0; triggerIds().size(); iTrg++) {
  439. std::cout << " " << triggerIds().at(iTrg);
  440. }
  441. std::cout << std::endl;
  442. }