Offline Shower Max (CES) Documentation (under construction...)

Table of Content
 
1 - Introduction

2 - Various CES packages

3 - Description of the CES object

4 - Strategies and algorithms

5 - Examples

6 - Validation plots


1-Introduction

   The CES (Central Electromagnetic Strips)or Shower Maximum Detector is located at 7 radiation lengths
inside the CEM (Central Electromagnetic Calorimeter)and is designed to determine the position as well as the
transverse development of the shower. It does that by measuring the charge deposition on orthogonal strips (in
the Z direction) and wires (in the Phi direction). Here are some useful parameters related to the CES (taken from
"The CDF Central Electromagnetic Calorimeter", Nucl.Instr. and Methods A 267 (1988) 272-279):



 
Radius from the beam line 183.9 cm
Wire Channels (64)
Section 1 121.2 cm from the 90º edge
Wires  32 x 1.45484 cm
Section 2 121.2-239.6 cm from the 90º edge
Wires 32 x 1.45484 cm
Strip Channels (128)
Section 1 6.2-121.2 cm from the 90º edge
   Strips 69 x 1.67 cm
Section 2 121.2-239.6 cm from the 90º edge
   Strips 59 x 2.01 cm
Total Thickness 0.75 in.

0.069 radiation lengths

0.022 absorption lengths
Gas 95%/5% Ar/CO2

  *** If you want to jump to examples right away, go to section 5.  ***

2-CES packages

       Name of package             Contents

      -StripChamberGeometry     Classes that access and build the CES geometry. It also contains
                                             all the local to global (as well as local to strips units) transformations
                                             (see class ScWedge).
 

       -ShowerMax                    Classes that contains all the algorithms used in the clustering (mainly
                                            StripCollectionMaker and CesClusterMaker).See Section 4
                                              for a description of these algorithms.
 

      -CalorObjects                    The strip object classes ( CesCluster and CesClusterColl)are kept
                                               here. See Section 3 for a detailed description of the objects.

      -ShowerMaxMods              The module that builds the CES objects (CesClusterColl)  , i.e.
                                               CentralStripClusterModule  is kept here.
 

3-CES objects

    There are 2 types ofCES objects: the streamable CesCluster object, whichcontains all the strips information, and
   the storable CesClusterCollobject, which is a collection of CesClusterobjects. A brief description of the
   objects is given below:
 

  3.1- CesCluster
  This is a streamable object inheriting from the abstract class ShowerMaxCluster. The accessor function from the base class are:

 float                        clusterWidth()       width of the cluster(from fit)
 Detector                region ()                  ???
 float                        energy()                 raw energy of the cluster
 float                        localCoord()         fitted position of the local coordinate of the cluster
 float                        globalCoord()       global coordinate ofthe cluster (Z for the strips, Phi for the wires)
 int                            module()                phi wedge of the cluster
 int                            side()                      barrel of the cluster (0=west, 1=east)
 int                            view()                     0=wire cluster, 1=strip cluster

    Other accessor functions:

  float raw_position()                          raw local coordinate of the cluster (Z for the strip cluster, X for thewire cluster)
  float fitted_position()                        fitted local coordinate of the cluster (Z for the strip cluster, X forthe wire cluster)
  float global_position()                      global coordinate of the cluster (Z for the strip cluster, Phi for thewire cluster)
  float raw_energy()                           raw energy of the cluster
  float fitted_energy()                         fitted energy of the cluster
  float chi2()                                          chi2 of the strip OR the wire cluster
  float width()                                       width of the strip OR the wire cluster
  float width_error()                           error on the width of the strip OR the wire cluster
  float dist_track_cluster()                distance track cluster (for track based clusters only)
  uint2 first_element()                         first strip/wire nr in the strip/wire cluster
  uint2 number_elements()                number of strips/wires in the strip/wire cluster

  const vector<ScStrip>  strips()        vector of strips which make the strip cluster (see ScStrip for all theaccessors)
  const vector<ScWire>  wires()       vector of strips which make the strip cluster (see ScWire for all the accessors)
 

  3.2- CesClusterColl
    This is a storable object which contains a collection of CesClusters. There are 2 classes of clusters (see Section 4). The
Track-based clusters, which are seeded by a track andtheStrip-based (or unbiased) clusters, which are seeded by a strip.
These 2 types of clusters are sorted out in the collection with the help of a description string:
    "Track_based_seed "   for the track based cluster
    "Strip_based_seed "     for the strip based cluster
See Section 5, for examples on how to access these clusters.
 

4-Strip Clustering: strategies and algorithms
   There are two types of clustering algorithm, as far as the CES is concerned:
     - the "track-based" algorithm is designed mostly for charge electromagnetic particles (mostly electrons) and finds the seed of
the cluster usingthe extrapolation of a track to the CES radius.
    - the "strip based" or "unbiased" CES clustering is basically the runI Stpana algorithm. It sorts the strips/wires by decreasing
energy and seedsthe cluster with the highest energy strip.
    These two algorithms build a collection of strips/wires which is stored in a vector (ScStrip or ScWire, in StripChamberGeometry)
and passed by reference to the do_cluster method in CesClusterMaker (in ShowerMax). Therefore,the actual clustering algorithm is
the same in the2 cases; the only difference is the strips/wires included in the collection.  The clustering method computes the cluster
energy and positionand performs a fit to a standard profile (the fit is based on a quadraticinterpolation. See CDF Note 1329, "DEFINITION
OF CES CHISQUARE"),inorder to correct the position of the cluster.

 4.1 - Track based algorithm:
   The algorithm starts by extrapolating a track to the CES radius (method extrapolate_track in StripCollectionMaker). It records the
X and Z coordinatesofthe track in the CES local coordinate system and forms the collectionby
   -Finding the strip which is hit (toStripsUnits in ScWedge (StripChamberGeometry).
   -Adding N strips (this number is tunable in the tcl file, see Section 5)around the strip hit.
 Once the collection is formed, it is passed by reference to the cluster maker. With this algorithm, each track in the event (which passes some
Pt and eta cuts,set in the tcl file) has an associated cluster.
  4.2 - Strip based algorithm:
    This is the runI Stpana algorithm. The method findStripSeed sorts the strips/wires by decreasing energy and tags as seed strip/wireall the
strips above a certain energy threshold (adjustable in the tcl file). The strip/wire collectionis then formed by gathering N strips around the seed
strip in the method get_seed_based_strips.All the strips belonging to a clusters are tagged and removed from theremaining collection of strips
(so in this algorithma strip cannot belong to 2 clusters, unlike the previous one).

5- Examples
   5.1 - How to checkout, compile, link and run the CentralStripClusterModule
Here is the basic steps to do in order to run the clustering module:
>newrel -t development ces
>cd ces
>addpkg -h ShowerMaxMods
>gmake
>cd ShowerMaxMods
>../bin/IRIX6-KCC_3_3/Cesana < run_Cesana.tcl > logfile
Remark: right now the Ces code is not validated, so if you want the gmake to build the executable, you have to add the line
BINS = Cesana in the GNUmakefile
Parameters in the tcl file:

Parameter Name Description Default
printStripsCes Print collection of strips 0
seedThrsCes Seed energy threshold for the strips/wires 0.15
stripThrsCes Energy threshold for each strip/wire in the collection 0.15
numberWiresCes Number of wires in the collection 11
numberStripsCes Number of strips in the collection 11
Collection_strategy 0=strip based algorithm
1=track based algorithm
2=both
2
PtminCes Minimum Pt for the track seeding the cluster 1
EtaminCes Minimum pseudorapidity for the track seeding the cluster -1.2
EtamaxCes Maximum pseudorapidity for the track seeding the cluster 1.2
printCluster print parameters of the cluster 0
seedCThrs Seed energy threshold for the cluster 0.15
stripCThrs Energy threshold for every strip/wire in the cluster 0.15
numberCWires Number of wires in the cluster 11
numberCStrips Number of strips in the cluster 11
Chi2Min Maximum Chi2 of the cluster 100
   5.2 - Different ways to find CesClusters in a dst file
If you want to access all the clusters in the event, the easiest way is:
 for (EventRecord::ConstIterator ci(record,"CesClusterColl");ci.is_valid();++ci) {
    ConstHandle<CesClusterColl> ch(ci);
    for (CesClusterColl::const_iterator cc0=ch->contents().begin();cc0!=ch->contents().end();cc0++) {
    // Find local coordinate of the cluster
        float coord0 = cl0.localCoord();
    }
If you want to access a specific cluster collection, you can do the following:
  std::string description = "Track_based_seed";
  CesClusterColl_ch   cesClusterColl_ch;
  StorableObject::SelectByDescription selector( description );
  EventRecord::ConstIterator iter( theEvent, selector );

  if(iter.is_invalid()){
    cerr << "Error: could not find CES cluster collection" << endl;
    return AppResult::OK;
  }

  cesClusterColl_ch = CesClusterColl_ch(iter);
  const CesClusterColl::CesClusterVector cesClusters =  cesClusterColl_ch->contents();
   ... and then loop over the Ces vector
  For the strip based seed, replace with:
    std::string description = "Strip_based_seed";
or, easier, use the find method:
std::string description = "Track_based_seed";
 CesClusterColl::Error cesStatus = CesClusterColl::find(anEvent,description);
 if (cesStatus == CesClusterColl::ERROR){
    cerr << "Error in JetExampleModule: could not find jet collection" << endl;
     return AppResult::ERROR;
  }
const CesClusterColl::CesClusterVector cesClusters = cesColl_ch->contents();
   5.3 - How to perform some basic transformations
Say you have found the local coordinate of the cluster: xces in the module m, barrel b and you want to know what is
the corresponding phi in the CDF coordinate system; here is what you do:
// Initialize geometry for CES
const  AbsScDetectorNode *theScDetector=CdfDetector::instance()->getScDetector();
  
const CdfScWedgeSet *myWedgeSet=theScDetector->getWedgeSet();
// Local coordinate of the cluster
float x_ces = ciCesCluster->fitted_z_strip();               
ScWedgeCode waferCode (ciCesCluster->side(),ciCesCluster->module());
CdfScWedgeSet::ConstIterator ww=myWedgeSet->find(waferCode);
if (ww!=myWedgeSet->end()) {
   HepPoint3D  pos = (*ww).getGlobalPositionVector(x_ces,unsigned(0));
   double phi_ces=pos.phi();
}
// Get the strip/wire number corresponding to the intersection of the track with the CES
StripCollectionMaker StripCol;
// Get the extrapolated position of the track
int match = StripCol.extrapolate_track(theTrack);
int stripNo,wireNo;
if(match){                       // if the track extrapolates to a physical region of the CES
    float zloc= StripCol.get_Zlocal();
    float xloc= StripCol.get_Xlocal();
    int mod = StripCol.getModule(); int sid = StripCol.getSide();
    const  AbsScDetectorNode *theScDetector=CdfDetector::instance()->getScDetector();
    const CdfScWedgeSet *myWedgeSet=theScDetector->getWedgeSet();
    ScWedgeCode waferCode (mod,sid);
    CdfScWedgeSet::ConstIterator ww=myWedgeSet->find(waferCode);
    if (ww!=myWedgeSet->end()) {
           stripNo = (*ww).toStripUnits(zloc,unsigned(0));   // Bad convention 0=strip but 1=strip cluster...
           wireNo = (*ww).toStripUnits(xloc,unsigned(1));
    }
}



6 - Validation plots

These plots have been produced with the executable CentralStripClusterTest (except
the plot from commissioning run data).

Single 5 GeV electrons

Single 10 GeV electrons

Single 15 GeV electro
ns

J/Psi -> e e

t - tbar

(NEW) Data: 1 x 8 store (from conversion)

Commissioning run data (from conversion)




Some other plots of interest:



CES efficiency from run I (Steve Kulhman)



Strip clusters in (ieta, iphi) (Andrea Bocci)



View of a strip and a wire cluster from Joe's event display (Joe Boudreau)






Last update: 9/03/01 by Michael Riveline