FGT in MuDst

Here's some documentation on the latest version of putting FGT data in MuDst.  Major updates since the last version (January 2012) is the removal of dynamic arrays in the StMuFgtClusters (since ROOT doesn't support this, though it doesn't prevent it), and instead adding a TClonesArray of strip, cluster associations.  The StMuFgtInfo TClonesArray was also removed, as it has not been used.  Note, once a final decision has been reached (i.e. after officially reviewed and placed in DEV), then documentation (such as the following) will be placed in the FGT drupal pages instead of my person pages.  Note, the code can currently be found at

$CVSROOT/offline/StFgtDevel/StRoot/StMuDSTMaker/COMMON

and was checked into CVS July 20th, 2012.  One can access the CVS files via the web via http://www.star.bnl.gov/cgi-bin/protected/cvsweb.cgi/offline/StFgtDevel/StRoot/StMuDSTMaker/COMMON/


Overview

The MuDst currently contains three FGT-related TClonesArrays, one for strips, one for clusters, and one for associations between strips and clusters.  They are enumerated [StMuArrays.h, line 20] as

enum fgtTypes {muFgtStrips=0, muFgtClusters, muFgtStripAssociations };

Each array, respectively, containes classes of types [StMuArrays.cxx, line 71]

"StMuFgtStrip","StMuFgtCluster","StMuFgtStripAssociation"

Container for FGT Strips [StFgtStrip.h]

The data members are

   Int_t   mGeoId;                   // indexing: 6 disk * 4 quad * 2 planes * 720 strips
   Short_t mAdc[kMuFgtNumTimeBins];  //
   Short_t mClusterSeedType;         // as defined in StEvent/StEnumerations.h
   Float_t mCharge;                  // before GEM, units (C), relation: ADC = ped + charge*gain(r,phi,disc)
   Float_t mChargeUncert;            //

representing a subset of the StEvent container StFgtStrip.  Combined with the database, all information in the StEvent can be recovered/recomputed.


Container for FGT Clusters [StFgtCluster.h]

The data members are

   // data members
   Int_t mCentralStripGeoId;                     // obvious--also serves as a unique key, and
                                                 // identifies the physical quadrant of the cluster

   Int_t mFirstStripAssociationIdx;              // Index in the MuDst mFgtStripAssociation
                                                 // TClonesArray. The associated strips are from index
                                                 // mFirstStripAssociationIdx to
                                                 // mFirstStripAssociationIdx+mNumStrips-1

   Int_t mNumStrips;                             // number of strips associated with this cluster

   Float_t mCharge, mChargeUncert;               // associated charge for the cluster, and its uncertainty
   Float_t mR, mErrR, mPhi, mErrPhi;             // r, phi position and error

which is a subset of the information contained in the StEvent container StFgtHit.  Given the database and the MuDst, all information in the StFgtHits can be redetermined.


Container for Associating Strips and Clusters [StFgtStripAssociation.h]

The data members are

   Int_t   mClusIdx;   // index of the cluster in the muFgtClusters TClonesArray
   Int_t   mStripIdx;  // index of the strip in the muFgtStrips TClonesArray
   Float_t mWeight;    // membership weight of the strip in the given cluster.

Note well: the indices are the positions of the strip and cluster containers in the respective MuDst TClonesArrays, not the geoIds or elecIds or any other enumeration.  However, by using the index and the other TClonesArray, the full container for the strips and clusters are accessable, providing all other needed information.


Information Saved in the FGT [StMuDstMaker.cxx]

Currently all clusters are saved, and all strips which are either associated with a cluster or have the following types are saved:

      kFgtSeedType1
      kFgtSeedType2
      kFgtSeedType3
      kFgtClusterPart
      kFgtClusterEndUp
      kFgtClusterEndDown
      kFgtStripShared
      kFgtClusterTooBig

Note: the caveat is that the strips and clusters have to be present in the StEvent when StMuDstMaker::Make is executed.  This should be the case, unless some other maker has removed them.  The code actually filling the MuDst arrays based on the data in the StEvent is in the function

void StMuDstMaker::fillFgt(StEvent* ev)