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.hh
You 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.hh
as 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"; } } }