|
51 | 51 | #include "Framework/DataTypes.h" |
52 | 52 | #include "Framework/TableBuilder.h" |
53 | 53 | #include "Framework/CCDBParamSpec.h" |
| 54 | +#include "CommonUtils/TreeStreamRedirector.h" |
54 | 55 | #include "FT0Base/Geometry.h" |
55 | 56 | #include "GlobalTracking/MatchTOF.h" |
56 | 57 | #include "ReconstructionDataFormats/Cascade.h" |
@@ -1687,6 +1688,14 @@ void AODProducerWorkflowDPL::init(InitContext& ic) |
1687 | 1688 | mThinTracks = ic.options().get<bool>("thin-tracks"); |
1688 | 1689 | mPropTracks = ic.options().get<bool>("propagate-tracks"); |
1689 | 1690 | mPropMuons = ic.options().get<bool>("propagate-muons"); |
| 1691 | + if (auto s = ic.options().get<std::string>("with-streamers"); !s.empty()) { |
| 1692 | + mStreamerMask = static_cast<AODProducerStreamerMask>(std::stoul(s, nullptr, 2)); |
| 1693 | + if (O2_ENUM_ANY_BIT(mStreamerMask)) { |
| 1694 | + LOGP(info, "Writing streamer data with mask {:0{}b}", static_cast<std::underlying_type_t<AODProducerStreamerMask>>(mStreamerMask), std::numeric_limits<std::underlying_type_t<AODProducerStreamerMask>>::digits); |
| 1695 | + } else { |
| 1696 | + LOGP(warn, "Specified non-default empty streamer mask!"); |
| 1697 | + } |
| 1698 | + } |
1690 | 1699 | mTrackQCFraction = ic.options().get<float>("trackqc-fraction"); |
1691 | 1700 | mTrackQCNTrCut = ic.options().get<int64_t>("trackqc-NTrCut"); |
1692 | 1701 | if (auto seed = ic.options().get<int>("seed"); seed == 0) { |
@@ -1772,6 +1781,10 @@ void AODProducerWorkflowDPL::init(InitContext& ic) |
1772 | 1781 | mHeavyIonUpdate = when; |
1773 | 1782 |
|
1774 | 1783 | mTimer.Reset(); |
| 1784 | + |
| 1785 | + if (O2_ENUM_ANY_BIT(mStreamerMask)) { |
| 1786 | + mStreamer = std::make_unique<o2::utils::TreeStreamRedirector>("AO2DStreamer.root", "RECREATE"); |
| 1787 | + } |
1775 | 1788 | } |
1776 | 1789 |
|
1777 | 1790 | void AODProducerWorkflowDPL::run(ProcessingContext& pc) |
@@ -2643,6 +2656,51 @@ AODProducerWorkflowDPL::TrackQA AODProducerWorkflowDPL::processBarrelTrackQA(int |
2643 | 2656 | trackQAHolder.dRefGloSnp = safeInt8Clamp(((itsCopy.getSnp() + tpcCopy.getSnp()) * 0.5f - gloCopy.getSnp()) * scaleGlo(2)); |
2644 | 2657 | trackQAHolder.dRefGloTgl = safeInt8Clamp(((itsCopy.getTgl() + tpcCopy.getTgl()) * 0.5f - gloCopy.getTgl()) * scaleGlo(3)); |
2645 | 2658 | trackQAHolder.dRefGloQ2Pt = safeInt8Clamp(((itsCopy.getQ2Pt() + tpcCopy.getQ2Pt()) * 0.5f - gloCopy.getQ2Pt()) * scaleGlo(4)); |
| 2659 | + |
| 2660 | + if (O2_ENUM_TEST_BIT(mStreamerMask, AODProducerStreamerMask::TrackQA)) { |
| 2661 | + (*mStreamer) << "trackQA" |
| 2662 | + << "trackITSOrig=" << itsOrig |
| 2663 | + << "trackTPCOrig=" << tpcOrig |
| 2664 | + << "trackITSTPCOrig=" << trackPar |
| 2665 | + << "trackITSProp=" << itsCopy |
| 2666 | + << "trackTPCProp=" << tpcCopy |
| 2667 | + << "trackITSTPCProp=" << gloCopy |
| 2668 | + << "refRadius=" << o2::aod::track::trackQARefRadius |
| 2669 | + << "scaleBins=" << o2::aod::track::trackQAScaleBins |
| 2670 | + << "scaleCont0=" << scaleCont(0) |
| 2671 | + << "scaleCont1=" << scaleCont(1) |
| 2672 | + << "scaleCont2=" << scaleCont(2) |
| 2673 | + << "scaleCont3=" << scaleCont(3) |
| 2674 | + << "scaleCont4=" << scaleCont(4) |
| 2675 | + << "scaleGlo0=" << scaleGlo(0) |
| 2676 | + << "scaleGlo1=" << scaleGlo(1) |
| 2677 | + << "scaleGlo2=" << scaleGlo(2) |
| 2678 | + << "scaleGlo3=" << scaleGlo(3) |
| 2679 | + << "scaleGlo4=" << scaleGlo(4) |
| 2680 | + << "trackQAHolder.tpcTime0=" << trackQAHolder.tpcTime0 |
| 2681 | + << "trackQAHolder.tpcdcaR=" << trackQAHolder.tpcdcaR |
| 2682 | + << "trackQAHolder.tpcdcaZ=" << trackQAHolder.tpcdcaZ |
| 2683 | + << "trackQAHolder.tpcdcaClusterByteMask=" << trackQAHolder.tpcClusterByteMask |
| 2684 | + << "trackQAHolder.tpcdEdxMax0R=" << trackQAHolder.tpcdEdxMax0R |
| 2685 | + << "trackQAHolder.tpcdEdxMax1R=" << trackQAHolder.tpcdEdxMax1R |
| 2686 | + << "trackQAHolder.tpcdEdxMax2R=" << trackQAHolder.tpcdEdxMax2R |
| 2687 | + << "trackQAHolder.tpcdEdxMax3R=" << trackQAHolder.tpcdEdxMax3R |
| 2688 | + << "trackQAHolder.tpcdEdxTot0R=" << trackQAHolder.tpcdEdxTot0R |
| 2689 | + << "trackQAHolder.tpcdEdxTot1R=" << trackQAHolder.tpcdEdxTot1R |
| 2690 | + << "trackQAHolder.tpcdEdxTot2R=" << trackQAHolder.tpcdEdxTot2R |
| 2691 | + << "trackQAHolder.tpcdEdxTot3R=" << trackQAHolder.tpcdEdxTot3R |
| 2692 | + << "trackQAHolder.dRefContY=" << trackQAHolder.dRefContY |
| 2693 | + << "trackQAHolder.dRefContZ=" << trackQAHolder.dRefContZ |
| 2694 | + << "trackQAHolder.dRefContSnp=" << trackQAHolder.dRefContSnp |
| 2695 | + << "trackQAHolder.dRefContTgl=" << trackQAHolder.dRefContTgl |
| 2696 | + << "trackQAHolder.dRefContQ2Pt=" << trackQAHolder.dRefContQ2Pt |
| 2697 | + << "trackQAHolder.dRefGloY=" << trackQAHolder.dRefGloY |
| 2698 | + << "trackQAHolder.dRefGloZ=" << trackQAHolder.dRefGloZ |
| 2699 | + << "trackQAHolder.dRefGloSnp=" << trackQAHolder.dRefGloSnp |
| 2700 | + << "trackQAHolder.dRefGloTgl=" << trackQAHolder.dRefGloTgl |
| 2701 | + << "trackQAHolder.dRefGloQ2Pt=" << trackQAHolder.dRefGloQ2Pt |
| 2702 | + << "\n"; |
| 2703 | + } |
2646 | 2704 | } |
2647 | 2705 | } |
2648 | 2706 | } |
@@ -3012,6 +3070,8 @@ void AODProducerWorkflowDPL::endOfStream(EndOfStreamContext& /*ec*/) |
3012 | 3070 | { |
3013 | 3071 | LOGF(info, "aod producer dpl total timing: Cpu: %.3e Real: %.3e s in %d slots", |
3014 | 3072 | mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1); |
| 3073 | + |
| 3074 | + mStreamer.reset(); |
3015 | 3075 | } |
3016 | 3076 |
|
3017 | 3077 | DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, bool enableStrangenessTracking, bool useMC, bool CTPConfigPerRun) |
@@ -3144,6 +3204,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo |
3144 | 3204 | ConfigParamSpec{"thin-tracks", VariantType::Bool, false, {"Produce thinned track tables"}}, |
3145 | 3205 | ConfigParamSpec{"trackqc-fraction", VariantType::Float, float(0.1), {"Fraction of tracks to QC"}}, |
3146 | 3206 | ConfigParamSpec{"trackqc-NTrCut", VariantType::Int64, 4L, {"Minimal length of the track - in amount of tracklets"}}, |
| 3207 | + ConfigParamSpec{"with-streamers", VariantType::String, "", {"Bit-mask to steer writing of intermediate streamer files"}}, |
3147 | 3208 | ConfigParamSpec{"seed", VariantType::Int, 0, {"Set seed for random generator used for sampling (0 (default) means using a random_device)"}}, |
3148 | 3209 | }}; |
3149 | 3210 | } |
|
0 commit comments