#include <XANADOO/domain/interface/XANAEsdEvent.h>
#include <XANADOO/XANAClusters/interface/XANACluster.h>
#include <XANADOO/XANAClusters/interface/XANACaloRecHit.h>
#include <XANADOO/XANAClusters/interface/XANAEmCluster.h>
#include <XANADOO/XANAClusters/interface/XANASuperCluster.h>
#include <XANADOO/XANAClusters/interface/XANAHadCluster.h>
#include <XANADOO/XANATracks/interface/XANATrack.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeneratorEvent.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeantEvent.h>
#include <XANADOO/XANAMcInfo/interface/XANAGeneratorParticle.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronCandidate.h>
#include <XANADOO/XANAPhotonCandidate/interface/XANAPhotonCandidate.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronTrack.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronGSFTrack.h>
#include <XANADOO/XANAElectronCandidate/interface/XANAElectronSeed.h>
#include <XANADOO/XANAMuons/interface/XANAMuonCandidate.h>
#include <XANADOO/XANATriggerInfo/interface/XANATriggerInfo.h>
#include <XANADOO/XANAJets/interface/XANAJet.h>
#include <XANADOO/XANAUtilities/interface/XANAToolkit.h>
#include "TTree.h"
#include "TBits.h"
#include "TObjectTable.h"
#include "TFile.h"
#include "TBranch.h"
#include "TClonesArray.h"
#include "TObjArray.h"
#include "TH1.h"
#include "TH2.h"
#include "TSystem.h"
#include "TChain.h"
#include <string>
Include dependency graph for readESD.cpp:
Go to the source code of this file.
Functions | |
int | main (int argc, char **argv) |
|
Definition at line 39 of file readESD.cpp. References XANAGeantEvent::clear(), XANAGeneratorEvent::clear(), XANAEsdEvent::clear(), clusters, electrons, electronTracks, XANAElectronSeed::getAlgoName(), XANAElectronCandidate::getAlgoName(), XANATrack::getAlgoName(), XANAElectronCandidate::getBremClusters(), XANAElectronCandidate::getCaloIsolation(), XANATrack::getCharge(), XANATrack::getChi2OverDof(), XANAElectronCandidate::getDeltaEtaSeedClusterAtCalo(), XANAElectronCandidate::getDeltaEtaSuperClusterAtCalo(), XANAElectronCandidate::getDeltaEtaSuperClusterAtVtx(), XANAElectronCandidate::getDeltaPhiSeedClusterAtCalo(), XANAElectronCandidate::getDeltaPhiSuperClusterAtCalo(), XANAElectronCandidate::getDeltaPhiSuperClusterAtVtx(), XANAElectronTrack::getElectronCandidate(), XANAEsdEvent::getElectronCandidates(), XANAElectronTrack::getElectronSeed(), XANAElectronSeed::getElectronTrack(), XANAElectronCandidate::getElectronTrack(), XANAEsdEvent::getElectronTracks(), XANAEsdEvent::getEleTrackHits(), XANAEsdEvent::getEmClusterHits(), XANAEsdEvent::getEmClusters(), XANACluster::getEnergy(), XANASuperCluster::getEnergy(), XANAElectronCandidate::getESeedClusterOverP(), XANAElectronCandidate::getESuperClusterOverP(), XANAElectronCandidate::getEta(), XANATriggerInfo::getGlobalL1Decision(), XANATriggerInfo::getGlobalL1Response(), XANAElectronGSFTrack::getGSFMomentumAtFirstPointMode(), XANAElectronGSFTrack::getGSFMomentumAtFirstPointWeightedMean(), XANAElectronGSFTrack::getGSFMomentumAtVertexMode(), XANAElectronGSFTrack::getGSFMomentumAtVertexWeightedMean(), XANAEsdEvent::getHadClusters(), XANAElectronCandidate::getHadronicOverEm(), XANATriggerInfo::getHltDecision(), XANATriggerInfo::getHltResponse(), XANATrack::getImpactParameter(), XANATrack::getImpactParameterError(), XANAEsdEvent::getJets(), XANATrack::getLongImpactParameter(), XANATrack::getLongImpactParameterError(), XANATrack::getMomentumAtFirstPoint(), XANATrack::getMomentumAtLastPoint(), XANATrack::getMomentumAtVertex(), XANAElectronCandidate::getMomentumAtVertex(), XANAEsdEvent::getMuonCandidates(), XANAEsdEvent::getNumberOfAllTrackHits(), XANAEsdEvent::getNumberOfCaloRecHits(), XANAEsdEvent::getNumberOfElectronCandidates(), XANAEsdEvent::getNumberOfElectronTracks(), XANAEsdEvent::getNumberOfEleTrackHits(), XANAEsdEvent::getNumberOfEmClusterHits(), XANAEsdEvent::getNumberOfEmClusters(), XANAGeantEvent::getNumberOfGeantTracks(), XANAGeantEvent::getNumberOfGeantVertices(), XANAEsdEvent::getNumberOfHadClusters(), XANAElectronSeed::getNumberOfHits(), XANATrack::getNumberOfHits(), XANAEsdEvent::getNumberOfJets(), XANATrack::getNumberOfLostHits(), XANAEsdEvent::getNumberOfMuonCandidates(), XANAGeneratorEvent::getNumberOfParticles(), XANAEsdEvent::getNumberOfPhotonCandidates(), XANAGeneratorEvent::getNumberOfPileupParticles(), XANAEsdEvent::getNumberOfPreshClusters(), XANAGeneratorEvent::getNumberOfSignalParticles(), XANAGeneratorEvent::getNumberOfStablePileupParticles(), XANAGeneratorEvent::getNumberOfStableSignalParticles(), XANAEsdEvent::getNumberOfSuperClusters(), XANAEsdEvent::getNumberOfTracks(), XANAEsdEvent::getNumberOfVertexTracks(), XANAEsdEvent::getNumberOfVertices(), XANAElectronCandidate::getPhi(), XANAEsdEvent::getPhotonCandidates(), XANASuperCluster::getPosition(), XANATrack::getPositionAtFirstPoint(), XANATrack::getPositionAtLastPoint(), XANAEsdEvent::getPreshClusters(), XANASuperCluster::getPreshowerEnergy(), XANAElectronCandidate::getPt(), XANAElectronCandidate::getSeedCluster(), XANAElectronSeed::getSuperCluster(), XANAElectronTrack::getSuperCluster(), XANAElectronCandidate::getSuperCluster(), XANAElectronCandidate::getSuperClusterPosition(), XANAEsdEvent::getSuperClusters(), XANAElectronCandidate::getTrackIsolation(), XANAElectronCandidate::getTrackMomentumAtCalo(), XANAElectronCandidate::getTrackPositionAtCalo(), XANAEsdEvent::getTracks(), XANATrack::getTransImpactParameter(), XANATrack::getTransImpactParameterError(), XANAEsdEvent::getTriggerInfo(), XANATrack::getVertex(), XANAEsdEvent::getVertices(), hadClusters, hits, muons, xana::out(), preshClusters, superClusters, tracks, and vertices.
00040 { 00041 // Connect to file generated 00042 TFile *f; 00043 if (argc==1) f = new TFile("h300eemm.root"); 00044 else f = new TFile(*++argv); 00045 00046 // Read Tree named "T" in memory. Tree pointer is assigned the same name 00047 TTree *T = (TTree*)f->Get("ESD"); 00048 00049 // version TChain 00050 // TChain *T = new TChain("ESD"); 00051 // T->Add("file1.root"); 00052 // T->Add("file2.root"); 00053 00054 // example of how to suppress reading of branches 00055 // has to be put before setting the branch addresses! 00056 // T->SetBranchStatus("GeantEvent*",0); 00057 00058 // Reconstructed event 00059 XANAEsdEvent *event = new XANAEsdEvent(); 00060 T->SetBranchAddress("Event.",&event); 00061 // MC information (generator and GEANT event) 00062 XANAGeneratorEvent *generatorEvent = new XANAGeneratorEvent(); 00063 T->SetBranchAddress("GeneratorEvent.",&generatorEvent); 00064 00065 XANAGeantEvent *geantEvent = new XANAGeantEvent(); 00066 T->SetBranchAddress("GeantEvent.",&geantEvent); 00067 00068 Short_t nc = 0, nh = 0, nhc = 0, ns = 0, npc = 0, nt = 0, nv = 0, nvt = 0; 00069 Short_t ne = 0, nm=0, nelt = 0, np = 0; 00070 00071 TObjArray *clusters = 0; 00072 TObjArray *hadClusters = 0; 00073 TObjArray *superClusters = 0; 00074 TObjArray *preshClusters = 0; 00075 TRefArray *hits = 0; 00076 TObjArray *tracks = 0; 00077 TObjArray *vertices = 0; 00078 TObjArray *electrons = 0; 00079 TObjArray *photons = 0; 00080 TObjArray *electronTracks = 0; 00081 TObjArray *muons = 0; 00082 00083 Short_t mc_np = 0, mc_nsp = 0, mc_nssp = 0, mc_npp = 0, mc_nspp = 0, mc_ngt = 0, mc_ngv = 0; 00084 00085 // Start main loop on all events 00086 Int_t nb = 0; 00087 Int_t nevent = (Int_t)T->GetEntries(); 00088 xana::out(5) << "================== Total number of events: " << nevent << " ================" << endl; 00089 00090 for (Int_t i=0; i<nevent; i++) { 00091 nb += T->GetEntry(i); 00092 00093 xana::out(5) << "================ Event: " << i << " ================" << endl; 00094 00095 // Reconstructed event 00096 00097 xana::out(5) << "Reconstructed:" ; 00098 00099 nc = event->getNumberOfEmClusters(); clusters = event->getEmClusters(); 00100 nh = event->getNumberOfEmClusterHits(); hits = event->getEmClusterHits(); 00101 nhc = event->getNumberOfHadClusters(); hadClusters = event->getHadClusters(); 00102 ns = event->getNumberOfSuperClusters(); superClusters = event->getSuperClusters(); 00103 npc = event->getNumberOfPreshClusters(); preshClusters = event->getPreshClusters(); 00104 nt = event->getNumberOfTracks(); tracks = event->getTracks(); 00105 nv = event->getNumberOfVertices(); vertices = event->getVertices(); 00106 nvt = event->getNumberOfVertexTracks(); 00107 ne = event->getNumberOfElectronCandidates(); electrons = event->getElectronCandidates(); 00108 np = event->getNumberOfPhotonCandidates(); photons = event->getPhotonCandidates(); 00109 nm = event->getNumberOfMuonCandidates(); muons = event->getMuonCandidates(); 00110 nelt = event->getNumberOfElectronTracks(); 00111 electronTracks = event->getElectronTracks(); 00112 00113 XANATriggerInfo trigger(event->getTriggerInfo()); 00114 00115 cout << " clust, hits, hadClu, supers, presho, tracks, vertex, vTrack, nElec, nMuons. nPhot" << endl; 00116 printf(" \t \t %d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n", nc, nh, nhc, ns, npc, nt, nv, nvt, ne, nm, np); 00117 xana::out(5) << "Number of electron tracks: "<<nelt <<endl; 00118 00119 // electrons 00120 for (Int_t ie=0; ie<ne; ie++) { 00121 XANAElectronCandidate *elec = (XANAElectronCandidate*)((*electrons)[ie]); 00122 xana::out(5) << "New electron candidate : " << elec << endl; 00123 xana::out(5) << " 4-momentum at vertex = " << elec->getMomentumAtVertex() << endl; 00124 if (elec->getElectronTrack()->getAlgoName() == "GSF") { 00125 XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)(elec->getElectronTrack()); 00126 if (elec->getSuperCluster()) xana::out(2) << " Unscaled 4-momentum at vertex = " 00127 << elec->getMomentumAtVertex()*gsfetr->getGSFMomentumAtVertexMode().mag()/elec->getSuperCluster()->getEnergy() << endl; 00128 } else { 00129 if (elec->getSuperCluster()) xana::out(2) << " Unscaled 4-momentum at vertex = " 00130 << elec->getMomentumAtVertex()*elec->getElectronTrack()->getMomentumAtVertex().mag()/elec->getSuperCluster()->getEnergy() << endl; 00131 } 00132 xana::out(5) << " Pt at vertex = " << elec->getPt() << endl; 00133 xana::out(5) << " eta at vertex = " << elec->getEta() << endl; 00134 xana::out(5) << " phi at vertex = " << elec->getPhi() << endl; 00135 xana::out(2) << " track momentum at calo = " << elec->getTrackMomentumAtCalo() << endl; 00136 xana::out(2) << " super cluster position = " << elec->getSuperClusterPosition() << endl; 00137 xana::out(2) << " super cluster (eta,phi) = " << "("<<elec->getSuperClusterPosition().pseudoRapidity()<< 00138 ","<<elec->getSuperClusterPosition().phi()<<")"<< endl; 00139 xana::out(2) << " track position at calo = " << elec->getTrackPositionAtCalo() << endl; 00140 xana::out(2) << " Esuper/p = " << elec->getESuperClusterOverP() << endl; 00141 xana::out(2) << " Eseed/p = " << elec->getESeedClusterOverP() << endl; 00142 xana::out(2) << " deta (seed-track) at calo = " << elec->getDeltaEtaSeedClusterAtCalo() << endl; 00143 xana::out(2) << " dphi (seed-track) at calo = " << elec->getDeltaPhiSeedClusterAtCalo() << endl; 00144 xana::out(2) << " deta (super-track) at calo = " << elec->getDeltaEtaSuperClusterAtCalo() << endl; 00145 xana::out(2) << " dphi (super-track) at calo = " << elec->getDeltaPhiSuperClusterAtCalo() << endl; 00146 xana::out(2) << " deta (super-track) at vtx = " << elec->getDeltaEtaSuperClusterAtVtx() << endl; 00147 xana::out(2) << " dphi (super-track) at vtx = " << elec->getDeltaPhiSuperClusterAtVtx() << endl; 00148 xana::out(2) << " track iso = " << elec->getTrackIsolation() << endl; 00149 xana::out(2) << " calo iso = " << elec->getCaloIsolation() << endl; 00150 xana::out(2) << " had/em = " << elec->getHadronicOverEm() << endl; 00151 xana::out(2) << " algo = " << elec->getAlgoName() << endl; 00152 xana::out(2) << " constituant seed cluster : " << endl; 00153 xana::out(2) << " seed " << elec->getSeedCluster() << endl; 00154 xana::out(5) << " constituant super cluster : " << endl; 00155 xana::out(2) << " super " << elec->getSuperCluster() << endl; 00156 if (elec->getSuperCluster()) { 00157 xana::out(5) << " E = " << elec->getSuperCluster()->getEnergy() << endl ; 00158 xana::out(5) << " Epresh = " << elec->getSuperCluster()->getPreshowerEnergy() << endl ; 00159 xana::out(5) << " (x,y,z) = " << elec->getSuperCluster()->getPosition() << endl ; 00160 } 00161 xana::out(2) << " constituant brem clusters : " << endl; 00162 xana::out(2) << " brems " << elec->getBremClusters() << endl; 00163 if (elec->getBremClusters()) { 00164 for (Int_t ibr=0; ibr<elec->getBremClusters()->GetEntries(); ibr++) { 00165 XANACluster *brem = (XANACluster *)((*(elec->getBremClusters()))[ibr]); 00166 xana::out(2) << "new brem cluster with energy " << brem->getEnergy() << endl; 00167 } 00168 } 00169 xana::out(5) << " constituant electron track : " << endl; 00170 xana::out(2) << " eletk " << elec->getElectronTrack() << endl; 00171 if (elec->getElectronTrack()) { 00172 xana::out(5) << " q = " << elec->getElectronTrack()->getCharge() << endl ; 00173 xana::out(5) << " chi2 = " << elec->getElectronTrack()->getChi2OverDof() << endl ; 00174 xana::out(5) << " n hits = " << elec->getElectronTrack()->getNumberOfHits() << endl ; 00175 xana::out(2) << " lost hits = " << elec->getElectronTrack()->getNumberOfLostHits() << endl ; 00176 xana::out(2) << " long impact param = " << elec->getElectronTrack()->getLongImpactParameter() << endl ; 00177 xana::out(2) << " trans impact param = " << elec->getElectronTrack()->getTransImpactParameter() << endl ; 00178 xana::out(2) << " 3D impact param = " << elec->getElectronTrack()->getImpactParameter() << endl ; 00179 xana::out(2) << " long impact param err = " << elec->getElectronTrack()->getLongImpactParameterError() << endl ; 00180 xana::out(2) << " trans impact param err = " << elec->getElectronTrack()->getTransImpactParameterError() << endl ; 00181 xana::out(2) << " 3D impact param err = " << elec->getElectronTrack()->getImpactParameterError() << endl ; 00182 xana::out(5) << " momentum at vertex = " << elec->getElectronTrack()->getMomentumAtVertex() << endl ; 00183 xana::out(2) << " momentum at first hit = " << elec->getElectronTrack()->getMomentumAtFirstPoint() << endl ; 00184 xana::out(2) << " momentum at last hit = " << elec->getElectronTrack()->getMomentumAtLastPoint() << endl ; 00185 xana::out(2) << " position at first hit = " << elec->getElectronTrack()->getPositionAtFirstPoint() << endl ; 00186 xana::out(2) << " position at last hit = " << elec->getElectronTrack()->getPositionAtLastPoint() << endl ; 00187 xana::out(2) << " track algo = " << elec->getElectronTrack()->getAlgoName() << endl; 00188 xana::out(2) << " vertex = " << elec->getElectronTrack()->getVertex() << endl; 00189 xana::out(2) << " super = " << elec->getElectronTrack()->getSuperCluster() << endl; 00190 xana::out(2) << " elec = " << elec->getElectronTrack()->getElectronCandidate() << endl; 00191 xana::out(2) << " seed = " << elec->getElectronTrack()->getElectronSeed() << endl; 00192 if (elec->getElectronTrack()->getAlgoName() == "GSF") { 00193 xana::out(5) << " specific to gsf tracks: " << endl ; 00194 XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)(elec->getElectronTrack()); 00195 xana::out(5) << " gsf momentum at vertex average = " << gsfetr->getGSFMomentumAtVertexWeightedMean() << endl ; 00196 xana::out(5) << " gsf momentum at vertex mode = " << gsfetr->getGSFMomentumAtVertexMode() << endl ; 00197 xana::out(5) << " gsf momentum at vertex mode pt = " << gsfetr->getGSFMomentumAtVertexMode().perp() << endl ; 00198 xana::out(5) << " gsf momentum at vertex mode phi = " << gsfetr->getGSFMomentumAtVertexMode().phi() << endl ; 00199 } 00200 if (elec->getElectronTrack()->getElectronSeed()) { 00201 xana::out(2) << " seed n hits = " << elec->getElectronTrack()->getElectronSeed()->getNumberOfHits() << endl; 00202 xana::out(2) << " seed algo = " << elec->getElectronTrack()->getElectronSeed()->getAlgoName() << endl; 00203 xana::out(2) << " seed super cluster = " << elec->getElectronTrack()->getElectronSeed()->getSuperCluster() << endl; 00204 xana::out(2) << " seed electron track = " << elec->getElectronTrack()->getElectronSeed()->getElectronTrack() << endl; 00205 if (event->getEleTrackHits()) xana::out(2) << " Nr of entries for electron track hits = " << event->getEleTrackHits()->GetEntries() << endl; 00206 xana::out(2) << " Number of electron track hits = "<<event->getNumberOfEleTrackHits() << endl; 00207 } 00208 } 00209 } 00210 00211 // electron tracks 00212 for (int iet=0;iet<nelt;iet++) { 00213 XANAElectronTrack *etr = (XANAElectronTrack *)((*electronTracks)[iet]); 00214 xana::out(2) << "New electron track of type " << etr->getAlgoName() << endl; 00215 if (etr->getAlgoName() == "GSF") { 00216 XANAElectronGSFTrack *gsfetr = (XANAElectronGSFTrack *)((*electronTracks)[iet]); 00217 xana::out(2) << " gsf e track pt at first weighted mean " << gsfetr->getGSFMomentumAtFirstPointWeightedMean().perp() << endl; 00218 xana::out(2) << " gsf e track pt at first mode " << gsfetr->getGSFMomentumAtFirstPointMode().perp() << endl; 00219 xana::out(2) << " gsf e track phi at first weighted mean " << gsfetr->getGSFMomentumAtFirstPointWeightedMean().phi() << endl; 00220 xana::out(2) << " gsf e track phi at first mode " << gsfetr->getGSFMomentumAtFirstPointMode().phi() << endl; 00221 xana::out(2) << " gsf e track pt at vertex weighted mean " << gsfetr->getGSFMomentumAtVertexWeightedMean().perp() << endl; 00222 xana::out(2) << " gsf e track pt at vertex mode " << gsfetr->getGSFMomentumAtVertexMode().perp() << endl; 00223 xana::out(2) << " gsf e track phi at vertex weighted mean " << gsfetr->getGSFMomentumAtVertexWeightedMean().phi() << endl; 00224 xana::out(2) << " gsf e track phi at vertex mode " << gsfetr->getGSFMomentumAtVertexMode().phi() << endl; 00225 } 00226 } 00227 00228 // hits 00229 Short_t nchits=event->getNumberOfCaloRecHits(); 00230 Short_t ntrhits=event->getNumberOfAllTrackHits(); 00231 Short_t nelerechits=0; 00232 if (event->getEleTrackHits()) nelerechits=event->getEleTrackHits()->GetEntries(); 00233 xana::out(2) <<"CaloRecHits: " << nchits << " TrackHits: " <<ntrhits << " ElectronTrackHits: " <<nelerechits << endl; 00234 00235 // jets 00236 xana::out(5) << "Jets: " << event->getNumberOfJets() <<endl; 00237 TObjArray *a =event->getJets(); 00238 for (int i=0;i<event->getNumberOfJets();i++) { 00239 xana::out(5) <<" Jet "<< i <<" has "<<((XANAJet* )a->At(i))->getNumberOfClusters()<<" HadClusters "<<endl; 00240 } 00241 00242 // photons 00243 xana::out(5) << "Photons: " << np <<endl; 00244 TObjArray *b =event->getPhotonCandidates(); 00245 for (int i=0;i<event->getNumberOfPhotonCandidates();i++) { 00246 xana::out(5) <<" Photon "<< i <<" with Pt: "<<((XANAPhotonCandidate* )b->At(i))->getPt() 00247 <<" eta:"<<((XANAPhotonCandidate* )b->At(i))->getEta() 00248 <<" phi:"<<((XANAPhotonCandidate* )b->At(i))->getPhi()<<endl; 00249 } 00250 00251 // Monte Carlo information 00252 00253 // generator event 00254 mc_np = generatorEvent->getNumberOfParticles(); 00255 mc_nsp = generatorEvent->getNumberOfSignalParticles(); 00256 mc_nssp = generatorEvent->getNumberOfStableSignalParticles(); 00257 mc_npp = generatorEvent->getNumberOfPileupParticles(); 00258 mc_nspp = generatorEvent->getNumberOfStablePileupParticles(); 00259 00260 // GEANT event 00261 mc_ngt = geantEvent->getNumberOfGeantTracks(); 00262 mc_ngv = geantEvent->getNumberOfGeantVertices(); 00263 00264 xana::out(5) << "MC Info: "; 00265 xana::out(5) << "parti, signl, stSig, pileup, stPil, geantTr, geantVe" << endl; 00266 printf("\t %d\t %d\t%d\t%d\t%d\t%d\t%d\n", mc_np, mc_nsp, mc_nssp, mc_npp, mc_nspp, mc_ngt, mc_ngv); 00267 00268 xana::out(5) << "Trigger info: "; 00269 xana::out(5) << " level1 decision " << trigger.getGlobalL1Decision() << " hlt decision : " << trigger.getHltDecision() << endl; 00270 xana::out(2) << " Level 1 detailed response " << endl; 00271 trigger.getGlobalL1Response().Print(); 00272 xana::out(2) << " HLT detailed response " << endl; 00273 trigger.getHltResponse().Print(); 00274 00275 // gObjectTable->Print(); 00276 event->clear(); 00277 generatorEvent->clear(); 00278 geantEvent->clear(); 00279 } 00280 00281 xana::out(8) << endl; 00282 xana::out(8) << nevent << " events and " << nb << " bytes read " << endl; 00283 xana::out(8) << endl; 00284 00285 // f->Close(); 00286 00287 } |