e-mail to paus@mit.edu
A generator information based simulation of parts of the CDF II trigger relevant for b physics is presented. The simulation is based on generator level information to which parametric smearing is applied.
Track trigger: The track trigger comprises simulations of the XFT and XTRP boards, the Level-1 track trigger logic, the SVT boards and the Level-2 track trigger logic.
Muon Trigger: A simulation of the CMU chambers together with Level-1 and Level-2 di-muon trigger simulation are also included. Plans for electrons from CES/CPR/CCR exist but have not yet been implemented.
Vertex: In addition, z vertex smearing at the generator level can be specified. The vertex treatment in particular the z position is very critical for the trigger since it changes the acceptance. Since the HEPG bank does not contain the vertex position it has to be generated. GenTrig has the possibility to generate a vertex but this vertex is not stored in the event record which is fine for standalone studies. It is therefore recommended when generating smaples which are written to disk to generate the vertex externally using the GenPrimVert module in genratorMods which write the MVTX storable bank. This bank will then automatically be picked up by GenTrig if it is found in the event record.
Standard CdfObjects: On the request of various people an interface to write out standard CdfTrack, CdfTrackColl has been added and is technically working. More tuning is certainly needed. Presently in the work is the interface to CdfMuon, CdfMuonColl and some scheme for saving the trigger information.
Example tcl files: The GenTrig or FastSim contains many features which are tunable by talk-to TCL scripting. Some standard tcl files are available in:
GenTrig/tcl/*.tcl
Caveat: The simulation does not replace a detailed analysis of the trigger at the hit level. Instead it provides a tool which allows quick estimates of event yields for B hadron decays.
For the absolute CDF beginner here is a terse startup description in steps of how to get to run GenTrig and how to develop some analysis using the program in an efficient way. This is very much standalone and thus nice as a starter. This is going to be happening on FCDFSGI2
source ~cdfsoft/cdf2.cshrc setup cdfsoft2 3.13.0int5
cd newrel -t 3.13.0int5 run2 cd run2
rm -r bin lib tmp mkdir /cdf/spool/$USER/run2 mkdir /cdf/spool/$USER/run2/bin mkdir /cdf/spool/$USER/run2/lib mkdir /cdf/spool/$USER/run2/tmp ln -s /cdf/spool/$USER/run2/bin bin ln -s /cdf/spool/$USER/run2/lib lib ln -s /cdf/spool/$USER/run2/tmp tmp
addpkg -h GenTrig
gmake gmake GenTrig.tbin
cd GenTrig/tcl run-gentrig # or run-bsjpsiphi
GenTrig/src/GenTrigModule.cc GenTrig/GenTrig/GenTrigModule.hhYou want to change the method analysis() and include your own histograms. There are already some example plots in there. Always remember to define the histogram in
GenTrig/GenTrig/GenTrigModule.hhas an example plot you can look at _hAnaPhi.
A large number of events have been processed using QuickSim described above. They are maintained on fcdfsgi2 in the directory:
In case you want to produce new files send e-mail to paus@mit.edu they might just be produced for you or checkout the tcl file fastsim.tcl in:
GenTrig/tcl/fastsim.tcl
A typical problem is in the MonteCarlo to do particle association. This is very simple in QuickSim since the track Id has been chosen to be the index of the corresponding particle in the HEPG bank.
The code snippet below shows how to use this feature.
CdfTrackView_h trks; CdfTrackView::defTracks(trks); CdfTrackView::const_iterator itrk,jtrk; EventRecord::ConstIterator Ev_it(Event,"HEPG_StorableBank"); ConstHandleh_hepg(Ev_it); const HEPG_StorableBank &hepg = *h_hepg; unsigned int i,j; // Loop over all tracks for (itrk=trks->contents().begin(); itrk!=trks->contents().end(); itrk++) { for (jtrk=itrk; jtrk!=trks->contents().end(); jtrk++) { // Not the same track and opposite charge if (itrk!=jtrk) { i = (*itrk)->id().value(); j = (*jtrk)->id().value(); double pt = sqrt(hepg.Px(i)*hepg.Px(i)+hepg.Py(i)*hepg.Py(i)); cout << "HEPG Properties"; cout << "\n-- Id: " << setw(6) << (*itrk)->id() << " Pid: " << setw(6) << hepg.idhep(i) << "\n-- Pt: " << setw(6) << pt << " --\n"; cout << "HEPG Properties"; cout << "\n-- Pid1: " << hepg.idhep(i) << "\n-- Pid2: " << hepg.idhep(j) << "\n-- Mo-1: " << hepg.idhep(hepg.jmo1hep(i)-1) << "\n-- Mo-2: " << hepg.idhep(hepg.jmo1hep(j)-1) << " --\n"; } } }