SND@LHC Software
Loading...
Searching...
No Matches
SciFiUnpack Class Reference

#include <SciFiUnpack.h>

Inheritance diagram for SciFiUnpack:
Collaboration diagram for SciFiUnpack:

Public Member Functions

 SciFiUnpack (uint16_t PartitionId)
 
virtual ~SciFiUnpack ()
 
virtual Bool_t Init () override
 
virtual Bool_t DoUnpack (Int_t *data, Int_t size) override
 
virtual void Reset () override
 
uint16_t GetPartition () override
 
- Public Member Functions inherited from ShipUnpack
 ShipUnpack ()
 
virtual ~ShipUnpack ()
 
Int_t GetNHitsTotal ()
 

Protected Member Functions

virtual void Register () override
 

Private Member Functions

 SciFiUnpack (const SciFiUnpack &)
 
SciFiUnpackoperator= (const SciFiUnpack &)
 

Private Attributes

std::unique_ptr< TClonesArray > fRawData
 
Int_t fNHits = 0
 
Int_t fNHitsTotal = 0
 
uint16_t fPartitionId = 0x0900
 

Detailed Description

Definition at line 6 of file SciFiUnpack.h.

Constructor & Destructor Documentation

◆ SciFiUnpack() [1/2]

SciFiUnpack::SciFiUnpack ( uint16_t  PartitionId)

Definition at line 39 of file SciFiUnpack.cxx.

39: fRawData(new TClonesArray("SciFiHit")) {}
std::unique_ptr< TClonesArray > fRawData
Definition SciFiUnpack.h:29

◆ ~SciFiUnpack()

SciFiUnpack::~SciFiUnpack ( )
virtualdefault

Destructor.

◆ SciFiUnpack() [2/2]

SciFiUnpack::SciFiUnpack ( const SciFiUnpack )
private

Member Function Documentation

◆ DoUnpack()

Bool_t SciFiUnpack::DoUnpack ( Int_t *  data,
Int_t  size 
)
overridevirtual

Process an MBS sub-event.

Reimplemented from ShipUnpack.

Definition at line 61 of file SciFiUnpack.cxx.

62{
63
64 LOG(INFO) << "SciFiUnpack : Unpacking frame... size/bytes = " << size ;
65
66 auto df = reinterpret_cast<SciFiDataFrame *>(data);
67 switch (df->header.frameTime) {
68 case SoS: LOG(INFO) << "SciFiUnpack: SoS frame." ; return kTRUE;
69 case EoS: LOG(INFO) << "SciFiUnpack: EoS frame." ; return kTRUE;
70 default: break;
71 }
72
73 int i = 0;
74 int layerID;
75 assert(df->header.size == size);
76 auto nhits = df->getHitCount();
77 LOG(INFO) << nhits << " hits." ;
78 std::vector<HitData> hits(df->hits, df->hits + nhits);
79 // std::cout << df->header.size << " " << size << " " << nhits << std::endl;
80 for (auto &&hitData : hits) {
81 auto triggerFlag = (hitData.ch >= 16000) ? 1 : 0;
82 auto board = (triggerFlag == 1) ? (hitData.ch - 15999) : (hitData.ch / 512 + 1);
83 auto layer = (board-1) / 3 + 1;
84 if (layer==1) layerID=111;
85 else if (layer==2) layerID=112;
86 else if (layer==3) layerID=121;
87 else if (layer==4) layerID=122;
88 else if (layer==5) layerID=131;
89 else if (layer==6) layerID=132;
90 else if (layer==7) layerID=141;
91 else layerID=142;
92
93 // 0-25 * 10**5 + 0-16025;
94 auto detectorId = board * pow(10, 5) + hitData.ch;
95 bool trigflag = triggerFlag;
96
97 new ((*fRawData)[fNHits]) SciFiHit(detectorId, layerID, hitData.ch, board, hitData.time, hitData.finetime, hitData.flags, trigflag);
98
99 fNHits++;
100 }
101
103 return kTRUE;
104
105}
Int_t fNHitsTotal
Definition SciFiUnpack.h:31
int i
Definition ShipAna.py:86
integer(mpi) nhits
number of hits
Definition mptest1.f90:58

◆ GetPartition()

uint16_t SciFiUnpack::GetPartition ( )
inlineoverridevirtual

Implements ShipUnpack.

Definition at line 22 of file SciFiUnpack.h.

22{ return fPartitionId; }
uint16_t fPartitionId
Definition SciFiUnpack.h:32

◆ Init()

Bool_t SciFiUnpack::Init ( )
overridevirtual

Initialization. Called once, before the event loop.

Reimplemented from ShipUnpack.

Definition at line 43 of file SciFiUnpack.cxx.

44{
45 Register();
46 return kTRUE;
47}
virtual void Register() override

◆ operator=()

SciFiUnpack & SciFiUnpack::operator= ( const SciFiUnpack )
private

◆ Register()

void SciFiUnpack::Register ( )
overrideprotectedvirtual

Register the output structures.

Reimplemented from ShipUnpack.

Definition at line 49 of file SciFiUnpack.cxx.

50{
51
52 LOG(INFO) << "SciFiUnpack : Registering..." ;
53 auto *fMan = FairRootManager::Instance();
54 if (!fMan) {
55 return;
56 }
57 fMan->Register("Digi_SciFiHits", "SciFi", fRawData.get(), kTRUE);
58 // fMan->Register("Digi_SciFiTrigger", "SciFi", fRawTrigger, kTRUE);
59}

◆ Reset()

void SciFiUnpack::Reset ( )
overridevirtual

Clear the output structures.

Reimplemented from ShipUnpack.

Definition at line 107 of file SciFiUnpack.cxx.

108{
109 fRawData->Clear();
110 fNHits = 0;
111}

Member Data Documentation

◆ fNHits

Int_t SciFiUnpack::fNHits = 0
private

Number of raw items in current event.

Definition at line 30 of file SciFiUnpack.h.

◆ fNHitsTotal

Int_t SciFiUnpack::fNHitsTotal = 0
private

Total number of raw items.

Definition at line 31 of file SciFiUnpack.h.

◆ fPartitionId

uint16_t SciFiUnpack::fPartitionId = 0x0900
private

Definition at line 32 of file SciFiUnpack.h.

◆ fRawData

std::unique_ptr<TClonesArray> SciFiUnpack::fRawData
private

Array of output raw items.

Definition at line 29 of file SciFiUnpack.h.


The documentation for this class was generated from the following files: