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

TrackObserver Struct Reference

List of all members.

Public Methods

 TrackObserver ()
 ~TrackObserver ()
void upDate (G3EventProxy *ev)

Public Attributes

int nbTracks_
double momentumSum_
SimpleConfigurable< bool > produceReference_
SimpleConfigurable< string > trackReconstructorName_
SimpleConfigurable< bool > writeTrackHits_

Constructor & Destructor Documentation

TrackObserver::TrackObserver   [inline]
 

Definition at line 45 of file XANATracks.cpp.

References momentumSum_, nbTracks_, produceReference_, trackReconstructorName_, and writeTrackHits_.

00046    : nbTracks_(0), momentumSum_(0)
00047    { 
00048     // initialize observer
00049     Observer<G3EventProxy *>::init() ;      
00050    
00051     // steering
00052     produceReference_=SimpleConfigurable<bool>(false,"XANATracks:ProduceReference");
00053     writeTrackHits_ = SimpleConfigurable<bool>(false,"XANATracks:WriteTrackHits");
00054     trackReconstructorName_=
00055      SimpleConfigurable<string>("CombinatorialTrackFinder","XANATracks:TrackReconstructor");
00056     // initialisation of tracking algo must be done in observing G3SetUp       
00057    }

TrackObserver::~TrackObserver   [inline]
 

Definition at line 59 of file XANATracks.cpp.

References momentumSum_, nbTracks_, and xana::out.

00060    {
00061     xana::out(8)<<"[OVAL] number of Tracks : "<<nbTracks_<<endl ;
00062     xana::out(8)<<"[OVAL] mean energy : "<<momentumSum_/nbTracks_<<endl ;
00063    }


Member Function Documentation

void TrackObserver::upDate G3EventProxy *    ev [inline]
 

Definition at line 65 of file XANATracks.cpp.

References XANATrack::addHit, momentumSum_, nbTracks_, xana::out, XANATrack::setAlgoName, XANATrack::setCharge, XANATrack::setChi2OverDof, XANATrack::setImpactParameter, XANATrackHit::setIsStereo, XANATrack::setLongImpactParameter, XANATrack::setMomentumAtFirstPoint, XANATrack::setMomentumAtLastPoint, XANATrack::setMomentumAtVertex, XANATrack::setNumberOfHits, XANATrack::setNumberOfLostHits, XANATrack::setPositionAtFirstPoint, XANATrack::setPositionAtLastPoint, XANATrack::setTransImpactParameter, and trackReconstructorName_.

00066    { 
00067     
00068     if (!ev) return ;    
00069     
00070     RecCollection<TTrack> tracks( RecQuery(trackReconstructorName_.value()) );
00071     RecCollection<TTrack>::const_iterator track;
00072     
00073     // to produce reference
00074     double momentum;
00075     if (produceReference_) {
00076        for (track=tracks.begin(); track!=tracks.end(); track++) {
00077         TrajectoryStateOnSurface ts = (*track).impactPointState() ;
00078         if (ts.isValid()) {
00079           momentum = ts.globalMomentum().mag() ;
00080           nbTracks_++ ;
00081           momentumSum_ += momentum ;
00082           xana::out(8)<<"[OVAL] new Track with momentum "<<momentum<<flush ;
00083           xana::out(8)<<" and impact parameter "<<(*track).impactParameter3D().value()<<endl ;
00084          }  
00085       }
00086       return ;
00087     } 
00088     
00089     // construct XANATracks from TTracks
00090     vector<XANATrack> xTracks;
00091     XANATrack *xTrack=0;
00092     for (track=tracks.begin(); track!=tracks.end(); track++) {  
00093       TrajectoryStateOnSurface ts = (*track).impactPointState() ;
00094       if (ts.isValid()) {
00095         momentum = ts.globalMomentum().mag() ;
00096         nbTracks_++ ;
00097         momentumSum_ += momentum ;
00098       }        
00099       TrajectoryStateOnSurface tsi = (*track).innermostState() ;
00100       TrajectoryStateOnSurface tso = (*track).outermostState() ;
00101       HepVector3D momentumAtVertex((*track).momentumAtVertex().x(), 
00102        (*track).momentumAtVertex().y(),(*track).momentumAtVertex().z());
00103       HepPoint3D firstHit(tsi.globalPosition().x(),tsi.globalPosition().y(),
00104         tsi.globalPosition().z()); 
00105       HepVector3D momentumAtFirst(tsi.globalMomentum().x(),tsi.globalMomentum().y(),
00106         tsi.globalMomentum().z());
00107       HepPoint3D lastHit(tso.globalPosition().x(),tso.globalPosition().y(),
00108         tso.globalPosition().z()); 
00109       HepVector3D momentumAtLast(tso.globalMomentum().x(),tso.globalMomentum().y(),
00110         tso.globalMomentum().z());
00111       xTrack = new XANATrack;
00112       xTrack->setCharge((*track).charge()); 
00113       xTrack->setChi2OverDof((*track).normalisedChiSquared());
00114       xTrack->setNumberOfHits((*track).foundHits());
00115       xTrack->setNumberOfLostHits((*track).lostHits());
00116       xTrack->setImpactParameter((*track).impactParameter3D().value());
00117       xTrack->setLongImpactParameter((*track).zImpactParameter().value());
00118       xTrack->setTransImpactParameter((*track).transverseImpactParameter().value());
00119       xTrack->setMomentumAtVertex(momentumAtVertex);
00120       xTrack->setPositionAtFirstPoint(firstHit);
00121       xTrack->setMomentumAtFirstPoint(momentumAtFirst);
00122       xTrack->setPositionAtLastPoint(lastHit);
00123       xTrack->setMomentumAtLastPoint(momentumAtLast);
00124       xTrack->setAlgoName(trackReconstructorName_.value());
00125       
00126       // hits (if requested)
00127       XANATrackHit *thit=0;
00128       if (writeTrackHits_) {
00129 
00130          std::vector<TrajectoryMeasurement> MyTrMeas = (*track).measurements();
00131          std::vector<TrajectoryMeasurement>::const_iterator IterTrMeas;
00132 
00133          xana::out(2) << " standard track " <<std::endl; 
00134          xana::out(2) << " number of measurements " << MyTrMeas.size()<<std::endl;
00135          xana::out(2) << " number of valid hits "<< (*track).foundHits()<<std::endl;
00136 
00137          for (IterTrMeas=MyTrMeas.begin(); IterTrMeas!=MyTrMeas.end(); IterTrMeas++)
00138            {
00139             // taking the rec hit 
00140             RecHit IterRecHit = IterTrMeas->recHit();                
00141             // checking if it is valid or not  
00142             if( !(IterRecHit.isValid()) ){xana::out(2) << "non valid hit" << endl;}
00143 
00144             // taking the updated state 
00145             TrajectoryStateOnSurface IterTSN = IterTrMeas->updatedState();                
00146             // checking if it is valid or not  
00147             if( !(IterTSN.isValid()) ){xana::out(2) << "non valid updated state" << endl;}
00148 
00149 
00150             // analysis only if both are valid 
00151             if (!(IterRecHit.isValid()) && (IterTSN.isValid())){xana::out(2)<<"non valid hit but valid updated state"<< endl;}
00152             if ((IterRecHit.isValid()) && !(IterTSN.isValid())){xana::out(2)<<"non valid updated state but valid hit"<< endl;}
00153             if(  IterRecHit.isValid() && IterTSN.isValid() )
00154             {
00155               HepPoint3D hitposition( (IterRecHit).globalPosition().x(), 
00156                                       (IterRecHit).globalPosition().y(), 
00157                                       (IterRecHit).globalPosition().z());
00158 
00159               HepPoint3D updposition( (IterTSN).globalPosition().x(),
00160                                       (IterTSN).globalPosition().y(),
00161                                       (IterTSN).globalPosition().z());
00162 
00163               HepVector3D updmomentum( (IterTSN).globalMomentum().x(),
00164                                        (IterTSN).globalMomentum().y(),
00165                                        (IterTSN).globalMomentum().z());
00166 
00167               thit = new XANATrackHit( hitposition, updposition, updmomentum ); 
00168               
00169               thit->setIsStereo((IterRecHit).det().detUnits().front()->type().isStereo());
00170 
00171 //                check
00172                   xana::out(1) << "NEW STEP - standard" << endl; 
00173                   xana::out(1) << "new hit" << endl;    
00174                   xana::out(1) << (IterRecHit).globalPosition().x() << endl;     
00175                   xana::out(1) << (IterRecHit).globalPosition().y() << endl;          
00176                   xana::out(1) << (IterRecHit).globalPosition().z() << endl;          
00177                   xana::out(1) << "new updated state: position" << endl;        
00178                   xana::out(1) << (IterTSN).globalPosition().x() << endl;     
00179                   xana::out(1) << (IterTSN).globalPosition().y() << endl;     
00180                   xana::out(1) << (IterTSN).globalPosition().z() << endl;     
00181                   xana::out(1) << "new updated state: momentum" << endl;        
00182                   xana::out(1) << (IterTSN).globalMomentum().x() << endl;     
00183                   xana::out(1) << (IterTSN).globalMomentum().y() << endl;     
00184                   xana::out(1) << (IterTSN).globalMomentum().z() << endl;   
00185 
00186               xTrack->addHit(thit);           
00187               delete thit;
00188 
00189            } // valid hit and upd state
00190            } // loop on measurements
00191       } // work on hits or not
00192       xTracks.push_back(*xTrack);
00193     }
00194      
00195     // read XANATracks 
00196     vector<XANATrack>::iterator it;
00197     for (it=xTracks.begin(); it!=xTracks.end(); it++)  
00198      {
00199       xana::out(8)<<"[OVAL] new Track with momentum "<<it->getMomentumAtVertex().mag()<<flush ;
00200       xana::out(8)<<" and impact parameter "<<it->getImpactParameter()<<endl ;
00201      }
00202    }


Member Data Documentation

double TrackObserver::momentumSum_
 

Definition at line 40 of file XANATracks.cpp.

Referenced by TrackObserver, upDate, and ~TrackObserver.

int TrackObserver::nbTracks_
 

Definition at line 39 of file XANATracks.cpp.

Referenced by TrackObserver, upDate, and ~TrackObserver.

SimpleConfigurable<bool> TrackObserver::produceReference_
 

Definition at line 41 of file XANATracks.cpp.

Referenced by TrackObserver.

SimpleConfigurable<string> TrackObserver::trackReconstructorName_
 

Definition at line 42 of file XANATracks.cpp.

Referenced by TrackObserver, and upDate.

SimpleConfigurable<bool> TrackObserver::writeTrackHits_
 

Definition at line 43 of file XANATracks.cpp.

Referenced by TrackObserver.


The documentation for this struct was generated from the following file:
Generated on Tue May 10 10:01:37 2005 for XANADOO by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002