TEveVSD.cxx

Go to the documentation of this file.
00001 // @(#)root/eve:$Id: TEveVSD.cxx 31363 2009-11-21 11:31:07Z matevz $
00002 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TEveVSD.h"
00013 #include "TFile.h"
00014 
00015 //==============================================================================
00016 // TEveVSD
00017 //==============================================================================
00018 
00019 //______________________________________________________________________________
00020 //
00021 // Visualization Summary Data - a collection of trees holding standard
00022 // event data in experiment independant format.
00023 
00024 ClassImp(TEveVSD);
00025 
00026 //______________________________________________________________________________
00027 TEveVSD::TEveVSD(const char* , const char*) :
00028    TObject(),
00029 
00030    fFile      (0),
00031    fDirectory (0),
00032    fBuffSize  (32000),
00033    fVerbose   (0),
00034 
00035    fTreeK  (0),
00036    fTreeH  (0),
00037    fTreeC  (0),
00038    fTreeR  (0),
00039    fTreeKK (0),
00040    fTreeV0 (0),
00041    fTreeCC (0),
00042    fTreeGI (0),
00043 
00044    fK(),  fpK (&fK),
00045    fH(),  fpH (&fH),
00046    fC(),  fpC (&fC),
00047    fR(),  fpR (&fR),
00048    fKK(), fpKK(&fKK),
00049    fV0(), fpV0(&fV0),
00050    fCC(), fpCC(&fCC),
00051    fGI(), fpGI(&fGI)
00052 {
00053    // Constructor.
00054 }
00055 
00056 //______________________________________________________________________________
00057 TEveVSD::~TEveVSD()
00058 {
00059    // Destructor.
00060 }
00061 
00062 /******************************************************************************/
00063 
00064 //______________________________________________________________________________
00065 void TEveVSD::SetDirectory(TDirectory* dir)
00066 {
00067    // Set directory in which the trees are (or will be) created.
00068 
00069    fDirectory = dir;
00070 }
00071 
00072 /******************************************************************************/
00073 
00074 //______________________________________________________________________________
00075 void TEveVSD::CreateTrees()
00076 {
00077    // Create internal trees.
00078 
00079    fDirectory->cd();
00080    fTreeK  = new TTree("Kinematics", "Simulated tracks.");
00081    fTreeH  = new TTree("Hits",       "Combined detector hits.");
00082    fTreeC  = new TTree("Clusters",   "Reconstructed clusters.");
00083    fTreeR  = new TTree("RecTracks",  "Reconstructed tracks.");
00084    fTreeKK = new TTree("RecKinks",   "Reconstructed kinks.");
00085    fTreeV0 = new TTree("RecV0s",     "Reconstructed V0s.");
00086    fTreeCC = new TTree("RecCascades","Reconstructed cascades.");
00087    fTreeGI = new TTree("TEveMCRecCrossRef", "Objects prepared for cross query.");
00088 }
00089 
00090 //______________________________________________________________________________
00091 void TEveVSD::DeleteTrees()
00092 {
00093    // Delete interal trees.
00094 
00095    delete fTreeK;  fTreeK  = 0;
00096    delete fTreeH;  fTreeH  = 0;
00097    delete fTreeC;  fTreeC  = 0;
00098    delete fTreeR;  fTreeR  = 0;
00099    delete fTreeV0; fTreeV0 = 0;
00100    delete fTreeKK; fTreeKK = 0;
00101    delete fTreeGI; fTreeGI = 0;
00102 }
00103 
00104 //______________________________________________________________________________
00105 void TEveVSD::CreateBranches()
00106 {
00107    // Create internal VSD branches.
00108 
00109    if (fTreeK)  fTreeK ->Branch("K",  "TEveMCTrack",  &fpK);
00110    if (fTreeH)  fTreeH ->Branch("H",  "TEveHit",      &fpH);
00111    if (fTreeC)  fTreeC ->Branch("C",  "TEveCluster",  &fpC);
00112    if (fTreeR)  fTreeR ->Branch("R",  "TEveRecTrack", &fpR);
00113    if (fTreeKK) fTreeKK->Branch("KK", "TEveRecKink",  &fpKK);
00114    if (fTreeV0) fTreeV0->Branch("V0", "TEveRecV0",    &fpV0);
00115 
00116    if (fTreeGI)
00117    {
00118       fTreeGI->Branch("GI", "TEveMCRecCrossRef",  &fpGI);
00119       fTreeGI->Branch("K.", "TEveMCTrack",  &fpK);
00120       fTreeGI->Branch("R.", "TEveRecTrack", &fpR);
00121    }
00122 }
00123 
00124 //______________________________________________________________________________
00125 void TEveVSD::SetBranchAddresses()
00126 {
00127    // Set branche addresses of internal trees.
00128 
00129    if (fTreeK)  fTreeK ->SetBranchAddress("K",  &fpK);
00130    if (fTreeH)  fTreeH ->SetBranchAddress("H",  &fpH);
00131    if (fTreeC)  fTreeC ->SetBranchAddress("C",  &fpC);
00132    if (fTreeR)  fTreeR ->SetBranchAddress("R",  &fpR);
00133    if (fTreeKK) fTreeKK->SetBranchAddress("KK", &fpKK);
00134    if (fTreeV0) fTreeV0->SetBranchAddress("V0", &fpV0);
00135 
00136    if (fTreeGI)
00137    {
00138       fTreeGI->SetBranchAddress("GI", &fpGI);
00139       fTreeGI->SetBranchAddress("K.", &fpK);
00140       fTreeGI->SetBranchAddress("R.", &fpR);
00141    }
00142 }
00143 
00144 //______________________________________________________________________________
00145 void TEveVSD::WriteTrees()
00146 {
00147    // Does nothing here ... reimplemented in sub-classes.
00148 }
00149 
00150 /******************************************************************************/
00151 
00152 //______________________________________________________________________________
00153 void TEveVSD::LoadTrees()
00154 {
00155    // Load internal trees from directory.
00156 
00157    static const TEveException eH("TEveVSD::LoadTrees ");
00158 
00159    if (fDirectory == 0)
00160       throw eH + "directory not set.";
00161 
00162    fTreeK = (TTree*) fDirectory->Get("Kinematics");
00163    if (fTreeK == 0 && fVerbose) {
00164       printf("%s Kinematics not available in fDirectory %s.\n",
00165              eH.Data(), fDirectory->GetName());
00166    }
00167 
00168    fTreeH = (TTree*) fDirectory->Get("Hits");
00169    if (fTreeH == 0 && fVerbose) {
00170       printf("%s Hits not available in fDirectory %s.\n",
00171              eH.Data(), fDirectory->GetName());
00172    }
00173 
00174    fTreeC = (TTree*) fDirectory->Get("Clusters");
00175    if (fTreeC == 0 && fVerbose) {
00176       printf("%s Clusters not available in fDirectory %s.\n",
00177              eH.Data(), fDirectory->GetName());
00178    }
00179 
00180    fTreeR = (TTree*) fDirectory->Get("RecTracks");
00181    if (fTreeR == 0 && fVerbose) {
00182       printf("%s RecTracks not available in fDirectory %s.\n",
00183              eH.Data(), fDirectory->GetName());
00184    }
00185 
00186    fTreeKK =  (TTree*) fDirectory->Get("RecKinks");
00187    if (fTreeKK == 0 && fVerbose) {
00188       printf("%s Kinks not available in fDirectory %s.\n",
00189              eH.Data(), fDirectory->GetName());
00190    }
00191 
00192    fTreeV0 =  (TTree*) fDirectory->Get("RecV0s");
00193    if (fTreeV0 == 0 && fVerbose) {
00194       printf("%s V0 not available in fDirectory %s.\n",
00195              eH.Data(), fDirectory->GetName());
00196    }
00197 
00198    fTreeGI = (TTree*)fDirectory->Get("TEveMCRecCrossRef");
00199    if(fTreeGI == 0 && fVerbose) {
00200       printf("%s TEveMCRecCrossRef not available in fDirectory %s.\n",
00201              eH.Data(), fDirectory->GetName());
00202    }
00203 
00204 }
00205 
00206 /******************************************************************************/
00207 
00208 //______________________________________________________________________________
00209 void TEveVSD::DisableTObjectStreamersForVSDStruct()
00210 {
00211    // Disble TObject streamers for those VSD structs that inherit from
00212    // TObject directly.
00213 
00214    // TEveVector is not TObject
00215 
00216    // TEveMCTrack derives from TParticle
00217    TParticle::Class()->IgnoreTObjectStreamer(true);
00218 
00219    TEveHit::Class()->IgnoreTObjectStreamer(true);
00220    TEveCluster::Class()->IgnoreTObjectStreamer(true);
00221 
00222    TEveRecTrack::Class()->IgnoreTObjectStreamer(true);
00223    // TEveRecKink derives from TEveRecTrack
00224 
00225    TEveRecV0::Class()->IgnoreTObjectStreamer(true);
00226 
00227    TEveMCRecCrossRef::Class()->IgnoreTObjectStreamer(true);
00228 }

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