#ifndef TKSCENEUPDATE_H
#define TKSCENEUPDATE_H

#include <string>
#include <iostream>
#include <fstream>

#include <qobject.h>
#include <Inventor/SbLinear.h>
#include <Inventor/nodes/SoSeparator.h>
#include "Ig_Extensions/IgGeant3/interface/G3Pars.h"
#include <map>
#include <set>
using namespace std; 

class DetUnit;
//#include "CommonDet/BasicDet/interface/DetUnit.h"


class TkSceneUpdate:public QObject {
    Q_OBJECT    
public:
    TkSceneUpdate(SoSeparator *root1,SoSeparator *root2); 
    SoSeparator *root;
     SoSeparator *rootp;
    SbVec3f axis;
    float xa, ya, za, angle; 
    float posx, posy, posz;
    float hbotedge, htopedge, hapothem, hthickness; 
    int layer, anello, nmod ;
    int modulo, bar_fow, numod;
    ifstream* infile1;
    int nsimhits,lay;
    typedef set<const DetUnit *,less<const DetUnit *> > CrossedDetUnitSet;
    typedef map< const SoNode* ,const DetUnit *, less<const SoNode*> > TkPickedModuleMap;
    TkPickedModuleMap tkPickedModuleMap; 
    TkPickedModuleMap::iterator pos1;
    
    typedef map<int,DetUnit *,less<int> > TkModuleMap;
    TkModuleMap tkModuleMap; 
    TkModuleMap::iterator pos2;
    void updateSet(bool,CrossedDetUnitSet);

public slots:    
    void updateRing(bool,int,int);
    void updateModule(bool,int,int,int);
    void updateLayer(bool,int);
    void drawSimHits();
     void clear();
    
protected:     
     void loadTkModuleMap();
    
      
private:
     SoSeparator *MatrixSeparatorM[41][12][200];
     SoSeparator *MatrixSeparator[41][12];
     SoSeparator *MatrixSeparatorL[41];
     SoSeparator *del; 
     void createRotation(const DetUnit* det, SbVec3f& axis, float& angle);
     void addWafer (SoSeparator* separator, const DetUnit* det);
     SoSeparator* theSoSeparator1;
     SoSeparator* theSoSeparator;
};
#endif //TKSCENEUPDATE_H 

