Public Methods | |
TrackObserver () | |
~TrackObserver () | |
void | upDate (G3EventProxy *ev) |
Public Attributes | |
int | nbTracks_ |
double | momentumSum_ |
SimpleConfigurable< bool > | produceReference_ |
SimpleConfigurable< string > | trackReconstructorName_ |
SimpleConfigurable< bool > | writeTrackHits_ |
|
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 } |
|
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 } |
|
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 } |
|
Definition at line 40 of file XANATracks.cpp. Referenced by TrackObserver, upDate, and ~TrackObserver. |
|
Definition at line 39 of file XANATracks.cpp. Referenced by TrackObserver, upDate, and ~TrackObserver. |
|
Definition at line 41 of file XANATracks.cpp. Referenced by TrackObserver. |
|
Definition at line 42 of file XANATracks.cpp. Referenced by TrackObserver, and upDate. |
|
Definition at line 43 of file XANATracks.cpp. Referenced by TrackObserver. |