Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
tpia_frame.cc File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tpia_target.h>
#include <tpia_misc.h>
#include "G4Types.hh"

Go to the source code of this file.

Functions

int tpia_frame_clear (statusMessageReporting *, tpia_data_frame *frame)
 
int tpia_frame_setFromElement (statusMessageReporting *smr, xData_element *element, int dimension, tpia_data_frame *frame)
 
int tpia_frame_setFromString (statusMessageReporting *smr, const char *forItem, const char *value, int dimension, tpia_data_frame *frame)
 
int tpia_frame_getDimensions (statusMessageReporting *, tpia_data_frame *frame)
 
char * tpia_frame_toString (statusMessageReporting *smr, const char *, tpia_data_frame *frame)
 
int tpia_frame_setColumns (statusMessageReporting *smr, tpia_data_frame *frame, int nColumns, int *values)
 
int tpia_frame_setColumn (statusMessageReporting *smr, tpia_data_frame *frame, int column, int value)
 
int tpia_frame_getColumn (statusMessageReporting *smr, tpia_data_frame *frame, int column)
 

Function Documentation

int tpia_frame_clear ( statusMessageReporting ,
tpia_data_frame frame 
)

Definition at line 54 of file tpia_frame.cc.

References tpia_data_frame_s::frames.

Referenced by tpia_frame_setColumns().

54  {
55 
56  frame->frames = 0;
57  return( 0 );
58 }
unsigned int frames
Definition: tpia_target.h:140
int tpia_frame_getColumn ( statusMessageReporting smr,
tpia_data_frame frame,
int  column 
)

Definition at line 214 of file tpia_frame.cc.

References tpia_data_frame_s::frames, smr_setMessageError(), and tpia_maxNumberOfFrames.

Referenced by tpia_frame_toString(), and tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum().

214  {
215 
216  unsigned int value;
217 
218  if( ( column < 0 ) || ( column >= tpia_maxNumberOfFrames ) ) {
219  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad column = %d value for getting frame (0 <= column < %d)", column, tpia_maxNumberOfFrames );
220  return( -1 ); }
221  else {
222  value = frame->frames >> ( 2 * column );
223  }
224  return( (int) ( value & 3 ) );
225 }
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
#define tpia_maxNumberOfFrames
Definition: tpia_target.h:82
unsigned int frames
Definition: tpia_target.h:140
const XML_Char int const XML_Char * value
int tpia_frame_getDimensions ( statusMessageReporting ,
tpia_data_frame frame 
)

Definition at line 122 of file tpia_frame.cc.

References tpia_data_frame_s::frames, and tpia_maxNumberOfFrames.

Referenced by tpia_frame_toString().

122  {
123 
124  int i, dimension = 0;
125  unsigned value = frame->frames;
126 
127  for( i = 0; i < tpia_maxNumberOfFrames; i++ ) {
128  if( ( value & 3 ) == 0 ) break;
129  dimension++;
130  value = value >> 2;
131  }
132  return( dimension );
133 }
#define tpia_maxNumberOfFrames
Definition: tpia_target.h:82
unsigned int frames
Definition: tpia_target.h:140
const XML_Char int const XML_Char * value
int tpia_frame_setColumn ( statusMessageReporting smr,
tpia_data_frame frame,
int  column,
int  value 
)

Definition at line 191 of file tpia_frame.cc.

References tpia_data_frame_s::frames, smr_setMessageError(), tpia_maxNumberOfFrames, tpia_referenceFrame_Max, and tpia_referenceFrame_None.

Referenced by G4GIDI_target::getElasticFinalState(), G4GIDI_target::getFinalState(), tpia_frame_setColumns(), and tpia_frame_setFromString().

191  {
192 
193  int i;
194 
195  if( ( column < 0 ) || ( column >= tpia_maxNumberOfFrames ) ) {
196  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad column = %d value for setting frame (0 <= column < %d)", column, tpia_maxNumberOfFrames );
197  return( 1 ); }
198  else {
200  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame value = %d for column = %d", value, column );
201  return( 1 ); }
202  else {
203  i = 3 << ( 2 * column );
204  frame->frames = frame->frames & (~i);
205  value = value << ( 2 * column );
206  frame->frames = frame->frames | value;
207  }
208  }
209  return( 0 );
210 }
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
#define tpia_maxNumberOfFrames
Definition: tpia_target.h:82
#define tpia_referenceFrame_None
Definition: tpia_target.h:83
unsigned int frames
Definition: tpia_target.h:140
#define tpia_referenceFrame_Max
Definition: tpia_target.h:86
const XML_Char int const XML_Char * value
int tpia_frame_setColumns ( statusMessageReporting smr,
tpia_data_frame frame,
int  nColumns,
int values 
)

Definition at line 179 of file tpia_frame.cc.

References tpia_frame_clear(), and tpia_frame_setColumn().

Referenced by tpia_decayChannel_sampleProductsAtE().

179  {
180 
181  int i;
182 
183  tpia_frame_clear( smr, frame );
184  for( i = 0; i < nColumns; i++ ) if( tpia_frame_setColumn( smr, frame, i, values[i] ) != 0 ) return( 1 );
185 
186  return( 0 );
187 }
int tpia_frame_clear(statusMessageReporting *, tpia_data_frame *frame)
Definition: tpia_frame.cc:54
int tpia_frame_setColumn(statusMessageReporting *smr, tpia_data_frame *frame, int column, int value)
Definition: tpia_frame.cc:191
int tpia_frame_setFromElement ( statusMessageReporting smr,
xData_element element,
int  dimension,
tpia_data_frame frame 
)

Definition at line 62 of file tpia_frame.cc.

References xData_element_s::fullName, tpia_frame_setFromString(), tpia_misc_setMessageError_Element(), and xData_getAttributesValueInElement().

Referenced by tpia_angular_getFromElement(), tpia_angularEnergy_getFromElement(), tpia_channel_getFromElement(), tpia_Legendre_getFromElement(), and tpia_multiplicity_getFromElement().

62  {
63 
64  char const *value = xData_getAttributesValueInElement( element, "frame" );
65 
66  if( value == NULL ) {
67  tpia_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element is missing frame attribute" );
68  return( 1 );
69  }
70  return( tpia_frame_setFromString( smr, element->fullName, value, dimension, frame ) );
71 }
int tpia_frame_setFromString(statusMessageReporting *smr, const char *forItem, const char *value, int dimension, tpia_data_frame *frame)
Definition: tpia_frame.cc:75
const char * xData_getAttributesValueInElement(xData_element *element, const char *name)
Definition: xData.cc:546
int tpia_misc_setMessageError_Element(statusMessageReporting *smr, void *userInterface, xData_element *element, const char *file, int line, int code, const char *fmt,...)
Definition: tpia_misc.cc:183
const XML_Char int const XML_Char * value
char * fullName
Definition: xData.h:185
int tpia_frame_setFromString ( statusMessageReporting smr,
const char *  forItem,
const char *  value,
int  dimension,
tpia_data_frame frame 
)

Definition at line 75 of file tpia_frame.cc.

References smr_isOk(), smr_setMessageError(), status, tpia_frame_setColumn(), tpia_maxNumberOfFrames, tpia_referenceFrame_COM, tpia_referenceFrame_lab, and tpia_referenceFrame_None.

Referenced by tpia_angular_initialize(), tpia_angularEnergy_initialize(), tpia_frame_setFromElement(), tpia_Legendre_initialize(), and tpia_multiplicity_initialize().

75  {
76 
77  char const *e;
78  int status = 1, i;
79 
80  for( i = 0; i < tpia_maxNumberOfFrames; i++ ) tpia_frame_setColumn( smr, frame, i, tpia_referenceFrame_None );
81  if( dimension > tpia_maxNumberOfFrames ) {
82  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "dimension argument = %d is greater than tpia_maxNumberOfFrames = %d", dimension,
83  tpia_maxNumberOfFrames );
84  return( status );
85  }
86  for( i = 0, e = value; ( i < dimension ) && ( *e != 0 ); i++ ) {
87  if( strstr( e, lab_Str ) == e ) {
89  e += 3; }
90  else if( strstr( e, COM_Str ) == e ) {
92  e += 12; }
93  else {
94  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame '%s' for %s", value, forItem );
95  break;
96  }
97  if( *e != 0 ) {
98  if( *e != ',' ) {
99  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad separater for frame '%s' for %s", value, forItem );
100  break;
101  }
102  e++;
103  }
104  }
105  if( smr_isOk( smr ) ) {
106  if( i == dimension ) {
107  if( *e == 0 ) {
108  status = 0; }
109  else {
110  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "extra values for frame '%s' for %s", value, forItem );
111  } }
112  else {
113  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "missing values for frame '%s' for %s", value, forItem );
114  }
115  }
116  return( status );
117 }
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
#define tpia_maxNumberOfFrames
Definition: tpia_target.h:82
#define tpia_referenceFrame_None
Definition: tpia_target.h:83
int smr_isOk(statusMessageReporting *smr)
int tpia_frame_setColumn(statusMessageReporting *smr, tpia_data_frame *frame, int column, int value)
Definition: tpia_frame.cc:191
int status
Definition: tracer.cxx:24
#define tpia_referenceFrame_lab
Definition: tpia_target.h:85
#define tpia_referenceFrame_COM
Definition: tpia_target.h:84
const XML_Char int const XML_Char * value
char* tpia_frame_toString ( statusMessageReporting smr,
const char *  ,
tpia_data_frame frame 
)

Definition at line 138 of file tpia_frame.cc.

References n, smr_setMessageError(), tpia_frame_getColumn(), tpia_frame_getDimensions(), tpia_referenceFrame_COM, tpia_referenceFrame_lab, and xData_malloc2.

138  {
139 
140  int i, n = tpia_frame_getDimensions( smr, frame ), value, nStr = 0;
141  char *str = NULL, *p;
142 
143  if( nlab_Str == 0 ) {
144  nlab_Str = strlen( lab_Str );
145  nCOM_Str = strlen( COM_Str );
146  }
147  for( i = 0; i < n; i++ ) {
148  value = tpia_frame_getColumn( smr, frame, i );
149  if( value == tpia_referenceFrame_COM ) {
150  nStr += nCOM_Str + 1; }
151  else if( value == tpia_referenceFrame_lab ) {
152  nStr += nlab_Str + 1; }
153  else {
154  smr_setMessageError( smr, NULL, __FILE__, __LINE__, 1, "bad frame value = %d for column = %d", value, i );
155  return( NULL );
156  }
157  }
158  if( nStr == 0 ) nStr = 1;
159  //if( ( str = xData_malloc2( smr, nStr, 1, "str" ) ) == NULL ) return( NULL );
160  if( ( str = (char*) xData_malloc2( smr, nStr, 1, "str" ) ) == NULL ) return( NULL );
161  for( i = 0, p = str - 1; i < n; i++ ) {
162  p++;
163  value = tpia_frame_getColumn( smr, frame, i );
164  if( value == tpia_referenceFrame_COM ) {
165  strcpy( p, COM_Str );
166  p += nCOM_Str; }
167  else {
168  strcpy( p, lab_Str );
169  p += nlab_Str;
170  }
171  *p = ',';
172  }
173  *p = 0;
174  return( str );
175 }
const char * p
Definition: xmltok.h:285
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
#define xData_malloc2(smr, size, zero, forItem)
Definition: xData.h:313
int tpia_frame_getColumn(statusMessageReporting *smr, tpia_data_frame *frame, int column)
Definition: tpia_frame.cc:214
const G4int n
#define tpia_referenceFrame_lab
Definition: tpia_target.h:85
int tpia_frame_getDimensions(statusMessageReporting *, tpia_data_frame *frame)
Definition: tpia_frame.cc:122
#define tpia_referenceFrame_COM
Definition: tpia_target.h:84
const XML_Char int const XML_Char * value