16#include <TGeoManager.h>
21#include "BesVisLib/CgemROOTGeo.h"
22#include "Identifier/CgemID.h"
23#include "BesVisLib/BesEvent.h"
24#include "BesVisLib/BesView.h"
25#include "RawEvent/RawDataUtil.h"
28#include "GaudiKernel/Bootstrap.h"
29#include "CgemGeomSvc/CgemGeomSvc.h"
30#include "CgemGeomSvc/CgemGeoReadoutPlane.h"
31#include "CgemGeomSvc/CgemGeoLayer.h"
37 m_CgemColor = kSpring;
39 m_VstripColor = kTeal;
41 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
43 m_NodeCgemAnode[layer] = 0;
44 m_NodeCgemCathode[layer] = 0;
45 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
46 m_NodeCgemFoil[layer][foil] = 0;
48 for (
int sheet = 0; sheet < 2; ++sheet)
50 NXStrip[layer][sheet] = 0;
51 NVStrip[layer][sheet] = 0;
52 m_CgemXStrip[layer][sheet] = 0;
53 m_CgemVStrip[layer][sheet] = 0;
54 m_CgemSheet[layer][sheet] = 0;
62 cout <<
"delete old CgemROOTGeo" << endl;
63 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
65 for (
int sheet = 0; sheet < 2; ++sheet)
67 if (layer == 0 && sheet == 1)
continue;
68 delete m_CgemSheet[layer][sheet];
70 for (
int strip = 0; strip < NXStrip[layer][sheet]; ++strip)
71 delete m_CgemXStrip[layer][sheet][strip];
72 delete m_CgemXStrip[layer][sheet];
73 for (
int strip = 0; strip < NVStrip[layer][sheet]; ++strip)
74 delete m_CgemVStrip[layer][sheet][strip];
75 delete m_CgemVStrip[layer][sheet];
99 Int_t CgemLineColor = 15;
100 Int_t CgemFillColor = 18;
101 Int_t CgemFillStyle = 1001;
102 Int_t CgemLayerStyle = 3003;
103 Int_t CgemElectrodeColor = 12;
104 Int_t CgemFoilColor = 12;
110 Double_t center[3] = {0.0, 0.0, 0.0};
114 TGeoTube* CgemShape = (TGeoTube*)
GetVolumeCgem()->GetShape();
115 m_CgemXY =
new BesCircle2D(
"CGEM",
"CGEM", CgemShape->GetRmin(), CgemShape->GetRmax(), ¢er[0]);
117 m_CgemXY->SetFillColor(CgemFillColor);
118 m_CgemXY->SetFillStyle(CgemFillStyle);
119 m_CgemXY->SetLineColor(CgemLineColor);
121 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
124 CgemTube = (TGeoTube*)CgemVol->GetShape();
128 center[2] = CgemTube->GetDz();
129 m_CgemAnodeXY[layer] =
new BesCircle2D(name, name, CgemTube->GetRmin(), CgemTube->GetRmax(), center);
131 m_CgemAnodeXY[layer]->SetFillStyle(CgemLayerStyle);
132 m_CgemAnodeXY[layer]->SetLineColor(CgemElectrodeColor);
133 m_CgemAnodeXY[layer]->SetFillColor(CgemElectrodeColor);
136 CgemTube = (TGeoTube*)CgemVol->GetShape();
140 center[2] = CgemTube->GetDz();
141 m_CgemCathodeXY[layer] =
new BesCircle2D(name, name, CgemTube->GetRmin(), CgemTube->GetRmax(), center);
143 m_CgemCathodeXY[layer]->SetFillStyle(CgemLayerStyle);
144 m_CgemCathodeXY[layer]->SetLineColor(CgemElectrodeColor);
145 m_CgemCathodeXY[layer]->SetFillColor(CgemElectrodeColor);
147 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
150 CgemTube = (TGeoTube*)CgemVol->GetShape();
155 center[2] = CgemTube->GetDz();
156 m_CgemFoilXY[layer][foil] =
new BesCircle2D(name, name, CgemTube->GetRmin(), CgemTube->GetRmax(), center);
158 m_CgemFoilXY[layer][foil]->SetFillStyle(CgemLayerStyle);
159 m_CgemFoilXY[layer][foil]->SetLineColor(CgemFoilColor);
160 m_CgemFoilXY[layer][foil]->SetFillColor(CgemFoilColor);
165 for (
int j = 0; j < 2; ++j)
167 P[0] =
P[3] =
P[6] =
P[9] = 0;
168 P[1] =
P[10] = CgemShape->GetRmin() * (1 - 2 * j);
169 P[2] =
P[5] = -CgemShape->GetDz();
170 P[4] =
P[7] = CgemShape->GetRmax() * (1 - 2 * j);
171 P[8] =
P[11] = CgemShape->GetDz();
174 if (j == 0) name +=
"Up";
177 m_CgemZR[j]->SetFillColor(CgemFillColor);
178 m_CgemZR[j]->SetFillStyle(CgemFillStyle);
179 m_CgemZR[j]->SetLineColor(CgemLineColor);
183 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
185 for (
int j = 0; j < 2; ++j)
188 CgemTube = (TGeoTube*)CgemVol->GetShape();
189 name =
"CgemZR Layer";
191 if (j == 0) name +=
" Anode Up";
192 else name +=
" Anode Down";
194 P[0] =
P[3] =
P[6] =
P[9] = 0;
195 P[1] =
P[10] = CgemTube->GetRmin() * (1 - 2 * j);
196 P[2] =
P[5] = -CgemTube->GetDz();
197 P[4] =
P[7] = CgemTube->GetRmax() * (1 - 2 * j);
198 P[8] =
P[11] = CgemTube->GetDz();
200 m_CgemAnodeZR[layer][j] =
new BesPolygon2D(name, name, 4,
P);
201 m_CgemAnodeZR[layer][j]->SetFillStyle(CgemLayerStyle);
202 m_CgemAnodeZR[layer][j]->SetLineColor(CgemElectrodeColor);
203 m_CgemAnodeZR[layer][j]->SetFillColor(CgemElectrodeColor);
207 CgemTube = (TGeoTube*)CgemVol->GetShape();
208 name =
"CgemZR Layer";
210 if (j == 0) name +=
" Cathode Up";
211 else name +=
" Cathode Down";
213 P[0] =
P[3] =
P[6] =
P[9] = 0;
214 P[1] =
P[10] = CgemTube->GetRmin() * (1 - 2 * j);
215 P[2] =
P[5] = -CgemTube->GetDz();
216 P[4] =
P[7] = CgemTube->GetRmax() * (1 - 2 * j);
217 P[8] =
P[11] = CgemTube->GetDz();
219 m_CgemCathodeZR[layer][j] =
new BesPolygon2D(name, name, 4,
P);
220 m_CgemCathodeZR[layer][j]->SetFillStyle(CgemLayerStyle);
221 m_CgemCathodeZR[layer][j]->SetLineColor(CgemElectrodeColor);
222 m_CgemCathodeZR[layer][j]->SetFillColor(CgemElectrodeColor);
225 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
228 CgemTube = (TGeoTube*)CgemVol->GetShape();
229 name =
"CgemZR Layer";
233 if (j == 0) name +=
" Up";
234 else name +=
" Down";
236 P[0] =
P[3] =
P[6] =
P[9] = 0;
237 P[1] =
P[10] = CgemTube->GetRmin() * (1 - 2 * j);
238 P[2] =
P[5] = -CgemTube->GetDz();
239 P[4] =
P[7] = CgemTube->GetRmax() * (1 - 2 * j);
240 P[8] =
P[11] = CgemTube->GetDz();
242 m_CgemFoilZR[layer][foil][j] =
new BesPolygon2D(name, name, 4,
P);
243 m_CgemFoilZR[layer][foil][j]->SetFillStyle(CgemLayerStyle);
244 m_CgemFoilZR[layer][foil][j]->SetLineColor(CgemFoilColor);
245 m_CgemFoilZR[layer][foil][j]->SetFillColor(CgemFoilColor);
252 CgemGeomSvc cgs(
"CgemGeomSvc", Gaudi::svcLocator());
257 for (
int layer = 0; layer < 3; ++layer)
259 for (
int sheet = 0; sheet < 2; ++sheet)
262 if (layer == 0 && sheet == 1)
continue;
266 cout <<
"layer" << layer <<
" sheet" << sheet <<
" " << plane << endl;
267 cout <<
"\tRX:" << plane->
getRX() << endl;
268 cout <<
"\tRV:" << plane->
getRV() << endl;
269 cout <<
"\tXmin:" << plane->
getXmin() << endl;
270 cout <<
"\tWidth:" << plane->
getWidth() << endl;
271 cout <<
"\tZmin:" << plane->
getZmin() << endl;
272 cout <<
"\tLength:" << plane->
getLength() << endl;
273 cout <<
"\tXPitch:" << plane->
getXPitch() << endl;
274 cout <<
"\tVPitch:" << plane->
getVPitch() << endl;
276 cout <<
"\tMid R at Gap:" << plane->
getMidRAtGap() << endl;
277 cout <<
"\tVmax:" << plane->
getVmax() << endl;
278 cout <<
"\tX-strip number:" << plane->
getNXstrips() << endl;
279 cout <<
"\tV-strip number:" << plane->
getNVstrips() << endl;
286 P[2] =
P[5] =
P[8] =
P[11] = 0;
308 m_CgemSheet[layer][sheet] =
new BesPolygon2D(name, name, 4,
P);
309 m_CgemSheet[layer][sheet]->SetFillColor(CgemFillColor);
310 m_CgemSheet[layer][sheet]->SetFillStyle(CgemFillStyle);
311 m_CgemSheet[layer][sheet]->SetLineColor(CgemLineColor);
315 double r, wid, len, phi, xmin, zmin, ang, pit, thick, size,
v, ruf;
320 NXStrip[layer][sheet] =
n;
322 XStripPhi[layer][sheet] =
new Double_t[
n];
329 SheetWidth[layer][sheet] = wid;
330 RX[layer][sheet] = r;
331 ZMin[layer][sheet] = zmin;
333 for (
int strip = 0; strip <
n; ++strip)
335 name =
"CGEM X-Strip Layer";
342 XStripPhi[layer][sheet][strip] = phi;
343 m_CgemXStrip[layer][sheet][strip] =
new Cgem2DXStrip(name, name,
344 len, wid, phi, zmin, r, size, thick, layer, sheet, strip, ruf);
352 NVStrip[layer][sheet] =
n;
354 VStripV[layer][sheet] =
new Double_t[
n];
363 RV[layer][sheet] = r;
364 SheetLength[layer][sheet] = len;
365 StereoAngle[layer][sheet] = ang;
368 xmin = XMin[layer][sheet];
369 VPitch[layer][sheet] = pit;
370 XPitch[layer][sheet] = plane->
getXPitch();
372 for (
int strip = 0; strip <
n; ++strip)
374 name =
"CGEM V-Strip Layer";
382 VStripV[layer][sheet][strip] =
v;
383 m_CgemVStrip[layer][sheet][strip] =
new Cgem2DVStrip(name, name,
v,
384 r, len, wid, ang, xmin, zmin, pit, size, thick, layer, sheet, strip, ruf);
396 if (!m_CGEM) std::cout <<
"m_CGEM = 0" << std::endl;
401 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
403 std::stringstream osanode, oscathode;
404 osanode <<
"pv_Anode_logic" << layer <<
"_0";
405 oscathode <<
"pv_Cathode_logic" << layer <<
"_8";
406 m_NodeCgemAnode[layer] =
GetNode(osanode.str());
407 m_NodeCgemCathode[layer] =
GetNode(oscathode.str());
411 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
413 std::stringstream osfoil;
414 osfoil <<
"pv_GemFoil_logic" << layer <<
"foil" << foil <<
"_" << m_kCgemFoil - foil;
415 m_NodeCgemFoil[layer][foil] =
GetNode(osfoil.str());
422 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
424 TGeoNode* cgemLayer = m_CGEM->GetNode(m_kCgemLayer - layer);
425 m_NodeCgemAnode[layer] = cgemLayer->GetVolume()->GetNode(0);
426 m_NodeCgemCathode[layer] = cgemLayer->GetVolume()->GetNode(8);
427 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
429 m_NodeCgemFoil[layer][foil] = cgemLayer->GetVolume()->GetNode(m_kCgemFoil - foil);
484 strip->
AddInfo(strip->GetTitle());
500 if (m_CgemDigiCol) NDigiCol = m_CgemDigiCol->GetEntries();
504 for (
int i = 0; i < NDigiCol; ++i)
520 if (strip < NXStrip[layer][sheet] && strip >= 0)
521 aStrip = m_CgemXStrip[layer][sheet][strip];
525 if (strip < NVStrip[layer][sheet] && strip > 0)
526 aStrip = m_CgemVStrip[layer][sheet][strip];
538 sprintf(
data,
"NO time");
541 sprintf(
data,
"time=%-.1f ns",
time);
542 if(fabs(evTime)>0.0001)
543 sprintf(
data,
"%s, Tdrift(Raw)=%-.1f ns",
data,
time - evTime +230);
546 if(charge>1000000) sprintf(
data,
"%s, NO charge",
data);
547 else sprintf(
data,
"%s, charge=%d",
data,charge);
550 sprintf(
data,
"Fired");
577 return m_NodeCgemAnode[layer];
582 return m_NodeCgemCathode[layer];
587 return m_NodeCgemFoil[layer][foil];
593 TString opt = option;
596 if (!
m_2DGeoInit) cout <<
"CgemROOTGeo::Draw(), Geometry not initialized!" << endl;
598 if (!view) cout <<
"CgemROOTGeo::Draw(), BesView not found" << endl;
602 if (opt.Contains(
"XY")) m_CgemXY->
Draw(
"");
603 if (opt.Contains(
"ZR"))
605 m_CgemZR[0]->
Draw(
"");
606 m_CgemZR[1]->
Draw(
"");
611 if (opt.Contains(
"XY"))
613 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
615 m_CgemAnodeXY[layer]->
Draw(
"");
616 m_CgemCathodeXY[layer]->
Draw(
"");
617 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
618 m_CgemFoilXY[layer][foil]->
Draw(
"");
622 if (opt.Contains(
"ZR"))
624 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
626 m_CgemAnodeZR[layer][0]->
Draw(
"");
627 m_CgemAnodeZR[layer][1]->
Draw(
"");
628 m_CgemCathodeZR[layer][0]->
Draw(
"");
629 m_CgemCathodeZR[layer][1]->
Draw(
"");
630 for (
int foil = 0; foil < m_kCgemFoil; ++foil)
632 m_CgemFoilZR[layer][foil][0]->
Draw(
"");
633 m_CgemFoilZR[layer][foil][1]->
Draw(
"");
639 if (opt.Contains(
"ZR"))
643 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
645 for (
int sheet = 0; sheet < 2; ++sheet)
647 if (layer == 0 && sheet == 1)
continue;
648 for (
int strip = 0; strip < NXStrip[layer][sheet]; ++strip)
650 m_CgemXStrip[layer][sheet][strip]->
SetFired(
false);
651 m_CgemXStrip[layer][sheet][strip]->
Draw(opt);
658 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
660 for (
int sheet = 0; sheet < 2; ++sheet)
662 if (layer == 0 && sheet == 1)
continue;
663 for (
int strip = 0; strip < NVStrip[layer][sheet]; ++strip)
665 m_CgemVStrip[layer][sheet][strip]->
SetFired(
false);
666 m_CgemVStrip[layer][sheet][strip]->
Draw(opt);
676 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
678 for (
int sheet = 0; sheet < 2; ++sheet)
680 if (layer == 0 && sheet == 1)
continue;
681 for (
int strip = 0; strip < NVStrip[layer][sheet]; ++strip)
683 m_CgemVStrip[layer][sheet][strip]->
SetFired(
false);
684 m_CgemVStrip[layer][sheet][strip]->
Draw(opt);
691 for (
int layer = 0; layer < m_kCgemLayer; ++layer)
693 for (
int sheet = 0; sheet < 2; ++sheet)
695 if (layer == 0 && sheet == 1)
continue;
696 for (
int strip = 0; strip < NXStrip[layer][sheet]; ++strip)
698 m_CgemXStrip[layer][sheet][strip]->
SetFired(
false);
699 m_CgemXStrip[layer][sheet][strip]->
Draw(opt);
711 if (layer < 0 || layer >= m_kCgemLayer)
return;
712 TString opt = option;
715 if (!
m_2DGeoInit) cout <<
"CgemROOTGeo::Draw(), Geometry not initialized!" << endl;
717 if (!view) cout <<
"CgemROOTGeo::Draw(), BesView not found" << endl;
721 for (
int sheet = 0; sheet < 2; ++sheet)
723 if (layer == 0 && sheet == 1)
continue;
728 for (
int strip = 0; strip < NXStrip[layer][sheet]; ++strip)
730 m_CgemXStrip[layer][sheet][strip]->
SetFired(
false);
731 m_CgemXStrip[layer][sheet][strip]->
Draw(opt);
736 for (
int strip = 0; strip < NVStrip[layer][sheet]; ++strip)
738 m_CgemVStrip[layer][sheet][strip]->
SetFired(
false);
739 m_CgemVStrip[layer][sheet][strip]->
Draw(opt);
750 if (!view) cout <<
"CgemROOTGeo::DrawHits(), BesView not found" << endl;
773 aStrip->
Draw(option);
780 aStrip->
Draw(option);
785 aStrip->
Draw(option);
790 aStrip->
Draw(option);
800 if (!view) cout <<
"CgemROOTGeo::Draw3DHits(), BesView not found" << endl;
808 if (m_CgemDigiCol) NDigiCol = m_CgemDigiCol->GetEntries();
812 for (
int i = 0; i < NDigiCol; ++i)
820 TPolyLine3D* pStrip = 0;
828 double phi = XStripPhi[layer][sheet][strip];
829 double r = RX[layer][sheet];
830 double zmin = ZMin[layer][sheet];
831 P[0] =
P[3] = TMath::Cos(phi) * r;
832 P[1] =
P[4] = TMath::Sin(phi) * r;
836 pStrip =
new TPolyLine3D(2,
P);
837 pStrip->SetBit(kCanDelete);
838 pStrip->SetLineWidth(4);
839 pStrip->SetLineColor(m_XstripColor);
840 pStrip->Draw(option);
848 double r = RV[layer][sheet];
849 double len = SheetLength[layer][sheet];
850 double wid = SheetWidth[layer][sheet];
851 double ang = StereoAngle[layer][sheet];
852 double xmin = XMin[layer][sheet];
853 double zmin = ZMin[layer][sheet];
854 double pit = VPitch[layer][sheet];
860 pStrip =
new TPolyLine3D(N);
861 pStrip->SetBit(kCanDelete);
862 pStrip->SetLineWidth(3);
863 pStrip->SetLineColor(m_VstripColor);
865 double tphi = 0, tz = 0;
866 for (
int i = 0; i < N; ++i)
869 double v = VStripV[layer][sheet][strip];
871 double x = r * TMath::Cos(tphi);
872 double y = r * TMath::Sin(tphi);
874 pStrip->SetPoint(i,
x, y, z);
877 pStrip->Draw(option);
890 if (strip >= 0 && strip < NXStrip[layer][sheet])
891 return m_CgemXStrip[layer][sheet][strip];
895 if (strip >= 0 && strip < NVStrip[layer][sheet])
896 return m_CgemVStrip[layer][sheet][strip];
904 if (layer < 0 || layer >= m_kCgemLayer || sheet < 0 || sheet >= 2)
return 0.0;
905 double ruf = (RV[layer][sheet] + RX[layer][sheet]) / 2;
906 double len = SheetLength[layer][sheet];
907 double wid = SheetWidth[layer][sheet];
908 double ang = StereoAngle[layer][sheet];
909 double xmin = XMin[layer][sheet];
910 double zmin = ZMin[layer][sheet];
911 double pit = VPitch[layer][sheet];
912 double vuf =
v / RV[layer][sheet] * ruf;
919 if (layer < 0 || layer >= m_kCgemLayer || sheet < 0 || sheet >= 2)
return 0.0;
920 return (RX[layer][sheet] + RV[layer][sheet]) / 2;
925 if (layer < 0 || layer >= m_kCgemLayer || sheet < 0 || sheet >= 2)
return 0.0;
926 return SheetWidth[layer][sheet];
931 if (layer < 0 || layer >= m_kCgemLayer || sheet < 0 || sheet >= 2)
return 0.0;
932 double ruf = (RV[layer][sheet] + RX[layer][sheet]) / 2;
933 double len = SheetLength[layer][sheet];
934 double wid = SheetWidth[layer][sheet];
935 double ang = StereoAngle[layer][sheet];
936 double xmin = XMin[layer][sheet];
937 double zmin = ZMin[layer][sheet];
938 double pit = VPitch[layer][sheet];
double P(RecMdcKalTrack *trk)
R__EXTERN BesEvent * gEvent
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
virtual void SetNSegment(Int_t np)
virtual void Draw(Option_t *option="")
BesEventHeader GetHeader()
const TObjArray * GetCgemDigiCol() const
void SetRotatable(Bool_t input)
virtual void Draw(Option_t *option="")
Bool_t GetVisCgemXStrips()
Bool_t GetVisCgemVStrips()
Bool_t GetVisCgemHitsXStrip()
Bool_t GetVisCgemGlobal()
Bool_t GetVisCgemHitsVStrip()
EBESViewType GetViewType()
Bool_t GetVisCgemLayers()
Bool_t GetVisCgemHitsGlobal()
virtual void Draw(Option_t *option="")=0
virtual ECgemStripType GetType() const =0
virtual void AddInfo(TString info)
virtual void SetFired(bool status=true)
virtual Int_t GetLayer() const
virtual void CloseInfo()=0
virtual void Draw(Option_t *option="")
virtual void Draw(Option_t *option="")
double getWidthOfStripV() const
double getWidthOfStripX() const
double getCentralVFromVID(int V_ID) const
double getPhiFromXID(int X_ID) const
CgemGeoLayer * getCgemLayer(int i) const
CgemGeoReadoutPlane * getReadoutPlane(int iLayer, int iSheet) const
static int strip(const Identifier &id)
static int sheet(const Identifier &id)
static int layer(const Identifier &id)
static bool is_xstrip(const Identifier &id)
double getRFromLayerSheet(int layer, int sheet) const
TGeoNode * GetCgemAnode(int layer)
void SetVolumeCgem(TGeoVolume *vol)
void Draw3DHits(Option_t *option)
double getSheetWidth(int layer, int sheet) const
void SetVolumeDefaultVis()
void InitFromROOT(TGeoVolume *vol)
Cgem2DStripBase * Get2DStrip(bool is_x, int layer, int sheet, int strip) const
TGeoNode * GetCgemCathode(int layer)
TGeoVolume * GetVolumeCgem() const
TGeoNode * GetCgemFoil(int layer, int foil)
double isPointInSheet(int layer, int sheet, double phi, double z) const
void SetPhysicalDefaultVis()
void DrawHits(Option_t *option)
void Draw(Option_t *option)
double calcZFromLayerSheetVIDPhi(int layer, int sheet, double v, double phi) const
void SetVisCgemDetector()
void DrawUF(int layer, Option_t *option="")
void InitFromGDML(const char *gdmlFile, const char *setupName)
int getPointNumberFromV(double v) const
int getNthPointFromV(double v, int i, double &phi, double &z) const
bool isPointInSheet(double phi, double z) const
double getZFromVPhi(double v, double phi) const
static double CgemCharge(int chargeChannel)
static double CgemTime(int timeChannel)
TGeoNode * GetNode(const std::string &nn)
Get a node(physical volume) by name;.
TObjArray * m_2DHitsArray
TGeoVolume * GetTopVolume()
Get the top(world) volume;.
void ReadGdml(const char *gdmlFile, const char *setupName)
Initialize the instance of ROOTGeo.
UInt_t getChargeChannel() const
UInt_t getTimeChannel() const