00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 #ifndef StAssociationMaker_HH
00114 #define StAssociationMaker_HH
00115
00116 #ifndef StMaker_H
00117 #include "StMaker.h"
00118 #endif
00119
00120 class StTpcHit;
00121 class StSvtHit;
00122 class StSsdHit;
00123 class StFtpcHit;
00124 class StGlobalTrack;
00125 class StVertex;
00126 class StKinkVertex;
00127 class StV0Vertex;
00128 class StXiVertex;
00129
00130 class StMcTpcHit;
00131 class StMcSvtHit;
00132 class StMcSsdHit;
00133 class StMcFtpcHit;
00134 class StMcTrack;
00135 class StMcVertex;
00136
00137 class StTrackPairInfo;
00138
00139 class TH2F;
00140
00141 struct trackPing {
00142 const StMcTrack* mcTrack;
00143 unsigned int nPingsTpc;
00144 unsigned int nPingsSvt;
00145 unsigned int nPingsSsd;
00146 unsigned int nPingsFtpc;
00147 };
00148
00149
00150
00151
00152 #ifndef __CINT__
00153 #include <map>
00154 #include <utility>
00155 #if !defined(ST_NO_NAMESPACES)
00156 using std::multimap;
00157 using std::pair;
00158 #endif
00159
00160 #include "StMcHitComparisons.hh"
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 struct compTrack {
00195 bool operator()(const StGlobalTrack*, const StGlobalTrack*) const;
00196 };
00197
00198 struct compMcTrack {
00199 bool operator()(const StMcTrack*, const StMcTrack*) const;
00200 };
00201
00202 struct compKinkVertex {
00203 bool operator()(const StKinkVertex*, const StKinkVertex*) const;
00204 };
00205 struct compV0Vertex {
00206 bool operator()(const StV0Vertex*, const StV0Vertex*) const;
00207 };
00208 struct compXiVertex {
00209 bool operator()(const StXiVertex*, const StXiVertex*) const;
00210 };
00211
00212 struct compMcVertex {
00213 bool operator()(const StMcVertex*, const StMcVertex*) const;
00214 };
00215
00216
00217
00218
00219 #ifndef ST_NO_TEMPLATE_DEF_ARGS
00220
00221
00222
00223 typedef multimap<const StTpcHit*, const StMcTpcHit*, compHit> rcTpcHitMapType;
00224 typedef multimap<const StMcTpcHit*, const StTpcHit*, compMcHit> mcTpcHitMapType;
00225
00226
00227
00228 typedef multimap<const StSvtHit*, const StMcSvtHit*, compHit> rcSvtHitMapType;
00229 typedef multimap<const StMcSvtHit*, const StSvtHit*, compMcHit> mcSvtHitMapType;
00230
00231
00232
00233 typedef multimap<const StSsdHit*, const StMcSsdHit*, compHit> rcSsdHitMapType;
00234 typedef multimap<const StMcSsdHit*, const StSsdHit*, compMcHit> mcSsdHitMapType;
00235
00236
00237
00238 typedef multimap<const StFtpcHit*, const StMcFtpcHit*, compFtpcHit> rcFtpcHitMapType;
00239 typedef multimap<const StMcFtpcHit*, const StFtpcHit*, compMcFtpcHit> mcFtpcHitMapType;
00240
00241
00242
00243 typedef multimap<const StGlobalTrack*, StTrackPairInfo*, compTrack> rcTrackMapType;
00244 typedef multimap<const StMcTrack*, StTrackPairInfo*, compMcTrack> mcTrackMapType;
00245
00246
00247
00248 typedef multimap<const StKinkVertex*, const StMcVertex*, compKinkVertex> rcKinkMapType;
00249 typedef multimap<const StMcVertex*, const StKinkVertex*, compMcVertex> mcKinkMapType;
00250
00251
00252
00253 typedef multimap<const StV0Vertex*, const StMcVertex*, compV0Vertex> rcV0MapType;
00254 typedef multimap<const StMcVertex*, const StV0Vertex*, compMcVertex> mcV0MapType;
00255
00256
00257
00258 typedef multimap<const StXiVertex*, const StMcVertex*, compXiVertex> rcXiMapType;
00259 typedef multimap<const StMcVertex*, const StXiVertex*, compMcVertex> mcXiMapType;
00260
00261 #else
00262
00263
00264
00265
00266
00267 typedef const StTpcHit* rcTpcHitMapKey;
00268 typedef const StTpcHit* mcTpcHitMapValue;
00269 typedef const StMcTpcHit* rcTpcHitMapValue;
00270 typedef const StMcTpcHit* mcTpcHitMapKey;
00271
00272 typedef multimap<rcTpcHitMapKey, rcTpcHitMapValue, compHit,
00273 allocator< OS_PAIR(rcTpcHitMapKey, rcTpcHitMapValue) > > rcTpcHitMapType;
00274
00275 typedef multimap<mcTpcHitMapKey, mcTpcHitMapValue, compMcHit,
00276 allocator< OS_PAIR(mcTpcHitMapKey, mcTpcHitMapValue) > > mcTpcHitMapType;
00277
00278
00279
00280 typedef const StSvtHit* rcSvtHitMapKey;
00281 typedef const StSvtHit* mcSvtHitMapValue;
00282 typedef const StMcSvtHit* rcSvtHitMapValue;
00283 typedef const StMcSvtHit* mcSvtHitMapKey;
00284
00285 typedef multimap<rcSvtHitMapKey, rcSvtHitMapValue, compHit,
00286 allocator< OS_PAIR(rcSvtHitMapKey, rcSvtHitMapValue) > > rcSvtHitMapType;
00287
00288 typedef multimap<mcSvtHitMapKey, mcSvtHitMapValue, compMcHit,
00289 allocator< OS_PAIR(mcSvtHitMapKey, mcSvtHitMapValue) > > mcSvtHitMapType;
00290
00291
00292
00293 typedef const StSsdHit* rcSsdHitMapKey;
00294 typedef const StSsdHit* mcSsdHitMapValue;
00295 typedef const StMcSsdHit* rcSsdHitMapValue;
00296 typedef const StMcSsdHit* mcSsdHitMapKey;
00297
00298 typedef multimap<rcSsdHitMapKey, rcSsdHitMapValue, compHit,
00299 allocator< OS_PAIR(rcSsdHitMapKey, rcSsdHitMapValue) > > rcSsdHitMapType;
00300
00301 typedef multimap<mcSsdHitMapKey, mcSsdHitMapValue, compMcHit,
00302 allocator< OS_PAIR(mcSsdHitMapKey, mcSsdHitMapValue) > > mcSsdHitMapType;
00303
00304
00305
00306 typedef const StFtpcHit* rcFtpcHitMapKey;
00307 typedef const StFtpcHit* mcFtpcHitMapValue;
00308 typedef const StMcFtpcHit* rcFtpcHitMapValue;
00309 typedef const StMcFtpcHit* mcFtpcHitMapKey;
00310
00311 typedef multimap<rcFtpcHitMapKey, rcFtpcHitMapValue, compFtpcHit,
00312 allocator< OS_PAIR(rcFtpcHitMapKey, rcFtpcHitMapValue) > > rcFtpcHitMapType;
00313
00314 typedef multimap<mcFtpcHitMapKey, mcFtpcHitMapValue, compMcFtpcHit,
00315 allocator< OS_PAIR(mcFtpcHitMapKey, mcFtpcHitMapValue) > > mcFtpcHitMapType;
00316
00317
00318
00319
00320 typedef const StGlobalTrack* rcTrackMapKey;
00321 typedef const StMcTrack* mcTrackMapKey;
00322 typedef StTrackPairInfo* trackMapValue;
00323
00324 typedef multimap<rcTrackMapKey, trackMapValue, compTrack,
00325 allocator< OS_PAIR(rcTrackMapKey, trackMapValue) > > rcTrackMapType;
00326 typedef multimap<mcTrackMapKey, trackMapValue, compMcTrack,
00327 allocator< OS_PAIR(mcTrackMapKey, trackMapValue) > > mcTrackMapType;
00328
00329
00330
00331 typedef const StKinkVertex* rcKinkMapKey;
00332 typedef const StKinkVertex* mcKinkMapValue;
00333 typedef const StMcVertex* rcKinkMapValue;
00334 typedef const StMcVertex* mcKinkMapKey;
00335
00336 typedef multimap<rcKinkMapKey, rcKinkMapValue, compKinkVertex,
00337 allocator< OS_PAIR(rcKinkMapKey, rcKinkMapValue) > > rcKinkMapType;
00338 typedef multimap<mcKinkMapKey, mcKinkMapValue, compMcVertex,
00339 allocator< OS_PAIR(mcKinkMapKey, mcKinkMapValue) > > mcKinkMapType;
00340
00341
00342
00343 typedef const StV0Vertex* rcV0MapKey;
00344 typedef const StV0Vertex* mcV0MapValue;
00345 typedef const StMcVertex* rcV0MapValue;
00346 typedef const StMcVertex* mcV0MapKey;
00347
00348 typedef multimap<rcV0MapKey, rcV0MapValue, compV0Vertex,
00349 allocator< OS_PAIR(rcV0MapKey, rcV0MapValue) > > rcV0MapType;
00350 typedef multimap<mcV0MapKey, mcV0MapValue, compMcVertex,
00351 allocator< OS_PAIR(mcV0MapKey, mcV0MapValue) > > mcV0MapType;
00352
00353
00354
00355 typedef const StXiVertex* rcXiMapKey;
00356 typedef const StXiVertex* mcXiMapValue;
00357 typedef const StMcVertex* rcXiMapValue;
00358 typedef const StMcVertex* mcXiMapKey;
00359
00360 typedef multimap<rcXiMapKey, rcXiMapValue, compXiVertex,
00361 allocator< OS_PAIR(rcXiMapKey, rcXiMapValue) > > rcXiMapType;
00362 typedef multimap<mcXiMapKey, mcXiMapValue, compMcVertex,
00363 allocator< OS_PAIR(mcXiMapKey, mcXiMapValue) > > mcXiMapType;
00364
00365 #endif
00366 typedef rcTpcHitMapType::iterator rcTpcHitMapIter;
00367 typedef rcTpcHitMapType::value_type rcTpcHitMapValType;
00368 typedef rcSvtHitMapType::iterator rcSvtHitMapIter;
00369 typedef rcSvtHitMapType::value_type rcSvtHitMapValType;
00370 typedef rcSsdHitMapType::iterator rcSsdHitMapIter;
00371 typedef rcSsdHitMapType::value_type rcSsdHitMapValType;
00372 typedef rcFtpcHitMapType::iterator rcFtpcHitMapIter;
00373 typedef rcFtpcHitMapType::value_type rcFtpcHitMapValType;
00374 typedef rcTrackMapType::iterator rcTrackMapIter;
00375 typedef rcTrackMapType::const_iterator rcTrackMapConstIter;
00376 typedef rcTrackMapType::value_type rcTrackMapValType;
00377 typedef rcKinkMapType::iterator rcKinkMapIter;
00378 typedef rcKinkMapType::const_iterator rcKinkMapConstIter;
00379 typedef rcKinkMapType::value_type rcKinkMapValType;
00380 typedef rcV0MapType::iterator rcV0MapIter;
00381 typedef rcV0MapType::const_iterator rcV0MapConstIter;
00382 typedef rcV0MapType::value_type rcV0MapValType;
00383 typedef rcXiMapType::iterator rcXiMapIter;
00384 typedef rcXiMapType::const_iterator rcXiMapConstIter;
00385 typedef rcXiMapType::value_type rcXiMapValType;
00386
00387 typedef mcTpcHitMapType::iterator mcTpcHitMapIter;
00388 typedef mcTpcHitMapType::value_type mcTpcHitMapValType;
00389 typedef mcSvtHitMapType::iterator mcSvtHitMapIter;
00390 typedef mcSvtHitMapType::value_type mcSvtHitMapValType;
00391 typedef mcSsdHitMapType::iterator mcSsdHitMapIter;
00392 typedef mcSsdHitMapType::value_type mcSsdHitMapValType;
00393 typedef mcFtpcHitMapType::iterator mcFtpcHitMapIter;
00394 typedef mcFtpcHitMapType::value_type mcFtpcHitMapValType;
00395 typedef mcTrackMapType::iterator mcTrackMapIter;
00396 typedef mcTrackMapType::const_iterator mcTrackMapConstIter;
00397 typedef mcTrackMapType::value_type mcTrackMapValType;
00398 typedef mcKinkMapType::iterator mcKinkMapIter;
00399 typedef mcKinkMapType::const_iterator mcKinkMapConstIter;
00400 typedef mcKinkMapType::value_type mcKinkMapValType;
00401 typedef mcV0MapType::iterator mcV0MapIter;
00402 typedef mcV0MapType::const_iterator mcV0MapConstIter;
00403 typedef mcV0MapType::value_type mcV0MapValType;
00404 typedef mcXiMapType::iterator mcXiMapIter;
00405 typedef mcXiMapType::const_iterator mcXiMapConstIter;
00406 typedef mcXiMapType::value_type mcXiMapValType;
00407 #else
00408 class rcTpcHitMapType;
00409 class rcTpcHitMapIter;
00410 class rcTpcHitMapValType;
00411 class rcSvtHitMapType;
00412 class rcSvtHitMapIter;
00413 class rcSvtHitMapType;
00414 class rcSsdHitMapType;
00415 class rcSsdHitMapIter;
00416 class rcSsdHitMapType;
00417 class rcFtpcHitMapType;
00418 class rcFtpcHitMapIter;
00419 class rcFtpcHitMapValType;
00420 class rcTrackMapType;
00421 class rcTrackMapValType;
00422 class rcTrackMapIter;
00423 class rcTrackMapConstIter;
00424 class rcKinkMapType;
00425 class rcKinkMapValType;
00426 class rcKinkMapIter;
00427 class rcKinkMapConstIter;
00428 class rcV0MapType;
00429 class rcV0MapValType;
00430 class rcV0MapIter;
00431 class rcV0MapConstIter;
00432 class rcXiMapType;
00433 class rcXiMapValType;
00434 class rcXiMapIter;
00435 class rcXiMapConstIter;
00436
00437 class mcTpcHitMapType;
00438 class mcTpcHitMapIter;
00439 class mcTpcHitMapValType;
00440 class mcSvtHitMapType;
00441 class mcSvtHitMapIter;
00442 class mcSvtHitMapValType;
00443 class mcSsdHitMapType;
00444 class mcSsdHitMapIter;
00445 class mcSsdHitMapValType;
00446 class mcFtpcHitMapType;
00447 class mcFtpcHitMapIter;
00448 class mcFtpcHitMapValType;
00449 class mcTrackMapType;
00450 class mcTrackMapValType;
00451 class mcTrackMapIter;
00452 class mcTrackMapConstIter;
00453 class mcKinkMapType;
00454 class mcKinkMapValType;
00455 class mcKinkMapIter;
00456 class mcKinkMapConstIter;
00457 class mcV0MapType;
00458 class mcV0MapValType;
00459 class mcV0MapIter;
00460 class mcV0MapConstIter;
00461 class mcXiMapType;
00462 class mcXiMapValType;
00463 class mcXiMapIter;
00464 class mcXiMapConstIter;
00465
00466 #endif
00467
00468 class StAssociationMaker : public StMaker {
00469
00470 public:
00471
00472 StMaker* currentChain;
00473 StAssociationMaker(const char* name = "StAssociationMaker",
00474 const char* title = "event/StAssociationMaker");
00475 virtual ~StAssociationMaker();
00476 virtual void Clear(const char* opt="");
00477 virtual Int_t Init();
00478 virtual Int_t Make();
00479 virtual Int_t Finish();
00480 void useL3Trigger() {mL3TriggerOn = true;}
00481 void useInTracker() {mInTrackerOn = true;}
00482 void useEstTracks() {mEstTracksOn = true;}
00483 void useDistanceAssoc() {mDistanceAssoc = true;}
00484 void useIdAssoc() {mDistanceAssoc = false;}
00485
00486 void dontUseL3Trigger() {mL3TriggerOn = kFALSE;}
00487 void dontUseInTracker() {mInTrackerOn = kFALSE;}
00488 void dontUseEstTracks() {mEstTracksOn = kFALSE;}
00489 void dontUseDistanceAssoc() {mDistanceAssoc = kFALSE;}
00490 void dontUseIdAssoc() {mDistanceAssoc = kTRUE;}
00491 TH2F* mTpcLocalHitResolution;
00492 TH2F* mSvtHitResolution;
00493 TH2F* mSsdHitResolution;
00494 TH2F* mFtpcHitResolution;
00495
00496
00497
00498 rcTpcHitMapType* rcTpcHitMap() { return mRcTpcHitMap; }
00499 mcTpcHitMapType* mcTpcHitMap() { return mMcTpcHitMap; }
00500 rcSvtHitMapType* rcSvtHitMap() { return mRcSvtHitMap; }
00501 mcSvtHitMapType* mcSvtHitMap() { return mMcSvtHitMap; }
00502 rcSsdHitMapType* rcSsdHitMap() { return mRcSsdHitMap; }
00503 mcSsdHitMapType* mcSsdHitMap() { return mMcSsdHitMap; }
00504 rcFtpcHitMapType* rcFtpcHitMap() { return mRcFtpcHitMap; }
00505 mcFtpcHitMapType* mcFtpcHitMap() { return mMcFtpcHitMap; }
00506 rcTrackMapType* rcTrackMap() { return mRcTrackMap; }
00507 mcTrackMapType* mcTrackMap() { return mMcTrackMap; }
00508 rcKinkMapType* rcKinkMap() { return mRcKinkMap; }
00509 mcKinkMapType* mcKinkMap() { return mMcKinkMap; }
00510 rcV0MapType* rcV0Map() { return mRcV0Map; }
00511 mcV0MapType* mcV0Map() { return mMcV0Map; }
00512 rcXiMapType* rcXiMap() { return mRcXiMap; }
00513 mcXiMapType* mcXiMap() { return mMcXiMap; }
00514
00515 Bool_t doPrintMemoryInfo;
00516 private:
00517
00518
00519
00520 rcTpcHitMapType* mRcTpcHitMap;
00521 mcTpcHitMapType* mMcTpcHitMap;
00522 rcSvtHitMapType* mRcSvtHitMap;
00523 mcSvtHitMapType* mMcSvtHitMap;
00524 rcSsdHitMapType* mRcSsdHitMap;
00525 mcSsdHitMapType* mMcSsdHitMap;
00526 rcFtpcHitMapType* mRcFtpcHitMap;
00527 mcFtpcHitMapType* mMcFtpcHitMap;
00528 rcTrackMapType* mRcTrackMap;
00529 mcTrackMapType* mMcTrackMap;
00530 rcKinkMapType* mRcKinkMap;
00531 mcKinkMapType* mMcKinkMap;
00532 rcV0MapType* mRcV0Map;
00533 mcV0MapType* mMcV0Map;
00534 rcXiMapType* mRcXiMap;
00535 mcXiMapType* mMcXiMap;
00536
00537 Bool_t drawinit;
00538 bool mL3TriggerOn;
00539 bool mInTrackerOn;
00540 bool mEstTracksOn;
00541 bool mDistanceAssoc;
00542 virtual const char* GetCVS() const
00543 {static const char cvs[]="Tag $Name: $ $Id: StAssociationMaker.h,v 1.25 2011/04/01 19:40:07 perev Exp $ built "__DATE__" "__TIME__; return cvs;}
00544
00545 ClassDef(StAssociationMaker,0)
00546
00547 };
00548 #ifndef __CINT__
00549 ostream& operator<<(ostream& out,
00550 const pair<const StGlobalTrack* const, StTrackPairInfo*>& );
00551 ostream& operator<<(ostream& out,
00552 const pair<const StMcTrack* const, StTrackPairInfo*>& );
00553
00554 ostream& operator<<(ostream& out, const rcTrackMapType& );
00555 ostream& operator<<(ostream& out, const mcTrackMapType& );
00556 #endif
00557 #endif
00558