Index: /DMM/DMM/BaseData.h
===================================================================
--- /DMM/DMM/BaseData.h	(revision 373)
+++ /DMM/DMM/BaseData.h	(revision 373)
@@ -0,0 +1,99 @@
+#ifndef DMM_IDATA_H
+#define DMM_IDATA_H 1
+/*!
+\class BaseData BaseData.h
+"OpAlgo/BaseData.h"
+\brief Base class for the Memory Data Class to take benefit of the RTTI 
+\author J.E Campagne
+*/
+
+//DMM
+#include "DMM/IDataServices.h"
+
+//BOOST
+#include "boost/shared_ptr.hpp"
+#include "boost/weak_ptr.hpp"
+
+//std
+#include <vector>
+#include <string>
+#include <iostream>
+
+namespace MEMPHYS {
+namespace DMM {
+
+
+class BaseData {
+ public:
+  typedef boost::shared_ptr<BaseData> SharedPtr;
+  typedef boost::weak_ptr<BaseData>   WeakPtr;
+  typedef std::vector<SharedPtr>      VecOfSharedPtr;
+  typedef std::vector<WeakPtr>        VecOfWeakPtr;
+
+
+  //!Ctor
+  BaseData(IDataServices& aService); 
+
+  //!CCtor
+  BaseData(const BaseData& aData);
+
+  //!Assignment
+  BaseData& operator=(const BaseData& aData);
+
+
+  //!Dtor
+  virtual ~BaseData() {
+    std::cout << "Destroy BaseData("<<this<<")"<<std::endl;
+  }
+
+   //! dump
+   virtual void dump(std::ostream& f, const std::string& option = "");
+
+
+  //! @name Accessors
+  //@{
+  //! Retreive index
+  const unsigned int index() const { return m_index; }
+  //! Update index
+  void setIndex(const unsigned int& value){ m_index = value; }
+  
+  //! Retreive name
+  const std::string& name() const { return m_name; }
+  //! Update name
+  void setName(const std::string& value) { m_name = value; }
+
+ //@}
+
+
+  protected:
+  //! Services
+  IDataServices& m_service;
+  
+  //! Index of the object
+  unsigned int m_index;
+
+  //! Name of the Class
+  std::string m_name;
+
+};
+
+//-------------------------------------------------------------
+
+//Generic Object function used by STL algorithm on Data
+class DataDump {
+ public:
+  DataDump(std::ostream& f, const std::string& option = "") 
+    : m_f(f), m_option(option) {}
+  void operator()(const BaseData::SharedPtr& a) const {
+    a->dump(m_f, m_option);
+  }
+  private:
+  std::ostream& m_f;
+  const std::string& m_option;
+};
+
+
+
+}
+}
+#endif // DMM_IDATA_H
Index: /DMM/DMM/CerenkovCone.h
===================================================================
--- /DMM/DMM/CerenkovCone.h	(revision 373)
+++ /DMM/DMM/CerenkovCone.h	(revision 373)
@@ -0,0 +1,72 @@
+#ifndef DMM_CERENKOVCONE_H
+#define DMM_CERENKOVCONE_H 1
+/*!
+\class CerenkovCone CerenkovCone.h
+"DMM/CerenkovCone.h"
+\brief Memory & Storable description of a Cerenkov Cone
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/CerenkovImage.h"
+#include "DMM/Position.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class CerenkovCone : public CerenkovImage {
+
+ public:
+  typedef boost::shared_ptr<CerenkovCone>  SharedPtr;
+  typedef boost::weak_ptr<CerenkovCone>    WeakPtr;
+  typedef std::vector<SharedPtr>           VecOfSharedPtr;
+  typedef std::vector<WeakPtr>             VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  CerenkovCone(IDataServices& aService);
+  //!CCtor
+  CerenkovCone(const CerenkovCone& aCerenkovCone);
+  //!Assignment
+  CerenkovCone& operator=(const CerenkovCone& aCerenkovCone); 
+
+  //!Destructor
+  virtual ~CerenkovCone() {
+    std::cout << "Destroy CerenkovCone("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful CerenkovCone* clone() const {return new CerenkovCone(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update origin
+  void setOrigin(const Position::SharedPtr& value) { m_origin = value; }
+  //! Retreive origin
+  const Position::SharedPtr& origin() const { return m_origin; }
+ //@}
+
+ protected:
+  //! localisation of the origin
+  Position::SharedPtr m_origin;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_CERENKOVCONE_H
Index: /DMM/DMM/CerenkovImage.h
===================================================================
--- /DMM/DMM/CerenkovImage.h	(revision 373)
+++ /DMM/DMM/CerenkovImage.h	(revision 373)
@@ -0,0 +1,76 @@
+#ifndef DMM_CERENKOVIMAGE_H
+#define DMM_CERENKOVIMAGE_H 1
+/*!
+\class CerenkovImage CerenkovImage.h
+"DMM/CerenkovImage.h"
+\brief Memory & Storable description of a collection of WC Digits
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/WCDigit.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class CerenkovImage : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<CerenkovImage>  SharedPtr;
+  typedef boost::weak_ptr<CerenkovImage>    WeakPtr;
+  typedef std::vector<SharedPtr>            VecOfSharedPtr;
+  typedef std::vector<WeakPtr>              VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  CerenkovImage(IDataServices& aService);
+  //!CCtor
+  CerenkovImage(const CerenkovImage& aCerenkovImage);
+  //!Assignment
+  CerenkovImage& operator=(const CerenkovImage& aCerenkovImage); 
+
+  //!Destructor
+  virtual ~CerenkovImage() {
+    std::cout << "Destroy CerenkovImage("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful CerenkovImage* clone() const {return new CerenkovImage(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update digits
+  void setDigits(const  WCDigit::VecOfSharedPtr& value) { m_digits = value; }
+  void addDigit(const WCDigit::SharedPtr& value) { m_digits.push_back(value); }
+  //! Retreive digits
+  const WCDigit::VecOfSharedPtr& digits() const { return m_digits; }
+ //@}
+
+ protected:
+  //! Container of WCDigits
+  WCDigit::VecOfSharedPtr m_digits;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_CERENKOVIMAGE_H
Index: /DMM/DMM/CerenkovParticleAss.h
===================================================================
--- /DMM/DMM/CerenkovParticleAss.h	(revision 373)
+++ /DMM/DMM/CerenkovParticleAss.h	(revision 373)
@@ -0,0 +1,85 @@
+#ifndef DMM_CERENKOVPARTICLEASS_H
+#define DMM_CERENKOVPARTICLEASS_H 1
+/*!
+\class CerenkovParticleAss CerenkovParticleAss.h
+"DMM/CerenkovParticleAss.h"
+\brief Memory & Storable description of an association between a Particle and a CerenkovImage (collection of WCDigit)
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/Particle.h"
+#include "DMM/CerenkovImage.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class CerenkovParticleAss : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<CerenkovParticleAss>  SharedPtr;
+  typedef boost::weak_ptr<CerenkovParticleAss>    WeakPtr;
+  typedef std::vector<SharedPtr>       VecOfSharedPtr;
+  typedef std::vector<WeakPtr>         VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  CerenkovParticleAss(IDataServices& aService);
+  //!CCtor
+  CerenkovParticleAss(const CerenkovParticleAss& aCerenkovParticleAss);
+  //!Assignment
+  CerenkovParticleAss& operator=(const CerenkovParticleAss& aCerenkovParticleAss); 
+
+  //!Destructor
+  virtual ~CerenkovParticleAss() {
+    std::cout << "Destroy CerenkovParticleAss("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful CerenkovParticleAss* clone() const {return new CerenkovParticleAss(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update particle 
+  void setParticle(const Particle::SharedPtr& value) { m_particle = value; }
+  //! Retreive particle
+  const Particle::SharedPtr& particle() const { return m_particle; }
+
+  //! Update image 
+  void setImage(const CerenkovImage::SharedPtr& value) { m_image = value; }
+  //! Retreive image
+  const CerenkovImage::SharedPtr& image() const { return m_image; }
+
+ //@}
+
+ protected:
+  //! The particle
+  Particle::SharedPtr m_particle;
+
+  //! The associated collection of WCDigits (CerenkovImage)
+  CerenkovImage::SharedPtr m_image;
+  
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_CERENKOVPARTICLEASS_H
Index: /DMM/DMM/DataServices.h
===================================================================
--- /DMM/DMM/DataServices.h	(revision 373)
+++ /DMM/DMM/DataServices.h	(revision 373)
@@ -0,0 +1,38 @@
+#ifndef DMM_DATASERVICES_H
+#define DMM_DATASERVICES_H 1
+/*!
+\class DataServices DataServices.h
+"DMM/DataServices.h"
+\brief Base Class for Data Services
+\author J.E Campagne
+*/
+
+//DDM
+#include "DMM/IDataServices.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class DataServices : virtual public IDataServices {
+
+  public:
+  //! Index generator services
+  virtual unsigned int getNextIndex() { return m_index++;}
+  virtual void resetIndex() { m_index = 0;}
+  virtual void setIndex(const unsigned int& value) { m_index = value;};
+
+  public:
+  //!Ctor
+  DataServices(): m_index(0) {}
+  //!Dtor
+  virtual ~DataServices() {}
+
+
+  private:
+  //! Index
+  unsigned int m_index;
+  
+};
+}
+}
+#endif // DMM_DATASERVICES_H
Index: /DMM/DMM/IDataServices.h
===================================================================
--- /DMM/DMM/IDataServices.h	(revision 373)
+++ /DMM/DMM/IDataServices.h	(revision 373)
@@ -0,0 +1,29 @@
+#ifndef DMM_IDATASERVICES_H
+#define DMM_IDATASERVICES_H 1
+/*!
+\class IDataServices IDataServices.h
+"DMM/IDataServices.h"
+\brief Pure Interface for the Data Services
+\author J.E Campagne
+*/
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices {
+
+  public:
+  //!Dtor
+  virtual ~IDataServices() {}
+
+  //! @name Services
+  //@{
+  //! Index generator services
+  virtual unsigned int getNextIndex() = 0;
+  virtual void resetIndex() = 0;
+  virtual void setIndex(const unsigned int&) =0;
+  //@}
+};
+}
+}
+#endif // DMM_IDATASERVICES_H
Index: /DMM/DMM/MCParticle.h
===================================================================
--- /DMM/DMM/MCParticle.h	(revision 373)
+++ /DMM/DMM/MCParticle.h	(revision 373)
@@ -0,0 +1,78 @@
+#ifndef DMM_MCPARTICLE_H
+#define DMM_MCPARTICLE_H 1
+/*!
+\class MCParticle MCParticle.h
+"DMM/MCParticle.h"
+\brief Memory & Storable description of a MC Particle
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/Particle.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class MCParticle : public Particle {
+
+ public:
+  typedef boost::shared_ptr<MCParticle>  SharedPtr;
+  typedef boost::weak_ptr<MCParticle>    WeakPtr;
+  typedef std::vector<SharedPtr>         VecOfSharedPtr;
+  typedef std::vector<WeakPtr>          VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  MCParticle(IDataServices& aService);
+  //!CCtor
+  MCParticle(const MCParticle& aMCParticle);
+  //!Assignment
+  MCParticle& operator=(const MCParticle& aMCParticle); 
+
+  //!Destructor
+  virtual ~MCParticle() {
+    std::cout << "Destroy MCParticle("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful MCParticle* clone() const {return new MCParticle(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update isPrimary
+  void setIsPrimary(const bool& value) { m_isPrimary = value; }
+  //! Retreive isPrimary
+  bool isPrimary() const { return m_isPrimary; }
+
+  //! Update startTime
+  void setStartTime(const float& value) { m_startTime = value; }
+  //! Retreive startTime
+  float startTime() const { return m_startTime; }
+ //@}
+
+ protected:
+  //! Is Primary
+  bool m_isPrimary;
+
+  //! Start Time
+  float m_startTime;
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_MCPARTICLE_H
Index: /DMM/DMM/MCWCHit.h
===================================================================
--- /DMM/DMM/MCWCHit.h	(revision 373)
+++ /DMM/DMM/MCWCHit.h	(revision 373)
@@ -0,0 +1,88 @@
+#ifndef DMM_MCWCHIT_H
+#define DMM_MCWCHIT_H 1
+/*!
+\class MCWCHit MCWCHit.h
+"DMM/MCWCHit.h"
+\brief Memory & Storable description of a MC WC Hit
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/WCHit.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+ class MCWCHit : public WCHit {
+
+ public:
+  typedef boost::shared_ptr<MCWCHit>  SharedPtr;
+  typedef boost::weak_ptr<MCWCHit>    WeakPtr;
+  typedef std::vector<SharedPtr>    VecOfSharedPtr;
+  typedef std::vector<WeakPtr>      VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  MCWCHit(IDataServices& aService);
+  //!CCtor
+  MCWCHit(const MCWCHit& aMCWCHit);
+  //!Assignment
+  MCWCHit& operator=(const MCWCHit& aMCWCHit); 
+
+  //!Destructor
+  virtual ~MCWCHit() {
+    std::cout << "Destroy MCWCHit("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful MCWCHit* clone() const {return new MCWCHit(*this);}
+
+
+  //! @name Accessors
+  //@{
+
+  //! Update totalPE
+  void setTotalPE(const int& value) { m_totalPE = value; }
+  //! Retreive totalPE
+  int totalPE() const { return m_totalPE; }
+
+  //! Update PEtimes
+  void setPEtimes(const std::vector<double>& value) { m_PEtimes = value; }
+  void addPETime(const double& value) { m_PEtimes.push_back(value); }
+  //! Retreive PEtimes
+  const std::vector<double>& PEtimes() const { return m_PEtimes; }
+
+ //@}
+
+ protected:
+
+  //! Total number of photoelectrons
+  int m_totalPE;
+
+  //! Container of p.e arrival time 
+  std::vector<double> m_PEtimes;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_MCWCHIT_H
Index: /DMM/DMM/Opera/OpSmartPtr.h
===================================================================
--- /DMM/DMM/Opera/OpSmartPtr.h	(revision 373)
+++ /DMM/DMM/Opera/OpSmartPtr.h	(revision 373)
@@ -0,0 +1,17 @@
+#ifndef OPUTILS_OPSMARTPTR_H
+#define OPUTILS_OPSMARTPTR_H 1
+#include "boost/smart_ptr.hpp"
+/*! 
+  \class OpSmartPtr OpSmartPtr.h
+  "OpUtils/OpSmartPtr.h"
+  \brief Provide a binding to the smart_ptr of BOOST.
+  \version 1.0
+  \author J.E Campagne
+  \date 6/3/01
+*/
+
+
+//This should be 
+#define OpSmartPtr      boost::shared_ptr
+#define OpArraySmartPtr boost::shared_array
+#endif //OPUTILS_OPSMARTPTR_H
Index: /DMM/DMM/Opera/Particle-Opera.h
===================================================================
--- /DMM/DMM/Opera/Particle-Opera.h	(revision 373)
+++ /DMM/DMM/Opera/Particle-Opera.h	(revision 373)
@@ -0,0 +1,147 @@
+#ifndef OPDATA_PARTICLE_H
+#define OPDATA_PARTICLE_H 1
+/*!
+\class Particle Particle.h
+"OpData/Particle.h"
+\brief Memory description of a Particle.
+Use C++ pointer on Vertex instead of SmartPtr to avoid cyclic loop.
+So, Particle is not owner of this C++ pointers
+\author J.E Campagne
+*/
+
+
+#include "OpAlgo/IOData.h"
+
+
+class Particle;
+typedef OpSmartPtr<Particle>     ParticlePtr;
+typedef std::list<ParticlePtr>   ParticleList;
+typedef std::vector<ParticlePtr> ParticleVector;
+
+//Put after the SmartPtr declaration
+/* JEC 200/5/03 To bee compatible with  RH 6.1 
+ */
+//#include "OpData/Vertex.h"
+class Vertex;
+typedef OpSmartPtr<Vertex>     VertexPtr;
+
+
+class Particle : public IOData {
+
+ private:
+  //! typedef to be close to ROOT definitions
+  typedef int    Int_t;
+  typedef float  Float_t;
+  typedef double Double_t;
+
+ public:
+  //!Constructor
+  Particle() :
+    m_pdgCode(0),
+    m_statusCode(0),
+    m_pX(0.),
+    m_pY(0.),
+    m_pZ(0.),
+    m_energy(0.)
+    {    
+      m_index = nextId++;
+      m_prodVertex  = 0;
+      m_decayVertex = 0;
+    }
+
+  //!Destructor
+  virtual ~Particle() {}
+  //! Use the copy constructor to clone
+  Particle* clone() const {return new Particle(*this);}
+
+  //! @name Accessors
+  //@{
+  //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+
+  
+  //! Update pdgCode
+  void setPdgCode(const Int_t& value) { m_pdgCode = value; }
+  //! Retreive pdgCode
+  Int_t pdgCode()       { return m_pdgCode; }
+  Int_t pdgCode() const { return m_pdgCode; }
+
+  //! Update statusCode
+  void setStatusCode(const Int_t& value) { m_statusCode = value; }
+  //! Retreive statusCode
+  Int_t statusCode()       { return m_statusCode; }
+  Int_t statusCode() const { return m_statusCode; }
+
+  //! Update pX
+  void setPX(const Double_t& value) { m_pX = value; }
+  //! Retreive pX
+  Double_t pX()       { return m_pX; }
+  Double_t pX() const { return m_pX; }
+
+  //! Update pY
+  void setPY(const Double_t& value) { m_pY = value; }
+  //! Retreive pY
+  Double_t pY()       { return m_pY; }
+  Double_t pY() const { return m_pY; }
+
+  //! Update pZ
+  void setPZ(const Double_t& value) { m_pZ = value; }
+  //! Retreive pZ
+  Double_t pZ()       { return m_pZ; }
+  Double_t pZ() const { return m_pZ; }
+
+  //! Update energy
+  void setEnergy(const Double_t& value) { m_energy = value; }
+  //! Retreive energy
+  Double_t energy()       { return m_energy; }
+  Double_t energy() const { return m_energy; }
+
+  //! Update prodVertex
+  void setProdVertex(const VertexPtr& value) { m_prodVertex = value.get(); }
+  //! Retreive prodVertex
+  Vertex* prodVertex()       { return m_prodVertex; }
+  Vertex* prodVertex() const { return m_prodVertex; }
+
+  //! Update decayVertex
+  void setDecayVertex(const VertexPtr& value) {
+    m_decayVertex = value.get();
+  }
+  //! Retreive decayVertex
+  Vertex* decayVertex()       { return m_decayVertex; }
+  Vertex* decayVertex() const { return m_decayVertex; }
+  //@}
+
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list
+   */
+  long m_index;
+
+  //Particle PDG Code
+  Int_t m_pdgCode;
+
+  //not yet very well defined 
+  Int_t m_statusCode;
+
+  //Px, PY, PZ, E
+  Double_t m_pX;
+  Double_t m_pY;
+  Double_t m_pZ;
+  Double_t m_energy;
+
+  //Production vertex reference
+  Vertex* m_prodVertex;
+
+  //Decay vertex reference if any
+  Vertex* m_decayVertex;
+
+
+};
+#endif // OPDATA_PARTICLE_H
Index: /DMM/DMM/Opera/TSCINDigit.h
===================================================================
--- /DMM/DMM/Opera/TSCINDigit.h	(revision 373)
+++ /DMM/DMM/Opera/TSCINDigit.h	(revision 373)
@@ -0,0 +1,202 @@
+#ifndef OPDATA_TSCINDIGIT_H
+#define OPDATA_TSCINDIGIT_H 1
+/*!
+\class TSCINDigit TSCINDigit.h
+"OpData/TSCINDigit.h"
+\brief Target Scintillator Digit
+\author J.E Campagne + L. Chaussard
+\date 06/03
+*/
+
+
+#include "OpAlgo/IOData.h"
+
+class TSCINDigit;
+typedef OpSmartPtr<TSCINDigit>     TSCINDigitPtr;
+typedef std::list<TSCINDigitPtr>   TSCINDigitList;
+typedef std::vector<TSCINDigitPtr> TSCINDigitVector;
+
+//JEC 29/10/02 for the Orientation
+#include "OpUtils/RecoUtils.h" 
+
+//JEC 25/4/03
+#include "OpData/TSCINHit.h"
+
+
+class TSCINDigit : public IOData {
+
+ private:
+  //! typedef to be close to ROOT definitions
+  typedef int   Int_t;
+  typedef float Float_t;
+
+ public:
+  //!Constructor
+  TSCINDigit(): 
+    m_x(0.),
+    m_y(0.),
+    m_z(0.),
+    m_bar(0),
+    m_box(0),
+    m_wall(0),
+    m_sm(0),
+    m_peLeft(0.),
+    m_peRight(0.),
+    m_orientation(RecoUtils::HORIZONTAL),
+    m_detector(RecoUtils::TSCI) { 
+      m_index = nextId++;
+      m_hit = TSCINHitList();
+    }
+
+  //!Destructor
+  virtual ~TSCINDigit() {  }
+  
+  //! Use the copy constructor to clone JEC 12/6
+  TSCINDigit* clone() const {return new TSCINDigit(*this);}
+
+  //! @name Accessors
+  //@{
+    //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+  
+  //! Retreive orientation
+  const RecoUtils::Orientation& orientation() const { return m_orientation;}
+        RecoUtils::Orientation& orientation()       { return m_orientation;}
+  //! Update orientation
+  void setOrientation(const RecoUtils::Orientation& value){ 
+    m_orientation = value; }
+
+
+  //! Update X
+  void setX(Float_t value) { m_x = value; }
+  //! Retreive x
+  Float_t x()       { return m_x; }
+  Float_t x() const { return m_x; }
+  
+  //! Update Y
+  void setY(const Float_t& value) { m_y = value; }
+  //! Retreive y
+  Float_t y()       { return m_y; }
+  Float_t y() const { return m_y; }
+  
+  //! Update Z
+  void setZ(const Float_t& value) { m_z = value; }
+  //! Retreive z
+  Float_t z()       { return m_z; }
+  Float_t z() const { return m_z; }
+  
+  //! Update bar
+  void setBar(const Int_t& value) { m_bar = value; }
+  //! Retreive bar
+  Int_t bar()       { return m_bar; }
+  Int_t bar() const { return m_bar; }
+
+  //! Update box
+  void setBox(const Int_t& value) { m_box = value; }
+  //! Retreive box
+  Int_t box()       { return m_box; }
+  Int_t box() const { return m_box; }
+  
+  //! Update wall
+  void setWall(const Int_t& value) { m_wall = value; }
+  //! Retreive wall
+  Int_t wall()       { return m_wall; }
+  Int_t wall() const { return m_wall; }
+
+  //! Update sm
+  void setSM(const Int_t& value) { m_sm = value; }
+  //! Retreive sm
+  Int_t sm()       { return m_sm; }
+  Int_t sm() const { return m_sm; }
+
+  //! Update peLeft
+  void setPeLeft(const Float_t& value) { m_peLeft = value; }
+  //! Retreive peLeft
+  Float_t peLeft()       { return m_peLeft; }
+  Float_t peLeft() const { return m_peLeft; }
+  
+  //! Update peRight
+  void setPeRight(const Float_t& value) { m_peRight = value; }
+  //! Retreive peRight
+  Float_t peRight()       { return m_peRight; }
+  Float_t peRight() const { return m_peRight; }
+
+  //! Retreive detector
+  const RecoUtils::DetectorName& detector() const { return m_detector;}
+  RecoUtils::DetectorName& detector()       { return m_detector;}
+  //! Update detector
+  void setDetector(const RecoUtils::DetectorName& value){ 
+    m_detector = value; }
+
+  //! Update Hit JEC 24/4/03
+  void addHit(const TSCINHitPtr& value) { 
+    m_hit.push_back(value); }
+  //! Retreive Hit JEC 24/4/03
+  const TSCINHitList& hit() const { return m_hit; }
+  TSCINHitList&       hit()       { return m_hit; }
+
+ //@}
+  
+  //! Dump
+  virtual void dump();
+
+  //! Width of a Target Scintillator slab: should be put elsewhere!
+  static const float StripWidth;
+  
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list
+   */
+  long m_index;
+
+  //! X
+  Float_t m_x;
+  //! Y
+  Float_t m_y;
+  //! Z
+  Float_t m_z;
+  //! volume identification
+  Int_t   m_bar;
+  Int_t   m_box;
+  Int_t   m_wall;
+  Int_t   m_sm;
+  //! number of photoelectron left side
+  Float_t   m_peLeft;
+  //! number of photoelectron left side
+  Float_t   m_peRight;
+  //! orientation of the strip
+  RecoUtils::Orientation m_orientation;
+  /*!  Detector name
+   */
+  RecoUtils::DetectorName m_detector;
+
+  //! The original Hit JEC 24/4/03
+  TSCINHitList m_hit;
+
+};
+
+
+inline void TSCINDigit::dump() {
+  cout << "TSCINDigit["  << m_index <<"]"
+       << " detector: " <<  RecoUtils::toString(m_detector)
+       << " Ori: " << RecoUtils::toString(m_orientation)
+       << " X: " << m_x 
+       << " Y: " << m_y 
+       << " Z: " << m_z
+       << " Bar: " << m_bar
+       << " Box: " << m_box
+       << " Wall: " << m_wall
+       << " SM: " << m_sm
+       << " PE Left: " << m_peLeft
+       << " PE Right: " << m_peRight
+       << endl;
+}//dump
+
+#endif // OPDATA_TSCINDIGIT_H
Index: /DMM/DMM/Opera/TSCINHit.h
===================================================================
--- /DMM/DMM/Opera/TSCINHit.h	(revision 373)
+++ /DMM/DMM/Opera/TSCINHit.h	(revision 373)
@@ -0,0 +1,164 @@
+#ifndef OPDATA_TSCINHIT_H
+#define OPDATA_TSCINHIT_H 1
+/*!
+\class TSCINHit TSCINHit.h
+"OpData/TSCINHit.h"
+\brief Memory description of a Target Scintillator Hit
+\author J.E Campagne
+*/
+
+
+#include "OpAlgo/IOData.h"
+#include "OpData/Particle.h"
+
+class TSCINHit;
+typedef OpSmartPtr<TSCINHit>     TSCINHitPtr;
+typedef std::list<TSCINHitPtr>   TSCINHitList;
+typedef std::vector<TSCINHitPtr> TSCINHitVector;
+
+
+class TSCINHit : public IOData {
+
+ private:
+  //! typedef to be close to ROOT definitions
+  typedef int   Int_t;
+  typedef float Float_t;
+
+ public:
+  //!Constructor
+  TSCINHit():
+    m_x(0.),
+    m_y(0.),
+    m_z(0.),
+    m_sciBar(0),
+    m_sciBox(0),
+    m_sciWall(0),
+    m_sciSM(0),
+    m_eDep(0.)
+    {    
+      m_index = nextId++;
+      m_localParticle   = ParticlePtr(0);
+      m_primaryParticle = ParticlePtr(0);
+      m_motherParticle  = ParticlePtr(0);
+    }
+
+  //!Destructor
+  virtual ~TSCINHit() {}
+  //! Use the copy constructor to clone
+  TSCINHit* clone() const {return new TSCINHit(*this);}
+
+  //! @name Accessors
+  //@{
+    //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+
+  //! Update X
+  void setX(Float_t value) { m_x = value; }
+  //! Retreive x
+  Float_t x()       { return m_x; }
+  Float_t x() const { return m_x; }
+  
+  //! Update Y
+  void setY(const Float_t& value) { m_y = value; }
+  //! Retreive y
+  Float_t y()       { return m_y; }
+  Float_t y() const { return m_y; }
+  
+  //! Update Z
+  void setZ(const Float_t& value) { m_z = value; }
+  //! Retreive z
+  Float_t z()       { return m_z; }
+  Float_t z() const { return m_z; }
+
+
+  //! Update sciBar
+  void setSciBar(const Int_t& value) { m_sciBar = value; }
+  //! Retreive sciBar
+  Int_t sciBar()       { return m_sciBar; }
+  Int_t sciBar() const { return m_sciBar; }
+
+ //! Update sciBox
+  void setSciBox(const Int_t& value) { m_sciBox = value; }
+  //! Retreive sciBox
+  Int_t sciBox()       { return m_sciBox; }
+  Int_t sciBox() const { return m_sciBox; }
+
+ //! Update sciWall
+  void setSciWall(const Int_t& value) { m_sciWall = value; }
+  //! Retreive sciWall
+  Int_t sciWall()       { return m_sciWall; }
+  Int_t sciWall() const { return m_sciWall; }
+
+ //! Update sciSM
+  void setSciSM(const Int_t& value) { m_sciSM = value; }
+  //! Retreive sciSM
+  Int_t sciSM()       { return m_sciSM; }
+  Int_t sciSM() const { return m_sciSM; }
+
+  //! Update eDep
+  void setEDep(const Float_t& value) { m_eDep = value; }
+  //! Retreive eDep
+  Float_t eDep()       { return m_eDep; }
+  Float_t eDep() const { return m_eDep; }
+
+  //! Update localParticle
+  void setLocalParticle(const ParticlePtr& value) { m_localParticle = value;}
+  //! Retreive localParticle
+  ParticlePtr localParticle() const { return m_localParticle;}
+  ParticlePtr localParticle()       { return m_localParticle;}
+
+  //! Update primaryParticle
+  void setPrimaryParticle(const ParticlePtr& value) { m_primaryParticle = value;}
+  //! Retreive primaryParticle
+  ParticlePtr primaryParticle() const { return m_primaryParticle;}
+  ParticlePtr primaryParticle()       { return m_primaryParticle;}
+
+  //! Update motherParticle
+  void setMotherParticle(const ParticlePtr& value) { m_motherParticle = value;}
+  //! Retreive motherParticle
+  ParticlePtr motherParticle() const { return m_motherParticle;}
+  ParticlePtr motherParticle()       { return m_motherParticle;}
+
+ //@}
+
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list
+   */
+  long m_index;
+
+  //! X
+  Float_t m_x;
+  //! Y
+  Float_t m_y;
+  //! Z
+  Float_t m_z;
+
+  //! Volume identification
+  Int_t   m_sciBar;
+  Int_t   m_sciBox;
+  Int_t   m_sciWall;
+  Int_t   m_sciSM;
+
+  //! deposited energy
+  Float_t m_eDep;
+
+  //!Local State of the Particle that produces the hits
+  ParticlePtr m_localParticle;
+
+  //!Primary Particle
+  ParticlePtr m_primaryParticle;
+
+  //!Mother Particle
+  ParticlePtr m_motherParticle;
+
+  
+};
+#endif // OPDATA_TSCINHIT_H
Index: /DMM/DMM/Opera/TrackElement-Opera.h
===================================================================
--- /DMM/DMM/Opera/TrackElement-Opera.h	(revision 373)
+++ /DMM/DMM/Opera/TrackElement-Opera.h	(revision 373)
@@ -0,0 +1,98 @@
+#ifndef OPDATA_TRACKELEMENT_H
+#define OPDATA_TRACKELEMENT_H 1
+/*!
+\class TrackElement TrackElement.h
+"OpData/TrackElement.h"
+\brief Track Element which is the output of the OpData. Contains the list
+of original IOData (Generic Digit in that case) used by the associated 
+PatSegment. 
+\author J.E Campagne
+*/
+
+
+#include "OpAlgo/IOData.h"
+#include "OpUtils/RecoUtils.h"
+
+class TrackElement;
+typedef OpSmartPtr<TrackElement>     TrackElementPtr;
+typedef std::list<TrackElementPtr>   TrackElementList;
+typedef std::vector<TrackElementPtr> TrackElementVector;
+
+class TrackElement : public IOData {
+ public:
+  //! Ctor
+  TrackElement() {
+    m_ioDataList = IODataList();
+
+    m_index = nextId++;
+    m_view = RecoUtils::UNKNOWNVIEW;
+  }
+  //! Dtor
+  virtual ~TrackElement() {}
+
+  //! Use the copy constructor to clone JEC 12/6
+  TrackElement* clone() const {return new TrackElement(*this);}
+
+
+  //! @name Accessor members
+  //@{
+  //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+
+  //AC:01/10/03 Add a view code
+  //! Retreive view
+        RecoUtils::ViewCode& view()       { return m_view;}
+  const RecoUtils::ViewCode& view() const { return m_view;}
+//! Update view code
+  void setView(const RecoUtils::ViewCode& value){ m_view = value; }
+  
+  //! Retreive ioData
+  const IODataList& ioDataList() const { return m_ioDataList; }
+  IODataList& ioDataList() { return m_ioDataList; }
+  //! Update ioData
+  void addIOData(const IODataList& aIOL) {
+    m_ioDataList.insert(m_ioDataList.end(),
+		     aIOL.begin(),
+		     aIOL.end()
+		     );
+  }
+  //@}
+  
+  //! Dump the structure
+  virtual void dump();
+
+
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list   */
+  long m_index;
+
+  //! List of IOData used by the Pattern
+  IODataList m_ioDataList;
+
+  //! View of the Track Element (AC) 3/10/03
+  RecoUtils::ViewCode m_view;
+
+};
+
+//-----------------------------------------------------------
+
+inline void TrackElement::dump() {
+  cout << "TElement [" << m_index << "]  contains " 
+       << m_ioDataList.size() << " digits in view " << RecoUtils::toString(m_view) << endl;
+  IODataList::const_iterator iData;
+  for (iData = m_ioDataList.begin();
+       iData!= m_ioDataList.end();
+       ++iData) {
+    (*iData)->dump();
+  }
+}//dump
+
+#endif // OPDATA_TRACKELEMENT_H
Index: /DMM/DMM/Opera/TrackKinematics-Opera.h
===================================================================
--- /DMM/DMM/Opera/TrackKinematics-Opera.h	(revision 373)
+++ /DMM/DMM/Opera/TrackKinematics-Opera.h	(revision 373)
@@ -0,0 +1,110 @@
+#ifndef OPDATA_TRACKKINEMATICS_H
+#define OPDATA_TRACKKINEMATICS_H 1
+/*!
+\class TrackKinematics TrackKinematics.h
+"OpData/TrackKinematics.h"
+\brief Track Kinematical variables. Contains the 
+of original TrackElement used by the Fit algorithm. 
+\author J.E Campagne
+*/
+
+
+#include "OpAlgo/IOData.h"
+#include "OpMath/RecVector.h"
+#include "OpMath/RecVariance.h"
+#include "OpData/TrackElement.h"
+
+class TrackKinematics;
+typedef OpSmartPtr<TrackKinematics>     TrackKinematicsPtr;
+typedef std::list<TrackKinematicsPtr>   TrackKinematicsList;
+typedef std::vector<TrackKinematicsPtr> TrackKinematicsVector;
+
+
+class TrackKinematics : public IOData {
+ public:
+  //! Ctor
+  TrackKinematics() {
+    m_TEList = TrackElementList();
+    m_parameter = RecVector();
+    m_variance  = RecVariance();
+    
+    m_index = nextId++;
+  }
+  //! Dtor
+  virtual ~TrackKinematics() {}
+
+  //! Use the copy constructor to clone
+  TrackKinematics* clone() const {return new TrackKinematics(*this);}
+
+
+  //! @name Accessor members
+  //@{
+  //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+  
+  //! Retreive parameter
+  const RecVector& parameter() const { return m_parameter;}
+  RecVector& parameter()       { return m_parameter;}
+  //! Update parameter
+  void setParameter(const RecVector& value) { m_parameter = value; }
+
+  //! Retreive variance
+  const RecVariance& variance() const { return m_variance;}
+  RecVariance& variance()       { return m_variance;}
+  //! Update variance
+  void setVariance(const RecVariance& value) { m_variance = value; }
+  
+  //! Retreive TrackElement
+  const TrackElementList& TEList() const { return m_TEList; }
+  TrackElementList& TE() { return m_TEList; }
+  //! Update TrackElement
+  void setTEList(const TrackElementList& value) { m_TEList = value; }
+  //@}
+  
+  //! Dimensionality of the Parameter/Variance
+  int dimension() {return m_parameter.num_row();}
+
+
+  //! Dump the structure
+  void dump();
+
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list
+   */
+  long m_index;
+  
+  //! Input TrackElement
+  TrackElementList m_TEList;
+  
+  //! Parameter at First Digits
+  RecVector m_parameter;
+
+  //! Variance  at First Digits
+  RecVariance m_variance;
+
+};
+
+//-----------------------------------------------------------
+
+inline void TrackKinematics::dump() {
+  cout << "TKinematics ["<< m_index << "]"
+       << " contains " << m_TEList.size() << " TE: <";
+
+  TrackElementList::const_iterator iTE;
+  for(iTE = m_TEList.begin();
+      iTE!= m_TEList.end();
+      ++iTE) {
+    cout << (*iTE)->index() << " ";
+  }
+  cout << ">" << endl;
+}//dump
+
+#endif // OPDATA_TRACKKINEMATICS_H
Index: /DMM/DMM/Opera/Vertex-opera.h
===================================================================
--- /DMM/DMM/Opera/Vertex-opera.h	(revision 373)
+++ /DMM/DMM/Opera/Vertex-opera.h	(revision 373)
@@ -0,0 +1,122 @@
+#ifndef OPDATA_VERTEX_H
+#define OPDATA_VERTEX_H 1
+/*!
+\class Vertex Vertex.h
+"OpData/Vertex.h"
+\brief Memory description of a Vertex.
+\author J.E Campagne
+*/
+
+
+#include "OpAlgo/IOData.h"
+
+
+class Vertex;
+typedef OpSmartPtr<Vertex>     VertexPtr;
+typedef std::list<VertexPtr>   VertexList;
+typedef std::vector<VertexPtr> VertexVector;
+
+//Put after the SmartPtr declaration
+#include "OpData/Particle.h"
+
+class Vertex : public IOData {
+
+ private:
+  //! typedef to be close to ROOT definitions
+  typedef int    Int_t;
+  typedef float  Float_t;
+  typedef double Double_t;
+
+ public:
+  //!Constructor
+  Vertex() :
+    m_statusCode(0),
+    m_x(0.),
+    m_y(0.),
+    m_z(0.),
+    m_incomingPart(0)
+    {    
+      m_index = nextId++;
+      m_outgoingParts = ParticleList();
+    }
+
+  //!Destructor
+  virtual ~Vertex() {}
+  //! Use the copy constructor to clone
+  Vertex* clone() const {return new Vertex(*this);}
+
+  //! @name Accessors
+  //@{
+  //! Retreive index
+  long index() const { return m_index;}
+  long index()       { return m_index;}
+  //! Update index
+  void setIndex(long value){ m_index = value; }
+  static void resetId() { nextId = 0;}
+  static void setNextId(long value) { nextId = value;}
+
+  //! Update statusCode
+  void setStatusCode(const Int_t& value) { m_statusCode = value; }
+  //! Retreive statusCode
+  Int_t statusCode()       { return m_statusCode; }
+  Int_t statusCode() const { return m_statusCode; }
+
+  //! Update X
+  void setX(Float_t value) { m_x = value; }
+  //! Retreive x
+  Float_t x()       { return m_x; }
+  Float_t x() const { return m_x; }
+  
+  //! Update Y
+  void setY(const Float_t& value) { m_y = value; }
+  //! Retreive y
+  Float_t y()       { return m_y; }
+  Float_t y() const { return m_y; }
+  
+  //! Update Z
+  void setZ(const Float_t& value) { m_z = value; }
+  //! Retreive z
+  Float_t z()       { return m_z; }
+  Float_t z() const { return m_z; }
+
+  //! Update incomingPart
+  void setIncomingPart(const ParticlePtr& value) { m_incomingPart = value;}
+  //! Retreive incomingPart
+  const ParticlePtr& incomingPart() const { return m_incomingPart; }
+  ParticlePtr&       incomingPart()       { return m_incomingPart; }
+
+  //! Update outgoingParts
+  void addOutgoingPart(const ParticlePtr& value) {
+    m_outgoingParts.push_back(value);
+  }
+  //! Retreive outgoingParts
+  const ParticleList& outgoingParts() const { return m_outgoingParts; }
+  ParticleList&       outgoingParts()       { return m_outgoingParts; }
+  //@}
+
+ private:
+  /*! Counter
+   */
+  static long nextId;
+  /*! Index of the object in the list
+   */
+  long m_index;
+
+  //not yet very well defined 
+  Int_t m_statusCode;
+
+  //! X
+  Float_t m_x;
+  //! Y
+  Float_t m_y;
+  //! Z
+  Float_t m_z;
+
+  //! Reference to the Incoming Particle
+  ParticlePtr m_incomingPart;
+  
+  //! References to the Outgoing Particles
+  ParticleList m_outgoingParts;
+
+};
+#endif // OPDATA_VERTEX_H
Index: /DMM/DMM/Particle.h
===================================================================
--- /DMM/DMM/Particle.h	(revision 373)
+++ /DMM/DMM/Particle.h	(revision 373)
@@ -0,0 +1,116 @@
+#ifndef DMM_PARTICLE_H
+#define DMM_PARTICLE_H 1
+/*!
+\class Particle Particle.h
+"DMM/Particle.h"
+\brief Memory & Storable description of a Partcicle
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/Position.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class Particle : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<Particle>  SharedPtr;
+  typedef boost::weak_ptr<Particle>    WeakPtr;
+  typedef std::vector<SharedPtr>       VecOfSharedPtr;
+  typedef std::vector<WeakPtr>         VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  Particle(IDataServices& aService);
+  //!CCtor
+  Particle(const Particle& aParticle);
+  //!Assignment
+  Particle& operator=(const Particle& aParticle); 
+
+  //!Destructor
+  virtual ~Particle() {
+    std::cout << "Destroy Particle("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful Particle* clone() const {return new Particle(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update PDGId
+  void setPDGId(const int& value) { m_PDGId = value; }
+  //! Retreive PDGId
+  int PDGId() const { return m_PDGId; }
+  
+  //! Update momentum
+  void setMomentum(const std::vector<double>& value) { m_momentum = value; }
+  void setMomentum(const double& Px,
+		   const double& Py,
+		   const double& Pz,
+		   const double& Etot,
+		   const double& Mass) {
+    m_momentum[0] = Px;
+    m_momentum[1] = Py;
+    m_momentum[2] = Pz;
+    m_momentum[3] = Etot;
+    m_momentum[4] = Mass;
+  }
+  //! Retreive momentum
+  const std::vector<double>& momentum() const { return m_momentum; }
+  double pX() const   { return m_momentum[0]; }
+  double pY() const   { return m_momentum[1]; }
+  double pZ() const   { return m_momentum[2]; }
+  double eTot() const { return m_momentum[3]; }
+  double mass() const { return m_momentum[4]; }
+
+  //! Update prodPoint 
+  void setProdPoint(const Position::SharedPtr& value) { m_prodPoint = value; }
+  //! Retreive prodPoint
+  const Position::SharedPtr& prodPoint() const { return m_prodPoint; }
+
+  //! Update endPoint 
+  void setEndPoint(const Position::SharedPtr& value) { m_endPoint = value; }
+  //! Retreive endPoint
+  const Position::SharedPtr& endPoint() const { return m_endPoint; }
+
+ //@}
+
+ protected:
+  //! PDG Id
+  int m_PDGId;
+  
+  //! Px, Py, Pz, Etot, m
+  std::vector<double> m_momentum;
+
+  //! Production point
+  Position::SharedPtr m_prodPoint;
+
+  //! End point
+  Position::SharedPtr m_endPoint;
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_PARTICLE_H
Index: /DMM/DMM/Position.h
===================================================================
--- /DMM/DMM/Position.h	(revision 373)
+++ /DMM/DMM/Position.h	(revision 373)
@@ -0,0 +1,90 @@
+#ifndef DMM_POSITION_H
+#define DMM_POSITION_H 1
+/*!
+\class Position Position.h
+"DMM/Position.h"
+\brief Memory & Storable description of a 3D space point
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class Position : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<Position>  SharedPtr;
+  typedef boost::weak_ptr<Position>    WeakPtr;
+  typedef std::vector<SharedPtr>       VecOfSharedPtr;
+  typedef std::vector<WeakPtr>         VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  Position(IDataServices& aService);
+  //!CCtor
+  Position(const Position& aPosition);
+  //!Assignment
+  Position& operator=(const Position& aPosition); 
+
+  //!Destructor
+  virtual ~Position() {
+    std::cout << "Destroy Position("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful Position* clone() const {return new Position(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update X
+  void setX(const float& value) { m_x = value; }
+  //! Retreive x
+  float x() const { return m_x; }
+  
+  //! Update Y
+  void setY(const float& value) { m_y = value; }
+  //! Retreive y
+  float y() const { return m_y; }
+  
+  //! Update Z
+  void setZ(const float& value) { m_z = value; }
+  //! Retreive z
+  float z() const { return m_z; }
+
+ //@}
+
+ protected:
+  //! X
+  float m_x;
+  //! Y
+  float m_y;
+  //! Z
+  float m_z;
+  
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_POSITION_H
Index: /DMM/DMM/Vertex.h
===================================================================
--- /DMM/DMM/Vertex.h	(revision 373)
+++ /DMM/DMM/Vertex.h	(revision 373)
@@ -0,0 +1,97 @@
+#ifndef DMM_VERTEX_H
+#define DMM_VERTEX_H 1
+/*!
+\class Vertex Vertex.h
+"DMM/Vertex.h"
+\brief Memory & Storable description of a Vertex
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/Position.h"
+#include "DMM/Particle.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class Vertex : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<Vertex>  SharedPtr;
+  typedef boost::weak_ptr<Vertex>    WeakPtr;
+  typedef std::vector<SharedPtr>     VecOfSharedPtr;
+  typedef std::vector<WeakPtr>       VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  Vertex(IDataServices& aService);
+  //!CCtor
+  Vertex(const Vertex& aVertex);
+  //!Assignment
+  Vertex& operator=(const Vertex& aVertex); 
+
+  //!Destructor
+  virtual ~Vertex() {
+    std::cout << "Destroy Vertex("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful Vertex* clone() const {return new Vertex(*this);}
+
+
+  //! @name Accessors
+  //@{
+
+  //! Update position 
+  void setPosition(const Position::SharedPtr& value) { m_position = value; }
+  //! Retreive position
+  const Position::SharedPtr& position() const { return m_position; }
+
+  //! Update incomingPart 
+  void setIncomingPart(const Particle::SharedPtr& value) { m_incomingPart = value; }
+  //! Retreive incomingPart
+  const Particle::SharedPtr& incomingPart() const { return m_incomingPart; }
+
+  //! Update outgoingParts
+  void setOutgiongParts(const Particle::VecOfSharedPtr& value) { m_outgoingParts = value; }
+  void addOutgiongPart(const Particle::SharedPtr& value) {
+    m_outgoingParts.push_back(value);
+  }
+  //! Retreive outgoingParts
+  const Particle::VecOfSharedPtr& outgoingParts() const { return  m_outgoingParts; }
+
+ //@}
+
+ protected:
+  //! Position location
+  Position::SharedPtr m_position;
+
+  //! Incoming particle
+  Particle::SharedPtr m_incomingPart;
+
+  //! Outgoing particles
+  Particle::VecOfSharedPtr m_outgoingParts;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_VERTEX_H
Index: /DMM/DMM/WCDigit.h
===================================================================
--- /DMM/DMM/WCDigit.h	(revision 373)
+++ /DMM/DMM/WCDigit.h	(revision 373)
@@ -0,0 +1,93 @@
+#ifndef DMM_WCDIGIT_H
+#define DMM_WCDIGIT_H 1
+/*!
+\class WCDigit WCDigit.h
+"DMM/WCDigit.h"
+\brief Memory & Storable description of a WC Hit
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/WCHit.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+
+namespace MEMPHYS {
+namespace DMM {
+
+class IDataServices;
+  
+class WCDigit : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<WCDigit>  SharedPtr;
+  typedef boost::weak_ptr<WCDigit>    WeakPtr;
+  typedef std::vector<SharedPtr>      VecOfSharedPtr;
+  typedef std::vector<WeakPtr>        VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  WCDigit(IDataServices& aService);
+  //!CCtor
+  WCDigit(const WCDigit& aWCDigit);
+  //!Assignment
+  WCDigit& operator=(const WCDigit& aWCDigit); 
+
+  //!Destructor
+  virtual ~WCDigit() {
+    std::cout << "Destroy WCDigit("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful WCDigit* clone() const {return new WCDigit(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Uopdate hit
+  void setHit(const WCHit::SharedPtr& value) { m_hit = value; }
+  //! Retreive hit
+  const WCHit::SharedPtr& hit() const { return m_hit; }
+
+  //! Update effPE
+  void setEffPE(const double& value) { m_effPE = value; }
+  //! Retreive effPE
+  double effPE() const { return m_effPE; }
+
+  //! Update time
+  void setTime(const double& value) { m_time = value; }
+  //! Retreive time
+  double time() const { return m_time; }
+
+ //@}
+
+ protected:
+  //! The corresponding WCHit
+  WCHit::SharedPtr m_hit;
+
+  //! Effective number of p.e
+  double m_effPE;
+
+  //! Time
+  double m_time;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_WCDIGIT_H
Index: /DMM/DMM/WCHit.h
===================================================================
--- /DMM/DMM/WCHit.h	(revision 373)
+++ /DMM/DMM/WCHit.h	(revision 373)
@@ -0,0 +1,86 @@
+#ifndef DMM_WCHIT_H
+#define DMM_WCHIT_H 1
+/*!
+\class WCHit WCHit.h
+"DMM/WCHit.h"
+\brief Memory & Storable description of a Base WC Hit
+\author J.E Campagne
+*/
+
+// DMM
+#include "DMM/BaseData.h"
+#include "DMM/Position.h"
+
+//OSC
+#include "Slash/Store/IStorable.h"
+
+
+namespace MEMPHYS {
+namespace DMM {
+  
+class IDataServices;
+  
+class WCHit : public BaseData, virtual public Slash::Store::IStorable {
+
+ public:
+  typedef boost::shared_ptr<WCHit>  SharedPtr;
+  typedef boost::weak_ptr<WCHit>    WeakPtr;
+  typedef std::vector<SharedPtr>    VecOfSharedPtr;
+  typedef std::vector<WeakPtr>      VecOfWeakPtr;
+
+  //@name IStorable inheritence
+  //@{
+  virtual void* cast(const std::string& aClass) const;
+  virtual bool visit(Slash::Store::IConstVisitor&) const;
+  virtual bool read(Slash::Store::IVisitor&);
+  //@}
+
+  //@name BaseData inheritence
+  //@{
+  virtual void dump(std::ostream& f, const std::string& option = ""); 
+  //@}
+
+
+  //!Constructor
+  WCHit(IDataServices& aService);
+  //!CCtor
+  WCHit(const WCHit& aWCHit);
+  //!Assignment
+  WCHit& operator=(const WCHit& aWCHit); 
+
+  //!Destructor
+  virtual ~WCHit() {
+    std::cout << "Destroy WCHit("<<this<<")"<<std::endl;
+  }
+  //! Use the copy constructor to clone
+  //JEC See if useful WCHit* clone() const {return new WCHit(*this);}
+
+
+  //! @name Accessors
+  //@{
+  //! Update position 
+  void setPosition(const Position::SharedPtr& value) { m_position = value; }
+  //! Retreive position
+  const Position::SharedPtr& position() const { return m_position; }
+
+  //! Update PMId
+  void setPMId(const int& value) { m_PMId = value; }
+  //! Retreive PMId
+  int PMId() const { return m_PMId; }
+
+
+ //@}
+
+ protected:
+  //! Position
+  Position::SharedPtr m_position;
+
+  //! Volume identification
+  int m_PMId;
+
+};
+
+}//DMM
+}//MEMPHYS
+
+#endif // DMM_WCHIT_H
Index: /DMM/applications/test.cxx
===================================================================
--- /DMM/applications/test.cxx	(revision 373)
+++ /DMM/applications/test.cxx	(revision 373)
@@ -0,0 +1,63 @@
+#include "DMM/WCHit.h"
+#include "DMM/DataServices.h"
+#include <algorithm>
+
+class xIncreasingSort {
+ public:
+  bool operator()(const MEMPHYS::DMM::WCHit::SharedPtr& a, 
+		  const MEMPHYS::DMM::WCHit::SharedPtr& b) const {
+    return (a->x() < b->x());
+  }
+};
+
+
+int main () {
+
+  //init les services
+  MEMPHYS::DMM::DataServices* wcHitServices = new MEMPHYS::DMM::DataServices();
+
+  //A vector of WCHits
+  MEMPHYS::DMM::WCHit::Vector v;
+  
+
+  //Some Hits
+  //Hit b
+  MEMPHYS::DMM::WCHit::SharedPtr b(new MEMPHYS::DMM::WCHit(*wcHitServices));
+  b->setX(1.0);
+  v.push_back(b);
+
+  //Hit a
+  MEMPHYS::DMM::WCHit::SharedPtr a(new MEMPHYS::DMM::WCHit(*wcHitServices));
+  a->setX(0.5);
+  v.push_back(a);
+
+  std::cout << "(JEC): before sorting" << std::endl;
+  for_each(v.begin(),v.end(),MEMPHYS::DMM::DataDump(std::cout,"deep"));
+  
+  sort(v.begin(),v.end(),xIncreasingSort());
+  
+  std::cout << "(JEC): after sorting" << std::endl;
+  for_each(v.begin(),v.end(),MEMPHYS::DMM::DataDump(std::cout,"deep"));
+
+
+  
+  MEMPHYS::DMM::WCHit::Vector w;
+  MEMPHYS::DMM::WCHit::SharedPtr aa = a;
+  MEMPHYS::DMM::WCHit::SharedPtr bb = b;
+  w.push_back(bb);
+  w.push_back(aa);
+  w.push_back(a);
+
+
+  std::cout << "(JEC): dump w vector" << std::endl;
+  for_each(w.begin(),w.end(),MEMPHYS::DMM::DataDump(std::cout));
+
+  //Clear 
+  std::cout << "(JEC): Clear" << std::endl;
+
+  delete wcHitServices;
+
+  //end
+  std::cout << "(JEC): Return" << std::endl;
+  return 0;
+}
Index: /DMM/applications/test1.cxx
===================================================================
--- /DMM/applications/test1.cxx	(revision 373)
+++ /DMM/applications/test1.cxx	(revision 373)
@@ -0,0 +1,91 @@
+
+#include <iostream>
+#include "boost/shared_ptr.hpp"
+#include "boost/weak_ptr.hpp"
+
+class A;
+class B;
+typedef boost::shared_ptr<A> AStrongPtr;
+typedef boost::weak_ptr<A>   AWeakPtr;
+typedef boost::shared_ptr<B> BStrongPtr;
+typedef boost::weak_ptr<B>   BWeakPtr;
+
+
+class A {
+ public:
+  A() { std::cout << "Ctor A<"<<this<<">" << std::endl;}
+  virtual ~A() { std::cout << "Dtor A<"<<this<<">" << std::endl;}
+  
+  A(const A& aA) : b(aA.b) {std::cout << "CCtor A<"<<this<<">" << std::endl;}
+  A& operator=(const A& aA) {
+    std::cout << "opr= A<"<<this<<">" << std::endl;
+    if(&aA != this){
+      b = aA.b;
+    }
+    return *this;
+  }
+
+  void setB(const BStrongPtr& aB) {b = aB;}
+//   BWeakPtr& getB() { 
+//     std::cout << "Use non-const getB" << std::endl;
+//     return b;
+//   }
+  const BWeakPtr& getB() const { 
+    std::cout << "Use const getB" << std::endl;
+    return b;
+  }
+
+ private:
+  BWeakPtr b;
+};
+
+class B {
+ public:
+  B() { std::cout << "Ctor B<"<<this<<">" << std::endl;}
+  virtual ~B() { std::cout << "Dtor B<"<<this<<">" << std::endl;}
+  
+  B(const B& aB) : a(aB.a) {std::cout << "CCtor B<"<<this<<">" << std::endl;}
+  B& operator=(const B& aB) {
+    std::cout << "opr= B<"<<this<<">" << std::endl;
+    if(&aB != this){
+      a = aB.a;
+    }
+    return *this;
+  }
+
+  void setA(const AStrongPtr& aA) {a = aA;}
+  AWeakPtr& getA() { 
+    std::cout << "Use non-const getA" << std::endl;
+    return a;
+  }
+  const AWeakPtr& getA() const { 
+    std::cout << "Use const getA" << std::endl;
+    return a;
+  }
+
+ private:
+  AWeakPtr a;
+};
+
+
+int main() {
+
+  std::cout << "Create A & B" << std::endl;
+  AStrongPtr aA(new A);
+  BStrongPtr aB(new B);
+  
+  std::cout << "Make the association A <-> B" << std::endl;
+  aA->setB(aB);
+  aB->setA(aA);
+
+  if(BStrongPtr aB = aA->getB().lock()) {
+    std::cout << "Use a B given by A->getB().lock() " << std::endl;
+  }
+
+
+
+  std::cout << "return" << std::endl;
+
+  return 0;
+
+}
Index: /DMM/applications/test2.cxx
===================================================================
--- /DMM/applications/test2.cxx	(revision 373)
+++ /DMM/applications/test2.cxx	(revision 373)
@@ -0,0 +1,76 @@
+
+#include <iostream>
+#include "boost/shared_ptr.hpp"
+#include "boost/weak_ptr.hpp"
+
+class A;
+class B;
+
+typedef boost::shared_ptr<A> AStrongPtr;
+//typedef boost::weak_ptr<A>   AWeakPtr;
+typedef boost::shared_ptr<B> BStrongPtr;
+//typedef boost::weak_ptr<B>   BWeakPtr;
+
+class ABlink;
+typedef boost::shared_ptr<ABlink> ABlinkStrongPtr;
+typedef boost::weak_ptr<ABlink> ABlinkWeakPtr;
+
+
+class A {
+ public:
+  A() { std::cout << "Ctor A<"<<this<<">" << std::endl;}
+  virtual ~A() { std::cout << "Dtor A<"<<this<<">" << std::endl;}
+};
+
+class B {
+ public:
+  B() { std::cout << "Ctor B<"<<this<<">" << std::endl;}
+  virtual ~B() { std::cout << "Dtor B<"<<this<<">" << std::endl;}
+};
+
+class ABlink {
+ public:
+
+  void setB(const BStrongPtr& aB) {a = aB;}
+  BStrongPtr& getB() { 
+    std::cout << "Use non-const getB" << std::endl;
+    return a;
+  }
+  const BStrongPtr& getB() const { 
+    std::cout << "Use const getB" << std::endl;
+    return b;
+  }
+
+  void setA(const AStrongPtr& aA) {a = aA;}
+  AStrongPtr& getA() { 
+    std::cout << "Use non-const getA" << std::endl;
+    return a;
+  }
+  const AStrongPtr& getA() const { 
+    std::cout << "Use const getA" << std::endl;
+    return a;
+  }
+
+ private:
+  AStrongPtr a;
+  BStrongPtr b;  
+};
+
+
+
+int main() {
+
+  std::cout << "Create A & B" << std::endl;
+  AStrongPtr aA(new A);
+  BStrongPtr aB(new B);
+  
+  std::cout << "Make the association A <-> B" << std::endl;
+  ABlinkStrongPtr abLink(new ABlink);
+  abLink->setA(aA);
+  abLink->setB(aB);
+
+  std::cout << "return" << std::endl;
+
+  return 0;
+
+}
Index: /DMM/cmt/Linux-i686.make
===================================================================
--- /DMM/cmt/Linux-i686.make	(revision 373)
+++ /DMM/cmt/Linux-i686.make	(revision 373)
@@ -0,0 +1,171 @@
+CMTPATH=/home/campagne/projets/OSArea:/home/campagne/kits/osc_g4/v16r0:/home/campagne/CMTI
+CMT_tag=$(tag)
+CMTROOT=/home/campagne/kits/CMT/v1r18p20051108
+CMT_root=/home/campagne/kits/CMT/v1r18p20051108
+CMTVERSION=v1r18p20051108
+cmt_hardware_query_command=uname -m
+cmt_hardware=`$(cmt_hardware_query_command)`
+cmt_system_version_query_command=${CMTROOT}/mgr/cmt_linux_version.sh | ${CMTROOT}/mgr/cmt_filter_version.sh
+cmt_system_version=`$(cmt_system_version_query_command)`
+cmt_compiler_version_query_command=${CMTROOT}/mgr/cmt_gcc_version.sh | ${CMTROOT}/mgr/cmt_filter3_version.sh
+cmt_compiler_version=`$(cmt_compiler_version_query_command)`
+PATH=/home/campagne/kits/CMT/v1r18p20051108/${CMTBIN}:/home/campagne/kits:/home/campagne/kits/subversion-1.2.3/bin/:/usr/afsws/bin:/home/campagne/utils/:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/campagne/kits/root-4.03.02/bin:/home/campagne/projets/OSArea/MEMPHYS/v8r0/Linux-i686:/home/campagne/kits/osc_g4/v16r0//bin:/home/campagne/projets/OSArea/MEMPHYS/DMM/v0/Linux-i686
+CLASSPATH=/home/campagne/kits/CMT/v1r18p20051108/java
+debug_option=-g
+cc=gcc
+cflags= -O
+pp_cflags=-Di586
+ccomp=$(cc) -c $(includes) $(cdebugflags) $(cflags) $(pp_cflags)
+clink=$(cc) $(clinkflags) $(cdebugflags)
+ppcmd=-I
+preproc=c++ -MD -c 
+cpp=c++
+cppflags=-pipe -ansi -pedantic -W -Wall -Wwrite-strings -Wpointer-arith -Woverloaded-virtual  -O
+pp_cppflags=-D_GNU_SOURCE
+cppcomp=$(cpp) -c $(includes) $(cppdebugflags) $(cppflags) $(pp_cppflags)
+cpplinkflags= -O
+cpplink=$(cpp) $(cpplinkflags) $(cppdebugflags)
+for=g77
+fflags=$(debug_option)
+fcomp=$(for) -c $(fincludes) $(fflags) $(pp_fflags)
+flink=$(for) $(flinkflags)
+javacomp=javac -classpath $(src):$(CLASSPATH) 
+javacopy=cp
+jar=jar
+X11_cflags=-I/usr/include
+Xm_cflags=-I/usr/include
+X_linkopts=-L/usr/X11R6/lib -lXm -lXt -lXext -lX11 -lm
+lex=flex $(lexflags)
+yaccflags= -l -d 
+yacc=yacc $(yaccflags)
+ar=ar r
+ranlib=ranlib
+make_shlib=${CMTROOT}/mgr/cmt_make_shlib_common.sh extract
+shlibsuffix=so
+shlibbuilder=g++ $(cmt_installarea_linkopts) 
+shlibflags=-shared
+symlink=/bin/ln -fs 
+symunlink=/bin/rm -f 
+library_install_command=${symlink}
+build_library_links=true
+remove_library_links=true
+cmtexe=${CMTROOT}/${CMTBIN}/cmt.exe
+build_prototype=$(cmtexe) build prototype
+build_dependencies=$(cmtexe) -quiet -tag=$(tags) build dependencies
+build_triggers=$(cmtexe) build triggers
+implied_library_prefix=-l
+SHELL=/bin/sh
+q="
+src=../src/
+doc=../doc/
+inc=../src/
+mgr=../cmt/
+application_suffix=.exe
+library_prefix=lib
+lock_command=chmod -R a-w ../*
+unlock_command=chmod -R g+w ../*
+MAKEFLAGS= --no-print-directory 
+gmake_hosts=lx1 rsplus lxtest as7 dxplus ax7 hp2 aleph hp1 hpplus papou1-fe atlas
+make_hosts=virgo-control1 rio0a vmpc38a
+everywhere=hosts
+install_command=cp 
+uninstall_command=/bin/rm -f 
+cmt_installarea_command=ln -fs 
+cmt_uninstallarea_command=/bin/rm -f 
+cmt_install_area_command=$(cmt_installarea_command)
+cmt_uninstall_area_command=$(cmt_uninstallarea_command)
+cmt_install_action=$(CMTROOT)/mgr/cmt_install_action.sh
+cmt_installdir_action=$(CMTROOT)/mgr/cmt_installdir_action.sh
+cmt_uninstall_action=$(CMTROOT)/mgr/cmt_uninstall_action.sh
+cmt_uninstalldir_action=$(CMTROOT)/mgr/cmt_uninstalldir_action.sh
+mkdir=mkdir
+cmt_cvs_protocol_level=v1r1
+cmt_installarea_prefix=InstallArea
+CMT_PATH_remove_regexp=/[^/]*/
+CMT_PATH_remove_share_regexp=/share/
+NEWCMTCONFIG=i686-slc302-gcc323
+DMM_tag=$(tag)
+DMMROOT=/home/campagne/projets/OSArea/MEMPHYS/DMM/v0
+DMM_root=/home/campagne/projets/OSArea/MEMPHYS/DMM/v0
+DMMVERSION=v0
+DMM_cmtpath=/home/campagne/projets/OSArea
+DMM_offset=MEMPHYS
+DMM_project=OSArea
+OpenScientist_tag=$(tag)
+OPENSCIENTISTROOT=/home/campagne/CMTI/Interfaces/OpenScientist/v16r0
+OpenScientist_root=/home/campagne/CMTI/Interfaces/OpenScientist/v16r0
+OPENSCIENTISTVERSION=v16r0
+OpenScientist_cmtpath=/home/campagne/CMTI
+OpenScientist_offset=Interfaces
+OpenScientist_project=CMTI
+OSC_home=/home/campagne/kits/osc_g4/v16r0/
+OSC_AIDA_home=$(OSC_home)/Resources/AIDA
+OSC_AIDA_incs=-I$(OSC_AIDA_home)/src/cpp
+OSC_AIDA_linkopts=-L$(OSC_home)/lib -lOnXLabAIDA -lOnXLabCore -lBatchLabCore -losc_Minuit -lMidnight -lHCL -lOnXCore -lLibXML -losc_expat -lLibZip -lz -lLibUtils -ldl
+OSC_OnX_incs=-I$(OSC_home)/Resources/Slash -I$(OSC_home)/Resources/expat/include -I$(OSC_home)/Resources/Lib/include -I$(OSC_home)/Resources/OnX/include -I$(OSC_home)/Resources/BatchLab -I$(OSC_home)/Resources/OnXLab
+OSC_OnX_linkopts=-L$(OSC_home)/lib -lOnXCore -lLibXML -losc_expat -lLibZip -lz -lLibUtils -ldl
+OSC_Inventor_incs=-I$(OSC_home)/Resources/CoinGL/include -I$(OSC_home)/Resources/HEPVis/include
+OSC_Inventor_linkopts=-L$(OSC_home)/lib -lHEPVisPlotter -lHEPVisDetector -lHEPVisGeometry -lHEPVisUtils  -losc_dvi2bitmap -losc_jpeg -losc_freetype2 -losc_Coin -lLibUtils -lGLU -lGL -ldl -L/usr/X11R6/lib -lX11 -lpthread
+OSC_Geant4_incs=-I$(OSC_home)/Resources/CLHEP/include -I$(OSC_home)/Resources/Geant4/include
+OSC_Geant4_lib=$(OSC_home)/lib
+OSC_Geant4_install=$(OSC_home)/Resources/Geant4
+OSC_G4RADIOACTIVEDATA=${OSC_Geant4_install}/data/RadioactiveDecay
+OSC_G4LEVELGAMMADATA=${OSC_Geant4_install}/data/PhotonEvaporation
+OSC_G4LEDATA=${OSC_Geant4_install}/data/G4EMLOW
+OSC_NeutronHPCrossSections=${OSC_Geant4_install}/data/G4NDL
+OSC_G4Lab_incs=-I$(OSC_home)/Resources/G4Lab/include
+OSC_G4Lab_linkopts=-L$(OSC_home)/lib -lG4LabUIOnX -lG4LabCore
+LD_LIBRARY_PATH=/home/campagne/kits/root-4.03.02/lib:/home/campagne/projets/OSArea/MEMPHYS/v8r0/Linux-i686:/home/campagne/kits/osc_g4/v16r0//lib:/home/campagne/kits/osc_g4/v16r0//bin:/home/campagne/projets/OSArea/MEMPHYS/DMM/v0/Linux-i686
+ONXSESSION=/home/campagne/kits/osc_g4/v16r0//Resources/OnX/scripts/OnX/Session.onx
+TTFPATH=/home/campagne/kits/osc_g4/v16r0//Resources/HEPVis/fonts
+ONXROOT=/home/campagne/kits/osc_g4/v16r0//Resources/OnX
+ONXLABROOT=/home/campagne/kits/osc_g4/v16r0//Resources/OnXLab
+G4LABROOT=/home/campagne/kits/osc_g4/v16r0//Resources/G4Lab
+COIN_DONT_INFORM_INDIRECT_RENDERING=1
+Platform_bin=${CMTCONFIG}
+DMM_cppflags=-I${OSC_home}/Resources/Slash
+DMMCore_linkopts=-L${DMMROOT}/${Platform_bin} -lDMMCore
+tag=Linux-i686
+package=DMM
+version=v0
+PACKAGE_ROOT=$(DMMROOT)
+srcdir=../src
+bin=../$(DMM_tag)/
+javabin=../classes/
+mgrdir=cmt
+project=OSArea
+cmt_installarea_paths=$(cmt_installarea_prefix)/$(tag)/bin $(cmt_installarea_prefix)/$(tag)/lib $(cmt_installarea_prefix)/share/lib $(cmt_installarea_prefix)/share/bin
+use_linkopts= $(cmt_installarea_linkopts)   $(DMM_linkopts)  $(OpenScientist_linkopts) 
+CMTI_installarea_prefix=$(cmt_installarea_prefix)
+CMTI_installarea_prefix_remove=$(CMTI_installarea_prefix)
+osc_g4_installarea_prefix=$(cmt_installarea_prefix)
+osc_g4_installarea_prefix_remove=$(osc_g4_installarea_prefix)
+OSArea_installarea_prefix=$(cmt_installarea_prefix)
+OSArea_installarea_prefix_remove=$(OSArea_installarea_prefix)
+use_requirements=requirements $(CMTROOT)/mgr/requirements $(OPENSCIENTISTROOT)/cmt/requirements 
+use_includes= $(ppcmd)"$(OpenScientist_root)/src" 
+use_fincludes= $(use_includes)
+use_stamps= $(DMM_stamps)  $(OpenScientist_stamps) 
+use_cflags=  $(DMM_cflags)  $(OpenScientist_cflags) 
+use_pp_cflags=  $(DMM_pp_cflags)  $(OpenScientist_pp_cflags) 
+use_cppflags=  $(DMM_cppflags)  $(OpenScientist_cppflags) 
+use_pp_cppflags=  $(DMM_pp_cppflags)  $(OpenScientist_pp_cppflags) 
+use_fflags=  $(DMM_fflags)  $(OpenScientist_fflags) 
+use_pp_fflags=  $(DMM_pp_fflags)  $(OpenScientist_pp_fflags) 
+use_libraries= $(OpenScientist_libraries) 
+includes= $(ppcmd)"/home/campagne/projets/OSArea/MEMPHYS/DMM/v0" $(ppcmd)"/home/campagne/projets/OSArea/MEMPHYS/DMM/v0/../../Resources/boost-1_34" $(use_includes)
+fincludes= $(includes)
+DMMCore_use_linkopts=  $(DMM_linkopts)  $(OpenScientist_linkopts) 
+test_use_linkopts=  $(DMM_linkopts)  $(OpenScientist_linkopts) 
+test1_use_linkopts=  $(DMM_linkopts)  $(OpenScientist_linkopts) 
+test2_use_linkopts=  $(DMM_linkopts)  $(OpenScientist_linkopts) 
+constituents= DMMCore 
+all_constituents= $(constituents)
+constituentsclean= DMMCoreclean 
+all_constituentsclean= $(constituentsclean)
+cmt_actions_constituents= make 
+cmt_actions_constituentsclean= makeclean 
+debug_constituents= test 
+debug_constituentsclean= testclean 
+Boost_constituents= test1 test2 
+Boost_constituentsclean= test2clean test1clean 
Index: /DMM/cmt/Makefile
===================================================================
--- /DMM/cmt/Makefile	(revision 373)
+++ /DMM/cmt/Makefile	(revision 373)
@@ -0,0 +1,4 @@
+include $(CMTROOT)/src/Makefile.header
+
+include $(CMTROOT)/src/constituents.make
+
Index: /DMM/cmt/cleanup.csh
===================================================================
--- /DMM/cmt/cleanup.csh	(revision 373)
+++ /DMM/cmt/cleanup.csh	(revision 373)
@@ -0,0 +1,11 @@
+if ( $?CMTROOT == 0 ) then
+  setenv CMTROOT /home/campagne/kits/CMT/v1r18p20051108
+endif
+source ${CMTROOT}/mgr/setup.csh
+set tempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`
+if $status != 0 then
+  set tempfile=/tmp/cmt.$$
+endif
+${CMTROOT}/mgr/cmt cleanup -csh -pack=DMM -version=v0 -path=/home/campagne/projets/OSArea/MEMPHYS $* >${tempfile}; source ${tempfile}
+/bin/rm -f ${tempfile}
+
Index: /DMM/cmt/cleanup.sh
===================================================================
--- /DMM/cmt/cleanup.sh	(revision 373)
+++ /DMM/cmt/cleanup.sh	(revision 373)
@@ -0,0 +1,9 @@
+if test "${CMTROOT}" = ""; then
+  CMTROOT=/home/campagne/kits/CMT/v1r18p20051108; export CMTROOT
+fi
+. ${CMTROOT}/mgr/setup.sh
+tempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`
+if test ! $? = 0 ; then tempfile=/tmp/cmt.$$; fi
+${CMTROOT}/mgr/cmt cleanup -sh -pack=DMM -version=v0 -path=/home/campagne/projets/OSArea/MEMPHYS $* >${tempfile}; . ${tempfile}
+/bin/rm -f ${tempfile}
+
Index: /DMM/cmt/gmake.out
===================================================================
--- /DMM/cmt/gmake.out	(revision 373)
+++ /DMM/cmt/gmake.out	(revision 373)
@@ -0,0 +1,15 @@
+------> (Makefile.header) Rebuilding constituents.make
+------> (constituents.make) Rebuilding setup.make Linux-i686.make
+CMTCONFIG=Linux-i686
+../Linux-i686/DMMsetup.make untouched 
+setup.make ok
+------> (constituents.make) Rebuilding library links
+------> (constituents.make) Building test.make
+Application test
+------> (constituents.make) Starting test
+------> (test.make) Rebuilding ../Linux-i686/test_dependencies.make
+../Linux-i686/test.exe
+cd ../Linux-i686/; c++   -o test.exe.new ../Linux-i686/test.o -L/home/campagne/projets/OSArea/MEMPHYS/DMM/v0/Linux-i686 -lDMMCore ; mv -f test.exe.new test.exe
+------> test ok
+------> (constituents.make) test done
+ debug ok.
Index: /DMM/cmt/requirements
===================================================================
--- /DMM/cmt/requirements	(revision 373)
+++ /DMM/cmt/requirements	(revision 373)
@@ -0,0 +1,80 @@
+package DMM
+version v0
+
+use OpenScientist v16r0 Interfaces
+
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+
+
+branches run applications
+
+build_strategy no_prototypes
+include_path none
+
+include_dirs ${DMMROOT} ${DMMROOT}/../../Resources/boost-1_34
+
+#////////////////////////////////////////////////////////////
+#/// From Interfaces/Platform ///////////////////////////////
+#////////////////////////////////////////////////////////////
+
+macro Platform_bin "${CMTCONFIG}"
+#set PLATFORMBIN "${Platform_bin}"
+
+pattern Platform_paths \
+  path_remove LD_LIBRARY_PATH "$(<PACKAGE>ROOT)/$(Platform_bin)" WIN32 "" Darwin "" ;\
+  path_append LD_LIBRARY_PATH "$(<PACKAGE>ROOT)/$(Platform_bin)" WIN32 "" Darwin "" ;\
+  path_remove DYLD_LIBRARY_PATH "" Darwin "$(<PACKAGE>ROOT)/$(Platform_bin)" ;\
+  path_append DYLD_LIBRARY_PATH "" Darwin "$(<PACKAGE>ROOT)/$(Platform_bin)" ;\
+  path_remove PATH "$(<PACKAGE>ROOT)/$(Platform_bin)" WIN32 "$(<PACKAGE>ROOT)\$(Platform_bin)" ;\
+  path_append PATH "$(<PACKAGE>ROOT)/$(Platform_bin)" WIN32 "$(<PACKAGE>ROOT)\$(Platform_bin)"
+
+# Darwin : to build dlls properly :
+macro make_shlib "$(make_shlib)" Darwin "$(DMMROOT)/cmt/cmt_make_shlib_common.sh extract"
+
+
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+
+
+macro DMM_cppflags "-I${OSC_home}/Resources/Slash"
+
+library DMMCore *.cxx
+macro DMMCore_linkopts "-L${DMMROOT}/${Platform_bin} -lDMMCore"
+
+
+
+application test -group=debug ../applications/test.cxx use_linkopts='"${DMMCore_linkopts}"'
+
+application test1 -group=Boost ../applications/test1.cxx
+application test2 -group=Boost ../applications/test2.cxx
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+#//////////////////////////////////////////////////
+
+private
+macro build_library_links "true" WIN32 ""
+macro remove_library_links "true" WIN32 ""
+
+# WIN32 : /GR to enable RTTI and dynamic cast.
+# WIN32 : /GX to enable exception handling (for STL).
+macro_append cppflags "" WIN32 " /GX /GR" 
+
+# DEBUG :
+#macro_append cflags  " -g" WIN32 " /ZI /Od"
+#macro_append cppflags  " -g" WIN32 " /ZI /Od"
+#macro_append cpplinkflags  " -g" WIN32 " /DEBUG"
+
+# OPTIMIZE :
+macro_append cflags  " -O" WIN32 " /O2"
+macro_append cppflags  " -O" WIN32 " /O2"
+macro_append cpplinkflags  " -O" WIN32 ""
+public
+
+#//////////////////////////////////////////////////
+#// Run time //////////////////////////////////////
+#//////////////////////////////////////////////////
+
+apply_pattern Platform_paths
Index: /DMM/cmt/setup.csh
===================================================================
--- /DMM/cmt/setup.csh	(revision 373)
+++ /DMM/cmt/setup.csh	(revision 373)
@@ -0,0 +1,14 @@
+# echo "Setting DMM v0 in /home/campagne/projets/OSArea/MEMPHYS"
+
+if ( $?CMTROOT == 0 ) then
+  setenv CMTROOT /home/campagne/kits/CMT/v1r18p20051108
+endif
+source ${CMTROOT}/mgr/setup.csh
+
+set tempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`
+if $status != 0 then
+  set tempfile=/tmp/cmt.$$
+endif
+${CMTROOT}/mgr/cmt setup -csh -pack=DMM -version=v0 -path=/home/campagne/projets/OSArea/MEMPHYS  -no_cleanup $* >${tempfile}; source ${tempfile}
+/bin/rm -f ${tempfile}
+
Index: /DMM/cmt/setup.sh
===================================================================
--- /DMM/cmt/setup.sh	(revision 373)
+++ /DMM/cmt/setup.sh	(revision 373)
@@ -0,0 +1,12 @@
+# echo "Setting DMM v0 in /home/campagne/projets/OSArea/MEMPHYS"
+
+if test "${CMTROOT}" = ""; then
+  CMTROOT=/home/campagne/kits/CMT/v1r18p20051108; export CMTROOT
+fi
+. ${CMTROOT}/mgr/setup.sh
+
+tempfile=`${CMTROOT}/mgr/cmt -quiet build temporary_name`
+if test ! $? = 0 ; then tempfile=/tmp/cmt.$$; fi
+${CMTROOT}/mgr/cmt setup -sh -pack=DMM -version=v0 -path=/home/campagne/projets/OSArea/MEMPHYS  -no_cleanup $* >${tempfile}; . ${tempfile}
+/bin/rm -f ${tempfile}
+
Index: /DMM/run/test.out
===================================================================
--- /DMM/run/test.out	(revision 373)
+++ /DMM/run/test.out	(revision 373)
@@ -0,0 +1,27 @@
+Create BaseData(0x804d018)
+Create Hit(0x804d018)
+Create BaseData(0x804d1b0)
+Create Hit(0x804d1b0)
+(JEC): before sorting
+BaseData add(0x804d018): [0]: WCHit add(0x804d018) 
+(x,y,z) = (1, 0, 0), PMId 0, totalPE 0
+BaseData add(0x804d1b0): [1]: WCHit add(0x804d1b0) 
+(x,y,z) = (0.5, 0, 0), PMId 0, totalPE 0
+(JEC): after sorting
+BaseData add(0x804d1b0): [1]: WCHit add(0x804d1b0) 
+(x,y,z) = (0.5, 0, 0), PMId 0, totalPE 0
+BaseData add(0x804d018): [0]: WCHit add(0x804d018) 
+(x,y,z) = (1, 0, 0), PMId 0, totalPE 0
+(JEC): dump w vector
+BaseData add(0x804d018): [0]: WCHit add(0x804d018) 
+(x,y,z) = (1, 0, 0), PMId 0, totalPE 0
+BaseData add(0x804d1b0): [1]: WCHit add(0x804d1b0) 
+(x,y,z) = (0.5, 0, 0), PMId 0, totalPE 0
+BaseData add(0x804d1b0): [1]: WCHit add(0x804d1b0) 
+(x,y,z) = (0.5, 0, 0), PMId 0, totalPE 0
+(JEC): Clear
+(JEC): Return
+Destroy Hit(0x804d1b0)
+Destroy BaseData(0x804d1b0)
+Destroy Hit(0x804d018)
+Destroy BaseData(0x804d018)
Index: /DMM/run/test1.out
===================================================================
--- /DMM/run/test1.out	(revision 373)
+++ /DMM/run/test1.out	(revision 373)
@@ -0,0 +1,9 @@
+Create A & B
+Ctor A<0x804b008>
+Ctor B<0x804b030>
+Make the association A <-> B
+Use non-const getB
+Use a B given by A->getB().lock() 
+return
+Dtor B<0x804b030>
+Dtor A<0x804b008>
Index: /DMM/run/test2.out
===================================================================
--- /DMM/run/test2.out	(revision 373)
+++ /DMM/run/test2.out	(revision 373)
@@ -0,0 +1,5 @@
+Create A & B
+Ctor A<0x804b008>
+Ctor B<0x804b030>
+Make the association A <-> B
+return
Index: /DMM/src/BaseData.cxx
===================================================================
--- /DMM/src/BaseData.cxx	(revision 373)
+++ /DMM/src/BaseData.cxx	(revision 373)
@@ -0,0 +1,36 @@
+#include "DMM/BaseData.h"
+
+//std
+#include <typeinfo>
+
+MEMPHYS::DMM::BaseData::BaseData(MEMPHYS::DMM::IDataServices& aService) 
+  :m_service(aService)
+  ,m_index(aService.getNextIndex())
+  ,m_name(typeid(*this).name()) 
+{
+  std::cout << "Create BaseData("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::BaseData::BaseData(const MEMPHYS::DMM::BaseData& aData)
+  :m_service(aData.m_service)
+  ,m_index(aData.m_index)
+  ,m_name(aData.m_name)
+{    
+  std::cout << "COPY Create BaseData("<<this <<") from ("<< &aData <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::BaseData& MEMPHYS::DMM::BaseData::operator=(const MEMPHYS::DMM::BaseData& aData) {
+  std::cout << "Assign BaseData("<<&aData<<") to ("<<this<<")" <<std::endl;
+  if(&aData != this) {
+    m_service = aData.m_service;
+    m_index   = aData.m_index;
+    m_name    = aData.m_name;
+  }
+  
+  return *this;
+}//op=
+//----------------------------------------------------------
+void MEMPHYS::DMM::BaseData::dump(std::ostream& f,
+				  const std::string&) {
+  f << m_name << " add(" << this << "): ["<< m_index << "]: ";
+}//dump
Index: /DMM/src/CerenkovCone.cxx
===================================================================
--- /DMM/src/CerenkovCone.cxx	(revision 373)
+++ /DMM/src/CerenkovCone.cxx	(revision 373)
@@ -0,0 +1,56 @@
+#include "DMM/CerenkovCone.h"
+
+
+MEMPHYS::DMM::CerenkovCone::CerenkovCone(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::CerenkovImage(aService)
+  ,m_origin()
+{
+  std::cout << "Create CerenkovCone("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::CerenkovCone::CerenkovCone(const MEMPHYS::DMM::CerenkovCone& aCerenkovCone)
+  :MEMPHYS::DMM::CerenkovImage(aCerenkovCone)
+  ,m_origin(aCerenkovCone.m_origin)
+{
+  std::cout << "Copy Create CerenkovCone("<<this<<") from ("<< &aCerenkovCone <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::CerenkovCone& MEMPHYS::DMM::CerenkovCone::operator=(const MEMPHYS::DMM::CerenkovCone& aCerenkovCone) {
+  std::cout << "Assign ("<<&aCerenkovCone<<") to (" << this << ")" <<std::endl;
+  if (&aCerenkovCone != this) {
+    MEMPHYS::DMM::CerenkovImage::operator=(aCerenkovCone);
+    m_origin = aCerenkovCone.m_origin;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::CerenkovCone::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::CerenkovCone") {
+    return (void*)static_cast<const MEMPHYS::DMM::CerenkovCone*>(this);
+  } else if(aClass=="MEMPHYS::DMM::CerenkovImage") {
+    return (void*)static_cast<const MEMPHYS::DMM::CerenkovImage*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::CerenkovCone::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::CerenkovCone::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::CerenkovCone::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::CerenkovImage::dump(f,option);
+  f << "Cone origin at " << std::endl;
+  m_origin->dump(f,option);
+}//dump 
+
+
Index: /DMM/src/CerenkovImage.cxx
===================================================================
--- /DMM/src/CerenkovImage.cxx	(revision 373)
+++ /DMM/src/CerenkovImage.cxx	(revision 373)
@@ -0,0 +1,59 @@
+#include "DMM/CerenkovImage.h"
+
+
+MEMPHYS::DMM::CerenkovImage::CerenkovImage(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_digits()
+{
+  std::cout << "Create CerenkovImage("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::CerenkovImage::CerenkovImage(const MEMPHYS::DMM::CerenkovImage& aCerenkovImage)
+  :MEMPHYS::DMM::BaseData(aCerenkovImage)
+  ,m_digits(aCerenkovImage.m_digits)
+{
+  std::cout << "Copy Create CerenkovImage("<<this<<") from ("<< &aCerenkovImage <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::CerenkovImage& MEMPHYS::DMM::CerenkovImage::operator=(const MEMPHYS::DMM::CerenkovImage& aCerenkovImage) {
+  std::cout << "Assign ("<<&aCerenkovImage<<") to (" << this << ")" <<std::endl;
+  if (&aCerenkovImage != this) {
+    m_digits = aCerenkovImage.m_digits;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::CerenkovImage::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::CerenkovImage") {
+    return (void*)static_cast<const MEMPHYS::DMM::CerenkovImage*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::CerenkovImage::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::CerenkovImage::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::CerenkovImage::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  f << "Dump  of " << m_digits.size()  << " WCDigits"
+    << std::endl;
+  if (!m_digits.empty()) {
+    WCDigit::VecOfSharedPtr::iterator id;
+    for ( id = m_digits.begin(); id != m_digits.end(); ++id) {
+      (*id)->dump(f,option);
+    }
+  }
+}//dump 
+
+
Index: /DMM/src/MCParticle.cxx
===================================================================
--- /DMM/src/MCParticle.cxx	(revision 373)
+++ /DMM/src/MCParticle.cxx	(revision 373)
@@ -0,0 +1,64 @@
+#include "DMM/MCParticle.h"
+
+
+MEMPHYS::DMM::MCParticle::MCParticle(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::Particle(aService)
+  ,m_isPrimary(false)
+  ,m_startTime(0.)
+{
+  std::cout << "Create MCParticle("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::MCParticle::MCParticle(const MEMPHYS::DMM::MCParticle& aMCParticle)
+  :MEMPHYS::DMM::Particle(aMCParticle)
+  ,m_isPrimary(aMCParticle.m_isPrimary)
+  ,m_startTime(aMCParticle.m_startTime)
+{
+  std::cout << "Copy Create MCParticle("<<this<<") from ("<< &aMCParticle <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::MCParticle& MEMPHYS::DMM::MCParticle::operator=(const MEMPHYS::DMM::MCParticle& aMCParticle) {
+  std::cout << "Assign ("<<&aMCParticle<<") to (" << this << ")" <<std::endl;
+  if (&aMCParticle != this) {
+    MEMPHYS::DMM::Particle::operator=(aMCParticle);
+    m_isPrimary = aMCParticle.m_isPrimary;
+    m_startTime = aMCParticle.m_startTime;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::MCParticle::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::MCParticle") {
+    return (void*)static_cast<const MEMPHYS::DMM::MCParticle*>(this);
+  } else if(aClass=="MEMPHYS:DMM::Particle") {
+    return (void*)static_cast<const MEMPHYS::DMM::Particle*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::MCParticle::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::MCParticle::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::MCParticle::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::Particle::dump(f,option);
+  if(m_isPrimary) {
+    f << " primary particle ";
+  } else {
+    f << " non-primary particle ";
+  }
+  f << " Start time " << m_startTime
+    << std::endl;
+}//dump 
+
+
Index: /DMM/src/MCWCHit.cxx
===================================================================
--- /DMM/src/MCWCHit.cxx	(revision 373)
+++ /DMM/src/MCWCHit.cxx	(revision 373)
@@ -0,0 +1,70 @@
+#include "DMM/MCWCHit.h"
+
+
+MEMPHYS::DMM::MCWCHit::MCWCHit(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::WCHit(aService)
+  ,m_totalPE(0)
+  ,m_PEtimes()
+{
+  std::cout << "Create MCWCHit("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::MCWCHit::MCWCHit(const MEMPHYS::DMM::MCWCHit& aMCWCHit)
+  :MEMPHYS::DMM::WCHit(aMCWCHit)
+  ,m_totalPE(aMCWCHit.m_totalPE)
+  ,m_PEtimes(aMCWCHit.m_PEtimes)
+{
+  std::cout << "Copy Create MCWCHit("<<this<<") from ("<< &aMCWCHit <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::MCWCHit& MEMPHYS::DMM::MCWCHit::operator=(const MEMPHYS::DMM::MCWCHit& aMCWCHit) {
+  std::cout << "Assign ("<<&aMCWCHit<<") to (" << this << ")" <<std::endl;
+  if (&aMCWCHit != this) {
+    MEMPHYS::DMM::WCHit::operator=(aMCWCHit);
+    m_totalPE = aMCWCHit.m_totalPE;
+    m_PEtimes = aMCWCHit.m_PEtimes;  
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::MCWCHit::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::MCWCHit") {
+    return (void*)static_cast<const MEMPHYS::DMM::MCWCHit*>(this);
+  } else if(aClass=="MEMPHYS:DMM::WCHit") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::MCWCHit::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::MCWCHit::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::MCWCHit::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::WCHit::dump(f,option);
+  f << "totalPE " << m_totalPE
+    << std::endl;
+  if(option == "deep") {
+    if( m_totalPE >0 ) {
+      //dump the time Container
+      std::vector<double>::const_iterator i;
+      f << "PEs < ";
+      for( i = m_PEtimes.begin(); i != m_PEtimes.end(); ++i) {
+	f << *i << " , ";
+      }
+      f << ">" << std::endl;
+    }//non-empty PE container
+  }//deep dump
+}//dump 
+
+
Index: /DMM/src/Particle.cxx
===================================================================
--- /DMM/src/Particle.cxx	(revision 373)
+++ /DMM/src/Particle.cxx	(revision 373)
@@ -0,0 +1,74 @@
+#include "DMM/Particle.h"
+
+
+MEMPHYS::DMM::Particle::Particle(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_PDGId(0)
+  ,m_momentum()
+  ,m_prodPoint()
+  ,m_endPoint()
+{
+  std::cout << "Create Particle("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::Particle::Particle(const MEMPHYS::DMM::Particle& aParticle)
+  :MEMPHYS::DMM::BaseData(aParticle)
+  ,m_PDGId(aParticle.m_PDGId)
+  ,m_momentum(aParticle.m_momentum)
+  ,m_prodPoint(aParticle.m_prodPoint)
+  ,m_endPoint(aParticle.m_endPoint)
+{
+  std::cout << "Copy Create Particle("<<this<<") from ("<< &aParticle <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::Particle& MEMPHYS::DMM::Particle::operator=(const MEMPHYS::DMM::Particle& aParticle) {
+  std::cout << "Assign ("<<&aParticle<<") to (" << this << ")" <<std::endl;
+  if (&aParticle != this) {
+    m_PDGId = aParticle.m_PDGId;
+    m_momentum = aParticle.m_momentum;
+    m_prodPoint = aParticle.m_prodPoint;
+    m_endPoint = aParticle.m_endPoint;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::Particle::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::Particle") {
+    return (void*)static_cast<const MEMPHYS::DMM::Particle*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::Particle::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::Particle::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::Particle::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  f << " PDG code " << m_PDGId
+    << " mass " << m_momentum[4] << ", "
+    << " Etot " << m_momentum[3] << "\n "
+    << "(px,py,pz) " 
+    << m_momentum[0] << ", "
+    << m_momentum[1] << ", "
+    << m_momentum[2] << ", "
+    << std::endl;
+  f << " Production Point: ";
+  m_prodPoint->dump(f,option);
+  if (!m_endPoint) {
+    f << " End/Decay Point: ";
+    m_endPoint->dump(f,option);
+  }
+}//dump 
+
+
Index: /DMM/src/Position.cxx
===================================================================
--- /DMM/src/Position.cxx	(revision 373)
+++ /DMM/src/Position.cxx	(revision 373)
@@ -0,0 +1,59 @@
+#include "DMM/Position.h"
+
+
+MEMPHYS::DMM::Position::Position(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_x(0)
+  ,m_y(0)
+  ,m_z(0)
+{
+  std::cout << "Create Position("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::Position::Position(const MEMPHYS::DMM::Position& aPosition)
+  :MEMPHYS::DMM::BaseData(aPosition)
+  ,m_x(aPosition.m_x)
+  ,m_y(aPosition.m_y)
+  ,m_z(aPosition.m_z)
+{
+  std::cout << "Copy Create Position("<<this<<") from ("<< &aPosition <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::Position& MEMPHYS::DMM::Position::operator=(const MEMPHYS::DMM::Position& aPosition) {
+  std::cout << "Assign ("<<&aPosition<<") to (" << this << ")" <<std::endl;
+  if (&aPosition != this) {
+    m_x = aPosition.m_x;
+    m_y = aPosition.m_y;
+    m_z = aPosition.m_z;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::Position::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::Position") {
+    return (void*)static_cast<const MEMPHYS::DMM::Position*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::Position::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::Position::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::Position::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  f << " (x,y,z) " << m_x << ", " << m_y << ", "<< m_z << ", "
+    << std::endl;
+}//dump 
+
+
Index: /DMM/src/Vertex.cxx
===================================================================
--- /DMM/src/Vertex.cxx	(revision 373)
+++ /DMM/src/Vertex.cxx	(revision 373)
@@ -0,0 +1,73 @@
+#include "DMM/Vertex.h"
+
+
+MEMPHYS::DMM::Vertex::Vertex(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_position()
+  ,m_incomingPart()
+  ,m_outgoingParts()
+{
+  std::cout << "Create Vertex("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::Vertex::Vertex(const MEMPHYS::DMM::Vertex& aVertex)
+  :MEMPHYS::DMM::BaseData(aVertex)
+  ,m_position(aVertex.m_position)
+  ,m_incomingPart(aVertex.m_incomingPart)
+  ,m_outgoingParts(aVertex.m_outgoingParts)
+{
+  std::cout << "Copy Create Vertex("<<this<<") from ("<< &aVertex <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::Vertex& MEMPHYS::DMM::Vertex::operator=(const MEMPHYS::DMM::Vertex& aVertex) {
+  std::cout << "Assign ("<<&aVertex<<") to (" << this << ")" <<std::endl;
+  if (&aVertex != this) {
+    m_position = aVertex.m_position;
+    m_incomingPart = aVertex.m_incomingPart;
+    m_outgoingParts = aVertex.m_outgoingParts;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::Vertex::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::Vertex") {
+    return (void*)static_cast<const MEMPHYS::DMM::Vertex*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::Vertex::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::Vertex::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::Vertex::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  m_position->dump(f,option);
+  if(!m_incomingPart) {
+    f << "Incoming Particle" << std::endl;
+    m_incomingPart->dump(f,option);
+  } else {
+    f << "Primary vertex" << std::endl;
+  }
+  if (!m_outgoingParts.empty()) {
+    Particle::VecOfSharedPtr::iterator ip;
+    f << m_outgoingParts.size() << " Outgoing Particles" << std::endl;
+    for (ip = m_outgoingParts.begin(); ip != m_outgoingParts.end(); ++ip ) {
+      (*ip)->dump(f,option);
+    }
+  } else {
+    f << "No outgoing particles" << std::endl;
+  }
+}//dump 
+
+
Index: /DMM/src/WCDigit.cxx
===================================================================
--- /DMM/src/WCDigit.cxx	(revision 373)
+++ /DMM/src/WCDigit.cxx	(revision 373)
@@ -0,0 +1,62 @@
+#include "DMM/WCDigit.h"
+
+
+MEMPHYS::DMM::WCDigit::WCDigit(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_hit()
+  ,m_effPE(0)
+  ,m_time(0)
+{
+  std::cout << "Create Digit("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::WCDigit::WCDigit(const MEMPHYS::DMM::WCDigit& aWCDigit)
+  :MEMPHYS::DMM::BaseData(aWCDigit)
+  ,m_hit(aWCDigit.m_hit)
+  ,m_effPE(aWCDigit.m_effPE)
+  ,m_time(aWCDigit.m_time)
+{
+  std::cout << "Copy Create Digit("<<this<<") from ("<< &aWCDigit <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::WCDigit& MEMPHYS::DMM::WCDigit::operator=(const MEMPHYS::DMM::WCDigit& aWCDigit) {
+  std::cout << "Assign ("<<&aWCDigit<<") to (" << this << ")" <<std::endl;
+  if (&aWCDigit != this) {
+    m_hit = aWCDigit.m_hit;
+    m_effPE = aWCDigit.m_effPE;
+    m_time = aWCDigit.m_time;  
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::WCDigit::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::WCDigit") {
+    return (void*)static_cast<const MEMPHYS::DMM::WCDigit*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::WCDigit::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::WCDigit::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::WCDigit::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  f << "effective # pe " << m_effPE << ", "
+    << "time " << m_time
+    << std::endl;
+  f << " The corresponding WCHit" << std::endl;
+  m_hit->dump(f,option);
+}//dump 
+
+
Index: /DMM/src/WCHit.cxx
===================================================================
--- /DMM/src/WCHit.cxx	(revision 373)
+++ /DMM/src/WCHit.cxx	(revision 373)
@@ -0,0 +1,57 @@
+#include "DMM/WCHit.h"
+
+
+MEMPHYS::DMM::WCHit::WCHit(MEMPHYS::DMM::IDataServices& aService)   
+  :MEMPHYS::DMM::BaseData(aService)
+  ,m_position()
+  ,m_PMId(0)
+{
+  std::cout << "Create WCHit("<<this<<")"<<std::endl;
+}//Ctor
+//----------------------------------------------------------
+MEMPHYS::DMM::WCHit::WCHit(const MEMPHYS::DMM::WCHit& aWCHit)
+  :MEMPHYS::DMM::BaseData(aWCHit)
+  ,m_position(aWCHit.m_position)
+  ,m_PMId(aWCHit.m_PMId)
+{
+  std::cout << "Copy Create WCHit("<<this<<") from ("<< &aWCHit <<")" <<std::endl;
+}//CCtor
+//----------------------------------------------------------
+MEMPHYS::DMM::WCHit& MEMPHYS::DMM::WCHit::operator=(const MEMPHYS::DMM::WCHit& aWCHit) {
+  std::cout << "Assign ("<<&aWCHit<<") to (" << this << ")" <<std::endl;
+  if (&aWCHit != this) {
+    m_position = aWCHit.m_position;
+    m_PMId = aWCHit.m_PMId;
+  }
+  return *this;
+}//op=
+//----------------------------------------------------------
+void* MEMPHYS::DMM::WCHit::cast(const std::string& aClass) const {
+  if(aClass=="Slash::Store::IStorable") {
+    return (void*)static_cast<const Slash::Store::IStorable*>(this);
+  } else if(aClass=="MEMPHYS::DMM::WCHit") {
+    return (void*)static_cast<const MEMPHYS::DMM::WCHit*>(this);
+  } else if(aClass=="MEMPHYS:DMM::BaseData") {
+    return (void*)static_cast<const MEMPHYS::DMM::BaseData*>(this);
+  } else {
+    return 0;
+  }  
+}//cast
+//----------------------------------------------------------
+bool  MEMPHYS::DMM::WCHit::visit(Slash::Store::IConstVisitor&) const {
+  return true;
+}//visit
+//----------------------------------------------------------
+bool MEMPHYS::DMM::WCHit::read(Slash::Store::IVisitor&) {
+  return true;
+}//read
+//----------------------------------------------------------
+void MEMPHYS::DMM::WCHit::dump(std::ostream& f,
+			       const std::string& option) {
+  MEMPHYS::DMM::BaseData::dump(f,option);
+  m_position->dump(f,option);
+  f << "PMId " << m_PMId
+    << std::endl;
+}//dump 
+
+
