Skip to content

Commit

Permalink
Merge pull request #9322 from VinInn/OriAlgoFor74X
Browse files Browse the repository at this point in the history
back port of #9073 for 74x
  • Loading branch information
cmsbuild committed Jun 10, 2015
2 parents 7fc0e49 + 9fed5b3 commit bd02cbf
Show file tree
Hide file tree
Showing 18 changed files with 368 additions and 229 deletions.
3 changes: 2 additions & 1 deletion DataFormats/GsfTrackReco/src/classes_def.xml
Expand Up @@ -24,7 +24,8 @@
<class name="edm::Ref<std::vector<reco::GsfTrackExtra>,reco::GsfTrackExtra,edm::refhelper::FindUsingAdvance<std::vector<reco::GsfTrackExtra>,reco::GsfTrackExtra> >"/>
<class name="edm::RefVector<std::vector<reco::GsfTrackExtra>,reco::GsfTrackExtra,edm::refhelper::FindUsingAdvance<std::vector<reco::GsfTrackExtra>,reco::GsfTrackExtra> >"/>

<class name="reco::GsfTrack" ClassVersion="14">
<class name="reco::GsfTrack" ClassVersion="15">
<version ClassVersion="15" checksum="2494468278"/>
<version ClassVersion="14" checksum="3085391575"/>
<version ClassVersion="13" checksum="1287963871"/>
<version ClassVersion="12" checksum="1456169080"/>
Expand Down
207 changes: 59 additions & 148 deletions DataFormats/TrackReco/interface/TrackBase.h
Expand Up @@ -48,13 +48,14 @@
*
*/

#include "DataFormats/TrackReco/interface/HitPattern.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include "DataFormats/Math/interface/Vector.h"
#include "DataFormats/Math/interface/Error.h"
#include "DataFormats/Math/interface/Vector3D.h"
#include "DataFormats/Math/interface/Point3D.h"
#include "DataFormats/Math/interface/Error.h"
#include "DataFormats/TrackReco/interface/HitPattern.h"
#include "DataFormats/BeamSpot/interface/BeamSpot.h"
#include <bitset>

namespace reco
{
Expand Down Expand Up @@ -93,6 +94,7 @@ class TrackBase
/// index type
typedef unsigned int index;


/// track algorithm
enum TrackAlgorithm {
undefAlgorithm = 0, ctf = 1, rs = 2, cosmics = 3,
Expand Down Expand Up @@ -127,6 +129,10 @@ class TrackBase
algoSize = 37
};

/// algo mask
typedef std::bitset<algoSize> AlgoMask;


static const std::string algoNames[];

/// track quality
Expand All @@ -135,11 +141,12 @@ class TrackBase
loose = 0,
tight = 1,
highPurity = 2,
confirmed = 3,
goodIterative = 4,
confirmed = 3, // means found by more than one iteration
goodIterative = 4, // meaningless
looseSetWithPV = 5,
highPuritySetWithPV = 6,
qualitySize = 7
discarded = 7, // because a better track found. kept in the collection for reference....
qualitySize = 8
};

static const std::string qualityNames[];
Expand Down Expand Up @@ -319,9 +326,22 @@ class TrackBase
void resetHitPattern();

///Track algorithm
void setAlgorithm(const TrackAlgorithm a, bool set = true);
void setAlgorithm(const TrackAlgorithm a);

void setOriginalAlgorithm(const TrackAlgorithm a);

void setAlgoMask(AlgoMask a) { algoMask_ = a;}

AlgoMask algoMask() const { return algoMask_;}
#if ( !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__) ) || defined(__ROOTCLING__)
unsigned long long algoMaskUL() const { return algoMask().to_ullong();}
#endif
bool isAlgoInMask(TrackAlgorithm a) const {return algoMask()[a];}


TrackAlgorithm algo() const ;
TrackAlgorithm originalAlgo() const ;


std::string algoName() const;

Expand All @@ -332,7 +352,7 @@ class TrackBase
///Track quality
bool quality(const TrackQuality) const;

void setQuality(const TrackQuality, bool set = true);
void setQuality(const TrackQuality);

static std::string qualityName(TrackQuality);

Expand Down Expand Up @@ -364,6 +384,9 @@ class TrackBase
/// momentum vector at innermost point
Vector momentum_;

/// algo mask, bit set for the algo where it was reconstructed + each algo a track was found overlapping by the listmerger
std::bitset<algoSize> algoMask_;

/// number of degrees of freedom
float ndof_;

Expand All @@ -373,6 +396,10 @@ class TrackBase
/// track algorithm
uint8_t algorithm_;

/// track algorithm
uint8_t originalAlgorithm_;


/// track quality
uint8_t quality_;

Expand Down Expand Up @@ -422,158 +449,36 @@ inline TrackBase::index TrackBase::covIndex(index i, index j)

inline TrackBase::TrackAlgorithm TrackBase::algo() const
{
return (TrackAlgorithm) algorithm_;
}

inline std::string TrackBase::algoName() const
{
// I'd like to do:
// return TrackBase::algoName(algorithm_);
// but I cannot define a const static function. Why???
switch (algorithm_) {
case undefAlgorithm:
return "undefAlgorithm";
break;
case ctf:
return "ctf";
break;
case rs:
return "rs";
break;
case cosmics:
return "cosmics";
break;
case beamhalo:
return "beamhalo";
break;
case initialStep:
return "initialStep";
break;
case lowPtTripletStep:
return "lowPtTripletStep";
break;
case pixelPairStep:
return "pixelPairStep";
break;
case detachedTripletStep:
return "detachedTripletStep";
break;
case mixedTripletStep:
return "mixedTripletStep";
break;
case pixelLessStep:
return "pixelLessStep";
break;
case tobTecStep:
return "tobTecStep";
break;
case jetCoreRegionalStep:
return "jetCoreRegionalStep";
break;
case conversionStep:
return "conversionStep";
break;
case muonSeededStepInOut:
return "muonSeededStepInOut";
break;
case muonSeededStepOutIn:
return "muonSeededStepOutIn";
break;
case outInEcalSeededConv:
return "outInEcalSeededConv";
break;
case inOutEcalSeededConv:
return "inOutEcalSeededConv";
break;
case nuclInter:
return "nuclInter";
break;
case standAloneMuon:
return "standAloneMuon";
break;
case globalMuon:
return "globalMuon";
break;
case cosmicStandAloneMuon:
return "cosmicStandAloneMuon";
break;
case cosmicGlobalMuon:
return "cosmicGlobalMuon";
break;
case iter1LargeD0:
return "iter1LargeD0";
break;
case iter2LargeD0:
return "iter2LargeD0";
break;
case iter3LargeD0:
return "iter3LargeD0";
break;
case iter4LargeD0:
return "iter4LargeD0";
break;
case iter5LargeD0:
return "iter5LargeD0";
break;
case bTagGhostTracks:
return "bTagGhostTracks";
break;
case gsf:
return "gsf";
break;
case hltPixel :
return "hltPixel";
break;
case hltIter0 :
return "hltIter0";
break;
case hltIter1 :
return "hltIter1";
break;
case hltIter2 :
return "hltIter2";
break;
case hltIter3 :
return "hltIter3";
break;
case hltIter4 :
return "hltIter4";
break;
case hltIterX :
return "hltIterX";
break;
default:
return "undefAlgorithm";
break;
}
return (TrackAlgorithm) (algorithm_);
}
inline TrackBase::TrackAlgorithm TrackBase::originalAlgo() const
{
return (TrackAlgorithm) (originalAlgorithm_);
}



inline std::string TrackBase::algoName() const { return TrackBase::algoName(algo()); }

inline bool TrackBase::quality(const TrackBase::TrackQuality q) const
{
switch (q) {
case undefQuality:
return (quality_ == 0);
return quality_ == 0;
case goodIterative:
return (((quality_ & (1 << TrackBase::confirmed)) >> TrackBase::confirmed) ||
((quality_ & (1 << TrackBase::highPurity)) >> TrackBase::highPurity));
return (quality_ & (1 << TrackBase::highPurity)) >> TrackBase::highPurity;
default:
return (quality_ & (1 << q)) >> q;
}
return false;
}

inline void TrackBase::setQuality(const TrackBase::TrackQuality q, bool set)
inline void TrackBase::setQuality(const TrackBase::TrackQuality q)
{
if (q == undefQuality) {
quality_ = 0;
} else {
//regular OR if setting value to true
if (set) {
quality_ |= (1 << q);
} else {
// doing "half-XOR" if unsetting value
quality_ &= (~(1 << q));
}
quality_ |= (1 << q);
}
}

Expand Down Expand Up @@ -892,15 +797,21 @@ inline double TrackBase::validFraction() const
}

//Track algorithm
inline void TrackBase::setAlgorithm(const TrackBase::TrackAlgorithm a, bool set)
inline void TrackBase::setAlgorithm(const TrackBase::TrackAlgorithm a)
{
if (set) {
algorithm_ = a;
} else {
algorithm_ = TrackBase::undefAlgorithm;
}
algorithm_ = a;
algoMask_.reset();
setOriginalAlgorithm(a);
}

inline void TrackBase::setOriginalAlgorithm(const TrackBase::TrackAlgorithm a)
{
originalAlgorithm_ = a;
algoMask_.set(a);
}



inline int TrackBase::qualityMask() const
{
return quality_;
Expand Down
1 change: 1 addition & 0 deletions DataFormats/TrackReco/interface/TrackExtra.h
Expand Up @@ -12,6 +12,7 @@
*
*/
#include <Rtypes.h>
#include "DataFormats/Common/interface/RefToBase.h"
#include "DataFormats/Math/interface/Vector3D.h"
#include "DataFormats/Math/interface/Point3D.h"
#include "DataFormats/Math/interface/Error.h"
Expand Down
4 changes: 2 additions & 2 deletions DataFormats/TrackReco/interface/TrackExtraBase.h
Expand Up @@ -51,8 +51,8 @@ class TrackExtraBase
}

/// get a ref to i-th recHit
TrackingRecHitRef recHitRef(unsigned int i) const {
return TrackingRecHitRef(m_hitCollection,m_firstHit+i);
TrackingRecHitRef recHitRef(unsigned int i) const {
return TrackingRecHitRef(m_hitCollection,m_firstHit+i);
}

/// get i-th recHit
Expand Down

0 comments on commit bd02cbf

Please sign in to comment.