00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <map>
00018 #include <set>
00019 #include "Stiostream.h"
00020 #include "StTrack.h"
00021 #include "StContainers.h"
00022 #include "StTrackDetectorInfo.h"
00023 #include "StEnumerations.h"
00024 #include "StHit.h"
00025
00026 void dominatrackInfo(const StTrack* recTrack,short&dominatrackKey ,short& dominatrackHits,float& avgQuality) {
00027
00028
00029
00030
00031 static short DetectorList[kMaxDetectorId];
00032 dominatrackKey = -999;
00033 dominatrackHits = 0;
00034 avgQuality = 0;
00035 multimap<short,float> idTruths;
00036 set<short> uniqueIdTruths;
00037 if (!recTrack) return;
00038 StPtrVecHit recHits = recTrack->detectorInfo()->hits();
00039
00040 for (StHitIterator hi=recHits.begin();
00041 hi!=recHits.end(); hi++) {
00042 StHit* rHit = *hi;
00043 idTruths.insert( multimap<short,float>::value_type(rHit->idTruth(),rHit->qaTruth()));
00044 uniqueIdTruths.insert(static_cast<int>(rHit->idTruth()));
00045 }
00046
00047 for (set<short>::iterator si=uniqueIdTruths.begin(); si!=uniqueIdTruths.end(); ++si) {
00048 int currentNHitsIdTruth = idTruths.count(*si);
00049 if (currentNHitsIdTruth>dominatrackHits) {
00050 dominatrackKey = *si;
00051 dominatrackHits = currentNHitsIdTruth;
00052 }
00053 }
00054
00055 pair<multimap<short,float>::iterator,multimap<short,float>::iterator> dominatrackRange = idTruths.equal_range(dominatrackKey);
00056 for (multimap<short,float>::iterator mi=dominatrackRange.first; mi!=dominatrackRange.second; ++mi) {
00057 avgQuality+=mi->second;
00058 }
00059 avgQuality/=dominatrackHits;
00060 memset (DetectorList, 0, kMaxDetectorId*sizeof(short));
00061 for (StHitIterator hi=recHits.begin();
00062 hi!=recHits.end(); hi++) {
00063 StHit* rHit = *hi;
00064 if (rHit->idTruth() == dominatrackKey) {
00065 DetectorList[rHit->detector()]++;
00066 }
00067 #if 0
00068 else cout << "Not Matched hit " << *rHit << endl;
00069 #endif
00070 }
00071 if (DetectorList[kTpcId] > 99) DetectorList[kTpcId] = 99;
00072 if (DetectorList[kSvtId] > 9) DetectorList[kSvtId] = 9;
00073 if (DetectorList[kSsdId] > 9) DetectorList[kSsdId] = 9;
00074 dominatrackHits = DetectorList[kTpcId] + 100*(DetectorList[kSvtId] + 10*DetectorList[kSsdId]);
00075 return;
00076 }