welcome to plackett.com
Professional Personal Protected
CV and Docs Magnetic Shielding HPD Electronics Optical Alignment Testbeam Work Theory and Background
Software

Here is a brief list of the rather messy but operational c++ I've written for various wafer analysis tasks as of Thursday 26th August I may update these at some point.

  • pixel_class.h - this class lets you calculate thresholds, noise levels and dead areas for assembly / readout chip pixels. It does not have an automatic read in function so the values from the file/db have to be set by the program calling the class.
  • chip_data_class.cpp - still a class file but misnamed . calls the pixel class - reads in the vth_scan.txt files and can also access individual pixels within itself. has methods to produce overall chip quality figures
  • chip_details.cpp - the proper source for a program that will take a file and treat it like a vth_scan.txt file - outputs threshold and noise information and the percentage of good pixels
  • wafer_class.cpp - another misnamed class (sorry) this scans through all the chips and produces an in terminal and html outputs for the whole wafer of readout chips. It can also be used to set the levels of decesions about the goodness and badness of pixels.
  • castor_class.cpp - this is a class that provides access to the CERN tape robot Castor - it can check the existence of files and retrieve and put them - it also has a massive "wafer_get" method that grabs all the chip data.
  • wafer_oo_full.cpp - using all of t he classes given above -0 all you have to do is type in the name of the chip in the interactive interface and it finds it on castor, gets it puts it on /tmp in the right structure and analyses it.
  • wafer_oo_analyse.cpp - as above without the wafer getting. This time enter the path route from where the program is executed and specify the wafer directory so /tmp/monky/Wafer_X45678/ - remembering THIS "/"
  • testpix_thresh - an incomplete piece of code to extract the test pixels threshold values, useful if you want to examine just a few pixels on a chip or assembly

all the code above is in a zip file here

now follows some random musings on how it works in no particualr order

The heart of the code is the pixels threshold finder (pinched wholesale from wafer_combo my aweful c program) although in this version its been refined a bit as the number of triggers and the number of scans are automatically detected. At some popint i may put apropper fitting function in there but as it has to be done 8000 times for each chip it might slow things down a bit.

The pixels noise level is calculated by taking the s-curve inverting the half above the threshold calculated earlier to give a rough gaussian and doing apopulation based standard deviation calculation on teh remaining points. This was also taken straight from my previous program.

At the chip level the averages and spreads of these two values are calculated

good and bad pixels are selectd on 3 criteria that are adjustable fomr the wafer level down. basically ranges are set on 3 key values for each pixel. the threshold, the width and probaly more importnatly the average value for the whole scan. This final value lets you determine whether the pixel is always on (noisy) as it would have an unusually high average value or dead giving it a low average. The two bounds are called the hotlevel and the deadlevel and at the moment i have set them at 0.7 and 0.55 this however was calibrated on only ONE wafer and can almost certinaly be improved upon

the castor_class is a real mess, it has littel logical structure andjust performs a seriesof random but useful disk operations to castor and local disks by bashing linux commands to the system. Unfortunaly this means that you must be running in linux fo ti to work. This also holds true for where i have done other file system operation in fiel names - it may not run under windwos without some alteration that im afraid i cant advise on at the moment.

this code is almost entirly devoid of pointers because i dont feel i fully understand them or their operation well enough not to horibly break things - the only exception its the array of pixels in teh chip class but i had help on that one. This means that if there is dire need it could poisbly be javified reaonbaly easily - or at least without a complete rewrite