source: trunk/examples/extended/eventgenerator/exgps/src/exGPSAnalysisManager.cc @ 1337

Last change on this file since 1337 was 1230, checked in by garnier, 14 years ago

update to geant4.9.3

File size: 7.2 KB
Line 
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//
26#ifdef G4ANALYSIS_USE
27
28#include <AIDA/AIDA.h>
29
30#include "exGPSAnalysisManager.hh"
31#include "exGPSAnalysisMessenger.hh"
32
33#include "G4UnitsTable.hh"
34
35exGPSAnalysisManager* exGPSAnalysisManager::instance = 0;
36//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
37
38exGPSAnalysisManager::exGPSAnalysisManager(): 
39fileName("exgps.aida"),fileType("xml"),analysisFactory(0), tree(0),plotter(0),
40minpos(-10.),maxpos(10),mineng(0.),maxeng(1000.),
41enerHisto(0),posiXY(0),posiXZ(0),posiYZ(0),anglCTP(0),anglTP(0),tuple(0)
42{
43  // Define the messenger and the analysis system
44  analysisMessenger = new exGPSAnalysisMessenger(this);
45
46}
47
48//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
49
50exGPSAnalysisManager::~exGPSAnalysisManager() {
51
52  delete analysisMessenger;
53}
54
55//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
56
57
58//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
59
60////////////////////////////////////////////////////////////////////////////////
61//
62exGPSAnalysisManager* exGPSAnalysisManager::getInstance ()
63{
64  if (instance == 0) instance = new exGPSAnalysisManager();
65  return instance;
66}
67
68//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
69
70void exGPSAnalysisManager::dispose()
71{
72  if (instance != 0)
73  {
74    delete instance;
75    instance = 0;
76  }
77}
78
79//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
80
81void exGPSAnalysisManager::Fill(G4String pname, G4double e, 
82                                G4double x, G4double y, G4double z,
83                                G4double t, G4double p, G4double w)
84{
85  if(enerHisto) {
86    enerHisto->fill(e/MeV,w);
87    posiXY->fill(x/cm,y/cm,w);
88    posiXZ->fill(x/cm,z/cm,w);
89    posiYZ->fill(y/cm,z/cm,w);
90    anglCTP->fill(p/deg,std::cos(t),w);
91    anglTP->fill(p/deg,t/deg,w);
92  }
93
94  if (plotter) plotter->refresh();
95
96  // Fill the tuple
97
98  if (tuple) {
99    tuple->fill(0,pname);
100    tuple->fill(1,e/MeV);
101    tuple->fill(2,x/cm);
102    tuple->fill(3,y/cm);
103    tuple->fill(4,z/cm);
104    tuple->fill(5,t/deg);
105    tuple->fill(6,p/deg);
106    tuple->fill(7,w);
107   
108    tuple->addRow();
109  }
110}
111
112//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
113/*
114   This member reset the histograms and it is called at the begin
115   of each run; here we put the inizialization so that the histograms have
116   always the right dimensions depending from the detector geometry
117*/
118void exGPSAnalysisManager::BeginOfRun() 
119{ 
120  tree = 0;
121  plotter = 0;
122
123  enerHisto =0;
124  posiXY = posiXZ = posiYZ = anglCTP =anglTP = 0;
125  tuple = 0;
126
127  // Hooking an AIDA compliant analysis system.
128  analysisFactory = AIDA_createAnalysisFactory();
129  if(!analysisFactory) //Have to check that, it can fail.
130  {
131    G4cout << "exGPSAnalysisManager::BeginOfRun: can't get AIDA." << G4endl; 
132    return;
133  }
134  AIDA::ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
135  if(treeFactory) 
136  {
137    tree = treeFactory->create(fileName,fileType,false,true,"compress=yes");
138    if(!tree) //Have to check that, it can fail.
139    {
140      G4cout << "exGPSAnalysisManager::BeginOfRun:"
141             << " can't create the AIDA::ITree : " << fileName << G4endl; 
142      return;
143    }
144
145    delete treeFactory; // Will not delete the ITree.
146  }
147
148  AIDA::IHistogramFactory* hFactory = analysisFactory->createHistogramFactory(*tree);
149  if (hFactory)
150  {
151    // Create the energy histogram
152    enerHisto = hFactory->createHistogram1D("Source Energy Spectrum",100,mineng,maxeng);
153
154    // Create some 2d histos
155    posiXY = hFactory->createHistogram2D("Source X-Y distribution",100,minpos/cm,maxpos/cm
156                                            ,100,minpos/cm,maxpos/cm);
157    posiXZ = hFactory->createHistogram2D("Source X-Z distribution",100,minpos/cm,maxpos/cm
158                                            ,100,minpos/cm,maxpos/cm);
159    posiYZ = hFactory->createHistogram2D("Source Y-Z distribution",100,minpos/cm,maxpos/cm
160                                            ,100,minpos/cm,maxpos/cm);
161    anglCTP = hFactory->createHistogram2D("Source phi-std::cos(theta) distribution",360,0,360
162                                                   , 100, -1, 1);
163    anglTP = hFactory->createHistogram2D("Source phi-theta distribution",360,0,360
164                                                  ,180,0,180);
165    delete hFactory;
166  }
167
168  // Create a Tuple
169
170  AIDA::ITupleFactory* tFactory = analysisFactory->createTupleFactory(*tree);
171  if (tFactory)
172  {
173     tuple = tFactory->create("MyTuple","MyTuple","string Pname, double Energy, X, Y, Z, Theta, Phi, Weight","");
174     delete tFactory;
175  }
176 
177  AIDA::IPlotterFactory* pf = analysisFactory->createPlotterFactory(0,0);
178  if(pf) 
179  {
180    plotter = pf->create();
181    if (plotter)
182    {
183       plotter->createRegions(2,3);
184       if(enerHisto) plotter->region(0)->plot(*enerHisto);
185       if(posiXY) plotter->region(1)->plot(*posiXY);
186       if(posiXZ) plotter->region(2)->plot(*posiXZ);
187       if(posiYZ) plotter->region(3)->plot(*posiYZ);
188       if(anglCTP) plotter->region(4)->plot(*anglCTP);
189       if(anglTP) plotter->region(5)->plot(*anglTP);
190       plotter->show();
191    }
192    delete pf;
193  }
194}
195
196//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
197
198/*
199   This member is called at the end of each run
200*/
201void exGPSAnalysisManager::EndOfRun() 
202{
203  if (analysisFactory)
204  {
205    if (!tree->commit()) G4cout << "Commit failed: no AIDA file produced!" << G4endl;
206    delete tree;
207    tree = 0;
208    //    G4cout << "Warning: Geant4 will NOT continue unless you close the JAS-AIDA window." << G4endl;
209
210    delete plotter;
211    plotter = 0;
212
213    delete analysisFactory; //cleanup all AIDA related things.
214    analysisFactory = 0;
215
216    enerHisto = 0;
217    posiXY = posiXZ = posiYZ = anglCTP =anglTP = 0;
218    tuple = 0;
219
220  }
221}
222
223
224#endif // G4ANALYSIS_USE
225
226
227
228
229
230
231
232
233
234
Note: See TracBrowser for help on using the repository browser.