BmnRoot
Loading...
Searching...
No Matches
BmnVspRaw2Digit.cxx
Go to the documentation of this file.
1#include "BmnVspRaw2Digit.h"
2// ROOT
3#include <TTimeStamp.h>
4// FairRoot
5#include "FairLogger.h"
6// BmnRoot
7#include "BmnVSPDigit.h"
8#include "BmnVspRawDigit.h"
9#include "StsConst.h"
10
11BmnVspRaw2Digit::BmnVspRaw2Digit(int32_t period, int32_t run, TString mapFileName, BmnSetup bmnSetup)
12 : fPeriod(period)
13 , fRun(run)
14 , fSetup(bmnSetup)
15 , station_set(BmnVSPStationSet::Create(fPeriod, fSetup))
16{}
17
18BmnStatus BmnVspRaw2Digit::FillEvent(TClonesArray* adc, TClonesArray* digits, BmnEventHeader* eh)
19{
20 uint64_t ulHitTimeFLESbeg = 0;
21 bool fIsFirstFound = false;
22 for (int32_t iRaw = 0; iRaw < adc->GetEntriesFast(); ++iRaw) {
23 BmnVspRawDigit* dig = static_cast<BmnVspRawDigit*>(adc->At(iRaw));
24 if (!fIsFirstFound) {
25 ulHitTimeFLESbeg = dig->GetTrigTime();
26 double trigTimeNsd = ulHitTimeFLESbeg * StsConst::kdClockCycleNs;
27 uint64_t trigTimeNs = trigTimeNsd;
28 fIsFirstFound = true;
29 if (eh) {
30 int64_t sns = 1e9;
31 int64_t sec = trigTimeNs / sns;
32 int32_t nsec = trigTimeNs % sns;
33 eh->SetVspTS(TTimeStamp(sec, nsec));
34 LOGF(debug, "VSP ts %s", eh->GetVspTS().AsString());
35 }
36 }
37 for (size_t iHit = 0; iHit < dig->GetNHits(); iHit++) {
38 uint16_t usAsicIdx = StsConst::GetIdx_AsicFromELink(dig->GetVecElinkIdx()[iHit]);
40 uint16_t usSensor =
41 StsConst::GetIdx_SensorFromAsic(dig->GetDpbIdx(), usAsicIdx); // call for the multi DPB analysis
42 uint16_t usStrip = StsConst::GetIdx_Strip(usSensor, usAsicIdx, dig->GetVecChan()[iHit]);
43 uint64_t ulTimeSinceBegin_ns =
44 (dig->GetVecHitTimeFLES()[iHit] - ulHitTimeFLESbeg) * StsConst::kdClockCycleNs; // in ns
45 Double_t dTimeSinceBegin_ns = static_cast<Double_t>(ulTimeSinceBegin_ns); // in ns
46 uint16_t iMod = usSensor > 2 ? (8 - usSensor) : usSensor; // @TODO replace
47 uint16_t iLayer = (sSType == StsConst::SideType::NEG) ? 0 : 1; // @TODO replace
48 uint16_t iStation = 0;
49 auto* st = station_set->GetStation(iStation);
50 auto* mod = st->GetModule(iMod);
51 auto& lay2 = mod->GetStripLayer(2);
52 uint16_t iStrip =
53 // (lay.GetStripNumberingOrder() == StripNumberingDirection::RightToLeft)
54 // ?
55 // (lay.GetNStrips() - usStrip) :
56 usStrip;
57 BmnVSPDigit* newdig = new ((*digits)[digits->GetEntriesFast()])
58 BmnVSPDigit(iStation, iMod, iLayer, iStrip, dig->GetVecAdc()[iHit]);
59 newdig->SetTTimeSinceBegin_ns(dTimeSinceBegin_ns);
60 // repeat to the 3rd layer connected wires
61 if ((iLayer == 1) && (iStrip <= lay2.GetLastStripNumber())) {
62 BmnVSPDigit* newdig2 = new ((*digits)[digits->GetEntriesFast()]) BmnVSPDigit(newdig);
63 newdig2->SetStripLayer(2);
64 }
65 }
66 }
67 return kBMNSUCCESS;
68}
BmnStatus
Definition BmnEnums.h:24
@ kBMNSUCCESS
Definition BmnEnums.h:25
BmnSetup
Definition BmnEnums.h:89
void SetVspTS(TTimeStamp event_time)
TTimeStamp GetVspTS()
void SetStripLayer(Int_t layer)
void SetTTimeSinceBegin_ns(Double_t val)
Definition BmnVSPDigit.h:18
BmnStatus FillEvent(TClonesArray *adc, TClonesArray *digits, BmnEventHeader *eh=nullptr)
BmnVspRaw2Digit(Int_t period, Int_t run, TString mapFileName="", BmnSetup bmnSetup=kBMNSETUP)
vector< uint64_t > & GetVecHitTimeFLES()
uint16_t GetDpbIdx() const
vector< uint16_t > & GetVecAdc()
vector< uint16_t > & GetVecElinkIdx()
uint64_t GetTrigTime() const
vector< uint16_t > & GetVecChan()
UInt_t GetIdx_SensorFromAsic(uint16_t iDpbIdx, uint16_t iAsicIdx)
Definition StsConst.h:91
uint16_t GetIdx_Strip(uint16_t iSensIdx, uint16_t iAsicIdx, uint16_t iChannel)
Definition StsConst.h:128
UInt_t GetIdx_SideFromAsic(UInt_t iAsicIdx)
Definition StsConst.h:72
uint16_t GetIdx_AsicFromELink(uint16_t uELinkIdx)
Definition StsConst.h:79
-clang-format