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
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 #include "StiDefaultToolkit.h"
00130 #include "Sti/Base/Filter.h"
00131 #include "Sti/Base/Factory.h"
00132 #include "Sti/Base/EditableParameter.h"
00133 #include "Sti/Base/StiFactory.h"
00134 #include "Sti/StiHit.h"
00135 #include "Sti/StiHitContainer.h"
00136 #include "Sti/StiMasterDetectorBuilder.h"
00137 #include "Sti/StiMasterHitLoader.h"
00138 #include "Sti/StiDetector.h"
00139 #include "Sti/StiDetectorContainer.h"
00140 #include "Sti/StiTrackContainer.h"
00141
00142 #include "Sti/StiLocalTrackSeedFinder.h"
00143 #include "Sti/StiTrackFinder.h"
00144 #include "Sti/StiTrackFitter.h"
00145 #include "Sti/StiDefaultTrackFilter.h"
00146 #include "Sti/StiTrack.h"
00147 #include "Sti/StiKalmanTrack.h"
00148 #include "Sti/StiKalmanTrackNode.h"
00149 #include "Sti/StiKalmanTrackFitter.h"
00150 #include "Sti/StiKalmanTrackFinder.h"
00151 #include "Sti/StiTrackMerger.h"
00152 #include "Sti/StiStarVertexFinder.h"
00153
00154 #include "Sti/StiLocalTrackMerger.h"
00155 #include "Sti/StiDefaultTrackFilter.h"
00156 #include "Sti/StiDetectorGroup.h"
00157 #include "Sti/StiDetectorGroups.h"
00158 #include "StDetectorDbMaker/StiHitErrorCalculator.h"
00159 #include "StiTpc/StiTpcHitLoader.h"
00160 #include "StiSvt/StiSvtHitLoader.h"
00161 #include "StDetectorDbMaker/StiHitErrorCalculator.h"
00162
00163 #include "StEvent/StHit.h"
00164 #include "StarClassLibrary/StMCTruth.h"
00165
00166
00167
00168 StiDefaultToolkit::StiDefaultToolkit()
00169 :
00170 _evaluatorEnabled(false),
00171 _trackFilterFactory(0),
00172 _parameterFactory(0),
00173 _hitFactory(0),
00174 _trackFactory(0),
00175 _detectorFactory(0),
00176 _detectorNodeFactory(0),
00177 _trackNodeFactory(0),
00178 _trackNodeExtFactory(0),
00179 _trackNodeInfFactory(0),
00180 _detectorBuilder(),
00181 _detectorContainer(0),
00182 _detectorGroups(0),
00183 _hitContainer(0),
00184 _trackContainer(0),
00185 _trackSeedFinder(0),
00186 _trackFinder(0),
00187 _trackFitter(0),
00188 _trackMerger(0),
00189 _vertexFinder(0),
00190 _hitLoader(0),
00191 _loaderHitFilter(0),
00192 _loaderTrackFilter(0),
00193 _finderTrackFilter(0)
00194 {
00195 cout<<"StiDefaultToolkit::StiDefaultToolkit() -I- Started"<<endl;
00196 _detectorGroups = new StiDetectorGroups("StarDetectorGroups","StarDetectorGroups");
00197 cout<<"StiDefaultToolkit::StiDefaultToolkit() -I- Done"<<endl;
00198 };
00199
00200
00201 StiDefaultToolkit::~StiDefaultToolkit()
00202 {
00203 delete _trackFilterFactory;
00204 delete _hitFactory;
00205 delete _hitContainer;
00206 delete _detectorFactory;
00207 delete _detectorContainer;
00208 delete _trackNodeFactory;
00209 delete _trackNodeExtFactory;
00210 delete _trackNodeInfFactory;
00211 delete _trackContainer;
00212 delete _trackFactory;
00213 delete _parameterFactory;
00214 delete _trackSeedFinder;
00215 delete _trackFinder;
00216 delete _trackFitter;
00217 delete _trackMerger;
00218 }
00219
00220
00221 Factory< Filter<StiTrack> > * StiDefaultToolkit::getTrackFilterFactory()
00222 {
00223 if (_trackFilterFactory)
00224 return _trackFilterFactory;
00225 cout << "StiDefaultToolkit::getTrackFilterFactory() -I- Instantiating StiTrackFilterFactory" << endl;
00226 _trackFilterFactory = StiFactory<StiDefaultTrackFilter,
00227 Filter<StiTrack> >::myInstance();
00228 return _trackFilterFactory;
00229 }
00230
00231
00232 Factory<EditableParameter> * StiDefaultToolkit::getParameterFactory()
00233 {
00234 if (_parameterFactory)
00235 return _parameterFactory;
00236 _parameterFactory = StiFactory<EditableParameter,EditableParameter>::myInstance();
00237 return _parameterFactory;
00238 }
00239
00240
00241 Factory<StiHit>* StiDefaultToolkit::getHitFactory()
00242 {
00243 if (_hitFactory) return _hitFactory;
00244 _hitFactory = StiFactory<StiHit,StiHit>::myInstance();
00245 _hitFactory->setFastDelete();
00246 _hitFactory->setMaxIncrementCount(2000000);
00247 return _hitFactory;
00248 }
00249
00250
00251 Factory<StiKalmanTrack>* StiDefaultToolkit::getTrackFactory()
00252 {
00253 if (_trackFactory) return _trackFactory;
00254 cout << "StiDefaultToolkit::getTrackFactory() -I- ";
00255 _trackFactory = StiFactory<StiKalmanTrack,StiKalmanTrack>::myInstance();
00256 _trackFactory->setFastDelete();
00257 return _trackFactory;
00258 }
00259
00260
00261
00262 Factory<StiDetector>* StiDefaultToolkit::getDetectorFactory()
00263 {
00264 if (_detectorFactory)
00265 return _detectorFactory;
00266 cout << "StiDefaultToolkit::getDetectorFactory() -I- Instantiating Detector Factory"<<endl;
00267 _detectorFactory = StiFactory<StiDetector,StiDetector>::myInstance();
00268 return _detectorFactory;
00269 }
00270
00271
00272 Factory< StiCompositeTreeNode<StiDetector> >* StiDefaultToolkit::getDetectorNodeFactory()
00273 {
00274 if (_detectorNodeFactory)
00275 return _detectorNodeFactory;
00276 _detectorNodeFactory = StiFactory< StiCompositeTreeNode<StiDetector> ,
00277 StiCompositeTreeNode<StiDetector> >::myInstance();
00278 return _detectorNodeFactory;
00279 }
00280
00281
00282
00283 Factory<StiKalmanTrackNode>* StiDefaultToolkit::getTrackNodeFactory()
00284 {
00285 if (_trackNodeFactory)
00286 return _trackNodeFactory;
00287 _trackNodeFactory = StiFactory<StiKalmanTrackNode,StiKalmanTrackNode>::myInstance();
00288 _trackNodeFactory->setMaxIncrementCount(4000000);
00289 _trackNodeFactory->setFastDelete();
00290 StiKalmanTrack::setKalmanTrackNodeFactory(_trackNodeFactory);
00291 return _trackNodeFactory;
00292 }
00293
00294
00295 Factory<StiNodeExt>* StiDefaultToolkit::getTrackNodeExtFactory()
00296 {
00297 if (_trackNodeExtFactory)
00298 return _trackNodeExtFactory;
00299 _trackNodeExtFactory= StiFactory<StiNodeExt,StiNodeExt>::myInstance();
00300 _trackNodeExtFactory->setMaxIncrementCount(4000000);
00301 _trackNodeExtFactory->setFastDelete();
00302 return _trackNodeExtFactory;
00303 }
00304
00305 Factory<StiNodeInf>* StiDefaultToolkit::getTrackNodeInfFactory()
00306 {
00307 if (_trackNodeInfFactory)
00308 return _trackNodeInfFactory;
00309 _trackNodeInfFactory= StiFactory<StiNodeInf,StiNodeInf>::myInstance();
00310 _trackNodeInfFactory->setMaxIncrementCount(4000000);
00311 _trackNodeInfFactory->setFastDelete();
00312 return _trackNodeInfFactory;
00313 }
00314
00315
00316 StiDetectorGroups *StiDefaultToolkit::getDetectorGroups()
00317 {
00318 return _detectorGroups;
00319 }
00320
00321
00322
00323 void StiDefaultToolkit::add(StiDetectorGroup<StEvent>* detectorGroup)
00324 {
00325 _detectorGroups->push_back((StiGenericDetectorGroup *)detectorGroup);
00326 StiMasterHitLoader<StEvent,StiDetectorBuilder> * masterLoader;
00327 masterLoader = static_cast<StiMasterHitLoader<StEvent,StiDetectorBuilder> *>(getHitLoader());
00328 StiHitLoader<StEvent,StiDetectorBuilder> * loader = detectorGroup->getHitLoader();
00329 if (loader)
00330 {
00331 cout << "StiDefaultToolkit::add() -I- Adding hit loader for detector group:"
00332 << detectorGroup->getName()<<endl;
00333 masterLoader->addLoader(loader);
00334 }
00335 else
00336 cout << "StiDefaultToolkit::add() -I- Not adding hit loader for detector group:"<< detectorGroup->getName()<<endl;
00337
00338 StiMasterDetectorBuilder * masterBuilder = getDetectorBuilder();
00339 StiDetectorBuilder * builder = detectorGroup->getDetectorBuilder();
00340 if (builder)
00341 {
00342 cout << "StiDefaultToolkit::add() -I- Adding builder for detector group:"<< detectorGroup->getName()<<endl;
00343 masterBuilder->add(builder);
00344 }
00345 else
00346 cout << "StiDefaultToolkit::add() -I- Not adding builder for detector group:"<< detectorGroup->getName()<<endl;
00347 }
00348
00349
00350 StiMasterDetectorBuilder * StiDefaultToolkit::getDetectorBuilder()
00351 {
00352 if (_detectorBuilder)
00353 return _detectorBuilder;
00354 _detectorBuilder = new StiMasterDetectorBuilder(true);
00355 return _detectorBuilder;
00356 }
00357
00358
00359 StiDetectorContainer * StiDefaultToolkit::getDetectorContainer()
00360 {
00361 if (_detectorContainer)
00362 return _detectorContainer;
00363 _detectorContainer = new StiDetectorContainer("DetectorContainer","Detector Container", getDetectorBuilder());
00364
00365
00366 return _detectorContainer;
00367 }
00368
00369
00370 StiHitContainer * StiDefaultToolkit::getHitContainer()
00371 {
00372 if (_hitContainer)
00373 return _hitContainer;
00374 _hitContainer = new StiHitContainer("HitContainer","Reconstructed Hits", getHitFactory() );
00375 return _hitContainer;
00376 }
00377
00378
00379
00380
00381 StiTrackContainer * StiDefaultToolkit::getTrackContainer()
00382 {
00383 if (_trackContainer)
00384 return _trackContainer;
00385 _trackContainer = new StiTrackContainer("TrackContainer","Reconstructed Tracks");
00386 return _trackContainer;
00387 }
00388
00389 StiTrackFinder * StiDefaultToolkit::getTrackSeedFinder()
00390 {
00391 if (_trackSeedFinder)
00392 return _trackSeedFinder;
00393 _trackSeedFinder = new StiLocalTrackSeedFinder("LocalTrackSeedFinder",
00394 "Local Track Seed Finder",
00395 getTrackFactory(),
00396 getHitContainer(),
00397 getDetectorContainer());
00398 return _trackSeedFinder;
00399 }
00400
00401
00402 StiTrackFinder * StiDefaultToolkit::getTrackFinder()
00403 {
00404 if (_trackFinder)
00405 return _trackFinder;
00406 _trackFinder = new StiKalmanTrackFinder(this);
00407 StiTrack::setTrackFinder(_trackFinder);
00408 getTrackFitter();
00409 return _trackFinder;
00410 }
00411
00412
00413 StiTrackFitter * StiDefaultToolkit::getTrackFitter()
00414 {
00415 if (_trackFitter)
00416 return _trackFitter;
00417 _trackFitter = new StiKalmanTrackFitter();
00418 StiTrack::setTrackFitter(_trackFitter);
00419 return _trackFitter;
00420 }
00421
00422
00423 StiTrackMerger * StiDefaultToolkit::getTrackMerger()
00424 {
00425 if (_trackMerger)
00426 return _trackMerger;
00427 _trackMerger = new StiLocalTrackMerger(getTrackContainer());
00428 return _trackMerger;
00429 }
00430
00431
00432 StiVertexFinder * StiDefaultToolkit::getVertexFinder()
00433 {
00434 cout << "StiDefaultToolkit::getVertexFinder() -I- Started"<<endl;
00435 if (_vertexFinder)
00436 return _vertexFinder;
00437 _vertexFinder = new StiStarVertexFinder("GenericVertex");
00438 return _vertexFinder;
00439 }
00440
00441
00442
00443 StiHitLoader<StEvent,StiDetectorBuilder> * StiDefaultToolkit::getHitLoader()
00444 {
00445 if (_hitLoader)
00446 return _hitLoader;
00447 _hitLoader = new StiMasterHitLoader<StEvent,StiDetectorBuilder>("StarHitLoader",
00448 getHitContainer(),
00449 getHitFactory(),
00450 0);
00451 return _hitLoader;
00452 }
00453
00454
00455 void StiDefaultToolkit::setEvaluatorEnabled(bool evaluatorEnabled)
00456 {
00457 _evaluatorEnabled = evaluatorEnabled;
00458 }
00459
00460
00461 bool StiDefaultToolkit::isEvaluatorEnabled() const
00462 {
00463 return _evaluatorEnabled;
00464 }
00465
00466
00467
00468 EditableFilter<StiHit> * StiDefaultToolkit::getLoaderHitFilter()
00469 {
00470 return _loaderHitFilter;
00471 }
00472
00473
00474 EditableFilter<StiTrack> * StiDefaultToolkit::getLoaderTrackFilter()
00475 {
00476 return _loaderTrackFilter;
00477 }
00478
00479
00480 EditableFilter<StiTrack> * StiDefaultToolkit::getFinderTrackFilter()
00481 {
00482 return _finderTrackFilter;
00483 }
00484
00485
00486 void StiDefaultToolkit::setLoaderHitFilter(EditableFilter<StiHit> * loaderHitFilter)
00487 {
00488 _loaderHitFilter = loaderHitFilter;
00489 }
00490
00491
00492 void StiDefaultToolkit::setLoaderTrackFilter(EditableFilter<StiTrack> * loaderTrackFilter)
00493 {
00494 _loaderTrackFilter = loaderTrackFilter;
00495 }
00496
00497
00498 void StiDefaultToolkit::setFinderTrackFilter(EditableFilter<StiTrack> * finderTrackFilter)
00499 {
00500 _finderTrackFilter = finderTrackFilter;
00501 }
00502
00503
00504 int StiDefaultToolkit::getTruth(const StiHit *stiHit)
00505 {
00506 if (!stiHit->detector()) return 0;
00507 StHit *stHit = (StHit*)stiHit->stHit();
00508 if (!stHit) return 0;
00509 return StMCTruth(stHit->idTruth(),stHit->qaTruth());
00510 }
00511
00512