Index: trunk/SophyaLib/SkyMap/localmap.cc
===================================================================
--- trunk/SophyaLib/SkyMap/localmap.cc	(revision 965)
+++ trunk/SophyaLib/SkyMap/localmap.cc	(revision 979)
@@ -65,5 +65,5 @@
 //++
 template<class T>
-LocalMap<T>::LocalMap()
+LocalMap<T>::LocalMap() :  pixels_()
 //
 //     
@@ -71,5 +71,5 @@
 {
   InitNul();
-  pixels_.Reset();
+  //  pixels_.Reset();
 }
 
@@ -148,4 +148,27 @@
 }
 
+////////////////////////// methodes de copie/share
+
+template<class T>
+void LocalMap<T>::CloneOrShare(const LocalMap<T>& a)
+{
+      recopierVariablesSimples(a);     
+      pixels_.CloneOrShare(a.pixels_);
+}
+
+template<class T>
+LocalMap<T>& LocalMap<T>::CopyElt(const LocalMap<T>& a)
+{
+  if (NbPixels() < 1) 
+    throw RangeCheckError("LocalMap<T>::CopyElt(const LocalMap<T>& )  - Not Allocated Array ! ");
+  if (NbPixels() != a.NbPixels()) 
+    throw(SzMismatchError("LocalMap<T>::CopyElt(const LocalMap<T>&) SizeMismatch")) ;
+      recopierVariablesSimples(a);     
+  int k;
+  for (k=0; k< nPix_; k++) pixels_(k) = a.pixels_(k);
+  return(*this);
+
+}
+
 template<class T>
 LocalMap<T>& LocalMap<T>::Set(const LocalMap<T>& a)
@@ -153,6 +176,8 @@
   if (this != &a) 
     { 
-      recopierVariablesSimples(a);     
-      pixels_.CloneOrShare(a.pixels_);
+      if (a.NbPixels() < 1) 
+	throw RangeCheckError("LocalMap<T>::Set(a ) - Array a not allocated ! ");
+      if (NbPixels() < 1) CloneOrShare(a);
+      else CopyElt(a);
       if (mInfo_) delete mInfo_;
       mInfo_ = NULL;
Index: trunk/SophyaLib/SkyMap/localmap.h
===================================================================
--- trunk/SophyaLib/SkyMap/localmap.h	(revision 965)
+++ trunk/SophyaLib/SkyMap/localmap.h	(revision 979)
@@ -198,4 +198,6 @@
 void recopierVariablesSimples(const LocalMap<T>& lm);
 LocalMap<T>& Set(const LocalMap<T>& a);
+void CloneOrShare(const LocalMap<T>& a);
+  LocalMap<T>& CopyElt(const LocalMap<T>& a);
 
 
Index: trunk/SophyaLib/SkyMap/spherehealpix.cc
===================================================================
--- trunk/SophyaLib/SkyMap/spherehealpix.cc	(revision 965)
+++ trunk/SophyaLib/SkyMap/spherehealpix.cc	(revision 979)
@@ -177,10 +177,11 @@
 
 template<class T>
-SphereHEALPix<T>::SphereHEALPix()
+SphereHEALPix<T>::SphereHEALPix() : pixels_(), sliceBeginIndex_(), 
+                                                sliceLenght_()
 
 //--
 {
   InitNul();
-  pixels_.Reset();
+  //  SetTemp(false);
 }
 
@@ -211,4 +212,5 @@
     }
   InitNul();
+  //  SetTemp(false);
   Pixelize(m);
   SetThetaSlices();
@@ -222,9 +224,8 @@
 //--
 {
-  if(s.mInfo_) mInfo_= new DVList(*s.mInfo_);
-
   nSide_= s.nSide_;
   nPix_ = s.nPix_;
   omeg_ = s.omeg_;
+  if(s.mInfo_) mInfo_= new DVList(*s.mInfo_);
 }
 //++
@@ -236,9 +237,9 @@
 //--
 {
-  if(s.mInfo_) mInfo_= new DVList(*s.mInfo_);
-
   nSide_= s.nSide_;
   nPix_ = s.nPix_;
   omeg_ = s.omeg_;
+  if(s.mInfo_) mInfo_= new DVList(*s.mInfo_);
+  //  CloneOrShare(s);
 }
 
@@ -246,9 +247,16 @@
 void SphereHEALPix<T>::CloneOrShare(const SphereHEALPix<T>& a)
 {
+  nSide_= a.nSide_;
+  nPix_ = a.nPix_;
+  omeg_ = a.omeg_;
   pixels_.CloneOrShare(a.pixels_);
   sliceBeginIndex_.CloneOrShare(a.sliceBeginIndex_);
   sliceLenght_.CloneOrShare(a.sliceLenght_);
-}
-
+
+  // pas forcement a conserver, pas forcement a cet endroit (GLM)
+  //  if (a.IsTemp() ) SetTemp(true);
+}
+
+////////////////////////// methodes de copie/share
 template<class T>
 SphereHEALPix<T>& SphereHEALPix<T>::Set(const SphereHEALPix<T>& a)
@@ -256,8 +264,12 @@
   if (this != &a) 
     { 
-      nSide_= a.nSide_;
-     nPix_ = a.nPix_;
-     omeg_ = a.omeg_;
-     CloneOrShare(a);
+
+  if (a.NbPixels() < 1) 
+    throw RangeCheckError("SphereHEALPix<T>::Set(a ) - Array a not allocated ! ");
+  if (NbPixels() < 1) CloneOrShare(a);
+  else CopyElt(a);
+
+
+      //     CloneOrShare(a);
      if (mInfo_) delete mInfo_;
      mInfo_ = NULL;
@@ -267,5 +279,20 @@
    }
 
-
+template<class T>
+SphereHEALPix<T>& SphereHEALPix<T>::CopyElt(const SphereHEALPix<T>& a)
+{
+  if (NbPixels() < 1) 
+    throw RangeCheckError("SphereHEALPix<T>::CopyElt(const SphereHEALPix<T>& )  - Not Allocated Array ! ");
+  if (NbPixels() != a.NbPixels()) 
+    throw(SzMismatchError("TArray<T>::MultElt(const TArray<T>&) SizeMismatch")) ;
+  nSide_= a.nSide_;
+  nPix_ = a.nPix_;
+  omeg_ = a.omeg_;
+  int k;
+  for (k=0; k< nPix_; k++) pixels_(k) = a.pixels_(k);
+  for (k=0; k< a.sliceBeginIndex_.Size(); k++) sliceBeginIndex_(k) = a.sliceBeginIndex_(k);
+  for (k=0; k< a.sliceLenght_.Size(); k++) sliceLenght_(k) = a.sliceLenght_(k);
+  return(*this);
+}
 //++
 // Titre	Destructor
