[gate-users] ASCII File format
Graeme O'Keefe
graeme.okeefe at petnm.unimelb.edu.au
Thu May 26 01:24:39 CEST 2005
Hi Jan,
I am writing a sorter at the moment to convert gate ASCII output to
Philips UGM format sinograms.
I have the sinogram storage sorted out but a small problem with the
(xPosA, xPosB) mapping to (rho, phi).
Maybe someone has done it already, if not, it may be of use to some
people out there, I'll let you know when I've 'sorted' it out.
I had the same problem with the ASCII output for cylindrical PET,
here is what I found.
In GateCoincidenceDigi.cc, you will find:
# GateCoicidenceDigi.cc
#std::ofstream& operator<<(std::ofstream& flux, GateCoincidenceDigi*
digi)
#{
# GatePulse pulse;
# for (G4int iP=0; iP<2; iP++) {
# pulse = digi->GetPulse(iP);
# flux
#1 << " " << std::setw(7) << pulse.GetRunID()
#2 << " " << std::setw(7) << pulse.GetEventID()
#3 << " " << std::setw(5) << pulse.GetSourceID()
#4 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetSourcePosition().x()/mm
#5 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetSourcePosition().y()/mm
#6 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetSourcePosition().z()/mm
#7 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(23) <<
pulse.GetTime()/s
#8 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetEnergy()/MeV
#9 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetGlobalPos().x()/mm
#10 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetGlobalPos().y()/mm
#11 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetGlobalPos().z()/mm
#12-17 << " " << std::setw(5) << pulse.GetOutputVolumeID()
#18 << " " << std::setw(5) << pulse.GetNPhantomCompton()
#19 << " " << std::setw(5) << pulse.GetNCrystalCompton()
#20 << " " << std::setw(5) << pulse.GetNPhantomRayleigh()
#21 << " " << std::setw(5) << pulse.GetNCrystalRayleigh()
#22 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetScannerPos().z()/mm
#23 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setprecision(3) <<
pulse.GetScannerRotAngle()/deg;
# }
So for two pulses for a coin => 46 columns, the extra two columns per
pulse being from the Rayleigh events.
Four columns additional to documentation from Rayleigh scattering,
columns 20, 21, 43, 44
Likewise, the singles ASCII format is different from the documented
singles ASCII format.
In GateSingleDigi.cc, you will find:
#GateSingleDigi.cc
#std::ofstream& operator<<(std::ofstream& flux, GateSingleDigi* digi)
#{ flux
#1 << " " << std::setw(7) << digi->GetRunID()
#2 << " " << std::setw(7) << digi->GetEventID()
#3 << " " << std::setw(5) << digi->GetSourceID()
#4 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetSourcePosition().x()/mm
#5 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetSourcePosition().y()/mm
#6 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetSourcePosition().z()/mm
#7-12 << " " << std::setw(5) << digi->GetOutputVolumeID()
#13 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(30) <<
std::setprecision(23) << digi->GetTime()/s
#14 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetEnergy()/MeV
#15 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetGlobalPos().x()/mm
#16 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetGlobalPos().y()/mm
#17 << " " << std::resetiosflags(std::ios::floatfield) <<
std::setiosflags(std::ios::scientific) << std::setw(10) <<
std::setprecision(3) << digi->GetGlobalPos().z()/mm
#18 << " " << std::setw(4) << digi->GetNPhantomCompton()
#19 << " " << std::setw(4) << digi->GetNCrystalCompton()
#20 << " " << std::setw(4) << digi->GetNPhantomRayleigh()
#21 << " " << std::setw(4) << digi->GetNCrystalRayleigh()
#22 << " " << digi->GetComptonVolumeName()
#23 << " " << digi->GetRayleighVolumeName()
# << G4endl;
There are an additional three columns for Rayleigh scattering
information, column 20, 21 & 23.
Hope this helps?
regards,
Graeme
Graeme O'Keefe
Centre for PET
Austin Hospital
Tel: (613)-9496-5767
Fax: (613) 9458-5023
On 25/05/2005, at 5:49 PM, D.J. van der Laan wrote:
>
> I have a problem with the meaning of the columns in the coincidence
> ASCII output. According to the manual and the FAQ the number of
> columns in de coincidence file should be 42 for the cylindricalPET
> system, but the files Gate produces have 46 columns. When looking
> at the file I suspect that there are not 6 volume ID's per event,
> but 8. Is this correct?
>
> Thanks,
> Jan
>
>
> --
> D.J. van der Laan
> Delft University of Technology
> Mekelweg 15, room 2.00.020
> 2629 JB Delft
> The Netherlands
>
> E: d.j.vanderlaan at tnw.tudelft.nl
> T: +31 15 2783776
> F: +31 15 2789011
> _______________________________________________
> gate-users mailing list
> gate-users at lphe1pet1.epfl.ch
> http://lphe1pet1.epfl.ch/mailman/listinfo/gate-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opengatecollaboration.org/mailman/private/gate-users/attachments/20050526/75aa61a7/attachment.htm>
More information about the Gate-users
mailing list