50 mTPCmapper(
Mapper::instance()),
52 mShowOccupancy(kFALSE)
57void SimpleEventDisplay::initHistograms()
64 const int numberOfTimeBins = mLastTimeBin - mFirstTimeBin;
66 mHSigIROC =
new TH2D(
"PadSigIROC",
"Pad Signals IROC", numberOfTimeBins, mFirstTimeBin, mLastTimeBin, nPadsIROC, 0, nPadsIROC);
67 mHSigOROC =
new TH2D(
"PadSigOROC",
"Pad Signals OROC", numberOfTimeBins, mFirstTimeBin, mLastTimeBin, nPadsOROC, 0, nPadsOROC);
92 if ((timeBin > mLastTimeBin) || (timeBin < mFirstTimeBin)) {
95 if (mSectorLoop &&
roc % 36 != mSelectedSector % 36) {
99 if (
row < 0 || pad < 0) {
100 printf(
"Wrong Pad or Row number, skipping!");
104 float corrSignal = signal;
114 if (mCurrentChannel == -1) {
115 mCurrentChannel = iChannel;
122 if (iChannel != mCurrentChannel) {
123 mLastSector = mCurrentROC;
124 mCurrentChannel = iChannel;
132 if (mCurrentROC % 36 == mSelectedSector % 36) {
133 const Int_t nbins = mLastTimeBin - mFirstTimeBin;
134 const Int_t
offset = (nbins + 2) * (iChannel + 1) + (timeBin - mFirstTimeBin) + 1;
137 mHSigIROC->GetArray()[
offset] = corrSignal >= mSignalThreshold ? corrSignal : 0;
139 mHSigOROC->GetArray()[
offset] = corrSignal >= mSignalThreshold ? corrSignal : 0;
146 if (corrSignal >
val && corrSignal >= mSignalThreshold) {
148 mMaxPadSignal = corrSignal;
149 mMaxTimeBin = timeBin;
153 const auto occupancy = calROCOccupancy.
getValue(
row, pad);
155 if (corrSignal >= mSignalThreshold) {
156 calROCOccupancy.
setValue(
row, pad, occupancy + 1.0f);
165 if (mSelectedSector % 36 != mLastSelSector % 36) {
168 mLastSelSector = mSelectedSector;
169 mSectorLoop = kFALSE;
181 const CRU cru(cruNumber);
184 const int fecOffset = (nFECs + 1) / 2;
186 const int dataWrapperID = fecInPartition >= fecOffset;
187 const int globalLinkID = (fecInPartition % fecOffset) + dataWrapperID * 12;
189 mSelectedSector =
roc;
194 const Int_t nbins = mLastTimeBin - mFirstTimeBin;
199 TH2D* hPadSignals =
nullptr;
202 TH2F* hPadTime =
nullptr;
204 hPadTime =
static_cast<TH2F*
>(gROOT->FindObject(
"hPadTimeValsI"));
205 hPadSignals = mHSigIROC;
207 hPadTime =
static_cast<TH2F*
>(gROOT->FindObject(
"hPadTimeValsO"));
208 hPadSignals = mHSigOROC;
211 static Int_t lastRoc = -1;
212 static Int_t lastRow = -1;
213 if (hPadTime && ((lastRoc !=
roc) || (lastRow !=
row))) {
216 const auto nBins = hPadTime->GetNbinsY();
217 const auto shift = nBins / 2 - nPads / 2;
218 for (
int iPad = 0; iPad < nPads; ++iPad) {
220 const Int_t
offset = (nbins + 2) * (ichannel + 1);
221 const double* arrSig = hPadSignals->GetArray() +
offset;
222 for (
int iTime = 0; iTime < nbins; ++iTime) {
223 hPadTime->SetBinContent(iTime + 1, iPad + shift + 1, arrSig[iTime + 1]);
226 hPadTime->SetEntries(nPads * nbins);
227 hPadTime->SetTitle(fmt::format(
"Pad row {}",
row).data());
228 hPadTime->SetUniqueID(
row);
233 const Int_t
offset = (nbins + 2) * (channel + 1);
234 Double_t* arrP =
nullptr;
236 TString title(
"#splitline{#lower[.1]{#scale[.5]{");
239 h = (TH1D*)gROOT->FindObject(
"PadSignals_IROC");
241 h =
new TH1D(
"PadSignals_IROC",
"PadSignals IROC;time bin (200ns);amplitude (ADC counts)", nbins, mFirstTimeBin, mLastTimeBin);
243 h->SetFillColor(kBlue - 10);
244 arrP = mHSigIROC->GetArray() +
offset;
247 h = (TH1D*)gROOT->FindObject(
"PadSignals_OROC");
249 h =
new TH1D(
"PadSignals_OROC",
"PadSignals OROC;time bin (200ns);amplitude (ADC counts)", nbins, mFirstTimeBin, mLastTimeBin);
251 h->SetFillColor(kBlue - 10);
252 arrP = mHSigOROC->GetArray() +
offset;
255 title += (
roc / 18 % 2 == 0) ?
"A" :
"C";
256 title += Form(
"%02d (%02d) row: %02d, pad: %03d, globalpad: %05d (in roc)}}}{#scale[.5]{FEC: %02d (%02d), Chip: %02d, Chn: %02d, CRU: %d, Link: %02d (%s%d)}}",
257 roc % 18,
roc,
row, pad, channel, fecInfo.
getIndex(), fecInPartition, fecInfo.
getSampaChip(), fecInfo.
getSampaChannel(), cruNumber %
CRU::CRUperSector, globalLinkID, dataWrapperID ?
"B" :
"A", globalLinkID % 12);
259 h->SetTitle(title.Data());
261 for (Int_t
i = 0;
i < nbins;
i++) {
262 entries += (Int_t)arrP[
i + 1];
264 h->Set(nbins + 2, arrP);
265 h->SetEntries(entries);
270void SimpleEventDisplay::resetEvent()
289 if (timeBin < mFirstTimeBin || timeBin > mLastTimeBin) {
294 const int iTimeBin = timeBin - mFirstTimeBin + 1;
296 for (
int ipad = 0; ipad < mHSigIROC->GetNbinsY(); ++ipad, ++ichannel) {
297 h->SetBinContent(ichannel + 1, mHSigIROC->GetBinContent(iTimeBin, ipad + 1));
301 for (
int ipad = 0; ipad < mHSigOROC->GetNbinsY(); ++ipad, ++ichannel) {
302 h->SetBinContent(ichannel + 1, mHSigOROC->GetBinContent(iTimeBin, ipad + 1));
305 h->SetEntries(ichannel);
Class for time synchronization of RawReader instances.
unsigned char partition() const
void setValue(const size_t channel, const T &value)
const T getValue(const size_t channel) const
const CalType & getCalArray(size_t position) const
const CalDet & multiply(const T &val)
const T getValue(const int sec, const int globalPadInSector) const
Base class for raw data calibrations.
size_t getPresentEventNumber() const
get present event number
ProcessStatus processEvent(int eventNumber=-1)
unsigned char getSampaChannel() const
unsigned char getIndex() const
unsigned char getSampaChip() const
const FECInfo & getFECInfo(const PadROCPos &padROC) const
int getNumberOfPadsInRowROC(int roc, int row) const
static constexpr unsigned short getPadsInIROC()
const std::array< PartitionInfo, 5 > & getMapPartitionInfo() const
static constexpr unsigned short getPadsInOROC()
GlobalPadNumber getPadNumberInROC(const PadROCPos &rocPadPosition) const
static constexpr unsigned short getNumberOfIROCs()
int getCRU(const Sector &sec, GlobalPadNumber globalPad) const
Pad and row inside a ROC.
unsigned char getNumberOfFECs() const
unsigned char getSectorFECOffset() const
Sector getSector() const
get sector
TH1D * makePadSignals(Int_t roc, Int_t row, Int_t pad)
void fillSectorHistSingleTimeBin(TH2Poly *h, Int_t timeBin)
Int_t updateROC(const Int_t roc, const Int_t row, const Int_t pad, const Int_t timeBin, const Float_t signal) final
Global TPC definitions and constants.
PadSubset
Definition of the different pad subsets.