<div dir="ltr"><div><div>Dear Stathis,<br><br><span id="result_box" class="" lang="en"><span class="">I 'm going </span><span class="">to apply</span> <span class="">the modifications.</span><br><span class="">Thank you</span> <span class="">very much for the</span> <span class="">time and</span> <span class="">the help you</span> <span class="">gave me</span></span>.<br>
<br></div>Best regards,<br><br></div>Sara<br><div><div><br></div></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><div><br>________________________________________________<br><br><b>Beilla Sara<br>
<br></b></div><div>Doctorante en Charge d'Enseignement<br><br></div><div>INSERM UMR825<br></div><div>Imagerie Cérébrale & Handicaps Neurologiques<br></div><div>CHU PURPAN - Pavillon Baudot<br></div><div>Bureau 326 - 3ème étage<br>
</div><div>Place du Dr Baylac 31024 <br>TOULOUSE - Cedex 3<br></div><div>E-mail: <a href="mailto:sara.beilla@inserm.fr" target="_blank">sara.beilla@inserm.fr</a> <br></div></div></div>
<br><br><div class="gmail_quote">2014-04-19 21:01 GMT+02:00 Stathis Kamperis <span dir="ltr"><<a href="mailto:ekamperi@gmail.com" target="_blank">ekamperi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
To summarize, the steps one needs to go through in order to use IAEA<br>
phase space files are, in my opinion, the following:<br>
<br>
1. Take a backup of the phase space file.<br>
2. Edit the program I quoted in my previous email, so that:<br>
       The sum of 'pad' array size plus 1 equals the record length as<br>
found in the header file.<br>
3. Compile the program, e.g.<br>
    gcc chkphsp.c -o chkphsp<br>
4. Run the program on the phase space file, e.g.<br>
    ./chkphsp <your phase space file here><br>
5. If there are errors, it means that there exist unknown particles<br>
inside the phase space file that GATE can't handle. The program will<br>
try to fix them by replacing them with photons, for DEBUGGING purposes<br>
only.<br>
    Rerun the program a 2nd time. This time there should be no output.<br>
6. If there are no errors (either because there weren't any at the<br>
first place or because they were 'fixed' by the utility), you can<br>
proceed. Run your simulation with the phase space file as your beam<br>
source. Most likely the simulation will terminate prematurely with an<br>
error:<br>
<div class="">    GateSourcePhaseSpace.cc (l.252): Source phase space: particle not<br>
available in IAEA phase space format.<br>
</div>7. From now own, 2 are the main causes that may be to blame:<br>
7a. Your phase space file uses a fixed 'Z' coordinate.<br>
7b. Your phase space file contains extra longs or extra floats.<br>
Regarding 7a. I have already provided a hard-coded fix in my previous emails.<br>
Regarding 7b:<br>
    If your CPU architecture is 32bits wide, then you need to set<br>
'iextralong' (or 'iextrafloat') in the general/src/GateIAEARecord.cc<br>
file to the number of extra longs (or extra floats) your header file<br>
says there are.<br>
   If your CPU architecture is 64bits wide, on top of adjusting<br>
'iextralong', you need to change<br>
'typedef long IAEA_I32;' into 'typedef int32_t IAEA_I32;' and also<br>
include stdint.h in source/general/include/GateIAEAConfig.h file.<br>
8. #define DEBUG in source/general/src/GateIAEARecord.cc file,<br>
9. Rebuild GATE.<br>
10. Run your simulation and see the printed messages regarding the<br>
read particles. Make sure that the values are meaningful (particle<br>
type, energy, x,y,z, u,v,w, statistical weight). E.g., the direction<br>
cosines need to be bounded on [-1,1] and so on.<br>
<br>
I hope that my last emails will provide you with enough information to<br>
get you started. I'm off.<br>
<br>
Best regards,<br>
Stathis<br>
<div class="HOEnZb"><div class="h5"><br>
On Sat, Apr 19, 2014 at 5:20 AM, Stathis Kamperis <<a href="mailto:ekamperi@gmail.com">ekamperi@gmail.com</a>> wrote:<br>
> On Fri, Apr 18, 2014 at 11:04 PM, Stathis Kamperis <<a href="mailto:ekamperi@gmail.com">ekamperi@gmail.com</a>> wrote:<br>
>> Greetings,<br>
>><br>
>> the usage of IAEA phase space files is problematic in many levels.<br>
>><br>
>> Most of the times, in my experience, the actual record length of the<br>
>> space file is not interpreted correctly. E.g., record length is 53<br>
>> bytes but GATE assumes some other length (for reasons I am going to<br>
>> list later).<br>
>><br>
>> This is a typical case of a framing error (similar to genetics where a<br>
>> mutation occurs that inserts or deletes a *single* nucleotide from a<br>
>> DNA sequence and all the triplets past that mutation are translated<br>
>> incorrectly). The end result is that soon (i.e., after a few particles<br>
>> are read) some particle ends up with a particle number other than<br>
>> those that are supported (1-5) and GATE fails with:<br>
>><br>
>> "GateSourcePhaseSpace.cc (l.252): Source phase space: particle not<br>
>> available in IAEA phase space format."<br>
>><br>
>> So, an error like the above is indicative that GATE and phase space<br>
>> files don't agree on the actual record length.<br>
>><br>
>> In Sara's case, the header file looks like this:<br>
>><br>
>> $RECORD_CONTENTS:<br>
>>     1     // X is stored ?<br>
>>     1     // Y is stored ?<br>
>>     1     // Z is stored ?<br>
>>     1     // U is stored ?<br>
>>     1     // V is stored ?<br>
>>     1     // W is stored ?<br>
>>     1     // Weight is stored ?<br>
>>     0     // Extra floats stored ?<br>
>>     6     // Extra longs stored ?<br>
>>     1     // Incremental history number stored in the extralong array [ 0]<br>
>>     0     // Generic integer variable stored in the extralong array [ 1]<br>
>>     0     // Generic integer variable stored in the extralong array [ 2]<br>
>>     0     // Generic integer variable stored in the extralong array [ 3]<br>
>>     0     // Generic integer variable stored in the extralong array [ 4]<br>
>>     3     // ILB PENELOPE variable stored in the extralong array [ 5]<br>
>><br>
>> So:<br>
>> 1 byte for particle type +<br>
>> 4 bytes for energy +<br>
>> 6*4 bytes for (x,y,z,u,v,w) +<br>
>> 4 bytes for weight factor +<br>
>> 6*4bytes for the extra longs<br>
>> sum = 57 bytes<br>
>><br>
>> But the header file says:<br>
>><br>
>> $RECORD_LENGTH:<br>
>> 53<br>
>><br>
>> If you recall my previous analysis that can be found here[1] GATE<br>
>> doesn't check for 'W' no matter the value of it in the header file. So<br>
>> 'W' is as if it doesn't exist. I don't understand though why the<br>
>> header says '1' and doesn't count it later on in the record length. I<br>
>> would expect that the header file, at least, would be self-consistent,<br>
>> i.e., the sum of record contents would always equal record length.<br>
>><br>
>> So:<br>
>> 1 byte for particle type +<br>
>> 4 bytes for energy +<br>
>> 5*4 bytes for (x,y,z,u,v) +<br>
>> 4 bytes for weight factor +<br>
>> 6*4bytes for the extra longs<br>
>> sum = 53 bytes<br>
>><br>
>> But the header file says:<br>
>><br>
>> $RECORD_LENGTH:<br>
>> 53<br>
>><br>
>> So, we are good! But why GATE can't read a record ?<br>
>><br>
>> Well, it seems that GATE doesn't read the value of longs or floats<br>
>> from the header file, but instead uses some defaults[2]. So, if one<br>
>> uses a phase space with extra longs or floats either s/he needs to<br>
>> stop using them or inject the correct value of 'iextralong' or<br>
>> 'iextrafloat' in GATE and rebuild. Sara is using 6 extra longs so<br>
>> 'iextralong' needs to be 6. Right ? Well, not exactly :)<br>
>><br>
>> If you take a look here[3], you see that the long array which holds<br>
>> the extra longs is declared as IAEA_I32. Considering the name one<br>
>> would expect that this is a variable 32 bits long (=4bytes), no matter<br>
>> your CPU architecture (32 or 64bits). But, if you look at the<br>
>> definition of it here[4], you realize that it is typedef'd to 'long'.<br>
>> But sizeof(long) might be 4 bytes on 32 bit CPUs or 8 bytes like mine<br>
>> or whatever. So, for me, 'iextralong' needs to be '3' and not '6',<br>
>> since 3*8 = 6*4.<br>
> Actually, the safest way to go is to fix the definition of IAEA_I32,<br>
> like for instance:<br>
><br>
> typedef int32_t IAEA_I32;<br>
><br>
> (and also include stdint.h)<br>
><br>
>><br>
>> If I do this Sara, the phase space files that you sent me are<br>
>> interpreted fine and the simulation continues uninterrupted.<br>
>><br>
>> Best regards,<br>
>> Stathis<br>
>><br>
>> _____<br>
>> [1] <a href="http://permalink.gmane.org/gmane.comp.science.opengate.user/3701" target="_blank">http://permalink.gmane.org/gmane.comp.science.opengate.user/3701</a><br>
>> [2] <a href="http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/src/GateIAEARecord.cc#L68" target="_blank">http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/src/GateIAEARecord.cc#L68</a><br>

>> [3] <a href="http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/src/GateIAEARecord.cc#L159" target="_blank">http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/src/GateIAEARecord.cc#L159</a><br>

> Missing reference here:<br>
> [4] <a href="http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/include/GateIAEAConfig.h#L28" target="_blank">http://www.opengatecollaboration.org/lxr/source/6.2.0/source/general/include/GateIAEAConfig.h#L28</a><br>

><br>
>><br>
>><br>
>> /*<br>
>>  * A debugging ONLY program that checks a phase space file for unknown particles<br>
>>  * and replaces them with photons. If you still get an unknown particle error<br>
>>  * after you run this on you phase space file (take a backup first), then you<br>
>>  * have a frameshift error.<br>
>>  */<br>
>><br>
>> #include <assert.h><br>
>> #include <stdio.h><br>
>><br>
>> #define ABS(x) ((x)<0 ? -(x) : (x))<br>
>><br>
>> struct rec {<br>
>>         char particle;<br>
>>         char pad[52];    /* 1 + 52 = 53 bytes which is the record<br>
>> length as found in the header file */<br>
>> } __attribute__((packed));<br>
>><br>
>> int<br>
>> main(int argc, char *argv[])<br>
>> {<br>
>>         FILE *fp;<br>
>>         struct rec r;<br>
>>         int cnt, rv;<br>
>><br>
>>         fp = fopen(argv[1], "r+");<br>
>>         assert(fp);<br>
>><br>
>>         cnt = 0;<br>
>>         do {<br>
>>                 ++cnt;<br>
>>                 rv = fread(&r, sizeof(struct rec), 1, fp);<br>
>>                 assert(rv > 0 || (rv == 0 && feof(fp)));<br>
>>                 /* Particle number maybe negative, that's OK. */<br>
>>                 char part = ABS(r.particle);<br>
>>                 if (part != 1 && part != 2 && part != 3 && part !=4 &&<br>
>> part != 5) {<br>
>>                         printf("Wrong particle=%d at record=%d byte=%ld",<br>
>>                                r.particle, cnt, ftell(fp));<br>
>>                         /* Override unknown particle with a photon */<br>
>>                         r.particle = 1;<br>
>>                         assert(fseek(fp, -sizeof(struct rec), SEEK_CUR) != -1);<br>
>>                         assert(fwrite(&r, sizeof(struct rec), 1, fp) == 1);<br>
>>                         printf(" [Fixed]\n");<br>
>>                 }<br>
>>         } while(!feof(fp) && !ferror(fp));<br>
>><br>
>>         assert(fclose(fp) != -1);<br>
>><br>
>>         return 0;<br>
>> }<br>
>><br>
>> On Mon, Apr 14, 2014 at 11:43 AM, Sara Beilla <<a href="mailto:beilla.sara1@gmail.com">beilla.sara1@gmail.com</a>> wrote:<br>
>>> Dear Gaters,<br>
>>><br>
>>> I used a phase space created by PRIMO ( Software allowing to create a phase<br>
>>> space) but when i lauched my simulation i have an error message:<br>
>>><br>
>>> /home/beilla/Software/gate_v6.2/source/physics/src/GateSourcePhaseSpace.cc<br>
>>> (l.252): Source phase space: particle not available in IAEA phase space<br>
>>> format.<br>
>>><br>
>>> i didn't find solution to this problem in messages already posted.<br>
>>><br>
>>> I have already check in GateSourcePhaseSpace.cc and my phase space, my<br>
>>> particles are indentified (gamma, e-, e+)<br>
>>><br>
>>> Thank you in advance.<br>
>>><br>
>>> Best regards,<br>
>>><br>
>>> Beilla Sara<br>
>>><br>
>>> ________________________________________________<br>
>>><br>
>>> Beilla Sara<br>
>>><br>
>>> Doctorante en Charge d'Enseignement<br>
>>><br>
>>> INSERM UMR825<br>
>>> Imagerie Cérébrale & Handicaps Neurologiques<br>
>>> CHU PURPAN - Pavillon Baudot<br>
>>> Bureau 326 - 3ème étage<br>
>>> Place du Dr Baylac 31024<br>
>>> TOULOUSE - Cedex 3<br>
>>> E-mail: <a href="mailto:sara.beilla@inserm.fr">sara.beilla@inserm.fr</a><br>
</div></div></blockquote></div><br></div>