4 #include "KVExpSetUp.h"
6 #include "KVReconstructedNucleus.h"
9 #include <KVRangeTableGeoNavigator.h>
16 void KVExpSetUp::init()
19 fCloseGeometryNow =
kFALSE;
23 fIDTelescopes->SetOwner(kFALSE);
46 fCloseGeometryNow =
kTRUE;
77 Int_t group_offset = 0;
79 lmultidetarrayclasses.
Begin(
" ");
82 fMakeMultiDetectorSetParameters =
kFALSE;
84 while (!lmultidetarrayclasses.
End()) {
86 Info(
"Build",
"Build %s %s\n", fDataSet.Data(), sname.
Data());
87 gMultiDetArray =
nullptr;
91 if (myname !=
"") myname +=
"-";
95 KVError::Error(
this,
"Build",
"NULL pointer returned by MakeMultiDetector");
101 fMakeMultiDetectorSetParameters =
kTRUE;
105 TIter nxt_mda(&fMDAList);
107 tmp->PerformClosedROOTGeometryOperations();
111 TIter next(groups.get());
115 group->SetNumber(group_number + group_offset);
119 group_offset += groups->GetEntries();
131 gMultiDetArray =
this;
155 KVError::Warning(
this,
"AcceptParticleForAnalysis",
"ReconstructedNucleus has ARRAY=%s but no KVMultiDetArray with this name in set-up",
159 KVError::Warning(
this,
"AcceptParticleForAnalysis",
"ReconstructedNucleus has no ARRAY parameter: cannot determine correct KVMultiDetArray");
189 for (KVReconstructedEvent::Iterator it =
e->GetNextParticleIterator(opt); it !=
e->end(); ++it) {
190 m.IncrementValue((*it).GetParameters()->GetStringValue(
"ARRAY"), 1);
213 TIter next_array(&fMDAList);
215 std::vector<std::thread> threads;
217 threads.push_back(std::thread([ = ]() {
218 mda->fRawDataReader = rawdata;
222 for (
auto& th : threads) {
223 if (th.joinable()) th.join();
229 fFiredDetectors.AddAll(&mda->fFiredDetectors);
230 fFiredSignals.AddAll(&mda->fFiredSignals);
R__EXTERN TGeoManager * gGeoManager
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval={})
Describe an experimental set-up coupling two or more different detector arrays.
KVExpSetUp()
Default constructor.
Bool_t HandleRawDataEvent(KVRawDataReader *) override
void GetArrayMultiplicities(KVReconstructedEvent *, KVNameValueList &, Option_t *="")
virtual ~KVExpSetUp()
Destructor.
void Build(Int_t run=-1) override
KVMultiDetArray * GetArray(const Char_t *name) const override
void AcceptParticleForAnalysis(KVReconstructedNucleus *) const override
void AbsorbDetectorPaths(KVGeoNavigator *GN)
void SetOwnsDetectors(Bool_t yes=kTRUE)
const KVSeqCollection * GetDetectors() const
const KVSeqCollection * GetStructures() const
void SetOwnsDaughters(Bool_t yes=kTRUE)
KVSeqCollection * GetStructureTypeList(const Char_t *type) const
Group of detectors which can be treated independently of all others in array.
static KVIonRangeTable * GetRangeTable()
Base class for describing the geometry of a detector array.
KVSeqCollection * GetListOfIDTelescopes() const
KVNameValueList & GetReconParameters()
static KVMultiDetArray * MakeMultiDetector(const Char_t *dataset_name, Int_t run=-1, TString classname="KVMultiDetArray", KVExpDB *db=nullptr)
void CreateGeoManager(Double_t dx=500, Double_t dy=500, Double_t dz=500)
void prepare_to_handle_new_raw_data()
reset acquisition parameters etc. before reading new raw data event
KVGeoNavigator * GetNavigator() const
void SetGeometry(TGeoManager *)
virtual Bool_t HandleRawDataEvent(KVRawDataReader *)
virtual void AcceptParticleForAnalysis(KVReconstructedNucleus *) const
void SetNavigator(KVGeoNavigator *geo)
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Bool_t HasStringParameter(const Char_t *name) const
const Char_t * GetStringValue(const Char_t *name) const
KVNameValueList * GetParameters() const
Propagate particles through array geometry calculating energy losses.
Abstract base class for reading raw (DAQ) data.
Event containing KVReconstructedNucleus nuclei reconstructed from hits in detectors.
Nuclei reconstructed from data measured by a detector array .
void Add(TObject *obj) override
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
Optimised list in which named objects can only be placed once.
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
void CloseGeometry(Option_t *option="d")
const char * GetName() const override
virtual void SetName(const char *name)
TClass * IsA() const override
virtual void Clear(Option_t *="")
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
void Error(UserClass p, const char *location, const char *va_(fmt),...)
void Warning(UserClass p, const char *location, const char *va_(fmt),...)