Fork me on GitHub

Changeset e7e90df in git for examples/EventDisplay.C


Ignore:
Timestamp:
Dec 9, 2014, 1:26:26 PM (10 years ago)
Author:
Michele <michele.selvaggi@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
49234af
Parents:
01f457a (diff), f6b6ee7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into TestFastJet310b1

Conflicts:

Makefile
examples/Example1.C
examples/Example2.C
examples/Example3.C

File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/EventDisplay.C

    r01f457a re7e90df  
    1 /*
    2 root -l examples/EventDisplay.C\(\"examples/delphes_card_CMS.tcl\",\"delphes_output.root\"\)
    3 ShowEvent(1);
    4 ShowEvent(2);
    5 */
     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 */
    65
    7 //------------------------------------------------------------------------------
     6void 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)
     12{
     13   // load the libraries
     14   gSystem->Load("libGeom");
     15   gSystem->Load("libGuiHtml");
     16   gSystem->Load("../libDelphesDisplay");
    817
    9 // radius of the barrel, in m
    10 Double_t gRadius = 1.29;
     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);
    1122
    12 // half-length of the barrel, in m
    13 Double_t gHalfLength = 3.0;
     23     // display
     24     det3D_geom.getDetector()->Draw("ogl");
    1425
    15 // magnetic field
    16 Double_t gBz = 3.8;
     26   } else {
    1727
    18 TAxis *gEtaAxis = 0;
    19 TAxis *gPhiAxis = 0;
     28     // create the detector representation
     29     Delphes3DGeometry det3D(new TGeoManager("delphes", "Delphes geometry"), true);
     30     det3D.readFile(configfile, ParticlePropagator, TrackingEfficiency, MuonEfficiency, Calorimeters);
    2031
    21 //------------------------------------------------------------------------------
     32     // create the application
     33     DelphesEventDisplay* display = new DelphesEventDisplay(configfile, datafile, det3D);
    2234
    23 #include <set>
    24 #include <vector>
    25 
    26 using namespace std;
    27 
    28 class ExRootTreeReader;
    29 class DelphesCaloData;
    30 class DelphesDisplay;
    31 
    32 TChain gChain("Delphes");
    33 
    34 ExRootTreeReader *gTreeReader = 0;
    35 
    36 TClonesArray *gBranchTower = 0;
    37 TClonesArray *gBranchTrack = 0;
    38 TClonesArray *gBranchJet = 0;
    39 
    40 DelphesCaloData *gCaloData = 0;
    41 TEveElementList *gJetList = 0;
    42 TEveTrackList *gTrackList = 0;
    43 
    44 DelphesDisplay *gDelphesDisplay = 0;
    45 
    46 //------------------------------------------------------------------------------
    47 
    48 void EventDisplay(const char *configFile, const char *inputFile)
    49 {
    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);
     35   }
    16636}
    16737
    168 //------------------------------------------------------------------------------
    169 
    170 void 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.