00001
00002
00003 #include "musrIForwardHit.hh"
00004 #include "G4UnitsTable.hh"
00005 #include "G4VVisManager.hh"
00006 #include "G4Circle.hh"
00007 #include "G4Colour.hh"
00008 #include "G4VisAttributes.hh"
00009 #include <fstream.h>
00010 #include <iostream.h>
00011 #include "G4ios.hh"
00012 #include "G4MagneticField.hh"
00013 #include "G4FieldManager.hh"
00014 #include "G4TransportationManager.hh"
00015 #include <iomanip>
00016 #include "globals.hh"
00017 #include "G4Transform3D.hh"
00018 #include "G4ProcessManager.hh"
00019 #include "G4Track.hh"
00020 #include "G4ThreeVector.hh"
00021 #include "G4RunManager.hh"
00022 #include "G4Run.hh"
00023
00024 G4Allocator<musrIForwardHit> musrIForwardHitAllocator;
00025
00026
00027
00028 musrIForwardHit::musrIForwardHit() {}
00029
00030
00031
00032 musrIForwardHit::~musrIForwardHit() {}
00033
00034
00035 G4int musrIForwardHit::eventIDoldIF = -1;
00036 G4int musrIForwardHit::NIF = 0;
00037 G4int musrIForwardHit::FMultihit = 0;
00038 G4int musrIForwardHit::runIDoldIF = -1;
00039 G4int musrIForwardHit::IFchamberNbold = -1;
00040
00041 musrIForwardHit::musrIForwardHit(const musrIForwardHit& right)
00042 : G4VHit()
00043 {
00044
00045 trackID = right.trackID;
00046 particle_name = right.particle_name;
00047 edep = right.edep;
00048 pos = right.pos;
00049 pol = right.pol;
00050 logicalvolume = right.logicalvolume;
00051 IFchamberNb = right.IFchamberNb;
00052 globaltime = right.globaltime;
00053
00054 }
00055
00056
00057
00058 const musrIForwardHit& musrIForwardHit::operator=(const musrIForwardHit& right)
00059 {
00060
00061 trackID = right.trackID;
00062 particle_name = right.particle_name;
00063 edep = right.edep;
00064 pos = right.pos;
00065 pol = right.pol;
00066 logicalvolume=right.logicalvolume;
00067 IFchamberNb = right.IFchamberNb;
00068 globaltime = right.globaltime;
00069
00070 return *this;
00071 }
00072
00073
00074
00075 G4int musrIForwardHit::operator==(const musrIForwardHit& right) const
00076 {
00077 return (this==&right) ? 1 : 0;
00078 }
00079
00080
00081
00082 void musrIForwardHit::Draw()
00083 {
00084 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
00085 if(pVVisManager)
00086 {
00087 G4Circle circle(pos);
00088 circle.SetScreenSize(0.04);
00089 circle.SetFillStyle(G4Circle::filled);
00090 G4Colour colour(1.,0.,0.);
00091 G4VisAttributes attribs(colour);
00092 circle.SetVisAttributes(attribs);
00093 pVVisManager->Draw(circle);
00094 }
00095 }
00096
00097
00098
00099 void musrIForwardHit::Print()
00100 {
00101
00102 G4RunManager* fRunManager = G4RunManager::GetRunManager();
00103 G4int eventID = fRunManager->GetCurrentEvent()->GetEventID();
00104 G4int runID = fRunManager->GetCurrentRun()->GetRunID();
00105 FMultihitSwitch=0;
00106
00107
00108
00109 if (runID != runIDoldIF)
00110 {
00111 NIF=0;
00112 FMultihit = 0;
00113 eventIDoldIF = -1;
00114 IFchamberNbold = -1;
00115 }
00116
00117 if (particle_name== "e+" and (eventIDoldIF != eventID or IFchamberNbold != IFchamberNb))
00118
00119 {
00120
00121
00122
00123 if (eventIDoldIF == eventID)
00124 {
00125 FMultihitSwitch=1;
00126 FMultihit++;
00127
00128 }
00129
00130 NIF++;
00131
00132
00133
00134
00135
00136 G4FieldManager *fMgr=G4TransportationManager::GetTransportationManager()->GetFieldManager();
00137
00138
00139 point[0]=0.;
00140 point[1]=0.;
00141 point[2]=0.;
00142
00143 B[2]=0.0;
00144
00145
00146 if(!fMgr->DoesFieldChangeEnergy())
00147 {
00148 mfield = fMgr->GetDetectorField();
00149 mfield->GetFieldValue(point,B);
00150 B[0]=B[0]*1000;
00151 B[1]=B[1]*1000;
00152 B[2]=B[2]*1000;
00153 }
00154
00155
00156
00157
00158
00159
00160 ofstream posfile2;
00161 posfile2.open ("iforward.dat", ios::out | ios::app);
00162 posfile2 << fabs(B[2]) <<" "<< pos.x()/cm<<" "<<pos.y()/cm <<" "<< pos.z()/cm
00163 << " " << globaltime/s <<" "<< IFchamberNb
00164 << " "<< FMultihitSwitch
00165 << G4endl;
00166 posfile2.close();
00167
00168 }
00169
00170 eventIDoldIF=eventID;
00171 runIDoldIF = runID;
00172 IFchamberNbold = IFchamberNb;
00173
00174
00175
00176 }
00177
00178
00179