85 vector<DTRecHit1DPair> hitsFromPhi1(rangeHitsFromPhi1.first,rangeHitsFromPhi1.second);
86 vector<DTRecHit1DPair> hitsFromPhi2(rangeHitsFromPhi2.first,rangeHitsFromPhi2.second);
88 cout<<
"Number of DTRecHit1DPair in the SL 1 (Phi 1): " << hitsFromPhi1.size()<<endl
89 <<
"Number of DTRecHit1DPair in the SL 3 (Phi 2): " << hitsFromPhi2.size()<<endl;
98 vector<DTRecHit1DPair> hitsFromTheta(rangeHitsFromTheta.first,rangeHitsFromTheta.second);
100 cout<<
"Number of DTRecHit1DPair in the SL 2 (Theta): " << hitsFromTheta.size()<<endl;
116 vector<DTSLRecSegment2D> segments2DTheta(rangeTheta.first,rangeTheta.second);
119 cout <<
"Number of 2D-segments in the second SL (Theta): " << segments2DTheta.size() << endl;
133 cout <<
"Reconstructing of the Phi segments" << endl;
136 vector<std::shared_ptr<DTHitPairForFit>> pairPhiOwned;
139 if (
debug)
cout <<
"There are " << resultPhi.size() <<
" Phi cand" << endl;
147 if(
debug)
cout<<
"Reconstructing of the Theta segments"<<endl;
149 vector<DTSLRecSegment2D> segments2DTheta(thetaSegs.
begin(),thetaSegs.
end());
161 if (
debug)
cout <<
"No Theta SL" << endl;
165 if(
debug)
cout<<
"Building of the concrete DTRecSegment4D"<<endl;
166 if (!resultPhi.empty()) {
167 for (vector<DTSegmentCand*>::const_iterator
phi=resultPhi.begin();
168 phi!=resultPhi.end(); ++
phi) {
170 std::unique_ptr<DTChamberRecSegment2D> superPhi(**
phi);
173 if(
debug)
cout <<
"superPhi: " << *superPhi << endl;
182 if(
debug)
cout <<
"Theta: " << *zed << endl;
201 if (
debug)
cout <<
"Created a 4D seg " << *newSeg << endl;
205 if (
debug)
cout <<
" seg updated " << *newSeg << endl;
218 if (
debug)
cout <<
"Created a 4D segment using only the 2D Phi segment " << *newSeg << endl;
232 if(
debug)
cout <<
"Theta: " << *zed << endl;
242 if (
debug)
cout <<
"Created a 4D segment using only the 2D Theta segment " <<
253 for (vector<DTSegmentCand*>::iterator
phi=resultPhi.begin();
254 phi!=resultPhi.end(); ++
phi)
delete *
phi;
271 if(
debug)
cout<<
"DTCombinatorialPatternReco4D::buildPhiSuperSegmentsCandidates: " 272 <<
"No Hits in the two Phi SL"<<endl;
273 return vector<DTSegmentCand*>();
282 copy(pairPhi2.begin(),pairPhi2.end(),back_inserter(pairPhi1));
284 pairPhiOwned.swap(pairPhi1);
297 int nHits=hits.size();
298 DTRecHit1D middle=hits[
static_cast<int>(nHits/2.)];
306 auto hit = std::make_unique<DTRecHit1D>(middle.
wireId(),
312 std::vector<DTRecHit1D> newHits(1,*hit);
320 auto newZed = std::make_unique<DTSLRecSegment2D>(zedSeg->
superLayerId(),
DTCombinatorialPatternReco * the2DAlgo
LocalError localPositionError() const override
local position error in SL frame
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return the superlayer corresponding to the given id.
LocalPoint localPosition() const override
Local position in Chamber frame.
std::pair< const_iterator, const_iterator > range
iterator range
bool existsAs(std::string const ¶meterName, bool trackiness=true) const
checks if a parameter exists as a given type
void setDTRecSegment2DContainer(edm::Handle< DTRecSegment2DCollection > all2DSegments) override
std::vector< std::shared_ptr< DTHitPairForFit > > initHits(const DTSuperLayer *sl, const std::vector< DTRecHit1DPair > &hits)
const DTChamber * chamber(const DTChamberId &id) const
Return a DTChamber given its id.
void calculateT0corr(DTRecSegment2D *seg) const
LocalVector localDirection() const override
Local direction in Chamber frame.
edm::OwnVector< DTSLRecSegment2D > reconstruct(const DTSuperLayer *sl, const std::vector< DTRecHit1DPair > &hits) override
this function is called in the producer
const DTChamberRecSegment2D * phiSegment() const
The superPhi segment: 0 if no phi projection available.
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
static std::pair< DTLayerId, DTSuperLayerIdComparator > layersBySuperLayer(DTSuperLayerId slId)
Access by SL objects written into a RangeMap by layer.
def setup(process, global_tag, zero_tesla=False)
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
edm::OwnVector< DTRecSegment4D > reconstruct() override
Operations.
std::vector< DTRecHit1DPair > theHitsFromPhi2
void setChamber(const DTChamberId &chId) override
DTSegmentUpdator * theUpdator
DTRecSegment4D * segmentSpecialZed(const DTRecSegment4D *seg)
Build a 4d segment with a zed component made by just one hits.
Geom::Theta< T > theta() const
const DTChamber * theChamber
void setES(const edm::EventSetup &setup)
set the setup
void setDTRecHit1DContainer(edm::Handle< DTRecHitCollection > all1DHits) override
DTChamberId id() const
Return the DTChamberId of this chamber.
Cos< T >::type cos(const T &t)
float digiTime() const
Return the time (ns) of the digi used to build the rechit.
double chi2() const override
the chi2 of the fit
DTCombinatorialPatternReco4D(const edm::ParameterSet &pset)
Constructor.
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
DTSuperLayerId superLayerId() const
The id of the superlayer on which reside the segment.
AlgebraicSymMatrix covMatrix() const
the Covariance Matrix
const DTSLRecSegment2D * zSegment() const
The Z segment: 0 if not zed projection available.
LocalPoint localPosition() const override
local position in SL frame
std::vector< DTSegmentCand * > buildSegments(const DTSuperLayer *sl, const std::vector< std::shared_ptr< DTHitPairForFit >> &hits)
std::vector< DTRecHit1DPair > theHitsFromPhi1
std::vector< DTSLRecSegment2D > theSegments2DTheta
~DTCombinatorialPatternReco4D() override
Destructor.
void setES(const edm::EventSetup &setup) override
std::vector< DTRecHit1DPair > theHitsFromTheta
edm::ESHandle< DTGeometry > theDTGeometry
std::vector< DTSegmentCand * > buildPhiSuperSegmentsCandidates(std::vector< std::shared_ptr< DTHitPairForFit >> &pairPhiOwned)
LocalVector localDirection() const override
the local direction in SL frame
CLHEP::HepSymMatrix AlgebraicSymMatrix
void update(DTRecSegment4D *seg, const bool calcT0, bool allow3par) const
recompute hits position and refit the segment4D
void setES(const edm::EventSetup &setup) override
DTEnums::DTCellSide lrSide() const
The side of the cell.
const DTSuperLayer * superLayer(const DTSuperLayerId &id) const
Return a DTSuperLayer given its id.
DTWireId wireId() const
Return the wireId.