GLAST / LAT > DAQ and FSW > FSW > Doxygen Index> XFC / dev > gdmfc / linux-gcc


Interface   Data Structures   File List   Data Fields   Globals  

MFC.c File Reference

Minimum Ionizing Particle Filter Code. More...

#include <XFC/MFC.h>
#include <XFC/MFC_cfg.h>
#include <XFC/MFC_status.h>
#include <MFC_def.h>
#include <MFC_resultDef.h>
#include <EFC/EDM.h>
#include <EFC/EFC_edsFw.h>
#include <EFC/EFC.h>
#include <EFC/ATF_shadowedTowers.h>
#include <EDS/EDS_fw.h>
#include <EDS/EBF_gem.h>
#include <EDS/EBF_gemLocate.h>
#include <EDS/EBF_dir.h>
#include <EDS/ECR_cal.h>
#include <EDS/EDR_cal.h>
#include <EDS/EDR_calUnpack.h>
#include <CDM/CDM_pubdefs.h>
#include <PBI/FFS.ih>
#include <stdlib.h>
#include <string.h>

Defines

#define _code   EDM_CODE
#define _info(...)
#define _debug(...)
#define _display_title_bar()
#define _display_layer_energy(_energy)
#define PAT(_c, _d, _e, _f,_8, _9, _a, _b,_4, _5, _6, _7,_0, _1, _2, _3)
#define ROW(_0c, _0d, _0e, _0f, _1c, _1d, _1e, _1f, _2c, _2d, _2e, _2f, _3c, _3d, _3e, _3f,_08, _09, _0a, _0b, _18, _19, _1a, _1b, _28, _29, _2a, _2b, _38, _39, _3a, _3b,_04, _05, _06, _07, _14, _15, _16, _17, _24, _25, _26, _27, _34, _35, _36, _37,_00, _01, _02, _03, _10, _11, _12, _13, _20, _21, _22, _23, _30, _31, _32, _33)
#define x   0
#define a   1
#define _   0

Functions

static __inline int isVetoed (unsigned int status, unsigned int vetoes)
 Checks whether any of the veto bits are up.
static __inline int mfcFilter (MFC *mfc, unsigned int pktBytes, EBF_pkt *pkt, EBF_siv siv, EDS_fwIxb *ixb, unsigned int vetoes, MFC_result *result)
 Determines the fate of 1 event.
static int compileCfgPrms (MfcCfgPrms *cfg, const MFC_DB_prms *prms)
 Compiles/commits the set of user defined parameters into the the configuration block.
int MFC_sizeof (int cnt)
 Sizes the minimum ionizing particle filtering control structure.
int MFC_cfgSizeof (void)
 Sizes the minimum filtering configuration as it is used in the actual filtering progam.
int MFC_resultSizeof (const MFC *mfc)
 Returns the size, in bytes, of one result vector.
int MFC_cfgCompile (MFC_cfg *cfg, const MFC_DB_prms *prms)
 Implements the transformation of the configuration parameters as specified by the user, cfg, into the internal form, ctlCfg.
MFC_cfgMFC_cfgSet (MFC *mfc, MFC_cfg *cfg)
 Makes the specified internal representation of the configuration parameters the current active one.
static int __inline dir_check (int status, EBF_dir *dir, int dir_status)
 Check the directory status.
static __inline int acd_check (const ATF_shadowedTowers *shadowed, unsigned int acd_x, unsigned int acd_y, unsigned int acd_z, unsigned int tkrTrg)
 Evaluates whether any tower with a track trigger is in coincidence with a shadowing ACD tile.
static __inline int cal_check (const MfcCfgCal *cfg, const EDR_cal *cal, int status, int vetoes, MFC_result *result)
 Does the CAL based checking of the MIP filter.
static __inline int tkr_check (const MfcCfgTkr *cfg, unsigned int tkrTrg)
 Does the TKR based checking of the MIP filter.
int MFC_filter (MFC *mfc, unsigned int pktBytes, EBF_pkt *pkt, EBF_siv siv, EDS_fwIxb *ixb, unsigned int vetoes, MFC_result *result)
 Determines the fate of 1 event.
unsigned int MFC_fwNeeds (void)
 Returns a bit mask of the EDS_fw needs.
unsigned int MFC_fwObjects (void)
 Returns a bit mask of the EDS_fw objects used by the heavy ion filter.


Detailed Description

Minimum Ionizing Particle Filter Code.

Author:
JJRussell - russell@slac.stanford.edu
   CVS $Id: MFC.c,v 1.3 2011/03/28 20:50:57 russell Exp $

Define Documentation

#define PAT ( _c,
_d,
_e,
_f,
_8,
_9,
_a,
_b,
_4,
_5,
_6,
_7,
_0,
_1,
_2,
_3   ) 

Value:

(_f << 0xf) | (_e << 0xe) | (_d << 0xd) | (_c << 0xc) |                \
   (_b << 0xb) | (_a << 0xa) | (_9 << 0x9) | (_8 << 0x8) |                \
   (_7 << 0x7) | (_6 << 0x6) | (_5 << 0x5) | (_4 << 0x4) |                \
   (_3 << 0x3) | (_2 << 0x2) | (_1 << 0x1) | (_0 << 0x0)

#define ROW ( _0c,
_0d,
_0e,
_0f,
_1c,
_1d,
_1e,
_1f,
_2c,
_2d,
_2e,
_2f,
_3c,
_3d,
_3e,
_3f,
_08,
_09,
_0a,
_0b,
_18,
_19,
_1a,
_1b,
_28,
_29,
_2a,
_2b,
_38,
_39,
_3a,
_3b,
_04,
_05,
_06,
_07,
_14,
_15,
_16,
_17,
_24,
_25,
_26,
_27,
_34,
_35,
_36,
_37,
_00,
_01,
_02,
_03,
_10,
_11,
_12,
_13,
_20,
_21,
_22,
_23,
_30,
_31,
_32,
_33   ) 

Value:

\
  PAT(_3c,_3d,_3e,_3f,  _38,_39,_3a,_3b, _34,_35,_36,_37, _30,_31,_32,_33),\
  PAT(_2c,_2d,_2e,_2f,  _28,_29,_2a,_2b, _24,_25,_26,_27, _20,_21,_22,_23),\
  PAT(_1c,_1d,_1e,_1f,  _18,_19,_1a,_1b, _14,_15,_16,_17, _10,_11,_12,_13),\
  PAT(_0c,_0d,_0e,_0f,  _08,_09,_0a,_0b, _04,_05,_06,_07, _00,_01,_02,_03) \


Function Documentation

int acd_check ( const ATF_shadowedTowers *  shadowed,
unsigned int  acd_x,
unsigned int  acd_y,
unsigned int  acd_z,
unsigned int  tkrTrg 
) [static]

Evaluates whether any tower with a track trigger is in coincidence with a shadowing ACD tile.

Returns:
Status bits
Parameters:
shadowed The structure defining which towers are shadowed by which ACD tiles.
acd_x The bit mask of struck tiles in the X+/X- side face.
acd_y The bit mask of struck tiles in the Y+/Y- side face.
acd_z The bit mask of struck tiles in the Z top face.
tkrTrg Bit mask of towers with a 3-in-a-row. Unfortunately this is specified in little endian order.

References MFC_STATUS_M_NO_ACD_TKR.

Referenced by mfcFilter().

static __inline int cal_check ( const MfcCfgCal cfg,
const EDR_cal *  cal,
int  status,
int  vetoes,
MFC_result result 
) [static]

Does the CAL based checking of the MIP filter.

Returns:
The updated status value
Parameters:
cfg The MIP CAL configuration cuts
cal The unpacked CAL data
status The status of the MIP filter to this point
vetoes The bit mask of active vetoes
result The result vector to fill out

References _MfcCfgCal::ehi, _MfcCfgCal::elo, ievt_store, isVetoed(), MFC_STATUS_M_LYR_COUNTS, MFC_STATUS_M_STAGE_XCAL, MFC_STATUS_M_VETOED, and _MFC_result::mlayers.

Referenced by mfcFilter().

static int compileCfgPrms ( MfcCfgPrms cfg,
const MFC_DB_prms *  prms 
) [static]

Compiles/commits the set of user defined parameters into the the configuration block.

Returns:
0 is success, -1 if failure
Parameters:
cfg The destination parameter configuration block
prms The set of user configuration parameters

References _MfcCfgPrms::cal, _MfcCfgCal::ehi, _MfcCfgCal::elo, _MfcCfgCal::nlayers, _MfcCfgTkr::placeholder, and _MfcCfgPrms::tkr.

Referenced by MFC_cfgCompile().

static int __inline dir_check ( int  status,
EBF_dir *  dir,
int  dir_status 
) [static]

Check the directory status.

Returns:
Updated status
Parameters:
status The status
dir The directory
dir_status The directory status

References MFC_STATUS_M_ERR_CTB, MFC_STATUS_M_ERR_DIR, and MFC_STATUS_M_VETOED.

Referenced by mfcFilter().

static __inline int isVetoed ( unsigned int  status,
unsigned int  vetoes 
) [static]

Checks whether any of the veto bits are up.

Returns:
Non-zero if the status bits contain any of the veto bits.
Parameters:
status The current set of status bits
vetoes The set of veto bits

Referenced by cal_check(), and mfcFilter().

int MFC_cfgCompile ( MFC_cfg cfg,
const MFC_DB_prms *  prms 
)

Implements the transformation of the configuration parameters as specified by the user, cfg, into the internal form, ctlCfg.

Return values:
0 Successful
-1 Unrecognized or non-backwardly compatiable user configuration version number.
Parameters:
cfg Filled in with the internal form of the configuration parameters
prms The user form of the configuration parameters

References compileCfgPrms(), and _MFC_cfg::prms.

const MFC_cfg * MFC_cfgSet ( MFC mfc,
MFC_cfg cfg 
)

Makes the specified internal representation of the configuration parameters the current active one.

Returns:
Pointer to the current control configuration parameters
Parameters:
mfc The minimum ionizing particle filter control structure
cfg The internal representation of the configuration constants

References _MFC::cfg.

int MFC_cfgSizeof ( void   ) 

Sizes the minimum filtering configuration as it is used in the actual filtering progam.

Returns:
Returns the size of the heavy ion filtering configuration control structure
There are two different breeds of the filtering configuration structure. There are two reasons for this. The more familar is the configuration structure that the user fills in. This structure is meant to be convenient for the user, but not for the program. Some of the information in the user structure is transformed into data that the program will find more accessible.
The second reason is that by having a user configuration and an internal configuration, the two can evolve separately. If more parameters are added to the filter, they will find a home in the internal structure. At some time they may be exposed to the user. The correct course of action is to define a new version of the user configuration block. Since the version number is carried along with the configuration constants, the routine transforming the user configuration to its internal representation can evolve and can be made to handle older versions of the user configuration parameters with some degree of grace, at least giving some hope to backward compatibility.
The correct usage model is
       ctlCfg = malloc (MFC_cfgSizeof ());
       status = MFC_cfgCompile (cfg, usrPrms);
       MFC_cfgSet (mfc, cfg);
Note:
Because the 'set routine just seeds a pointer to the user configuration, in the control structure. the user is free to swap it out with any other pre-prepared configuration.

int MFC_filter ( MFC mfc,
unsigned int  pktBytes,
EBF_pkt *  pkt,
EBF_siv  siv,
EDS_fwIxb *  ixb,
unsigned int  vetoes,
MFC_result result 
)

Determines the fate of 1 event.

Return values:
< 0, rejected
==0,undecided 
> 0, accepted
Parameters:
mfc The minimum ionizing particle filter control structure
pktBytes The number of bytes in pkt, includes the packet header
pkt The event data packet
siv The packet's state information vector
ixb The information exchange block
vetoes The active vetoes
result The filter result vector
Overview
This acts as a wrapper of the actual filter. This is were the sampling logic is implemented by the use prescalers. A prescaler is defined by a pair of integers; one giving the current countdown value and the other giving the refresh value. When the countdown value reaches 0, the prescaler is said to expire.
Types of prescaling
There are two kinds of samplings allow.
  1. Pass-thru sampling
  2. Individual veto sampling

Pass-Thru Sampling
Conceptually this is the easiest to understand. When the pass-thru prescaler expires, instead of using the normal veto mask, a 0 is used, effectively causing the filter to evaluate all its cuts but not allowing an cut to veto the event. While easy to understand, the event sample leaked through by this technique will be dominated by events that would normally have been rejected by the very early cuts.
Individual Veto Sampling
This prescaler type allows to ignore the reject decision of each veto bit. While a bit harder to understand than the Pass-Thru Sampling, this technique allows one to tap a predetermined percentage of events failing at each cut. The hope is that one will be a statisitically meaningful sample of events that would have normally failed some of the later cuts in the filter.

References mfcFilter().

unsigned int MFC_fwNeeds ( void   ) 

Returns a bit mask of the EDS_fw needs.

Returns:
A bit mask of the EDS_fw needs
Use
This value should be passed to EDS_fwRegister when registering the filter.

Referenced by mfc_construct().

unsigned int MFC_fwObjects ( void   ) 

Returns a bit mask of the EDS_fw objects used by the heavy ion filter.

Returns:
A bit mask of the EDS_fw needs
Use
This value should be passed to EDS_fwRegister when registering the filter.

Referenced by mfc_construct().

int MFC_resultSizeof ( const MFC mfc  ) 

Returns the size, in bytes, of one result vector.

Return values:
The size, in bytes, of one result vector
Parameters:
mfc The configuration control structure

int MFC_sizeof ( int  cnt  ) 

Sizes the minimum ionizing particle filtering control structure.

Returns:
Returns the size of the heavy ion filtering control structure
Parameters:
cnt Number of configurations to accommodate

static __inline int mfcFilter ( MFC mfc,
unsigned int  pktBytes,
EBF_pkt *  pkt,
EBF_siv  siv,
EDS_fwIxb *  ixb,
unsigned int  vetoes,
MFC_result result 
) [static]

Determines the fate of 1 event.

Returns:
Status mask, if the
  • < 0, reject
  • = 0, no decision
  • > 0, accept
Parameters:
mfc The minimum ionizing particle filter control structure
pktBytes The number of bytes in pkt, includes the packet header
pkt The event data packet
siv The packet's state information vector
ixb The information exchange block
vetoes The list of active vetoes
result The filter result vector

References acd_check(), _MFC_result::beg, _MfcCfgPrms::cal, _MFC_result::cal, cal_check(), _MFC::cfg, _MFC_result::dir, dir_check(), _MFC_result::evtNum, _MFC_result::gem, ievt_store, isVetoed(), MFC_STATUS_M_ERR_CAL, MFC_STATUS_M_GEM_CNO, MFC_STATUS_M_GEM_NOTKR, MFC_STATUS_M_MULTI_PKT, MFC_STATUS_M_STAGE_CAL, MFC_STATUS_M_STAGE_DIR, MFC_STATUS_M_STAGE_GEM, MFC_STATUS_M_VETOED, _MFC_cfg::prms, _MFC_result::status, _MfcCfgPrms::tkr, tkr_check(), tmr_store, and _MFC_result::xcal.

Referenced by MFC_filter().

static __inline int tkr_check ( const MfcCfgTkr cfg,
unsigned int  tkrTrg 
) [static]

Does the TKR based checking of the MIP filter.

Returns:
Status bits
Parameters:
cfg The TKR configuration
tkrTrg The 3-in-a-row GEM bit mask (lower 16 bits, LSB = Tower 0)

References MFC_STATUS_M_NO_TKR_ADJ.

Referenced by mfcFilter().


Generated on Mon Aug 8 10:33:26 2011 by  doxygen 1.5.8