Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/EventDisplay.C

    rc3c9ac5 ra817a22  
    1 /* Example:
    2  * root -l 'EventDisplay.C("delphes_card_CMS.tcl","../delphes_output.root")'
    3  * root -l 'EventDisplay.C("delphes_card_FCC_basic.tcl","../delphes_output.root","ParticlePropagator","ChargedHadronTrackingEfficiency","MuonTrackingEfficiency","Ecal,Hcal")'
    4  */
    5 
    6 void EventDisplay(const char* configfile = "delphes_card_CMS.tcl", const char* datafile = "delphes_output.root",
    7                   const char* ParticlePropagator="ParticlePropagator",
    8                   const char* TrackingEfficiency="ChargedHadronTrackingEfficiency",
    9                   const char* MuonEfficiency="MuonEfficiency",
    10                   const char* Calorimeters="Calorimeter",
    11                   bool displayGeometryOnly = false)
     1/*
     2root -l examples/EventDisplay.C\(\"examples/delphes_card_CMS.tcl\",\"delphes_output.root\"\)
     3ShowEvent(1);
     4ShowEvent(2);
     5*/
     6
     7//------------------------------------------------------------------------------
     8
     9// radius of the barrel, in m
     10Double_t gRadius = 1.29;
     11
     12// half-length of the barrel, in m
     13Double_t gHalfLength = 3.0;
     14
     15// magnetic field
     16Double_t gBz = 3.8;
     17
     18TAxis *gEtaAxis = 0;
     19TAxis *gPhiAxis = 0;
     20
     21//------------------------------------------------------------------------------
     22
     23#include <set>
     24#include <vector>
     25
     26using namespace std;
     27
     28class ExRootTreeReader;
     29class DelphesCaloData;
     30class DelphesDisplay;
     31
     32TChain gChain("Delphes");
     33
     34ExRootTreeReader *gTreeReader = 0;
     35
     36TClonesArray *gBranchTower = 0;
     37TClonesArray *gBranchTrack = 0;
     38TClonesArray *gBranchJet = 0;
     39
     40DelphesCaloData *gCaloData = 0;
     41TEveElementList *gJetList = 0;
     42TEveTrackList *gTrackList = 0;
     43
     44DelphesDisplay *gDelphesDisplay = 0;
     45
     46//------------------------------------------------------------------------------
     47
     48void EventDisplay(const char *configFile, const char *inputFile)
    1249{
    13    // load the libraries
    14    gSystem->Load("libGeom");
    15    gSystem->Load("libGuiHtml");
    16    gSystem->Load("../libDelphesDisplay");
    17 
    18    if(displayGeometryOnly) {
    19      // create the detector representation without transparency
    20      Delphes3DGeometry det3D_geom(new TGeoManager("delphes", "Delphes geometry"), false);
    21      det3D_geom.readFile(configfile, ParticlePropagator, TrackingEfficiency, MuonEfficiency, Calorimeters);
    22 
    23      // display
    24      det3D_geom.getDetector()->Draw("ogl");
    25 
    26    } else {
    27 
    28      // create the detector representation
    29      Delphes3DGeometry det3D(new TGeoManager("delphes", "Delphes geometry"), true);
    30      det3D.readFile(configfile, ParticlePropagator, TrackingEfficiency, MuonEfficiency, Calorimeters);
    31 
    32      // create the application
    33      DelphesEventDisplay* display = new DelphesEventDisplay(configfile, datafile, det3D);
    34 
    35    }
     50  gSystem->Load("libDelphesDisplay");
     51
     52  TEveManager::Create(kTRUE, "IV");
     53
     54  ExRootConfParam param, paramEtaBins;
     55  Long_t i, j, size, sizeEtaBins;
     56  set< Double_t > etaSet;
     57  set< Double_t >::iterator itEtaSet;
     58
     59  Double_t *etaBins;
     60
     61  ExRootConfReader *confReader = new ExRootConfReader;
     62  confReader->ReadFile(configFile);
     63
     64  gRadius = confReader->GetDouble("ParticlePropagator::Radius", 1.0);
     65  gHalfLength = confReader->GetDouble("ParticlePropagator::HalfLength", 3.0);
     66  gBz = confReader->GetDouble("ParticlePropagator::Bz", 0.0);
     67
     68  // read eta and phi bins
     69  param = confReader->GetParam("Calorimeter::EtaPhiBins");
     70  size = param.GetSize();
     71  etaSet.clear();
     72  for(i = 0; i < size/2; ++i)
     73  {
     74    paramEtaBins = param[i*2];
     75    sizeEtaBins = paramEtaBins.GetSize();
     76
     77    for(j = 0; j < sizeEtaBins; ++j)
     78    {
     79      etaSet.insert(paramEtaBins[j].GetDouble());
     80    }
     81  }
     82
     83  delete confReader;
     84
     85  etaBins = new Double_t[etaSet.size()];
     86  i = 0;
     87
     88  for(itEtaSet = etaSet.begin(); itEtaSet != etaSet.end(); ++itEtaSet)
     89  {
     90    etaBins[i] = *itEtaSet;
     91    ++i;
     92  }
     93
     94  gEtaAxis = new TAxis(etaSet.size() - 1, etaBins);
     95  gPhiAxis = new TAxis(72, -TMath::Pi(), TMath::Pi());
     96
     97  // Create chain of root trees
     98  gChain.Add(inputFile);
     99
     100  // Create object of class ExRootTreeReader
     101  gTreeReader = new ExRootTreeReader(&gChain);
     102
     103  // Get pointers to branches
     104  gBranchTower = gTreeReader->UseBranch("Tower");
     105  gBranchTrack = gTreeReader->UseBranch("Track");
     106  gBranchJet = gTreeReader->UseBranch("Jet");
     107
     108  // data
     109  gCaloData = new DelphesCaloData(2);
     110  gCaloData->RefSliceInfo(0).Setup("ECAL", 0.1, kRed);
     111  gCaloData->RefSliceInfo(1).Setup("HCAL", 0.1, kBlue);
     112  gCaloData->SetEtaBins(gEtaAxis);
     113  gCaloData->SetPhiBins(gPhiAxis);
     114  gCaloData->IncDenyDestroy();
     115
     116  gJetList = new TEveElementList("Jets");
     117  gEve->AddElement(gJetList);
     118
     119  gTrackList = new TEveTrackList("Tracks");
     120  gTrackList->SetMainColor(kBlue);
     121  gTrackList->SetMarkerColor(kRed);
     122  gTrackList->SetMarkerStyle(kCircle);
     123  gTrackList->SetMarkerSize(0.5);
     124  gEve->AddElement(gTrackList);
     125
     126  TEveTrackPropagator *trkProp = gTrackList->GetPropagator();
     127  trkProp->SetMagField(0.0, 0.0, -gBz);
     128  trkProp->SetMaxR(gRadius*100.0);
     129  trkProp->SetMaxZ(gHalfLength*100.0);
     130
     131  // viewers and scenes
     132
     133  TEveElementList *geometry = new TEveElementList("Geometry");
     134
     135  TEveGeoShape *barell = new TEveGeoShape("Barell");
     136  barell->SetShape(new TGeoTube(gRadius*100.0 - 1, gRadius*100.0, gHalfLength*100.0));
     137  barell->SetMainColor(kCyan);
     138  barell->SetMainTransparency(80);
     139  geometry->AddElement(barell);
     140
     141  TEveCalo3D *calo = new TEveCalo3D(gCaloData);
     142  calo->SetBarrelRadius(gRadius*100.0);
     143  calo->SetEndCapPos(gHalfLength*100.0);
     144
     145  gStyle->SetPalette(1, 0);
     146  TEveCaloLego *lego = new TEveCaloLego(gCaloData);
     147  lego->InitMainTrans();
     148  lego->RefMainTrans().SetScale(TMath::TwoPi(), TMath::TwoPi(), TMath::Pi());
     149  lego->SetAutoRebin(kFALSE);
     150  lego->Set2DMode(TEveCaloLego::kValSizeOutline);
     151
     152  gDelphesDisplay = new DelphesDisplay;
     153
     154  gEve->AddGlobalElement(geometry);
     155  gEve->AddGlobalElement(calo);
     156
     157  gDelphesDisplay->ImportGeomRPhi(geometry);
     158  gDelphesDisplay->ImportCaloRPhi(calo);
     159
     160  gDelphesDisplay->ImportGeomRhoZ(geometry);
     161  gDelphesDisplay->ImportCaloRhoZ(calo);
     162
     163  gDelphesDisplay->ImportCaloLego(lego);
     164
     165  gEve->Redraw3D(kTRUE);
    36166}
    37167
     168//------------------------------------------------------------------------------
     169
     170void ShowEvent(Long64_t event)
     171{
     172  TIter itTower(gBranchTower);
     173  TIter itTrack(gBranchTrack);
     174  TIter itJet(gBranchJet);
     175
     176  Tower *tower;
     177  Track *track;
     178  Jet *jet;
     179
     180  TEveJetCone *eveJetCone;
     181  TEveTrack *eveTrack;
     182
     183  Int_t counter;
     184
     185  TEveElement *currentEvent = gEve->GetCurrentEvent();
     186
     187  TEveTrackPropagator *trkProp = gTrackList->GetPropagator();
     188
     189  if(event >= gTreeReader->GetEntries()) return;
     190
     191  // Load selected branches with data from specified event
     192  gTreeReader->ReadEntry(event);
     193
     194  gCaloData->ClearTowers();
     195  gJetList->DestroyElements();
     196  gTrackList->DestroyElements();
     197
     198  // Loop over all towers
     199  itTower.Reset();
     200  while((tower = (Tower *) itTower.Next()))
     201  {
     202    gCaloData->AddTower(tower->Edges[0], tower->Edges[1], tower->Edges[2], tower->Edges[3]);
     203    gCaloData->FillSlice(0, tower->Eem);
     204    gCaloData->FillSlice(1, tower->Ehad);
     205  }
     206  gCaloData->DataChanged();
     207
     208  // Loop over all tracks
     209  itTrack.Reset();
     210  counter = 0;
     211  while((track = (Track *) itTrack.Next()))
     212  {
     213    TParticle pb(track->PID, 1, 0, 0, 0, 0,
     214                 track->P4().Px(), track->P4().Py(),
     215                 track->P4().Pz(), track->P4().E(),
     216                 track->X, track->Y, track->Z, 0.0);
     217
     218    eveTrack = new TEveTrack(&pb, counter, trkProp);
     219    eveTrack->SetName(Form("%s [%d]", pb.GetName(), counter++));
     220    eveTrack->SetStdTitle();
     221    eveTrack->SetAttLineAttMarker(gTrackList);
     222
     223    switch(TMath::Abs(track->PID))
     224    {
     225      case 11:
     226        eveTrack->SetLineColor(kRed);
     227        break;
     228      case 13:
     229        eveTrack->SetLineColor(kGreen);
     230        break;
     231      default:
     232        eveTrack->SetLineColor(kBlue);
     233    }
     234    gTrackList->AddElement(eveTrack);
     235    eveTrack->MakeTrack();
     236  }
     237
     238  // Loop over all jets
     239  itJet.Reset();
     240  counter = 0;
     241  while((jet = (Jet *) itJet.Next()))
     242  {
     243    eveJetCone = new TEveJetCone();
     244    eveJetCone->SetName(Form("jet [%d]", counter++));
     245    eveJetCone->SetMainTransparency(60);
     246    eveJetCone->SetLineColor(kYellow);
     247    eveJetCone->SetCylinder(gRadius*100.0 - 10, gHalfLength*100.0 - 10);
     248    eveJetCone->SetPickable(kTRUE);
     249    eveJetCone->AddEllipticCone(jet->Eta, jet->Phi, jet->DeltaEta, jet->DeltaPhi);
     250    gJetList->AddElement(eveJetCone);
     251  }
     252
     253  gDelphesDisplay->DestroyEventRPhi();
     254  gDelphesDisplay->ImportEventRPhi(currentEvent);
     255
     256  gDelphesDisplay->DestroyEventRhoZ();
     257  gDelphesDisplay->ImportEventRhoZ(currentEvent);
     258
     259  gEve->Redraw3D(kTRUE);
     260}
Note: See TracChangeset for help on using the changeset viewer.