Trigger Detectors

L2 documentation

.

2008 pp run

Details of L2-algos (triggers) as implemented for pp run in February of 2008

Mapping used during data taking is in attachment 1)

 

a Overview (Jan, later Ross)

Graph illustrates the key changes in L2 processing scheme allowing for fast event abortion. Jan

b) B+EEMC common calib (Jan)

Common BEMC, EEMC calibration algos (do not abort)

  1. Goal: calibrates Barrel, Endcap towers, result is used by other L2-algo
  2. RTS params:
      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
  3. Class name: L2btowCalAlgo08::public L2VirtualAlgo2008 and similar for ETOW , 1 instance of each.
  4. Event processing uses method calibrateBtow(int token, int bemcIn, ushort *bemcData);+ similar for ETOW
    Not used: void computeUser(int token); bool decisionUser(int token)
  5. Hardcoded params: mxListSize: BTOW =500, ETOW=200
  6. Details of Algo:
     ------- 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;
     
  7. Execution time:
    L2-btowCal08  Compute   CPU/eve MPV 42 kTicks,  FWHM=6
    Reference:
    L2:jet06-algo  CPU/eve MPV 57 kTicks,  FWHM=11
    
  8. Output files:
    * ASCII logfile: run8.l2BtowCal08.log
    * binary histo: run8.l2BtowCal08.hist.bin
  9. QA info in log file:
    #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
    
  10. QA plots : PDF

 

c) high-energy-Filter (Jan)

L2-high-energy-Algo ( 100% accept)

 

L2-high-ene-algo (does not abort)

  1. Goal: perseveres subset of ETOW & BTOW towers with ET above certain threshold.
  2. RTS params:
     
      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
  3. Class name: L2hienAlgo08:public L2VirtualAlgo2008 , the same for ETOW , 2 instances.
  4. Event processing uses method
    void computeUser(int token); - build internal list
    bool decisionUser(int token, void **myL2Result); only for QA histos
    Output list of towers:
     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);
      }
  5. Hardcoded params: mxListSize: BTOW =ETOW=150
  6. Details of Algo:
     -------- 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.
  7. Execution time:
    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
    
  8. Output files:
    * ASCII logfile: run8.l2hienBtow08.log
    * binary histo: run8.l2hienBtow08.hist.bin
  9. QA info in log file: just timing
  10. QA plots : PDF

 

d ped-monitor (Jan)

L2-pedestal monitor-Algo ( 100% accept)

  1. Goal: accumulate pedestals for all towers of ETOW & BTOW.
  2. RTS params:
     
      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];
    
  3. Meaning of speed 
    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.
    

 

e) gamma (B=Jan, E=Jason+Paul)

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).

 

f) L2-jet (B+E) ver2006=Jan, ver2008=Will

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];

 

2009 pp run

  •  pre-run 2009 L2 code release , January 15, 2009, by Ross 
  • L2 mapping used in 2009 data taking, 56 BTOW towers were swapped (attachment 1)

 

0) lastDSM masks

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

 

 

01 changes to L2 algos from last year

 * 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

 

1) L2Result Offsets

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)

 

a) L2emulL0_2009 (L0 hardware emulation)

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.

b) L2btowGammaAlgo (barrel gamma algorithm)

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.

c) L2etowGammaAlgo (endcap gamma algorithm)

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.

d) L2hienAlgo (passive barrel and endcap high tower filter)

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.

e) L2jetAlgo (barrel and endcap combined jet algorithm)

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.

f) L2pedAlgo (barrel and endcap pedestal monitor)

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.

g) L2upsilonAlgo (barrel upsilon algorithm)

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.

h) W-algo BTOW

L2 W-algo for BTOW, p+p 500 GeV , 2009 run

 

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

 Access to L2W results in muDst, also to oflTrigIds

  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();
  vector idL=l1.triggerIds();   printf("nTrig=%d, trigID: ",idL.size());   for(unsigned int i=0;i

Simulation of L2-W-Algo for Filtered QCD & W events , LT=~10 /pb.

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


 

xxxxxxx old xxxxxx

SPARE PAGE

2011 pp run

 bah.

L2 Documentation: 2014 Comments

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.

content of setup file for L2 algos

 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.

 

convert L2 bin histo to root histo

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.

 

 

offline framework description

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

  1. create a new directory at rcas6nnn and copy the recent version of code
    mkdir aaa
    cd aaa
    cp -rp  XXX/onlineL2 .
    cp -rp  XXX/StRoot .
    (ask Ross for actual location of both directories)
    
  2. compile full version of library (no exec yet)
     
    cd onlineL2
    make lib
  3. compile & exec the main code
     make
    m 5000
  4. To modify L2jet finder code open another terminal on rcas6nnn
     
    xterm&
    cd ../StRoot/StTriggerUtilities/L2Emulator/L2jetAlgo/
    edit the code you want
    make 
    make install
    go back to primary terminal in "onlineL2" and type: touch multiTest.c make Now you can run 'm' again
  5. to view plots convert hist.bin to hist.root and run root macro (for the moment all output files are stored with the name: out5/run8...)
     binH2rootH-exe out5/run8.l2jet.hist.bin out5/run8.l2jet.hist.root
    root.exe plJetsL2.C
    Now 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}

 

production of binary events for L2 algos

 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.

  1. Prescription to produce R9067013.eve.bin from muDst from  run9067013 :
    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).
  2. Inspect the .C macro to find out how to change # of processed events, # muDst to read in. If you use muDst from M-C you need to activate useMC-switch in the macro and decide on the time stamp - this is on of this irrelevant things I have warned you. Current default is reasonable. 
  3. Output: the binary event file (R9067013.eve.bin) will show up in the 'aaa/' directory. The content of binary events is different for real data vs. M-C. This can be fixed later (by Ross?), but for now you must take it in to account while reading such events by multiTest.C
    • binary events for real data contain raw BTOW & ETOW data blocks. This is certainly true for the Endcap, I'm less sure for the barrel, since I'm forced to use  StEmcADCtoEMaker and I do not if it removes ADC for masked towers. You need to figure it out. The main point is for real data you will see 4800+720 non-zero ADCs before pedestal subtraction. This is exactly what L2-algo receive on-line.
      Note, your L2-algo will receive data after ped subtraction.
    • binary events for M-C contain only fired towers, peds are not added, nor smeared. Therefore, you must use different L2-pedestal files while reading such events, with ped set to 0 - otherwise the common L2-calib algo will subtract peds anyhow.

      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.

       

  4.  QA output: look at the file: aaa/out2/run9067013.l2ped.out it will show pedestal residua using online L2 peds as R9067013. This is one of those confusing steps. While producing binary events  the rdMu2binL2eve.C runs also L2-ped algo (I can't turn it off due to code dependencies), but L2-ped does NOT affect content of the output binary event file. But you can use L2-ped output to monitor if reasonable ADC have been found in muDst.
    This is an ASCII file, on the top there are 720 Endcap pedestals residua:
    #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=0
    
    
    Once 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=0
    
    The 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=?
    

 

 

 

Simulator Documentation

The STAR trigger simulator is designed to

  1. reproduce trigger algorithms in offline software that can be run on Monte Carlo or real data ("online" mode)
  2. allow for use of improved calibration coefficients, pedestals, status tables, etc. to "clean up" trigger spectra ("offline" mode)
  3. aid in the development of new triggers ("expert" mode)

It should provide a common framework for simulators of all trigger detectors.

How to Run

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 .... )

Code Structure

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

  1. ask the head Maker if the trigger fired for this event.
  2. ask the head Maker for a pointer to a subdetector simulator, and then ask this subdetector if the event passed the trigger.  For instance, a simple BEMC HT trigger is typically run in coincidence with a minbias trigger from the BBC, ZDC, or VPD.  By querying the BEMC and BBC/ZDC/VPD separately a user can find out why a particular event might have failed a HT trigger (i.e. was it because the HT threshold wasn't satisfied, or was it because the minbias condition failed?).

Subsystem Simulators

Detailed documentation of the subsystem simulators follows below:

BBC

Detailed docs for the BBC trigger simulator

BEMC

Detailed docs for the BEMC L0 simulator.

EEMC

Detailed docs for the EEMC L0 simulator.

L2

L2 simulator details.

ZDC

Hardware and software related to ZDC