16 if( secTracks.size() != 0) {
34 track->momentum().y(),
35 track->momentum().z());
46 LogDebug(
"NuclearInteractionMaker") <<
"Vertex build from the end point of the primary track";
48 primTrack->outerPosition().y(),
49 primTrack->outerPosition().z()),
52 for(
unsigned short i=0;
i != secTracks.size();
i++) {
58 std::vector<reco::TransientTrack> transientTracks;
61 for(
unsigned short i=0;
i != secTracks.size();
i++ ) {
64 if( transientTracks.size() == 1 )
return false;
72 LogDebug(
"NuclearInteractionMaker") << exception.
what() <<
"\n";
77 LogDebug(
"NuclearInteractionMaker") << exception.
what() <<
"\n";
92 unsigned short maxHits = 0;
int indice=-1;
93 for(
unsigned short i=0;
i < secTracks.size();
i++) {
95 unsigned short nhits = secTracks[
i]->numberOfValidHits();
96 if( nhits > maxHits ) { maxHits = nhits; indice=
i; }
100 if(indice == -1)
return false;
114 for(
unsigned short i=0;
i < secTracks.size();
i++) {
126 if( status ) {
return theApproach; }
143 const double& distOfClosestApp,
145 float TRACKER_RADIUS=129;
146 double pt2 = secTrack->pt();
147 double Dpt2 = secTrack->ptError();
148 double p1 = primTrack->p();
149 double Dp1 = primTrack->qoverpError()*p1*
p1;
150 double p2 = secTrack->p();
151 double Dp2 = secTrack->qoverpError()*p2*
p2;
153 std::cout <<
"2)" << secTrack->normalizedChi2() <<
" < " <<
chi2Cut_ <<
" " << (secTrack->normalizedChi2() <
chi2Cut_) <<
"\n";
154 std::cout <<
"3)" << crossPoint.
perp() <<
" < " << TRACKER_RADIUS <<
" " << (crossPoint.
perp() < TRACKER_RADIUS) <<
"\n";
156 std::cout <<
"5)" << (p2-2*Dp2) <<
" < " << (p1+2*Dp1) <<
" " << ((p2-2*Dp2) < (p1+2*Dp1))<<
"\n";
158 secTrack->normalizedChi2() <
chi2Cut_ &&
159 crossPoint.
perp() < TRACKER_RADIUS &&
161 (p2-2*Dp2) < (p1+2*Dp1))
return true;
174 float dist =
sqrt((crp.
x()-vtx.x())*(crp.
x()-vtx.x()) +
175 (crp.
y()-vtx.y())*(crp.
y()-vtx.y()) +
176 (crp.
z()-vtx.z())*(crp.
z()-vtx.z()));
193 std::vector<reco::TrackRef> allSecondary;
197 allSecondary.push_back( secTrack );
202 std::vector<reco::TrackRef>& tC)
const {
205 LogDebug(
"NuclearInteractionMaker") <<
"cleanTrackCollection number of input tracks : " << tC.size();
206 std::map<std::vector<reco::TrackRef>::const_iterator, std::vector<const TrackingRecHit*> > rh;
209 std::vector<bool> selected(tC.size(),
false);
211 for (std::vector<reco::TrackRef>::const_iterator
track=tC.begin();
track!=tC.end();
track++){
218 rh[
track].push_back(hit);
226 for (std::vector<reco::TrackRef>::const_iterator
track=tC.begin();
track!=tC.end();
track++){
229 for (std::vector<reco::TrackRef>::const_iterator track2=tC.begin(); track2!=tC.end(); track2++){
231 if ((!selected[j])||(!selected[
i]))
continue;
234 std::vector<const TrackingRecHit*>& iHits = rh[
track];
235 for (
unsigned ih=0; ih<iHits.size(); ++ih ) {
238 std::vector<const TrackingRecHit*>& jHits = rh[track2];
239 for (
unsigned ih2=0; ih2<jHits.size(); ++ih2 ) {
248 float fi=float(noverlap)/float((*track)->recHitsSize());
249 float fj=float(noverlap)/float((*track2)->recHitsSize());
257 if ((*track)->normalizedChi2() > (*track2)->normalizedChi2()){selected[
i]=
false;}
else{selected[
j]=
false;}
264 std::vector< reco::TrackRef > newTrackColl;
266 for (std::vector<reco::TrackRef>::const_iterator
track=tC.begin();
track!=tC.end();
track++){
267 if( selected[i] ) newTrackColl.push_back( *
track );
274 std::vector<reco::TrackRef>& tC)
const {
276 for(
size_t i=0;
i< tC.size(); ++
i) {
277 totalEnergy += tC[
i]->p();
279 if( totalEnergy > primTrack->p()+0.1*primTrack->p() ) {
virtual char const * what() const
void addSecondaryTrack(const reco::TrackRef &secTrack)
trackRef_iterator tracks_end() const
last iterator over tracks
double zError() const
error on z
bool isValid() const
Tells whether the vertex is valid.
reco::TransientTrack build(const reco::Track *p) const
virtual bool sharesInput(const TrackingRecHit *other, SharedInputType what) const
math::Error< dimension >::type Error
covariance error matrix (3x3)
void build(const reco::TrackRef &primaryTrack, std::vector< reco::TrackRef > &secondaryTrack)
const Point & position() const
position
const TransientTrackBuilder * theTransientTrackBuilder
static int position[TOTALCHAMBERS][3]
virtual GlobalPoint crossingPoint() const
ClosestApproachInRPhi * closestApproach(const reco::TrackRef &primTrack, const reco::TrackRef &secTrack) const
virtual const char * what() const
virtual CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &) const
bool isCompatible(const reco::TrackRef &secTrack) const
void checkEnergy(const reco::TrackRef &primTrack, std::vector< reco::TrackRef > &tC) const
math::XYZPoint Point
point in the space
void FillVertexWithLastPrimHit(const reco::TrackRef &primTrack, const std::vector< reco::TrackRef > &secTracks)
void add(const TrackBaseRef &r, float w=1.0)
add a reference to a Track
double xError() const
error on x
virtual bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
XYZPointD XYZPoint
point in space with cartesian internal representation
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
bool FillVertexWithCrossingPoint(const reco::TrackRef &primTrack, const std::vector< reco::TrackRef > &secTracks)
FreeTrajectoryState getTrajectory(const reco::TrackRef &track) const
bool isGoodSecondaryTrack(const reco::TrackRef &primTrack, const reco::TrackRef &secTrack) const
trackRef_iterator tracks_begin() const
first iterator over tracks
const MagneticField * theMagField
virtual float distance() const
void cleanTrackCollection(const reco::TrackRef &primTrack, std::vector< reco::TrackRef > &tC) const
double yError() const
error on y
size_t tracksSize() const
number of tracks
bool FillVertexWithAdaptVtxFitter(const reco::TrackRef &primTrack, const std::vector< reco::TrackRef > &secTracks)