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 #include "StEventScavenger.h"
00045 #include "StEventTypes.h"
00046
00047 bool StEventScavenger::removeEventSummary(StEvent* evt)
00048 {
00049 if (evt && evt->summary()) {
00050 evt->summary()->makeZombie();
00051 return true;
00052 }
00053 else
00054 return false;
00055 }
00056
00057 bool StEventScavenger::removeL3Trigger(StEvent* evt)
00058 {
00059 if (evt && evt->l3Trigger()) {
00060 evt->l3Trigger()->makeZombie();
00061 return true;
00062 }
00063 else
00064 return false;
00065 }
00066
00067 bool StEventScavenger::removeV0Vertices(StEvent* evt)
00068 {
00069 if (!evt) return false;
00070 StSPtrVecV0Vertex &vec = evt->v0Vertices();
00071 for (unsigned int i=0; i<vec.size(); i++)
00072 vec[i]->makeZombie();
00073 return true;
00074 }
00075
00076 bool StEventScavenger::removeXiVertices(StEvent* evt)
00077 {
00078 if (!evt) return false;
00079 StSPtrVecXiVertex &vec = evt->xiVertices();
00080 for (unsigned int i=0; i<vec.size(); i++)
00081 vec[i]->makeZombie();
00082 return true;
00083 }
00084
00085 bool StEventScavenger::removeKinkVertices(StEvent* evt)
00086 {
00087 if (!evt) return false;
00088 StSPtrVecKinkVertex &vec = evt->kinkVertices();
00089 for (unsigned int i=0; i<vec.size(); i++)
00090 vec[i]->makeZombie();
00091 return true;
00092 }
00093
00094 bool StEventScavenger::removeCalibrationVertices(StEvent* evt)
00095 {
00096 if (!evt) return false;
00097 for (unsigned int i=0; i<evt->numberOfCalibrationVertices(); i++)
00098 evt->calibrationVertex(i)->makeZombie();
00099 return true;
00100 }
00101
00102 bool StEventScavenger::removeTpcHitCollection(StEvent* evt)
00103 {
00104 if (evt && evt->tpcHitCollection()) {
00105 StTpcHitCollection *theHits = evt->tpcHitCollection();
00106 for (unsigned int n=0; n<theHits->numberOfSectors(); n++)
00107 for (unsigned int m=0; m<theHits->sector(n)->numberOfPadrows(); m++)
00108 for (unsigned int h=0; h<theHits->sector(n)->padrow(m)->hits().size(); h++)
00109 theHits->sector(n)->padrow(m)->hits()[h]->makeZombie();
00110 theHits->makeZombie();
00111 return true;
00112 }
00113 else
00114 return false;
00115 }
00116
00117 bool StEventScavenger::removeTpcHitsNotOnTracks(StEvent* evt)
00118 {
00119 if (evt && evt->tpcHitCollection()) {
00120
00121 StTpcHitCollection *theHits = evt->tpcHitCollection();
00122 for (unsigned int n=0; n<theHits->numberOfSectors(); n++)
00123 for (unsigned int m=0; m<theHits->sector(n)->numberOfPadrows(); m++)
00124 for (unsigned int h=0; h<theHits->sector(n)->padrow(m)->hits().size(); h++)
00125 if (theHits->sector(n)->padrow(m)->hits()[h]->trackReferenceCount() == 0)
00126 theHits->sector(n)->padrow(m)->hits()[h]->makeZombie();
00127
00128 StSPtrVecTrackNode& nodes = evt->trackNodes();
00129 for (unsigned int i = 0; i < nodes.size(); i++) {
00130 StTrackNode* node = nodes[i];
00131 for (unsigned int j = 0; j < node->entries(); j++) {
00132 if (node->track(j)->isZombie()) {
00133 StTrack* track = node->track(j);
00134 StTrackDetectorInfo* info = track->detectorInfo();
00135 if (info) {
00136 StPtrVecHit& hitList = info->hits();
00137 for (unsigned int k = 0; k < hitList.size(); k++)
00138 if (hitList[k]->detector() == kTpcId) hitList[k]->makeZombie();
00139 }
00140 }
00141 }
00142 }
00143 return true;
00144 }
00145 else
00146 return false;
00147 }
00148
00149 bool StEventScavenger::removeFtpcHitCollection(StEvent* evt)
00150 {
00151 if (evt && evt->ftpcHitCollection()) {
00152 StFtpcHitCollection *theHits = evt->ftpcHitCollection();
00153 for (unsigned int n=0; n<theHits->numberOfPlanes(); n++)
00154 for (unsigned int m=0; m<theHits->plane(n)->numberOfSectors(); m++)
00155 for (unsigned int h=0; h<theHits->plane(n)->sector(m)->hits().size(); h++)
00156 theHits->plane(n)->sector(m)->hits()[h]->makeZombie();
00157 theHits->makeZombie();
00158 return true;
00159 }
00160 else
00161 return false;
00162 }
00163
00164 bool StEventScavenger::removeSvtHitCollection(StEvent* evt)
00165 {
00166 if (evt && evt->svtHitCollection()) {
00167 StSvtHitCollection *theHits = evt->svtHitCollection();
00168 for (unsigned int n=0; n<theHits->numberOfBarrels(); n++)
00169 for (unsigned int m=0; m<theHits->barrel(n)->numberOfLadders(); m++)
00170 for (unsigned int k=0; k<theHits->barrel(n)->ladder(k)->numberOfWafers(); k++)
00171 for (unsigned int h=0; h<theHits->barrel(n)->ladder(m)->wafer(k)->hits().size(); h++)
00172 theHits->barrel(n)->ladder(m)->wafer(k)->hits()[h]->makeZombie();
00173 theHits->makeZombie();
00174 return true;
00175 }
00176 else
00177 return false;
00178 }
00179
00180 bool StEventScavenger::removeSsdHitCollection(StEvent* evt)
00181 {
00182 if (evt && evt->ssdHitCollection()) {
00183 StSsdHitCollection *theHits = evt->ssdHitCollection();
00184 for (unsigned int m=0; m<theHits->numberOfLadders(); m++)
00185 for (unsigned int k=0; k<theHits->ladder(k)->numberOfWafers(); k++)
00186 for (unsigned int h=0; h<theHits->ladder(m)->wafer(k)->hits().size(); h++)
00187 theHits->ladder(m)->wafer(k)->hits()[h]->makeZombie();
00188 theHits->makeZombie();
00189 return true;
00190 }
00191 else
00192 return false;
00193 }
00194
00195 bool StEventScavenger::removeEmcCollection(StEvent* evt)
00196 {
00197 if (evt && evt->emcCollection()) {
00198 evt->emcCollection()->makeZombie();
00199 return true;
00200 }
00201 else
00202 return false;
00203 }
00204
00205 bool StEventScavenger::removeRichCollection(StEvent* evt)
00206 {
00207 if (evt && evt->richCollection()) {
00208 evt->richCollection()->makeZombie();
00209 return true;
00210 }
00211 else
00212 return false;
00213 }
00214
00215 bool StEventScavenger::removeTriggerDetectorCollection(StEvent* evt)
00216 {
00217 if (evt && evt->triggerDetectorCollection()) {
00218 evt->triggerDetectorCollection()->makeZombie();
00219 return true;
00220 }
00221 else
00222 return false;
00223 }
00224
00225 bool StEventScavenger::removeFpdCollection(StEvent* evt)
00226 {
00227 if (evt && evt->fpdCollection()) {
00228 evt->fpdCollection()->makeZombie();
00229 return true;
00230 }
00231 else
00232 return false;
00233 }
00234
00235 bool StEventScavenger::removeTofCollection(StEvent* evt)
00236 {
00237 if (evt && evt->tofCollection()) {
00238 evt->tofCollection()->makeZombie();
00239 return true;
00240 }
00241 else
00242 return false;
00243 }
00244
00245 bool StEventScavenger::removeHltEvent(StEvent* evt)
00246 {
00247 if (evt && evt->hltEvent()) {
00248 evt->hltEvent()->makeZombie();
00249 return true;
00250 }
00251 else
00252 return false;
00253 }
00254
00255 bool StEventScavenger::remove(StTrack* track)
00256 {
00257 if (!track) return false;
00258
00259 track->makeZombie();
00260
00261
00262
00263
00264
00265
00266
00267 StTrackNode* node = track->node();
00268 StTrackDetectorInfo* info = track->detectorInfo();
00269 unsigned int nTimesUsed = 0;
00270 unsigned int nZombies = 0;
00271 StTrack *someTrack;
00272 if (node) {
00273 unsigned int i;
00274 for (i=0; i<node->entries(); i++) {
00275 someTrack = node->track(i);
00276 if (someTrack->isZombie()) nZombies++;
00277 if (someTrack != track && !someTrack->isZombie() &&
00278 someTrack->detectorInfo() == info) nTimesUsed++;
00279 }
00280 if (node->entries() == nZombies) node->makeZombie();
00281 }
00282 if (info && nTimesUsed < 1) info->makeZombie();
00283
00284 return true;
00285 }