Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10485 from pietverwilligen/GEMSegment_76X_v1
Gem segment 76
- Loading branch information
Showing
34 changed files
with
2,310 additions
and
464 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
#ifndef GEMRecHit_ME0Segment_h | ||
#define GEMRecHit_ME0Segment_h | ||
|
||
/** \class ME0Segment derived by the CSC segment | ||
* Describes a reconstructed track segment in the 6 layers of the ME0 system. | ||
* This is 4-dimensional since it has an origin (x,y) and a direction (x,y) | ||
* in the local coordinate system of the chamber. | ||
* | ||
* $Date: 2014/02/04 12:41:32 $ | ||
* \author Marcello Maggi | ||
*/ | ||
|
||
#include <DataFormats/TrackingRecHit/interface/RecSegment.h> | ||
#include <DataFormats/GEMRecHit/interface/ME0RecHitCollection.h> | ||
|
||
#include <iosfwd> | ||
|
||
class ME0DetId; | ||
|
||
class ME0Segment GCC11_FINAL : public RecSegment { | ||
|
||
public: | ||
|
||
/// Default constructor | ||
ME0Segment() : theChi2(0.){} | ||
|
||
/// Constructor | ||
ME0Segment(const std::vector<const ME0RecHit*>& proto_segment, LocalPoint origin, | ||
LocalVector direction, AlgebraicSymMatrix errors, double chi2); | ||
|
||
ME0Segment(const std::vector<const ME0RecHit*>& proto_segment, LocalPoint origin, | ||
LocalVector direction, AlgebraicSymMatrix errors, double chi2, double time, double timeErr); | ||
|
||
/// Destructor | ||
virtual ~ME0Segment(); | ||
|
||
//--- Base class interface | ||
ME0Segment* clone() const { return new ME0Segment(*this); } | ||
|
||
LocalPoint localPosition() const { return theOrigin; } | ||
LocalError localPositionError() const ; | ||
|
||
LocalVector localDirection() const { return theLocalDirection; } | ||
LocalError localDirectionError() const ; | ||
|
||
/// Parameters of the segment, for the track fit in the order (dx/dz, dy/dz, x, y ) | ||
AlgebraicVector parameters() const; | ||
|
||
/// Covariance matrix of parameters() | ||
AlgebraicSymMatrix parametersError() const { return theCovMatrix; } | ||
|
||
/// The projection matrix relates the trajectory state parameters to the segment parameters(). | ||
virtual AlgebraicMatrix projectionMatrix() const; | ||
|
||
virtual std::vector<const TrackingRecHit*> recHits() const; | ||
|
||
virtual std::vector<TrackingRecHit*> recHits(); | ||
|
||
double chi2() const { return theChi2; }; | ||
|
||
virtual int dimension() const { return 4; } | ||
|
||
virtual int degreesOfFreedom() const { return 2*nRecHits() - 4;} | ||
|
||
//--- Extension of the interface | ||
|
||
const std::vector<ME0RecHit>& specificRecHits() const { return theME0RecHits; } | ||
|
||
int nRecHits() const { return theME0RecHits.size(); } | ||
|
||
ME0DetId me0DetId() const { return geographicalId(); } | ||
|
||
float time() const { return theTimeValue; } | ||
float timeErr() const { return theTimeUncrt; } | ||
|
||
void print() const; | ||
|
||
private: | ||
|
||
std::vector<ME0RecHit> theME0RecHits; | ||
LocalPoint theOrigin; // in chamber frame - the GeomDet local coordinate system | ||
LocalVector theLocalDirection; // in chamber frame - the GeomDet local coordinate system | ||
AlgebraicSymMatrix theCovMatrix; // the covariance matrix | ||
double theChi2; // the Chi squared of the segment fit | ||
double theTimeValue; // the best time estimate of the segment | ||
double theTimeUncrt; // the uncertainty on the time estimation | ||
|
||
}; | ||
|
||
std::ostream& operator<<(std::ostream& os, const ME0Segment& seg); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#ifndef DataFormats_ME0SegmentCollection_H | ||
#define DataFormats_ME0SegmentCollection_H | ||
|
||
/** \class ME0SegmentCollection | ||
* | ||
* The collection of ME0Segment's. See \ref CSCSegmentCollection.h for details from which is derived. | ||
* | ||
* $Date: 2014/02/04 10:08:15 $ | ||
* \author Marcello Maggi | ||
*/ | ||
|
||
#include <DataFormats/MuonDetId/interface/ME0DetId.h> | ||
#include <DataFormats/GEMRecHit/interface/ME0Segment.h> | ||
|
||
#include <DataFormats/Common/interface/RangeMap.h> | ||
#include <DataFormats/Common/interface/ClonePolicy.h> | ||
#include <DataFormats/Common/interface/OwnVector.h> | ||
|
||
typedef edm::RangeMap <ME0DetId, edm::OwnVector<ME0Segment> > ME0SegmentCollection; | ||
|
||
#include <DataFormats/Common/interface/Ref.h> | ||
typedef edm::Ref<ME0SegmentCollection> ME0SegmentRef; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
/** \file ME0egment.cc | ||
* | ||
* $Date: 2014/02/04 12:41:33 $ | ||
* \author Marcello Maggi | ||
*/ | ||
#include "FWCore/MessageLogger/interface/MessageLogger.h" | ||
#include <DataFormats/GEMRecHit/interface/ME0Segment.h> | ||
#include <iostream> | ||
|
||
namespace { | ||
// define a Super Layer Id from the first layer of the first rechits, and put to first layer | ||
inline | ||
DetId buildDetId(ME0DetId id) { | ||
return ME0DetId(id.region(),1,id.chamber(),id.roll()); | ||
} | ||
} | ||
|
||
class ProjectionMatrixDiag { | ||
// Aider class to make the return of the projection Matrix thread-safe | ||
protected: | ||
AlgebraicMatrix theProjectionMatrix; | ||
public: | ||
ProjectionMatrixDiag() : theProjectionMatrix(4,5,0) { | ||
theProjectionMatrix[0][1] = 1; | ||
theProjectionMatrix[1][2] = 1; | ||
theProjectionMatrix[2][3] = 1; | ||
theProjectionMatrix[3][4] = 1; | ||
} | ||
const AlgebraicMatrix &getMatrix() const { | ||
return (theProjectionMatrix); | ||
} | ||
}; | ||
|
||
|
||
ME0Segment::ME0Segment(const std::vector<const ME0RecHit*>& proto_segment, LocalPoint origin, | ||
LocalVector direction, AlgebraicSymMatrix errors, double chi2) : | ||
RecSegment(buildDetId(proto_segment.front()->me0Id())), | ||
theOrigin(origin), | ||
theLocalDirection(direction), theCovMatrix(errors), theChi2(chi2){ | ||
theTimeValue = 0.0; | ||
theTimeUncrt = 0.0; | ||
for(unsigned int i=0; i<proto_segment.size(); ++i) | ||
theME0RecHits.push_back(*proto_segment[i]); | ||
} | ||
|
||
ME0Segment::ME0Segment(const std::vector<const ME0RecHit*>& proto_segment, LocalPoint origin, | ||
LocalVector direction, AlgebraicSymMatrix errors, double chi2, double time, double timeErr) : | ||
RecSegment(buildDetId(proto_segment.front()->me0Id())), | ||
theOrigin(origin), | ||
theLocalDirection(direction), theCovMatrix(errors), theChi2(chi2){ | ||
theTimeValue = time; | ||
theTimeUncrt = timeErr; | ||
|
||
for(unsigned int i=0; i<proto_segment.size(); ++i) | ||
theME0RecHits.push_back(*proto_segment[i]); | ||
} | ||
|
||
ME0Segment::~ME0Segment() {} | ||
|
||
std::vector<const TrackingRecHit*> ME0Segment::recHits() const{ | ||
std::vector<const TrackingRecHit*> pointersOfRecHits; | ||
for (std::vector<ME0RecHit>::const_iterator irh = theME0RecHits.begin(); irh!=theME0RecHits.end(); ++irh) { | ||
pointersOfRecHits.push_back(&(*irh)); | ||
} | ||
return pointersOfRecHits; | ||
} | ||
|
||
std::vector<TrackingRecHit*> ME0Segment::recHits() { | ||
|
||
std::vector<TrackingRecHit*> pointersOfRecHits; | ||
for (std::vector<ME0RecHit>::iterator irh = theME0RecHits.begin(); irh!=theME0RecHits.end(); ++irh) { | ||
pointersOfRecHits.push_back(&(*irh)); | ||
} | ||
return pointersOfRecHits; | ||
} | ||
|
||
LocalError ME0Segment::localPositionError() const { | ||
return LocalError(theCovMatrix[2][2], theCovMatrix[2][3], theCovMatrix[3][3]); | ||
} | ||
|
||
LocalError ME0Segment::localDirectionError() const { | ||
return LocalError(theCovMatrix[0][0], theCovMatrix[0][1], theCovMatrix[1][1]); | ||
} | ||
|
||
|
||
AlgebraicVector ME0Segment::parameters() const { | ||
// For consistency with DT and CSC and what we require for the TrackingRecHit interface, | ||
// the order of the parameters in the returned vector should be (dx/dz, dy/dz, x, z) | ||
|
||
AlgebraicVector result(4); | ||
|
||
if(theLocalDirection.z() != 0) | ||
{ | ||
result[0] = theLocalDirection.x()/theLocalDirection.z(); | ||
result[1] = theLocalDirection.y()/theLocalDirection.z(); | ||
} | ||
result[2] = theOrigin.x(); | ||
result[3] = theOrigin.y(); | ||
|
||
return result; | ||
} | ||
|
||
AlgebraicMatrix ME0Segment::projectionMatrix() const { | ||
static const ProjectionMatrixDiag theProjectionMatrix; | ||
return (theProjectionMatrix.getMatrix()); | ||
} | ||
|
||
// | ||
void ME0Segment::print() const { | ||
LogDebug("ME0Segment") << *this; | ||
|
||
} | ||
|
||
std::ostream& operator<<(std::ostream& os, const ME0Segment& seg) { | ||
os << "ME0Segment: local pos = " << seg.localPosition() << | ||
" posErr = (" << sqrt(seg.localPositionError().xx())<<","<<sqrt(seg.localPositionError().yy())<< | ||
"0,)\n"<< | ||
" dir = " << seg.localDirection() << | ||
" dirErr = (" << sqrt(seg.localDirectionError().xx())<<","<<sqrt(seg.localDirectionError().yy())<< | ||
"0,)\n"<< | ||
" chi2/ndf = " << ((seg.degreesOfFreedom() != 0.) ? seg.chi2()/double(seg.degreesOfFreedom()) :0 ) << | ||
" #rechits = " << seg.specificRecHits().size()<< | ||
" time = "<< seg.time() << " +/- " << seg.timeErr() << " ns "; | ||
|
||
return os; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.