36#include "MFTBase/GeometryTGeo.h"
47const std::unordered_map<GID::Source, EveWorkflowHelper::PropagationRange> EveWorkflowHelper::propagationRanges = {
48 {
GID::ITS, EveWorkflowHelper::prITS},
49 {
GID::TPC, EveWorkflowHelper::prTPC},
50 {
GID::ITSTPC, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTPC.maxR, EveWorkflowHelper::prTPC.minZ, EveWorkflowHelper::prTPC.maxZ}},
51 {
GID::TPCTOF, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
52 {
GID::TPCTRD, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTRD.maxR, EveWorkflowHelper::prTRD.minZ, EveWorkflowHelper::prTRD.maxZ}},
53 {
GID::ITSTPCTRD, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTRD.maxR, EveWorkflowHelper::prTRD.minZ, EveWorkflowHelper::prTRD.maxZ}},
54 {
GID::ITSTPCTOF, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
55 {
GID::TPCTRDTOF, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
56 {
GID::ITSTPCTRDTOF, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
61 const auto phi = track.
getPhi();
62 const auto sinPhi = std::sin(phi);
63 const auto tgL = track.
getTgl();
65 const auto SlopeX = std::cos(phi) / tgL;
66 const auto SlopeY = sinPhi / tgL;
67 const auto InvP_yz = track.
getInvQPt() / std::sqrt(sinPhi * sinPhi + tgL * tgL);
69 const std::array<Double_t, 5>
params{track.
getX(), SlopeX, track.
getY(), SlopeY, InvP_yz};
70 const std::array<Double_t, 15> cov{
77 return {track.
getZ(),
params.data(), cov.data()};
87 for (std::size_t ich = 0; ich < 4; ++ich) {
96 const auto& cluster = midClusters[icl];
110 const auto& lastCluster = mchClusters[
offset + noOfClusters - 1];
112 return lastCluster.getZ();
123 LOGP(alarm,
"ATTENTION: wrong bunches diff. {} for current IR {} wrt 1st TF orbit {}", bcd,
ir.
asString(), startIR.asString());
133 return rof.getOverlap(br).isValid();
145 return rof.isOutside(t) == Bracket::Relation::Inside;
159 auto correctTrackTime = [
this](
auto& _tr,
float t0,
float terr) {
160 if constexpr (isTPCTrack<decltype(_tr)>()) {
164 }
else if constexpr (isITSTrack<decltype(_tr)>()) {
167 }
else if constexpr (isMFTTrack<decltype(_tr)>()) {
170 }
else if constexpr (!(isMCHTrack<decltype(_tr)>() || isMIDTrack<decltype(_tr)>() || isGlobalFwdTrack<decltype(_tr)>())) {
181 auto flag =
static_cast<int>(
time) + TIME_OFFSET;
192 auto fixMFTMCHMIDLabel = [
this](
GID& gid) {
195 if (trFwd.getMIDTrackID() != -1) {
200 auto creator = [&conf, maskTrk,
this, &correctTrackTime, &flagTime, &fixMFTMCHMIDLabel](
auto& trk,
GID gid,
float time,
float terr) {
201 fixMFTMCHMIDLabel(gid);
203 const auto src = gid.getSource();
210 auto bracket = correctTrackTime(trk,
time, terr);
234 bool checkTPCDCA = conf.TPCOnlyMaxDCARZ[0] > 0.f || conf.TPCOnlyMaxDCARZ[1] > 0.f;
237 const auto totalPrimaryVertices = vtxRefs.size() - 1;
239 for (std::size_t iv = 0; iv < totalPrimaryVertices; iv++) {
241 if (pv.getX() < conf.PVXYZMin[0] || pv.getX() > conf.PVXYZMax[0] ||
242 pv.getY() < conf.PVXYZMin[1] || pv.getY() > conf.PVXYZMax[1] ||
243 pv.getZ() < conf.PVXYZMin[2] || pv.getZ() > conf.PVXYZMax[2]) {
248 const auto& vtref = vtxRefs[iv];
249 const gsl::span tracksForVertex(trackIndex.data() + vtref.getFirstEntry(), vtref.getEntries());
250 for (
const auto& tvid : tracksForVertex) {
255 fixMFTMCHMIDLabel(gid);
262 if (!tpcTr.hasBothSidesClusters()) {
264 if (tpcTr.hasCSideClustersOnly()) {
267 trc.setZ(trc.getZ() + dz);
269 std::array<float, 2> dca;
270 if (!prop->propagateToDCA(pvXYZ, trc, prop->getNominalBz(), 10., o2::base::PropagatorF::MatCorrType::USEMatCorrNONE, &dca) ||
271 (conf.TPCOnlyMaxDCARZ[1] > 0. && std::abs(dca[1]) > conf.TPCOnlyMaxDCARZ[1]) ||
272 (conf.TPCOnlyMaxDCARZ[0] > 0. && std::abs(dca[0]) > conf.TPCOnlyMaxDCARZ[0])) {
289 auto filterTrigger = [&](
const auto& trig) {
306 const auto totalPrimaryVertices = vtxRefs.size() - 1;
308 for (std::size_t iv = 0; iv < totalPrimaryVertices; iv++) {
309 const auto& vtref = vtxRefs[iv];
312 for (std::size_t
i = 0;
i < allTriggersHMP.size();
i++) {
314 const auto& trig = allTriggersHMP[
i];
318 const auto triggersPHOS = gsl::span(trackIndex.data() + vtref.getFirstEntryOfSource(
GID::PHS), vtref.getEntriesOfSource(
GID::PHS));
320 for (
const auto& tvid : triggersPHOS) {
322 if (tvid.getIndex() < allTriggersPHOS.size()) {
323 const auto& trig = allTriggersPHOS[tvid.getIndex()];
324 if (filterTrigger(trig)) {
330 const auto triggersEMCAL = gsl::span(trackIndex.data() + vtref.getFirstEntryOfSource(
GID::EMC), vtref.getEntriesOfSource(
GID::EMC));
332 for (
const auto& tvid : triggersEMCAL) {
334 if (tvid.getIndex() < allTriggersEMCAL.size()) {
335 const auto& trig = allTriggersEMCAL[tvid.getIndex()];
337 if (filterTrigger(trig)) {
345 for (std::size_t
i = 0;
i < allTriggersHMP.size();
i++) {
347 const auto& trig = allTriggersHMP[
i];
351 for (std::size_t
i = 0;
i < allTriggersPHOS.size();
i++) {
353 const auto& trig = allTriggersPHOS[
i];
355 if (filterTrigger(trig)) {
360 for (std::size_t
i = 0;
i < allTriggersEMCAL.size();
i++) {
362 const auto& trig = allTriggersEMCAL[
i];
364 if (filterTrigger(trig)) {
376 for (
const auto& irFrame : irFrames) {
386 LOGF(info,
"Primary vertex %d has no tracks", primaryVertexIdx);
388 auto unflagTime = [](
unsigned int time) {
389 return static_cast<float>(
static_cast<int>(
time & ~(1 << 31)) - TIME_OFFSET);
396 std::sort(tracks.begin(), tracks.end(),
398 return mGIDTrackTime.at(a) < mGIDTrackTime.at(b);
404 if (conf.maxTracks > 0 &&
trackCount >= conf.maxTracks) {
408 for (std::size_t it = 0; it <
trackCount; it++) {
409 const auto& gid = tracks[it];
413 switch (gid.getSource()) {
422 if (!tpcTr.hasBothSidesClusters()) {
424 if (tpcTr.hasCSideClustersOnly()) {
471 LOGF(info,
"Track type %s not handled", gid.getSourceName());
478 LOGF(info,
"Primary vertex %d has no triggers", primaryVertexIdx);
482 for (std::size_t it = 0; it < triggers.size(); it++) {
483 const auto& gid = triggers[it];
485 switch (gid.getSource()) {
496 LOGF(info,
"Trigger type %s not handled", gid.getSourceName());
513 auto maxR2 = maxR * maxR;
514 float rMin = std::sqrt(trc.getX() * trc.getX() + trc.getY() * trc.getY());
519 std::vector<PNT> pnts;
520 int nSteps = std::max(2,
int((maxR - minR) / maxStep));
522 float xMin = trc.getX(), xMax = maxR * maxR - trc.getY() * trc.getY();
524 xMax = std::sqrt(xMax);
527 float dx = (xMax - xMin) / nSteps;
529 float dxmin = std::abs(xMin - tp.getX()), dxmax = std::abs(xMax - tp.getX());
532 std::swap(xMin, xMax);
535 if (!prop->propagateTo(tp, xMin,
false, 0.99, maxStep, o2::base::PropagatorF::MatCorrType::USEMatCorrNONE)) {
538 auto xyz = tp.getXYZGlo();
539 pnts.emplace_back(
PNT{xyz.X(), xyz.Y(), xyz.Z()});
540 for (
int is = 0; is < nSteps; is++) {
541 if (!prop->propagateTo(tp, tp.getX() + dx,
false, 0.99, 999., o2::base::PropagatorF::MatCorrType::USEMatCorrNONE)) {
544 xyz = tp.getXYZGlo();
545 if (xyz.Z() <
minZ) {
548 if (xyz.Z() >
maxZ) {
551 if (xyz.X() * xyz.X() + xyz.Y() * xyz.Y() > maxR2) {
554 pnts.emplace_back(
PNT{xyz.X(), xyz.Y(), xyz.Z()});
565 .charge = tr.getCharge(),
567 .startXYZ = {tr.getX(), tr.getY(), tr.getZ()},
569 .theta = tr.getTheta(),
573 const auto it = propagationRanges.find(
source);
575 const bool rangeNotFound = (it == propagationRanges.cend());
581 const auto& prange = it->second;
583 auto pnts =
getTrackPoints(tr, prange.minR, prange.maxR, maxStep, prange.minZ, prange.maxZ);
585 for (
size_t ip = 0; ip < pnts.size(); ip++) {
586 vTrack->addPolyPoint(pnts[ip][0], pnts[ip][1], pnts[ip][2] + dz);
594 if (clusITS.size() && ITSClusterROFRec.size()) {
596 auto pattIt = patterns.begin();
606 if (clusMFT.size() && MFTClusterROFRec.size()) {
608 auto pattIt = patterns.begin();
620 auto bc = trig.getBc();
621 auto orbit = trig.getOrbit();
624 for (
int j = trig.getFirstEntry();
j <= trig.getLastEntry();
j++) {
626 auto module = cluster.ch();
627 double x = cluster.x();
628 double y = cluster.y();
641 const gsl::span cellsForTrigger(
cells.data() + trig.getFirstEntry(), trig.getNumberOfObjects());
643 for (
const auto& cell : cellsForTrigger) {
644 std::array<char, 3> relativeLocalPositionInModule;
654 .energy = cell.getEnergy(),
655 .phi = (float)gPos.Phi(),
656 .eta = (float)gPos.Eta(),
668 const gsl::span cellsForTrigger(
cells.data() + trig.getFirstEntry(), trig.getNumberOfObjects());
671 for (
const auto& cell : cellsForTrigger) {
676 auto cellTime = cell.getTimeStamp();
677 auto cellEnergy = cell.getEnergy();
685 cellTime = calibCell->getTimeStamp();
686 cellEnergy = calibCell->getEnergy();
688 if (std::abs(cellTime) > conf.EMCCellTimeMax) {
692 if (cellEnergy < conf.EMCCellEnergyMin) {
696 const auto id = cell.getTower();
699 std::array<double, 3> rPos{relPosCell.X(), relPosCell.Y(), relPosCell.Z()};
700 std::array<double, 3> gPos{};
703 const auto& [sm_id, module_number, index_module_phi, index_module_eta] = this->
mEMCALGeom->
GetCellIndex(
id);
705 matrix->LocalToMaster(rPos.data(), gPos.data());
706 TVector3 vPos(gPos.data());
709 .energy = cellEnergy,
710 .phi = (
float)vPos.Phi(),
711 .eta = (float)vPos.Eta(),
756 auto gidITSTPCTRD =
match.getTrackRef();
765 auto gidTPCTRD =
match.getTrackRef();
786 const auto mchGID =
GID{
static_cast<unsigned int>(trMFTMCH.getMCHTrackID()),
GID::MCH};
804 const auto midGID =
GID{
static_cast<unsigned int>(trMFTMCHMID.getMIDTrackID()),
GID::MID};
823 auto trackParam =
mch::TrackParam(mchTrack.getZ(), mchTrack.getParameters(), mchTrack.getCovariances());
835 const std::array<float, 5> arraypar = {track.y(), track.z(), track.snp(),
836 track.tgl(), track.signed1Pt()};
848 tr.setParameters({track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()});
855 trackFwd.
setZ(track.z());
856 trackFwd.
setParameters({track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()});
863 switch (track.trackType()) {
867 endZ = midZPositions.back();
871 endZ = mchZPositions.back();
875 endZ = midZPositions.back();
879 endZ = mchZPositions.back();
890 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
893 .startXYZ = {(float)tr.
getX(), (float)tr.
getY(), (float)tr.
getZ()},
894 .phi = (float)tr.
getPhi(),
896 .eta = (float)tr.
getEta(),
899 for (
auto zPos : mftZPositions) {
901 vTrack->addPolyPoint((
float)tr.
getX(), (float)tr.
getY(), (float)tr.
getZ());
907 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
916 static constexpr auto stepDensity = 50.;
918 const auto nSteps =
static_cast<std::size_t
>(std::abs(endZ - startZ) / stepDensity);
920 const auto dZ = (endZ - startZ) / nSteps;
922 for (std::size_t
i = 0;
i < nSteps; ++
i) {
923 const auto z = startZ +
i * dZ;
937 int sector = tOFClustersArray[tofcl].getSector();
938 float x = tOFClustersArray[tofcl].getX();
939 float y = tOFClustersArray[tofcl].getY();
940 float z = tOFClustersArray[tofcl].getZ();
956 int ncl = trc.getNumberOfClusters();
957 int offset = trc.getFirstClusterEntry();
958 for (
int icl = 0; icl < ncl; icl++) {
961 float xyz[] = {glo.X(), glo.Y(), glo.Z()};
967 int ncl = trc.getNClusters();
968 int offset = trc.getFirstEntry();
969 for (
int icl = 0; icl < ncl; icl++) {
972 float xyz[] = {glo.X(), glo.Y(), glo.Z()};
984 if (trackTimeTB < -1e9) {
985 trackTimeTB = trc.getTime0();
988 for (
int iCl = trc.getNClusterReferences(); iCl--;) {
990 const auto& clTPC = trc.getCluster(mTPCTracksClusIdx, iCl, *mTPCClusterIdxStruct, sector,
row);
992 std::array<float, 3> xyz;
993 this->mTPCFastTransform->TransformIdeal(sector,
row, clTPC.getPad(), clTPC.getTime(), xyz[0], xyz[1], xyz[2], trackTimeTB);
1003 auto offset = mftTrack.getExternalClusterIndexOffset();
1005 for (
int icl = noOfClusters - 1; icl > -1; --icl) {
1007 float xyz[] = {thisCluster.getX(), thisCluster.getY(), thisCluster.getZ()};
1046 auto trackParam =
mch::TrackParam(track.getZ(), track.getParameters(), track.getCovariances());
1059 auto offset = mchTrack.getFirstClusterIdx();
1061 for (
int icl = noOfClusters - 1; icl > -1; --icl) {
1062 const auto& cluster = mchClusters[
offset + icl];
1063 float glo[] = {cluster.x, cluster.y, cluster.z};
1074 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
1077 .startXYZ = {(float)midTrack.getPositionX(), (float)midTrack.getPositionY(), (float)midTrack.getPositionZ()},
1083 for (
int ich = 0; ich < 4; ++ich) {
1084 auto icl = midTrack.getClusterMatched(ich);
1086 auto& cluster = midClusters[icl];
1087 vTrack->
addPolyPoint(cluster.xCoor, cluster.yCoor, cluster.zCoor);
1098 for (
int ich = 0; ich < 4; ++ich) {
1099 auto icl = midTrack.getClusterMatched(ich);
1101 auto& cluster = midClusters[icl];
1102 float glo[] = {cluster.xCoor, cluster.yCoor, cluster.zCoor};
1117 for (
int iLayer = 0; iLayer < 6; ++iLayer) {
1118 if (tpcTrdTrack.getTrackletIndex(iLayer) >= 0) {
1120 const auto& tracklet = trdTracklets[tpcTrdTrack.getTrackletIndex(iLayer)];
1121 const auto& spacePoint = trdCalibratedTracklets[tpcTrdTrack.getTrackletIndex(iLayer)];
1123 float x = spacePoint.getX(),
y = spacePoint.getY(),
z = spacePoint.getZ();
1125 int iChamber = tracklet.getDetector();
1127 int sector = iChamber / 30;
1142 if (conf.timeMinMax[0] >= 0.f && conf.timeMinMax[0] < conf.timeMinMax[1]) {
1144 mTimeBracket = {conf.timeMinMax[0], conf.timeMinMax[1]};
1146 if (conf.TPCEtaAbsMax > 0.f) {
Helper for geometry and GRP related CCDB requests.
Global index for barrel track: provides provenance (detectors combination), index in respective array...
Class to delimit start and end IR of certain time period.
Definition of the GeometryTGeo class.
Load pulled clusters, for a given read-out-frame, in a dedicated container.
Definition of the parameter class for the detector electronics.
Wrapper container for different reconstructed object types.
Definition of the MCH track parameters for internal use.
Reference on ITS/MFT clusters set.
Referenc on track indices contributing to the vertex, with possibility chose tracks from specific sou...
static GRPGeomHelper & instance()
GPUd() value_type estimateLTFast(o2 static GPUd() float estimateLTIncrement(const o2 PropagatorImpl * Instance(bool uninitialized=false)
static const EveConfParam & Instance()
const Mat3D & getMatrixT2G(int sensID) const
std::optional< T > getCalibratedCell(const T &inputcell) const
Calibrate single cell.
const TGeoHMatrix * GetMatrixForSuperModuleFromGeoManager(Int_t smod) const
Provides shift-rotation matrix for EMCAL from the TGeoManager.
std::tuple< int, int, int, int > GetCellIndex(Int_t absId) const
Get cell SM, module numbers from absolute ID number.
static Geometry * GetInstance()
Get geometry instance. It should have been set before.
math_utils::Point3D< double > RelPosCellInSModule(Int_t absId, Double_t distEf) const
Look to see what the relative position inside a given cell is for a recpoint.
void drawMCHClusters(GID gid)
void drawMFTTrack(GID gid, o2::track::TrackParFwd track, float trackTime)
std::unordered_map< std::size_t, std::vector< GID > > mPrimaryVertexTriggerGIDs
o2::mch::TrackParam forwardTrackToMCHTrack(const o2::track::TrackParFwd &track)
void drawITS(GID gid, float trackTime)
void drawTPCTRDTOF(GID gid, float trackTime)
void drawMCHMID(GID gid, float trackTime)
GID::Source detectorMapToGIDSource(uint8_t dm)
AODBarrelTracks::iterator AODBarrelTrack
void drawMFT(GID gid, float trackTime)
void save(const std::string &jsonPath, const std::string &ext, int numberOfFiles)
void drawTPCTOF(GID gid, float trackTime)
o2::event_visualisation::VisualisationEvent mEvent
const o2::tpc::VDriftCorrFact * mTPCVDrift
void drawTPC(GID gid, float trackTime, float dz=0.f)
void drawMID(GID gid, float trackTime)
AODMFTTracks::iterator AODMFTTrack
void drawMFTMCH(GID gid, float trackTime)
float findLastMIDClusterPosition(const o2::mid::Track &track)
std::unordered_map< GID, unsigned int > mGIDTrackTime
void drawMFTClusters(GID gid)
o2::emcal::CellRecalibrator * mEMCALCalib
float mITSROFrameLengthMUS
ITS RO frame in mus.
float findLastMCHClusterPosition(const o2::mch::TrackMCH &track)
void setTPCVDrift(const o2::tpc::VDriftCorrFact *v)
std::vector< Bracket > mItsROFBrackets
void drawPoint(const float xyz[])
void drawITSClusters(GID gid)
o2::phos::Geometry * mPHOSGeom
o2::its::GeometryTGeo * mITSGeom
static std::vector< PNT > getTrackPoints(const o2::track::TrackPar &trc, float minR, float maxR, float maxStep, float minZ=-25000, float maxZ=25000)
void drawTOFClusters(GID gid)
void drawTRDClusters(const o2::trd::TrackTRD &trc)
void draw(std::size_t primaryVertexIdx, bool sortTracks)
float mMFTROFrameLengthMUS
MFT RO frame in mus.
const o2::globaltracking::RecoContainer * mRecoCont
void drawITSTPCTRD(GID gid, float trackTime, GID::Source source=GID::ITSTPCTRD)
void drawMCH(GID gid, float trackTime)
void drawMIDClusters(GID gid)
void selectTracks(const CalibObjectsConst *calib, GID::mask_t maskCl, GID::mask_t maskTrk, GID::mask_t maskMatch)
std::vector< o2::BaseCluster< float > > mITSClustersArray
o2::mft::GeometryTGeo * mMFTGeom
o2::emcal::Geometry * mEMCALGeom
double bcDiffToTFTimeMUS(const o2::InteractionRecord &ir)
void prepareITSClusters(const o2::itsmft::TopologyDictionary *dict)
void drawMFTMCHMID(GID gid, float trackTime)
void drawAODFwd(AODForwardTrack const &track, float trackTime)
void addTrackToEvent(const o2::track::TrackPar &tr, GID gid, float trackTime, float dz, GID::Source source=GID::NSources, float maxStep=4.f)
void drawForwardTrack(GID gid, mch::TrackParam track, float startZ, float endZ, float trackTime)
void prepareMFTClusters(const o2::itsmft::TopologyDictionary *dict)
void drawAODBarrel(AODBarrelTrack const &track, float trackTime)
void drawITSTPCTOF(GID gid, float trackTime, GID::Source source=GID::ITSTPCTOF)
std::vector< o2::BaseCluster< float > > mMFTClustersArray
void drawTPCClusters(GID gid, float trackTimeTB=-2.e9)
std::unordered_map< std::size_t, std::vector< GID > > mPrimaryVertexTrackGIDs
static int BCDiffErrCount
void drawTPCTRD(GID gid, float trackTime, GID::Source source=GID::TPCTRD)
AODForwardTracks::iterator AODForwardTrack
bool isInsideTimeBracket(const Bracket &br)
bool isInsideITSROF(const Bracket &br)
void drawAODMFT(AODMFTTrack const &track, float trackTime)
const o2::vertexing::PVertexerParams * mPVParams
void drawGlobalPoint(const TVector3 &xyx, GID gid, float time)
void drawITSTPC(GID gid, float trackTime, GID::Source source=GID::ITSTPC)
void drawITSTPCTRDTOF(GID gid, float trackTime)
std::unordered_set< GID > mTotalAcceptedDataTypes
std::unordered_map< GID, std::size_t > mTotalDataTypes
std::string newFileName() const
static VisualisationEventSerializer * getInstance(std::string ext)
static o2::dataformats::GlobalTrackID deserialize(unsigned seralizedValue)
virtual void toFile(const VisualisationEvent &event, std::string fileName)=0
VisualisationCluster & addCluster(const float *xyz)
VisualisationTrack * addTrack(VisualisationTrack::VisualisationTrackVO vo)
VisualisationCalo * addCalo(VisualisationCalo::VisualisationCaloVO vo)
void setEveVersion(int eveVersion)
void addPolyPoint(float x, float y, float z)
void lors2Mars(Int_t c, double x, double y, double *m, Int_t pl=kPc) const
static Param * instance()
static GeometryTGeo * Instance()
void fillMatrixCache(int mask) override
Bracket getOverlap(const Bracket< T > &other) const
Relation isOutside(const Bracket< T > &t) const
MCH track external format.
int getFirstClusterIdx() const
get the index of the first cluster attached to the track
int getNClusters() const
get the number of clusters attached to the track
track parameters for internal use
Double_t getNonBendingCoor() const
return non bending coordinate (cm)
Double_t getZ() const
return Z coordinate (cm)
Double_t getBendingCoor() const
return bending coordinate (cm)
void fillMatrixCache(Int_t mask) override
static GeometryTGeo * Instance()
const int getNumberOfPoints() const
This class defines the MID track.
int getClusterMatched(int chamber) const
float getPositionZ() const
Gets the track z position.
void local2Global(char module, float x, float z, TVector3 &globaPos) const
static void absIdToRelPosInModule(short absId, float &x, float &z)
static bool absToRelNumbering(short absId, char *relid)
static Geometry * GetInstance()
void propagateParamToZlinear(double zEnd)
Double_t getTheta() const
void setParameters(const SMatrix5 ¶meters)
set track parameters
Double_t getZ() const
return Z coordinate (cm)
Double_t getCharge() const
return the charge (assumed forward motion)
void setZ(Double_t z)
set Z coordinate (cm)
Double_t getInvQPt() const
bool match(const std::vector< std::string > &queries, const char *pattern)
GLfloat GLfloat GLfloat alpha
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLchar * source
GLenum const GLfloat * params
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t0
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat maxZ
GLdouble GLdouble GLdouble z
@ GlobalMuonTrackOtherMatch
constexpr double LHCBunchSpacingMUS
constexpr int LHCMaxBunches
constexpr double LHCBunchSpacingNS
@ HIGH_GAIN
High gain channel.
@ LOW_GAIN
Low gain channel.
std::array< float, 3 > PNT
void convertCompactClusters(gsl::span< const itsmft::CompClusterExt > clusters, gsl::span< const unsigned char >::iterator &pattIt, std::vector< o2::BaseCluster< float > > &output, const itsmft::TopologyDictionary *dict)
convert compact clusters to 3D spacepoints
std::tuple< float, float > rotateZ(float xL, float yL, float snAlp, float csAlp)
float sector2Angle(int sect)
void convertCompactClusters(gsl::span< const itsmft::CompClusterExt > clusters, gsl::span< const unsigned char >::iterator &pattIt, std::vector< o2::BaseCluster< float > > &output, const itsmft::TopologyDictionary *dict)
convert compact clusters to 3D spacepoints into std::vector<o2::BaseCluster<float>>
constexpr unsigned char SECTORSPERSIDE
std::string asString() const
int64_t differenceInBC(const InteractionRecord &other) const
const o2::dataformats::MatchInfoTOF & getTPCTOFMatch(GTrackID id) const
auto getMCHMIDMatches() const
bool isTrackSourceLoaded(int src) const
auto getMFTClustersPatterns() const
o2::InteractionRecord startIR
const o2::tpc::TrackTPC & getTPCTrack(GTrackID id) const
gsl::span< const o2::trd::CalibratedTracklet > getTRDCalibratedTracklets() const
const o2::mch::TrackMCH & getMCHTrack(GTrackID gid) const
auto getTPCTRDTriggers() const
auto getITSTracksClusterRefs() const
auto getIRFramesITS() const
auto getTPCTRDTOFMatches() const
auto getTPCTRDTrack(GTrackID id) const
auto getPrimaryVertexMatchedTracks() const
const o2::tpc::ClusterNativeAccess & getTPCClusters() const
auto getMCHTrackClusters() const
void createTracksVariadic(T creator, GTrackID::mask_t srcSel=GTrackID::getSourcesMask("all")) const
auto getTPCTracksClusterRefs() const
auto getPrimaryVertexMatchedTrackRefs() const
const o2::itsmft::TrkClusRef & getITSABRef(GTrackID gid) const
auto getITSClustersPatterns() const
const o2::dataformats::TrackTPCITS & getITSTPCTOFTrack(GTrackID id) const
const o2::dataformats::TrackTPCTOF & getTPCTOFTrack(GTrackID gid) const
const o2::mid::Track & getMIDTrack(GTrackID gid) const
auto getITSClustersROFRecords() const
auto getTOFClusters() const
auto getMIDTrackClusters() const
const o2::dataformats::TrackTPCITS & getTPCITSTrack(GTrackID gid) const
auto getHMPClusterTriggers() const
auto getMFTTracksClusterRefs() const
const o2::mft::TrackMFT & getMFTTrack(GTrackID gid) const
auto getTPCTRDTracks() const
const o2::dataformats::PrimaryVertex & getPrimaryVertex(int i) const
const o2::its::TrackITS & getITSTrack(GTrackID gid) const
auto getMFTClustersROFRecords() const
auto getEMCALCells() const
auto getITSTPCTRDTriggers() const
auto getITSTPCTRDTracks() const
auto getITSTPCTRDTrack(GTrackID id) const
auto getHMPClusters() const
auto getITSTPCTRDTOFMatches() const
auto getEMCALTriggers() const
auto getITSABClusterRefs() const
auto getITSClusters() const
auto getPHOSCells() const
gsl::span< const o2::trd::Tracklet64 > getTRDTracklets() const
auto getPHOSTriggers() const
const o2::dataformats::MatchInfoTOF & getTOFMatch(GTrackID id) const
const o2::dataformats::GlobalFwdTrack & getGlobalFwdTrack(GTrackID gid) const
auto getMFTClusters() const
float getTimeOffset() const
float nSigmaTimeTrack
define track time bracket as +- this number of sigmas of its time resolution
float timeMarginTrackTime
additive marginal error in \mus to track time bracket
o2::InteractionRecord ir(0, 0)
std::vector< Cluster > clusters
std::vector< Cell > cells