1 // Demonstrates usage of TEveJetCone class.
2 // Author: Jochen Thaeder
14 Float_t coneRadius = 0.4;
15 Float_t length = 300.;
18 gStyle->SetPalette(1, 0);
19 TEveRGBAPalette* pal = new TEveRGBAPalette(0, 500);
21 // -----------------------------------------------------------------------------------
23 // -----------------------------------------------------------------------------------
25 // -- Define cone center
26 TEveStraightLineSet* axis = new TEveStraightLineSet("Cone Axis");
27 axis->SetLineColor(kGreen);
28 axis->SetLineWidth(2);
30 TEveStraightLineSet* tracksXYZ = new TEveStraightLineSet("StraightLinesXYZ");
31 tracksXYZ->SetLineColor(kRed);
32 tracksXYZ->SetLineWidth(2);
34 TEveStraightLineSet* tracksEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhi");
35 tracksEtaPhi->SetLineColor(kYellow);
36 tracksEtaPhi->SetLineWidth(2);
38 TEveStraightLineSet* tracksSeedEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhiSeed");
39 tracksSeedEtaPhi->SetLineColor(kBlue);
40 tracksSeedEtaPhi->SetLineWidth(2);
42 // -----------------------------------------------------------------------------------
43 // -- Draw track distribution in XYZ ( in TPC Volume ) ( +/-250, +/-250, +/-250 )
44 // -----------------------------------------------------------------------------------
46 for ( Int_t track=0; track < nTracks ; track++ ) {
48 Float_t trackX = r.Uniform(-250.0, 250.0);
49 Float_t trackY = r.Uniform(-250.0, 250.0);
50 Float_t trackZ = r.Uniform(-250.0, 250.0);
51 Float_t trackR = (Float_t) Sqrt ( trackX*trackX + trackY*trackY + trackZ*trackZ );
54 Float_t trackEta = 0.5 * (Float_t) Log( (Double_t)(( trackR+trackZ )/( trackR-trackZ )) );
55 Float_t trackPhi = (Float_t) ATan2( (Double_t) trackY, (Double_t) trackX );
56 if ( trackPhi < 0. ) trackPhi += (Float_t) TwoPi();
59 TEveVector trackDir(trackX/trackR, trackY/trackR ,trackZ/trackR);
60 TEveVector trackEnd = trackDir * length;
61 tracksXYZ->AddLine(0., 0., 0., trackEnd.fX, trackEnd.fY, trackEnd.fZ );
64 // -----------------------------------------------------------------------------------
65 // -- Draw track distribution in eta phi ( in TPC Volume ) ( +/-0.9, {0, 2Pi} )
66 // -----------------------------------------------------------------------------------
68 for ( Int_t track=0; track < nTracks ; track++ ) {
70 Float_t trackEta = r.Uniform(-0.9, 0.9);
71 Float_t trackPhi = r.Uniform(0.0, TwoPi());
73 TEveVector trackDir( GetTEveVector(trackEta, trackPhi) );
74 TEveVector trackEnd = trackDir * length;
76 if ( trackEta > coneRadius || trackEta < -coneRadius )
77 tracksEtaPhi->AddLine(0., 0., 0., trackEnd.fX, trackEnd.fY, trackEnd.fZ );
79 tracksSeedEtaPhi->AddLine(0., 0., 0., trackEnd.fX, trackEnd.fY, trackEnd.fZ );
82 // -----------------------------------------------------------------------------------
84 // -----------------------------------------------------------------------------------
86 for ( Int_t iter = 0; iter < nCones; ++iter ) {
88 // -- Get Random ( eta ,phi )
89 Float_t coneEta = r.Uniform(-0.9, 0.9);
90 Float_t conePhi = r.Uniform(0.0, TwoPi() );
92 // -- Primary vertx as origin
93 TEveVector coneOrigin(0.0,0.0,0.0);
95 // -- Get Cone Axis - axis line 10% longer than cone height
96 TEveVector coneAxis ( GetTEveVector( coneEta, conePhi) );
97 coneAxis *= length * 1.1;
99 axis->AddLine( 0., 0., 0., coneAxis.fX, coneAxis.fY, coneAxis.fZ );
102 TEveJetCone* jetCone = new TEveJetCone("JetCone");
103 jetCone->SetCylinder( 250., 250. );
104 if ( (jetCone->AddCone( coneEta, conePhi, coneRadius ) ) != -1)
105 gEve->AddElement( jetCone );
108 // -----------------------------------------------------------------------------------
111 gEve->AddElement(axis);
114 // gEve->AddElement(tracksXYZ);
115 gEve->AddElement(tracksSeedEtaPhi);
116 gEve->AddElement(tracksEtaPhi);
118 // -- Load TPC geometry
121 gEve->Redraw3D(kTRUE);
126 // ################################################################################
127 // ################################################################################
129 // ################################################################################
130 TEveVector GetTEveVector( Float_t& eta, Float_t& phi ) {
132 TEveVector vec( (Float_t) Cos ( (Double_t) phi)/ CosH( (Double_t) eta ),
133 (Float_t) Sin ( (Double_t) phi)/ CosH( (Double_t) eta ),
134 (Float_t) TanH( (Double_t) eta ) );
138 // ################################################################################
139 void geomGentleTPC() {
141 TFile f("$ALICE_ROOT/EVE/alice-data/gentle_geo.root");
142 TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) f.Get("Gentle");
143 TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse, 0);
144 gEve->AddGlobalElement(gsre);
147 TEveElement* elTRD = gsre->FindChild("TRD+TOF");
148 elTRD->SetRnrState(kFALSE);
150 TEveElement* elPHOS = gsre->FindChild("PHOS");
151 elPHOS->SetRnrState(kFALSE);
153 TEveElement* elHMPID = gsre->FindChild("HMPID");
154 elHMPID->SetRnrState(kFALSE);