Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

XANAVertex.cpp

Go to the documentation of this file.
00001 
00002 #include <Utilities/Configuration/interface/Architecture.h>
00003 
00004 #include <XANADOO/XANAVertex/interface/XANAVertex.h>
00005 #include <XANADOO/XANATracks/interface/XANATrack.h>
00006 #include <XANADOO/XANAUtilities/interface/XANAToolkit.h>
00007 
00008 #include <CommonReco/PersistentTrack/interface/TTrack.h>
00009 #include <CommonReco/PersistentTrack/interface/TrackReconstructor.h>
00010 #include <CommonReco/PatternTools/interface/TrackFinder.h>
00011 #include <TrackerReco/GtfPattern/interface/ModularKfReconstructor.h>
00012 #include <TrackerReco/TkSeedGenerator/interface/CombinatorialSeedGeneratorFromPixel.h>
00013 #include <TrackerReco/GtfPattern/interface/CombinatorialTrajectoryBuilder.h>
00014 #include <CommonReco/TrackFitters/interface/KFFittingSmoother.h>
00015 #include <CommonReco/PatternTools/interface/TrajectoryCleanerBySharedHits.h>
00016 #include "CommonReco/PatternTools/interface/RefittedRecTrack.h"
00017 
00018 #include "Vertex/CARFVertex/interface/RecoVertex.h"
00019 
00020 #include "CARF/Reco/interface/AutoRecCollection.h"
00021 #include "CARF/G3Event/interface/EventObservers.h"
00022 #include <CARF/Reco/interface/RecItr.h>
00023 
00024 #include "Utilities/Notification/interface/Observer.h"
00025 #include <Utilities/Notification/interface/PackageInitializer.h>
00026 #include <Utilities/UI/interface/SimpleConfigurable.h> 
00027  
00028 #include <CLHEP/Geometry/Point3D.h>
00029 #include <vector>
00030 
00031 struct VertexObserver : public Observer<G3EventProxy *>, public Observer<G3SetUp *>  {
00032 
00033   int nbVertices_ ;
00034   SimpleConfigurable<string> vertexReconstructorName_;
00035   SimpleConfigurable<string> trackReconstructorName_;
00036   TrackReconstructor *trackReconstructor_;
00037  
00038   VertexObserver()
00039    : nbVertices_(0), trackReconstructor_(0)
00040    { 
00041     // initialize observer
00042     Observer<G3EventProxy *>::init() ;      
00043     Observer<G3SetUp *>::init() ;      
00044 
00045     // steering
00046     vertexReconstructorName_=
00047      SimpleConfigurable<string>("PVRVertex","XANAVertex:VertexReconstructor");
00048     trackReconstructorName_=
00049 //     SimpleConfigurable<string>("FKfTracks","XANAVertex:TrackReconstructor");
00050      SimpleConfigurable<string>("FKfTracks","XANAVertex:TrackReconstructor");
00051     // initialisation of tracking algo must be done in observing G3SetUp       
00052    }
00053    
00054   ~VertexObserver()
00055    {
00056     delete trackReconstructor_;
00057     xana::out(1)<<"[OVAL] number of vertices : "<<nbVertices_<<endl ;
00058    }
00059 
00060   void upDate( G3SetUp *su )
00061    {    
00062     // defines Tracking algo  
00063     // beware! not to add to reconstructor! this is not a RecUnit 
00064     // this will use default propagator, trajectory builder, etc..
00065     TrackFinder *myTrackFinder = new ModularKfReconstructor(
00066      new CombinatorialSeedGeneratorFromPixel(0.8,0.1,15.),
00067      new CombinatorialTrajectoryBuilder,
00068      new KFFittingSmoother,
00069      new TrajectoryCleanerBySharedHits);
00070     trackReconstructor_ = 
00071      new TrackReconstructor(myTrackFinder,trackReconstructorName_.value().c_str()) ;
00072    }
00073     
00074   void upDate( G3EventProxy * ev )
00075    { 
00076     
00077     if (!ev) return ;    
00078   
00079     RecItr<TTrack> track(ev->recEvent(),trackReconstructorName_.value().c_str());
00080     while (track.next()) { 
00081       xana::out(1) << "new reconstructed track " << std::endl; 
00082       TrajectoryStateOnSurface ts = (*track).impactPointState() ;
00083       xana::out(1) << "(*track).impactPointState() " <<(*track).impactPointState() << std::endl;      
00084       TrajectoryStateOnSurface tsi = (*track).innermostState() ;
00085       xana::out(1) << "(*track).innermostState() " <<(*track).innermostState() << std::endl;      
00086       TrajectoryStateOnSurface tso = (*track).outermostState() ;
00087       xana::out(1) << "(*track).outermostState() " <<(*track).outermostState() << std::endl;      
00088       HepVector3D momentumAtVertex(track->momentumAtVertex().x(), 
00089        track->momentumAtVertex().y(),track->momentumAtVertex().z());
00090       xana::out(1) << "(*track).momentumAtVertex() " <<(*track).momentumAtVertex() << std::endl;      
00091       HepVector3D momentumAtFirst(tsi.globalMomentum().x(),tsi.globalMomentum().y(),
00092         tsi.globalMomentum().z());
00093       HepVector3D momentumAtLast(tso.globalMomentum().x(),tso.globalMomentum().y(),
00094         tso.globalMomentum().z());
00095    }    
00096     AutoRecCollection<RecoVertex, G3EventProxy *> vertices(vertexReconstructorName_.value().c_str());
00097         
00098     // construct XANAVertex from RecoVertex
00099     vector<XANAVertex> xVertices;
00100     XANAVertex *xVertex=0;
00101     XANATrack *xTrack=0;
00102     for(AutoRecCollection<RecoVertex, G3EventProxy *>::const_iterator iv=vertices.begin(); 
00103      iv!=vertices.end(); iv++) {
00104       HepPoint3D position((*iv)->position().x(),(*iv)->position().y(), 
00105        (*iv)->position().z()); 
00106       xVertex = new XANAVertex(position, (*iv)->totalChiSquared(), 
00107        (*iv)->degreesOfFreedom(), vertexReconstructorName_.value().c_str());
00108       // then add constituent tracks 
00109       xana::out(1) << "vertex found, loop on constituent tracks " << std::endl;
00110       vector <RefittedRecTrack> refTracks = (*iv)->refittedTracks();
00111       for  (vector<RefittedRecTrack>::const_iterator it=refTracks.begin();
00112        it!=refTracks.end(); it++) {
00113         xana::out(1) << "new refitted track " << std::endl;
00114         TrajectoryStateOnSurface tsi = it->innermostState() ;
00115         xana::out(1) << "(*track).innermostState() " <<(*track).innermostState() << std::endl;      
00116         TrajectoryStateOnSurface tso = it->outermostState() ;
00117         xana::out(1) << "(*track).outermostState() " <<(*track).outermostState() << std::endl;      
00118         // acessing track params if vertex exists is buggy but tsi, tso OK
00119         GlobalVector momentum = it->momentumAtVertex();
00120         xana::out(1) << "tsi.momentum " << tsi.globalMomentum() << std::endl;
00121         HepVector3D momentumAtVertex;
00122          momentumAtVertex=HepVector3D(momentum.x(),
00123          momentum.y(), momentum.z());
00124         xana::out(1) << "momentum at vertex " << momentumAtVertex << std::endl;        
00125       } 
00126       // this is needed otherwise access to originaltracks params is buggy
00127       vector<RecTrack> recTracks = (*iv)->originalTracks();
00128       for  (vector<RecTrack>::const_iterator it=recTracks.begin();
00129        it!=recTracks.end(); it++) {
00130         xana::out(1) << "new original track " << std::endl;
00131         TrajectoryStateOnSurface tsi = it->innermostState() ;
00132         xana::out(1) << "(*track).innermostState() " <<(*track).innermostState() << std::endl;      
00133         TrajectoryStateOnSurface tso = it->outermostState() ;
00134         xana::out(1) << "(*track).outermostState() " <<(*track).outermostState() << std::endl;      
00135         GlobalVector momentum = it->momentumAtVertex();
00136         HepVector3D momentumAtVertex;
00137          momentumAtVertex=HepVector3D(momentum.x(),
00138          momentum.y(), momentum.z());
00139         xana::out(1) << "momentum at vertex " << momentum << std::endl;
00140         HepPoint3D firstHit(tsi.globalPosition().x(),tsi.globalPosition().y(),
00141           tsi.globalPosition().z()); 
00142         HepVector3D momentumAtFirst(tsi.globalMomentum().x(),tsi.globalMomentum().y(),
00143           tsi.globalMomentum().z());
00144         HepPoint3D lastHit(tso.globalPosition().x(),tso.globalPosition().y(),
00145           tso.globalPosition().z()); 
00146         HepVector3D momentumAtLast(tso.globalMomentum().x(),tso.globalMomentum().y(),
00147           tso.globalMomentum().z());
00148         xTrack = new XANATrack; 
00149         xana::out(1) << "track created " << std::endl;
00150         xTrack->setCharge(it->charge()); 
00151         xTrack->setChi2OverDof(it->normalisedChiSquared());
00152         xTrack->setNumberOfHits(it->foundHits());
00153         xTrack->setNumberOfLostHits(it->lostHits());
00154         xTrack->setImpactParameter(it->impactParameter3D().value());
00155         xTrack->setLongImpactParameter(it->zImpactParameter().value());
00156         xTrack->setTransImpactParameter(it->transverseImpactParameter().value());
00157         xTrack->setMomentumAtVertex(momentumAtVertex);
00158         xTrack->setPositionAtFirstPoint(firstHit);
00159         xTrack->setMomentumAtFirstPoint(momentumAtFirst);
00160         xTrack->setPositionAtLastPoint(lastHit);
00161         xTrack->setMomentumAtLastPoint(momentumAtLast);
00162         xTrack->setAlgoName(trackReconstructorName_.value());
00163         xana::out(1) << "adding track " << std::endl;
00164         xVertex->addTrack(xTrack);
00165       } 
00166     }
00167      
00168     // read XANAVertices 
00169     vector<XANAVertex>::iterator iv;
00170     for (iv=xVertices.begin(); iv!=xVertices.end(); iv++)  
00171      {
00172       xana::out(1)<<"[OVAL] new vertex with position "<<iv->getPosition()<<endl ;
00173      }
00174    }
00175       
00176 } ;
00177  
00178 static PKBuilder<VertexObserver> VertexObserver("VertexObserver") ;
00179 
00180 

Generated on Tue May 10 10:01:25 2005 for XANADOO by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002