New classes for Segmentation and Mapping
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Jul 2004 22:26:12 +0000 (22:26 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 4 Jul 2004 22:26:12 +0000 (22:26 +0000)
MUON/AliMUONSegmentIndex.cxx [new file with mode: 0644]
MUON/AliMUONSegmentIndex.h [new file with mode: 0644]
MUON/AliMUONSegmentManuIndex.cxx [new file with mode: 0644]
MUON/AliMUONSegmentManuIndex.h [new file with mode: 0644]
MUON/AliMUONSegmentPosition.cxx [new file with mode: 0644]
MUON/AliMUONSegmentPosition.h [new file with mode: 0644]
MUON/AliMUONSegmentationDetectionElement.cxx [new file with mode: 0644]
MUON/AliMUONSegmentationDetectionElement.h [new file with mode: 0644]
MUON/MUONLinkDef.h
MUON/libMUON.pkg

diff --git a/MUON/AliMUONSegmentIndex.cxx b/MUON/AliMUONSegmentIndex.cxx
new file mode 100644 (file)
index 0000000..d3845c7
--- /dev/null
@@ -0,0 +1,69 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element indexing in a detection element    
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  ix ,iy 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+#include "AliMUONSegmentIndex.h"
+
+//___________________________________________
+ClassImp(AliMUONSegmentIndex)
+
+//
+//___________________________________________
+AliMUONSegmentIndex::AliMUONSegmentIndex() : TNamed()
+{
+  fChannelId = 0;
+  fPadX = 0;
+  fPadY = 0;
+  fCathode=0;  
+}
+//___________________________________________
+AliMUONSegmentIndex::AliMUONSegmentIndex(const Int_t channelId, const Int_t padX, const Int_t padY, const Int_t cathode) : TNamed()
+{
+  char name[10];
+  sprintf(name,"%d-%d",padX,padY);
+  fName = name;
+  fTitle = name;
+  fChannelId = channelId;
+  fPadX = padX;
+  fPadY = padY;
+  fCathode=cathode;  
+}
+//_______________________________________________
+AliMUONSegmentIndex::~AliMUONSegmentIndex()
+{
+
+}
+//___________________________________________
+Int_t AliMUONSegmentIndex::Compare(const TObject *obj) const
+{
+  AliMUONSegmentIndex * myobj = ( AliMUONSegmentIndex *) obj;
+  return (fChannelId > myobj->GetChannelId()) ? 1 : -1;
+}
+//___________________________________________
+void AliMUONSegmentIndex::Print() const
+{
+  printf("%s id=%d ix=%d iy=%d cathode=%d\n",fName.Data(),fChannelId,fPadX,fPadY,fCathode);   
+}
diff --git a/MUON/AliMUONSegmentIndex.h b/MUON/AliMUONSegmentIndex.h
new file mode 100644 (file)
index 0000000..1060a82
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef ALIMUONSEGMENTINDEX_H
+#define ALIMUONSEGMENTINDEX_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element indexing in a detection element    
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  ix ,iy 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+#include <TNamed.h>
+
+class AliMUONSegmentIndex : public TNamed {
+ public:
+  AliMUONSegmentIndex();
+  AliMUONSegmentIndex(const Int_t channelId, const Int_t padX, const Int_t padY, const Int_t cathode);
+  virtual ~AliMUONSegmentIndex();
+  
+
+  Int_t Compare(const TObject *obj) const;
+  Int_t GetChannelId() const {return fChannelId;}
+  Int_t GetPadX()      const {return fPadX;} 
+  Int_t GetPadY()      const {return fPadX;} 
+  Int_t GetCathode()   const {return fCathode;} 
+  
+  void Print() const;
+
+ private:
+  Int_t fChannelId; // Id of the channel within the detection element
+  Int_t fPadX;
+  Int_t fPadY;
+  Int_t fCathode;
+  
+  ClassDef(AliMUONSegmentIndex,1) // Segmenation for MUON detection elements   
+};
+#endif
+
+
+
+
+
+
diff --git a/MUON/AliMUONSegmentManuIndex.cxx b/MUON/AliMUONSegmentManuIndex.cxx
new file mode 100644 (file)
index 0000000..05a9cd3
--- /dev/null
@@ -0,0 +1,70 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element indexing in a detection element for electronics   
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  #manu, #manuchannel 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+
+#include "AliMUONSegmentManuIndex.h"
+
+//___________________________________________
+ClassImp(AliMUONSegmentManuIndex)
+
+//
+//___________________________________________
+AliMUONSegmentManuIndex::AliMUONSegmentManuIndex() 
+{
+  fChannelId= 0;; // Id of the channel within the detection element
+  fManuId= 0;; // Manu id in the detection element
+  fBusPatchId= 0;; // BusPatchId in the detection element up to 4 for slats
+  fManuChannelId= 0;; 
+}
+//___________________________________________
+AliMUONSegmentManuIndex::AliMUONSegmentManuIndex(const Int_t channelId, const Int_t manuId, const Int_t busPatchId,  Int_t manuChannelId) : TNamed()
+{  
+  char name[10];
+  sprintf(name,"%d-%d",manuId,manuChannelId);
+  fName=name;
+  fTitle=name;
+  fChannelId     = channelId;
+  fManuId        = manuId;
+  fBusPatchId    = busPatchId;
+  fManuChannelId = manuChannelId;  
+}
+//_______________________________________________
+AliMUONSegmentManuIndex::~AliMUONSegmentManuIndex()
+{
+
+}
+//___________________________________________
+Int_t AliMUONSegmentManuIndex::Compare(const TObject *obj) const
+{
+ AliMUONSegmentManuIndex * myobj = ( AliMUONSegmentManuIndex *) obj;
+  return (fChannelId > myobj->GetChannelId()) ? 1 : -1;
+}
+//___________________________________________
+void AliMUONSegmentManuIndex::Print() const
+{
+  printf("%s id=%d ManuId=%d BusPatch=%d ManuChannelId=%d\n",fName.Data(),fChannelId,fManuId,fBusPatchId,fManuChannelId);   
+}
diff --git a/MUON/AliMUONSegmentManuIndex.h b/MUON/AliMUONSegmentManuIndex.h
new file mode 100644 (file)
index 0000000..6309b81
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef ALIMUONSEGMENTMANUINDEX_H
+#define ALIMUONSEGMENTMANUINDEX_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element indexing in a detection element for electronics   
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  #manu, #manuchannel 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+#include <TNamed.h>
+
+
+class AliMUONSegmentManuIndex : public TNamed {
+ public:
+  AliMUONSegmentManuIndex();
+  AliMUONSegmentManuIndex(const Int_t channelId, const Int_t manuId, const Int_t busPatchId, const Int_t manuChannelId);
+
+  virtual ~AliMUONSegmentManuIndex();
+
+  Int_t Compare(const TObject *obj) const;
+
+  Int_t GetChannelId()     const{return fChannelId;}
+  Int_t GetManuId()        const{return fManuId;}
+  Int_t GetBusPatchId()    const{return fBusPatchId;}
+  Int_t GetManuChannelId() const{return fManuChannelId;}
+  
+  void Print() const;
+
+ private:
+  Int_t fChannelId; // Id of the channel within the detection element
+  Int_t fManuId; // Manu id in the detection element
+  Int_t fBusPatchId; // BusPatchId in the detection element up to 4 for slats
+  Int_t fManuChannelId; // ChannelId in the manu card 1-64
+  
+  ClassDef(AliMUONSegmentManuIndex,1) // Segmenation for MUON detection elements
+    
+};
+
+#endif
+
+
+
+
+
+
diff --git a/MUON/AliMUONSegmentPosition.cxx b/MUON/AliMUONSegmentPosition.cxx
new file mode 100644 (file)
index 0000000..9f9a26e
--- /dev/null
@@ -0,0 +1,68 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element position in local coordinates of the detection element   
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is one of the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  x_local, y_local 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+#include "AliMUONSegmentPosition.h"
+
+//___________________________________________
+ClassImp(AliMUONSegmentPosition)
+
+//
+//___________________________________________
+AliMUONSegmentPosition::AliMUONSegmentPosition() : TNamed()
+{
+  fChannelId = 0;
+  fX = 0.;
+  fY = 0.;  
+}
+//___________________________________________
+AliMUONSegmentPosition::AliMUONSegmentPosition(const Int_t channelId, const Float_t x, const Float_t y, const Int_t cathode) : TNamed()
+{
+  char name[10];
+  sprintf(name,"%5.2f-%5.2f",x,y);
+  fName = name;
+  fTitle= name;
+  fChannelId = channelId;
+  fX = x;
+  fY = y;
+  fCathode=cathode;
+}
+//_______________________________________________
+AliMUONSegmentPosition::~AliMUONSegmentPosition()
+{
+
+}
+//___________________________________________
+Int_t AliMUONSegmentPosition::Compare(const TObject *obj) const
+{
+  AliMUONSegmentPosition * myobj = ( AliMUONSegmentPosition *) obj;
+  return (fChannelId > myobj->GetChannelId()) ? 1 : -1;
+}
+//___________________________________________
+void AliMUONSegmentPosition::Print() const
+{
+  printf("%s id=%d x=%f y=%f cathode=%d\n",fName.Data(),fChannelId, fX, fY,fCathode);   
+}
diff --git a/MUON/AliMUONSegmentPosition.h b/MUON/AliMUONSegmentPosition.h
new file mode 100644 (file)
index 0000000..7d2cc6a
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef ALIMUONSEGMENTPOSITION_H
+#define ALIMUONSEGMENTPOSITION_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+//===================================================================
+//  Segment element position in local coordinates of the detection element   
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class is one of the basic component of 
+//  AliMUONSegmentationDetectionElement and contains al the 
+//  info about a segment (pad or strip):
+//          Id-indetectionelement,  x_local, y_local 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//====================================================================
+
+#include <TNamed.h>
+
+class AliMUONSegmentPosition : public TNamed
+{
+ public:
+    AliMUONSegmentPosition();
+    AliMUONSegmentPosition(const Int_t channelId, const Float_t x, const  Float_t y, const Int_t cathode);
+    virtual ~AliMUONSegmentPosition();
+      
+    Int_t   Compare(const TObject *obj) const;
+    Int_t   GetChannelId()const {return fChannelId;}
+    Float_t GetXlocal()   const {return fX;}
+    Float_t GetYlocal()   const {return fY;}
+    Int_t   GetCathode()  const {return fCathode;}
+
+    void Print() const;
+ private:
+    Int_t fChannelId;   // Id of the channel within the detection element
+    Float_t fX;
+    Float_t fY;
+    Int_t fCathode;
+     
+    ClassDef(AliMUONSegmentPosition,1) // Loal positions of segments
+       
+};
+#endif
+
+
+
+
+
+
diff --git a/MUON/AliMUONSegmentationDetectionElement.cxx b/MUON/AliMUONSegmentationDetectionElement.cxx
new file mode 100644 (file)
index 0000000..d110706
--- /dev/null
@@ -0,0 +1,216 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+//===========================================================
+//  Segmentation classes for MUON Detection Elements      
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class interfaces with the mapping and segmentation
+//  files MUON.
+//  This files are placed by default in 
+//  $ALICE_ROOT/MUON/mapping/data/Stationxxx/yyy_plane/
+//  There are in tracking 23 types of detection elements
+//  8 SectorSt1, 8 SectorSt2, 2 122000SR1, 2 122000NR1, 4 112200SR2, 4 112200NR2 
+//  4 122200S, 4 122200N, 8 222000N,8 220000N,  8 330000N, 4 122300N, 8 112230NR3 
+//  8 112230N, 8 222330N, 8 223300N, 16 333000N, 4  122330N, 8 112233NR3, 8 112233N 
+//  8 222333N, 8 223330N, 8 333300N 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//===========================================================
+
+#include <Riostream.h>
+
+#include "TClonesArray.h"
+#include "TMap.h"
+
+#include "AliMUONSegmentationDetectionElement.h"
+#include "AliMUONSegmentManuIndex.h"
+#include "AliMUONSegmentPosition.h"
+#include "AliMUONSegmentIndex.h"
+
+
+//___________________________________________
+ClassImp(AliMUONSegmentationDetectionElement)
+
+//static data member
+const TString AliMUONSegmentationDetectionElement::fgkDefaultTop =getenv("ALICE_ROOT") ;
+const TString AliMUONSegmentationDetectionElement::fgkStationDir = "/MUON/mapping/data/station";
+const TString AliMUONSegmentationDetectionElement::fgkBendingDir= "/bending_plane";  
+const TString AliMUONSegmentationDetectionElement::fgkNonBendingDir= "/non-bending_plane";
+const TString AliMUONSegmentationDetectionElement::fgkFileExt = ".map";
+const TString AliMUONSegmentationDetectionElement::fgkBendingExt = ".Bending";
+const TString AliMUONSegmentationDetectionElement::fgkNonBendingExt = ".NonBending";
+
+//___________________________________________
+
+AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement() : TObject()
+{
+  fMapManuIndexIndex= 0x0;
+  fMapIndexManuIndex= 0x0;
+  fMapIndexPosition= 0x0;
+  fXlocalSegmentPositions= 0x0;
+  fYlocalSegmentPositions= 0x0;
+}
+
+
+// AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement(const char* ElementType)
+// {
+  
+//   fMapManuIndexIndex= 0x0;
+//   fMapIndexManuIndex= 0x0;
+//   fMapIndexPosition= 0x0;
+//   fXlocalSegmentPositions= 0x0;
+//   fYlocalSegmentPositions= 0x0;
+// }
+
+//________________________________________________
+AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement(const AliMUONSegmentationDetectionElement& rhs): TObject(rhs) 
+{
+// Protected copy constructor
+
+  Fatal("AliMUONSegmentationDetectionElementModule", "Not implemented.");
+}
+//_________________________________________________
+AliMUONSegmentationDetectionElement::~AliMUONSegmentationDetectionElement(){
+  fListOfIndexes->Delete();
+  fListOfManuIndexes->Delete();
+  fListOfPositions->Delete();
+  fMapManuIndexIndex->Clear();
+  fMapIndexManuIndex->Clear();
+  fMapIndexPosition->Clear();
+}
+//_________________________________________________
+AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::GetIndex( const char * SegmentManuIndexName)
+{
+  if (fMapManuIndexIndex) return  (AliMUONSegmentIndex*)  fMapManuIndexIndex->GetValue(SegmentManuIndexName);
+  else {
+    Warning("GetIndex","SegmentManuIndex %s out of DetectionElement Mapping %s",
+           SegmentManuIndexName,fDetectionElementType.Data());
+    return 0x0;
+  }
+}
+
+//_________________________________________________
+AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::GetManuIndex( const char * SegmentIndexName)
+{
+  if (fMapIndexManuIndex) return (AliMUONSegmentManuIndex*) fMapIndexManuIndex->GetValue(SegmentIndexName);
+  else {
+    Warning("GetManuIndex","SegmentIndex %s out of Detection Element mapping %s",
+           SegmentIndexName,fDetectionElementType.Data());
+    return 0x0;
+  }
+}
+
+//_________________________________________________
+AliMUONSegmentPosition  * AliMUONSegmentationDetectionElement::GetPosition( const char * SegmentIndexName)
+{
+  if (fMapIndexPosition) return (AliMUONSegmentPosition*) fMapIndexPosition->GetValue(SegmentIndexName);
+  else {
+    Warning("GetPosition","SegmentIndex %s out of DetectionElement mapping %s",
+           SegmentIndexName, fDetectionElementType.Data());
+    return 0x0;
+  }
+}
+
+//_________________________________________________
+AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::FindManuIndex(const char* ManuIndexName)
+{
+  if (fMapManuIndexIndex) return (AliMUONSegmentManuIndex*) fMapManuIndexIndex->FindObject(ManuIndexName);
+  else  {
+    Warning("FindManuIndex","SegmentManuIndex %s out of DetectionElement mapping %s",
+           ManuIndexName,fDetectionElementType.Data());
+    return 0x0;
+  }
+}
+
+//_________________________________________________
+AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::FindIndex(const char* IndexName)
+{
+  if (fMapIndexPosition) return (AliMUONSegmentManuIndex *) fMapIndexPosition->FindObject(IndexName);
+  else {
+    Warning("FindIndex","SegmentIndex %s out of DetectionElement mapping %s",
+           IndexName,fDetectionElementType.Data());
+    return 0x0;
+  }
+}
+
+//_________________________________________________
+void    AliMUONSegmentationDetectionElement::Init(const char * DetectionElementType)
+{
+  TString ElementType(DetectionElementType);
+  fSegmentationMappingFile_Bending = fgkDefaultTop+fgkStationDir+"345"
+    +fgkBendingDir+"/"+ElementType+fgkBendingExt+fgkFileExt;
+  printf("file is %s\n", fSegmentationMappingFile_Bending.Data());
+  fSegmentationMappingFile_NonBending = fgkDefaultTop+fgkStationDir+"345"
+    +fgkNonBendingDir+"/"+ElementType+fgkNonBendingExt+fgkFileExt;
+
+  if (fMapManuIndexIndex==0x0) { 
+    fListOfIndexes = new TObjArray(10000);
+    fListOfManuIndexes =new TObjArray(10000);
+    fListOfPositions =new TObjArray(10000);
+    fMapManuIndexIndex= new TMap();
+    fMapIndexManuIndex = new TMap();
+    fMapIndexPosition = new TMap();
+  }
+  else {
+    fListOfIndexes->Delete();
+    fListOfManuIndexes->Delete();
+    fListOfPositions->Delete();
+    fMapManuIndexIndex->Clear();
+    fMapIndexManuIndex->Clear();
+    fMapIndexPosition->Clear();
+  }
+
+
+
+  Int_t icathode;
+  //Bendingplane
+  icathode=0;
+  ReadingSegmentationMappingFile(fSegmentationMappingFile_Bending ,icathode);
+  //NonBendingplane
+  icathode=1;
+  ReadingSegmentationMappingFile(fSegmentationMappingFile_NonBending,icathode);
+  
+}
+//_______________________________________________________________
+void AliMUONSegmentationDetectionElement::ReadingSegmentationMappingFile(TString infile, Int_t cathode)
+{ 
+  ifstream in( infile,  ios::in);
+  if (!in) {
+    //    Error("ReadingSegmentationMappingFile", "File not found.");
+  }
+  else {
+    Int_t id, ix, iy, idmanu, idchannel;
+    Float_t x, y;
+    while ( !in.eof()) {
+      in >> id >> ix >> iy >> x >> y >> idmanu >> idchannel;
+      char name[10];
+      sprintf(name,"%d%d",ix,iy);
+      printf("%s id=%d ix=%d iy=%d x=%f y=%f idmanu=%d and idchannel=%d\n",name,id, ix, iy,  x, y,idmanu, idchannel);
+      
+      fListOfIndexes->AddAt(     new AliMUONSegmentIndex(id,ix,iy,cathode), id);
+      fListOfManuIndexes->AddAt( new AliMUONSegmentManuIndex(id,idmanu,0,idchannel), id);;
+      fListOfPositions->AddAt(   new AliMUONSegmentPosition(id, x, y,cathode), id);;
+
+      ( (AliMUONSegmentIndex* )fListOfIndexes->At(id))->Print();
+      ( (AliMUONSegmentManuIndex*)fListOfManuIndexes->At(id))->Print();
+      ( (AliMUONSegmentPosition*)fListOfPositions->At(id))->Print();
+     
+      fMapManuIndexIndex->Add( fListOfManuIndexes->At(id), fListOfIndexes->At(id));
+      fMapIndexManuIndex->Add( fListOfIndexes->At(id),     fListOfManuIndexes->At(id));
+      fMapIndexPosition->Add(  fListOfIndexes->At(id),     fListOfPositions->At(id));
+    } 
+  }
+  in.close();
+}
diff --git a/MUON/AliMUONSegmentationDetectionElement.h b/MUON/AliMUONSegmentationDetectionElement.h
new file mode 100644 (file)
index 0000000..1dc9f31
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef ALIMUONSEGMENTATIONDETECTIONELEMENT_H
+#define ALIMUONSEGMENTATIONDETECTIONELEMENT_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+//===========================================================
+//  Segmentation classes for MUON Detection Elements      
+//        Gines MARTINEZ, SUBATECH July 04                
+//  This class interfaces with the mapping and segmentation
+//  files MUON.
+//  This files are placed by default in 
+//  $ALICE_ROOT/MUON/mapping/data/Stationxxx/yyy_plane/
+//  There are in tracking 23 types of detection elements
+//  8 SectorSt1, 8 SectorSt2, 2 122000SR1, 2 122000NR1, 4 112200SR2, 4 112200NR2 
+//  4 122200S, 4 122200N, 8 222000N,8 220000N,  8 330000N, 4 122300N, 8 112230NR3 
+//  8 112230N, 8 222330N, 8 223300N, 16 333000N, 4  122330N, 8 112233NR3, 8 112233N 
+//  8 222333N, 8 223330N, 8 333300N 
+//  Detailed information in Alice Technical Note xxxxxxxx (2004)
+//===========================================================
+#include <Riostream.h>
+
+
+#include <TObject.h>
+#include <TString.h>
+#include <TArrayF.h>
+
+class TClonesArray;
+class TMap;
+
+class AliMUONSegmentManuIndex;
+class AliMUONSegmentPosition;
+class AliMUONSegmentIndex;
+
+class AliMUONSegmentationDetectionElement : public TObject {
+ public:
+  AliMUONSegmentationDetectionElement();
+  //AliMUONSegmentationDetectionElement(const char* ElementType="");
+  virtual ~AliMUONSegmentationDetectionElement();
+  
+  AliMUONSegmentIndex     * GetIndex( const char * SegmentManuIndexName);
+  AliMUONSegmentManuIndex * GetManuIndex( const char * SegmentIndexName);
+  AliMUONSegmentPosition  * GetPosition( const char * SegmentIndexName);
+  TObjArray *            ListOfIndexes() {return fListOfIndexes;}
+  TObjArray *            ListOfManuIndexes() {return fListOfIndexes;}
+  TObjArray *            ListOfPositions() {return fListOfIndexes;}
+  AliMUONSegmentManuIndex * FindManuIndex(const char* ManuIndexName="");
+  AliMUONSegmentManuIndex * FindIndex(const char* IndexName="");
+  
+  void     Init(const char * DetectionElementType="slat220000N");
+
+  void     ReadingSegmentationMappingFile(TString infile, Int_t cathode);
+  
+ protected:
+  AliMUONSegmentationDetectionElement(const AliMUONSegmentationDetectionElement& rhs);
+  
+ private:
+  // static data members  
+  static const TString fgkDefaultTop;  // 
+  static const TString fgkStationDir;  // 
+  static const TString fgkBendingDir;    //bending plane directory
+  static const TString fgkNonBendingDir; //non-bending plane directory
+  static const TString fgkFileExt;  // File extention
+  static const TString fgkBendingExt;  // bending file extention
+  static const TString fgkNonBendingExt;  // bending file extention
+
+  // data members
+  TString   fDetectionElementType;               //  Type of detection element St1Sector, slat220000N, etc ....
+  TString   fSegmentationMappingFile_Bending;    //  Segmentation & mapping file for bending plane
+  TString   fSegmentationMappingFile_NonBending; //  Segmentation & mapping file for non bending plane
+  TObjArray * fListOfIndexes;
+  TObjArray * fListOfManuIndexes;
+  TObjArray * fListOfPositions;
+  TMap *    fMapManuIndexIndex;  // Map with key ManuIndex and value = Index
+  TMap *    fMapIndexManuIndex;// Map with key ManuIndexIndex and value = ManuIndex
+  TMap *    fMapIndexPosition;// Map with key Index and value = Position
+  TArrayF * fXlocalSegmentPositions; // Array of posible values of Xlocal
+  TArrayF * fYlocalSegmentPositions;// Array of posible values of Ylocal
+  
+
+  ClassDef(AliMUONSegmentationDetectionElement,1) // Segmentation for MUON detection elements
+    
+    };
+#endif
+
+
+
+
+
+
index 3845c073a186e481eec5b57e00f7031aa15e2092..c61bccd94cad43d4847b1946a44cf9f5012b5cf7 100644 (file)
 #pragma link C++ class  AliMUONResponseTriggerV1+;
 #pragma link C++ class  AliMUONSegmentationV01+;
 #pragma link C++ class  AliMUONSegmentationV02+;
-#pragma link C++ class  AliMUONSegmentationV04+;
-#pragma link C++ class  AliMUONSegmentationV05+;
-#pragma link C++ class  AliMUONSegmentationV1+;
 #pragma link C++ class  AliMUONSegmentationTrigger+;
 #pragma link C++ class  AliMUONSegmentationTriggerX+;
 #pragma link C++ class  AliMUONSegmentationTriggerY+;
+#pragma link C++ class  AliMUONSegmentationDetectionElement+;
+#pragma link C++ class  AliMUONSegmentIndex+;
+#pragma link C++ class  AliMUONSegmentManuIndex+;
+#pragma link C++ class  AliMUONSegmentPosition+;
 #pragma link C++ class  AliMUONChamber+;
 #pragma link C++ class  AliMUONChamberTrigger+;
 #pragma link C++ class  AliMUONPoints+;
index aab6b55694ef1c96a7463b7d3745b68fef19a6cd..4eae7dc1a1207d373fec0c46a03dc6d0b24251f4 100644 (file)
@@ -4,12 +4,12 @@ SRCS         = AliMUONChamber.cxx AliMUONChamberTrigger.cxx \
               AliMUONSegmentationV0.cxx\
               AliMUONResponse.cxx AliMUONResponseV0.cxx \
               AliMUONSegmentationV01.cxx \
-               AliMUONSegmentationV02.cxx AliMUONSegmentationV04.cxx \
-              AliMUONSegmentationV05.cxx\
+               AliMUONSegmentationV02.cxx \
               AliMUONSegmentationTrigger.cxx  AliMUONResponseTrigger.cxx\
                AliMUONResponseTriggerV1.cxx\
               AliMUONSegmentationTriggerX.cxx AliMUONSegmentationTriggerY.cxx \
-               AliMUONSegmentationV1.cxx AliMUON.cxx AliMUONv0.cxx AliMUONv1.cxx AliMUONv3.cxx \
+               AliMUONSegmentationDetectionElement.cxx AliMUONSegmentIndex.cxx AliMUONSegmentManuIndex.cxx AliMUONSegmentPosition.cxx\
+               AliMUON.cxx AliMUONv0.cxx AliMUONv1.cxx AliMUONv3.cxx \
                AliMUONChamberGeometry.cxx AliMUONGeometryConstituent.cxx AliMUONGeometryEnvelope.cxx \
                AliMUONVGeometryBuilder.cxx AliMUONSt1GeometryBuilder.cxx AliMUONSt1GeometryBuilderV2.cxx \
                AliMUONSt2GeometryBuilder.cxx AliMUONSlatGeometryBuilder.cxx \