README for "camera" (for camera.cxx version 1.5/camera.h 1.4/creadparam.cxx 1.2/ creadparam.h 1.2/camera-v.h 1.2) D. Petry, 18-2-2000 This version includes drastic changes compared to camera.cxx 1.4. It is not yet finished and not immediately useful because the trigger simulation is not yet re-implemented. I had to take it out together with some other stuff in order to tidy the whole program up. This is not meant as an insult to anyone. I needed to do this in order to be able to work on it. This version has been put in the repository in order to be able to share the further development with others. If you need something working, wait or take an earlier one. Summary of the changes compared to camera.cxx 1.4: 1) General removal of all the #defines which activate/deactivate features of the program. This program is to simulate a Cherenkov telescope and it is going to have all the features it needs. If features have to be deactivated, this should happen via the parameters file. The #defines only lead to confusion and errors on the side of the users. 2) Removal of the old implementation of the trigger. The future trigger will be implemented in the class MTrigger or somewhere else. 3) In order to simulate the NSB, it was necessary to introduce the array class Photoelectron photoe[iMAXNUMPHE] One instance of Photoelectron contains the arrival time and the the pixelnumber for a photoelectron. No distinction is made whether the photoelectron came from Cherenkov light or from the NSB. This array is filled with photoelectrons first by the new function int produce_phes( ... ) and then (if simulateNSB == TRUE) by the second new function int produce_nsb_phes( ... ) The filled array photoe[] can then be given to the trigger and FADC simulation. The time of the first phe and the time of the last phe is available in two float variables (arrtmin_ns, arrtmax_ns). If the NSB simulation is switched on (simulateNSB == TRUE), arrtmin_ns and arrtmax_ns are modified such that there is at least SLICES*WIDTH_TIMESLICE simulated NSB. In this way, the FADC simulation obtains realistic data. If the event is longer than the foreseen digitization time, the offset SIMTIMEOFFSET_NS is added such that there is some NSB before and after the Cherenkov information. 4) In order to prepare the NSB simulation (read the starfield, calculate rates etc.) a third new function had to be written: produce_nsbrates( ... ) It is used before the start of the loop which reads the Cherenkov data. Internally it uses produce_phes(...) in order to turn the starfield file into photoelectrons. In this way, I made sure that exactly the same code is used to simulate the NSB response and the Cherenkov light response. 5) The function produce_nsb_phes( ... ), mentioned above, also produces the baseline shift voltage baseline_mv[] for each pixel. This is necessary for the Trigger and FADC simulation. 6) All three functions produce_nsbrates( ... ), produce_phes( ... ), and produce_nsb_phes( ... ) are defined in camera.cxx . Since they cannot really be used anywhere else except in the camera simulation, it didn't make sense to put them in a separate file. 7) The outputfile in ".phe" format was removed. People will in future use the ROOT output file or the data ASCII file. Careful: the ROOT raw data part - like the trigger - does not properly work in this version. Please wait until the next one. Correspondingly, the parameter output_file in the parameters file was removed. 8) A new parameter was added to the parameters file: starfield_file The new version code of the camera parameter file is 0.3 ! 9) The old parameters "nsb_mean" and "nsb_on/off" continue to control the NSB generation. nsb_mean contains the mean number of photoelectrons caused by diffuse NSB per ns for one of the central pixels (small pixels). The value is automatically scaled for the larger pixels. nsb_on switches the NSB generation on. nsb_off switches it off. In this case, no starfield file is read. 10) The starfield file which is needed for the NSB generation, has to be produced using the present version of the reflector with input from the starfield generator. The integration time which is needed for the normalization of the non-diffuse NSB, is taken from the "primary energy" field of the MCeventheader of the starfield file! This is where the starfield generator puts it. If you take the input from reflector output not produced with starfield generator data, you will have to take care of this. 11) The Cherenkov data is now read via a normal C-style filepointer. This makes it more easy to read from stdin and to reposition the filepointer. This is not a change in the reflector format. 12) The function read_pixels(...) was improved such that it notices if a faulty QE-file is given. The old version read a truncated QE file without complaining and used house-numbers for the QE as a result. The read QE table is now at least checked for completeness and if all values are inside the limits. 13) The pixelization is now done in produce_phes(...) and should be correct. 14) The QE simulation is done in produce_phes(...) as well. In order to save time, a linear interpolation was used instead of the Lagrangian. Additional safety checks were added. The new function lin_interpol(...) was created. 15) If you need to use this program for CT1, you have to produce a .def file which describes it. Most of the direct references to CT1 were removed. The rest will hopefully be tidied up soon. As a general program, camera should be able to simulate any CT if the right .def file is given. Probably I have forgotten something. But I think these are the main points. The program contains some debugging "couts" which are commented out. They can be deleted soon.