source: trunk/examples/advanced/hadrontherapy/src/HadrontherapyAnalysisManager.cc@ 1302

Last change on this file since 1302 was 1230, checked in by garnier, 16 years ago

update to geant4.9.3

File size: 19.5 KB
RevLine 
[807]1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
[1230]26// $Id: HadrontherapyAnalisysManager.cc;
27// See more at: http://g4advancedexamples.lngs.infn.it/Examples/hadrontherapy
[807]28
29#include "HadrontherapyAnalysisManager.hh"
[1230]30#include "HadrontherapyMatrix.hh"
31#include "HadrontherapyAnalysisFileMessenger.hh"
32#include <time.h>
33#ifdef ANALYSIS_USE
[807]34HadrontherapyAnalysisManager* HadrontherapyAnalysisManager::instance = 0;
35
[1230]36#ifdef G4ANALYSIS_USE_ROOT
37#undef G4ANALYSIS_USE
38#endif
39
40/////////////////////////////////////////////////////////////////////////////
41
42#ifdef G4ANALYSIS_USE
43HadrontherapyAnalysisManager::HadrontherapyAnalysisManager() :
44 analysisFileName("DoseDistribution.root"), aFact(0), theTree(0), histFact(0), tupFact(0), h1(0), h2(0), h3(0),
45 h4(0), h5(0), h6(0), h7(0), h8(0), h9(0), h10(0), h11(0), h12(0), h13(0), h14(0), h15(0), h16(0), ntuple(0),
46 ionTuple(0),
47 fragmentTuple(0),
48 eventCounter(0)
49{
50 fMess = new HadrontherapyAnalysisFileMessenger(this);
[807]51}
[1230]52#endif
53#ifdef G4ANALYSIS_USE_ROOT
54HadrontherapyAnalysisManager::HadrontherapyAnalysisManager() :
55 analysisFileName("DoseDistribution.root"),theTFile(0), histo1(0), histo2(0), histo3(0),
56 histo4(0), histo5(0), histo6(0), histo7(0), histo8(0), histo9(0), histo10(0), histo11(0), histo12(0), histo13(0), histo14(0), histo15(0), histo16(0),
57 theROOTNtuple(0),
58 theROOTIonTuple(0),
59 fragmentNtuple(0),
60 metaData(0),
61 eventCounter(0)
62{
63 fMess = new HadrontherapyAnalysisFileMessenger(this);
64}
65#endif
66/////////////////////////////////////////////////////////////////////////////
67HadrontherapyAnalysisManager::~HadrontherapyAnalysisManager()
68{
69delete(fMess); //kill the messenger
70#ifdef G4ANALYSIS_USE
71 delete fragmentTuple;
72 fragmentTuple = 0;
[807]73
74 delete ionTuple;
75 ionTuple = 0;
[1230]76
[807]77 delete ntuple;
78 ntuple = 0;
79
[1230]80 delete h16;
81 h16 = 0;
82
83 delete h15;
84 h15 = 0;
85
[807]86 delete h14;
87 h14 = 0;
88
89 delete h13;
90 h13 = 0;
91
92 delete h12;
93 h12 = 0;
94
95 delete h11;
96 h11 = 0;
97
98 delete h10;
99 h10 = 0;
100
101 delete h9;
102 h9 = 0;
103
104 delete h8;
105 h8 = 0;
106
107 delete h7;
108 h7 = 0;
109
110 delete h6;
111 h6 = 0;
112
113 delete h5;
114 h5 = 0;
115
116 delete h4;
117 h4 = 0;
118
119 delete h3;
120 h3 = 0;
121
122 delete h2;
123 h2 = 0;
124
125 delete h1;
126 h1 = 0;
[1230]127
[807]128 delete tupFact;
129 tupFact = 0;
130
131 delete histFact;
132 histFact = 0;
133
134 delete theTree;
135 theTree = 0;
136
137 delete aFact;
138 aFact = 0;
[1230]139#endif
140#ifdef G4ANALYSIS_USE_ROOT
141 delete metaData;
142 metaData = 0;
143
144 delete fragmentNtuple;
145 fragmentNtuple = 0;
146
147 delete theROOTIonTuple;
148 theROOTIonTuple = 0;
149
150 delete theROOTNtuple;
151 theROOTNtuple = 0;
152
153 delete histo16;
154 histo14 = 0;
155
156 delete histo15;
157 histo14 = 0;
158
159 delete histo14;
160 histo14 = 0;
161
162 delete histo13;
163 histo13 = 0;
164
165 delete histo12;
166 histo12 = 0;
167
168 delete histo11;
169 histo11 = 0;
170
171 delete histo10;
172 histo10 = 0;
173
174 delete histo9;
175 histo9 = 0;
176
177 delete histo8;
178 histo8 = 0;
179
180 delete histo7;
181 histo7 = 0;
182
183 delete histo6;
184 histo6 = 0;
185
186 delete histo5;
187 histo5 = 0;
188
189 delete histo4;
190 histo4 = 0;
191
192 delete histo3;
193 histo3 = 0;
194
195 delete histo2;
196 histo2 = 0;
197
198 delete histo1;
199 histo1 = 0;
200#endif
[807]201}
[1230]202/////////////////////////////////////////////////////////////////////////////
[807]203HadrontherapyAnalysisManager* HadrontherapyAnalysisManager::getInstance()
204{
205 if (instance == 0) instance = new HadrontherapyAnalysisManager;
206 return instance;
207}
208
[1230]209/////////////////////////////////////////////////////////////////////////////
210void HadrontherapyAnalysisManager::SetAnalysisFileName(G4String aFileName)
[807]211{
[1230]212 this->analysisFileName = aFileName;
213}
214
215/////////////////////////////////////////////////////////////////////////////
216void HadrontherapyAnalysisManager::book()
217{
218#ifdef G4ANALYSIS_USE
[807]219 // Build up the analysis factory
220 aFact = AIDA_createAnalysisFactory();
221 AIDA::ITreeFactory* treeFact = aFact -> createTreeFactory();
222
[1230]223 // Create the .hbk or the .root file
224 G4String fileName = "DoseDistribution.hbk";
225
226 std::string opts = "export=root";
227
[807]228 theTree = treeFact -> create(fileName,"hbook",false,true);
[1230]229 theTree = treeFact -> create(analysisFileName,"ROOT",false,true,opts);
230
231 // Factories are not "managed" by an AIDA analysis system.
232 // They must be deleted by the AIDA user code.
[807]233 delete treeFact;
234
235 // Create the histogram and the ntuple factory
236 histFact = aFact -> createHistogramFactory(*theTree);
237 tupFact = aFact -> createTupleFactory(*theTree);
238
239 // Create the histograms with the enrgy deposit along the X axis
[1230]240 h1 = histFact -> createHistogram1D("10","slice, energy", 400, 0., 400. );
[807]241
[1230]242 h2 = histFact -> createHistogram1D("20","Secondary protons - slice, energy", 400, 0., 400. );
[807]243
[1230]244 h3 = histFact -> createHistogram1D("30","Secondary neutrons - slice, energy", 400, 0., 400. );
[807]245
[1230]246 h4 = histFact -> createHistogram1D("40","Secondary alpha - slice, energy", 400, 0., 400. );
[807]247
[1230]248 h5 = histFact -> createHistogram1D("50","Secondary gamma - slice, energy", 400, 0., 400. );
[807]249
[1230]250 h6 = histFact -> createHistogram1D("60","Secondary electron - slice, energy", 400, 0., 400. );
[807]251
[1230]252 h7 = histFact -> createHistogram1D("70","Secondary triton - slice, energy", 400, 0., 400. );
[807]253
[1230]254 h8 = histFact -> createHistogram1D("80","Secondary deuteron - slice, energy", 400, 0., 400. );
255
256 h9 = histFact -> createHistogram1D("90","Secondary pion - slice, energy", 400, 0., 400. );
257
[807]258 h10 = histFact -> createHistogram1D("100","Energy distribution of secondary electrons", 70, 0., 70. );
[1230]259
[807]260 h11 = histFact -> createHistogram1D("110","Energy distribution of secondary photons", 70, 0., 70. );
261
262 h12 = histFact -> createHistogram1D("120","Energy distribution of secondary deuterons", 70, 0., 70. );
[1230]263
[807]264 h13 = histFact -> createHistogram1D("130","Energy distribution of secondary tritons", 70, 0., 70. );
265
266 h14 = histFact -> createHistogram1D("140","Energy distribution of secondary alpha particles", 70, 0., 70. );
267
[1230]268 h15 = histFact -> createHistogram1D("150","Energy distribution of helium fragments after the phantom", 70, 0., 500.);
269
270 h16 = histFact -> createHistogram1D("160","Energy distribution of hydrogen fragments after the phantom", 70, 0., 500.);
271
[807]272 // Create the ntuple
273 G4String columnNames = "int i; int j; int k; double energy;";
274 G4String options = "";
275 if (tupFact) ntuple = tupFact -> create("1","1",columnNames, options);
276
277 // Create the ntuple
278 G4String columnNames2 = "int a; double z; int occupancy; double energy;";
279 G4String options2 = "";
280 if (tupFact) ionTuple = tupFact -> create("2","2", columnNames2, options2);
[1230]281
282 // Create the fragment ntuple
283 G4String columnNames3 = "int a; double z; double energy; double posX; double posY; double posZ;";
284 G4String options3 = "";
285 if (tupFact) fragmentTuple = tupFact -> create("3","3", columnNames3, options3);
286#endif
287#ifdef G4ANALYSIS_USE_ROOT
288 // Use ROOT
289 theTFile = new TFile(analysisFileName, "RECREATE");
290
291 // Create the histograms with the energy deposit along the X axis
292 histo1 = createHistogram1D("braggPeak","slice, energy", 400, 0., 27.9); //<different waterthicknesses are accoutned for in ROOT-analysis stage
293 histo2 = createHistogram1D("h20","Secondary protons - slice, energy", 400, 0., 400.);
294 histo3 = createHistogram1D("h30","Secondary neutrons - slice, energy", 400, 0., 400.);
295 histo4 = createHistogram1D("h40","Secondary alpha - slice, energy", 400, 0., 400.);
296 histo5 = createHistogram1D("h50","Secondary gamma - slice, energy", 400, 0., 400.);
297 histo6 = createHistogram1D("h60","Secondary electron - slice, energy", 400, 0., 400.);
298 histo7 = createHistogram1D("h70","Secondary triton - slice, energy", 400, 0., 400.);
299 histo8 = createHistogram1D("h80","Secondary deuteron - slice, energy", 400, 0., 400.);
300 histo9 = createHistogram1D("h90","Secondary pion - slice, energy", 400, 0., 400.);
301 histo10 = createHistogram1D("h100","Energy distribution of secondary electrons", 70, 0., 70.);
302 histo11 = createHistogram1D("h110","Energy distribution of secondary photons", 70, 0., 70.);
303 histo12 = createHistogram1D("h120","Energy distribution of secondary deuterons", 70, 0., 70.);
304 histo13 = createHistogram1D("h130","Energy distribution of secondary tritons", 70, 0., 70.);
305 histo14 = createHistogram1D("h140","Energy distribution of secondary alpha particles", 70, 0., 70.);
306 histo15 = createHistogram1D("heliumEnergyAfterPhantom","Energy distribution of secondary helium fragments after the phantom",
307 70, 0., 500.);
308 histo16 = createHistogram1D("hydrogenEnergyAfterPhantom","Energy distribution of secondary helium fragments after the phantom",
309 70, 0., 500.);
310
311 theROOTNtuple = new TNtuple("theROOTNtuple", "Energy deposit by slice", "i:j:k:energy");
312 theROOTIonTuple = new TNtuple("theROOTIonTuple", "Generic ion information", "a:z:occupancy:energy");
313 fragmentNtuple = new TNtuple("fragmentNtuple", "Fragments", "A:Z:energy:posX:posY:posZ");
314 metaData = new TNtuple("metaData", "Metadata", "events:detectorDistance:waterThickness:beamEnergy:energyError:phantomCenterDistance");
315#endif
[807]316}
317
[1230]318/////////////////////////////////////////////////////////////////////////////
319void HadrontherapyAnalysisManager::FillEnergyDeposit(G4int i,
320 G4int j,
[807]321 G4int k,
322 G4double energy)
323{
[1230]324#ifdef G4ANALYSIS_USE
[807]325 if (ntuple) {
326 G4int iSlice = ntuple -> findColumn("i");
327 G4int jSlice = ntuple -> findColumn("j");
328 G4int kSlice = ntuple -> findColumn("k");
329 G4int iEnergy = ntuple -> findColumn("energy");
[1230]330
[807]331 ntuple -> fill(iSlice,i);
[1230]332 ntuple -> fill(jSlice,j);
[807]333 ntuple -> fill(kSlice,k);
334 ntuple -> fill(iEnergy, energy); }
335
[1230]336 ntuple -> addRow();
337#endif
338#ifdef G4ANALYSIS_USE_ROOT
339 if (theROOTNtuple) {
340 theROOTNtuple->Fill(i, j, k, energy);
341 }
342#endif
[807]343}
344
[1230]345/////////////////////////////////////////////////////////////////////////////
[807]346void HadrontherapyAnalysisManager::BraggPeak(G4int slice, G4double energy)
347{
[1230]348#ifdef G4ANALYSIS_USE
[807]349 h1 -> fill(slice,energy);
[1230]350#endif
351#ifdef G4ANALYSIS_USE_ROOT
352 histo1->SetBinContent(slice, energy); //This uses setbincontent instead of fill to get labels correct
353#endif
[807]354}
355
[1230]356/////////////////////////////////////////////////////////////////////////////
[807]357void HadrontherapyAnalysisManager::SecondaryProtonEnergyDeposit(G4int slice, G4double energy)
358{
[1230]359#ifdef G4ANALYSIS_USE
[807]360 h2 -> fill(slice,energy);
[1230]361#endif
362#ifdef G4ANALYSIS_USE_ROOT
363 histo2->Fill(slice, energy);
364#endif
[807]365}
366
[1230]367/////////////////////////////////////////////////////////////////////////////
[807]368void HadrontherapyAnalysisManager::SecondaryNeutronEnergyDeposit(G4int slice, G4double energy)
369{
[1230]370#ifdef G4ANALYSIS_USE
[807]371 h3 -> fill(slice,energy);
[1230]372#endif
373#ifdef G4ANALYSIS_USE_ROOT
374 histo3->Fill(slice, energy);
375#endif
[807]376}
377
[1230]378/////////////////////////////////////////////////////////////////////////////
[807]379void HadrontherapyAnalysisManager::SecondaryAlphaEnergyDeposit(G4int slice, G4double energy)
380{
[1230]381#ifdef G4ANALYSIS_USE
[807]382 h4 -> fill(slice,energy);
[1230]383#endif
384#ifdef G4ANALYSIS_USE_ROOT
385 histo4->Fill(slice, energy);
386#endif
[807]387}
388
[1230]389/////////////////////////////////////////////////////////////////////////////
[807]390void HadrontherapyAnalysisManager::SecondaryGammaEnergyDeposit(G4int slice, G4double energy)
391{
[1230]392#ifdef G4ANALYSIS_USE
[807]393 h5 -> fill(slice,energy);
[1230]394#endif
395#ifdef G4ANALYSIS_USE_ROOT
396 histo5->Fill(slice, energy);
397#endif
[807]398}
399
[1230]400/////////////////////////////////////////////////////////////////////////////
[807]401void HadrontherapyAnalysisManager::SecondaryElectronEnergyDeposit(G4int slice, G4double energy)
402{
[1230]403#ifdef G4ANALYSIS_USE
[807]404 h6 -> fill(slice,energy);
[1230]405#endif
406#ifdef G4ANALYSIS_USE_ROOT
407 histo6->Fill(slice, energy);
408#endif
[807]409}
410
[1230]411/////////////////////////////////////////////////////////////////////////////
[807]412void HadrontherapyAnalysisManager::SecondaryTritonEnergyDeposit(G4int slice, G4double energy)
413{
[1230]414#ifdef G4ANALYSIS_USE
[807]415 h7 -> fill(slice,energy);
[1230]416#endif
417#ifdef G4ANALYSIS_USE_ROOT
418 histo7->Fill(slice, energy);
419#endif
[807]420}
421
[1230]422/////////////////////////////////////////////////////////////////////////////
[807]423void HadrontherapyAnalysisManager::SecondaryDeuteronEnergyDeposit(G4int slice, G4double energy)
424{
[1230]425#ifdef G4ANALYSIS_USE
[807]426 h8 -> fill(slice,energy);
[1230]427#endif
428#ifdef G4ANALYSIS_USE_ROOT
429 histo8->Fill(slice, energy);
430#endif
[807]431}
432
[1230]433/////////////////////////////////////////////////////////////////////////////
[807]434void HadrontherapyAnalysisManager::SecondaryPionEnergyDeposit(G4int slice, G4double energy)
435{
[1230]436#ifdef G4ANALYSIS_USE
[807]437 h9 -> fill(slice,energy);
[1230]438#endif
439#ifdef G4ANALYSIS_USE_ROOT
440 histo9->Fill(slice, energy);
441#endif
[807]442}
443
[1230]444/////////////////////////////////////////////////////////////////////////////
[807]445void HadrontherapyAnalysisManager::electronEnergyDistribution(G4double energy)
446{
[1230]447#ifdef G4ANALYSIS_USE
[807]448 h10 -> fill(energy);
[1230]449#endif
450#ifdef G4ANALYSIS_USE_ROOT
451 histo10->Fill(energy);
452#endif
[807]453}
454
[1230]455/////////////////////////////////////////////////////////////////////////////
[807]456void HadrontherapyAnalysisManager::gammaEnergyDistribution(G4double energy)
457{
[1230]458#ifdef G4ANALYSIS_USE
[807]459 h11 -> fill(energy);
[1230]460#endif
461#ifdef G4ANALYSIS_USE_ROOT
462 histo11->Fill(energy);
463#endif
[807]464}
465
[1230]466/////////////////////////////////////////////////////////////////////////////
[807]467void HadrontherapyAnalysisManager::deuteronEnergyDistribution(G4double energy)
468{
[1230]469#ifdef G4ANALYSIS_USE
[807]470 h12 -> fill(energy);
[1230]471#endif
472#ifdef G4ANALYSIS_USE_ROOT
473 histo12->Fill(energy);
474#endif
[807]475}
476
[1230]477/////////////////////////////////////////////////////////////////////////////
[807]478void HadrontherapyAnalysisManager::tritonEnergyDistribution(G4double energy)
479{
[1230]480#ifdef G4ANALYSIS_USE
[807]481 h13 -> fill(energy);
[1230]482#endif
483#ifdef G4ANALYSIS_USE_ROOT
484 histo13->Fill(energy);
485#endif
[807]486}
487
[1230]488/////////////////////////////////////////////////////////////////////////////
[807]489void HadrontherapyAnalysisManager::alphaEnergyDistribution(G4double energy)
490{
[1230]491#ifdef G4ANALYSIS_USE
[807]492 h14 -> fill(energy);
[1230]493#endif
494#ifdef G4ANALYSIS_USE_ROOT
495 histo14->Fill(energy);
496#endif
[807]497}
[1230]498/////////////////////////////////////////////////////////////////////////////
499void HadrontherapyAnalysisManager::heliumEnergy(G4double secondaryParticleKineticEnergy)
500{
501#ifdef G4ANALYSIS_USE
502 h15->fill(secondaryParticleKineticEnergy);
503#endif
504#ifdef G4ANALYSIS_USE_ROOT
505 histo15->Fill(secondaryParticleKineticEnergy);
506#endif
507}
[807]508
[1230]509/////////////////////////////////////////////////////////////////////////////
510void HadrontherapyAnalysisManager::hydrogenEnergy(G4double secondaryParticleKineticEnergy)
511{
512#ifdef G4ANALYSIS_USE
513 h16->fill(secondaryParticleKineticEnergy);
514#endif
515#ifdef G4ANALYSIS_USE_ROOT
516 histo16->Fill(secondaryParticleKineticEnergy);
517#endif
518}
519
520
521
522void HadrontherapyAnalysisManager::fillFragmentTuple(G4int A, G4double Z, G4double energy, G4double posX, G4double posY, G4double posZ)
523{
524#ifdef G4ANALYSIS_USE
525 if (fragmentTuple) {
526 G4int aIndex = fragmentTuple -> findColumn("a");
527 G4int zIndex = fragmentTuple -> findColumn("z");
528 G4int energyIndex = fragmentTuple -> findColumn("energy");
529 G4int posXIndex = fragmentTuple -> findColumn("posX");
530 G4int posYIndex = fragmentTuple -> findColumn("posY");
531 G4int posZIndex = fragmentTuple -> findColumn("posZ");
532
533 fragmentTuple -> fill(aIndex,A);
534 fragmentTuple -> fill(zIndex,Z);
535 fragmentTuple -> fill(energyIndex, energy);
536 fragmentTuple -> fill(posXIndex, posX);
537 fragmentTuple -> fill(posYIndex, posY);
538 fragmentTuple -> fill(posZIndex, posZ);
539 fragmentTuple -> addRow();
540 }
541#endif
542#ifdef G4ANALYSIS_USE_ROOT
543 //G4cout <<" A = " << A << " Z = " << Z << " energy = " << energy << G4endl;
544 fragmentNtuple->Fill(A, Z, energy, posX, posY, posZ);
545#endif
546}
547
548/////////////////////////////////////////////////////////////////////////////
549void HadrontherapyAnalysisManager::genericIonInformation(G4int a,
550 G4double z,
[807]551 G4int electronOccupancy,
[1230]552 G4double energy)
[807]553{
[1230]554#ifdef G4ANALYSIS_USE
[807]555 if (ionTuple) {
556 G4int aIndex = ionTuple -> findColumn("a");
557 G4int zIndex = ionTuple -> findColumn("z");
[1230]558 G4int electronIndex = ionTuple -> findColumn("occupancy");
[807]559 G4int energyIndex = ionTuple -> findColumn("energy");
[1230]560
[807]561 ionTuple -> fill(aIndex,a);
[1230]562 ionTuple -> fill(zIndex,z);
563 ionTuple -> fill(electronIndex, electronOccupancy);
[807]564 ionTuple -> fill(energyIndex, energy);
565 }
[1230]566 ionTuple -> addRow();
567#endif
568#ifdef G4ANALYSIS_USE_ROOT
569 if (theROOTIonTuple) {
570 theROOTIonTuple->Fill(a, z, electronOccupancy, energy);
571 }
572#endif
[807]573}
574
[1230]575/////////////////////////////////////////////////////////////////////////////
576void HadrontherapyAnalysisManager::startNewEvent()
577{
578 eventCounter++;
579}
580/////////////////////////////////////////////////////////////////////////////
581void HadrontherapyAnalysisManager::setGeometryMetaData(G4double endDetectorPosition, G4double waterThickness, G4double phantomCenter)
582{
583 this->detectorDistance = endDetectorPosition;
584 this->phantomDepth = waterThickness;
585 this->phantomCenterDistance = phantomCenter;
586}
587void HadrontherapyAnalysisManager::setBeamMetaData(G4double meanKineticEnergy,G4double sigmaEnergy)
588{
589 this->beamEnergy = meanKineticEnergy;
590 this->energyError = sigmaEnergy;
591}
592/////////////////////////////////////////////////////////////////////////////
593void HadrontherapyAnalysisManager::flush()
594{
595 HadrontherapyMatrix* matrix = HadrontherapyMatrix::getInstance();
596
597 matrix->TotalEnergyDeposit();
598#ifdef G4ANALYSIS_USE
599 theTree -> commit();
600 theTree ->close();
601#endif
602#ifdef G4ANALYSIS_USE_ROOT
603 metaData->Fill((Float_t) eventCounter,(Float_t) detectorDistance, (Float_t) phantomDepth, (Float_t) beamEnergy,(Float_t) energyError, (Float_t) phantomCenterDistance);
604 metaData->Write();
605 theROOTNtuple->Write();
606 theROOTIonTuple->Write();
607 fragmentNtuple->Write();
608 theTFile->Write();
609 // theTFile->Clear();
610 theTFile->Close();
611#endif
612 eventCounter = 0;
613 matrix->flush();
614}
615/////////////////////////////////////////////////////////////////////////////
616void HadrontherapyAnalysisManager::finish()
617{
618#ifdef G4ANALYSIS_USE
[807]619 // Write all histograms to file
620 theTree -> commit();
621 // Close (will again commit)
622 theTree ->close();
[1230]623#endif
624#ifdef G4ANALYSIS_USE_ROOT
625 metaData->Fill((Float_t) eventCounter,(Float_t) detectorDistance, (Float_t) phantomDepth, (Float_t) beamEnergy,(Float_t) energyError, (Float_t) phantomCenterDistance);
626 metaData->Write();
627 theROOTNtuple->Write();
628 theROOTIonTuple->Write();
629 fragmentNtuple->Write();
630 theTFile->Write();
631 theTFile->Close();
632#endif
633 eventCounter = 0;
[807]634}
[1230]635
[807]636#endif
637
638
639
640
641
642
643
644
645
Note: See TracBrowser for help on using the repository browser.