Unable to find Blob charges with TRestFindTrackBlobsProcess

REST version : v2.2.24
REST commit : c865cb4e

Hi,
I am stuck with a problem, similar to the one described here:

I am trying to find Blob charges (position and charge) on the Track events.
In the configFile_G4Hits_To_Track.rml (11.5 KB) file I apply processes to transform Signal events to Raw Signal events, noise simulation, shaping, transformation back to Signal events and several track reconstruction processes, including TrackReconnectionProcess.
If I am not mistaken, TRestFindTrackBlobsProcess should recover observables from the TRestTrackReconnectionProcess in order to “find” Blobs on the Track event.
Thus, I added a parameter

<parameter name="observable" value="all" />

to the TRestTrackReconnectionProcess in the configuration.rml file.

But, fObservables = TRestEventProcess::ReadObservables(); in the TRestFindTrackBlobsProcess gives a vector of a size = 0.
I have added some lines to the .cxx file of that process in order to receive printouts:
TRestFindTrackBlobsProcess.cxx (28.6 KB) TRestFindTrackBlobsProcess.h (4.0 KB)
It looks like I am able to reconstruct only the position, but not the charge of the Blobs (Processing only 1 Track for the moment):

================InitProcess================
fObservables.size() : 0
tracks[0]->isXZ(): 1
x1_X = 549.479 z1_X = 577.426
x2_X = 541.815 z2_X = 580.258
tracks[1]->isYZ(): 1
y1_Y = 371.589 z1_Y = 551.934
y2_Y = 387.301 z2_Y = 580.661
======================FINALLY======================
x1 = 0 y1 = 0 z1 = 0
x2 = 0 y2 = 0 z2 = 0
distance = 0
x1_X = 549.479 z1_X = 577.426
x2_X = 541.815 z2_X = 580.258
y1_Y = 371.589 z1_Y = 551.934
y2_Y = 387.301 z2_Y = 580.661
===========================================================
longTrackId : 7
tracks[0]->isXYZ(): 0
fQ1_Observables.size() : 0
fQ2_Observables.size() : 0
fQhigh_Observables.size() : 0
fQlow_Observables.size() : 0
fQbalance_Observables.size() : 0
fQratio_Observables.size() : 0
===========================================================
tracks[0]->isXZ(): 1
fQ1_X_Observables.size() : 0
fQ2_X_Observables.size() : 0
fQhigh_X_Observables.size() : 0
fQlow_X_Observables.size() : 0
fQbalance_X_Observables.size() : 0
fQratio_X_Observables.size() : 0
===========================================================
tracks[0]->isYZ(): 0
fQ1_Y_Observables.size() : 0
fQ2_Y_Observables.size() : 0
fQhigh_Y_Observables.size() : 0
fQlow_Y_Observables.size() : 0
fQbalance_Y_Observables.size() : 0
fQratio_Y_Observables.size() : 0
===========================================================
longTrackId : 8
tracks[1]->isXYZ(): 0
fQ1_Observables.size() : 0
fQ2_Observables.size() : 0
fQhigh_Observables.size() : 0
fQlow_Observables.size() : 0
fQbalance_Observables.size() : 0
fQratio_Observables.size() : 0
===========================================================
tracks[1]->isXZ(): 0
fQ1_X_Observables.size() : 0
fQ2_X_Observables.size() : 0
fQhigh_X_Observables.size() : 0
fQlow_X_Observables.size() : 0
fQbalance_X_Observables.size() : 0
fQratio_X_Observables.size() : 0
===========================================================
tracks[1]->isYZ(): 1
fQ1_Y_Observables.size() : 0
fQ2_Y_Observables.size() : 0
fQhigh_Y_Observables.size() : 0
fQlow_Y_Observables.size() : 0
fQbalance_Y_Observables.size() : 0
fQratio_Y_Observables.size() : 0

Am I missing something?
I would be grateful for any kind of help concerning this problem.

When you build your RML process definition, the statement

<parameter name="observable" value="all" />

will only work with/add those observables with a fixed-static observable name.

The blob charge observables are dynamic in the sense that the observable name is used to define the size of the radius used to define the blob charge.

So, you need to define the radius, for example, for a 5mm radius, you would define the following inside the RML section:

<observable name="Q1_X_R5" value="ON" />

That means the charge on projection X, within a radius of 5mm. This cannot be automatically readout by TRestEventProcess::ReadObservables(), since the user needs to input the desired observable name that changes dynamically the calculation inside ProcessEvent.

You can see that at the PandaXIII_MC pipeline.

In version v2.3.X this process has been renamed to TRestTrackBlobAnalysisProcess.

This process lacks of documentation.

https://sultan.unizar.es/rest/classTRestTrackBlobAnalysisProcess.html

But if you are looking into it, and want to contribute, perhaps writing some documentation would be helpful here, of course, the forum is here to fill the lack of documentation at those places.

Examples of already documented classes are:

The case of TRestGeant4AnalysisProcess contains also examples of dynamic observables. For example, observables with the keyword MeanPos can be used to get the mean position at any geometrical volume. I.e. using gasMeanPos, vesselMeanPos, etc.

As it is defined at the doxygen documentation
https://sultan.unizar.es/rest/classTRestGeant4AnalysisProcess.html

BTW @nkx, at the PandaXIII_MC pipeline I see a problem at the processes_2D.rml. The name of the process definition is not matching the name of the class at V2.3.X, which should be TRestTrackBlobAnalysisProcess.

We find at processes_2D.rml

<TRestFindTrackBlob_Process

It is this not a problem? It is perhaps considering a default definition?

It is a problem, but won’t affect the result. The class name TRestFindTrackBlob_Process is indeed wrong. But REST will also try to find the section according to its name, i.e, tckBlob_2D, so the section will still be included. We can fix this class name.

Hi @jgalan,

Thank you very much, I misinterpreted the input of observables to this process.


That is a good idea, I will try to switch to the 2.3 version soon.