Changeset 288 for snovis/trunk/source/G4Lab/cxx/SoG4Trajectories.cxx
- Timestamp:
- Sep 25, 2007, 12:24:08 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
snovis/trunk/source/G4Lab/cxx/SoG4Trajectories.cxx
r233 r288 23 23 // Geant4 : 24 24 #include <G4RunManager.hh> 25 #include <G4Trajectory.hh>26 25 27 26 // G4Lab : … … 47 46 SoG4Trajectories::SoG4Trajectories( 48 47 ) 49 :fContainer(0) 48 :fRunManager(0) 49 ,fContainer(0) 50 50 ,fSensor(0) 51 51 ////////////////////////////////////////////////////////////////////////////// … … 78 78 } 79 79 ////////////////////////////////////////////////////////////////////////////// 80 SoG4Trajectories::SoG4Trajectories( 81 G4RunManager* aRunManager 82 ) 83 :fRunManager(aRunManager) 84 ,fContainer(0) 85 ,fSensor(0) 86 ////////////////////////////////////////////////////////////////////////////// 87 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 88 { 89 SO_NODE_CONSTRUCTOR(SoG4Trajectories); 90 SO_NODE_ADD_FIELD(model,(ALL)); 91 SO_NODE_ADD_FIELD(timeStart,(0)); 92 SO_NODE_ADD_FIELD(timeInterval,(0.05F)); 93 SO_NODE_ADD_FIELD(timeSteps,(100)); 94 SO_NODE_ADD_FIELD(timeIndex,(0)); 95 96 SO_NODE_ADD_FIELD(timeMin,(0)); 97 SO_NODE_ADD_FIELD(timeMax,(0)); 98 SO_NODE_ADD_FIELD(verbose,(FALSE)); 99 100 SO_NODE_ADD_FIELD(alternateRep,(NULL)); 101 102 SO_NODE_DEFINE_ENUM_VALUE(Model,ALL); 103 SO_NODE_DEFINE_ENUM_VALUE(Model,TIMED); 104 105 SO_NODE_SET_SF_ENUM_TYPE(model,Model); 106 107 fSensor = new SoFieldSensor(sensorCB,this); 108 fSensor->attach(&timeInterval); 109 110 timeSteps.addAuditor(&timeInterval,SoNotRec::FIELD); 111 timeStart.addAuditor(&timeInterval,SoNotRec::FIELD); 112 113 } 114 ////////////////////////////////////////////////////////////////////////////// 80 115 SoG4Trajectories::~SoG4Trajectories( 81 116 ) … … 94 129 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 95 130 { 96 G4RunManager* runManager = G4RunManager::GetRunManager(); 97 if(!runManager) return; 98 const G4Event* event = runManager->GetCurrentEvent(); 131 if(!fRunManager) return; 132 const G4Event* event = fRunManager->GetCurrentEvent(); 99 133 if(!event) return; 100 134 G4TrajectoryContainer* trajectoryContainer = event->GetTrajectoryContainer(); … … 146 180 int itraj = ids[i].fTrajectory; 147 181 int ipoint = ids[i].fPoint; 148 G4Trajectory* trajectory = 149 (G4Trajectory*)(*trajectoryContainer)[(size_t)itraj]; 182 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)itraj]; 150 183 int pointn = trajectory->GetPointEntries(); 151 184 if( (pointn==1) || (ipoint==pointn-1) ) { 152 G4TrajectoryPoint* tp = 153 (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint)); 185 G4VTrajectoryPoint* tp = trajectory->GetPoint(ipoint); 154 186 G4ThreeVector pos = tp->GetPosition(); 155 187 glVertex3d(pos.x(),pos.y(),pos.z()); … … 163 195 int itraj = ids[i].fTrajectory; 164 196 int ipoint = ids[i].fPoint; 165 G4Trajectory* trajectory = 166 (G4Trajectory*)(*trajectoryContainer)[(size_t)itraj]; 197 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)itraj]; 167 198 int pointn = trajectory->GetPointEntries(); 168 199 if( (pointn==1) || (ipoint==pointn-1) ) { 169 200 } else { 170 G4TrajectoryPoint* tp = 171 (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint)); 201 G4VTrajectoryPoint* tp = trajectory->GetPoint(ipoint); 172 202 G4ThreeVector pos = tp->GetPosition(); 173 203 glVertex3d(pos.x(),pos.y(),pos.z()); 174 tp = (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint+1));204 tp = trajectory->GetPoint(ipoint+1); 175 205 pos = tp->GetPosition(); 176 206 glVertex3d(pos.x(),pos.y(),pos.z()); … … 185 215 int number = trajectoryContainer->entries(); 186 216 for(int index=0;index<number;index++) { 187 G4Trajectory* trajectory = 188 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 217 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 189 218 int pointn = trajectory->GetPointEntries(); 190 219 if(pointn==1) { 191 220 glBegin(GL_POINTS); 192 G4 TrajectoryPoint* tp = (G4TrajectoryPoint*)(trajectory->GetPoint(0));221 G4VTrajectoryPoint* tp = trajectory->GetPoint(0); 193 222 G4ThreeVector pos = tp->GetPosition(); 194 223 glVertex3d(pos.x(),pos.y(),pos.z()); … … 197 226 glBegin(GL_LINE_STRIP); 198 227 for (int i = 0; i < pointn ; i++) { 199 G4TrajectoryPoint* tp = 200 (G4TrajectoryPoint*)(trajectory->GetPoint(i)); 228 G4VTrajectoryPoint* tp = trajectory->GetPoint(i); 201 229 G4ThreeVector pos = tp->GetPosition(); 202 230 glVertex3d(pos.x(),pos.y(),pos.z()); … … 224 252 aAction->setObjectSpace(); 225 253 226 G4RunManager* runManager = G4RunManager::GetRunManager(); 227 if(runManager) { 228 const G4Event* event = runManager->GetCurrentEvent(); 254 if(fRunManager) { 255 const G4Event* event = fRunManager->GetCurrentEvent(); 229 256 if(event) { 230 257 G4TrajectoryContainer* trajectoryContainer = … … 233 260 int number = trajectoryContainer->entries(); 234 261 for(int index=0;index<number;index++) { 235 G4Trajectory* trajectory = 236 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 262 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 237 263 int pointn = trajectory->GetPointEntries(); 238 264 if(!pointn) continue; 239 G4TrajectoryPoint* tp = 240 (G4TrajectoryPoint*)(trajectory->GetPoint(0)); 265 G4VTrajectoryPoint* tp = trajectory->GetPoint(0); 241 266 G4ThreeVector pos = tp->GetPosition(); 242 267 SbVec3f v0; 243 268 v0.setValue((float)pos.x(),(float)pos.y(),(float)pos.z()); 244 269 for (int i = 1; i < pointn ; i++) { 245 tp = (G4TrajectoryPoint*)(trajectory->GetPoint(i));270 tp = trajectory->GetPoint(i); 246 271 pos = tp->GetPosition(); 247 272 SbVec3f v1((float)pos.x(),(float)pos.y(),(float)pos.z()); … … 271 296 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 272 297 { 273 G4RunManager* runManager = G4RunManager::GetRunManager(); 274 if(runManager) { 275 const G4Event* event = runManager->GetCurrentEvent(); 298 if(fRunManager) { 299 const G4Event* event = fRunManager->GetCurrentEvent(); 276 300 if(event) { 277 301 G4TrajectoryContainer* trajectoryContainer = … … 287 311 bool first = true; 288 312 for(int index=0;index<number;index++) { 289 G4Trajectory* trajectory = 290 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 313 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 291 314 int pointn = trajectory->GetPointEntries(); 292 315 for (int i = 0; i < pointn ; i++) { 293 G4TrajectoryPoint* tp = 294 (G4TrajectoryPoint*)(trajectory->GetPoint(i)); 316 G4VTrajectoryPoint* tp = trajectory->GetPoint(i); 295 317 G4ThreeVector pos = tp->GetPosition(); 296 318 if(first) { … … 336 358 } 337 359 ////////////////////////////////////////////////////////////////////////////// 338 bool SoG4Trajectories::isG4LabTrajectories(339 G4TrajectoryContainer* aContainer340 )341 //////////////////////////////////////////////////////////////////////////////342 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//343 {344 if(!aContainer) return false;345 346 int number = aContainer->entries();347 if(number<=0) return false;348 349 // Check if G4Trajectory is a G4Lab::Trajectory :350 G4Lab::Trajectory* trajectory =351 dynamic_cast<G4Lab::Trajectory*>((G4Trajectory*)(*aContainer)[(size_t)0]);352 353 return (trajectory ? true : false);354 }355 //////////////////////////////////////////////////////////////////////////////356 360 void SoG4Trajectories::timeOrder( 357 361 G4TrajectoryContainer* aContainer … … 366 370 367 371 if(!aContainer) return; 368 369 if(!isG4LabTrajectories(aContainer)) return;370 372 371 373 int number = aContainer->entries(); … … 377 379 int numberOfPoints = 0; 378 380 for(int index=0;index<number;index++) { 379 G4Lab::Trajectory* trajectory = 380 (G4Lab::Trajectory*)(*aContainer)[(size_t)index]; 381 int pointn = trajectory->GetPointEntries(); 382 for (int i = 0; i < pointn ; i++) { 383 double globalTime = trajectory->GetPointGlobalTime(i); 381 IGeant4Trajectory* trajectory = 382 dynamic_cast<IGeant4Trajectory*>((*aContainer)[(size_t)index]); 383 if(!trajectory) { 384 fTimeOrderedPoints.clear(); 385 return; 386 } 387 unsigned int pointn = trajectory->pointEntries(); 388 for (unsigned int i = 0; i < pointn ; i++) { 389 double globalTime = trajectory->pointGlobalTime(i); 384 390 if(numberOfPoints==0) { 385 391 minTime = globalTime; … … 392 398 } 393 399 } 400 401 402 394 403 SbBool flag = enableNotify(FALSE); 395 404 timeMin.setValue((float)minTime); … … 409 418 double tmax = tmin + deltaTime; 410 419 for(int index=0;index<number;index++) { 411 G4Lab::Trajectory* trajectory =412 (G4Lab::Trajectory*)(*aContainer)[(size_t)index];413 int pointn = trajectory->GetPointEntries();414 for ( int i = 0; i < pointn ; i++) {415 double globalTime = trajectory-> GetPointGlobalTime(i);420 IGeant4Trajectory* trajectory = 421 dynamic_cast<IGeant4Trajectory*>((*aContainer)[(size_t)index]); 422 unsigned int pointn = trajectory->pointEntries(); 423 for (unsigned int i = 0; i < pointn ; i++) { 424 double globalTime = trajectory->pointGlobalTime(i); 416 425 if((tmin<=globalTime) && (globalTime<tmax)) { 417 426 ids.push_back(PointIdentifier(index,i)); … … 446 455 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 447 456 { 448 G4RunManager* runManager = G4RunManager::GetRunManager(); 449 if(!runManager) return; 450 const G4Event* event = runManager->GetCurrentEvent(); 457 SoG4Trajectories* This = (SoG4Trajectories*)aData; 458 459 if(!This->fRunManager) return; 460 const G4Event* event = This->fRunManager->GetCurrentEvent(); 451 461 if(!event) return; 462 452 463 G4TrajectoryContainer* trajectoryContainer = 453 464 event->GetTrajectoryContainer(); 454 465 if(!trajectoryContainer) return; 455 456 SoG4Trajectories* This = (SoG4Trajectories*)aData;457 466 458 467 This->timeOrder(trajectoryContainer); … … 470 479 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 471 480 { 472 G4RunManager* runManager = G4RunManager::GetRunManager(); 473 if(!runManager) return; 474 const G4Event* event = runManager->GetCurrentEvent(); 481 if(!fRunManager) return; 482 const G4Event* event = fRunManager->GetCurrentEvent(); 475 483 if(!event) return; 476 484 G4TrajectoryContainer* trajectoryContainer = event->GetTrajectoryContainer(); … … 480 488 int number = trajectoryContainer->entries(); 481 489 for(int index=0;index<number;index++) { 482 G4Trajectory* trajectory = 483 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 490 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 484 491 int pointn = trajectory->GetPointEntries(); 485 492 if(pointn>=1) { 486 493 SbVec3f* points = new SbVec3f[pointn]; 487 494 for (int i = 0; i < pointn ; i++) { 488 G4TrajectoryPoint* tp = 489 (G4TrajectoryPoint*)(trajectory->GetPoint(i)); 495 G4VTrajectoryPoint* tp = trajectory->GetPoint(i); 490 496 G4ThreeVector pos = tp->GetPosition(); 491 497 points[i].setValue((float)pos.x(),(float)pos.y(),(float)pos.z()); … … 513 519 {int number = trajectoryContainer->entries(); 514 520 for(int index=0;index<number;index++) { 515 G4Trajectory* trajectory = 516 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 521 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 517 522 int pointn = trajectory->GetPointEntries(); 518 523 if(pointn>=1) { … … 531 536 int number = trajectoryContainer->entries(); 532 537 for(int index=0;index<number;index++) { 533 G4Trajectory* trajectory = 534 (G4Trajectory*)(*trajectoryContainer)[(size_t)index]; 538 G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index]; 535 539 int pointn = trajectory->GetPointEntries(); 536 540 if(pointn>=1) { 537 541 for (int i = 0; i < pointn ; i++) { 538 G4TrajectoryPoint* tp = 539 (G4TrajectoryPoint*)(trajectory->GetPoint(i)); 542 G4VTrajectoryPoint* tp = trajectory->GetPoint(i); 540 543 G4ThreeVector pos = tp->GetPosition(); 541 544 points[ipoint].setValue((float)pos.x(),(float)pos.y(),(float)pos.z());
Note: See TracChangeset
for help on using the changeset viewer.