.
Details of L2-algos (triggers) as implemented for pp run in February of 2008
Mapping used during data taking is in attachment 1)
Graph illustrates the key changes in L2 processing scheme allowing for fast event abortion. Jan
Common BEMC, EEMC calibration algos (do not abort)
int par_dbg; // use 0 for real event processing int par_gainType; enum {kGainZero=0, kGainIdeal=1, kGainOffline=2}; int par_nSigPed; // ADC, filters towers float par_twEneThres; // GeV, filters towers float par_hotEtThres; // GeV, only monitoring histos
------- tower threshold definition------ float adcThres=x- > ped+par_nSigPed* fabs(x- > sigPed); float otherThr=x-> ped+par_twEneThres*x-> gain; if(adcThres < otherThr) adcThres=otherThr; -------- computing ideal gains ------- for(i=0;i<BtowGeom::mxEtaBin;i++ ){ float avrEta=-0.975 +i*0.05; /* assume BTOW has fixed eta bin size */ if(i==0) avrEta=-0.970;// first & lost towers are smaller if(i==39) avrEta=0.970; btow.cosh[i]=cosh(avrEta); btow.idealGain2Ene[i]=par_maxADC/par_maxET/btow.cosh[i]; } ---------- peds,gains, masking bad towers by threshold -------- if (par_gainType!=kGainIdeal) return -102; geom->btow.gain2Ene_rdo[x->rdo]=geom->btow.idealGain2Ene[ietaTw]; geom->btow.gain2ET_rdo[x->rdo]=geom->getIdealAdc2ET(); geom->btow.thr_rdo[x->rdo]=(int) (adcThres); geom->btow.ped_rdo[x->rdo]=(int) (x->ped); geom->btow.ped_shifted_rdo[x->rdo]=(unsigned short)(par_pedOff - x->ped); -------- event loop------- for(rdo=0; rdo < BtowGeom::mxRdo; rdo++){ if(rawAdc[rdo] < thr[rdo])continue; if(nTower > =mxListSize) break; // overflow protection adc=rawAdc[rdo]-ped[rdo]; //do NOT correct for common pedestal noise et=adc/gain2ET[rdo]; hit-> rdo=rdo; hit-> adc=adc; hit-> et=et; hit-> ene=adc/gain2Ene[rdo]; hit++; nTower++; } btowCalibData.hitSize=nTower;
L2-btowCal08 Compute CPU/eve MPV 42 kTicks, FWHM=6 Reference: L2:jet06-algo CPU/eve MPV 57 kTicks, FWHM=11
#BTOW_hot tower _candidate_ (bHotSum=67 of 50000 eve) :, softID 1397 , crate 21 , chan 156 , name 07tj37 #BTOW_token_QA: _candidate_ hot token=2 used 13 for 50000 events, token range [1, 4095], used 4095 tokens
L2-high-energy-Algo ( 100% accept)
L2-high-ene-algo (does not abort)
int par_dbg; // use 0 for real event processing int par_maxList; // can't exceed hardcoded value of 150 int par_adcThres; // in ADC counts above peds
int hiSize=getListSize(token); const unsigned int *value=getListData(token); printf("pr2-%s: dump %d acceted towers for token=%d\n softID ADC-ped\n",getName(),hiSize, token); for(int ic=0;ic < hiSize;ic++,value++) { int adc=(*value) > > 16; int softID=(*value)&0xffff; printf("%4d %d, \n",softID,adc); }
-------- event loop------- for(i=0;i< hitSize;i++,hit++) { if(hit->adc< par_adcThres) continue; if(hiTwEve-> size>=par_maxList) break; // overflow protection int softID=mRdo2towerID[hit->rdo]; (*value)= ((hit-> adc) <<16 )+ softID; // store composite value hiTwEve-> size++; value++; // increment index }
Descripion: this algo selects high-energy towers from BTOW & ETOW data and take advantage of common calibration to be deployed at L2 in February of 2008. The common (for B & E) ADC threshold is defined in units of adc above ped i.e. in ET. The output of this algo _one_ lists of pairs {adc,softID}. You need 2 instances of this ago to cover E & B-EMC. Saving of those lists to disk is beyond the scope of this algo. SoftID is defined as follows: *BTOW : traditional softID [1-4800] used since 20th centry. *ETOW: range [0..719], eta index changes slower int ieta= (x-> eta-1); int iphi= (x-> sec-1)*EtowGeom::mxSubs + x-> sub-'A' ; int softId= iphi+EtowGeom::mxPhiBin*ieta; There is a hardcoded limit on the max list length at 256 towers. In case of an overflow a random (not realy) selection of towers will be added to the list until the software limit is reached.
L2:hienBtow08 Compute CPU/eve MPV 1 kTicks, FWHM=2 L2:hienBtow08 Decision CPU/eve MPV 0 kTicks L2:hienBtow08 Deci+Comp CPU/eve MPV 2 kTicks, FWHM=3
L2-pedestal monitor-Algo ( 100% accept)
par_pedSubtr =rc_ints[0]!=0; par_speedFact =rc_ints[1]; par_saveBinary=rc_ints[2]!=0; par_dbg =rc_ints[3]; par_prescAccept=rc_ints[4];
time spent in L2-ped is proportional to # of towers processed per event. speed=1 means for every event process all 4800+720 towers, takes 1mSec speed=2 means for the first event process tower 1,2, 5,6, 9,10,...., takes 500 uSec for the second event process tower 3,4, 7,8, 11,12,...., takes 500 uSec repeat So L2ped runs 2x faster but effectively you get 1/2 of stats for all towers. speed=4 means : 1st eve works with towers: 1,2,3,4, 17,18,19,20,... takes 250 uSec 2nd eve works with towers: 5,6,7,8, 21,22,23,24,... 3rd ... 4th eve ... repeat You got the pattern. Allowed 'speeds' are common divider of 4800 & 768. Allowed speed values: 1,2,4,8,16,32,64,192 But even if you type sth absurd L2ped will correct it to the closest correct value.
RTS params
2 int dbg, prescaleAccept 4 float seedEtThres, clusterEtThres, eventEtThres,solationEtThres two sets for B & E. ======== ALGO ======= 1. Get list of towers provided by the L2 main shell 2. Sort the list in descending E_T 3. Loop over list until tower below seed threshold is found a. Find the highest group of 2x2 clusters adjacent to seed tower b. Form a cluster c. Save to list of clusters d. Mark all towers in 2x2 cluster as "used" 4. Repeat loop until all seed towers are exhausted 5. Loop over all clusters a. Find highest E_T cluster b. If ( cluster E_T > cluster threshold ) i. Accept event ii. Store information in the L2Result array - mean eta-bin - mean phi-bin - tower ID for seed tower - a relative ID specifying which of the 4 possible tower clusters was chosen - ET of cluster - number of nonzero towers in cluster - an isolation E_T sum (placeholder for later, set = 0).
Params:
// unpack params from run control GUI par_cutTag = rc_ints[0]; par_useBtowEast= (rc_ints[1]&1 )>0; par_useBtowWest= (rc_ints[1]&2)>0; par_useEndcap = rc_ints[2]&1; int par_adcThr = rc_ints[3]; // needed only in initRun() par_minPhiBinDiff=rc_ints[4]; par_oneJetThr = rc_floats[0]; par_diJetThrHigh= rc_floats[1]; par_diJetThrLow = rc_floats[2]; par_rndAccProb = rc_floats[3]; par_dbg =(int)rc_floats[4];
In order to accommodate the larger number of desired triggers in the old TCU, the following algorithms can now read in masks to be checked against the 128 lastDSM input bits before decision() is called:
L2btowGamma
L2etowGamma
L2jet
L2jetHigh
L2upsilon
L2btowW
The masks are located in ~developer/emc_setup on the l2 machine, and must be named %s.lastDSM_mask , where %s is the name of the algorithm (subtract the 'L2' from the list above). These files contain 8 integersthat correspond to the 8 unsigned shorts in lastDSM[] in the trigger data.
If TCU_type!=2 we are assumed to be using the old TCU, and at the start of each run the code that initializes each l2 algorithm will attempt to read these files. If they can't be found, then the mask is assumed to be not used for that particular algorithm.
Each time decision() is about to be called for one of the above algorithms, we first pass in the lastDSM array to be checked against these 8 unsigned shorts. Each ushort in the array is byte-swapped so that the endian-ness of the two sets agrees. Note that lastDSM[0] does not seem to correspond to input channel 0 in Eleanor's LD301 documentation.
At latest look (Feb 27), the values in the array seem to be swapped in the same fashion as they are in the barrel code that looks at layer 2 of the DSM:
lastDSM[0] corresponds to input channel 3
lastDSM[1] corresponds to input channel 2
lastDSM[2] corresponds to input channel 1
lastDSM[3] corresponds to input channel 0
lastDSM[4] corresponds to input channel 7
lastDSM[5] corresponds to input channel 6
lastDSM[6] corresponds to input channel 5
lastDSM[7] corresponds to input channel 4
* verify every aborting algo is using random accept prescale based on prescale method and is randomly initialize upon start. I know L2-jet & L2-http-barrel are using rnd(), I suspect L2-http-endcap is not randomly initialized. Check them all.
* L2-jet needs change of jet size to 1x1.
* experiment with L2-Wbos algo in the barrel, needs TOF unpacking
* consider converting L2-http in to L2-eta , for EMC calibration purposes, Jason may have working prototype, but slow version due to memset
Jan
Every algorithm has the opportunity to write out a small report into the L2Result array after each decision(). The sizes of these results are fixed within a year so that they don't overwrite others unexpectedly. They should not be changed without talking to the L2 algorithm maintainer. The starting position for each is defined in terms of the offset from the start of the L2Array. The values during the run were as follows:
Algorith | Offset |
(EMC_CHECK) | 1 |
EMC_PED | 2 |
Barrel Gamma | 3 |
Endcap Gamma | 6 |
Dijet | 9 |
Upsilon | 17 |
Barrel W | 20 |
Dijet (Higher Et) | 25 |
Endcap Hien | 0 |
Barrel Calib | 0 |
Endcap Calib | 0 |
Barrel Hien | 0 (C2Result) |
This algorithm is intended to provide access to the 16 lastDSM output bits, and should only be needed when the old TCU is being used.
This algorithm reads in 5 ints from run control:
[0] onbits0
[1] offbits0
[2] onbits1
[3] offbits1
[4] number of onbits+offbits pairs
The logic used is as follows:
if((lastDSM & p->onbits[0]) != p->onbits[0]) return 0;
if((~lastDSM & p->offbits[0]) != p->offbits[0]) return 0;
repeated for [1] if the number of pairs is > 1. A byte swap occurs before this logic is reached, so that both ushorts should have the same endian-ness. If none of the 'if's fire, the algorithm returns 1.
This algorithm searches for localized energy distributions in the barrel calorimeter, and will not run if the BTOW is not in the run.
This algorithm reads in 2 ints and 2 floats from run control:
[i0] debug
[i1] Random Accept Prescale
[f0] Et threshold for seed
[f1] Et threshold for cluster
The logic used is as follows:
Every tower with Et>f0 is added to a list. The list is then checked in order, summing the cluster around it and returning Accept if sumEt>f1
The Random Accept Prescale value sets the prescale for random accept, described elsewhere.
If debug>0 debug messages are printed.
This algorithm searches for localized energy distributions in the endcap calorimeter, and will not run if the ETOW is not in the run.
This algorithm reads in 2 ints and 3 floats from run control:
[i0] debug
[i1] Random Accept Prescale
[f0] Et threshold for seed
[f1] Et threshold for cluster
[f2] Et threshold for event
The logic used is similar to L2btowGamma, but etowGamma saves more information about each event. All possible clusters per event are made (save for those that overlap other clusters) and added to a list if clusterEt>f1. If at least one cluster has clusterEt>f2, the event is accepted.
The Random Accept Prescale value sets the prescale for random accept, described elsewhere.
If debug>0 debug messages are printed.
The mapping is defined thusly
>> tow = EtowGeom::mxEtaBin *phi + eta;
tow = 0 ==> 01TA01
tow = 1 ==> 01TA02
..
tow 718 ==> 12TE11
tow = 719 ==> 12TE12
12 consecutive towers are in the same slice in phi.
This algorithm packages tower ADC values and soft IDs for use outside of L2. It always accepts, and in the current configuration is cannot be attached to a particular trigger, but rather runs for each event.
This algorithm reads in 3 ints, which are hard-coded in algo_handler.c:
[i0] debug=0
[i1] ADC threshold=60
[i2] max L2hienList size=120
The logic used is as follows:
A switch is set in the constructor so that one instance of the L2hienAlgo reads barrel towers and the other endcap towers.
For each calibrated tower, if ADC>i1 it is added to L2hienList (up to i2 towers total). The barrel version then adds the first (up to) 40 towers (whether above i1 or not) to the L2hienResult, which is written to C2Result in l2new.
If debug>0 debug messages are printed.
This algorithm searches for jet-like energy distributions in the barrel and endcap calorimeters, and will run even if one or the other is not in the run.
This algorithm reads in 1 int from run control:
[i0] setup version, which controls which of ~developer/emc_setup/algoJet2009.setup* is used to set the parameters for the algorithm
This algorithm reads in 5 ints and 9 floats from the selected file:
[i0] What parts of the BEMC to use (1=East, 2=West, 3=both)
[i1] Whether to use the EEMC (>0 = yes)
[i2] par_adcThr (unused?)
[i3] debug
[i4] Random Accept Prescale
[f0] Et threshold for single jet
[f1] par_diJetThrHigh
[f2] par_diJetThrLow
[f3] par_diJetThr_2
[f4] par_diJetThr_3
[f5] par_diJetThr_4
[f6] par_diJetThr_5
[f7] par_diJetEtaHigh
[f8] par_diJetEtaLow
The logic is fairly complex. Brian Page is the maintainer of the jet code, so questions should be directed to him.
The Random Accept Prescale value sets the prescale for random accept, described elsewhere.
If debug>0 debug messages are printed.
This algorithm records the ADC values from the ETOW and BTOW for pedestal studies.
This algorithm reads in 5 ints from run control:
[i0] ped subtraction flag
[i1] speed factor
[i2] 'save binary' flag
[i3] debug
[i4] prescale for accept
The logic used is as follows:
Each event, ADCs from 1/i1 (where i1 is rounded off to be 1,2,4,8,16,32,64, or 192) of the barrel and endcap are histogrammed by rdo. The selected regions roll, so that [0,1/i1] is histogrammed the first event, [1/i1,2/i1] the next, etc.
If i0>0, instead of histogramming the raw ADC, the pedestal is subtracted first, allowing the residual to be seen.
if i2>0 the entire histogram is saved at the end of the run rather than just keeping [-10,100] ADC.
If the prescale for accept is set greater than zero, then the algorithm no longer fills histograms, and simply does the following for every event:
if((rand()>>4) % par_prescAccept ) return false;
return true;
This is NOT the same as the procedure for the Random Accept Prescale.
If debug>0 debug messages are printed.
This algorithm searches for upsilons in the barrel, and will not run if BTOW is not in the run.
This algorithm reads in 1 int from run control:
[i0] setup version, which controls which of ~developer/emc_setup/algoUpsilon2009.setup* is used to set the parameters for the algorithm
This algorithm reads in 4 ints and 9 floats from the selected file:
[i0] prescale
[i1] Whether to mask hot towers dynamically
[i2] how many events to take between updates to the dynamic mask
[i3] Random Accept Prescale
[f0] fL0SeedThreshold
[f1] fL2SeedThreshold
[f2] fMinL0ClusterEnergy
[f3] fMinL2ClusterEnergy
[f4] fMinInvMass
[f5] fMaxInvMass
[f6] fMaxCosTheta
[f7] fHotTowerTheshold
[f8] fThresholdRatioOfHotTower
The logic is fairly complex. Haidong Liu is the maintainer of the upsilon code, so questions should be directed to him.
The Random Accept Prescale value sets the prescale for random accept, described elsewhere.
This algorithm searches for energy depositions in the barrel, and will not run if BTOW is not in the run.
This algorithm reads in 2 ints and 2 floats from run control:
[i0] debug
[i1] Random Accept Prescale
[f0] Et threshold for seed
[f1] Et threshold for cluster
The logic is as follows:
For each tower with Et>f0, each 2x2 tower patch around it is summed. As soon as one of these 2x2 patches has Et>f1, we accept the event.
The Random Accept Prescale value sets the prescale for random accept, described elsewhere.
if debug>0, various debug information will be printed.
Run time params 2 int dbg, randomAcceptPrescale 2 float seedEtThres, clusterEtThres (GeV) This algo works only with BTOW ADCs ======== L2 W ALGO ======= 1. Get list of towers w/ energy provided by the common L2 calib algo 2. Form smaller list of seed towers above seedTH 3. Loop over seed towers a. Find the highest cluster ET out of 4 groups of 2x2 towers containing the seed tower b. if Et > clusterET accept event, set trgBit=2, do not try any other cluster 4. try random accept - set event counter at random start - increment by 1 for every input event - issue random accept if (eventCounter % randomAcceptPrescale == 0) - if accepted set trgBit=1
5. Accept event if trgBit is 1 or 2 6. Store information in the L2wResult[.] array - seed eta-bin - seed phi-bin - seed ET - cluster ET - trgBits
StMuEvent* muEve = mMuDstMaker->muDst()->event(); TArrayI& l2Array = muEve->L2Result(); unsigned int *l2res=(unsigned int *)l2Array.GetArray(); printf(" L2-jet online results below:\n"); int k; for (k=0;k<32;k++) printf("k=%2d val=0x%04x\n",k,l2res[k]); const int BEMCW_off=20; // valid only for 2009 run L2wResult2009 *out1= ( L2wResult2009 *) &l2res[BEMCW_off]; L2wResult2009_print(out1); StMuTriggerIdCollection *tic=&(muEve->triggerIdCollection()); assert(tic); const StTriggerId &l1=tic->l1(); vectoridL=l1.triggerIds(); printf("nTrig=%d, trigID: ",idL.size()); for(unsigned int i=0;i
Used thresholds: seedET>9 GeV, clusterET>14 GeV
Fig 1. LT=10/pb. Left: W events, right: QCD events
Fig 2. Uniformity of L2-W trigger for accepted QCD events, LT=10/pb.
It is lower only at the physical edges of barrel at eta=+/-1 due to energy leak and smaller tower size.
Below you will find full set of L2 monitoring plots for both sets of events
SPARE PAGE
bah.
The most current documentation can be found on Kevin Adkins blog page. It's not the 2014 comments any longer (2015 at this point!), though this page still bears that name. One should remove the following URL and add a more current one if this documentation is updated.
Current L2 Documentation as of Run15
This documentation inludes a few things:
- A detailed guide to L2 monitoring
- A detailed guide to monitoring the L2 pedestals
- A detailed guide to updating the L2 tower masking file
- A few comments about the L2 algos and how they work together
This document will probably be in other places too, but it should be safe here.
This description refers to 2011 setup, before moving L2 to HLT
The real L2 algo read all peds, status tables from the l2ana01, user=developer, dir=emc_setup (or sth similar) Only the files with the word 'current' in the name are read in. Those are symbolic links pointing to the real files. All other ped, status files, with some date attached are kept only as a record.
Those are all setup files needed by L2 algos: [developer@l2ana01 emc_setup]$ ls *current btowCrateMask.current etowCrateMask.current pedestal.current btowDb.current etowDb.current towerMask.current
Common format: all lines starting with '#' are ignorred as comments. Every file has short description of its contntent. One need to be familiar with EEMC DB to understand the details.
btowCrateMask.current, etowCrateMask.current, btowCrateMask.current etowCrateMask.current are used to mask out whole crates or individual towers. They are editted by hand as needed during the run. Typically all us unmasked at the beggining of each run.
pedestal.current is produced by L2-ped algo under different name (run12058037.l2ped.log) after every run.Once person monitoring L2 pedestal residua decideds pedestals used by L2 drifted too far, the pedestal.current is linked to the fresh runXXX.l2ped.log. Typically twice per week.
btowDb.current, etowDb.current contain full DB mapping for both EMC. Those files are produced once per year, by running $STAR/StRoot/StEEmcDbMaker/StEmcAsciiDbMaker.cxx on the offline STAR DB.If no mapping was changed in the offline DB there is no need to regenerate those 2 files.
Compile this stand alone code
$STAR/StRoot/StTriggerUtilities/L2Emulator/macros/binH2rootH.c
It needs L2Histo.cxx L2Histo.h from
$STAR/StRoot/StTriggerUtilities/L2Emulator/L2algoUtil/
and CERN root .
It does not need STAR root4star.
How to compile & run full suit of L2-algos offline.
1) take the current copy deployed at the real L2 and manage to compile and run it offline. Run over 100K events (takes ~1 minute). 2) fire the macro producing full set of L2-jet plots, so it will produce PDF with all plots fr this 100K eve. Only then you can control if the L2-jets works. 3) Next, add your changes to L2jet , compile , run, view plots. I'll ask Ross to take care of I/O new params (cuts) you have added/changed to select jets you want. Just make sure all new params are _variables_ defined in .h and have name starting with parWill_cut1, .... You just set values in initRun() and recompile each time you want to change them. Once you are happy with the cuts you tell me where is this version. Make sure to run it on full 2006 event file (~600K eve).
Detailed instruction
mkdir aaa cd aaa cp -rp XXX/onlineL2 . cp -rp XXX/StRoot . (ask Ross for actual location of both directories)
cd onlineL2 make lib
make m 5000
xterm& cd ../StRoot/StTriggerUtilities/L2Emulator/L2jetAlgo/ edit the code you want make make installgo back to primary terminal in "onlineL2" and type: touch multiTest.c make Now you can run 'm' again
binH2rootH-exe out5/run8.l2jet.hist.bin out5/run8.l2jet.hist.root root.exe plJetsL2.CNow you can display one age at a time by typing within root session
plJetsL2(1) plJetsL2(2)..Note, for L2jet algo the valid pages are: {1,2,3,4,5,6,10,20,21,22}
Here is prescription how to convert any muDst to the binary event format, needed to run L2-algos stand alone (by multiTest.C)
Let me start with a warning - this procedure requires execution of some additional code not relevant for this task ( being production of binary event files), but I wanted to reuse existing offline trigger simu code and there was no consensus how to rearrange it.
The goal is to produce events consisting of 2 data blocks : BTOW & ETOW - equivalent to raw data saved in the daq file.
mkdir aaa cd aaa mkdir out2 stardev cp $STAR/StRoot/StTriggerUtilities/macros/rdMu2binL2eve.C . cp /star/institutions/mit/balewski/2008-L2events/R9067013.lis . root4star -b -q rdMu2binL2eve.C >& L1 &You need no private code, just the .C macro, setup to read the run-list, muDst must still exist on the disk (fix it if needed).
This could be changed if one activates properly slow simu for BTOW & ETOW - talk to Ross. The advantage would be identical L2-peds & status tables could be used for M-C events and for real data. The disadvantage of using slow simu is now you must set DB time stamp during production of binary events and have L2-peds for exactly the same time stamp - or you will end up residual energies seen by L2-algos.
#L2-ped algorithm finishRun(9067013), compiled: Jan 30 2008 , 23:25:07 #params: pedSubtr=1 speedFact=8 saveBin=0 debug=0 prescAccept=0 #L2H10,6,total event counter; x=cases,100,13,13,0,0,0, #L2ped CPU/eve MPV 27 kTicks, FWHM=2, seen eve=100 # L2ped-Adc spectra, run=9067013, Z-scale is ln(yield), only first digit shown; maxPedDev=5 table format: # name, ped, sigPed, crate, chan, softID-m-s-e, RDO_ID; # ADC spectrum: [-20 ... <=-10 ... *=0 ... >=+10 ... :=+20 ... 100], Xaxis=ADC - ped + 20 01TA01 0 1.3 0x01 0x38 P01TA01 336 :.........<.........2211......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA02 1 0.9 0x01 0x39 P01TA02 342 :.........<........1121..1....>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA03 2 0.9 0x01 0x3a P01TA03 348 :.........<.........2121.1....>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA04 0 0.9 0x01 0x6d P01TA04 654 :.........<.......112121......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA05 0 0.9 0x01 0x6c P01TA05 648 :.........<........1211.......>......1..:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA06 0 1.3 0x01 0x6e P01TA06 660 :.........<........122........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA07 0 0.9 0x01 0x6f P01TA07 666 :.........<........1311...1...>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA08 -1 1.3 0x01 0x3b P01TA08 354 :.........<........221........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA09 0 1.3 0x01 0x3c P01TA09 360 :.........<........1221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA10 0 0.9 0x01 0x3d P01TA10 366 :.........<........222........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA11 1 0.9 0x01 0x3e P01TA11 372 :.........<.........231.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA12 0 0.9 0x01 0x3f P01TA12 378 :.........<........1311.......>.........:...1.....:.........:.........:.........:.........:.........:.........:......... qa=0 01TB01 0 1.7 0x01 0x40 P01TB01 384 :.........<.......1121111.....>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB02 0 0.9 0x01 0x41 P01TB02 390 :.........<.......1121111.....>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB03 0 1.7 0x01 0x42 P01TB03 396 :.........<........222........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB04 -1 0.9 0x01 0x70 P01TB04 672 :.........<.......1221........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB05 0 0.9 0x01 0x71 P01TB05 678 :.........<.......112.1....1..>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0Once you scroll about 1000 lines, you will see 4800 barrel pedestal residua:
01tg22 0 1.3 0x1d 0x19 id0122-004-1-02 754 :.........<.........221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg23 0 1.7 0x1d 0x1a id0123-004-1-03 784 :.........<........1222.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg24 1 0.9 0x1d 0x1b id0124-004-1-04 814 :.........<........2121.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg25 2 0.9 0x1d 0x38 id0125-004-1-05 1684 :.........<.......121121......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg26 0 1.3 0x1d 0x39 id0126-004-1-06 1714 :.........<........1221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg27 1 0.9 0x1d 0x3a id0127-004-1-07 1744 :.........<........1231.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg28 0 1.3 0x1d 0x3b id0128-004-1-08 1774 :.........<......1..221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg29 1 1.3 0x1d 0x58 id0129-004-1-09 2644 :.........<.......1122.1......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg30 1 1.3 0x1d 0x59 id0130-004-1-10 2674 :.........<.......11221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg31 -1 0.9 0x1d 0x5a id0131-004-1-11 2704 :.........<........21111......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg32 -1 1.7 0x1d 0x5b id0132-004-1-12 2734 :.........<.......2221..1.....>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg33 1 1.3 0x1d 0x78 id0133-004-1-13 3604 :.........<........1221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg34 -1 1.3 0x1d 0x79 id0134-004-1-14 3634 :.........<.......122.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg35 -1 1.7 0x1d 0x7a id0135-004-1-15 3664 :.........<........222........>.........:..1......:.........:.........:.........:.........:.........:.........:......... qa=0 01tg36 0 1.3 0x1d 0x7b id0136-004-1-16 3694 :.........<........2211.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg37 1 1.3 0x1d 0x98 id0137-004-1-17 4564 :.........<........1221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg38 0 0.9 0x1d 0x99 id0138-004-1-18 4594 :.........<........1221.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01tg39 -20 -0.4 0x1d 0x9a id0139-004-1-19 4624 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01tg40 0 1.3 0x1d 0x9b id0140-004-1-20 4654 :.........<.......1221........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01th01 0 1.3 0x0e 0x8b id4460-112-1-20 4187 :.........<........122.1......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01th02 -20 -0.4 0x0e 0x8a id4459-112-1-19 4157 3.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01th03 -2 2.2 0x0e 0x89 id4458-112-1-18 4127 :.........<......12221........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01th04 -1 1.3 0x0e 0x88 id4457-112-1-17 4097 :.........<......112211.......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01th05 0 2.2 0x0e 0x6b id4456-112-1-16 3227 :.........<.......112211......>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0The above files are for real data, when peds seen by L2-ped algo match the real pedestals.
If you display the same file for M-C events, you will see just high-energy ends of ADC spectra, because at this moment binary events for M-C do not include pedestals.
# ADC spectrum: [-20 ... <=-10 ... *=0 ... >=+10 ... :=+20 ... 100], Xaxis=ADC - ped + 20 01TA01 -17 0.9 0x01 0x38 P01TA01 336 :..3......<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA02 -12 0.9 0x01 0x39 P01TA02 342 :.......3.1.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA03 -20 -0.4 0x01 0x3a P01TA03 348 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA04 -20 -0.4 0x01 0x6d P01TA04 654 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA05 -20 -0.4 0x01 0x6c P01TA05 648 31........<........1*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA06 -20 -0.4 0x01 0x6e P01TA06 660 31........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA07 -20 -0.4 0x01 0x6f P01TA07 666 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA08 -20 -0.4 0x01 0x3b P01TA08 354 3.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA09 -12 0.9 0x01 0x3c P01TA09 360 :.......3.<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA10 -20 -0.4 0x01 0x3d P01TA10 366 31........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TA11 -4 0.9 0x01 0x3e P01TA11 372 :.........<.....1...*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TA12 -17 0.9 0x01 0x3f P01TA12 378 :..3......<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB01 -20 -0.4 0x01 0x40 P01TB01 384 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TB02 -15 0.9 0x01 0x41 P01TB02 390 :....1....<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB03 -20 -0.4 0x01 0x42 P01TB03 396 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TB04 -16 0.9 0x01 0x70 P01TB04 672 :...3.....<1........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=0 01TB05 -20 -0.4 0x01 0x71 P01TB05 678 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=? 01TB06 -20 -0.4 0x01 0x72 P01TB06 684 :.........<.........*.........>.........:.........:.........:.........:.........:.........:.........:.........:......... qa=?
The STAR trigger simulator is designed to
It should provide a common framework for simulators of all trigger detectors.
Ideally, this could be as simple as adding StTriggerSimuMaker to your chain and then asking
trigSimu->isTrigger(trigId);
in your analysis Maker. Because the trigger simulator is still in development this is not always the case. Here is a "straight from real-life" description of how to get it running:
( don't ask me, I'm just writing the docs .... )
Everything lives in StRoot/StTriggerUtilities. StTriggerSimuMaker is the "head Maker" and owns all of the subdetector simulators. Each subdetector simulator inherits from StVirtualTriggerSimu, which requires an implementation of isTrigger(int trigId). This means that a user can
Detailed documentation of the subsystem simulators follows below:
Detailed docs for the BBC trigger simulator
Detailed docs for the BEMC L0 simulator.
Detailed docs for the EEMC L0 simulator.
L2 simulator details.
Hardware and software related to ZDC