[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