source: trunk/examples/advanced/Rich/src/RichTbAnalysisManager.cc@ 1149

Last change on this file since 1149 was 807, checked in by garnier, 17 years ago

update

File size: 7.8 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// Rich advanced example for Geant4
27// RichTbAnalysisManager.cc for Rich of LHCb
28// History:
29// Created: Sajan Easo (Sajan.Easo@cern.ch)
30// Revision and changes: Patricia Mendez (Patricia.Mendez@cern.ch)
31/////////////////////////////////////////////////////////////////////////////
32#include "G4Timer.hh"
33#include "globals.hh"
34#include "fstream"
35#include <ctype.h>
36#include "G4ios.hh"
37#include "G4Run.hh"
38#include "G4Event.hh"
39#include "G4Track.hh"
40#include "G4VVisManager.hh"
41#include "G4TrajectoryContainer.hh"
42#include "G4Trajectory.hh"
43#include "G4SteppingManager.hh"
44
45#include "G4SDManager.hh"
46#include "G4HCofThisEvent.hh"
47#include "RichTbHit.hh"
48#include "RichTbRunConfig.hh"
49
50#include "RichTbAnalysisMessenger.hh"
51
52#ifdef G4ANALYSIS_USE
53#include "RichTbAnalysisManager.hh"
54#include "AIDA/AIDA.h"
55
56
57
58RichTbAnalysisManager* RichTbAnalysisManager::instance = 0;
59
60RichTbAnalysisManager::RichTbAnalysisManager()
61 :outputFileName("rich.his"), analysisFactory(0),tree(0),histogramFactory(0)
62{
63
64 iTimer = new G4Timer;
65 NumPhotBeforeAerogel=0;
66 NumPhotBeforeMirror=0;
67 NumPhotAfterMirror=0;
68 NumPhotBeforeFilter=0;
69 NumPhotAfterFilter=0;
70 NumPhotAtHpd1Input=0;
71 NumPhotAtHpd2Input=0;
72 NumPhotAtHpd3Input=0;
73 NumPhotAtHpd4Input=0;
74 NumHitTotInHpd1=0;
75 NumHitTotInHpd2=0;
76 NumHitTotInHpd3=0;
77 NumHitTotInHpd4=0;
78 NumHitInSi=0;
79
80
81 analisysMessenger = new RichTbAnalysisMessenger(this);
82
83// Hooking an AIDA compliant analysis system.
84 analysisFactory = AIDA_createAnalysisFactory();
85 if(analysisFactory) {
86
87 AIDA::ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
88 if(treeFactory) {
89
90 tree = treeFactory->create(outputFileName,"hbook",false,true);
91
92 delete treeFactory; // Will not delete the ITree.
93 histogramFactory = analysisFactory->createHistogramFactory(*tree);
94
95 }
96 }
97
98}
99
100RichTbAnalysisManager::~RichTbAnalysisManager(){
101
102 delete histogramFactory;
103 histogramFactory = 0;
104
105 delete analysisFactory;
106 analysisFactory = 0;
107
108 delete instance;
109}
110
111RichTbAnalysisManager* RichTbAnalysisManager::getInstance()
112{
113 if(instance==0) {instance = new RichTbAnalysisManager;}
114 return instance;
115}
116
117void RichTbAnalysisManager::book()
118{
119
120 fhistoNrPhotG = histogramFactory->createHistogram1D("1","Number of Photon Hits per Track",120,0.,20.);
121 fhistoNBeforeMirror = histogramFactory->createHistogram1D("2","Number of Photons before Mirror",100,0.,750.);
122 fhistoWBeforeMirror = histogramFactory->createHistogram1D("3","WaveLength of Photons before Mirror",100,200.,800.);
123 fhistoWAfterMirror = histogramFactory->createHistogram1D("4","WaveLength of Photons after Mirror",100,200.,800.);
124 fhistoCkvProdSmall = histogramFactory->createHistogram1D("9","Cherekov Angle at roduction all angles",500,0.,0.5);
125 fhistoEmisZ = histogramFactory->createHistogram1D("10","Z of the Photon Emission Point",120,0.,600.);
126 fhistoCkvRadius = histogramFactory->createHistogram1D("5","Cherenkov Ring Radius",300,80.,220.);
127
128}
129
130void RichTbAnalysisManager::finish()
131{
132 if(tree){
133
134 tree->commit(); //Write histos and ntuples in file
135 tree->close();
136 }
137
138}
139
140
141void RichTbAnalysisManager::BeginOfEventAnalysis(const G4Event*){
142
143 //RichCollId is already defined in LHCbRichSimEventAction.cc
144 // Hence its extraction is not repeated here.
145 iTimer->Start();
146 NumPhotBeforeAerogel=0;
147 NumPhotBeforeMirror=0;
148 NumPhotAfterMirror=0;
149 NumPhotBeforeFilter=0;
150 NumPhotAfterFilter=0;
151 NumPhotAtHpd1Input=0;
152 NumPhotAtHpd2Input=0;
153 NumPhotAtHpd3Input=0;
154 NumPhotAtHpd4Input=0;
155 NumHitTotInHpd1=0;
156 NumHitTotInHpd2=0;
157 NumHitTotInHpd3=0;
158 NumHitTotInHpd4=0;
159 NumHitInSi=0;
160
161}
162void RichTbAnalysisManager::EndOfEventAnalysis(const G4Event* evt){
163
164
165
166 iTimer->Stop();
167 // G4double TimeforThisEvent= iTimer->GetRealElapsed();
168
169 G4SDManager * SDman = G4SDManager::GetSDMpointer();
170
171 G4String colNam;
172 G4int RichTbCollID = SDman->GetCollectionID(colNam="RichTbHitsCollection");
173
174 G4int RichTbc = RichTbCollID;
175 G4int evtNb = evt->GetEventID();
176
177 if(RichTbc<0) return;
178 G4HCofThisEvent * HCE = evt->GetHCofThisEvent();
179 RichTbHitsCollection* RHC =
180 HCE ? (RichTbHitsCollection*)(HCE->GetHC(RichTbc)) : 0;
181 if(RHC)
182 {
183
184 int n_hit = RHC->entries();
185 G4cout << " " << n_hit
186 << " hits are stored in RichTbHitsCollection in event "<<evtNb<< G4endl;
187 //fill the final number of hits in this event into a histogram
188
189 fhistoNrPhotG->fill(n_hit*1.0);
190
191 //To print and plot the number of hits per each HPD.
192
193 for (G4int iha=0; iha<n_hit; iha++ ) {
194
195 RichTbHit* aHit = (*RHC)[iha];
196 G4int CurHpdnum = aHit -> GetCurHpdNum();
197 if(CurHpdnum == 0 ) {
198 NumHitTotInHpd1++;
199
200 }else if (CurHpdnum == 1 ) {
201 NumHitTotInHpd2++;
202
203 }else if (CurHpdnum == 2 ) {
204 NumHitTotInHpd3++;
205
206 }else if (CurHpdnum == 3 ) {
207 NumHitTotInHpd4++;
208
209 }
210
211 }
212
213 //fill the number of photons before mirror into a histogram
214
215 fhistoNBeforeMirror->fill(NumPhotBeforeMirror);
216
217 G4cout<<"NumPhot before mirror "<<NumPhotBeforeMirror<<G4endl;
218 G4cout<<"NumPhot after mirror "<<NumPhotAfterMirror<<G4endl;
219 G4cout<<"NumPhot incident on Hpd 1 2 3 4 = "<< NumPhotAtHpd1Input
220 <<" "<< NumPhotAtHpd2Input<<" "<< NumPhotAtHpd3Input
221 <<" "<< NumPhotAtHpd4Input<<G4endl;
222
223 G4cout<<"Number of Si hits in Hpd 1 2 3 4 are "<<NumHitTotInHpd1
224 <<" "<<NumHitTotInHpd2<<" "<<NumHitTotInHpd3
225 <<" "<<NumHitTotInHpd4<<G4endl;
226
227
228 }
229
230}
231//void RichTbAnalysisManager::StepAnalysis(
232// const G4SteppingManager* aSteppingManager ){
233
234//}
235void RichTbAnalysisManager::setMeanHXCoord(G4double cx ) {
236
237
238 G4double hcurx = NumHXCoord+1.0;
239 if(hcurx != 0.0 ) {
240 G4double Mhx = MeanHXCoord * (NumHXCoord / hcurx) + cx/hcurx ;
241 MeanHXCoord = Mhx;
242 NumHXCoord = hcurx;
243
244 }else { G4cout<< "Zero hcurx in setMeanHXCoord "<<G4endl; }
245}
246void RichTbAnalysisManager::setMeanHYCoord(G4double cy ) {
247
248 G4double hcury = NumHYCoord+1.0;
249 if(hcury != 0.0 ) {
250 G4double Mhy = MeanHYCoord * (NumHYCoord / hcury) + cy/hcury ;
251 MeanHYCoord = Mhy;
252 NumHYCoord = hcury;
253 }else { G4cout<< "Zero hcury in setMeanHYCoord "<<G4endl; }
254}
255
256
257void RichTbAnalysisManager::SetOutputFileName(G4String newName)
258{
259 outputFileName = newName;
260}
261
262
263
264
265
266
267
268
269#endif
270
Note: See TracBrowser for help on using the repository browser.