00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
00010 #include "Fireworks/Core/interface/Context.h"
00011 #include "Fireworks/Core/interface/FWEventItem.h"
00012 #include "Fireworks/Core/interface/FWGeometry.h"
00013 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
00014
00015 #include "Fireworks/Core/interface/FWProxyBuilderConfiguration.h"
00016 #include "Fireworks/Core/interface/FWParameters.h"
00017
00018 #include "TEveTrack.h"
00019
00020 class FWTrackingParticleProxyBuilder : public FWSimpleProxyBuilderTemplate<TrackingParticle>
00021 {
00022 public:
00023 FWTrackingParticleProxyBuilder( void ) {}
00024 virtual ~FWTrackingParticleProxyBuilder( void ) {}
00025
00026 virtual void setItem(const FWEventItem* iItem) {
00027 FWProxyBuilderBase::setItem(iItem);
00028 iItem->getConfig()->assertParam("Point Size", 1l, 3l, 1l);
00029 }
00030
00031 REGISTER_PROXYBUILDER_METHODS();
00032
00033 private:
00034
00035 FWTrackingParticleProxyBuilder( const FWTrackingParticleProxyBuilder& );
00036
00037 const FWTrackingParticleProxyBuilder& operator=( const FWTrackingParticleProxyBuilder& );
00038
00039 void build( const TrackingParticle& iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext* );
00040 };
00041
00042 void
00043 FWTrackingParticleProxyBuilder::build( const TrackingParticle& iData, unsigned int iIndex, TEveElement& oItemHolder, const FWViewContext* )
00044 {
00045 TEveRecTrack t;
00046 t.fBeta = 1.0;
00047 t.fP = TEveVector( iData.px(), iData.py(), iData.pz() );
00048 t.fV = TEveVector( iData.vx(), iData.vy(), iData.vz() );
00049 t.fSign = iData.charge();
00050
00051 TEveTrack* track = new TEveTrack(&t, context().getTrackPropagator());
00052 if( t.fSign == 0 )
00053 track->SetLineStyle( 7 );
00054
00055 TEvePointSet* pointSet = new TEvePointSet;
00056 setupAddElement( pointSet, track );
00057 pointSet->SetMarkerSize(item()->getConfig()->value<long>("Point Size"));
00058 #warning "This file has been modified just to get it to compile without any regard as to whether it still functions as intended"
00059 #ifdef REMOVED_JUST_TO_GET_IT_TO_COMPILE__THIS_CODE_NEEDS_TO_BE_CHECKED
00060 const FWGeometry *geom = item()->getGeom();
00061 const std::vector<PSimHit>& hits = iData.trackPSimHit();
00062
00063 float local[3];
00064 float localDir[3];
00065 float global[3] = { 0.0, 0.0, 0.0 };
00066 float globalDir[3] = { 0.0, 0.0, 0.0 };
00067 std::vector<PSimHit>::const_iterator it = hits.begin();
00068 std::vector<PSimHit>::const_iterator end = hits.end();
00069 if( it != end )
00070 {
00071 unsigned int trackid = hits.begin()->trackId();
00072
00073 for( ; it != end; ++it )
00074 {
00075 const PSimHit& phit = (*it);
00076 if( phit.trackId() != trackid )
00077 {
00078 trackid = phit.trackId();
00079 track->AddPathMark( TEvePathMark( TEvePathMark::kDecay, TEveVector( global[0], global[1], global[2] ),
00080 TEveVector( globalDir[0], globalDir[1], globalDir[2] )));
00081 }
00082 local[0] = phit.localPosition().x();
00083 local[1] = phit.localPosition().y();
00084 local[2] = phit.localPosition().z();
00085 localDir[0] = phit.momentumAtEntry().x();
00086 localDir[1] = phit.momentumAtEntry().y();
00087 localDir[2] = phit.momentumAtEntry().z();
00088 geom->localToGlobal( phit.detUnitId(), local, global );
00089 geom->localToGlobal( phit.detUnitId(), localDir, globalDir );
00090 pointSet->SetNextPoint( global[0], global[1], global[2] );
00091 track->AddPathMark( TEvePathMark( TEvePathMark::kReference, TEveVector( global[0], global[1], global[2] ),
00092 TEveVector( globalDir[0], globalDir[1], globalDir[2] )));
00093 }
00094 if( hits.size() > 1 )
00095 track->AddPathMark( TEvePathMark( TEvePathMark::kDecay, TEveVector( global[0], global[1], global[2] ),
00096 TEveVector( globalDir[0], globalDir[1], globalDir[2] )));
00097 }
00098 #endif
00099
00100 track->MakeTrack();
00101 setupAddElement( track, &oItemHolder );
00102 }
00103
00104 REGISTER_FWPROXYBUILDER( FWTrackingParticleProxyBuilder, TrackingParticle, "TrackingParticles", FWViewType::kAll3DBits | FWViewType::kAllRPZBits );