6 #include "StarClassLibrary/StParticleDefinition.hh"
7 #include "StEvent/StTrack.h"
8 #include "StEvent/StPrimaryTrack.h"
9 #include "StEvent/StTrackGeometry.h"
10 #include "StMcEvent/StMcEventTypes.hh"
11 #include "StMcEvent/StMcContainers.hh"
12 #include "StarClassLibrary/SystemOfUnits.h"
13 #include "StEvent/StEvent.h"
14 #include "StEvent/StTrackNode.h"
15 #include "StEvent/StGlobalTrack.h"
16 #include "StEvent/StTpcHit.h"
17 #include "StEvent/StTrackTopologyMap.h"
19 #include "StBFChain/StBFChain.h"
20 #include "StMcEvent/StMcEvent.hh"
21 #include "StAssociationMaker/StAssociationMaker.h"
22 #include "StAssociationMaker/StTrackPairInfo.hh"
23 #include "StMcEvent/StMcTpcHit.hh"
25 #include "StMcEvent/StMcTpcHitCollection.hh"
27 #include "StEvent/StEventTypes.h"
28 #include "StEventUtilities/StuRefMult.hh"
29 #include "StEvent/StEventSummary.h"
30 #include "StEvent/StBTofCollection.h"
31 #include "StEvent/StBTofHeader.h"
32 #include "StEvent/StEnumerations.h"
33 #include "StEvent/StTpcDedxPidAlgorithm.h"
34 #include "StMcEvent/StMcVertex.hh"
35 #include "StarClassLibrary/StParticleTypes.hh"
37 #include "StDetectorDbMaker/StDetectorDbTriggerID.h"
42 mIsNtuple(true) , mNtuple(NULL), mTpcNtuple(NULL)
44 cout <<
"StMcAnalysisMaker::StMcAnalysisMaker - DONE" << endl;
49 StBFChain *bfChain = (StBFChain *) StMaker::GetChain();
62 hTpcHitsDiffXVsPadrowVsSector =
new TH3F(
"hTpcHitsDiffXVsPadrowVsSector",
"hTpcHitsDiffXVsPadrowVsSector", 50, 0, 50, 26, 0, 26, 200, -2, 2);
63 hTpcHitsDiffYVsPadrowVsSector =
new TH3F(
"hTpcHitsDiffYVsPadrowVsSector",
"hTpcHitsDiffYVsPadrowVsSector", 50, 0, 50, 26, 0, 26, 200, -2, 2);
64 hTpcHitsDiffZVsPadrowVsSector =
new TH3F(
"hTpcHitsDiffZVsPadrowVsSector",
"hTpcHitsDiffZVsPadrowVsSector", 50, 0, 50, 26, 0, 26, 200, -2, 2);
66 mAssoc = (StAssociationMaker*)GetMaker(
"StAssociationMaker");
70 cout <<
" empty StAssociateMaker, stop!!" << endl;
76 mNtuple =
new TNtuple(
"nt",
"nt",
"pt:phi:eta:geantId:svx:svy:svz:nCommon:nFit:nMax:gPt:gPhi:gEta:dca:dcaXY:dcaZ:hftTopo:isTrueHft");
77 mTpcNtuple =
new TNtuple(
"tpc",
"tpc",
"pt:nCommon:nFit:nMax:hOx:hOy:hOz:eta:phi:mcX:mcY:mcZ:mcTb:rcX:rcY:rcZ:rcTb:sector:padrow:pad:dE:adc:mcHitToRcTrackX:mcHitToRcTrackY:mcHitToRcTrackZ");
80 cout <<
"StMcAnalysisMaker::Init - DONE" << endl;
81 return StMaker::Init();
87 cout <<
"StMcAnalysisMaker::Make() - call" << endl;
88 StMcEvent* mcEvent = (StMcEvent*)GetDataSet(
"StMcEvent");
92 LOG_WARN <<
"No StMcEvent" << endm;
96 StEvent*
event = (StEvent*)GetDataSet(
"StEvent");
99 LOG_WARN <<
"No StEvent" << endm;
103 cout <<
"StMcAnalysisMaker::Make() : event: " <<
event->id() << endl;
110 StSPtrVecMcTrack& trks = mcEvent->tracks();
111 cout <<
"Filling " << trks.size() <<
" mcTracks..." << endl;
113 if (!
mAssoc->rcTpcHitMap())
115 cout <<
"!!!There is no rcTpcHitMap in the association maker!!!!" << endl;
119 for (
unsigned int i = 0; i < trks.size(); i++)
121 StMcTrack* mcTrack = trks[i];
123 float pTrkSvx, pTrkSvy;
124 if(mcTrack->startVertex())
126 pTrkSvx = mcTrack->startVertex()->position().x();
127 pTrkSvy = mcTrack->startVertex()->position().y();
131 if(sqrt(pTrkSvx*pTrkSvx + pTrkSvy*pTrkSvy)>3.)
continue;
134 const StTrack* rcTrack =
findPartner(mcTrack, ncommonhits);
136 bool istTruth =
true;
137 bool pxlTruth1 =
true;
138 bool pxlTruth2 =
true;
142 StPtrVecHit rcIstHits = rcTrack->detectorInfo()->hits(kIstId);
143 StPtrVecHit rcPxlHits = rcTrack->detectorInfo()->hits(kPxlId);
145 int nRcIstHits = (int)rcIstHits.size();
146 int nRcPxlHits = (int)rcPxlHits.size();
149 for (
int iHit = 0; iHit < nRcIstHits; ++iHit)
151 if (rcIstHits[iHit]->idTruth() != mcTrack->key())
158 for (
int iHit = 0; iHit < nRcPxlHits; ++iHit)
160 if (rcPxlHits[iHit]->idTruth() != mcTrack->key())
162 StThreeVectorF pos = rcPxlHits[iHit]->position();
164 float const R = pow(pos.x(), 2.0) + pow(pos.y(), 2.0);
165 if (R > 3.5 * 3.5) pxlTruth2 =
false;
166 else pxlTruth1 =
false;
177 StPhysicalHelixD helix = rcTrack->geometry()->helix();
178 dca = helix.distance(event->primaryVertex()->position());
179 dcaXY = helix.geometricSignedDistance(event->primaryVertex()->position().x(),
event->primaryVertex()->position().y());
181 StThreeVectorF dcaPoint = helix.at(helix.pathLength(event->primaryVertex()->position()));
182 dcaZ = dcaPoint.z() -
event->primaryVertex()->position().z();
187 arr[iArr++] = mcTrack->pt();
188 arr[iArr++] = mcTrack->momentum().phi();
189 arr[iArr++] = mcTrack->pseudoRapidity();
190 arr[iArr++] = mcTrack->geantId();
191 arr[iArr++] = mcTrack->startVertex()->position().x();
192 arr[iArr++] = mcTrack->startVertex()->position().y();
193 arr[iArr++] = mcTrack->startVertex()->position().z();
194 arr[iArr++] = rcTrack ? ncommonhits : -999;
195 arr[iArr++] = rcTrack ? rcTrack->fitTraits().numberOfFitPoints(kTpcId) : -999;
196 arr[iArr++] = rcTrack ? rcTrack->numberOfPossiblePoints() : -999;
197 arr[iArr++] = rcTrack ? rcTrack->geometry()->momentum().perp() : -999;
198 arr[iArr++] = rcTrack ? rcTrack->geometry()->momentum().phi() : -999;
199 arr[iArr++] = rcTrack ? rcTrack->geometry()->momentum().pseudoRapidity() : -999;
203 arr[iArr++] = rcTrack ? (rcTrack->topologyMap().data(0)) >> 1 & 0x7F: 0;
204 arr[iArr++] =
static_cast<float>(istTruth && pxlTruth1 && pxlTruth2);
207 if (!rcTrack)
continue;
209 StPtrVecHit rcTpcHits = rcTrack->detectorInfo()->hits(kTpcId);
212 StPhysicalHelixD helix = rcTrack->geometry()->helix();
214 for (
size_t ih = 0; ih < rcTpcHits.size(); ih++)
216 StTpcHit* rcHit =
dynamic_cast<StTpcHit*
>(rcTpcHits[ih]);
217 if (!rcHit)
continue;
219 pair<rcTpcHitMapIter, rcTpcHitMapIter> bounds =
mAssoc->rcTpcHitMap()->equal_range(rcHit);
223 for (rcTpcHitMapIter iter = bounds.first; iter != bounds.second; iter++)
225 const StMcTpcHit* mcHit = (*iter).second;
228 if (mcHit->parentTrack()->key() == mcTrack->key())
230 StThreeVectorF mcHitTotRcTrack = helix.at(helix.pathLength(mcHit->position().x(),mcHit->position().y())) - mcHit->position();
234 arr[iArr++] = mcTrack->pt();
235 arr[iArr++] = rcTrack ? ncommonhits : -999;
236 arr[iArr++] = rcTrack ? rcTrack->fitTraits().numberOfFitPoints(kTpcId) : -999;
237 arr[iArr++] = rcTrack ? rcTrack->numberOfPossiblePoints() : -999;
238 arr[iArr++] = helix.origin().x();
239 arr[iArr++] = helix.origin().y();
240 arr[iArr++] = helix.origin().z();
241 arr[iArr++] = mcTrack->pseudoRapidity();
242 arr[iArr++] = mcTrack->momentum().phi();
243 arr[iArr++] = mcHit->position().x();
244 arr[iArr++] = mcHit->position().y();
245 arr[iArr++] = mcHit->position().z();
246 arr[iArr++] = mcHit->timeBucket();
247 arr[iArr++] = rcHit->position().x();
248 arr[iArr++] = rcHit->position().y();
249 arr[iArr++] = rcHit->position().z();
250 arr[iArr++] = rcHit->timeBucket();
251 arr[iArr++] = mcHit->sector();
252 arr[iArr++] = mcHit->padrow();
253 arr[iArr++] = mcHit->pad();
254 arr[iArr++] = mcHit->dE();
255 arr[iArr++] = rcHit->adc();
256 arr[iArr++] = mcHitTotRcTrack.x();
257 arr[iArr++] = mcHitTotRcTrack.y();
258 arr[iArr++] = mcHitTotRcTrack.z();
269 cout <<
"Not a good candidate" << endl;
275 cout <<
"No mc hit was found for this rc Hit!!!!" << endl;
308 pair<mcTrackMapIter, mcTrackMapIter> p =
mAssoc->mcTrackMap()->equal_range(mcTrack);
310 const StTrack* maxTrack = 0;
311 maxCommonTpcHits = 0;
312 for (mcTrackMapIter k = p.first; k != p.second; ++k)
314 int commonTpcHits = k->second->commonTpcHits();
315 const StTrack* track = k->second->partnerTrack()->node()->track(global);
316 if (track && commonTpcHits > maxCommonTpcHits)
319 maxCommonTpcHits = commonTpcHits;
331 pair<rcTrackMapIter, rcTrackMapIter> p =
mAssoc->rcTrackMap()->equal_range(rcTrack);
333 const StMcTrack* maxTrack = 0;
334 maxCommonTpcHits = 0;
335 for (rcTrackMapIter k = p.first; k != p.second; ++k)
337 int commonTpcHits = k->second->commonTpcHits();
339 const StMcTrack* track = k->second->partnerMcTrack();
341 if (track && commonTpcHits > maxCommonTpcHits)
344 maxCommonTpcHits = commonTpcHits;
const StTrack * findPartner(StMcTrack *, int &)
ClassImp(StMcAnalysisMaker)
StAssociationMaker * mAssoc
int fillTracks(StMcEvent *, StEvent *)
TH3F * hTpcHitsDiffZVsPadrowVsSector
TH3F * hTpcHitsDiffXVsPadrowVsSector
TH3F * hTpcHitsDiffYVsPadrowVsSector
StMcAnalysisMaker(const char *name="StMcAnalysisMaker", const char *title="event/StMcAnalysisMaker")