TrigFTKAna and TrigFTKSim


Dead Channel Studies

HHH

(1) Find out ID structure

  1. To Find Out the Structure Of Inner Detector(ID)
  2. Modules in Barrel and Endcap Disk Detector

To Find Out the Structure Of Inner Detector(ID)


Beyond checking that the code does what we intend and beyond fixing the problem in the disks, namely that the efficiency does not decrease with dead channel fraction, we should better understand the layout of the pixel and SCT detectors:
  1. how many channels are there per readout chip? (different answer for SCT and pixel detectors)
  2. how many types of modules? where is each type located?
  3. how many readout chips per each type of module?
  4. how many modules per portion of the detector (barrel layer, disk number, etc.)
A collection of the pixel and SCT technical documents at: http://hep.uchicago.edu/~boveia/silicon-detector-papers.zip
Also see:
http://atlas.web.cern.ch/Atlas/GROUPS/INNER_DETECTOR/PIXELS/pixel.html
http://atlas.web.cern.ch/Atlas/GROUPS/INNER_DETECTOR/PIXELS/tdr.html
The answers to our questions are probably in those documents, but maybe not. Alternatively, we can use our large single muon samples to find out most of them. To do that, look at the wrapper files that you are feeding into the dead channel emulation script. For a given event, each hit found in that event corresponds to a single line in the wrapper file.
For pixel hits, the format for the line is
            cout << "S\t" 
                 << setw(14) << setprecision(10)
                 << gPos.x() << '\t' 
                 << setw(14) << setprecision(10)
                 << gPos.y() << '\t'
                 << setw(14) << setprecision(10)
                 << gPos.z() << '\t'
                 << 1  << '\t' // 1  pixel 0 sct
                 << m_pixelId->barrel_ec(rdoId) << '\t'
                 << m_pixelId->layer_disk(rdoId) << '\t'
                 << m_pixelId->phi_module(rdoId) << '\t'
                 << m_pixelId->eta_module(rdoId) << '\t'
                 << m_pixelId->phi_index(rdoId) << '\t'
                 << m_pixelId->eta_index(rdoId) << '\t'
                 << (*iRDO)->getToT() << '\t'
                 << (long)(best_parent ? best_extcode.eventIndex() : -1) << '\t'
                 << (long)(best_parent ? best_extcode.barcode() : -1) << '\t'
                 << setprecision(5) << static_cast(std::ceil(best_parent ? best_parent->momentum().perp() : 0.))
                 << '\t' // particle pt in MeV
                 << parent_mask.to_ulong() << '\t'
                 << '\n';

For SCT hits, the format is

            cout << "S\t"
                 << setw(14) << setprecision(10)
                 << gPos.x() << '\t'
                 << setw(14) << setprecision(10)
                 << gPos.y() << '\t'
                 << setw(14) << setprecision(10)
                 << gPos.z() << '\t'
                 << 0  << '\t' // 1  pixel 0 sct
                 << m_sctId->barrel_ec(rdoId) << '\t'
                 << m_sctId->layer_disk(rdoId) << '\t'
                 << m_sctId->phi_module(rdoId) << '\t'
                 << m_sctId->eta_module(rdoId) << '\t'
                 << m_sctId->side(rdoId) << '\t'
                 << m_sctId->strip(rdoId) << '\t'
                 << (*iRDO)->getGroupSize() << '\t'
                 << (long)(best_parent ? best_extcode.eventIndex() : -1) << '\t'
                 << (long)(best_parent ? best_extcode.barcode() : -1) << '\t'
                 << setprecision(5) << static_cast(std::ceil(best_parent ? best_parent->momentum().perp() : 0.)) << '\t' // particle pt in MeV
                 << parent_mask.to_ulong() << '\t'
                 << '\n';
For our purposes, each hit is like a sampling of a piece of the detector. By looping over large numbers of events, we can collect samples for the entire detector and map out its characteristics (like an x-ray). For example, ( gPos.x() , gPos.y() , gPos.z() ) is the best known position of each hit (if the detector does not measure one of the dimensions, e.g. Z for the axial SCT strips, the position assigned for that dimension is just some constant average position of the module). Plotting ( gPos.x() , gPos.y() ) for all axial or pixel hits in all events will give you a 2D (x,y) view of the active detector geometry. Plotting "m_pixelId->phi_module(rdoId)" vs "m_pixelId->eta_module(rdoId)" for "m_pixelId->barrel_ec(rdoId)==0 && m_pixelId->layer_disk(rdoId)==0" will show you the relationship and range of phi_module and eta_module for the barrel part of layer 0. Etc. Using this trick you can answer many of the four questions above (since there is no chip number in the wrapper output, we'll have to figure something else out for that).

Modules in Barrel and Endcap Disk Detector

To generate hit files from wrapper file
/home/tangjian/FastTrackerAnalysis/summer2010/TrigFTKAna/test
grep "S" Input_SingleMuon_wrapper > singleMuon_hits_tm
cut -d' ' -f2- singleMuon_hits_tm > singleMuon_hits
there are some lines that do not have the same num of columns as others(the 3rd column of these lines are '1' or '0'), so need to remove these lines: sort -r -n +2 -3 singleMuon_hits > singleMuon_hits_new then find all the lines with the 3rd column '1' or '0' and remove these lines
sometimes the file is too large so you can trim it to a smaller one: awk 'NR%10==1' inputfile > outputfile (which print every 10th line beginning from line 1)

Results
Layout of Modules in Pixel and SCT detector (with projections using hits from WHbb events)

(0) Performance vs % of dead channels(random pick)

How does performance deteriorate as a function of the % of dead silicon channels?(***randon pick of channels to be dead***)

04/18/2010: generate wrapper files with #% of dead channels
     codes: /home/tangjian/FastTrackerAnalysis/summer2010/TrigFTKAna/test/
     cleanup_training_wrapper.cpp
    > cleanup_training_wrapper -i input_idealfile -o output_realistic_file --realistic-layer -1 --realistic-dead-channel-frac 0.1 --realistic-dead-module-frac 0
  this would read the input wrapper file and produce a file 'output_realistic_file' with a randomly-selected 10% of all channels thrown out and 0% of randomly-selected modules thrown out, for all (layer==-1) layers.

05/21/2010: Generate Tracks with the wrapper files
  Follow page https://twiki.cern.ch/twiki/bin/view/Atlas/FastTrackerNewTutorial#Downloading_the_TrigFTKSim_packa
  Simple steps:
        0; go to /home/tangjian/FastTrackerAnalysis/summer2010/TrigFTKAna/scripts and do source setup.sh,
        1, Prepare the input file list: go to TrigFTKSim/scripts
            echo /home/tangjian/FastTrackerAnalysis/summer2010/TrigFTKAna/test/wrapfile_output_test_0.01.dat.bz2 > ../config/input/inputprod_raw_test01.list
        2, build Athena environment and boost libraries, choose the Lumi and banks you need: go to TrigFTKSim/standalone/:
             >source bootstrap.sh
             >make -f Makefile.boost.mk
        3, >go to TrigFTKSim/scripts: ./ftk.py with options
        4, An example:>./ftk.py -a fullchain -d raw_11L_50x64x36n200M_test01 -n100 -h -c -o 'MAXPATTERNS=8000000,_PATT=patt.bz2,_GCON=gcon.bz2' -r /share/ftkdata1/tangjian/deadchannels -t /pnfs/uchicago.edu/data/tier3/user/user.AntonKapliy/ftkbanksV14 -m 16 -q pbs (Note: 'test01' should be changed to whatever you named the input list file, and do not use ftkdata dir but use ftkdata1 instead)
        5, "-r /share/ftkdata/tangjian/deadchannels" is the output location, and you can find the trackfile at "raw_11L_50x64x36n200M_test01/tracks_merge/8" in that directory
        check the running process:


 

05/27/2010: Generate Eff root files
05/30/2010: Generate Plots

(2) Encoding Module-Layouts

Instructions from Antonio



Tools