32 int type = hit->type();
35 ++m_summary.nscatters;
45 if (hit->position().perp() < 200.) {
47 }
else if (hit->position().perp() < 540.) {
49 }
else if (hit->position().perp() < 1100.) {
50 if (std::abs(hit->position().z()) < 750.)
62 bool isMdt =
id.is_mdt();
63 bool isFirst = isMdt ?
id.mdtMultilayer() == 1 : !measuresPhi;
66 if (!currentChamberSummary || currentChamberSummary->
chId != chId) {
67 m_summary.chamberHitSummary.push_back(MuonCalibTrackSummary::ChamberHitSummary(chId));
68 currentChamberSummary = &m_summary.chamberHitSummary.back();
80 }
else if (
type == 4) {
83 }
else if (
type == 5) {
87 IdHitMap::iterator hitPos =
m_hitIdMap.find(
id);
94 if ((*hit).position().y() < 0.)
116 m_summary.precisionStationLayers.insert(stationIndex);
118 currentChamberSummary->
nhits() > 3) {
119 m_summary.goodPrecisionStationLayers.insert(stationIndex);
121 }
else if (
id.is_rpc()) {
122 if (
id.rpcMeasuresPhi()) {
131 if (measuresPhi)
m_summary.phiStationLayers.insert(phiStationIndex);
132 if (currentChamberSummary->
netaHits() > 0 && currentChamberSummary->
nphiHits() > 0) {
133 m_summary.phiEtaStationLayers.insert(phiStationIndex);
135 }
else if (
id.is_tgc()) {
149 if (measuresPhi)
m_summary.phiStationLayers.insert(phiStationIndex);
150 if (currentChamberSummary->
netaHits() > 0 && currentChamberSummary->
nphiHits() > 0) {
151 m_summary.phiEtaStationLayers.insert(phiStationIndex);
153 }
else if (
id.is_csc()) {
154 if (
id.cscMeasuresPhi())
165 if (measuresPhi) {
m_summary.phiStationLayers.insert(phiStationIndex); }
166 m_summary.precisionStationLayers.insert(stationIndex);
167 if (currentChamberSummary->
netaHits() > 2 && currentChamberSummary->
nphiHits() > 2) {
168 m_summary.goodPrecisionStationLayers.insert(stationIndex);
169 m_summary.phiEtaStationLayers.insert(phiStationIndex);
185 for (; rit != rit_end; ++rit) {
186 m_intersectedLayers[rit->stationLayerId] = *rit;
189 bool isEndcap = idManip.isEndcap(stId);
191 StationIndexHitsMap::const_iterator mdtIt = mdtStHitMap.find(stIndex);
192 unsigned int nmdtHits = mdtIt != mdtStHitMap.end() ? mdtIt->second.size() : 0;
194 StationIndexHitsMap::const_iterator rpcIt = rpcStHitMap.find(stIndex);
195 unsigned int nrpcHits = rpcIt != rpcStHitMap.end() ? rpcIt->second.size() : 0;
197 StationIndexHitsMap::const_iterator tgcIt = tgcStHitMap.find(stIndex);
198 unsigned int ntgcHits = tgcIt != tgcStHitMap.end() ? tgcIt->second.size() : 0;
200 StationIndexHitsMap::const_iterator cscIt = cscStHitMap.find(stIndex);
201 unsigned int ncscHits = cscIt != cscStHitMap.end() ? cscIt->second.size() : 0;
204 unsigned int ntrig = isEndcap ? ntgcHits : nrpcHits;
205 unsigned int nprec = nmdtHits + ncscHits;
206 if (nprec + ntrig == 0) m_intersectedLayersWithoutHits.insert(stIndex);
210 m_intersectedRpcLayerWithoutHits.insert(stIndex);
214 m_intersectedTgcLayerWithoutHits.insert(stIndex);
219 std::ostringstream sout;
225 std::ostringstream sout;
227 sout <<
"Author " << std::setw(4) <<
author() << std::setprecision(4) <<
" chi2 " <<
chi2() <<
" ndof " <<
ndof() <<
" r "
228 << (int)
position().perp() <<
" z " << (int)
z0() << std::setprecision(5) <<
" phi " <<
phi() <<
" theta " <<
theta()
229 << std::setw(6) <<
" q*mom " << (int)
p() *
sign <<
" pt " << std::setw(5) << (int)
pt() <<
" association: segments "
235 std::ostringstream sout;
249 std::ostringstream sout;
254 unsigned int currentEntry = 0;
257 sout.setf(std::ios::left);
258 for (; it != it_end; ++it) {
261 bool isEndcap = idManip.
isEndcap(stId);
263 StationIndexHitsMap::const_iterator mdtIt = mdtStHitMap.find(stIndex);
264 unsigned int nmdtHits = mdtIt != mdtStHitMap.end() ? mdtIt->second.size() : 0;
266 StationIndexHitsMap::const_iterator rpcIt = rpcStHitMap.find(stIndex);
267 unsigned int nrpcHits = rpcIt != rpcStHitMap.end() ? rpcIt->second.size() : 0;
269 StationIndexHitsMap::const_iterator tgcIt = tgcStHitMap.find(stIndex);
270 unsigned int ntgcHits = tgcIt != tgcStHitMap.end() ? tgcIt->second.size() : 0;
272 StationIndexHitsMap::const_iterator cscIt = cscStHitMap.find(stIndex);
273 unsigned int ncscHits = cscIt != cscStHitMap.end() ? cscIt->second.size() : 0;
275 unsigned int ntrig = isEndcap ? ntgcHits : nrpcHits;
276 unsigned int nprec = nmdtHits + ncscHits;
279 if (nprec + ntrig != 0)
280 sout <<
" presicion hits " << std::setw(3) << nprec <<
" trigger hits " << std::setw(3) << ntrig;
282 sout << std::setw(36) <<
" no hits in layer";
283 sout <<
" intersect position " << it->second.intersectPosition;
287 if (currentEntry != nentries) sout << std::endl;
293 const IdHitsMap& chHitMap = track.hitsPerChamberMap();
298 std::set<MuonFixedId> sharedChambers;
302 IdHitsMap::const_iterator pos = chHitMap.find(rit.first);
303 if (pos != chHitMap.end()) {
305 sharedChambers.insert(rit.first);
307 std::set<MuonFixedId> foundIds, sharedEtaLayers, sharedPhiLayers, firstEtaLayers, firstPhiLayers, secondEtaLayers,
314 MuonCalibTrack_E::HitVector::const_iterator hit =
315 std::find_if(pos->second.begin(), pos->second.end(),
317 if (hit != pos->second.end()) {
323 if (!(std::abs(calib_hit->driftRadius()) > 2. && std::abs(test_hit->driftRadius()) > 2. &&
324 calib_hit->driftRadius() * test_hit->driftRadius() < 0.))
325 sharedEtaLayers.insert(
id);
328 sharedPhiLayers.insert(layerId);
330 sharedEtaLayers.insert(layerId);
333 if (!
id.is_mdt() && foundIds.count(layerId))
continue;
335 firstPhiLayers.insert(layerId);
337 firstEtaLayers.insert(layerId);
343 if (!foundIds.count(
id)) {
346 secondPhiLayers.insert(
id);
348 secondEtaLayers.insert(
id);
352 if (rit.first.is_mdt()) {
353 eta_or = &overlap.
mdt;
354 }
else if (rit.first.is_rpc()) {
357 }
else if (rit.first.is_tgc()) {
360 }
else if (rit.first.is_csc()) {
365 (*eta_or).shared += sharedEtaLayers.size();
367 (*eta_or).first += firstEtaLayers.size();
368 (*eta_or).second += secondEtaLayers.size();
371 (*phi_or).shared += sharedPhiLayers.size();
372 (*phi_or).first += firstPhiLayers.size();
373 (*phi_or).second += secondPhiLayers.size();
378 std::set<MuonFixedId> foundIds;
380 if (rit.first.is_mdt()) {
384 if (foundIds.count(
id))
continue;
386 bool measuresPhi = manip.
measuresPhi(it1->identify());
388 if (rit.first.is_rpc()) {
393 }
else if (rit.first.is_tgc()) {
398 }
else if (rit.first.is_csc()) {
410 for (
const auto& rit : chHitMap) {
412 if (sharedChambers.count(rit.first))
continue;
413 std::set<MuonFixedId> foundIds;
415 if (rit.first.is_mdt()) {
419 if (foundIds.count(
id))
continue;
421 bool measuresPhi = manip.
measuresPhi(it1->identify());
422 if (rit.first.is_rpc()) {
427 }
else if (rit.first.is_tgc()) {
432 }
else if (rit.first.is_csc()) {
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
Scalar theta() const
theta method
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
A segment plus everything one can dream of knowing about it.
int pdgCode() const
returns trackparameter d0 at IP
std::vector< std::shared_ptr< MuonCalibExtendedTrack > > m_associatedTracks
list of tracks associated with this track
std::string dumpIntersects() const
dump track intersects to string
StationIndexHitsMap m_mdtHitsPerStationIndex
hit information per station layer index
std::string dumpPars() const
dump track parameters to string
IdHitMap m_hitIdMap
hit information per station
virtual ~MuonCalibExtendedTrack()
MuonCalibTrackSummary m_summary
track summary
std::string dumpSummary() const
dump track summary to string
bool isIDConfirmed() const
get associated track for the give author, returns zero if not found
IdHitsMap m_hitsPerChamber
hit information per station
const StationIndexHitsMap & tgcStationIndexHitsMap() const
access to hits per station layer index (tgc)
const StationIndexHitsMap & cscStationIndexHitsMap() const
access to hits per station layer index (csc)
void addSegment(MuonCalibExtendedSegment *seg)
access to list of the tracks that are associated to this track */ const std::vector<std::shared_ptr<...
StationIntersectedLayerMap m_intersectedLayers
map with all station layers intersected by track
StationIndexSet m_intersectedTgcLayerWithoutHits
set with all tgc chamber identifiers of layers intersected by the track without hits
const StationIndexHitsMap & mdtStationIndexHitsMap() const
access to hits per station layer index (mdt)
MuonCalibExtendedTrackOverlap calculateHitOverlap(const MuonCalibExtendedTrack &track) const
calculate hit overlap between two tracks
MuonCalibExtendedTrack(const MuonCalibTrack_E &track, int pdgCode=0, int barCode=0) ATLAS_CTORDTOR_NOT_THREAD_SAFE
Constructor taking input track.
const std::vector< std::shared_ptr< MuonCalibExtendedSegment > > & associatedSegments() const
access to list of the segment that are associated to this track
StationIndexHitsMap m_tgcHitsPerStationIndex
std::vector< std::shared_ptr< MuonCalibExtendedSegment > > m_associatedSegments
list of segments associated with this track
StationIndexHitsMap m_rpcHitsPerStationIndex
const StationIndexHitsMap & rpcStationIndexHitsMap() const
access to hits per station layer index (rpc)
StationIndexSet m_intersectedRpcLayerWithoutHits
set with all rpc chamber identifiers of layers intersected by the track without hits
StationIndexHitsMap m_cscHitsPerStationIndex
std::string dump() const
dump all information to string
int barCode() const
returns barCode
StationIndexSet m_intersectedLayersWithoutHits
set with all station layers intersected by the track without hits
ResultVec intersectsWithGeometry(const Amg::Vector3D &parPos, const Amg::Vector3D &parDir, double tolerance=1e9)
ResultVec::iterator ResultIt
std::vector< Result > ResultVec
int author() const
returns the author
int ndof() const
returns the number of degrees of freedom
const Amg::Vector3D & position() const
position of perigee of track
MuonCalibTrack_E()=default
default constructor
float pt() const
returns pt
float qOverP() const
returns trackparameter q/p
float z0() const
returns trackparameter z0
float p() const
returns momentum
std::shared_ptr< const MuonCalibHit_E > CalibHitPtr
StationIndex
enum defining station layers
PhiStationIndex phiStationLayerIndex(const MuonFixedId &id) const
return phi station layer index for a give identifier
MuonFixedId chamberIdentifier(const MuonFixedId &id) const
returns chamber Identifier for the give id, same as stationIdentifier RPC: includes doubletR
StationIndex stationLayerIndex(const MuonFixedId &id) const
returns station layer index for a give identifier
PhiStationIndex
enum defining trigger phi layers
bool isEndcap(const MuonFixedId &id) const
returns whether this is a phi measurement
MuonFixedId moduleIdentifier(const MuonFixedId &id, bool includeMeasuresPhi=false) const
returns layer Identifier for the give id MDT: station name/eta/phi/ml/lay RPC: station name/eta/phi/d...
bool measuresPhi(const MuonFixedId &id) const
returns whether this is a phi measurement
std::string stationLayerIdentifier(const MuonFixedId &id) const
prints a station layer identifier for the give identifier
Implements fixed identifiers not dependent upon Athena Identifier for internal use in the calibration...
double chi2(TH1 *h0, TH1 *h1)
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
std::shared_ptr< const MuonCalibHit_E > CalibHitE_Ptr
hit information per station layer index
std::map< MuonFixedIdManipulator::StationIndex, std::vector< CalibHitE_Ptr > > StationIndexHitsMap
std::map< MuonFixedId, std::vector< CalibHitE_Ptr > > IdHitsMap
hit information per station
Projection & etaProjection()
Projection & phiProjection()