jetcone.C

Go to the documentation of this file.
00001 // Demonstrates usage of TEveJetCone class.
00002 // Author: Jochen Thaeder
00003 
00004 const char* esd_geom_file_name =
00005    "http://root.cern.ch/files/alice_ESDgeometry.root";
00006 
00007 void jetcone()
00008 {
00009    TEveManager::Create();
00010 
00011    using namespace TMath;
00012 
00013    TRandom r(0);
00014 
00015    // -- Set Constants
00016    Int_t nCones  = 10;
00017    Int_t nTracks = 200;
00018 
00019    Float_t coneRadius = 0.4;
00020    Float_t length = 300.;
00021 
00022    // -- Define palette
00023    gStyle->SetPalette(1, 0);
00024    TEveRGBAPalette* pal = new TEveRGBAPalette(0, 500);
00025 
00026    // -----------------------------------------------------------------------
00027    // -- Line sets
00028    // -----------------------------------------------------------------------
00029 
00030    // -- Define cone center
00031    TEveStraightLineSet* axis = new TEveStraightLineSet("Cone Axis");
00032    axis->SetLineColor(kGreen);
00033    axis->SetLineWidth(2);
00034 
00035    TEveStraightLineSet* tracksXYZ = new TEveStraightLineSet("StraightLinesXYZ");
00036    tracksXYZ->SetLineColor(kRed);
00037    tracksXYZ->SetLineWidth(2);
00038 
00039    TEveStraightLineSet* tracksEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhi");
00040    tracksEtaPhi->SetLineColor(kYellow);
00041    tracksEtaPhi->SetLineWidth(2);
00042 
00043    TEveStraightLineSet* tracksSeedEtaPhi = new TEveStraightLineSet("StraightLinesEtaPhiSeed");
00044    tracksSeedEtaPhi->SetLineColor(kBlue);
00045    tracksSeedEtaPhi->SetLineWidth(2);
00046 
00047    // -----------------------------------------------------------------------
00048    // -- Draw track distribution in XYZ in TPC Volume +/-250, +/-250, +/-250
00049    // -----------------------------------------------------------------------
00050 
00051    for ( Int_t track=0; track < nTracks ; track++ ) {
00052 
00053       Float_t trackX = r.Uniform(-250.0, 250.0);
00054       Float_t trackY = r.Uniform(-250.0, 250.0);
00055       Float_t trackZ = r.Uniform(-250.0, 250.0);
00056       Float_t trackR = Sqrt(trackX*trackX + trackY*trackY + trackZ*trackZ);
00057 
00058       TEveVector trackDir(trackX/trackR, trackY/trackR ,trackZ/trackR);
00059       TEveVector trackEnd = trackDir * length;
00060       tracksXYZ->AddLine(0., 0., 0., trackEnd.fX, trackEnd.fY, trackEnd.fZ );
00061    }
00062 
00063    // -----------------------------------------------------------------------
00064    // -- Draw track distribution in eta phi in TPC Volume +/-0.9, {0, 2Pi}
00065    // -----------------------------------------------------------------------
00066 
00067    for ( Int_t track=0; track < nTracks ; track++ ) {
00068 
00069       Float_t trackEta = r.Uniform(-0.9, 0.9);
00070       Float_t trackPhi = r.Uniform(0.0, TwoPi());
00071 
00072       TEveVector trackDir( GetTEveVector(trackEta, trackPhi) );
00073       TEveVector trackEnd = trackDir * length;
00074 
00075       if ( trackEta > coneRadius || trackEta < -coneRadius )
00076          tracksEtaPhi->AddLine(0., 0., 0.,
00077                                trackEnd.fX, trackEnd.fY, trackEnd.fZ);
00078       else
00079          tracksSeedEtaPhi->AddLine(0., 0., 0.,
00080                                    trackEnd.fX, trackEnd.fY, trackEnd.fZ);
00081    }
00082 
00083    // -----------------------------------------------------------------------
00084    // -- Draw cones
00085    // -----------------------------------------------------------------------
00086 
00087    for ( Int_t iter = 0; iter < nCones; ++iter ) {
00088 
00089       // -- Get Random ( eta ,phi )
00090       Float_t coneEta = r.Uniform(-0.9, 0.9);
00091       Float_t conePhi = r.Uniform(0.0, TwoPi() );
00092 
00093       // -- Primary vertx as origin
00094       TEveVector coneOrigin(0.0,0.0,0.0);
00095 
00096       // -- Get Cone Axis - axis line 10% longer than cone height
00097       TEveVector coneAxis ( GetTEveVector( coneEta, conePhi) );
00098       coneAxis *= length * 1.1;
00099 
00100       axis->AddLine( 0., 0., 0., coneAxis.fX, coneAxis.fY, coneAxis.fZ );
00101 
00102       // -- Draw jet cone
00103       TEveJetCone* jetCone = new TEveJetCone("JetCone");
00104       jetCone->SetPickable(kTRUE);
00105       jetCone->SetCylinder( 250., 250. );
00106       if ( (jetCone->AddCone( coneEta, conePhi, coneRadius   ) ) != -1)
00107          gEve->AddElement( jetCone );
00108    }
00109 
00110    // -----------------------------------------------------------------------
00111 
00112    // -- Add cone axis
00113    gEve->AddElement(axis);
00114 
00115    // -- Add lines
00116    //  gEve->AddElement(tracksXYZ);
00117    gEve->AddElement(tracksSeedEtaPhi);
00118    gEve->AddElement(tracksEtaPhi);
00119 
00120    // -- Load TPC geometry
00121    geomGentleTPC();
00122 
00123    gEve->Redraw3D(kTRUE);
00124 
00125    return;
00126 }
00127 
00128 //___________________________________________________________________________
00129 TEveVector GetTEveVector( Float_t& eta, Float_t& phi )
00130 {
00131   TEveVector vec( (Float_t) Cos ( (Double_t) phi)/ CosH( (Double_t) eta ),
00132                   (Float_t) Sin ( (Double_t) phi)/ CosH( (Double_t) eta ),
00133                   (Float_t) TanH( (Double_t) eta ) );
00134   return vec;
00135 }
00136 
00137 //__________________________________________________________________________
00138 void geomGentleTPC()
00139 {
00140    // Simple geometry
00141    TFile* geom = TFile::Open(esd_geom_file_name, "CACHEREAD");
00142    if (!geom)
00143       return;
00144 
00145    TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) geom->Get("Gentle");
00146    TEveGeoShape* gsre = TEveGeoShape::ImportShapeExtract(gse, 0);
00147    geom->Close();
00148    delete geom;
00149 
00150    gEve->AddGlobalElement(gsre);
00151 
00152    TEveElement* elTRD = gsre->FindChild("TRD+TOF");
00153    elTRD->SetRnrState(kFALSE);
00154 
00155    TEveElement* elPHOS = gsre->FindChild("PHOS");
00156    elPHOS->SetRnrState(kFALSE);
00157 
00158    TEveElement* elHMPID = gsre->FindChild("HMPID");
00159    elHMPID->SetRnrState(kFALSE);
00160 }

Generated on Tue Jul 5 15:43:51 2011 for ROOT_528-00b_version by  doxygen 1.5.1