Skip to content

Commit

Permalink
Implementation of the Tprev/Tnext task.
Browse files Browse the repository at this point in the history
  • Loading branch information
leandrofloyd committed Nov 14, 2023
1 parent b7d5932 commit 1c2b991
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 12 deletions.
1 change: 1 addition & 0 deletions r3bbase/BaseLinkDef.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@
#pragma link C++ class R3BMSOffsetContFact+;
#pragma link C++ class R3BMSOffsetPar+;
#pragma link C++ class R3BMSOffsetFinder+;
#pragma link C++ class R3BTprevTnext+;
#endif
2 changes: 2 additions & 0 deletions r3bbase/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ set(SRCS
R3BTcutPar.cxx
R3BTsplinePar.cxx
R3BWhiterabbitPropagator.cxx
R3BTprevTnext.cxx
./pars/R3BMSOffsetPar.cxx
./pars/R3BMSOffsetContFact.cxx
./pars/R3BMSOffsetFinder.cxx)
Expand All @@ -62,6 +63,7 @@ set(HEADERS
R3BTcutPar.h
R3BTsplinePar.h
R3BWhiterabbitPropagator.h
R3BTprevTnext.h
./pars/R3BMSOffsetPar.h
./pars/R3BMSOffsetContFact.h
./pars/R3BMSOffsetFinder.h)
Expand Down
155 changes: 155 additions & 0 deletions r3bbase/R3BTprevTnext.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/******************************************************************************
* Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
* Copyright (C) 2019-2023 Members of R3B Collaboration *
* *
* This software is distributed under the terms of the *
* GNU General Public Licence (GPL) version 3, *
* copied verbatim in the file "LICENSE". *
* *
* In applying this license GSI does not waive the privileges and immunities *
* granted to it by virtue of its status as an Intergovernmental Organization *
* or submit itself to any jurisdiction. *
******************************************************************************/

#include "R3BTprevTnext.h"
#include "FairLogger.h"
#include "FairRootManager.h"
#include "FairRunAna.h"
#include "FairRuntimeDb.h"
#include "R3BEventHeader.h"
#include "R3BMSOffsetPar.h"
#include "R3BSamplerMappedData.h"
#include "R3BShared.h"
#include "TClonesArray.h"
#include "TMath.h"
#include "TObjArray.h"
#include "TRandom.h"
#include <cstdlib>
#include <iostream>
constexpr auto CLOCK_PERIOD = 10; // ns
constexpr auto ERROR_NO_MS = -30; // Assigned value for events where there is no MS
constexpr auto INVALID_TPTN = -10; // Assigned value for invalid or nonexistent TPrev or TNext
constexpr auto ERROR_MULTI_MS = -20; // Assigned value for events where there are multiple MS
constexpr auto INVALID_EVENT = -40; // Assigned value for events where the MS was not correctly written
R3BTprevTnext::R3BTprevTnext()
: R3BTprevTnext("R3B Tprev/Tnext", 1)
{
}

R3BTprevTnext::R3BTprevTnext(const TString& name, Int_t iVerbose)
: FairTask(name, iVerbose)
{
}

InitStatus R3BTprevTnext::Init()
{

FairRootManager* rootManager = FairRootManager::Instance();
if (rootManager == nullptr)
{
LOG(error) << "FairRootManager not opened!";
return kFATAL;
}

FairRuntimeDb* rtdb = FairRuntimeDb::instance();
if (rtdb == nullptr)
{
LOG(error) << "FairRuntimeDb not opened!";
return kFATAL;
}

fR3BEventHeader = dynamic_cast<R3BEventHeader*>(rootManager->GetObject("EventHeader."));
if (fR3BEventHeader == nullptr)
{
LOG(error) << "R3BTprevTnext::Init() EventHeader. not found";
return kFATAL;
}

fSamplerMapped = dynamic_cast<TClonesArray*>(rootManager->GetObject("SamplerMapped"));
if (fSamplerMapped == nullptr)
{
LOG(error) << "SamplerMapped not found or wrong type.";
return kFATAL;
}

fSamplerMSMapped = dynamic_cast<TClonesArray*>(rootManager->GetObject("SamplerMSMapped"));
if (fSamplerMSMapped == nullptr)
{
LOG(error) << "SamplerMSMapped not found or wrong type.";
return kFATAL;
}

fMSOffsetPar = dynamic_cast<R3BMSOffsetPar*>(rtdb->getContainer("MSOffsetPar"));
if (fMSOffsetPar == nullptr)
{
LOG(error) << "Could not find MSOffsetPar container!";
return kFATAL;
}

return kSUCCESS;
}

void R3BTprevTnext::Exec(Option_t* /*opt*/)
{
Double_t fTprev = INVALID_TPTN; // Initialization with invalid values.
Double_t fTnext = INVALID_TPTN;
Int_t dMScounter = 0;
const Int_t sampHits = fSamplerMapped->GetEntriesFast();
const Int_t sampmsHits = fSamplerMSMapped->GetEntriesFast();
const Double_t MSOffset = fMSOffsetPar->GetMSOffset();
Double_t SAMPTime = 0;
Double_t SAMPMSTime = 0;
if (sampmsHits == 1 && sampHits > 0)
{
R3BSamplerMappedData* SAMPMapped = nullptr;
R3BSamplerMappedData* SAMPMSMapped = nullptr;
SAMPMSMapped = dynamic_cast<R3BSamplerMappedData*>(fSamplerMSMapped->At(0));
SAMPMSTime = SAMPMSMapped->GetTime();
for (Int_t i = 0; i < sampHits; ++i)
{
SAMPMapped = dynamic_cast<R3BSamplerMappedData*>(fSamplerMapped->At(i));
SAMPTime = SAMPMapped->GetTime();
auto tpn = SAMPTime - SAMPMSTime - MSOffset;
if (tpn < -fDelta_clk)
{
fTprev = -CLOCK_PERIOD * tpn;
}
if (abs(tpn) <= fDelta_clk)
{
++dMScounter;
}
if (tpn > fDelta_clk)
{
fTnext = CLOCK_PERIOD * tpn;
break;
}
}
}
else
{
fR3BEventHeader->SetTprev(INVALID_EVENT);
fR3BEventHeader->SetTnext(INVALID_EVENT);
return;
}

if (dMScounter ==
0) // This if statement checks if there is no Hit correspondent to the MSHit even after the first if statement
{
fTprev = ERROR_NO_MS;
fTnext = ERROR_NO_MS;
}
if (dMScounter > 1)
{
fTprev = ERROR_MULTI_MS;
fTnext = ERROR_MULTI_MS;
}
if (dMScounter == 1 && sampHits == 1)
{
fTprev = fOne_hit;
fTnext = fOne_hit;
}
fR3BEventHeader->SetTprev(fTprev);
fR3BEventHeader->SetTnext(fTnext);
}

ClassImp(R3BTprevTnext) // NOLINT
50 changes: 50 additions & 0 deletions r3bbase/R3BTprevTnext.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/******************************************************************************
* Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
* Copyright (C) 2019-2023 Members of R3B Collaboration *
* *
* This software is distributed under the terms of the *
* GNU General Public Licence (GPL) version 3, *
* copied verbatim in the file "LICENSE". *
* *
* In applying this license GSI does not waive the privileges and immunities *
* granted to it by virtue of its status as an Intergovernmental Organization *
* or submit itself to any jurisdiction. *
******************************************************************************/

#pragma once

#include "FairTask.h"
#include "R3BMSOffsetPar.h"

class TClonesArray;
class R3BMSOffsetPar;
class R3BEventHeader;
class R3BSamplerMappedData;
class R3BTprevTnext : public FairTask
{
public:
/** Default constructor **/
R3BTprevTnext();

/** Standard constructor **/
explicit R3BTprevTnext(const TString& name, Int_t iVerbose = 1);

/** Virtual method Init **/
InitStatus Init() override;

/** Virtual method Exec **/
void Exec(Option_t* opt) override;

void SetOne_hit(Double_t One_hit_position) { fOne_hit = One_hit_position; }
void SetDelta_clk(Double_t clock) { fDelta_clk = clock; }

private:
R3BMSOffsetPar* fMSOffsetPar = nullptr;
TClonesArray* fSamplerMapped = nullptr;
TClonesArray* fSamplerMSMapped = nullptr;
R3BEventHeader* fR3BEventHeader = nullptr; /**< Event header - input data. */
Double_t fDelta_clk = 1.0;
Double_t fOne_hit = 3e6;

ClassDefOverride(R3BTprevTnext, 1); // NOLINT
};
6 changes: 0 additions & 6 deletions r3bbase/pars/R3BMSOffsetFinder.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,6 @@ R3BMSOffsetFinder::R3BMSOffsetFinder()
// R3BMSOffsetFinder: Standard Constructor --------------------------
R3BMSOffsetFinder::R3BMSOffsetFinder(const TString& name, Int_t iVerbose)
: FairTask(name, iVerbose)
, fMSOffset(0.0)
, fMinStatistics(1)
, fMSOffsetPar(nullptr)
, fSamplerMapped(nullptr)
, fSamplerMSMapped(nullptr)
, fh_Offset_Finder(nullptr)
{
}

Expand Down
12 changes: 6 additions & 6 deletions r3bbase/pars/R3BMSOffsetFinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,16 @@ class R3BMSOffsetFinder : public FairTask // NOLINT

private:
// Number of histograms, limits and bining
Double_t fMSOffset;
Double_t fMSOffset = 0.0;

// Minimum statistics and parameters
Int_t fMinStatistics{};
Int_t fMinStatistics = 1;

R3BMSOffsetPar* fMSOffsetPar; /**< Parameter container. >*/
TClonesArray* fSamplerMapped; /**< Array with SAMP Mapped input data. >*/
TClonesArray* fSamplerMSMapped; /**< Array with SAMPMS MApped input data. >*/
R3BMSOffsetPar* fMSOffsetPar = nullptr; /**< Parameter container. >*/
TClonesArray* fSamplerMapped = nullptr; /**< Array with SAMP Mapped input data. >*/
TClonesArray* fSamplerMSMapped = nullptr; /**< Array with SAMPMS MApped input data. >*/

TH1F* fh_Offset_Finder;
TH1F* fh_Offset_Finder = nullptr;

public:
ClassDefOverride(R3BMSOffsetFinder, 1); // NOLINT
Expand Down

0 comments on commit 1c2b991

Please sign in to comment.