37#include "MFTBase/GeometryTGeo.h"
48const std::unordered_map<GID::Source, EveWorkflowHelper::PropagationRange> EveWorkflowHelper::propagationRanges = {
49 {
GID::ITS, EveWorkflowHelper::prITS},
50 {
GID::TPC, EveWorkflowHelper::prTPC},
51 {
GID::ITSTPC, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTPC.maxR, EveWorkflowHelper::prTPC.minZ, EveWorkflowHelper::prTPC.maxZ}},
52 {
GID::TPCTOF, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
53 {
GID::TPCTRD, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTRD.maxR, EveWorkflowHelper::prTRD.minZ, EveWorkflowHelper::prTRD.maxZ}},
54 {
GID::ITSTPCTRD, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTRD.maxR, EveWorkflowHelper::prTRD.minZ, EveWorkflowHelper::prTRD.maxZ}},
55 {
GID::ITSTPCTOF, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
56 {
GID::TPCTRDTOF, {EveWorkflowHelper::prTPC.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
57 {
GID::ITSTPCTRDTOF, {EveWorkflowHelper::prITS.minR, EveWorkflowHelper::prTOF.maxR, EveWorkflowHelper::prTOF.minZ, EveWorkflowHelper::prTOF.maxZ}},
62 const auto phi = track.
getPhi();
63 const auto sinPhi = std::sin(phi);
64 const auto tgL = track.
getTgl();
66 const auto SlopeX = std::cos(phi) / tgL;
67 const auto SlopeY = sinPhi / tgL;
68 const auto InvP_yz = track.
getInvQPt() / std::sqrt(sinPhi * sinPhi + tgL * tgL);
70 const std::array<Double_t, 5>
params{track.
getX(), SlopeX, track.
getY(), SlopeY, InvP_yz};
71 const std::array<Double_t, 15> cov{
78 return {track.
getZ(),
params.data(), cov.data()};
88 for (std::size_t ich = 0; ich < 4; ++ich) {
97 const auto& cluster = midClusters[icl];
111 const auto& lastCluster = mchClusters[
offset + noOfClusters - 1];
113 return lastCluster.getZ();
124 LOGP(alarm,
"ATTENTION: wrong bunches diff. {} for current IR {} wrt 1st TF orbit {}", bcd,
ir.
asString(),
135 return rof.getOverlap(br).isValid();
147 return rof.isOutside(t) == Bracket::Relation::Inside;
161 auto correctTrackTime = [
this](
auto& _tr,
float t0,
float terr) {
162 if constexpr (isTPCTrack<decltype(_tr)>()) {
166 }
else if constexpr (isITSTrack<decltype(_tr)>()) {
169 }
else if constexpr (isMFTTrack<decltype(_tr)>()) {
173 }
else if constexpr (!(isMCHTrack<decltype(_tr)>() || isMIDTrack<decltype(_tr)>() ||
174 isGlobalFwdTrack<decltype(_tr)>())) {
185 auto flag =
static_cast<int>(
time) + TIME_OFFSET;
196 auto fixMFTMCHMIDLabel = [
this](
GID& gid) {
199 if (trFwd.getMIDTrackID() != -1) {
204 auto creator = [&conf, maskTrk,
this, &correctTrackTime, &flagTime, &fixMFTMCHMIDLabel](
auto& trk,
GID gid,
205 float time,
float terr) {
206 fixMFTMCHMIDLabel(gid);
208 const auto src = gid.getSource();
215 auto bracket = correctTrackTime(trk,
time, terr);
239 bool checkTPCDCA = conf.TPCOnlyMaxDCARZ[0] > 0.f || conf.TPCOnlyMaxDCARZ[1] > 0.f;
242 const auto totalPrimaryVertices =
245 for (std::size_t iv = 0; iv < totalPrimaryVertices; iv++) {
247 if (pv.getX() < conf.PVXYZMin[0] || pv.getX() > conf.PVXYZMax[0] ||
248 pv.getY() < conf.PVXYZMin[1] || pv.getY() > conf.PVXYZMax[1] ||
249 pv.getZ() < conf.PVXYZMin[2] || pv.getZ() > conf.PVXYZMax[2]) {
254 const auto& vtref = vtxRefs[iv];
255 const gsl::span tracksForVertex(trackIndex.data() + vtref.getFirstEntry(), vtref.getEntries());
256 for (
const auto& tvid : tracksForVertex) {
261 fixMFTMCHMIDLabel(gid);
268 if (!tpcTr.hasBothSidesClusters()) {
273 if (tpcTr.hasCSideClustersOnly()) {
276 trc.setZ(trc.getZ() + dz);
278 std::array<float, 2> dca;
279 if (!prop->propagateToDCA(pvXYZ, trc, prop->getNominalBz(), 10.,
280 o2::base::PropagatorF::MatCorrType::USEMatCorrNONE, &dca) ||
281 (conf.TPCOnlyMaxDCARZ[1] > 0. && std::abs(dca[1]) > conf.TPCOnlyMaxDCARZ[1]) ||
282 (conf.TPCOnlyMaxDCARZ[0] > 0. && std::abs(dca[0]) > conf.TPCOnlyMaxDCARZ[0])) {
299 auto filterTrigger = [&](
const auto& trig) {
316 const auto totalPrimaryVertices =
319 for (std::size_t iv = 0; iv < totalPrimaryVertices; iv++) {
320 const auto& vtref = vtxRefs[iv];
323 for (std::size_t
i = 0;
i < allTriggersHMP.size();
i++) {
325 const auto& trig = allTriggersHMP[
i];
329 const auto triggersPHOS = gsl::span(trackIndex.data() + vtref.getFirstEntryOfSource(
GID::PHS),
330 vtref.getEntriesOfSource(
GID::PHS));
332 for (
const auto& tvid : triggersPHOS) {
334 if (tvid.getIndex() < allTriggersPHOS.size()) {
335 const auto& trig = allTriggersPHOS[tvid.getIndex()];
336 if (filterTrigger(trig)) {
342 const auto triggersEMCAL = gsl::span(trackIndex.data() + vtref.getFirstEntryOfSource(
GID::EMC),
343 vtref.getEntriesOfSource(
GID::EMC));
345 for (
const auto& tvid : triggersEMCAL) {
347 if (tvid.getIndex() < allTriggersEMCAL.size()) {
348 const auto& trig = allTriggersEMCAL[tvid.getIndex()];
350 if (filterTrigger(trig)) {
358 for (std::size_t
i = 0;
i < allTriggersHMP.size();
i++) {
360 const auto& trig = allTriggersHMP[
i];
364 for (std::size_t
i = 0;
i < allTriggersPHOS.size();
i++) {
366 const auto& trig = allTriggersPHOS[
i];
368 if (filterTrigger(trig)) {
373 for (std::size_t
i = 0;
i < allTriggersEMCAL.size();
i++) {
375 const auto& trig = allTriggersEMCAL[
i];
377 if (filterTrigger(trig)) {
389 for (
const auto& irFrame : irFrames) {
399 LOGF(info,
"Primary vertex %d has no tracks", primaryVertexIdx);
401 auto unflagTime = [](
unsigned int time) {
402 return static_cast<float>(
static_cast<int>(
time & ~(1 << 31)) - TIME_OFFSET);
409 std::sort(tracks.begin(), tracks.end(),
411 return mGIDTrackTime.at(a) < mGIDTrackTime.at(b);
417 if (conf.maxTracks > 0 &&
trackCount >= conf.maxTracks) {
421 for (std::size_t it = 0; it <
trackCount; it++) {
422 const auto& gid = tracks[it];
426 switch (gid.getSource()) {
436 if (!tpcTr.hasBothSidesClusters()) {
440 if (tpcTr.hasCSideClustersOnly()) {
487 LOGF(info,
"Track type %s not handled", gid.getSourceName());
494 LOGF(info,
"Primary vertex %d has no triggers", primaryVertexIdx);
498 for (std::size_t it = 0; it < triggers.size(); it++) {
499 const auto& gid = triggers[it];
501 switch (gid.getSource()) {
512 LOGF(info,
"Trigger type %s not handled", gid.getSourceName());
520 const std::string& receiverHostname,
int receiverPort,
int receiverTimeout,
bool useOnlyFiles,
527 .port = receiverPort,
529 .host = receiverHostname,
530 .toFile = !useOnlySockets,
531 .toSocket = !useOnlyFiles});
540 auto maxR2 = maxR * maxR;
541 float rMin = std::sqrt(trc.getX() * trc.getX() + trc.getY() * trc.getY());
546 std::vector<PNT> pnts;
547 int nSteps = std::max(2,
int((maxR - minR) / maxStep));
549 float xMin = trc.getX(), xMax = maxR * maxR - trc.getY() * trc.getY();
551 xMax = std::sqrt(xMax);
554 float dx = (xMax - xMin) / nSteps;
556 float dxmin = std::abs(xMin - tp.getX()), dxmax = std::abs(xMax - tp.getX());
560 std::swap(xMin, xMax);
563 if (!prop->propagateTo(tp, xMin,
false, 0.99, maxStep, o2::base::PropagatorF::MatCorrType::USEMatCorrNONE)) {
566 auto xyz = tp.getXYZGlo();
567 pnts.emplace_back(
PNT{xyz.X(), xyz.Y(), xyz.Z()});
568 for (
int is = 0; is < nSteps; is++) {
569 if (!prop->propagateTo(tp, tp.getX() + dx,
false, 0.99, 999., o2::base::PropagatorF::MatCorrType::USEMatCorrNONE)) {
572 xyz = tp.getXYZGlo();
573 if (xyz.Z() <
minZ) {
576 if (xyz.Z() >
maxZ) {
579 if (xyz.X() * xyz.X() + xyz.Y() * xyz.Y() > maxR2) {
582 pnts.emplace_back(
PNT{xyz.X(), xyz.Y(), xyz.Z()});
594 .charge = tr.getCharge(),
596 .startXYZ = {tr.getX(), tr.getY(), tr.getZ()},
598 .theta = tr.getTheta(),
602 const auto it = propagationRanges.find(
source);
604 const bool rangeNotFound = (it == propagationRanges.cend());
610 const auto& prange = it->second;
612 auto pnts =
getTrackPoints(tr, prange.minR, prange.maxR, maxStep, prange.minZ, prange.maxZ);
614 for (
size_t ip = 0; ip < pnts.size(); ip++) {
615 vTrack->addPolyPoint(pnts[ip][0], pnts[ip][1], pnts[ip][2] + dz);
623 if (clusITS.size() && ITSClusterROFRec.size()) {
625 auto pattIt = patterns.begin();
636 if (clusMFT.size() && MFTClusterROFRec.size()) {
638 auto pattIt = patterns.begin();
650 auto bc = trig.getBc();
651 auto orbit = trig.getOrbit();
654 for (
int j = trig.getFirstEntry();
j <= trig.getLastEntry();
j++) {
656 auto module = cluster.ch();
657 double x = cluster.x();
658 double y = cluster.y();
671 const gsl::span cellsForTrigger(
cells.data() + trig.getFirstEntry(), trig.getNumberOfObjects());
673 for (
const auto& cell : cellsForTrigger) {
674 std::array<char, 3> relativeLocalPositionInModule;
684 .energy = cell.getEnergy(),
685 .phi = (float)gPos.Phi(),
686 .eta = (float)gPos.Eta(),
698 const gsl::span cellsForTrigger(
cells.data() + trig.getFirstEntry(), trig.getNumberOfObjects());
701 for (
const auto& cell : cellsForTrigger) {
707 auto cellTime = cell.getTimeStamp();
708 auto cellEnergy = cell.getEnergy();
716 cellTime = calibCell->getTimeStamp();
717 cellEnergy = calibCell->getEnergy();
719 if (std::abs(cellTime) > conf.EMCCellTimeMax) {
723 if (cellEnergy < conf.EMCCellEnergyMin) {
727 const auto id = cell.getTower();
730 std::array<double, 3> rPos{relPosCell.X(), relPosCell.Y(), relPosCell.Z()};
731 std::array<double, 3> gPos{};
734 const auto& [sm_id, module_number, index_module_phi, index_module_eta] = this->
mEMCALGeom->
GetCellIndex(
id);
736 matrix->LocalToMaster(rPos.data(), gPos.data());
737 TVector3 vPos(gPos.data());
740 .energy = cellEnergy,
741 .phi = (
float)vPos.Phi(),
742 .eta = (float)vPos.Eta(),
787 auto gidITSTPCTRD =
match.getTrackRef();
796 auto gidTPCTRD =
match.getTrackRef();
817 const auto mchGID =
GID{
static_cast<unsigned int>(trMFTMCH.getMCHTrackID()),
GID::MCH};
835 const auto midGID =
GID{
static_cast<unsigned int>(trMFTMCHMID.getMIDTrackID()),
GID::MID};
854 auto trackParam =
mch::TrackParam(mchTrack.getZ(), mchTrack.getParameters(), mchTrack.getCovariances());
866 const std::array<float, 5> arraypar = {
867 track.y(), track.z(), track.snp(),
868 track.tgl(), track.signed1Pt()};
880 tr.setParameters({track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()});
887 trackFwd.
setZ(track.z());
888 trackFwd.
setParameters({track.x(), track.y(), track.phi(), track.tgl(), track.signed1Pt()});
895 switch (track.trackType()) {
899 endZ = midZPositions.back();
903 endZ = mchZPositions.back();
907 endZ = midZPositions.back();
911 endZ = mchZPositions.back();
922 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
925 .startXYZ = {(float)tr.
getX(), (float)tr.
getY(), (float)tr.
getZ()},
926 .phi = (float)tr.
getPhi(),
928 .eta = (float)tr.
getEta(),
931 for (
auto zPos : mftZPositions) {
933 vTrack->addPolyPoint((
float)tr.
getX(), (float)tr.
getY(), (float)tr.
getZ());
939 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
944 (float)track.
getZ()},
950 static constexpr auto stepDensity = 50.;
952 const auto nSteps =
static_cast<std::size_t
>(std::abs(endZ - startZ) / stepDensity);
954 const auto dZ = (endZ - startZ) / nSteps;
956 for (std::size_t
i = 0;
i < nSteps; ++
i) {
957 const auto z = startZ +
i * dZ;
971 int sector = tOFClustersArray[tofcl].getSector();
972 float x = tOFClustersArray[tofcl].getX();
973 float y = tOFClustersArray[tofcl].getY();
974 float z = tOFClustersArray[tofcl].getZ();
991 int ncl = trc.getNumberOfClusters();
992 int offset = trc.getFirstClusterEntry();
993 for (
int icl = 0; icl < ncl; icl++) {
996 float xyz[] = {glo.X(), glo.Y(), glo.Z()};
1003 int ncl = trc.getNClusters();
1004 int offset = trc.getFirstEntry();
1005 for (
int icl = 0; icl < ncl; icl++) {
1008 float xyz[] = {glo.X(), glo.Y(), glo.Z()};
1020 if (trackTimeTB < -1e9) {
1021 trackTimeTB = trc.getTime0();
1024 for (
int iCl = trc.getNClusterReferences(); iCl--;) {
1025 uint8_t sector,
row;
1026 const auto& clTPC = trc.getCluster(mTPCTracksClusIdx, iCl, *mTPCClusterIdxStruct, sector,
row);
1028 std::array<float, 3> xyz;
1029 this->mTPCFastTransform->TransformIdeal(sector,
row, clTPC.getPad(), clTPC.getTime(), xyz[0], xyz[1], xyz[2],
1042 auto offset = mftTrack.getExternalClusterIndexOffset();
1044 for (
int icl = noOfClusters - 1; icl > -1; --icl) {
1046 float xyz[] = {thisCluster.getX(), thisCluster.getY(), thisCluster.getZ()};
1087 auto trackParam =
mch::TrackParam(track.getZ(), track.getParameters(), track.getCovariances());
1100 auto offset = mchTrack.getFirstClusterIdx();
1102 for (
int icl = noOfClusters - 1; icl > -1; --icl) {
1103 const auto& cluster = mchClusters[
offset + icl];
1104 float glo[] = {cluster.x, cluster.y, cluster.z};
1115 auto vTrack =
mEvent.
addTrack({.time =
static_cast<float>(trackTime),
1119 (float)midTrack.getPositionX(), (float)midTrack.getPositionY(),
1120 (float)midTrack.getPositionZ()},
1126 for (
int ich = 0; ich < 4; ++ich) {
1127 auto icl = midTrack.getClusterMatched(ich);
1129 auto& cluster = midClusters[icl];
1130 vTrack->
addPolyPoint(cluster.xCoor, cluster.yCoor, cluster.zCoor);
1141 for (
int ich = 0; ich < 4; ++ich) {
1142 auto icl = midTrack.getClusterMatched(ich);
1144 auto& cluster = midClusters[icl];
1145 float glo[] = {cluster.xCoor, cluster.yCoor, cluster.zCoor};
1160 for (
int iLayer = 0; iLayer < 6; ++iLayer) {
1161 if (tpcTrdTrack.getTrackletIndex(iLayer) >= 0) {
1163 const auto& tracklet = trdTracklets[tpcTrdTrack.getTrackletIndex(iLayer)];
1164 const auto& spacePoint = trdCalibratedTracklets[tpcTrdTrack.getTrackletIndex(iLayer)];
1166 float x = spacePoint.getX(),
y = spacePoint.getY(),
z = spacePoint.getZ();
1168 int iChamber = tracklet.getDetector();
1170 int sector = iChamber / 30;
1185 if (conf.timeMinMax[0] >= 0.f && conf.timeMinMax[0] < conf.timeMinMax[1]) {
1187 mTimeBracket = {conf.timeMinMax[0], conf.timeMinMax[1]};
1189 if (conf.TPCEtaAbsMax > 0.f) {
1211 ? alpParamsITS.roFrameLengthInBC *
1213 : alpParamsITS.roFrameLengthTrig *
1218 ? alpParamsMFT.roFrameLengthInBC *
1220 : alpParamsMFT.roFrameLengthTrig *
1235 v->refVDrift,
v->getTimeOffset());
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, const std::string &receiverHostname, int receiverPort, int receiverTimeout, bool useOnlyFiles, bool useOnlySockets)
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
void reduceNumberOfFiles(size_t filesInFolder) const
std::string newFileName() const
static VisualisationEventSerializer * getInstance(std::string ext)
virtual void toFile(const VisualisationEvent &event, Location &location)=0
static o2::dataformats::GlobalTrackID deserialize(unsigned seralizedValue)
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
GLbitfield GLuint64 timeout
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