Test Beam Facility For hIgh Rate STudies (TB.First) @IPHC

This page contains instructions and illustrations on how to run the test beam facility at Strasbourg. The page is under construction and for the moment contain only relevant information for the test of a tracker phase 2 2S mini module (2CBC3). FIXME add documentation about CBC2/3 calibration


A quick set of useful contacts in the table below:

Caroline Collard caroline.collard@cernNOSPAMPLEASE.ch
Clément Grimault clement.grimault@iphcNOSPAMPLEASE.cnrs.fr
Ulrich Goerlach ulrich.goerlach@iphcNOSPAMPLEASE.cnrs.fr
Jeremy Andrea +41 75 411 1805 jandrea@cernNOSPAMPLEASE.ch
CYRCé local phone (fix) +33 388106566  
bat 30  

FIXME add more contacts from CYRCé

Description of the current setup, installation

ping // ping FC7 ping // ping GLib

Test of the Phase-1 CMS Pixel modules with DTB


  • Git
  • C++ compiler
  • CMake
  • FTD2XX / FTDI library :
for libftdi -> "yum install libftdi-devel.x86_64" for libftd2xx -> download : https://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-x86_64-1.4.8.gz tar -xvf libftd2xx-x86_64-1.4.8.gz cd release/build/; cp libftd2xx.* /usr/local/lib/ ; chmod 0755 /usr/local/lib/libftd2xx.so.1.4.8 ; ln -sf /usr/local/lib/libftd2xx.so.1.4.8 /usr/local/lib/libftd2xx.so ;

cp release/WinType.h /usr/local/include/. ; cp release/ftd2xx.f /usr/local/include/. ;

Pxar installation

Link to the documentation link

git clone https://github.com/psi46/pxar.git -b master git clone https://github.com/psi46/pixel-dtb-firmware.git -b master

Preparation of pixel module

Setup of the environment : make sure root is sourced. Then to allow the usb port to be accessible (under linux) :

 sudo mount --bind /dev/bus /proc/bus ; 
sudo ln -s /sys/kernel/debug/usb/devices /proc/bus/usb/devices ; 
sudo chmod 666 /proc/bus/usb/00*/* ;
sudo modprobe -r ftdi_sio ;

First to test the programmability of the module :

FIXME add link to the github branch, create the git branch:


Information on the pixel module

Pixel Number Hub address Comments Test results
M3028 25 L3 from Nikkie 1 dead ROC if no HV
M3211 31 L3 from Danek ...
M3558 29 L3 from Danek ...
M3672 30 L3 from Nikkie ...
M3704 4 L3 from Nikkie ...
M4643 15 L4 from Nikkie problem of configuration if no HV

Installation of the DUT (pT mini module)

Grounding of the mini module

Here is a picture of the grounding of the mini-module. The ground is connected to the ground of the LV power supply. It is also attached to the DAQ crate.


Cabling and setting of the LV (UIB)

The UIB needs to be powered by multiple low voltage values. The various voltages can be seen on the following pictures :


The voltages to used are mention directly on the PS. It might have to be slightly increased, so to have the correct voltages at the entrance of the UIB. This has to be verified and adjusted with a voltmeter. There is a colour code for the cables. The colour of cables seen on the PS connectors matches the colour of cables on the UIB, as can be seen in the following picture :



  • there is a black strips on one of the green cable. The position of the cable in the UIB can be seen on the pictures above. It should corresponds to the left green cable on the PS (to be verified)
  • a USB cables has to a POWERED USB port !!. If the s-curves look strange, the USB port might not be powered properly. The easiest is to connect the USB cable directly on the port located on the LV power supply.
  • not to damage the UIB, the LV should be powered simultaneously.

Cabling and setting of the HV

WARNING : the bias voltage should be negative , make sure the led blue led on the right side are on (not the red one). To change the polarity (in principle you don't have to do it, it should be well define by default) .


For changing the High Voltage value : add pictures

  • make sure the HV channels are OFF. WARNING, the 2 HV channels of the 2S minimodule should be off/on at the same time. We should avoid as much as possible differences of potential between the 2 channels.
  • with the central button, highlight the channel you want to change. Click on the select button.


  • click on the voltage button


  • click on the edit button to set the new voltage. Use the central big button (turning it) to set the voltage. Use the digit button to change digit




  • click on the apply button and go back to the main page. To start ramping the voltage, push the channel button.

Preparing the CRATE :

Fixme add picture, with a description of all the element in the crate, how the FC7 connect to the UIB, etc... Describe powering up, cheks and these sort of stuffs.

Trigger system with scintillators

  • 2 beam scintillators for coincidence, each 2mm thick, size of pixel module (≈ 40x67mm2)
  • Hamamatsu small PMTs H10721 with low voltage control
  • In special housing to allow mounting without heavy scotch tape in beam but testing in lab
  • Flexibility of changing scintillator
  • All mecanical parts of housing produced by 3D printer (Thierry G.)
  • First tests were done with 90Sr beta source
  • Very fast signals

Trigger supervisor on GLib

Trigger logic


Synchronisation with the beam

The telescope

The Motherboard and the connected pixel module

Pixel Number Name Hub address Slot on the MB Position on the FMC8SFP Fiber color (number) TBM channels Comments
M3704 BPix_BmO_SEC1_LYR3_LDR4F_MOD1 4 211 B grey (5) 9 and 10  
M3672 BPix_BmO_SEC1_LYR3_LDR3F_MOD1 30 221 G green (3) 5 and 6  
M4643 BPix_BmO_SEC1_LYR3_LDR2F_MOD1 15 212 E black (8) 15 and 16 Clement: problem of config if no HV
M3211 BPix_BmO_SEC1_LYR3_LDR1F_MOD1 31 222 F dark blue (1) 1 and 2  

important associated file: /home/xtaldaq/TriDAS/Config/nametranslation/0/translation.dat

Low voltage on MB: stored values are on the 1st recall set on the 3 LV.

Order to respect to turn it on

  • Start the crate
  • Start the Magma Box (the button on the back side of the box and the button on the front end)
  • Start the PC (sbgat209)
  • Ping the different boards in the crate (normally it should be added in an automatic procedure -> check with Christian)
  • Put the low voltages on the motherboard
  • ./useFTDI
    to re-initialize correctly the link with the i2c master

LV and Current info

measurements performed with two modules connected on the red points of the motherboard (positions 214 and 223)

Name   No configuration After 1st config After 2nd config After3rd config
  V on the LV measured V on the MB measured V on the MB measured V on the MB measured V on the MB
    or A read on the LV or A read on the LV or A read on the LV or A read on the LV
V_D 3.150 V 3.07 V 3.055 V 3.029 V 3.029 V
I_D   1.069 A 1.073 A 1.343 A 1.330 A
V_ana 2.490 V 2.44 V 2.427 V 2.400 V 2.400 V
I_ana   0.144 A 0.324 A 0.765 A 0.764 A
V_IN 3.5 V 3.4 V 3.327 V 3.322 V 3.321 V
I _IN   1.730 A 2.976 A 2.997 A 3.007 A

Take a physics run

Here is the procedure to take a physics run with Chromini, based on what is done for Chromie 25 Easy Steps To Data Taking.

  • Start the PoS :
cd /home/xtaldaq/TriDAS
source setenv.sh
cd pixel/PixelRun/
./run.sh --xml ~/TriDAS/pixel/PixelRun/telescopeIphc.xml
  • On the xdaq page on a web browser --> sbgat209:1973 :
    • click on Initialize
    • select the configuration "PhysicsChromini"
    • click on Configure
    • then check on the PoS window that you see the FED phases example
  • Start the ferol
    • cd /opt/xdaq/bin/
      python fedKit.py
    • Type "4", "1", "Yes" and "/tmp" or press return if these values are already the default ones as on the example
  • Prepare the AMC13
    •  /opt/cactus/bin/amc13/AMC13Tool2.exe -c /home/xtaldaq/TriDAS/pixel_debug_tools/TTSStateCheck/address_tables/amc13/connectionSN43iphc.xml 
      en 9 f t 
  • Start the run on xdaq
  • Start the trigger on the AMC13
    •   lt c 
  • Stop triggering on the AMC13
    •   lt d 
  • Halt the run on xdaw
  • Stop the ferol by pressing "q"

The data taken are stored on "/tmp" as selected on the ferol step.

Take a calibration run

Here is the procedure to take a physics run with Chromini, based on what is done for Chromie Config And Calibration

  • Make a new alias
      cd /home/xtaldaq/TriDAS/Config
      /home/xtaldaq/TriDAS/pixel/bin/PixelConfigDBCmd.exe --insertVersionAlias calib 50 ChrominiDelay25 
whe 50 is equal to 49 (= the number of previous calibrations) +1 this existing calib aliases can be seen with the command
/home/xtaldaq/TriDAS/pixel/bin/PixelConfigDBCmd.exe --printVersionAliasList calib

    • From the bash history :
cd /home/xtaldaq/TriDAS/pixel
bin/PixelConfigDBCmd.exe --insertVersionAlias calib 51 ChrominiTBMDelay25
PixelConfigDBCmd.exe --printVersionAliasList calib
bin/PixelConfigDBCmd.exe --insertVersionAlias calib 52 ChrominiCalDel
PixelConfigDBCmd.exe --printVersionAliasList calib
bin/PixelConfigDBCmd.exe --insertVersionAlias calib 53 ChrominiVcThrCalibration    

  • Make a new calibration
      cd /home/xtaldaq/TriDAS/Config
      PixelConfigDBCmd.exe --insertConfigAlias ChrominiDelay25 calib ChrominiDelay25 amc13 Default dac Physics dcdc Default detconfig ChrominiDet fecconfig Default fedcard Physics fedconfig Default globaldelay25 Default lowvoltagemap Default mask Default nametranslation Default portcard Default portcardmap Default tbm Default tkfecconfig Default trim Default ttcciconfig Default ltcconfig Default powermap Default
    • Add a new directory
find . -name delay25.dat
cd /home/xtaldaq/TriDAS/Config/calib/
mkdir 50
cp 2/delay25.dat 50/

  • Start the PoS :
cd /home/xtaldaq/TriDAS
source setenv.sh
cd pixel/PixelRun/
./run.sh --xml ~/TriDAS/pixel/PixelRun/telescopeIphc.xml./run.sh --xml ~/TriDAS/pixel/PixelRun/telescopeIphc.xml
  • On the xdaq page on a web browser --> sbgat209:1973 :
    • click on Initialize
    • select the configuration "ChrominiDelay25"
    • click on Configure
    • start the run --> Unfortunately this is not working at the moment....

Do the reconstruction

Pixel Number Slot on the MB Fiber color (number) detID on the sketch Comment
M3672 221 green (3) 344462340 Layer 2 [1]  
M3211 222 dark blue (1) 344725508 Layer 1 [0] should we take another fiber to ease the reco ?
M3704 211 grey (5) 344200196 Layer 3 [1]  
M4643 212 black (8) 344201220 Layer 3 [0]  

Installation of the DAQ software (Ph2_ACF)

The DAQ PC is sbgat231, login xtaldaq, password xtaldaq.

The description and instalation of the DAQ soft is shown in the gitlab https://gitlab.cern.ch/cms_tk_ph2/Ph2_ACF

Here is some description of the framework https://indico.cern.ch/event/842824/contributions/3538260/attachments/1921782/3179353/DAQWorkshop_HandsOn.pdf from the tracker phase 2 DAQ workshop https://indico.cern.ch/event/842824/timetable/?view=standard

for setting up the FC7 : https://indico.cern.ch/event/842824/attachments/1920624/3177632/PreparingFC7.pdf

and for installing soft


on CC7

 sudo yum install boost
sudo yum install boost-devel

create a file (touch) sudo nedit sudo /etc/yum.repos.d/ipbus-sw.repo &

and add the following lines in that file

name=IPbus software repository

name=IPbus software repository updates

sudo yum clean all
sudo yum groupinstall uhal
sudo yum install root
sudo yum install root-net-http root-graf3d-gl root-physics root-montecarlo-eg root-graf3d-eve root-geom libusb-devel xorg-x11-xauth.x86_64
 sudo yum install cmake
git clone https://:@gitlab.cern.ch:8443/fravera/Ph2_ACF.git
mkdir Ph2_ACF/build 
cd Ph2_ACF/build 
sudo yum install pugixml
sudo yum install pugixml-devel
cmake ..
cd ..
source setup.sh

the list of available firmware :

./bin/fpgaconfig -c settings/D19CDescription.xml -l

To load another firmware :

./bin/fpgaconfig -c settings/D19CDescription.xml -f d19c_8cbc3-1_8cbc3-2.bin -i d19c_8CBC3_workshop.bin

to determine the firmware version to use :

./bin/fpgaconfig -c settings/D19CDescription.xml -i d19c_8CBC3_workshop.bin

to push into gitlab on the branch JAFromDAQWorkshop :

 git push --set-upstream https://gitlab.cern.ch/jandrea/Ph2_ACF.git JAFromDAQWorkshop

To load a new firmware, use the fbgaconfig binary:

 ./bin/fpgaconfig -h 

To get the list of available firmware :

  ./bin/fpgaconfig -c settings/D19CDescription.xml -l

and load that onto the sd card with

 ./bin/fpgaconfig -c settings/D19CDescription.xml -f firmware/d19c_2cbc3_none.bin -i d19c_2cbc3_none

then load the image to the fpga with

  ./bin/fpgaconfig -c settings/D19CDescription.xml  -i  d19c_2cbc3_none

Instructions for calibrating the system (CBC3 mini module for the moment)

  • start by verifying that the box of the mini-telescope is close and light tight. Deplete to -10 V and verify the current on the HV power supply. It should remain well below the microA. Once verified, you can set the HV to 400V, the full depletion being around 300V. After stabilizing, the current consumption of current at 400V should be (KIT double mini module) : 0.1377 microA, 0.4368 microA. This is tested within the casemate. Could be different in the lab.

The following calibration (offset and noise) can be done with external clock (if available)

 <Register name="ext_clk_en"> 1 </Register>   <!-- the external clock should be at 42.5 MHz (85/2) -->  

But the internal trigger should be used

 <Register name="trigger_source"> 3 </Register> <!-- default value is 3 --> 

to do : add pictures illustrating the results of the calbiration

bin/calibrate -f settings/IphcDescription.xml    

The clibration files are produced in the Results folder In IphcDescription.xml, change the path of in IphcDescription.xml the new ones obtained by the calibration

 bin/calibrate -f settings/IphcDescription.xml -n 

at full depletion, noise should be at 5-6 Vcth. Question : out of the scan, how to determine the Vcth value ? From the value of noise from the plots, one needs to calculat the threshold, as 5 sigma above the noise, so it is

threshod = 590 (the pedestal value, not to change) - noise*5(sigma).

Example, for a noise of 9, threshold = 590-9*5 = 545. this value has to be reported to

*Enable testpulses and put them on e.g 180.Testpulses can be enabled and put to a certain height (Low: 250 , high: 0, because of electron mode) with

  <TestPulse enable="1" polarity="0" amplitude="180" channelgroup="0" delay="0" groundothers="1"/>

  • set Vcth Threshold at 550 Vcth (Pedestals defaults value is 590, thus 40 Vcth*180 e-/Vcth ~7200e- threshold

  • disable external clock

   <Register name="ext_clk_en"> 0 </Register> 

  • set trigger value at 6

  <Register name="trigger_source"> 6 </Register> <!-- default value is 3 -->

  • enable handshake mode (see comments about handshake below)

  <Register name="data_handshake_enable"> 1 </Register>

  • run :
    bin/commission -f settings/IphcDescription.xml -m 0 -r 400 --notdc -l

  • disable testpulses

<TestPulse enable="0" polarity="0" amplitude="230" channelgroup="0" delay="0" groundothers="0"/>

  • set Vcth Threshold at 550 Vcth (Pedestals defaults value is 590, thus 40 Vcth*180 e-/Vcth ~7200e- threshold

    • Enable external clock

<Register name="ext_clk_en"> 1 </Register>

    • Enable external trigger

<Register name="trigger_source"> 5 </Register> <!-- default value is 3 --> 

    • run :
       bin/commission -f settings/IphcDescription.xml -m 0 -r 400 --notdc -l

the latency found (max of the distribution) has to be propagated to the xml file :

 <Settings threshold="420" latency="68"/> 

The same procedure as the one described in the section "Latency scan with signal particles" has to be followed, except that the call of the function should be :

 bin/commission -f settings/IphcDescription.xml -m 0 -r 400 --notdc -l

  <Register name="common_stubdata_delay"> 194 </Register>  


Installed on xtaldaq, connect, open firefox and go to http://sbgat231:8080/TB.First/

Data taking program and analyses

Link to the googlesheet with measurement points link

Bias scan and re-calibration

The idea of the scan is to determine a voltage point for which the amount of charge collected is relatively close to MIP kind of beam. The idea behind is to run under-depleted and to increase the thresholds so to deal with the extra noise, while keeping high efficiency. The procedure is the following :

  • use a low intensity beam. 10 fA seems to be ok,

  • measure the "efficiency" at 400 Volts (by looking at the number of events without any hits).

  • decrease the bias voltage to 25 Volts by steps of 25 volts, and for each point :

    • re-perform a s-curve scan for the various points, calculate the corresponding Vcth threshold, WARNING : that has to be done without beam

bin/calibrate -f settings/IphcDescription.xml -n

WARNING : intern trigger should be used

<Register name="trigger_source"> 3 </Register> <!-- default value is 3 -->

    • put back the beam, and take data (miniDAQ) for each voltage point. The threshold has to be update for each point, according to the previous scurve scan

./bin/miniDAQ --dqm -f settings/IphcDescription.xml -e 500000 --daq output.dat

WARNING : external trigger should be used

<Register name="trigger_source"> 5 </Register> <!-- default value is 3 -->

    • for each point, check how evolve the number of strip

Rate scan

this idea of this scan is to increase the rate of particles, and see at which point the module starts to show inefficiencies. On take then data with the command

./bin/miniDAQ --dqm -f settings/IphcDescription.xml -e 500000 --daq output.dat

And the compare the number of cluster for a given amount of trigger, with the low rate case.

WARNING : for low rate values, it is difficult to know the exact rate from the monitoring of the Cyclo. The rate has to be determined from the scintillators themselves. This can be done from the trigger counter positioned on the NIM rack. It is counting the number of triggers for 10 seconds => division by 10 should give the trigger rate. Some caveat however :

  • for this to work, the clock of the trigger and of the cyclo should be in perfect synch (for adjustments, see with Ulrich),
  • there is a factor of 2 difference between the trigger rate and the real particle rate (1 bunch over two is ignored), there is a veto there (if I (Jeremy) understood properly). But we need to ask Ulrich for the details.

Link to the googlesheet with measurement points link

Commissioning de la ligne

  • Contrôle du faisceau, focus, steering, diffuser, profiler, si tout va bien ca ne va pas prendre beaucoup plus qu’une journée. Cette partie sera essentiellement exécuté par Jacky Schuler et Michel Pellicioli. Le but sera d’abord d'avoir le faisceau sur le Faraday cup, étudier les paramètres du faisceau

Trigger tests

Tests to be done in the lab

  • Test scintillators with source. Characterise their response and verify they behave similarly. Same trigger rate for the same amplification,

  • Verify carefully the NIM cards, crate and cables. Make sure every component is behaving as it should (no false contact)

  • Rebuilt NIM logic carefully, with the controlled material, and test with a source

  • preparation of a third scintillators

Tests to be done in the beam

  • install a third scintillator, to control trigger efficiency and make rate studies.

  • test individually the scintillators in the beam, characterise their response and verify they behave similarly. Check measured rate vs beam intensity, estimate efficiencies

  • install the two scintillators and verify that the rates are the same. If the are not, invert in the telescope in two scintillators, to see if this is related to the position of the scintillator (to see if it is a acceptance/multiple scattering issue).

  • synchronisation with the 42.5 MHz clock of the cyclo, check rate rates, make a variation of the coincidence windows

  • study the synchronisation between 40 and 42.5 MHz (and possiblt 85 MHz * 40MHz?) simultaneously (important if we want to run the pixels at 40MHz) Understand the rates nad hte beam geometry, play with the focalisation of the beam.

Special request to the DAQ team : Can we have a multi hit TDC with DAQ ? Can we have bit pattern unit with DAQ?

Pixel telescope commissioning

Tests to be done in the lab

  • test and calibrate the modules with the DTB and HV, following the pro

  • test the moduel with a source : use external triggers and the DTB and test with signal. If scintillators not available, use random trigger with high frequancy.

  • finalise the assambly and test of the DAQ (Laurents and Christian, with Caroline, on it)

Tests to be done in the beam

  • test the whole system, if the telescope is running,

  • test with the DTB, if the telescope is not running.

-- JeremyAndrea - 2019-07-17

Topic attachments
I Attachment History Action Size Date Who Comment
JPEGjpg 20190716_102740.jpg r1 manage 2301.4 K 2019-07-22 - 09:58 JeremyAndrea  
JPEGjpg 20190716_104728.jpg r1 manage 2628.8 K 2019-07-22 - 09:58 JeremyAndrea  
JPEGjpg 20190716_105246.jpg r1 manage 2564.3 K 2019-07-22 - 09:49 JeremyAndrea  
JPEGjpg 20190717_090509.jpg r1 manage 2192.4 K 2019-07-17 - 09:42 JeremyAndrea  
JPEGjpg 20190717_090517.jpg r1 manage 2127.1 K 2019-07-17 - 09:42 JeremyAndrea  
JPEGjpg 20190717_090525.jpg r1 manage 2106.2 K 2019-07-17 - 09:42 JeremyAndrea  
JPEGjpg 20190717_090532.jpg r1 manage 2081.3 K 2019-07-17 - 09:42 JeremyAndrea  
Edit | Attach | Watch | Print version | History: r37 < r36 < r35 < r34 < r33 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r37 - 2020-01-17 - CarolineCollard
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Sandbox All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright &© 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback