-
Notifications
You must be signed in to change notification settings - Fork 6
Sensor's alignment
The alignment is an iterative process developed to correctly tune the parameters and the geometry of the sensors under test. Our main objective is to obtain their best performance.
Whenever a sensor is tested, we collect information from the sensor through an oscilloscope and use an external tracker for reference. The system known as Telescope gives us a reference of the hit position and a fast microchannel plate detector (MCP-PMT or Photek) gives a timing reference. The data is saved in a set of raw ROOT files whose paths are allocated in the corresponding txt file here. The information associated to each hit is pre-processed to get derived quantities from the sensor's response, such as the interaction time (related to the LP2_50 variable, for instance).
Every sensor tested requires an individual class defined in a Geometry file. The attributes of the class object are defined and got their default values here. New sensors are added in separate files, labeled by their data-taking year, here: 2022 and 2023.
Every entry in Geometry has a code name for the sensor, defined in sampleCollections.
Since the program was created to deal with different sensors' shapes and configurations, some attributes are generic and their interpretation could vary depending on the sensor. Moreover, certain names reference a specific distribution, such as a strip or pad sensor. If one of these attributes is not needed, its default value should work.
Fig. 1: Diagram of the alignment process for strip sensors. The analyzer name (option -A in MyAnalysis) are shown in a box with dashed border; the macros are in rectangles with a brief explanation of its purpose above and have the file's name and .py extension.
Beginning from scratch, each sensor requires some basic parameters so that the framework can properly work. These basic quantities must be defined in a first iteration. Other quantities will be tuned and will change after each turn.
The initial configuration should get mostly geometrical or 'physical' information about the sensor, such as the number of channels numLGADchannels, dimensions like stripWidth and pitch, etc.
Also, some tracking or campaign specifications are needed, such as the minimum number of layers hit in the Telescope: minPixHits and minStripHits, the signal threshold for the time reference photekSignalThreshold, etc.)
For a complete explanation of the variables and when and how to use them, check here (WIP).
Having those initial parameters saved, re-compile and run the InitialAnalyzer through MyAnalysis. This will create an output folder which will be used to find the center of each channel using FindStripCenters.py. This is done following:
make -j4
./MyAnalysis -A InitialAnalyzer -D <sensor_code_name>
cd ../macros
python FindStripCenters.py -D <sensor_code_name>
An output line with the position of each channel will be displayed. This line is the stripCenterXPosition and should be saved in the sensor's class geometry.
NOTE: Apart of this line, a plot of the distributions and their fits will be saved in the output folder. Make sure they make sense before saving the numbers!
With a new configuration, we must re-compile. Later, run Analyze and, afterwards, the DoPositionRecoFit.py macro.
make -j4
./MyAnalysis -A Analyze -D <sensor_code_name>
cd ../macros
python DoPositionRecoFit.py -D <sensor_code_name> --xmax <fit_limit> --fitOrder <pol_order>