Skip to content

Conversation

@shahor02
Copy link
Collaborator

No description provided.

@github-actions
Copy link
Contributor

REQUEST FOR PRODUCTION RELEASES:
To request your PR to be included in production software, please add the corresponding labels called "async-" to your PR. Add the labels directly (if you have the permissions) or add a comment of the form (note that labels are separated by a ",")

+async-label <label1>, <label2>, !<label3> ...

This will add <label1> and <label2> and removes <label3>.

The following labels are available
async-2023-pbpb-apass4
async-2023-pp-apass4
async-2024-pp-apass1
async-2022-pp-apass7
async-2024-pp-cpass0
async-2024-PbPb-apass1
async-2024-ppRef-apass1
async-2024-PbPb-apass2
async-2023-PbPb-apass5

@shahor02
Copy link
Collaborator Author

@miranov25 , this adds to the unbinned residuals tree a branch with 4-bytes struct https://github.com/shahor02/AliceO2/blob/6c23010c8442f96250eb35358bd3c73ca04a9723/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackInterpolation.h#L104-L145 encoding the TPC dedx, TRD q's and slope (truncated to +-3.5 range), TOF cluster time wrt track ITS-TPC time and the same for the PV (i.e. one should use the relevant getter depending on the row value).
I've copied residuals for 1 ctf of OO/564356 to /alice/cern.ch/user/s/shahoian/toMI/o2residuals_tpc.root.
Hope the dump below is self-explanatory:

root [1] unbinnedResid->Scan("res.row : detInfo.word : detInfo.qTotTPC() : detInfo.qMaxTPC() : detInfo.q0TRD() : detInfo.q1TRD() : detInfo.q2TRD() : detInfo.slopeTRD() : detInfo.timeTOF() : detInfo.timePV()")
***********************************************************************************************************************************************
*    Row   * Instance *  res.row  *  detInfo. *  detInfo. *  detInfo. *  detInfo. *  detInfo. *  detInfo. *  detInfo. *  detInfo. *  detInfo. *
***********************************************************************************************************************************************
# RS: TPC                                            QTOT          QMAX
*        0 *        0 *        17 *    524297 *         9 *         8 *         9 *         0 *        32 *      -3.5 *         0 *         0 *
*        0 *        1 *        18 *    917532 *        28 *        14 *        28 *         0 *        56 *      -3.5 *         0 *         0 *
*        0 *        2 *        19 *    589850 *        26 *         9 *        26 *         0 *        36 *      -3.5 *         0 *         0 *
*        0 *        3 *        20 *    458776 *        24 *         7 *        24 *         0 *        28 *      -3.5 *         0 *         0 *
*        0 *        4 *        21 *   1179684 *        36 *        18 *        36 *         0 *         8 * -3.498290 *         0 *         0 *
*        0 *        5 *        22 *   1048636 *        60 *        16 *        60 *         0 *         0 * -3.498290 *         0 *         0 *
*        0 *        6 *        23 *    589852 *        28 *         9 *        28 *         0 *        36 *      -3.5 *         0 *         0 *
*        0 *        7 *        24 *   1310792 *        72 *        20 *        72 *         0 *        16 * -3.498290 *         0 *         0 *
*        0 *        8 *        25 *    655386 *        26 *        10 *        26 *         0 *        40 *      -3.5 *         0 *         0 *
*        0 *        9 *        26 *    852024 *        56 *        13 *        56 *         0 *        52 *      -3.5 *         0 *         0 *
*        0 *       10 *        27 *    786454 *        22 *        12 *        22 *         0 *        48 *      -3.5 *         0 *         0 *
*        0 *       11 *        28 *   1179720 *        72 *        18 *        72 *         0 *         8 * -3.498290 *         0 *         0 *
...
# RS: TRD                                                                      Q0          Q1          Q2   Slope
*        0 *      132 *       162 * 2.470e+09 *      2304 *     37699 *         0 *        18 *        12 * 0.5273504 * -2.46e-27 * -2.46e-27 *
*        0 *      133 *       163 * 2.914e+09 *     18816 *     44467 *         0 *        19 *        13 * 1.2504272 * -2.03e-11 * -2.03e-11 *
*        0 *      134 *       164 * 2.761e+09 *     16400 *     42132 *        16 *         0 *        17 * 1.0008549 * -6.42e-17 * -6.42e-17 *
*        0 *      135 *       165 * 2.567e+09 *      4096 *     39172 *         0 *        32 *        16 * 0.6846156 * -6.82e-24 * -6.82e-24 *
...
# RS: TOF : difference between the TOF cluster time and the seeding ITS-TPC track time, \mus                                 XXX
*        0 *      136 *       170 * 3.166e+09 *     63764 *     48309 *        20 *       114 *        23 * 1.6606836 * -0.022213 * -0.022213 *
...
# RS: PV: difference between the PV time and the seeding ITS-TPC track time, \mus                                                      XXX
*        0 *      144 *       190 * 3.172e+09 *     32768 *     48405 *         0 *         0 *        22 * 1.6709404 * -0.036499 * -0.036499 *
...

@miranov25
Copy link
Contributor

Hello @shahor02

Thank you.
I assume that detInfo.word is parallel to res – we have as many detInfo entries as residuals.
I am now checking the context.

If my understanding is correct, then it will work.
I have one more question.
I need to define the occupancy.
In the current residuals, we have neither occupancy nor time. What is the best way to add them?
I am considering the occupancy vector we have in the reconstruction, but we will need to assign time to the track to be able to use it.

In meantime I will check your file

@shahor02
Copy link
Collaborator Author

@miranov25 yes, detInfo elements are in sync with res, for ITS 0's are filled.
Concerning the occupancy: the current format has no PV-level info and the tracks ordering is randomized on purpose: adding for each track the 32 floats of our usual TPC occupancy will double the output size.
If you want, I can store per track the N TPC clusters in 1 drift time from its PV time.

@miranov25
Copy link
Contributor

Hello @shahor02

If you want, I can store per track the N TPC clusters in 1 drift time from its PV time.

That can work.

Another options
1.) What I suggested today, however, is to integrate within the time window covered by the track, i.e. between the two drift-time boundaries (entrance and end of the TPC)

time_80 = time_event. + drift80= time_event. + 100*(1-80*|tgl|/250.)
tim250 = time_event. +drift250=ime_event. + min(100*(1-250*|tgl|/250.),0)

2.) For occupancy bins per track defined in similar way:
IROC,OROC0,OROC1,OrOC2 radius - 1 Byte per region
4 bytes per track

I will write formula soon

@shahor02
Copy link
Collaborator Author

@miranov25 shall I merge this part as is or wait for your formula?

@miranov25
Copy link
Contributor

Hello @shahor02

We need to use a variable with "semi" relative precision. We can use a simple logarithmic function or the asinh function, which is nearly linear for small x (below the scale value) and logarithmic for larger values.

If the occupancy is given as the number of clusters, we can use the scale as in my TF1 without normalisation.

I have to check again the scale. Can you access our occupancy estimator from reconstructions?

TF1 f1("ncl","asinh(x*0.05)/0.05",0,10000000)
root [25] f1.Eval(1000000)
(double) 230.25851

image

@shahor02
Copy link
Collaborator Author

The residuals extraction has access to David's vector of occupancies per 16 TBs. But I don't understand which value you want to put in your TF1

@miranov25
Copy link
Contributor

I want to calculate the mean occupancy per track segment as discussed above. #14969 (comment)

Occupancy in radial segments IROC, OROC0, 1, 2, using our vectors of occupancies.
It is easy to make a mistake.
Are the formulas clear, or should I try to implement it using David's vector?

@shahor02
Copy link
Collaborator Author

If you want to provide a code snippet, go on, I'll not work on this before tomorrow afternoon.
Note that the tracks may have not IROC of OROC3 contributions, I guess in that case you should count TBs corresponding to the TPC track extrapolation to min and max possible pad rows.

@miranov25
Copy link
Contributor

I do not know what we have available at the moment when we produce the clusters.
The easiest way will be to loop over clusters within the stacks and sum the occupancy at a particular time bin (from the occupancy lookup).
It is not very efficient, but there is a lower probability of making a mistake.

This will automatically take into account only rows with clusters.

@miranov25
Copy link
Contributor

Hello @noferini,

During the TPC meeting, we discussed the stored times in the "unbinned residuals" used for TPC calibration.
To provide some context: I had previously asked Ruben to implement TOF time in the calibration output to help constrain the curvature measurement. However, Ruben noted that we are currently storing the raw TOF time, whereas we need to access TOF time minus the collision time (t-t0).
Could you please review the current time estimator in this pull request and suggest how best to apply this correction (similar to what you did for the time series)?

Thank you!

@noferini
Copy link
Collaborator

Hi @miranov25 ,
I'm going to check.
More news soon...

if (!gidTable[GTrackID::ITSTPC].isIndexSet()) {
LOGP(fatal, "ITS-TPC seed index is not set for TOF track");
}
float tdif = static_cast<float>(clTOF.getTime() - mRecoCont->getTPCITSTrack(gidTable[GTrackID::ITSTPC]).getTimeMUS().getTimeStamp() * 1e6);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @miranov25 ,
if I understood correctly this is the line you want to adjust.
I see that this is a delta time wrt ITS-TPC track time inside the TF.
What is the precision you need?
At this stage clTOF.getTime() is not a raw time but an already calibrated time.
It is true that the t0 is affected of a "large" smearing (~200 ps) and we can improve by using FT0 reducing the effective resolution on t.o.f. at the level < 80 ps but do you really gain anything here?
One additional comment. If you want to achieve such a precision, I guess you should also refer the time to the Primary Vertex otherwise you would have shifts at the level of 10-20 ns (time travel from PV to TOF).
Actually, what do you need?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @noferini
If the TOF contributes to the global track, then its cluster time - estimated time-of-flight-from-Lintegral is assigned to a track with 10ns error.
For the global tracks w/o TOF but with the TRD, the time assignment is done with 5ns error (unless the pile-up was detected from FT0, in this case the distance from the pile-up time to TRD trigger BC time is assigned as an error, but in PbPb it is very rare).
Then these times are used to fit the PV timestamp, so it is a weighted average between the timestamps from TRD(and noTOF) fixed to BC center and TOF-defined timestamps. If precision of this vertex time is fine, then I can use it as a time for TOF. Otherwhise, I would need the time which you are using for the TOF PID

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants