Ignore:
Timestamp:
Sep 25, 2007, 12:24:08 PM (17 years ago)
Author:
barrand
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • snovis/trunk/source/G4Lab/cxx/SoG4Trajectories.cxx

    r233 r288  
    2323// Geant4 :
    2424#include <G4RunManager.hh>
    25 #include <G4Trajectory.hh>
    2625
    2726// G4Lab :
     
    4746SoG4Trajectories::SoG4Trajectories(
    4847)
    49 :fContainer(0)
     48:fRunManager(0)
     49,fContainer(0)
    5050,fSensor(0)
    5151//////////////////////////////////////////////////////////////////////////////
     
    7878}
    7979//////////////////////////////////////////////////////////////////////////////
     80SoG4Trajectories::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//////////////////////////////////////////////////////////////////////////////
    80115SoG4Trajectories::~SoG4Trajectories(
    81116)
     
    94129//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    95130{
    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();
    99133  if(!event) return;
    100134  G4TrajectoryContainer* trajectoryContainer = event->GetTrajectoryContainer();
     
    146180          int itraj = ids[i].fTrajectory;
    147181          int ipoint = ids[i].fPoint;
    148           G4Trajectory* trajectory =
    149             (G4Trajectory*)(*trajectoryContainer)[(size_t)itraj];
     182          G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)itraj];
    150183          int pointn = trajectory->GetPointEntries();
    151184          if( (pointn==1) || (ipoint==pointn-1) ) {
    152             G4TrajectoryPoint* tp =
    153               (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint));
     185            G4VTrajectoryPoint* tp = trajectory->GetPoint(ipoint);
    154186            G4ThreeVector pos = tp->GetPosition();
    155187            glVertex3d(pos.x(),pos.y(),pos.z());
     
    163195          int itraj = ids[i].fTrajectory;
    164196          int ipoint = ids[i].fPoint;
    165           G4Trajectory* trajectory =
    166             (G4Trajectory*)(*trajectoryContainer)[(size_t)itraj];
     197          G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)itraj];
    167198          int pointn = trajectory->GetPointEntries();
    168199          if( (pointn==1) || (ipoint==pointn-1) ) {
    169200          } else {
    170             G4TrajectoryPoint* tp =
    171               (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint));
     201            G4VTrajectoryPoint* tp = trajectory->GetPoint(ipoint);
    172202            G4ThreeVector pos = tp->GetPosition();
    173203            glVertex3d(pos.x(),pos.y(),pos.z());
    174             tp = (G4TrajectoryPoint*)(trajectory->GetPoint(ipoint+1));
     204            tp = trajectory->GetPoint(ipoint+1);
    175205            pos = tp->GetPosition();
    176206            glVertex3d(pos.x(),pos.y(),pos.z());
     
    185215    int number = trajectoryContainer->entries();
    186216    for(int index=0;index<number;index++) {
    187       G4Trajectory* trajectory =
    188         (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     217      G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    189218      int pointn = trajectory->GetPointEntries();
    190219      if(pointn==1) {
    191220        glBegin(GL_POINTS);
    192         G4TrajectoryPoint* tp = (G4TrajectoryPoint*)(trajectory->GetPoint(0));
     221        G4VTrajectoryPoint* tp = trajectory->GetPoint(0);
    193222        G4ThreeVector pos = tp->GetPosition();
    194223        glVertex3d(pos.x(),pos.y(),pos.z());
     
    197226        glBegin(GL_LINE_STRIP);
    198227        for (int i = 0; i < pointn ; i++) {
    199           G4TrajectoryPoint* tp =
    200             (G4TrajectoryPoint*)(trajectory->GetPoint(i));
     228          G4VTrajectoryPoint* tp = trajectory->GetPoint(i);
    201229          G4ThreeVector pos = tp->GetPosition();
    202230          glVertex3d(pos.x(),pos.y(),pos.z());
     
    224252  aAction->setObjectSpace();
    225253
    226   G4RunManager* runManager = G4RunManager::GetRunManager();
    227   if(runManager) {
    228     const G4Event* event = runManager->GetCurrentEvent();
     254  if(fRunManager) {
     255    const G4Event* event = fRunManager->GetCurrentEvent();
    229256    if(event) {
    230257      G4TrajectoryContainer* trajectoryContainer =
     
    233260        int number = trajectoryContainer->entries();
    234261        for(int index=0;index<number;index++) {
    235           G4Trajectory* trajectory =
    236             (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     262          G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    237263          int pointn = trajectory->GetPointEntries();
    238264          if(!pointn) continue;
    239           G4TrajectoryPoint* tp =
    240             (G4TrajectoryPoint*)(trajectory->GetPoint(0));
     265          G4VTrajectoryPoint* tp = trajectory->GetPoint(0);
    241266          G4ThreeVector pos = tp->GetPosition();
    242267          SbVec3f v0;
    243268          v0.setValue((float)pos.x(),(float)pos.y(),(float)pos.z());
    244269          for (int i = 1; i < pointn ; i++) {
    245             tp = (G4TrajectoryPoint*)(trajectory->GetPoint(i));
     270            tp = trajectory->GetPoint(i);
    246271            pos = tp->GetPosition();
    247272            SbVec3f v1((float)pos.x(),(float)pos.y(),(float)pos.z());
     
    271296//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    272297{
    273   G4RunManager* runManager = G4RunManager::GetRunManager();
    274   if(runManager) {
    275     const G4Event* event = runManager->GetCurrentEvent();
     298  if(fRunManager) {
     299    const G4Event* event = fRunManager->GetCurrentEvent();
    276300    if(event) {
    277301      G4TrajectoryContainer* trajectoryContainer =
     
    287311        bool first = true;
    288312        for(int index=0;index<number;index++) {
    289           G4Trajectory* trajectory =
    290             (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     313          G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    291314          int pointn = trajectory->GetPointEntries();
    292315          for (int i = 0; i < pointn ; i++) {
    293             G4TrajectoryPoint* tp =
    294               (G4TrajectoryPoint*)(trajectory->GetPoint(i));
     316            G4VTrajectoryPoint* tp = trajectory->GetPoint(i);
    295317            G4ThreeVector pos = tp->GetPosition();
    296318            if(first) {
     
    336358}
    337359//////////////////////////////////////////////////////////////////////////////
    338 bool SoG4Trajectories::isG4LabTrajectories(
    339  G4TrajectoryContainer* aContainer
    340 )
    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 //////////////////////////////////////////////////////////////////////////////
    356360void SoG4Trajectories::timeOrder(
    357361 G4TrajectoryContainer* aContainer
     
    366370
    367371  if(!aContainer) return;
    368 
    369   if(!isG4LabTrajectories(aContainer)) return;
    370372
    371373  int number = aContainer->entries();
     
    377379  int numberOfPoints = 0;
    378380  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);
    384390      if(numberOfPoints==0) {
    385391        minTime = globalTime;
     
    392398    }
    393399  }   
     400
     401
     402
    394403  SbBool flag = enableNotify(FALSE);
    395404  timeMin.setValue((float)minTime);
     
    409418      double tmax = tmin + deltaTime;
    410419      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);
    416425          if((tmin<=globalTime) && (globalTime<tmax)) {
    417426            ids.push_back(PointIdentifier(index,i));
     
    446455//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    447456{
    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();
    451461  if(!event) return;
     462
    452463  G4TrajectoryContainer* trajectoryContainer =
    453464    event->GetTrajectoryContainer();
    454465  if(!trajectoryContainer) return;
    455 
    456   SoG4Trajectories* This = (SoG4Trajectories*)aData;
    457466
    458467  This->timeOrder(trajectoryContainer);
     
    470479//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    471480{
    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();
    475483  if(!event) return;
    476484  G4TrajectoryContainer* trajectoryContainer = event->GetTrajectoryContainer();
     
    480488  int number = trajectoryContainer->entries();
    481489  for(int index=0;index<number;index++) {
    482     G4Trajectory* trajectory =
    483       (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     490    G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    484491    int pointn = trajectory->GetPointEntries();
    485492    if(pointn>=1) {
    486493      SbVec3f* points = new SbVec3f[pointn];
    487494      for (int i = 0; i < pointn ; i++) {
    488         G4TrajectoryPoint* tp =
    489           (G4TrajectoryPoint*)(trajectory->GetPoint(i));
     495        G4VTrajectoryPoint* tp = trajectory->GetPoint(i);
    490496        G4ThreeVector pos = tp->GetPosition();
    491497        points[i].setValue((float)pos.x(),(float)pos.y(),(float)pos.z());
     
    513519 {int number = trajectoryContainer->entries();
    514520  for(int index=0;index<number;index++) {
    515     G4Trajectory* trajectory =
    516       (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     521    G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    517522    int pointn = trajectory->GetPointEntries();
    518523    if(pointn>=1) {
     
    531536  int number = trajectoryContainer->entries();
    532537  for(int index=0;index<number;index++) {
    533     G4Trajectory* trajectory =
    534       (G4Trajectory*)(*trajectoryContainer)[(size_t)index];
     538    G4VTrajectory* trajectory = (*trajectoryContainer)[(size_t)index];
    535539    int pointn = trajectory->GetPointEntries();
    536540    if(pointn>=1) {
    537541      for (int i = 0; i < pointn ; i++) {
    538         G4TrajectoryPoint* tp =
    539           (G4TrajectoryPoint*)(trajectory->GetPoint(i));
     542        G4VTrajectoryPoint* tp = trajectory->GetPoint(i);
    540543        G4ThreeVector pos = tp->GetPosition();
    541544        points[ipoint].setValue((float)pos.x(),(float)pos.y(),(float)pos.z());
Note: See TracChangeset for help on using the changeset viewer.