KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVASMultiDetArray.h
Go to the documentation of this file.
1 /***************************************************************************
2  KVMultiDetArray.h - description
3  -------------------
4  begin : Thu May 16 2002
5  copyright : (C) 2002 by J.D. Frankland
6  email : frankland@ganil.fr
7 
8 $Id: KVMultiDetArray.h,v 1.55 2009/03/03 14:27:15 franklan Exp $
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
20 #ifndef KVASMultiDetArray_H
21 #define KVASMultiDetArray_H
22 
23 #include "KVMultiDetArray.h"
24 #include "KVLayer.h"
25 #include "KVRing.h"
26 class KVASGroup;
27 
34 
35 protected:
38 
39  virtual void AddToGroups(KVTelescope* kt1, KVTelescope* kt2);
40  void SetGroups(KVLayer*, KVLayer*);
41  void UpdateGroupsInRings(KVRing* r1, KVRing* r2);
42  void MakeListOfDetectors();
43  virtual void MergeGroups(KVASGroup* kg1, KVASGroup* kg2);
45  void GetIDTelescopesForGroup(KVGroup* grp, TCollection* tel_list);
48 public:
51  void init();
52  virtual KVGroup* GetGroupWithAngles(Float_t theta, Float_t phi);
53  TList* GetTelescopes(Float_t theta, Float_t phi);
55  {
64  return (IsROOTGeometry() ? DetectParticle_TGEO(part) : DetectParticle_KV(part));
65  };
66 
68  KVLayer* GetLayer(const Char_t* name) const
69  {
71  return (KVLayer*)GetStructure("LAYER", name);
72  }
73  KVLayer* GetLayer(Int_t num) const
74  {
76  return (KVLayer*)GetStructure("LAYER", num);
77  }
78  KVTelescope* GetTelescope(const Char_t* name) const;
79  KVRing* GetRing(const Char_t* layer, const Char_t* ring_name) const;
80  KVRing* GetRing(const Char_t* layer, UInt_t ring_number) const;
81  KVRing* GetRing(UInt_t layer, const Char_t* ring_name) const;
82  KVRing* GetRing(UInt_t layer, UInt_t ring_number) const;
83 
84  virtual Double_t GetSolidAngleByLayerAndRing(const Char_t* layer, UInt_t ring_number)
85  {
87  return GetRing(layer, ring_number)->GetSolidAngle();
88  }
89  virtual Double_t GetSolidAngleByLayer(const Char_t* layer)
90  {
92  Double_t sol_ang = 0;
93  KVRing* cou;
94  TIter nxtcou(GetLayer(layer)->GetStructures());
95  while ((cou = (KVRing*) nxtcou())) sol_ang += cou->GetSolidAngle();
96  return sol_ang;
97  }
98 
99  virtual Double_t GetTotalSolidAngle(void) const;
102 
103  ClassDef(KVASMultiDetArray, 1) //Azimuthally-symmetric multidetector arrays
104 };
105 
106 #endif
int Int_t
unsigned int UInt_t
char Char_t
double Double_t
float Float_t
#define ClassDef(name, id)
Group in axially-symmetric array (obsolete)
Definition: KVASGroup.h:16
Base class for azimuthally-symmetric multidetector arrays (obsolete)
virtual KVNameValueList * DetectParticle(KVNucleus *part)
virtual void set_up_telescope(KVDetector *de, KVDetector *e, KVIDTelescope *idt, TCollection *l)
Set up detectors in de-e identification telescope and add to idtels.
virtual void MergeGroups(KVASGroup *kg1, KVASGroup *kg2)
KVRing * GetRing(const Char_t *layer, const Char_t *ring_name) const
find named ring in named layer
virtual void set_up_single_stage_telescope(KVDetector *det, KVIDTelescope *idt, TCollection *l)
Set up detector in single-stage identification telescope and add to idtels.
virtual Double_t GetTotalSolidAngle(void) const
virtual ~ KVASMultiDetArray()
KVNameValueList * DetectParticle_KV(KVNucleus *part)
KVTelescope * GetTelescope(const Char_t *name) const
Return pointer to telescope in array with name given by "name".
KVLayer * GetLayer(const Char_t *name) const
virtual Double_t GetSolidAngleByLayerAndRing(const Char_t *layer, UInt_t ring_number)
void SetGroups(KVLayer *, KVLayer *)
Update the list of groups in the detector array by comparing all telescopes in two layers.
void UpdateGroupsInRings(KVRing *r1, KVRing *r2)
Calculate groups by comparing two rings in different layers.
virtual void AddToGroups(KVTelescope *kt1, KVTelescope *kt2)
void AnalyseGroupAndReconstructEvent(KVReconstructedEvent *event, KVGroup *grp)
void AnalyseTelescopes(KVReconstructedEvent *event, TList *kvtl)
UInt_t fGr
used to number groups
KVLayer * GetLayer(Int_t num) const
virtual KVGroup * GetGroupWithAngles(Float_t theta, Float_t phi)
return pointer to group in array according to given polar coordinates
virtual Double_t GetSolidAngleByLayer(const Char_t *layer)
void GetIDTelescopesForGroup(KVGroup *grp, TCollection *tel_list)
UInt_t fCurrentLayerNumber
used to number layers
TList * GetTelescopes(Float_t theta, Float_t phi)
Base class for detector geometry description.
Definition: KVDetector.h:159
const KVSeqCollection * GetStructures() const
KVGeoStrucElement * GetStructure(const Char_t *name) const
Group of detectors which can be treated independently of all others in array.
Definition: KVGroup.h:19
Base class for all detectors or associations of detectors in array which can identify charged particl...
Definition: KVIDTelescope.h:83
Set of detectors at a similar distance from target (obsolete)
Definition: KVLayer.h:32
Base class for describing the geometry of a detector array.
Bool_t IsROOTGeometry() const
KVNameValueList * DetectParticle_TGEO(KVNucleus *part)
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
Event containing KVReconstructedNucleus nuclei reconstructed from hits in detectors.
Ring in INDRA array (obsolete)
Definition: KVRing.h:19
Double_t GetSolidAngle(void) const
Definition: KVRing.cpp:118
Associates two detectors placed one behind the other.
Definition: KVTelescope.h:35