00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "TEveVSD.h"
00013 #include "TFile.h"
00014
00015
00016
00017
00018
00019
00020
00021
00022
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
00054 }
00055
00056
00057 TEveVSD::~TEveVSD()
00058 {
00059
00060 }
00061
00062
00063
00064
00065 void TEveVSD::SetDirectory(TDirectory* dir)
00066 {
00067
00068
00069 fDirectory = dir;
00070 }
00071
00072
00073
00074
00075 void TEveVSD::CreateTrees()
00076 {
00077
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
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
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
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
00148 }
00149
00150
00151
00152
00153 void TEveVSD::LoadTrees()
00154 {
00155
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
00212
00213
00214
00215
00216
00217 TParticle::Class()->IgnoreTObjectStreamer(true);
00218
00219 TEveHit::Class()->IgnoreTObjectStreamer(true);
00220 TEveCluster::Class()->IgnoreTObjectStreamer(true);
00221
00222 TEveRecTrack::Class()->IgnoreTObjectStreamer(true);
00223
00224
00225 TEveRecV0::Class()->IgnoreTObjectStreamer(true);
00226
00227 TEveMCRecCrossRef::Class()->IgnoreTObjectStreamer(true);
00228 }