4 #ifndef __KVMultiDetArray_H
5 #define __KVMultiDetArray_H
7 #include "KVGeoStrucElement.h"
8 #include "KVUniqueNameList.h"
9 #include "TGeoManager.h"
10 #include "KVDetector.h"
11 #include "KVGroupReconstructor.h"
12 #include "KVDetectorSignalTrace.h"
13 #include <KVFileReader.h>
14 #include <KVGeoDNTrajectory.h>
15 #include <KVUnownedList.h>
29 #ifdef WITH_BUILTIN_GRU
34 class MFMMergeFrameManager;
36 class MFMEbyedatFrame;
37 class MFMBufferReader;
39 #include "MFMMesytecFrame.h"
66 static Bool_t fCloseGeometryNow;
67 static Bool_t fBuildTarget;
68 static Bool_t fMakeMultiDetectorSetParameters;
69 static Bool_t fMakeMultiDetectorPhysicsParametersOnly;
70 static Int_t fMakeMultiDetectorRunNumber;
74 kIsRemoving = BIT(14),
77 kIsBeingDeleted = BIT(17),
78 kIDParamsSet = BIT(18),
79 kCalParamsSet = BIT(19)
82 TList* fStatusIDTelescopes;
83 TList* fCalibStatusDets;
98 std::unique_ptr<KVGeoNavigator> fNavigator;
105 TString fPartSeedCond;
108 Bool_t fHandledRawData;
112 virtual void RenumberGroups();
114 virtual void SetExpectedDetectorSignalNames();
127 bool try_upper_and_lower_doubleIDtelescope(TString uri,
KVDetector* de,
KVDetector* e, TCollection* l);
128 int try_all_singleID_telescopes(
KVDetector* d, TCollection* l);
129 bool try_a_singleIDtelescope(TString uri,
KVDetector* d, TCollection* l);
130 bool try_upper_and_lower_singleIDtelescope(TString uri,
KVDetector* d, TCollection* l);
133 Bool_t check_idtelescope_in_allowed_list(
const TString& plugin);
135 void CalculateReconstructionTrajectories();
136 virtual void DeduceIdentificationTelescopesFromGeometry();
139 fTrajectories.
Add(d);
141 virtual void AssociateTrajectoriesAndNodes();
142 void DeduceGroupsFromTrajectories();
145 virtual Bool_t handle_raw_data_event_mfmfile(MFMBufferReader&);
146 virtual Bool_t handle_raw_data_event_mfmmergeframe(
const MFMMergeFrameManager&);
147 virtual Bool_t handle_raw_data_event_mfmframe(
const MFMCommonFrame&);
148 virtual Bool_t handle_raw_data_event_mfmframe_ebyedat(
const MFMEbyedatFrame&);
150 virtual Bool_t handle_raw_data_event_mfmframe_mesytec_mdpp(
const MFMMesytecMDPPFrame&);
156 #ifdef WITH_BUILTIN_GRU
160 template<
typename TraceData>
161 void add_and_set_detector_signal_trace(
KVDetector* det,
const std::vector<TraceData>& traces,
double time_resolution)
173 det_signal->
SetTrace(traces, time_resolution);
174 det_signal->SetFired();
177 virtual void PerformClosedROOTGeometryOperations();
179 virtual void copy_fired_parameters_to_recon_param_list();
181 TString GetFileName(
KVExpDB*,
const Char_t* meth,
const Char_t* keyw);
182 std::unique_ptr<KVFileReader> GetKVFileReader(
KVExpDB* db,
const Char_t* meth,
const Char_t* keyw);
183 void ReadCalibrationFiles(
KVExpDB* db);
184 void ReadCalibFile(
const Char_t* filename,
KVExpDB* db,
KVDBTable* calib_table);
185 void ReadOoODetectors(
KVExpDB* db);
186 void ReadAbsentDetectors(
KVExpDB* db);
188 virtual void set_detector_thicknesses(
const TString&);
196 return fReconParameters;
202 return fReconParameters;
209 new TGeoManager(GetName(), Form(
"%s geometry for dataset %s", GetName(), fDataSet.Data()));
211 TGeoMaterial* matVacuum = gGeoManager->GetMaterial(
"Vacuum");
213 matVacuum =
new TGeoMaterial(
"Vacuum", 0, 0, 0);
214 matVacuum->SetTitle(
"Vacuum");
216 TGeoMedium* Vacuum = gGeoManager->GetMedium(
"Vacuum");
217 if (!Vacuum) Vacuum =
new TGeoMedium(
"Vacuum", 1, matVacuum);
218 TGeoVolume* top = gGeoManager->MakeBox(
"WORLD", Vacuum, dx, dy, dz);
219 gGeoManager->SetTopVolume(top);
252 virtual void Build(Int_t run = -1);
254 void Clear(Option_t* opt =
"")
override;
259 return &fFiredDetectors;
265 return &fFiredSignals;
271 return &fExtraRawDataSignals;
279 return fIDTelescopes;
303 return TestBit(kIsRemoving);
308 return TestBit(kIsBuilt);
314 return TestBit(kIsBeingDeleted);
317 virtual void SetParameters(UInt_t n, Bool_t physics_parameters_only = kFALSE);
323 return TestBit(kParamsSet);
327 return (TestBit(kIDParamsSet) ||
ParamsSet());
331 return (TestBit(kCalParamsSet) ||
ParamsSet());
388 TGeoTranslation* postTrans =
nullptr);
392 void Draw(Option_t* option =
"")
override;
396 return &fTrajectories;
408 return fAcceptIDCodes;
412 return fAcceptECodes;
438 fAcceptIDCodes = codelist;
473 fAcceptECodes = codelist;
498 return fPartSeedCond;
503 fPartSeedCond = cond;
509 return glist->GetEntries();
519 return fHandledRawData;
595 fMakeMultiDetectorPhysicsParametersOnly = on;
Description of an experimental run in database ,,.
List of hit groups in a multidetector array.
Detector signal waveform.
void SetTrace(const std::vector< TraceData > &trace, double time_resolution)
Base class for detector geometry description, interface to energy-loss calculations.
KVDetectorSignalTrace * AddDetectorSignalTrace()
virtual KVDetectorSignal * GetDetectorSignal(const KVString &type) const
Double_t GetSolidAngle() const override
KVGeoDetectorNode * GetNode()
Base class to describe database of an experiment ,,.
Describe an experimental set-up coupling two or more different detector arrays.
Reads GANIL acquisition files (EBYEDAT)
Path taken by particles through multidetector geometry.
Information on relative positions of detectors & particle trajectories.
Int_t GetNDetsInFront() const
Import detector array described by ROOT geometry and set up corresponding KVMultiDetArray object.
Base class for propagation of particles through array geometry.
Base class describing elements of array geometry.
const KVSeqCollection * GetDetectors() const
KVSeqCollection * GetStructureTypeList(const Char_t *type) const
KVGeoStrucElement * GetStructure(const Char_t *name) const
Base class for particle reconstruction in one group of a detector array.
Group of detectors which can be treated independently of all others in array.
Extended version of ROOT THashList.
Base class for particle identification in a 2D map.
Base class for all detectors or associations of detectors in array which can identify charged particl...
Extended TList class which owns its objects by default.
Read MFM format acquisition data.
Base class for describing the geometry of a detector array.
const KVSeqCollection * GetFiredSignals() const
const KVNumberList & GetAcceptedIDCodes() const
KVSeqCollection * GetListOfIDTelescopes() const
void FillListOfIDTelescopes(KVIDGraph *gr) const
void SetDetectorThicknesses()
KVNameValueList & GetReconParameters()
virtual void GetDetectorEvent(KVDetectorEvent *detev, const TSeqCollection *fired_params=0)
void MakeHistogramsForAllIDTelescopes(KVSeqCollection *list, Int_t dimension=100)
TList * GetStatusOfIDTelescopes()
void Draw(Option_t *option="") override
static KVMultiDetArray * MakeMultiDetector(const Char_t *dataset_name, Int_t run=-1, TString classname="KVMultiDetArray", KVExpDB *db=nullptr)
static void SetMakeMultiDetectorPhysicsParametersOnly(Bool_t on=kTRUE)
virtual void AcceptAllECodes()
virtual TString GetECodeMeaning(Int_t) const
virtual Double_t GetTargetEnergyLossCorrection(KVReconstructedNucleus *)
void CreateGeoManager(Double_t dx=500, Double_t dy=500, Double_t dz=500)
Bool_t HandledRawData() const
KVSeqCollection * GetIDTelescopesWithType(const Char_t *type)
void RecursiveTrajectoryClustering(KVGeoDetectorNode *N, KVUniqueNameList &tried_trajectories, KVUniqueNameList &multitraj_nodes, KVUniqueNameList &detectors_of_group)
virtual void SetRawDataFromReconEvent(const KVReconstructedEvent &)
void AcceptECodes(const KVNumberList &codelist)
void Clear(Option_t *opt="") override
void CalculateIdentificationGrids()
For each IDtelescope in array, calculate an identification grid.
void prepare_to_handle_new_raw_data()
reset acquisition parameters etc. before reading new raw data event
void AcceptIDCodes(const KVNumberList &codelist)
Bool_t ReadGridsFromAsciiFile(const Char_t *) const
Int_t GetNumberOfGroups() const
virtual void InitialiseRawDataReading(KVRawDataReader *)
virtual void SetParameters(UInt_t n, Bool_t physics_parameters_only=kFALSE)
void SetCurrentRunNumber(UInt_t r)
virtual void SetDetectorParametersForRun(KVDBRun *, const TString &="")
void SetFilterType(Int_t t)
virtual TString GetIDCodeMeaning(Int_t) const
TString GetDataSet() const
virtual const KVSeqCollection * GetArrays() const
const KVNumberList & GetAcceptedECodes() const
KVGroup * GetGroup(const Char_t *name) const
static TGeoHMatrix * GetVolumePositioningMatrix(Double_t distance, Double_t theta, Double_t phi, TGeoTranslation *postTrans=nullptr)
KVGeoNavigator * GetNavigator() const
const KVSeqCollection * GetExtraRawDataSignals() const
void SetGeometry(TGeoManager *)
virtual void MakeCalibrationTables(KVExpDB *)
virtual ~KVMultiDetArray()
destroy (delete) the MDA and all the associated structure, detectors etc.
virtual void SetRunIdentificationParameters(UShort_t n)
Bool_t HandleRawDataBuffer(MFMBufferReader &)
void CheckStatusOfDetectors(KVDBRun *, const TString &="")
UInt_t GetCurrentRunNumber() const
void SetDetectorTransparency(Char_t)
Modify the transparency of detector volumes in OpenGL view.
virtual KVGroupReconstructor * GetReconstructorForGroup(const KVGroup *) const
virtual void SetIdentifications()
virtual void Build(Int_t run=-1)
virtual void FillDetectorList(KVReconstructedNucleus *rnuc, KVHashList *DetList, const KVString &DetNames)
const TSeqCollection * GetTrajectories() const
TList * GetCalibrationStatusOfDetectors()
virtual Bool_t IsBuilt() const
const KVSeqCollection * GetFiredDetectors() const
TGeoManager * GetGeometry() const
Return pointer to the (ROOT) geometry of the array.
virtual Short_t GetBadIDCode() const
virtual Int_t GetIDCodeForParticlesStoppingInFirstStageOfTelescopes() const
virtual Bool_t HandleRawDataEvent(KVRawDataReader *)
virtual void InitializeIDTelescopes()
virtual void SetRunCalibrationParameters(UShort_t n)
virtual Short_t GetMultiHitFirstStageIDCode() const
virtual const Char_t * GetPartSeedCond() const
void PrintStatusOfIDTelescopes()
virtual void SetSimMode(Bool_t on=kTRUE)
void PrintCalibStatusOfDetectors()
virtual UChar_t GetCalculatedCalibrationCode() const
virtual Double_t GetTotalSolidAngle(void) const
virtual void SetTarget(KVTarget *target)
virtual Short_t GetCoherencyIDCode() const
virtual void AcceptAllIDCodes()
virtual void SetCalibratorParameters(KVDBRun *, const TString &="")
virtual void SetPartSeedCond(const Char_t *cond)
void SetGridsInTelescopes(UInt_t run)
KVGroup * GetGroup(Int_t number) const
virtual UChar_t GetNormalCalibrationCode() const
KVIDTelescope * GetIDTelescope(const Char_t *name) const
Return pointer to DeltaE-E ID Telescope with "name".
Short_t GetZminCode() const
virtual void SetReconParametersInEvent(KVReconstructedEvent *) const
Copy any parameters in fReconParameters in to the reconstructed event parameter list.
const KVNameValueList & GetReconParameters() const
virtual UChar_t GetNoCalibrationCode() const
virtual KVMultiDetArray * GetArray(const Char_t *) const
virtual void AcceptParticleForAnalysis(KVReconstructedNucleus *) const
void SetNavigator(KVGeoNavigator *geo)
EFilterType
filter types. values of fFilterType
KVMultiDetArray()
Default constructor.
KVUniqueNameList GetIDTelescopeTypes()
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Strings used to represent a set of ranges of values.
Read Google Protobuf DAQ files.
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 .
KaliVeda extensions to ROOT collection classes.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Calculation/correction of energy losses of particles through an experimental target.
Optimised list in which named objects can only be placed once.
void Add(TObject *obj) override
Extended TList class which does not own its objects by default.
Base class implementing necessary methods for setting multidetector parameters for each run of the cu...