Data Unpacking using art Producer

This section is intended to prepare the user on how to run the DAQ data unpacking step.

A good example is given here:

Input Source

This is the location where we specify which MIDAS raw bank to be stored into the art events.

source : {
  module_type : MidasBankInput    
  //Parameters parsed by the detail class
  detail : {
   requestedBanks: ["CT", "CP", "CQ", "CF", "CH", "CC", "CA", "CR", "CB", "LA", "LR"]
   maxBankWordsToPrint : 0


Several important Services that we use are the ODBHolder service, TemplateFitterHolder service and TimeTracker service.

services : {
 ODBHolder : {}
 TemplateFitterHolder : {    
  storeSplines: true
 TimeTracker: {}


In order to use the right reconstruction algorithms on the right type of data products, these filters are used before a certain set of producers/analyzers.

  filters: {
    MuonFilter: {    
     module_type: FillTypeFilter    
     fillType: 1
   LaserFilter: {
     module_type: FillTypeFilter    
     fillType: 2
   PedestalFilter: {
     module_type: FillTypeFilter
     fillType: 3
   AsyncFilter: {
     module_type: FillTypeFilter
     fillType: 4    


Unpackers that are used to unpack MIDAS bank data are setup here.

producers: {
  UTCAUnpacker: {
    module_type: UTCAUnpacker
    verboseLevel: 0
    bankPrefixes: ["C", "L", "A", "P"]

  headerUnpacker: {    
    module_type: CaloHeaderUnpacker
    verboseLevel: 0
    bankPrefixes: ["L", "C"]

  RawUnpacker: {
    module_type: CaloRawUnpacker
    bankPrefixes: ["L", "C"]
    verboseLevel: 0
    nCrates: 24

  islandUnpacker : {
    module_type:          IslandUnpacker    
    unpackerInstanceName: unpacker
    inputModuleLabel:     MidasBankInput
    verboseLevel:         0
    sortIslands: true
      //maxNumEntries:      -1 //Define a maximum number of data bank entries to unpack per event (debugging), set to -1 for no limit

  CHUnpacker: {
    module_type: CHUnpacker

  FitUnpacker: {
    module_type: GpuFitResultUnpacker
    unpackerInstanceLabel: gpuFitUnpacker



Here is how we defined path for different trigger types (muon, laser, pedestal and asynchronous).

// Define paths/streams
  muonPath:  [@sequence::common, MuonFilter, islandUnpacker, islandFitter, energyCalibrator, hitCluster]
  laserPath: [@sequence::common, LaserFilter, riderFitter]
  pedestalPath: [@sequence::common, PedestalFilter, more producers here ......]
  asyncPath: [@sequence::common, AsyncFilter, more producers here ......]

common are the information that have to be unpacked before we can apply the Filter. This is because the Filter needs to readout the trigger type from these information.

common: [UTCAUnpacker, headerUnpacker, RawUnpacker]