ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Morgan/src/TotoAnalyzer.cc
Revision: 1.14
Committed: Mon Dec 1 15:58:05 2008 UTC (16 years, 5 months ago) by lethuill
Content type: text/plain
Branch: MAIN
Changes since 1.13: +40 -36 lines
Log Message:
Proto-version for use with different data formats (RECO/AOD/PAT/PAT+AOD)
Replace the absolute path /UserCode/Morgan with a relative one

File Contents

# User Rev Content
1 lethuill 1.14 #include "../interface/TotoAnalyzer.h"
2 mlethuil 1.1
3     using namespace std;
4     using namespace reco;
5     using namespace edm;
6    
7    
8     TotoAnalyzer::TotoAnalyzer(const edm::ParameterSet& iConfig)
9     {
10 lethuill 1.11 myConfig_ = iConfig.getParameter<ParameterSet>("myConfig");
11 lethuill 1.14 dataType_ = myConfig_.getUntrackedParameter<string>("dataType","unknown");
12     cout << "dataType: " << dataType_ << endl;
13     if( dataType_=="RECO" ) producersNames_ = iConfig.getParameter<ParameterSet>("producersNamesRECO");
14     else if( dataType_=="AOD" ) producersNames_ = iConfig.getParameter<ParameterSet>("producersNamesAOD");
15     else if( dataType_=="PATAOD" ) producersNames_ = iConfig.getParameter<ParameterSet>("producersNamesPATAOD");
16     else if( dataType_=="PAT" ) producersNames_ = iConfig.getParameter<ParameterSet>("producersNamesPAT");
17     else { cout << "TotoAnalyzer::TotoAnalyzer... dataType is unknown... exiting..." << endl; exit(1); }
18 mlethuil 1.1 }
19    
20    
21     TotoAnalyzer::~TotoAnalyzer()
22 lethuill 1.11 {
23     }
24 mlethuil 1.1
25    
26    
27     // ------------ method called once each job just before starting event loop ------------
28     void TotoAnalyzer::beginJob(const edm::EventSetup&)
29     {
30    
31     // Load Config parameters
32 lethuill 1.11 verbosity = myConfig_.getUntrackedParameter<int>("verbosity", 0);
33     rootFileName_ = myConfig_.getUntrackedParameter<string>("RootFileName","noname.root");
34     isCSA07Soup = myConfig_.getUntrackedParameter<bool>("isCSA07Soup",false);
35     doHLT = myConfig_.getUntrackedParameter<bool>("doHLT",false);
36     doMC = myConfig_.getUntrackedParameter<bool>("doMC",false);
37     doSignalMC = myConfig_.getUntrackedParameter<bool>("doSignalMC",false);
38     doTrack = myConfig_.getUntrackedParameter<bool>("doTrack",false);
39     doJet = myConfig_.getUntrackedParameter<bool>("doJet",false);
40     doMuon = myConfig_.getUntrackedParameter<bool>("doMuon",false);
41     doElectron = myConfig_.getUntrackedParameter<bool>("doElectron",false);
42     doPhoton = myConfig_.getUntrackedParameter<bool>("doPhoton",false);
43     doCluster = myConfig_.getUntrackedParameter<bool>("doCluster",false);
44 lethuill 1.13 doMET = myConfig_.getUntrackedParameter<bool>("doMET",false);
45 lethuill 1.11 doPhotonIsolation = myConfig_.getUntrackedParameter<bool>("doPhotonIsolation",false);
46     doPhotonConversion = myConfig_.getUntrackedParameter<bool>("doPhotonConversion",false);
47     doPhotonConversionMC = myConfig_.getUntrackedParameter<bool>("doPhotonConversionMC",false);
48 lethuill 1.13 drawMCTree = myConfig_.getUntrackedParameter<bool>("drawMCTree",false);
49 mlethuil 1.7
50 mlethuil 1.1 nTotEvt_ = 0;
51    
52     // initialize root output file
53     if(verbosity>0) cout << "New RootFile " << rootFileName_.c_str() << " is created" << endl;
54     rootFile_ = new TFile(rootFileName_.c_str(), "recreate");
55     rootFile_->cd();
56 mlethuil 1.5
57     runInfos_ = new TRootRun();
58     runTree_ = new TTree("runTree", "Global Run Infos");
59     runTree_->Branch ("runInfos", "TRootRun", &runInfos_);
60    
61 mlethuil 1.1 rootEvent = 0;
62 mlethuil 1.5 eventTree_ = new TTree("eventTree", "Event Infos");
63     eventTree_->Branch ("Event", "TRootEvent", &rootEvent);
64    
65     if(doHLT)
66     {
67 lethuill 1.13 hltAnalyzer_ = new HLTAnalyzer(producersNames_);
68 mlethuil 1.5 hltAnalyzer_->setVerbosity(verbosity);
69     }
70    
71 mlethuil 1.1 if(doSignalMC)
72     {
73     if(verbosity>0) cout << "Signal generator info will be added to rootuple" << endl;
74     rootMCSignalEvent = 0;
75     cout << "Create MuMuGamma Branch" << endl;
76 mlethuil 1.5 eventTree_->Branch ("MuMuGamma", "TRootSignalEvent", &rootMCSignalEvent);
77 mlethuil 1.1 }
78    
79     if(doMC)
80     {
81 lethuill 1.12 if(verbosity>0) cout << "MC Particles info will be added to rootuple" << endl;
82 mlethuil 1.1 mcParticles = new TClonesArray("TRootParticle", 1000);
83 mlethuil 1.5 eventTree_->Branch ("MCParticles", "TClonesArray", &mcParticles);
84 mlethuil 1.1 }
85    
86 mlethuil 1.7 if(doPhotonConversionMC)
87     {
88     if(verbosity>0) cout << "Converted MC Photons info will be added to rootuple" << endl;
89     mcPhotons = new TClonesArray("TRootMCPhoton", 1000);
90     eventTree_->Branch ("MCPhotons", "TClonesArray", &mcPhotons);
91     }
92    
93 mlethuil 1.1 if(doTrack)
94     {
95     if(verbosity>0) cout << "Tracks info will be added to rootuple" << endl;
96 mlethuil 1.4 tracks = new TClonesArray("TRootTrack", 1000);
97 mlethuil 1.5 eventTree_->Branch ("Tracks", "TClonesArray", &tracks);
98 mlethuil 1.1 }
99    
100     if(doJet)
101     {
102     if(verbosity>0) cout << "Jets info will be added to rootuple" << endl;
103     jets = new TClonesArray("TRootJet", 1000);
104 mlethuil 1.5 eventTree_->Branch ("Jets", "TClonesArray", &jets);
105 mlethuil 1.1 }
106    
107     if(doMuon)
108     {
109     if(verbosity>0) cout << "Muons info will be added to rootuple" << endl;
110     muons = new TClonesArray("TRootMuon", 1000);
111 mlethuil 1.5 eventTree_->Branch ("Muons", "TClonesArray", &muons);
112 mlethuil 1.1 }
113    
114     if(doElectron)
115     {
116     if(verbosity>0) cout << "Electrons info will be added to rootuple" << endl;
117     electrons = new TClonesArray("TRootElectron", 1000);
118 mlethuil 1.5 eventTree_->Branch ("Electrons", "TClonesArray", &electrons);
119 mlethuil 1.1 }
120    
121     if(doPhoton)
122     {
123     if(verbosity>0) cout << "Photons info will be added to rootuple" << endl;
124 lethuill 1.11 photons = new TClonesArray("TRootPhoton", 1000);
125     eventTree_->Branch ("Photons", "TClonesArray", &photons);
126 mlethuil 1.1 }
127    
128     if(doCluster)
129     {
130     if(verbosity>0) cout << "ECAL Clusters info will be added to rootuple" << endl;
131     clusters = new TClonesArray("TRootCluster", 1000);
132 mlethuil 1.5 eventTree_->Branch ("BasicClusters", "TClonesArray", &clusters);
133 mlethuil 1.1 superClusters = new TClonesArray("TRootSuperCluster", 1000);
134 mlethuil 1.5 eventTree_->Branch ("SuperClusters", "TClonesArray", &superClusters);
135 mlethuil 1.1 }
136 mlethuil 1.3
137     if(doPhotonConversion)
138     {
139     if(verbosity>0) cout << "Conversion Tracks info will be added to rootuple" << endl;
140 mlethuil 1.8 conversionTracks = new TClonesArray("TRootTrack", 1000);
141 mlethuil 1.5 eventTree_->Branch ("ConversionTracks", "TClonesArray", &conversionTracks);
142 mlethuil 1.9
143     conversionLikelihoodCalculator_ = new ConversionLikelihoodCalculator();
144 lethuill 1.11 std::string weightsString = myConfig_.getUntrackedParameter<string>("conversionLikelihoodWeightsFile","RecoEgamma/EgammaTools/data/TMVAnalysis_Likelihood.weights.txt");
145 mlethuil 1.9 edm::FileInPath weightsFile(weightsString.c_str() );
146     conversionLikelihoodCalculator_->setWeightsFile(weightsFile.fullPath().c_str());
147 lethuill 1.14 }
148 mlethuil 1.9
149 lethuill 1.14 if(doMET)
150     {
151     if(verbosity>0) cout << "MET info will be added to rootuple" << endl;
152     met = new TClonesArray("TRootMET", 1000);
153     eventTree_->Branch ("MET", "TClonesArray", &met);
154 mlethuil 1.3 }
155 lethuill 1.14
156 mlethuil 1.1 }
157    
158    
159     // ------------ method called once each job just after ending the event loop ------------
160     void TotoAnalyzer::endJob()
161     {
162 mlethuil 1.5 runTree_->Fill();
163    
164 mlethuil 1.1 std::cout << "Total number of events: " << nTotEvt_ << std::endl;
165     std::cout << "Closing rootfile " << rootFile_->GetName() << std::endl;
166     rootFile_->Write();
167     rootFile_->Close();
168 mlethuil 1.5
169     // Trigger Summary Tables
170     if(doHLT)
171     {
172     cout << "Trigger Summary Tables" << endl;
173 mlethuil 1.9 hltAnalyzer_ ->copySummary(runInfos_);
174 mlethuil 1.5 hltAnalyzer_->printStats();
175     }
176    
177 mlethuil 1.9 if(doPhotonConversion) delete conversionLikelihoodCalculator_;
178 mlethuil 1.1 }
179    
180    
181    
182     // ------------ method called to for each event ------------
183     void TotoAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
184     {
185    
186     rootFile_->cd();
187     nTotEvt_++;
188     if( (verbosity>1) || (verbosity>0 && nTotEvt_%10==0 && nTotEvt_<=100) || (verbosity>0 && nTotEvt_%100==0 && nTotEvt_>100) )
189 lethuill 1.10 cout << endl << endl
190     << "####### TotoAnalyzer - Cumulated Events " << nTotEvt_
191     << " - Run " << iEvent.id().run()
192     << " - Event " << iEvent.id().event()
193     << " #######" << endl;
194    
195 mlethuil 1.1 // Global Event Infos
196     rootEvent = new TRootEvent();
197     rootEvent->setNb(nTotEvt_);
198    
199 lethuill 1.11 /*
200 mlethuil 1.6 // CSA07 Process Id and Event Weight
201     if(isCSA07Soup)
202     {
203     edm::Handle< double> weightHandle;
204     iEvent.getByLabel ("csaweightproducer","weight", weightHandle);
205     double weight = * weightHandle;
206     int processId = csa07::csa07ProcessId(iEvent, 1000., "csaweightproducer");
207     char * pname= csa07::csa07ProcessName(processId);
208     if(verbosity>1) cout << "CSA07 Soup - id=" << processId << " - "<< pname << " - weight=" << weight << endl;
209     rootEvent->setCsa07id(processId);
210     rootEvent->setCsa07weight(weight);
211     rootEvent->setCsa07process(pname);
212     }
213 lethuill 1.13 */
214 mlethuil 1.5
215 mlethuil 1.6
216 mlethuil 1.5 // Trigger
217 lethuill 1.13 rootEvent->setGlobalHLT(true);
218 mlethuil 1.5 if(doHLT)
219     {
220 lethuill 1.13 cout << endl << "Get TriggerResults..." << endl;
221 mlethuil 1.5 if (nTotEvt_==1) hltAnalyzer_->init(iEvent, rootEvent);
222     hltAnalyzer_->process(iEvent, rootEvent);
223     }
224 lethuill 1.10 //if ( ! rootEvent->passGlobalHLT() ) return;
225 mlethuil 1.5
226    
227 mlethuil 1.1 // MC Info
228     if(doMC)
229     {
230 lethuill 1.13 if(verbosity>1) cout << endl << "Analysing MC info..." << endl;
231     MCAnalyzer* myMCAnalyzer = new MCAnalyzer(myConfig_, producersNames_);
232     myMCAnalyzer->SetVerbosity(verbosity);
233     if (drawMCTree) myMCAnalyzer->DrawMCTree(iEvent, iSetup, myConfig_, producersNames_);
234     myMCAnalyzer->ProcessStableParticle(iEvent, mcParticles);
235 lethuill 1.14 if (doSignalMC)
236     {
237     rootMCSignalEvent = new TRootSignalEvent();
238     myMCAnalyzer->ProcessMuMuGammaEvent(iEvent, rootMCSignalEvent);
239     }
240 lethuill 1.13 if (doPhotonConversionMC) myMCAnalyzer->ProcessConvertedPhoton(iEvent, mcPhotons);
241 mlethuil 1.1 delete myMCAnalyzer;
242     }
243 lethuill 1.12
244 mlethuil 1.1
245     // Get Primary Vertices
246 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing primary vertices collection..." << endl;
247 lethuill 1.13 VertexAnalyzer* myVertexAnalyzer = new VertexAnalyzer(producersNames_, verbosity);
248 lethuill 1.14 //myVertexAnalyzer->Process(iEvent, rootEvent);
249 lethuill 1.13 delete myVertexAnalyzer;
250 mlethuil 1.1
251 lethuill 1.11
252 mlethuil 1.1 // Tracks
253     if(doTrack)
254     {
255 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing tracks collection..." << endl;
256 lethuill 1.13 TrackAnalyzer* myTrackAnalyzer = new TrackAnalyzer(producersNames_, verbosity);
257     myTrackAnalyzer->Process(iEvent, tracks);
258     delete myTrackAnalyzer;
259 mlethuil 1.1 }
260    
261 lethuill 1.11
262 mlethuil 1.1 // Calo Jet
263     if(doJet)
264     {
265 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing jets collection..." << endl;
266 lethuill 1.13 JetAnalyzer* myJetAnalyzer = new JetAnalyzer(producersNames_, verbosity);
267     myJetAnalyzer->Process(iEvent, jets);
268     delete myJetAnalyzer;
269 mlethuil 1.1 }
270    
271    
272     // Muons
273     if(doMuon)
274     {
275 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing muons collection..." << endl;
276 lethuill 1.13 MuonAnalyzer* myMuonAnalyzer = new MuonAnalyzer(producersNames_, verbosity);
277     myMuonAnalyzer->Process(iEvent, muons);
278     delete myMuonAnalyzer;
279 mlethuil 1.1 }
280 lethuill 1.14
281 mlethuil 1.1
282 lethuill 1.14 // Lazy Tools to calculate Cluster shape variables
283     EcalClusterLazyTools* lazyTools = 0;
284     if( dataType_=="RECO" || dataType_=="AOD" || dataType_=="PATAOD" )
285     {
286     if(verbosity>1) cout << endl << "Loading egamma LazyTools..." << endl;
287     edm::InputTag reducedBarrelEcalRecHitCollection_ = producersNames_.getParameter<edm::InputTag>("reducedBarrelEcalRecHitCollection");
288     edm::InputTag reducedEndcapEcalRecHitCollection_ = producersNames_.getParameter<edm::InputTag>("reducedEndcapEcalRecHitCollection");
289     lazyTools = new EcalClusterLazyTools( iEvent, iSetup, reducedBarrelEcalRecHitCollection_, reducedEndcapEcalRecHitCollection_ );
290     }
291 mlethuil 1.1
292     // Electrons
293     if(doElectron)
294     {
295 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing electrons collection..." << endl;
296 lethuill 1.13 ElectronAnalyzer* myElectronAnalyzer = new ElectronAnalyzer(producersNames_, verbosity);
297 lethuill 1.14 myElectronAnalyzer->Process(iEvent, electrons, *lazyTools);
298 lethuill 1.13 delete myElectronAnalyzer;
299 mlethuil 1.1 }
300    
301 lethuill 1.11
302 mlethuil 1.1 // Photons
303     if(doPhoton)
304     {
305 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing photons collection..." << endl;
306     bool doPhotonVertexCorrection = false;
307 lethuill 1.13 PhotonAnalyzer* myPhotonAnalyzer = new PhotonAnalyzer(producersNames_, verbosity, doPhotonConversion, doPhotonVertexCorrection);
308 lethuill 1.11 std::string photonProducer = producersNames_.getParameter<string>("photonProducer");
309 lethuill 1.14 myPhotonAnalyzer->Process(iEvent, iSetup, rootEvent, photons, photonProducer, conversionTracks, conversionLikelihoodCalculator_, *lazyTools);
310 mlethuil 1.1 delete myPhotonAnalyzer;
311     }
312 lethuill 1.11
313    
314 mlethuil 1.1 // Ecal Clusters
315     if(doCluster)
316     {
317 lethuill 1.11 if(verbosity>1) cout << endl << "Analysing BasicClusters collection..." << endl;
318 lethuill 1.13 ClusterAnalyzer* myClusterAnalyzer = new ClusterAnalyzer();
319 mlethuil 1.1 myClusterAnalyzer->SetVerbosity(verbosity);
320 lethuill 1.14 myClusterAnalyzer->Process(iEvent, rootEvent, *lazyTools, clusters, "hybridSuperClusters","hybridBarrelBasicClusters", 110);
321     myClusterAnalyzer->Process(iEvent, rootEvent, *lazyTools, clusters, "multi5x5BasicClusters", "multi5x5EndcapBasicClusters", 320);
322 mlethuil 1.1 delete myClusterAnalyzer;
323 lethuill 1.11
324     if(verbosity>1) cout << endl << "Analysing SuperClusters collection..." << endl;
325 lethuill 1.13 SuperClusterAnalyzer* mySClusterAnalyzer = new SuperClusterAnalyzer();
326 mlethuil 1.1 mySClusterAnalyzer->SetVerbosity(verbosity);
327     mySClusterAnalyzer->Process(iEvent, rootEvent, superClusters, "hybridSuperClusters","",210);
328     mySClusterAnalyzer->Process(iEvent, rootEvent, superClusters, "correctedHybridSuperClusters","",211);
329 lethuill 1.11 mySClusterAnalyzer->Process(iEvent, rootEvent, superClusters, "multi5x5SuperClusters","multi5x5EndcapSuperClusters",320);
330     mySClusterAnalyzer->Process(iEvent, rootEvent, superClusters, "multi5x5SuperClustersWithPreshower","",323);
331     mySClusterAnalyzer->Process(iEvent, rootEvent, superClusters, "correctedMulti5x5SuperClustersWithPreshower","",322);
332 mlethuil 1.1 delete mySClusterAnalyzer;
333     }
334    
335    
336     if(doCluster)
337     {
338     ClusterAssociator* myClusterAssociator = new ClusterAssociator();
339     myClusterAssociator->SetVerbosity(verbosity);
340     myClusterAssociator->Process(superClusters, clusters);
341     //myClusterAssociator->PrintSuperClusters(superClusters, clusters,0); // 0 to print all types SC
342     delete myClusterAssociator;
343     }
344 lethuill 1.11
345    
346 mlethuil 1.1 if(doPhoton && doCluster)
347     {
348     PhotonAssociator* myPhotonAssociator = new PhotonAssociator();
349     myPhotonAssociator->SetVerbosity(verbosity);
350 lethuill 1.11 myPhotonAssociator->AssociateSuperCluster(photons, superClusters);
351     // Obsolete... converted photon now contained in reco::Photon object. Done in PhotonAnalyzer
352     //if(doPhotonConversion) myPhotonAssociator->AssociateConversion(iEvent, photons, superClusters, conversionTracks, conversionLikelihoodCalculator_);
353 mlethuil 1.1 delete myPhotonAssociator;
354     }
355    
356    
357 lethuill 1.11 if(doPhoton && doPhotonIsolation)
358 mlethuil 1.1 {
359 lethuill 1.11 if(verbosity>1) cout << endl << "Calculating Photon isolation..." << endl;
360 mlethuil 1.1
361     Float_t ecalIslandIsolation;
362     Float_t ecalDoubleConeIsolation;
363     Float_t hcalRecHitIsolation;
364 mlethuil 1.4 Float_t isoTracks;
365     Int_t isoNTracks;
366     TRootPhoton* localPhoton;
367    
368 lethuill 1.11 PhotonIsolator* myPhotonIsolator = new PhotonIsolator(&myConfig_, &producersNames_);
369     for (int iphoton=0; iphoton<photons->GetEntriesFast(); iphoton++)
370 mlethuil 1.1 {
371 lethuill 1.11 localPhoton = (TRootPhoton*)photons->At(iphoton);
372 mlethuil 1.4
373 mlethuil 1.1 ecalIslandIsolation=-1.;
374 mlethuil 1.4 if (doCluster) ecalIslandIsolation = myPhotonIsolator->EcalIslandIsolation(localPhoton, superClusters, clusters);
375    
376 mlethuil 1.1 ecalDoubleConeIsolation=-1.;
377 mlethuil 1.4 if (doCluster) ecalDoubleConeIsolation = myPhotonIsolator->EcalDoubleConeIsolation(localPhoton, superClusters, clusters);
378    
379     hcalRecHitIsolation=-1.;
380 lethuill 1.11 //FIXME - Test HCAL rechits availability - LoadHcalRecHits() returning bool
381     myPhotonIsolator->LoadHcalRecHits(iEvent, iSetup);
382     hcalRecHitIsolation = myPhotonIsolator->HcalRecHitIsolation(localPhoton);
383 mlethuil 1.4
384     isoTracks=-1.;
385     isoNTracks=-1;
386     if(doTrack) isoTracks = myPhotonIsolator->TrackerIsolation(localPhoton, tracks, isoNTracks);
387    
388     localPhoton->setIsolation(ecalIslandIsolation, ecalDoubleConeIsolation, hcalRecHitIsolation, isoTracks, isoNTracks);
389 lethuill 1.11 if(verbosity>4) cout << " After isolation - ["<< setw(3) << iphoton << "] " << *localPhoton << endl;
390 mlethuil 1.1 }
391     delete myPhotonIsolator;
392     }
393    
394 lethuill 1.11 // Print Photons / SuperClusters / BasicClusters arborescence
395     if(doPhoton)
396     {
397     PhotonAssociator* myPhotonAssociator = new PhotonAssociator();
398     if(verbosity>2) myPhotonAssociator->FullPrintPhotons(photons,superClusters,clusters,0);
399     delete myPhotonAssociator;
400     }
401 lethuill 1.13
402    
403     // MET
404     if(doMET)
405     {
406     if(verbosity>1) cout << endl << "Analysing Missing Et..." << endl;
407     METAnalyzer* myMETAnalyzer = new METAnalyzer(producersNames_, verbosity);
408 lethuill 1.14 myMETAnalyzer->Process(iEvent, met);
409 lethuill 1.13 delete myMETAnalyzer;
410     }
411 mlethuil 1.1
412    
413 lethuill 1.11 if(verbosity>1) cout << endl << "Filling rootuple..." << endl;
414 mlethuil 1.5 eventTree_->Fill();
415 lethuill 1.11 if(verbosity>1) cout << endl << "Deleting objects..." << endl;
416 mlethuil 1.1 delete rootEvent;
417 lethuill 1.14 if(doSignalMC) delete rootMCSignalEvent;
418 lethuill 1.12 if(doMC) (*mcParticles).Delete();
419 lethuill 1.14 if(doPhotonConversionMC) (*mcPhotons).Delete();
420 mlethuil 1.1 if(doTrack) (*tracks).Delete();
421     if(doJet) (*jets).Delete();
422     if(doMuon) (*muons).Delete();
423     if(doElectron) (*electrons).Delete();
424 lethuill 1.11 if(doPhoton) (*photons).Delete();
425 mlethuil 1.1 if(doCluster) (*clusters).Delete();
426     if(doCluster) (*superClusters).Delete();
427 lethuill 1.14 if(doPhotonConversion) (*conversionTracks).Delete();
428     if(doMET) (*met).Delete();
429 lethuill 1.11 if(verbosity>0) cout << endl;
430 mlethuil 1.1 }
431