/[PAMELA software]/PamCAL/src/PamVMCApplication.cxx
ViewVC logotype

Contents of /PamCAL/src/PamVMCApplication.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Mon Nov 12 10:10:21 2007 UTC (17 years ago) by nikolas
Branch: MAIN
CVS Tags: HEAD
More basic files added

1 // $Id: PamVMCApplication.cxx,v 1.0 2007/06/01
2 //
3 // Geant4 ExampleN06 adapted to Virtual Monte Carlo
4 #include <cstdlib>
5 #include <string>
6 #include <iostream>
7 #include <TROOT.h>
8 #include <TInterpreter.h>
9 #include <TVirtualMC.h>
10 #include <Riostream.h>
11 #include <TGeoManager.h>
12 #include <TVirtualGeoTrack.h>
13 #include <TLorentzVector.h>
14 #include "PamVMCApplication.h"
15 #include "PamVMCCaloSD.h"
16 #include "PamVMCTrkSD.h"
17 #include "PamVMCTofSD.h"
18 #include "PamVMCCardSD.h"
19 #include "PamVMCCasSD.h"
20 #include "PamVMCCasSD.h"
21 #include "PamVMCS4SD.h"
22 //#include "PamVMCDetectorHit.h"
23 //#include "PamVMCCalorHit.h"
24 #include "PamVMCStack.h"
25 #include "PamVMCDetectorConstruction.h"
26 #include "PamVMCPrimaryGenerator.h"
27
28 ClassImp(PamVMCApplication)
29
30 PamVMCApplication::PamVMCApplication(const char *name, const char *title)
31 : TVirtualMCApplication(name,title),
32 fEventNo(0),
33 fVerbose(0),
34 fStack(0),
35 fDetConstruction(0),
36 fPrimaryGenerator(0),
37 fRootManager("pamtest",kWrite)
38 //, fdetmap(0)
39 {
40 // Standard constructor
41
42 // Create a user stack
43 fStack = new PamVMCStack(1000);
44
45 // Create detector construction
46 fDetConstruction = new PamVMCDetectorConstruction();
47
48 // Create a primary generator
49 fPrimaryGenerator = new PamVMCPrimaryGenerator(fStack);
50
51 //fCaloSD = new PamVMCCaloSD();
52
53 // std::cout <<"!!!!!!!!APPLICATION CREATED!!!"<<std::endl;
54 // Create a tracker SD
55
56 //fTrackerSD = new PamVMCTrackerSD("PamVMCTracker", fDetConstruction);
57
58 // Create a tof SD
59
60 //fTofSD = new PamVMCTofSD("PamVMCTof", fDetConstruction);
61
62 #ifdef PAMFIELD
63 // Load the PAMELA magnetic field
64
65 std::string pamcal=getenv("PAM_CALIB"); pamcal+="/trk-param/field_param-0/";
66 std::cout << "PAMELA env: " << pamcal << std::endl;
67 pamfield.LoadField(pamcal.c_str());
68 #endif
69 }
70
71
72 PamVMCApplication::PamVMCApplication()
73 : TVirtualMCApplication(),
74 fEventNo(0),
75 fVerbose(0),
76 fStack(0),
77 fDetConstruction(0),
78 fPrimaryGenerator(0),
79 fRootManager()
80 {
81 // Default constructor
82 }
83
84 PamVMCApplication::~PamVMCApplication()
85 {
86 // Destructor
87
88 delete fStack;
89 delete fDetConstruction;
90 delete fPrimaryGenerator;
91 delete gMC;
92 gMC = 0;
93 }
94
95 //
96 // public methods
97 //
98
99 void PamVMCApplication::InitMC(const char* setup)
100 {
101 // Initialize MC.
102
103 fVerbose.InitMC();
104
105 gROOT->LoadMacro(setup);
106 gInterpreter->ProcessLine("Config()");
107 gMC->SetStack(fStack);
108 std::cout<<"!!! BEFORE INIT GMC"<<std::endl;
109 gMC->Init();
110
111 gMC->BuildPhysics();
112
113 //Creating a KEYS for SD volume names:
114
115 std::cout<<"!!!Creating PamVMCCaloSD object"<<std::endl;
116 fdetmap.Add(new TObjString("CAST"), new PamVMCCaloSD() );
117 fdetmap.Add(new TObjString("S11Y"), new PamVMCTofSD("S11Y") );
118 fdetmap.Add(new TObjString("S12X"), new PamVMCTofSD("S12X") );
119 fdetmap.Add(new TObjString("S21X"), new PamVMCTofSD("S21X") );
120 fdetmap.Add(new TObjString("S22Y"), new PamVMCTofSD("S22Y") );
121 fdetmap.Add(new TObjString("S31Y"), new PamVMCTofSD("S31Y") );
122 fdetmap.Add(new TObjString("S32X"), new PamVMCTofSD("S32X") );
123 fdetmap.Add(new TObjString("TSPA"), new PamVMCTrkSD() );
124 fdetmap.Add(new TObjString("C1D1"), new PamVMCCardSD("C1D1") );
125 fdetmap.Add(new TObjString("C2D1"), new PamVMCCardSD("C2D1") );
126 fdetmap.Add(new TObjString("SID1"), new PamVMCCasSD() );
127 fdetmap.Add(new TObjString("MGSC"), new PamVMCCatSD() );
128 fdetmap.Add(new TObjString("S4"), new PamVMCS4SD() );
129 fdetmap.Add(new TObjString("NDTI"), new PamVMCNDSD() );
130 std::cout<<"!!!!PamVMCCaloSD object created"<<std::endl;
131 //fdetmap.Print();
132 //Registration should be after inserting all detectors in fdetmap
133 Register();
134
135 }
136
137 void PamVMCApplication::RunMC(Int_t nofEvents)
138 {
139 // MC run.
140
141 fVerbose.RunMC(nofEvents);
142
143 gMC->ProcessRun(nofEvents);
144
145 fVerbose.FinishRun();
146 }
147
148
149 void PamVMCApplication::ConstructGeometry()
150 {
151 // Construct geometry using detector contruction class
152
153 fVerbose.ConstructGeometry();
154 fDetConstruction->ConstructGeometry();
155
156 }
157
158 void PamVMCApplication::InitGeometry()
159 {
160 // Initialize geometry
161
162 fVerbose.InitGeometry();
163 //fCalorimeterSD->Initialize();
164 //fTrackerSD->Initialize();
165 //fTofSD->Initialize();
166
167 //Initialization of HitCollestions in Root file:
168 std::cout<<"!!!! Before registration HitCol!!!"<<std::endl;
169
170 }
171
172
173 void PamVMCApplication::GeneratePrimaries()
174 {
175 // Fill the user stack (derived from TVirtualMCStack) with primary particles.
176
177 ///// fVerbose.GeneratePrimaries();
178
179 fPrimaryGenerator->GeneratePrimaries();
180 }
181
182 void PamVMCApplication::BeginEvent()
183 {
184 // User actions at beginning of event
185
186 ///// fVerbose.BeginEvent();
187
188 //fCalorimeterSD->BeginOfEvent();
189 fEventNo++;
190 }
191
192 void PamVMCApplication::BeginPrimary()
193 {
194 // User actions at beginning of a primary track
195
196 fVerbose.BeginPrimary();
197 }
198
199 void PamVMCApplication::PreTrack()
200 {
201 // User actions at beginning of each track
202
203 ////// fVerbose.PreTrack();
204
205 }
206
207 void PamVMCApplication::Stepping()
208 {
209
210 // User actions at each step
211 fVerbose.Stepping();
212 ///std::cout<<"!!!! STEP"<<std::endl;
213
214 // if (gMC->IsTrackAlive()){
215 PamVMCDetectorSD* temp=(PamVMCDetectorSD*) fdetmap(gMC->CurrentVolName());
216 if(temp){
217 fdstatus=INSIDE;
218 if(gMC->IsTrackEntering()){ fdstatus=ENTERING; }
219 if(gMC->IsTrackExiting() || gMC->IsTrackOut() || gMC->IsTrackStop() ) { fdstatus=EXITING;/* fStack->Print();*/}
220 temp->FillHit(fdstatus,gMC);
221 }
222 // }
223
224 }
225
226 //void PamVMCApplication::FillTempHit(){
227 // Double_t pxin,pyin,pzin,ein;
228 // gMC->TrackPosition(ftemphit.fXIN,ftemphit.fYIN,ftemphit.fZIN);
229 // gMC->TrackMomentum(pxin,pyin,pzin,ein);
230
231 // ftemphit.fPIN=sqrt(pxin*pxin + pyin*pyin + pzin*pzin);
232 // ftemphit.fPDG= gMC->TrackPid();
233 // ftemphit.fEREL= gMC->Edep();
234 // ftemphit.fPATH= gMC->TrackStep();
235 // ftemphit.fTOF= gMC->TrackTime();
236 // ftemphit.fXOUT=ftemphit.fXIN;
237 // ftemphit.fYOUT=ftemphit.fYIN;
238 // ftemphit.fZOUT=ftemphit.fZIN;
239 //}
240
241 void PamVMCApplication::PostTrack()
242 {
243 // User actions after finishing of each track
244
245
246 ///// fVerbose.PostTrack();
247 }
248
249 void PamVMCApplication::FinishPrimary()
250 {
251 // User actions after finishing of a primary track
252
253 fVerbose.FinishPrimary();
254 }
255
256 void PamVMCApplication::FinishEvent()
257 {
258 // User actions after finishing of an event
259
260 //fCalorimeterSD->GetCalorHitBuff()->Shrink();
261 /////fVerbose.FinishEvent();
262 fRootManager.Fill();
263 TMapIter *n= (TMapIter *)fdetmap.MakeIterator();
264 TObject *o; while( o=(TObject *) n->Next()) {
265 ((PamVMCDetectorSD *)fdetmap.GetValue(o))->ClearHitColl();
266 }
267 // fCalorimeterSD->PrintTotal();
268 // std::cout<<"ENDCAL EVENT"<<std::endl;
269 //fCalorimeterSD->EndOfEvent();
270 //fTrackerSD->EndOfEvent();
271 //fTofSD->EndOfEvent();
272 fStack->Reset();
273 }
274
275 void PamVMCApplication::FinishRun()
276 {
277
278 // fRootManager.Fill();
279 fVerbose.FinishRun();
280
281 fRootManager.WriteAll();
282 }
283 void PamVMCApplication::Field(const Double_t* x, Double_t* b) const
284 {
285 // Uniform magnetic field
286
287 #ifdef PAMFIELD
288 b[0] = pamfield.GetBX((float *)x);
289 b[1] = pamfield.GetBY((float *)x);
290 b[2] = pamfield.GetBZ((float *)x);
291 cout<<b[0]<<" "<<b[1]<<" "<<b[2]<<endl;
292 #else
293 if(x) { for (Int_t i=0; i<3; i++) b[i] = 0.0; } else { b[0]=b[1]=b[2]=0.0; }
294
295 #endif
296 }

  ViewVC Help
Powered by ViewVC 1.1.23