]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpDEManager.cxx
Introduced new DE names unique to each det element;
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpDEManager.cxx
index 008ac83f003f274790ae571b663a2e3adb193123..0dbbb8b4a1d73f9d21c38ab2935b89d920871b36 100644 (file)
@@ -43,7 +43,9 @@ const char  AliMpDEManager::fgkNameSeparator = '_';
 const char  AliMpDEManager::fgkCommentPrefix = '#'; 
 const Int_t AliMpDEManager::fgkCoefficient = 100;
 AliMpExMap  AliMpDEManager::fgDENamesMap(true);
+AliMpExMap  AliMpDEManager::fgDESegNamesMap(true);
 AliMpExMap  AliMpDEManager::fgDECathBNBMap(true);
+TArrayI     AliMpDEManager::fgNofDEPerChamber(AliMpConstants::NofChambers());
 
 //______________________________________________________________________________
 
@@ -146,7 +148,7 @@ AliMpDEManager::ReadDENames(AliMpStationType station)
   // Read DE names
   //
   Int_t detElemId;
-  TString name1, name2;
+  TString name, name1, name2;
   AliMpPlaneType planeForCathode[2];
   
   while ( ! in.eof() ) 
@@ -158,6 +160,7 @@ AliMpDEManager::ReadDENames(AliMpStationType station)
     else 
     {  
       detElemId = word.Atoi();
+      in >> name;
       in >> name1;
       // warning : important to check non bending first (=nbp),
       // as bp is contained within nbp...
@@ -206,13 +209,32 @@ AliMpDEManager::ReadDENames(AliMpStationType station)
       
       if ( ! fgDENamesMap.GetValue(detElemId) ) 
       {
-        AliDebugClassStream(1)  
-        << "Adding  "  << detElemId << "  " << name1 << "  " << name2 << endl;
-        fgDENamesMap.Add(detElemId, 
+        AliDebugClassStream(3)  
+          << "Adding DE name "  << detElemId << "  " << name << endl;
+        fgDENamesMap.Add(detElemId, new TObjString(name)); 
+      } 
+      else 
+      {
+        AliWarningClassStream()
+          << "DE name "  << detElemId << "  " << name << " already defined." << endl;
+      }          
+
+      if ( ! fgDESegNamesMap.GetValue(detElemId) ) 
+      {
+        AliDebugClassStream(3)  
+        << "Adding DE seg. names  "  << detElemId << "  " << name1 << "  " << name2 << endl;
+        fgDESegNamesMap.Add(detElemId, 
                          new TPair(new TObjString(name1), new TObjString(name2)));
         fgDECathBNBMap.Add(detElemId,
                            new AliMpIntPair(planeForCathode[0],planeForCathode[1]));
+        fgNofDEPerChamber[GetChamberId(detElemId)]++;
       } 
+      else 
+      {
+        AliWarningClassStream()
+          << "DE seg. names "  << detElemId << "  " << name1 << "  " << name2 
+         << " already defined." << endl;
+      }          
     } 
     in >> word;
   }
@@ -227,7 +249,7 @@ AliMpDEManager::ReadDENames(AliMpStationType station)
 void AliMpDEManager::FillDENames()
 {
 /// Fill DE names from files
-
+  AliDebugClass(2,"");
   Bool_t result1 = ReadDENames(kStation1);
   Bool_t result2 = ReadDENames(kStation2);
   Bool_t result3 = ReadDENames(kStation345);
@@ -284,11 +306,25 @@ Bool_t AliMpDEManager::IsValid(Int_t detElemId, Int_t cath, Bool_t warn)
 }    
 
 //______________________________________________________________________________
-Bool_t AliMpDEManager::IsValidModuleId(Int_t moduleId, Bool_t warn)
+Bool_t AliMpDEManager::IsValidChamberId(Int_t chamberId, Bool_t warn)
+{
+/// Return true if chamberId is valid
+
+  if ( chamberId >= 0 && chamberId < AliMpConstants::NofChambers() ) 
+    return true;
+  if (warn) 
+    AliErrorClassStream() << "Wrong chamber Id " << chamberId << endl;
+  
+  return false;
+}    
+
+//______________________________________________________________________________
+Bool_t AliMpDEManager::IsValidGeomModuleId(Int_t moduleId, Bool_t warn)
 {
 /// Return true if moduleId is valid
 
-  if ( moduleId >= 0 && moduleId < AliMpConstants::NCh() ) 
+  if ( moduleId >= 0 && moduleId < AliMpConstants::NofGeomModules() ) 
     return true;
  
   if (warn) 
@@ -314,13 +350,25 @@ AliMpDEManager::GetCathod(Int_t detElemId, AliMpPlaneType planeType)
 }
 
 //______________________________________________________________________________
-TString AliMpDEManager::GetDEName(Int_t detElemId, Int_t cath, Bool_t warn)
+TString AliMpDEManager::GetDEName(Int_t detElemId, Bool_t warn)
+{
+/// Return det element name 
+
+  if ( !IsValidDetElemId(detElemId, warn) ) return "undefined";
+
+  TObjString* name = (TObjString*)fgDENamesMap.GetValue(detElemId);
+
+  return name->GetString();
+}    
+
+//______________________________________________________________________________
+TString AliMpDEManager::GetDESegName(Int_t detElemId, Int_t cath, Bool_t warn)
 {
-/// Return det element type name
+/// Return det element segmentation name (segmentation type + plane type)
 
   if ( ! IsValid(detElemId, cath, warn) ) return "undefined";
 
-  TPair* namePair = (TPair*)fgDENamesMap.GetValue(detElemId);
+  TPair* namePair = (TPair*)fgDESegNamesMap.GetValue(detElemId);
 
   if (cath == 0) return ((TObjString*)namePair->Key())->GetString();
   if (cath == 1) return ((TObjString*)namePair->Value())->GetString();
@@ -331,9 +379,9 @@ TString AliMpDEManager::GetDEName(Int_t detElemId, Int_t cath, Bool_t warn)
 //______________________________________________________________________________
 TString AliMpDEManager::GetDETypeName(Int_t detElemId, Int_t cath, Bool_t warn) 
 {
-/// Return det element type name
+/// Return det element segmentation type
 
-  TString fullName = GetDEName(detElemId, cath, warn);  
+  TString fullName = GetDESegName(detElemId, cath, warn);  
   
   // cut plane type extension
   Ssiz_t pos = fullName.First(fgkNameSeparator);
@@ -341,15 +389,54 @@ TString AliMpDEManager::GetDETypeName(Int_t detElemId, Int_t cath, Bool_t warn)
 }    
 
 //______________________________________________________________________________
-Int_t  AliMpDEManager::GetModuleId(Int_t detElemId, Bool_t warn)
+Int_t  AliMpDEManager::GetChamberId(Int_t detElemId, Bool_t warn)
 {
-/// Return module Id for given detElemId
+/// Return chamber Id for given detElemId
 
   if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
   
   return detElemId/fgkCoefficient - 1;
 }  
 
+//______________________________________________________________________________
+Int_t AliMpDEManager::GetGeomModuleId(Int_t detElemId, Bool_t warn)
+{
+/// <pre>
+/// Get module Id from detection element Id                 
+/// !!! moduleId != chamberId
+/// Station 1:   Chamber:  1   Module:  0   Det elements:  100-103
+///              Chamber:  2   Module:  1   Det elements:  200-203
+/// Station 2:   Chamber:  3   Module:  2   Det elements:  300-303
+///              Chamber:  4   Module:  3   Det elements:  400-403
+/// Station 3:   Chamber:  5   Module:  4   Det elements:  500-504, 514-517
+///                            Module:  5   Det elements:  505-513,
+///              Chamber:  6   Module:  6   Det elements:  600-604, 614-617
+///                            Module:  7   Det elements:  605-613
+/// Station 4:   Chamber:  7   Module:  8   Det elements:  700-706, 720-725
+///                            Module:  9   Det elements:  707-719
+///              Chamber:  8   Module: 10   Det elements:  800-806, 820-825
+///                            Module: 11   Det elements:  807-819
+/// Station 5:   Chamber:  9   Module: 12   Det elements:  900-906, 920-925
+///                            Module: 13   Det elements:  907-919        
+///              Chamber: 10   Module: 14   Det elements: 1000-1006,1020-1025
+///                            Module: 15   Det elements: 1007-1019
+/// Station 6:   Chamber: 11   Module: 16   Det elements: 1100-1117
+///              Chamber: 12   Module: 17   Det elements: 1200-1217
+/// Station 7:   Chamber: 13   Module: 18   Det elements: 1300-1317
+///              Chamber: 14   Module: 19   Det elements: 1400-1417
+/// </pre>
+
+  if ( ! IsValidDetElemId(detElemId, warn) ) return -1;
+  
+  return detElemId/fgkCoefficient 
+           + (detElemId >=  505 && detElemId <=  513 || detElemId >= 600 )
+          + (detElemId >=  605 && detElemId <=  613 || detElemId >= 700 )
+          + (detElemId >=  707 && detElemId <=  719 || detElemId >= 800 )
+          + (detElemId >=  807 && detElemId <=  819 || detElemId >= 900 )
+          + (detElemId >=  907 && detElemId <=  919 || detElemId >= 1000 )
+          + (detElemId >= 1007 && detElemId <= 1019 || detElemId >= 1100 ) - 1;
+}  
+
 //______________________________________________________________________________
 AliMpPlaneType  AliMpDEManager::GetPlaneType(Int_t detElemId, Int_t cath)
 {
@@ -362,7 +449,7 @@ AliMpPlaneType  AliMpDEManager::GetPlaneType(Int_t detElemId, Int_t cath)
     return kBendingPlane;
   }  
 
-  TPair* namePair = (TPair*)fgDENamesMap.GetValue(detElemId);
+  TPair* namePair = (TPair*)fgDESegNamesMap.GetValue(detElemId);
 
   TString fullName;  
   if (cath == 0) fullName = ((TObjString*)namePair->Key())->GetString();
@@ -387,19 +474,30 @@ AliMpStationType AliMpDEManager::GetStationType(Int_t detElemId)
     return kStation1;
   }  
   
-  Int_t moduleId = GetModuleId(detElemId, false);
-  if ( ! IsValidModuleId(moduleId, true) ) {
+  Int_t chamberId = GetChamberId(detElemId, false);
+  if ( ! IsValidChamberId(chamberId, true) ) {
     AliFatalClass("Cannot return AliMpStationType value.");
     return kStation1;
   }  
   
-  if ( moduleId ==  0 || moduleId ==  1 )  return kStation1;
-  if ( moduleId ==  2 || moduleId ==  3 )  return kStation2;
-  if ( moduleId >=  4 && moduleId <=  9 )  return kStation345;
-  if ( moduleId >= 10 && moduleId <= 13 )  return kStationTrigger;
+  if ( chamberId ==  0 || chamberId ==  1 )  return kStation1;
+  if ( chamberId ==  2 || chamberId ==  3 )  return kStation2;
+  if ( chamberId >=  4 && chamberId <=  9 )  return kStation345;
+  if ( chamberId >= 10 && chamberId <= 13 )  return kStationTrigger;
 
   // Should never get to this line
   AliFatalClass("Cannot return AliMpStationType value.");
   return kStation1;
 }
 
+//______________________________________________________________________________
+Int_t AliMpDEManager::GetNofDEInChamber(Int_t chamberId, Bool_t warn)
+{
+/// Return the number of detection elements in the chamber with the given 
+/// chamberId
+
+  if ( fgDENamesMap.GetSize() == 0 ) FillDENames();
+  if (!IsValidChamberId(chamberId,warn) ) return 0;
+  return fgNofDEPerChamber[chamberId];
+}
+