]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONv1.cxx
Updated list of MUON libraries
[u/mrichter/AliRoot.git] / MUON / AliMUONv1.cxx
index 702bc3b22d63e9eb6585bbab403a42069efdecfc..26dfebbaf1721ed16c9730c21fd073ae614a93b3 100644 (file)
@@ -27,9 +27,6 @@
 #include "AliMUONResponseFactory.h"
 #include "AliMUONSegmentation.h"
 #include "AliMUONHit.h"
-#include "AliMUONTriggerCircuit.h"
-#include "AliMUONTriggerCircuitNew.h"
-#include "AliMUONTriggerCrateStore.h"
 #include "AliMUONGeometryBuilder.h"    
 #include "AliMUONGeometry.h"   
 #include "AliMUONGeometryTransformer.h"        
@@ -37,6 +34,8 @@
 #include "AliMUONStringIntMap.h"       
 #include "AliMUONGeometryDetElement.h" 
 
+#include "AliMpDEManager.h"
+
 #include "AliConst.h" 
 #include "AliMagF.h"
 #include "AliRun.h"
@@ -53,7 +52,9 @@
 
 #include <string>
 
+/// \cond CLASSIMP
 ClassImp(AliMUONv1)
+/// \endcond
  
 //___________________________________________
 AliMUONv1::AliMUONv1() 
@@ -74,10 +75,8 @@ AliMUONv1::AliMUONv1()
 } 
 
 //___________________________________________
-AliMUONv1::AliMUONv1(const char *name, const char *title,
-                     const char* sDigitizerClassName,
-                     const char* digitizerClassName)
-: AliMUON(name,title,sDigitizerClassName,digitizerClassName), 
+AliMUONv1::AliMUONv1(const char *name, const char* title)
+: AliMUON(name, title), 
     fAngleEffect(kTRUE),
     fStepMaxInActiveGas(0.6),
     fStepSum(0x0),
@@ -122,15 +121,6 @@ AliMUONv1::AliMUONv1(const char *name, const char *title,
     fAngleEffectNorma->SetParameter(3,-1.490e-03);
 }
 
-//_____________________________________________________________________________
-AliMUONv1::AliMUONv1(const AliMUONv1& right) 
-  : AliMUON(right) 
-{  
-/// Copy constructor (not implemented)
-
-  AliFatal("Copy constructor not provided.");
-}
-
 //___________________________________________
 AliMUONv1::~AliMUONv1()
 {
@@ -144,19 +134,6 @@ AliMUONv1::~AliMUONv1()
   delete fAngleEffectNorma; 
 }
 
-//_____________________________________________________________________________
-AliMUONv1& AliMUONv1::operator=(const AliMUONv1& right)
-{
-/// Assignement operator (not implemented)
-
-  // check assignement to self
-  if (this == &right) return *this;
-
-  AliFatal("Assignement operator not provided.");
-    
-  return *this;  
-}    
-
 //__________________________________________________
 void AliMUONv1::CreateGeometry()
 {
@@ -173,6 +150,15 @@ void AliMUONv1::CreateMaterials()
   fGeometryBuilder->CreateMaterials();
 }
 
+//________________________________________________________________
+void AliMUONv1::AddAlignableVolumes() const
+{
+/// Construct materials using geometry builder
+
+  GetGeometryTransformer()->AddAlignableVolumes();
+}
+
+
 //___________________________________________
 void AliMUONv1::Init()
 { 
@@ -184,17 +170,11 @@ void AliMUONv1::Init()
   AliDebug(1,"Finished Init for version 1 - CPC chamber type");   
  
 
-  std::string ftype(GetTitle());
-
   // Build segmentation
   // using geometry parametrisation
   //
   AliMUONSegFactory segFactory(GetGeometryTransformer());
-  fSegmentation = segFactory.CreateSegmentation(ftype);
-
-  if (!fSegmentation) {
-    AliFatal(Form("Wrong factory type : %s",ftype.c_str()));
-  }        
+  fSegmentation = segFactory.CreateSegmentation();
 
   // Build response
   //
@@ -205,37 +185,22 @@ void AliMUONv1::Init()
   // Initialize segmentation
   //
   fSegmentation->Init();
-
-  // Initialize trigger circuits
-  //
-  for (Int_t i=0; i<AliMUONConstants::NTriggerCircuit(); i++)  {
-    AliMUONTriggerCircuit* c = (AliMUONTriggerCircuit*)(fTriggerCircuits->At(i));
-    c->Init(i);
-  }
-  
-  AliMUONTriggerCrateStore store;
-  store.ReadFromFile();
-  for (Int_t i=0; i<AliMUONConstants::NTriggerCircuit(); i++)  
-  {
-    AliMUONTriggerCircuitNew* c = (AliMUONTriggerCircuitNew*)(fTriggerCircuitsNew->At(i));
-    c->Init(i,store);
-  }
   
 }
 
 //__________________________________________________________________
-Int_t  AliMUONv1::GetChamberId(Int_t volId) const
+Int_t  AliMUONv1::GetGeomModuleId(Int_t volId) const
 {
 /// Check if the volume with specified  volId is a sensitive volume (gas) 
-/// of some chamber and returns the chamber number;
+/// of some chamber and return the chamber number;
 /// if not sensitive volume - return 0.
 
-  for (Int_t i = 0; i < AliMUONConstants::NCh(); i++) {
+  for (Int_t i = 0; i < AliMUONConstants::NGeomModules(); i++) {
     if ( GetGeometry()->GetModule(i)->IsSensitiveVolume(volId) )
-      return i+1;
+      return i;
   }    
 
-  return 0;
+  return -1;
 }
 
 //_______________________________________________________________________________
@@ -274,8 +239,6 @@ void AliMUONv1::StepManager()
   // Only gas gap inside chamber
   // Tag chambers and record hits when track enters 
   static Int_t   idvol=-1, iEnter = 0;
-  Int_t   iChamber=0;
-  Int_t   id=0;
   Int_t   copy;
   const  Float_t kBig = 1.e10;
   static Double_t xyzEnter[3];
@@ -283,25 +246,31 @@ void AliMUONv1::StepManager()
   //
   // Only gas gap inside chamber
   // Tag chambers and record hits when track enters 
-  id=gMC->CurrentVolID(copy);
-  iChamber = GetChamberId(id);
-  idvol = iChamber -1;
+  Int_t id=gMC->CurrentVolID(copy);
+  Int_t iGeomModule = GetGeomModuleId(id);
+  if (iGeomModule == -1) return;
 
-  if (idvol == -1) return;
-  
   // Detection elements id
   const AliMUONGeometryModule* kGeometryModule
-    = GetGeometry()->GetModule(iChamber-1);
-
+    = GetGeometry()->GetModule(iGeomModule);
   AliMUONGeometryDetElement* detElement
     = kGeometryModule->FindBySensitiveVolume(CurrentVolumePath());
+    
+  if (!detElement && iGeomModule < AliMUONConstants::NGeomModules()-2) {
+    iGeomModule++;
+    const AliMUONGeometryModule* kGeometryModule2
+      = GetGeometry()->GetModule(iGeomModule);
+    detElement 
+      = kGeometryModule2->FindBySensitiveVolume(CurrentVolumePath());
+  }    
 
   Int_t detElemId = 0;
   if (detElement) detElemId = detElement->GetUniqueID(); 
  
   if (!detElemId) {
-    cerr << "Chamber id: "
-        << setw(3) << iChamber << "  "
+    AliErrorStream() 
+         << "Geometry module id: "
+        << setw(3) << iGeomModule << "  "
         << "Current SV: " 
         <<  CurrentVolumePath() 
          << "  detElemId: "
@@ -309,11 +278,15 @@ void AliMUONv1::StepManager()
          << endl;
     Double_t x, y, z;
     gMC->TrackPosition(x, y, z);        
-    cerr << "  global position: "
+    AliErrorStream() 
+         << "  global position: "
         << x << ", " << y << ", " << z
         << endl;
-    AliError("DetElemId not identified.");
-  }  
+    AliErrorStream() << "DetElemId not identified." << endl;
+  } 
+  
+  Int_t iChamber = AliMpDEManager::GetChamberId(detElemId) + 1; 
+  idvol = iChamber -1;
     
   // Filling TrackRefs file for MUON. Our Track references are the active volume of the chambers
   if ( (gMC->IsTrackEntering() || gMC->IsTrackExiting() ) ) {
@@ -438,7 +411,7 @@ void AliMUONv1::StepManager()
     }
     
     // One hit per chamber
-    GetMUONData()->AddHit2(fIshunt, 
+    GetMUONData()->AddHit(fIshunt, 
                          gAlice->GetMCApp()->GetCurrentTrackNumber(), 
                          detElemId, ipart,
                          fTrackPosition.X(),