00001
00002
00003 #include "musrIBackwardHit.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>
00011 #include "G4ios.hh"
00012 #include "G4MagneticField.hh"
00013 #include "G4FieldManager.hh"
00014 #include "G4TransportationManager.hh"
00015 #include <iomanip.h>
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<musrIBackwardHit> musrIBackwardHitAllocator;
00025
00026
00027
00028 musrIBackwardHit::musrIBackwardHit() {}
00029
00030
00031
00032 musrIBackwardHit::~musrIBackwardHit() {}
00033
00034
00035 G4int musrIBackwardHit::eventIDoldIB = -1;
00036 G4int musrIBackwardHit::NIB = 0;
00037 G4int musrIBackwardHit::BMultihit = 0;
00038 G4int musrIBackwardHit::runIDoldIB = -1;
00039 G4int musrIBackwardHit::IBchamberNbold = -1;
00040
00041 musrIBackwardHit::musrIBackwardHit(const musrIBackwardHit& 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 IBchamberNb = right.IBchamberNb;
00052 globaltime = right.globaltime;
00053
00054 }
00055
00056
00057
00058 const musrIBackwardHit& musrIBackwardHit::operator=(const musrIBackwardHit& 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 IBchamberNb = right.IBchamberNb;
00068 globaltime = right.globaltime;
00069
00070 return *this;
00071 }
00072
00073
00074
00075 G4int musrIBackwardHit::operator==(const musrIBackwardHit& right) const
00076 {
00077 return (this==&right) ? 1 : 0;
00078 }
00079
00080
00081
00082 void musrIBackwardHit::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 musrIBackwardHit::Print()
00100 {
00101
00102 G4RunManager* fRunManager = G4RunManager::GetRunManager();
00103 G4int eventID = fRunManager->GetCurrentEvent()->GetEventID();
00104 G4int runID = fRunManager->GetCurrentRun()->GetRunID();
00105 BMultihitSwitch=0;
00106 if (runID != runIDoldIB)
00107 {
00108 NIB=0;
00109 BMultihit = 0;
00110 eventIDoldIB = -1;
00111 IBchamberNbold = -1;
00112 }
00113
00114 if (particle_name== "e+" and (eventIDoldIB != eventID or IBchamberNbold != IBchamberNb))
00115 {
00116
00117
00118
00119 if (eventIDoldIB == eventID)
00120 {
00121 BMultihit++;
00122 BMultihitSwitch=1;
00123
00124 }
00125 NIB++;
00126
00127 G4FieldManager *fMgr=G4TransportationManager::GetTransportationManager()->GetFieldManager();
00128
00129
00130 point[0]=0.;
00131 point[1]=0.;
00132 point[2]=0.;
00133
00134 B[2]=0.0;
00135
00136
00137 if(!fMgr->DoesFieldChangeEnergy())
00138 {
00139 mfield = fMgr->GetDetectorField();
00140 mfield->GetFieldValue(point,B);
00141 B[0]=B[0]*1000;
00142 B[1]=B[1]*1000;
00143 B[2]=B[2]*1000;
00144 }
00145
00146
00147
00148
00149
00150
00151 ofstream posfile1;
00152 posfile1.open ("ibackward.dat", ios::out | ios::app);
00153 posfile1 << fabs(B[2]) <<" "<< pos.x()/cm<<" "<<pos.y()/cm <<" "<< pos.z()/cm
00154 << " " << globaltime/s << " "<< IBchamberNb
00155 << " " << BMultihitSwitch
00156 << G4endl;
00157 posfile1.close();
00158
00159 }
00160
00161 eventIDoldIB=eventID;
00162 runIDoldIB = runID;
00163 IBchamberNbold = IBchamberNb;
00164
00165
00166 }
00167
00168
00169