StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StMuFstUtil.cxx
1 #include "StEvent/StFstHitCollection.h"
2 #include "StEvent/StFstHit.h"
3 #include "StEvent/StFstEvtCollection.h"
4 #include "StEvent/StFstRawHit.h"
5 
6 #include "StMuDSTMaker/COMMON/StMuFstHit.h"
7 #include "StMuDSTMaker/COMMON/StMuFstRawHit.h"
8 #include "StMuDSTMaker/COMMON/StMuFstUtil.h"
9 #include "StMuDSTMaker/COMMON/StMuFstCollection.h"
10 #include "StMuDSTMaker/COMMON/StMuDst.h"
11 #include "StMuDSTMaker/COMMON/StMuEvent.h"
12 #include "StEvent/StEvent.h"
13 #include "St_base/StMessMgr.h"
14 #include "StEvent/StEventTypes.h"
15 #include "StEvent/StTriggerData.h"
16 #include "StEvent/StContainers.h"
17 
18 #include <algorithm> // For std::find
19 #include <iterator> // For std::distance
20 
21 #include "TCollection.h" // For TIter
22 #include "TRefArray.h"
23 #include "TVector3.h"
24 
25 ClassImp(StMuFstUtil)
26 
28 {
29 }
30 StMuFstUtil::~StMuFstUtil()
31 {
32 }
33 
34 StMuFstCollection* StMuFstUtil::getMuFst(StFstHitCollection *fstcol, StFstEvtCollection *fstevtcol)
35 {
36  LOG_DEBUG << "StMuFstUtil::getMuFst" << endm;
37  if(!fstcol) return NULL;
39  fillMuFst(muFst,fstcol,fstevtcol);
40  return muFst;
41 } // getMuFst
42 
43 StFstHitCollection* StMuFstUtil::getFst(StMuFstCollection* muFst)
44 {
45  if(!muFst) return NULL;
46 
48  fillFst(fst,muFst);
49  return fst;
50 } //getFst
51 
52 void StMuFstUtil::fillMuFst(StMuFstCollection *muFst,StFstHitCollection *fstcol,StFstEvtCollection *fstevtcol)
53 {
54  LOG_INFO << "fillMuFst" << endm;
55  if(!fstcol) return;
56  if(!muFst) return;
57 
58  fillMuFstHits(muFst, fstcol, fstevtcol);
59 
60 } // fillMuFst
61 
62 void StMuFstUtil::fillFst(StFstHitCollection* fstcol,StMuFstCollection* muFst)
63 {
64  if(!muFst) return;
65  if(!fstcol) return;
66  fillFstHits(fstcol, muFst);
67 } // fillFst
68 
69 void StMuFstUtil::fillMuFstHits(StMuFstCollection* muFst,
70  StFstHitCollection* fstcol,
71  StFstEvtCollection *fstevtcol)
72 {
73  LOG_INFO << "fillMuFstHits" << endm;
74  //fill FST Raw Hits
75  if(fstevtcol) {
76  LOG_DEBUG << "fillMuFstHits (raw hits)" << endm;
77  if(fstevtcol->numberOfRawHits() > 0) {
78  const StSPtrVecFstRawHit &vecRawHit = fstevtcol->rawHits();
79  for(unsigned int i=0; i<fstevtcol->numberOfRawHits(); i++)
80  {
81  StMuFstRawHit* muFstRawHit = muFst->addRawHit();
82  muFstRawHit->set( vecRawHit[i] );
83  } // for i hit
84  } // if has FST Raw hit
85 
86  } // if has FST Raw hit collection
87 
88  //fill FST hits
89  for(int wedgeIdx=0; wedgeIdx<kFstNumWedges; wedgeIdx++ )
90  {
91  StFstWedgeHitCollection* wedgeHitCollection = fstcol->wedge(wedgeIdx);
92  for(int sensorIdx=0; sensorIdx<kFstNumSensorsPerWedge; sensorIdx++)
93  {
94  StFstSensorHitCollection* sensorHitCollection = wedgeHitCollection->sensor(sensorIdx);
95 
96  const StSPtrVecFstHit &vecHit = sensorHitCollection->hits();
97  for(unsigned int i=0; i<sensorHitCollection->numberOfHits(); i++)
98  {
99  StMuFstHit* muFstHit = muFst->addHit();
100  muFstHit->set( vecHit[i] );
101  } // for i hit
102  } // for sensorIdx
103  } // for wedgeIdx
104 
105 } // fillMuFstHits
106 
107 void StMuFstUtil::fillFstHits(StFstHitCollection* fstcol,
108  StMuFstCollection* muFst)
109 {
110  // Using TIter to iterate is safe in the case of hits being NULL
111  TIter next(muFst->getHitArray());
112  StMuFstHit* muHit(NULL);
113  while ((muHit = static_cast<StMuFstHit*>(next())))
114  {
115  StFstHit *newHit = new StFstHit(muHit->getDisk(), muHit->getWedge(), muHit->getSensor(), muHit->getApv(), muHit->getCharge(), muHit->getChargeErr(), muHit->getMaxTimeBin(), muHit->getMeanRStrip(), muHit->getMeanPhiStrip(), muHit->getNRawHits(), muHit->getNRawHitsR(), muHit->getNRawHitsPhi());
116  newHit->setId(muHit->getId());
117  newHit->setIdTruth(muHit->getIdTruth());
118 
119  newHit->setLocalPosition(muHit->localPosition(0), muHit->localPosition(1), muHit->localPosition(2)); //set local position on sensor
120 
121  fstcol->addHit(newHit);
122  } // while
123 } // fillFstHits