-
Notifications
You must be signed in to change notification settings - Fork 488
Add extra info with charge and timing to unbinned residuals #14969
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Conversation
|
REQUEST FOR PRODUCTION RELEASES: This will add The following labels are available |
|
@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). |
|
Hello @shahor02 Thank you. If my understanding is correct, then it will work. In meantime I will check your file |
|
@miranov25 yes, detInfo elements are in sync with res, for ITS 0's are filled. |
|
Hello @shahor02
That can work. Another options time_80 = time_event. + drift80= time_event. + 100*(1-80*|tgl|/250.) 2.) For occupancy bins per track defined in similar way: I will write formula soon |
|
@miranov25 shall I merge this part as is or wait for your formula? |
|
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)
|
|
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 |
|
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. |
|
If you want to provide a code snippet, go on, I'll not work on this before tomorrow afternoon. |
|
I do not know what we have available at the moment when we produce the clusters. This will automatically take into account only rows with clusters. |
|
Hello @noferini, During the TPC meeting, we discussed the stored times in the "unbinned residuals" used for TPC calibration. Thank you! |
|
Hi @miranov25 , |
| 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); |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Helo @noferini
I want to use it for 2 purposes. Calculate beta
- remove fake TOF matches
- Extract momentum from Beta. We want to estimate momentum scaling - resp. constraint momenta.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dear @miranov25 , @shahor02 ,
I checked the whole class and I noted that:
- FT0 array is not accessed here
- FT0Best (from TOF matching info) is used everywhere
So I would suggest to simply subtract FT0Best as already calculated in TOF matching
Note that FT0Best is calculated in matchTOF class as:
double t0Best = bclongtofCal * o2::tof::Geo::BC_TIME_INPS; // here just BC
float t0BestRes = 200;
if (FITRecPoints.size() > 0) {
int index = findFITIndex(bclongtofCal, FITRecPoints, mFirstTForbit);
if (index > -1 && FITRecPoints[index].isValidTime(1) && FITRecPoints[index].isValidTime(2)) { // require A and C
t0Best += FITRecPoints[index].getCollisionTime(0);
t0BestRes = 15;
}
}
and provided with a resolution (two cases considered FT0-AC -> 15 ps or nothing -> 200ps)
This is provided as a time inside the TF so the BCLONG part should be removed before to use it
The info can be retrieved by the matching info as done in other lines
tofMatch.getFT0Best()
tofMatch.getFT0BestRes()
I can implement it and open a PR in the Ruben branch but I don't know if you want to use also the information about the resolution.
Waiting for your green light to proceed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @noferini , yes, you are the expert.
We will also need the float tofTime - tof->GetT0().
Currently, you store only the delta versus track expectation, which is good for rejecting fakes. However, delta time is more important for constraining the momenta of corrected tracks.
Reading the code as it is now, this information is not available. (Maybe I missed something in the current implementation.)
Do you understand what I mean?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@noferini thanks! I would propose to simply substitute the current time_TOF - time_ITSTPC :
AliceO2/Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx
Lines 729 to 730 in bca52ae
| float tdif = static_cast<float>(clTOF.getTime() - mRecoCont->getTPCITSTrack(gidTable[GTrackID::ITSTPC]).getTimeMUS().getTimeStamp() * 1e6); | |
| mDetInfoRes.emplace_back().setTOF(tdif * 1e-6); // time in \mus wrt seeding ITS-TPC track |
Would be good if you could open a PR. As for the resolution, I would drop it: we don't have space to accommodate, also, I am not sure it is relevant, given e.g. missing slewing corrections.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will add a line in my PR
// float flighttime = clTOF.getTime() - t0forTOF; // in case you need flight time (for beta) you should subtract absolute t0 for TOF
in case you want to add it later
6c23010 to
bca52ae
Compare
|
This is the commit I prepared I cannot open a PR on Ruben repo |

No description provided.