#include <transition.h>
Nevrax France
Definition at line 50 of file transition.h.
Public Types | |
enum | { ZoneEdgeCount = 4, TransitionZoneCount = 9 } |
Some define. More... | |
Public Member Functions | |
bool | build (const CMaterial &mat0, const CMaterial &mat1, const std::vector< const CZoneTemplate * > &arrayTemplate, const CLigoConfig &config, CLigoError *errors, CLigoError &mainErrors) |
bool | check (const CZoneTemplate &zoneTemplate, uint transitionNumber, const CLigoConfig &config, CLigoError &errors) const |
void | serial (NLMISC::IStream &s) |
Serial. | |
Private Attributes | |
CZoneEdge | _EdgeZone [ZoneEdgeCount] |
Static Private Attributes | |
sint32 | TransitionZoneEdges [TransitionZoneCount][4] |
Some static arries. | |
sint32 | TransitionZoneOffset [TransitionZoneCount][2] |
|
Some define.
Definition at line 55 of file transition.h.
00056 { 00057 ZoneEdgeCount = 4, 00058 TransitionZoneCount = 9, 00059 }; |
|
Build method We need 9 zone templates to create a transition set 0 1*0000* 1*0000* 1*0000* 1*0000* 1****** 111111* 1 0*1111* 0*1111* 0*1111* 0*1111* 1111* 111111* 2 0*1111* 0*1111* 0*1111* 0*1111* 0*1111* 3 111111* 111111* 111111* 111111* 1111* 0*1111* 4 0000*1* 0000*1* 0000*1* 0000*1* 0000*** 000000* 5 000000* 000000* 000000* 000000* 0000*** 0000*1* 6 000000* 000000* 000000* 000000* 111111* 7 000000* 0000*** 000*11* 00*111* 1111* 111111* 8 000000* 0* 1111*0* 1111*0* 1111*0* 1111*0* The nine zones must be assembled like this: Oy ^ | +-+-+-+-+ |5|6|7|8| +-+-+-+-+ |4|3| | | +-+-+-+-+ | |2| | | +-+-+-+-+ |0|1| | | -----------> Ox
Definition at line 68 of file transition.cpp. References _EdgeZone, NLLIGO::CMaterial::getEdge(), NLLIGO::CZoneEdge::invert(), NLLIGO::CZoneEdge::isTheSame(), NLLIGO::CLigoError::MainError, sint32, TransitionZoneCount, TransitionZoneEdges, uint, and ZoneEdgeCount.
00070 { 00071 // Check size 00072 if ((arrayTemplate.size() != TransitionZoneCount)) 00073 { 00074 // Error message 00075 mainErrors.MainError = CLigoError::UnknownError; 00076 return false; 00077 } 00078 00079 // Ok ? 00080 bool ok=true; 00081 00082 // Check zone template edge count 00083 uint i; 00084 for (i=0; i<TransitionZoneCount; i++) 00085 { 00086 // Must have 4 edges 00087 if (arrayTemplate[i]&&(arrayTemplate[i]->getEdges ().size()!=4)) 00088 { 00089 // Error code 00090 mainErrors.MainError = CLigoError::MustHave4Edges; 00091 errors[i].MainError = CLigoError::MustHave4Edges; 00092 } 00093 } 00094 00095 // continue ? 00096 if (ok) 00097 { 00098 // Get first edge 00099 _EdgeZone[0]=mat0.getEdge (); 00100 00101 // Get second edge 00102 _EdgeZone[1]=mat1.getEdge (); 00103 00104 // For the two others edges 00105 for (sint32 k=2; k<(sint32)ZoneEdgeCount; k++) 00106 { 00107 // Get the first third edge found 00108 for (i=0; i<TransitionZoneCount; i++) 00109 { 00110 // This template exist ? 00111 if (arrayTemplate[i]) 00112 { 00113 uint j; 00114 for (j=0; j<4; j++) 00115 { 00116 // Get edge 00117 sint32 edge = TransitionZoneEdges[i][j]; 00118 00119 // The good edge ? 00120 if (((edge==k+1)||(edge==-(k+1)))) 00121 { 00122 // Back the ege 00123 _EdgeZone[k]=arrayTemplate[i]->getEdges ()[j]; 00124 00125 // Invert it if negative 00126 if (edge<0) 00127 { 00128 // Invert 00129 _EdgeZone[k].invert (config); 00130 } 00131 00132 // Break 00133 break; 00134 } 00135 } 00136 if (j<4) 00137 break; 00138 } 00139 } 00140 } 00141 00142 // Get the inverted edges 00143 CZoneEdge invertedEdges[4]; 00144 for (i=0; i<4; i++) 00145 { 00146 // Copy the edge 00147 invertedEdges[i]=_EdgeZone[i]; 00148 00149 // Invert it 00150 invertedEdges[i].invert(config); 00151 } 00152 00153 // false if can't build because some template are missing 00154 bool build=true; 00155 00156 // Now check each zones against the edges 00157 for (i=0; i<TransitionZoneCount; i++) 00158 { 00159 // Template present ? 00160 if (arrayTemplate[i]) 00161 { 00162 // For each edge 00163 for (uint j=0; j<4; j++) 00164 { 00165 // Get the edge number 00166 sint32 edge=TransitionZoneEdges[i][j]; 00167 00168 // Compare the edge 00169 if (edge<0) 00170 { 00171 // The same edge ? 00172 if (!invertedEdges[-edge-1].isTheSame (arrayTemplate[i]->getEdges()[j], config, errors[i])) 00173 { 00174 ok=false; 00175 } 00176 } 00177 else 00178 { 00179 // The same edge ? 00180 if (!_EdgeZone[edge-1].isTheSame (arrayTemplate[i]->getEdges()[j], config, errors[i])) 00181 { 00182 ok=false; 00183 } 00184 } 00185 } 00186 } 00187 else 00188 // Can't build 00189 build=false; 00190 } 00191 00192 // Ok to build ? 00193 if (ok && build) 00194 { 00195 } 00196 } 00197 00198 // Return error code 00199 return ok; 00200 } |
|
Check if a transition zone template match with this transition template.
Definition at line 228 of file transition.cpp. References _EdgeZone, NLLIGO::CZoneTemplate::getEdges(), NLLIGO::CZoneEdge::invert(), NLLIGO::CZoneEdge::isTheSame(), sint32, TransitionZoneEdges, and uint.
00229 { 00230 // Return value 00231 bool ok = true; 00232 00233 // For each edge 00234 for (uint j=0; j<4; j++) 00235 { 00236 // Get the edge number 00237 sint32 edge=TransitionZoneEdges[transitionNumber][j]; 00238 00239 // Compare the edge 00240 if (edge<0) 00241 { 00242 // Invert the edge 00243 CZoneEdge invertedEdges = _EdgeZone[-edge-1]; 00244 invertedEdges.invert(config); 00245 00246 // The same edge ? 00247 if (!invertedEdges.isTheSame (zoneTemplate.getEdges()[j], config, errors)) 00248 { 00249 ok=false; 00250 } 00251 } 00252 else 00253 { 00254 // The same edge ? 00255 if (!_EdgeZone[edge-1].isTheSame (zoneTemplate.getEdges()[j], config, errors)) 00256 { 00257 ok=false; 00258 } 00259 } 00260 } 00261 00262 // Return status 00263 return ok; 00264 } |
|
Serial.
Definition at line 204 of file transition.cpp. References _EdgeZone, s, uint, uint32, and ZoneEdgeCount.
00205 { 00206 // Serial the main node 00207 s.xmlPush ("LIGO_TRANSITION"); 00208 00209 // Serial the header 00210 s.serialCheck ((uint32)'STGL'); 00211 00212 // Serial the version 00213 /*sint ver =*/ s.serialVersion (0); 00214 00215 // Serial the edgezones 00216 uint i; 00217 s.xmlPush ("EDGE_ZONES"); 00218 for (i=0; i<ZoneEdgeCount; i++) 00219 s.xmlSerial (_EdgeZone[i], "ELM"); 00220 s.xmlPop (); 00221 00222 // Close the main node 00223 s.xmlPop (); 00224 } |
|
The 4 Edges that define the transitions set the 4 transitions are: 0 : *000000* 1 : *111111* 2 : *0*1111* 3 : *0000*1* Definition at line 209 of file transition.h. |
|
Initial value: { {+2, +2, -4, +4}, {+4, +2, +2, -3}, {+1, +3, +2, -3}, {-3, +3, +2, +2}, {+1, +1, +3, -4}, {+1, +4, -4, +1}, {+4, +2, -4, +1}, {+4, +2, -3, +1}, {+3, -3, +1, +1}, }
Definition at line 38 of file transition.cpp. |
|
Initial value: { {0, 1}, {1, 1}, {1, 2}, {1, 3}, {0, 3}, {0, 4}, {1, 4}, {2, 4}, {3, 4}, } Definition at line 53 of file transition.cpp. |