swh:1:snp:af87cd67498ef4fe47c76ed3e7caffe5b61facaf
Tip revision: e1e22198f55729f46f81f5274022e287e405ce57 authored by Axel Naumann on 10 January 2020, 11:51:51 UTC
Update ROOT version files to v6.19/02.
Update ROOT version files to v6.19/02.
Tip revision: e1e2219
jetcone.C
/// \file
/// \ingroup tutorial_eve
/// Demonstrates usage of TEveJetCone class.
///
/// \image html eve_jetcone.png
/// \macro_code
///
/// \author Jochen Thaeder
const char* esd_geom_file_name =
"http://root.cern.ch/files/alice_ESDgeometry.root";
TEveVector GetTEveVector(Float_t eta, Float_t phi);
void geomGentleTPC();
void jetcone()
{
TEveManager::Create();
using namespace TMath;
TRandom r(0);
// -- Set Constants
Int_t nCones = 10;
Int_t nTracks = 200;
Float_t coneRadius = 0.4;
Float_t length = 300.;
// -- Define palette
auto pal = new TEveRGBAPalette(0, 500);
// -----------------------------------------------------------------------
// -- Line sets
// -----------------------------------------------------------------------
// -- Define cone center
auto axis = new TEveStraightLineSet("Cone Axis");
axis->SetLineColor(kGreen);
axis->SetLineWidth(2);
auto tracksXYZ = new TEveStraightLineSet("StraightLinesXYZ");
tracksXYZ->SetLineColor(kRed);
tracksXYZ->SetLineWidth(2);
auto tracksEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhi");
tracksEtaPhi->SetLineColor(kYellow);
tracksEtaPhi->SetLineWidth(2);
auto tracksSeedEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhiSeed");
tracksSeedEtaPhi->SetLineColor(kBlue);
tracksSeedEtaPhi->SetLineWidth(2);
// -----------------------------------------------------------------------
// -- Draw track distribution in XYZ in TPC Volume +/-250, +/-250, +/-250
// -----------------------------------------------------------------------
for ( Int_t track=0; track < nTracks ; track++ ) {
Float_t trackX = r.Uniform(-250.0, 250.0);
Float_t trackY = r.Uniform(-250.0, 250.0);
Float_t trackZ = r.Uniform(-250.0, 250.0);
Float_t trackR = Sqrt(trackX*trackX + trackY*trackY + trackZ*trackZ);
TEveVector trackDir(trackX/trackR, trackY/trackR ,trackZ/trackR);
TEveVector trackEnd = trackDir * length;
tracksXYZ->AddLine(0., 0., 0., trackEnd.fX, trackEnd.fY, trackEnd.fZ );
}
// -----------------------------------------------------------------------
// -- Draw track distribution in eta phi in TPC Volume +/-0.9, {0, 2Pi}
// -----------------------------------------------------------------------
for ( Int_t track=0; track < nTracks ; track++ ) {
Float_t trackEta = r.Uniform(-0.9, 0.9);
Float_t trackPhi = r.Uniform(0.0, TwoPi());
TEveVector trackDir( GetTEveVector(trackEta, trackPhi) );
TEveVector trackEnd = trackDir * length;
if ( trackEta > coneRadius || trackEta < -coneRadius )
tracksEtaPhi->AddLine(0., 0., 0.,
trackEnd.fX, trackEnd.fY, trackEnd.fZ);
else
tracksSeedEtaPhi->AddLine(0., 0., 0.,
trackEnd.fX, trackEnd.fY, trackEnd.fZ);
}
// -----------------------------------------------------------------------
// -- Draw cones
// -----------------------------------------------------------------------
for ( Int_t iter = 0; iter < nCones; ++iter ) {
// -- Get Random ( eta ,phi )
Float_t coneEta = r.Uniform(-0.9, 0.9);
Float_t conePhi = r.Uniform(0.0, TwoPi() );
// -- Primary vertex as origin
TEveVector coneOrigin(0.0,0.0,0.0);
// -- Get Cone Axis - axis line 10% longer than cone height
TEveVector coneAxis ( GetTEveVector( coneEta, conePhi) );
coneAxis *= length * 1.1;
axis->AddLine( 0., 0., 0., coneAxis.fX, coneAxis.fY, coneAxis.fZ );
// -- Draw jet cone
auto jetCone = new TEveJetCone("JetCone");
jetCone->SetPickable(kTRUE);
jetCone->SetCylinder( 250., 250. );
if ( (jetCone->AddCone( coneEta, conePhi, coneRadius ) ) != -1)
gEve->AddElement( jetCone );
}
// -----------------------------------------------------------------------
// -- Add cone axis
gEve->AddElement(axis);
// -- Add lines
// gEve->AddElement(tracksXYZ);
gEve->AddElement(tracksSeedEtaPhi);
gEve->AddElement(tracksEtaPhi);
// -- Load TPC geometry
geomGentleTPC();
gEve->Redraw3D(kTRUE);
return;
}
//___________________________________________________________________________
TEveVector GetTEveVector(Float_t eta, Float_t phi)
{
using namespace TMath;
TEveVector vec( (Float_t) Cos ( (Double_t) phi)/ CosH( (Double_t) eta ),
(Float_t) Sin ( (Double_t) phi)/ CosH( (Double_t) eta ),
(Float_t) TanH( (Double_t) eta ) );
return vec;
}
//__________________________________________________________________________
void geomGentleTPC()
{
// Simple geometry
TFile::SetCacheFileDir(".");
TFile* geom = TFile::Open(esd_geom_file_name, "CACHEREAD");
if (!geom)
return;
TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) geom->Get("Gentle");
TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse, 0);
geom->Close();
delete geom;
gEve->AddGlobalElement(gsre);
TEveElement* elTRD = gsre->FindChild("TRD+TOF");
elTRD->SetRnrState(kFALSE);
TEveElement* elPHOS = gsre->FindChild("PHOS");
elPHOS->SetRnrState(kFALSE);
TEveElement* elHMPID = gsre->FindChild("HMPID");
elHMPID->SetRnrState(kFALSE);
}