Basic

####
options :
   # should getters / setters be prefixed with get / set?
   getSyntax: True
   # should POD members be exposed with getters/setters in classes that have them as members?
   exposePODMembers: False
   includeSubfolder: True # add folder name when #include headers

components:
   # A component is a POD designed to be embedded in another POD,
   # Components cannot be stored in a collection
   edm::Vector3f:
      Members:
         - float x
         - float y
         - float z
      ExtraCode:
         declaration: "
            Vector3f() = default;\n
            Vector3f(float xx, float yy, float zz): x(xx),y(yy),z(zz) {}\n
            /// enable to construct from array interface \n
            template<typename T> Vector3f(const T* v): x(v[0]),y(v[1]),z(v[2]) {}\n
            /// enable to construct from G4ThreeVector or TVector3 or other 3-vector classes \n
            template<class T> Vector3f(T const& other): x(other.x()), y(other.y()), z(other.z()) {} \n
            /// comparison op \n
            bool operator==(const Vector3f& v) const { return (x==v.x && y==v.y && z==v.z); }\n
            /// array-like interface \n
            float operator[](unsigned i) const { return *( &x + i ) ; }\n
            float& operator[](unsigned i) { return *( &x + i ) ; }\n
            /// raw array interface \n
            operator float const* () const { return &x; }\n
            /// TODO: need a way to construct other 3-vector types...\n
            /// e.g. G4ThreeVector(CLHEP::Hep3Vector) can only construct from x,y,z numbers\n
            /// TVector3 accepts double*, but XYZVector need object with x() y() z() ...\n
            "

General

Event Information

####

<!--
# Datatypes are components that can be stored in a Collection
-->
datatypes :
   edm::MCEvent:
      Description: "info dedicated for simulation"
      Author: "Z.Tang"
      Members:
         - int randomSeed // the random seed for this event
         - int status     // reserved for status bits

   edm::Event:
      Description: "event info"
      Author: "Z.Tang"
      Members :
         - int run       // run id
         - int event     // event id in the run
         - int localtime // reserved for DAQ computer local time in seconds from 2020-1-1
         - double utc    // reserved for UTC time from DAQ computer or offline

MC Particles

Infomation about simulated particles

  • pdgid, trackid, parentid (int)

  • position (float*3)

  • momentum (float*3)

  • time (float) (charge, mass, …) (short)

yaml code:

####

   edm::MCParticle:
      Description: "MC particle"
      Author: "Z.Tang"
      Members:
         - int pdgID                    // PDG code of the particle
         - int trackID                  // index of the particle
         - int parentID                 // index of parent particle
         - edm::Vector3f momentum       // particle 3-momentum in [GeV]
         - edm::Vector3f vertex         // production vertex of the particle in [cm].
         - short charge                 // atomic charge
         - uint16_t mass                // atomic mass, 0 for e+ e-
         - float time                   // creation time of the particle in [ns] w.r.t. the event
         - uint32_t simstat             // (opt) status of the particle from the simulation

CALO Simulation Hit (cell)

  • cell id (ushort*3)

  • edep in cell (float)

  • cog in cell (float*3)

  • time (float)

  • fraction of EM shower (ushort)

  • fraction of backsplash (ushort)

yaml code:

####

   edm::CaloSimCell:
      Description: "MC truth info in calo cell"
      Author: "Z.Tang"
      Members:
         # unsigned char not supported... not sure if we shall use char
         - short ix                // X index of the cell
         - short iy                // Y index of the cell
         - short iz                // Z index of the cell
         - float edep              // energy of the hit in [GeV].
         - uint16_t fracEM         // int(frac*65535)
         - uint16_t fracBS         // both, int(em*255) | int(h*255)<<8
         - edm::Vector3f pos       // CoG of the hits in the cell in [cm]
         - edm::Vector3f localpos  // as above, in local coo [cm]
         - float tfirst            // first hit time in the cell [ns] (or t0?)
         - float tmean             // mean time of hits in the cell [ns]
         - float tsigma            // sigma of times of hits in the cell [ns]
      MutableExtraCode:
         declaration: "
             void setCellIndex(short x, short y, short z){ setIx(x);setIy(y);setIz(z); }
            "

Tracking Simulation Hit (step)

  • cell id (int)

  • pdgid (int)

  • edep of the step (float)

  • local position (float)

  • local direction (float)

  • pathlength (float) yaml code:

####

   edm::TrackingSimHit:
      Description: "Simulated tracking hit, record individual truth step in cells"
      Author: "Z.Tang"
      Members:
         - unsigned int  cellCode    // encoded cell numbering, e.g. sth like 10000*ilayer+100*iladder+isensor
         - float         time        // incident time of the hit [ns].
         - edm::Vector3f pos         // the hit position in [cm].
         - edm::Vector3f localpos    // the local step start position in [cm].
         - edm::Vector3f localend    // the local step ending position in [cm].
         - float         pathlen     // path length of the hit(track) in the sensitive material [cm]
         - float         edep        // energy deposited in the hit [GeV].
         - edm::Vector3f momentum    // the 3-momentum of the particle at the hit position in [GeV]
         - int           trackID     // the track ID of the particle which resulting the hit
         - int           pdgID       // PDG ID of the particle that created this hit
           #- edm::Vector3f dir         // try to replace momentum with dir and P=|momentum|
           #- float P                    // |momentum| or maybe betagamma better?
           #- float dir_theta //
           #- float dir_phi //

CALO

CALO Digitization Hit (cell)

  • cell id (ushort)

  • high range grayscale (int)

  • low range grayscale (int)

  • (link to sim hit)

yaml code:

####

   edm::CaloDigiCell:
      Description: "calo cell digitization"
      Author: "Z.Tang Z.Quan"
      Members:
         - unsigned int cellCode        // encoded cell code
         - std::array<int, 3> grayHR    // total grayscale value in CMOS for high range, 3 radius
         - std::array<int, 3> grayLR    // total grayscale value in CMOS for low range, 3 radius
      OneToOneRelations:
         - edm::CaloSimCell siminfo    // if there is any...

CALO Reconstruction Hit (cell)

  • cell id (ushort*3)

  • edep (float)

  • (link to digi hit)

####

   edm::CaloRecoCell:
      Description: "calo cell after calibration"
      Author: "Z.Tang Z.Quan"
      Members:
         - float edep       // cell edep [GeV] after calibration
         - short ix         // X index of the cell in calo
         - short iy         // Y index of the cell in calo
         - short iz         // Z index of the cell in calo
      OneToOneRelations:
         - edm::CaloDigiCell  digiinfo // link to digi object
           #maybe also need other links in the future...

CALO cluster

2 tpyes of collections: CaloClusters_Calib CaloClusters_Sim

####
   edm::CaloClusters:
      Description: "Calo Clusters"
      Author: "C.Zhang et al"
      Members:
         - int id          // cluster ID
         - float edep      // cluster total energy deposition
      VectorMembers:
         - uint16_t ihits  // hit id in the cluster

CALO axis

6 types of collection: [PCA,NCDER,CNN]X[_Calib,_Sim]

####
   edm::CaloShowerAxis:
      Description: "Calo Shower Axis"
      Author: "C.Zhang et al"
      Members:
         - int id                  // Shower ID
         - edm::Vector3f dir       // [dx,dy,dz]
         - edm::Vector3f entryCoor // [x1,y1,z1]
         - edm::Vector3f cog       // [x0,y0,z0]
         - edm::Vector3f exitCoor  // [x2,y2,z2]
      VectorMembers:
         - uint16_t iclusters      // cluster ids
        #- uint16_t iHits       // hit ids <optional>

PSD

PSD Digitization Hit (bar)

  • cell code (uint)

  • ADC0, ADC1 (short) for 2 SiPM at the moment

  • zero suppressed

  • (TDC[2]) (short)

  • (link to sim hit)

yaml code:

####

   edm::PSDDigiCell:
      Description: "digi hit for psd bar v0"
      Author: "Z.Tang, Q.Wu"
      Members:
         - unsigned int cellCode        // the same bar/tile code as in TrackingSimHit
         - int ADC0                     // SiPM ADC value, one for each side
         - int ADC1                     //
         #//- short TDC[2]          // reserved for TDC
         #OneToManyRelations:
         #- edm::TrackingSimHit siminfos // link to lots of sim hits, do we need?

PSD Reconstruction hit (bar)

  • cell code (uint)

  • edep (float) reconstructed edep

yaml code:

####

   edm::PSDRecoCell:
      Description: "reco hit for psd bar v0"
      Author: "Z.Tang, Q.Wu"
      Members:
         - unsigned int cellCode        //
         - float edep                   // reconstructed edep
         - float edepBirksCorr          // with Birks law correction (experimental)
         - float nPE0                   // convert ADC to nPE at SiPM w/ corrections
         - float nPE1                   // convert ADC to nPE at SiPM w/ corrections
         - float hitpos                 // reco hit local position from bar alone

FIT

FIT Digitization Hit (mat sipm channel)

  • cell code (uint)

  • channelID (short)

  • ADC0, ADC1 (short) for 2 SiPM at the moment

  • zero suppressed

  • (TDC[2]) (short)

  • (link to sim hit)

yaml code:

####

   edm::FITDigiCell:
      Description: "digi hit for FIT v0"
      Author: "Z.Tang, J Wang"
      Members:
         - unsigned int cellCode        // the same mat code as in TrackingSimHit
         - uint16_t channelID           // channel id inside a MAT (3 SiPM at the moment)
         - int ADC                      // SiPM channel ADC value
         #//- short TDC          // reserved for TDC
      OneToManyRelations:
         - edm::TrackingSimHit siminfos // link to lots of sim hits, do we need?

FIT Reconstruction hit (mat)

  • cell code (uint)

  • edep (float) reconstructed edep

yaml code:

####

   edm::FITRecoCell:
      Description: "reco hit for FIT v0"
      Author: "Z.Tang, J.Wang"
      Members:
         - unsigned int cellCode        //
         - uint16_t channelID           // channel id inside a MAT (3 SiPM)
         - float edep                   // reconstructed edep
           #- float edepBirksCorr          // with Birks law correction (experimental)

FIT cluster object

####
   edm::FITCluster:
      Description: "FIT Cluster"
      Author: "J.Wang et al"
      Members:
         - unsigned int cellCode        // cell code of the mat
         - bool         ifOddLayer      // flag of whether on an odd numbered layer
         - char         vertAligned     // flag of cell projection, see DirectionInfo in GeometrySvc
         - uint16_t     peakChannel     // channel ID of the peak
         - float        peakChannelAmp  // after calibration, in unit of p.e. [float]
         - uint16_t     peakLeft        // how many channels are on the left side of the peak channel?
         - uint16_t     peakRight       // how many channels are on the right side of the peak channel?


         - float        clusterAmp      // total channel amp
         - uint16_t     clusterSize     // number of channels with amp > neighbor threshold
         - float        clusterCharge   // reconstructed cluster |z| if m_trackType==calo seed (default -1)
         - edm::Vector3f posLocal       //  wrt layer  [?]
         - edm::Vector3f position       // cluster position in global coo, use mat coo for the unkown direction
         - int          type            // simple cluster, or splited from large cluster(1to2,even 1to3...)
      VectorMembers:
         - uint16_t     channels        // channel id within a mat
         - float        channelAmps     // corrected?

FIT track

####
   edm::FITTrack:
      Description: "FIT Track"
      Author: "J.Wang et al"
      Members:
         - int          seedType        // blind search, calo seed, scd seed
         - edm::Vector3f fittedDir      //
         - edm::Vector3f fittedPos      // impact point closest to CALO
         - int          impactSector    // 0~4
         - int          impactLayer     // initial hit from outer layers
         - double       particleZ       //0~gamma, 1 charged particle
         - double       chi2x           //
         - double       chi2y           //
         - double       ndfx            // int?
         - double       ndfy            //
         - int          nHitX           // number of y hit in X layer
         - int          nHitY           // number of x hit in Y layer
         - int          nHitXY          // number of x&y pair in physical geo
         - double trackLength           // ?
      VectorMembers:
         - short clusterIDs             // maybe podio relation
         - short planes                 // layer#
         #- float fittedCov //

TRD

TRD Digitization Hit (module)

  • cell code (uint)

  • ADC (short*128) readouts for channels

  • (link to sim hit)

yaml code:

####

   edm::TRDDigiCell:
      Description: "digi hit for TRD v0"
      Author: "Z.Tang, C.Dai"
      Members:
         - unsigned int cellCode       // the same mat code as in TrackingSimHit
         - std::array<short,128> ADC     // ADC values for all channels in a module
           #//- std::array<short,128> TDC          // reserved for TDC
         #OneToManyRelations:
         #- edm::TrackingSimHit siminfos // link to lots of sim hits, do we need?

TRD Reconstruction hit (module)

  • cell code (uint)

  • rawEdep (float*128) direct reco edep for channels

  • corrEdep (float*128) corrected based on input position

  • edep (float) reconstructed edep for the XR channel

yaml code:

####

   edm::TRDRecoCell:
      Description: "reco hit for TRD v0"
      Author: "Z.Tang, C.Dai"
      Members:
         - unsigned int cellCode          // cell code (module)
         - float edep                     // reconstructed edep of selected channels
         - std::array<float,128> rawEdep  // raw edep from ADC
         - std::array<float,128> corrEdep // considering also lateral position correction

Trigger

Fast Trigger Object

  • subdet (ushort?)

  • type (ushort?)

  • trigger region (ushort)

  • trigger time (float)

####
   edm::FastTrigger:
      Description: "fast trigger digi & calculation in regions, for subdets (CALO, PSD, ...)"
      Author: "Z.Tang M.Xu"
      Members:
         - char det     // calo pmt, calo pd, psd, ...
         - char type    // det specific, e.g. calo= LEE,LEG,...
         - char region  // triggered region (core, shell1,shell2, ...)
         - float time    // trigger time simulation, to be used in high level trigger

Trigger Object

  • trigger pattern (uint)

  • links to fast trigger objects

####
   edm::Trigger:
      Description: "high level trigger results based on fast triggers"
      Author: "Z.Tang M.Xu"
      Members:
         - unsigned int pattern               // trigger pattern
      OneToManyRelations:
         - edm::FastTrigger fastTrg // link to fast triggers

Global Objects

Global Track

yaml code:

####

   edm::GlobalTrack:
      Description: "Reconstructed track from SCD cluster and FIT clusters"
      Author : "ZYQU"
      Members:
         - edm::Vector3f position       // position
         - edm::Vector3f direction      // direction
         - int nHit                     // number of hit used in this track
         - float chi2                   // fited Chi2 with default measurement error
         - float charge                 // Global Charge from all Clusters
         - float chargeSCD              // Charge estimated from SCD
         - float chargeFIT              // Charge estimated from FIT
         - int   type                   // type of track, 0 for half track, 1 for whole track
      VectorMembers:
         - edm::Vector3f coos           // coordinate used in the fit
      OneToManyRelations:
         - edm::SCDCluster  scdcls      // SCD cluster collection
         - edm::FITCluster  fitcls      // FIT cluster collection


   # still need more high level reco objects