Functionality of defunct AliMpManuList is now in AliMpDetElement, filled from DDLStor...
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Oct 2007 13:01:50 +0000 (13:01 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 17 Oct 2007 13:01:50 +0000 (13:01 +0000)
MUON/mapping/AliMpDDLStore.cxx
MUON/mapping/AliMpDDLStore.h
MUON/mapping/AliMpDetElement.cxx
MUON/mapping/AliMpDetElement.h

index 234d8869d404b754a8aac72be81420de17104247..99e834d4df9361278d8a3ca8dbb3e2b99e7ef898 100644 (file)
@@ -560,17 +560,19 @@ Bool_t AliMpDDLStore::SetManus()
           
          // filling TList manu
          for ( Int_t im = 0; im < manus.GetSize(); ++im ) {
-
+      
            AliMpIntPair* manu = 0x0;
            if( stationType == AliMp::kStation345) 
-               manu = new AliMpIntPair((manus[im] & manuMask), planeType, kTRUE); //remove offset for NB
+        manu = new AliMpIntPair((manus[im] & manuMask), planeType, kTRUE); //remove offset for NB
            else 
-               manu = new AliMpIntPair(manus[im], planeType, kTRUE); //keep offset for NB
+        manu = new AliMpIntPair(manus[im], planeType, kTRUE); //keep offset for NB
            
            manuList.Add(manu);
+      
+      detElement->AddManu(manus[im]);
          }        
        }// cathode
-
+  
        manuList.Sort(); // sort regardless B or NB plane
 
        // filling manu to the corresponding buspatch
@@ -592,16 +594,16 @@ Bool_t AliMpDDLStore::SetManus()
          AliMpBusPatch* busPatch = GetBusPatch(busPatchId);
 
          if( stationType == AliMp::kStation345) {
-
+      
            if (manuPtr->GetSecond()) 
-               busPatch->AddManu(manuId+manuMask+1); // add offset again after sorted
+        busPatch->AddManu(manuId+manuMask+1); // add offset again after sorted
            else 
-               busPatch->AddManu(manuId); 
-
+        busPatch->AddManu(manuId); 
+      
          } else {
-       
+      
            busPatch->AddManu(manuId); 
-
+      
          }
        }
 
index c7fe859ebec8f4418caec6aade5be230fc70af28..09aa266512c98ad64d31a97ff3e62ef0c6377e47 100644 (file)
@@ -61,6 +61,9 @@ class AliMpDDLStore : public  TObject {
     /// Return trigger crates iterator
     TExMapIter GetTriggerCrateItr() const {return fTriggerCrates.GetIterator();}
 
+    /// Get an iterator to loop over bus patches
+    TExMapIter GetBusPatchesIterator() const { return fBusPatches.GetIterator(); }
+    
     AliMpIntPair  GetDetElemIdManu(Int_t manuSerial) const;
 
     void PrintAllManu() const;
index 79b6bce54d37661b5952447d8d3927e3bfb2b382..f3aaa4e07f4dbe9c52c8bbefc6ac63164e5dd5a4 100644 (file)
 
 #include "AliMpDetElement.h"
 
+#include "AliMpArrayI.h"
 #include "AliMpConstants.h"
 #include "AliMpDEManager.h"
+#include "AliMpHVNamer.h"
+#include "AliMpHVUID.h"
+#include "AliMpManuUID.h"
+#include "AliMpPadUID.h"
+#include "AliMpSegmentation.h"
+#include "AliMpVSegmentation.h"
+
+#include "AliCodeTimer.h"
 #include "AliLog.h"
+
 #include <Riostream.h>
 
 /// \cond CLASSIMP
@@ -49,10 +59,12 @@ AliMpDetElement::AliMpDetElement(Int_t id, const TString& name,
     fPlaneType(planeType),
     fBusPatchIds(false),
     fManuToSerialNbs(1700),
-    fSerialNbToManus(1700)
+    fSerialNbToManus(1700),
+    fManuList(1700),
+    fTrackerChannels(1700*AliMpConstants::ManuNofChannels()),
+    fHVmanus(true)
 {
 /// Standard constructor
-
 }
 
 //______________________________________________________________________________
@@ -65,7 +77,10 @@ AliMpDetElement::AliMpDetElement(TRootIOCtor* /*ioCtor*/)
     fPlaneType(),
     fBusPatchIds(),
     fManuToSerialNbs(),
-    fSerialNbToManus()
+    fSerialNbToManus(),
+    fManuList(true),
+    fTrackerChannels(true),
+    fHVmanus(true)
 {
 /// Root IO constructor
 }
@@ -104,6 +119,11 @@ void AliMpDetElement::AddManuSerial(Int_t manuId, Int_t serialNb)
 /// Map the serial manu number 
 /// (Eventually add check if the given pair already present)
 
+  AliCodeTimerAuto("");
+  
+  AliDebug(1,Form("DE %4d ManuId %4d SerialNB %d",
+               fId,manuId,serialNb));
+  
   fManuToSerialNbs.Add(Long_t(manuId), Long_t(serialNb)); 
   fSerialNbToManus.Add(Long_t(serialNb), Long_t(manuId));
 }      
@@ -201,14 +221,6 @@ Bool_t  AliMpDetElement::HasBusPatchId(Int_t busPatchId) const
   return fBusPatchIds.HasValue(busPatchId);; 
 }
 
-//______________________________________________________________________________
-Int_t  AliMpDetElement::GetNofManus() const
-{
-/// Return the number of manus in this detection element  
-
-  return fManuToSerialNbs.GetSize();
-}   
-
 //______________________________________________________________________________
 Int_t  AliMpDetElement::GetManuSerialFromId(Int_t manuId) const
 {
@@ -225,3 +237,142 @@ Int_t  AliMpDetElement::GetManuIdFromSerial(Int_t serialNb) const
   return (Int_t)fSerialNbToManus.GetValue(Long_t(serialNb));
 }
 
+//______________________________________________________________________________
+Int_t 
+AliMpDetElement::NofChannelsInManu(Int_t manuId) const
+{
+  /// Return the number of channels in a given manu
+  
+  Long_t uid = AliMpManuUID::BuildUniqueID(fId,manuId);
+  
+  return (Int_t)(fManuList.GetValue(uid));
+}
+
+//______________________________________________________________________________
+Bool_t 
+AliMpDetElement::IsExistingChannel(Int_t manuId, Int_t manuChannel) const
+{
+  /// Whether or not the channel is a valid one (does not tell if it is
+  /// connected or not
+  
+  if ( NofChannelsInManu(manuId) > 0 && 
+       manuChannel >= 0 && 
+       manuChannel < AliMpConstants::ManuNofChannels() ) 
+  {
+    return kTRUE;
+  }
+  else
+  {
+    return kFALSE;
+  }
+}
+
+//______________________________________________________________________________
+Bool_t 
+AliMpDetElement::IsConnectedChannel(Int_t manuId, Int_t manuChannel) const
+{
+  /// Whether or not the channel is a *connected* one (i.e. it is valid plus
+  /// it corresponds to a real pad)
+  
+  return ( fTrackerChannels.GetValue(AliMpPadUID::BuildUniqueID(fId,manuId,manuChannel)) > 0 );
+}
+
+//______________________________________________________________________________
+void
+AliMpDetElement::AddManu(Int_t manuId)
+{
+  /// Fills the fManuList and fTrackerChannels
+  AliMp::StationType stationType = AliMpDEManager::GetStationType(fId);
+  
+  if ( stationType == AliMp::kStationTrigger ) return;
+    
+  AliCodeTimerAuto("")
+  
+  AliDebug(1,Form("DE %4d Manu %4d",fId,manuId));
+
+  AliCodeTimerStart(Form("%s",AliMp::StationTypeName(stationType).Data()));
+  
+  if ( fHVmanus.GetSize() == 0 ) 
+  {
+    fHVmanus.SetOwner(kTRUE); // to be 100% explicit
+    
+    // get the size, to avoid resizing when adding later on
+    Int_t nmanus(0);
+    
+    AliMp::CathodType cathodes[] = { AliMp::kCath0, AliMp::kCath1 };
+    
+    for ( Int_t i = 0; i < 2; ++i ) 
+    {
+      const AliMpVSegmentation* seg = 
+      AliMpSegmentation::Instance()->GetMpSegmentation(fId,cathodes[i]);
+      
+      TArrayI manus;
+      
+      seg->GetAllElectronicCardIDs(manus);
+
+      nmanus += manus.GetSize();
+    }
+    
+    fHVmanus.SetSize(nmanus);
+  }
+  
+  const AliMpVSegmentation* seg = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(fId,manuId);
+  
+  Int_t n(0);
+  
+  for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i ) 
+  {
+    if ( seg->PadByLocation(AliMpIntPair(manuId,i),kFALSE).IsValid() )
+    {
+      ++n;
+      fTrackerChannels.Add((Long_t)AliMpPadUID::BuildUniqueID(fId,manuId,i),
+                           (Long_t)1);
+    }
+  }
+  
+  fManuList.Add(AliMpManuUID::BuildUniqueID(fId,manuId),(Long_t)n);
+  
+  AliMpHVNamer hvNamer;
+  
+  Int_t index = hvNamer.ManuId2Index(fId,manuId);
+                            
+  UInt_t hvuid = AliMpHVUID::BuildUniqueID(fId,index);
+  
+  AliMpArrayI* hv = static_cast<AliMpArrayI*>(fHVmanus.GetValue(hvuid));
+  
+  if (!hv)
+  {
+    Bool_t sort(kFALSE);
+    hv = new AliMpArrayI(sort);
+    fHVmanus.Add(hvuid,hv);
+  }
+  
+  hv->Add(manuId,kFALSE);        
+  
+  AliCodeTimerStop(Form("%s",AliMp::StationTypeName(stationType).Data()));
+}
+  
+//______________________________________________________________________________
+const AliMpArrayI* 
+AliMpDetElement::ManusForHV(Int_t hvIndex) const
+{
+  /// Return the list of manus sharing a hv channel
+  return static_cast<AliMpArrayI*>(fHVmanus.GetValue(AliMpHVUID::BuildUniqueID(fId,hvIndex)));
+}
+
+//______________________________________________________________________________
+Int_t 
+AliMpDetElement::NofManusWithSerialNumber() const
+{
+  /// Return the number of manus which have a serial number in this detection element  
+  return fManuToSerialNbs.GetSize();
+}
+
+//______________________________________________________________________________
+Int_t 
+AliMpDetElement::NofManus() const
+{
+  /// Return the number of manus in this detection element
+  return fManuList.GetSize();
+}
+
index 1fc5beeab0d7a7f8304339580518db70e5c221ad..29c9b59bec6dc8bc965a778a1a9e48553296697e 100644 (file)
 #include "AliMpPlaneType.h"
 #include "AliMpCathodType.h"
 
+#ifndef ALI_MP_EX_MAP_H
+#  include "AliMpExMap.h"
+#endif
+
 class AliMpVSegmentation;
+class AliMpArrayI;
 
 class AliMpDetElement : public  TObject {
 
-  public:
+  public:  
     AliMpDetElement(Int_t id, const TString& name,
                     const TString& segType, AliMp::PlaneType planeType);
     AliMpDetElement(TRootIOCtor* /*ioCtor*/);
@@ -39,6 +44,7 @@ class AliMpDetElement : public  TObject {
     // methods
     Bool_t AddBusPatch(Int_t busPatchId); 
     void   AddManuSerial(Int_t manuId, Int_t serialNb); 
+    void   AddManu(Int_t manuId);
     void   SetDdlId(Int_t ddlId);
 
     // get methods
@@ -57,10 +63,16 @@ class AliMpDetElement : public  TObject {
     Int_t  GetBusPatchId(Int_t index) const;
     Bool_t HasBusPatchId(Int_t busPatchId) const;
     
-    Int_t  GetNofManus() const;    
+    Int_t  NofManusWithSerialNumber() const;
     Int_t  GetManuSerialFromId(Int_t manuId) const;
     Int_t  GetManuIdFromSerial(Int_t serialNb) const;
 
+    Int_t  NofManus() const;
+    Int_t  NofChannelsInManu(Int_t manuId) const;
+    Bool_t IsExistingChannel(Int_t manuId, Int_t manuChannel) const;
+    Bool_t IsConnectedChannel(Int_t manuId, Int_t manuChannel) const;
+    
+    const AliMpArrayI* ManusForHV(Int_t hvIndex) const;
     
   private:
     /// Not implemented
@@ -83,8 +95,13 @@ class AliMpDetElement : public  TObject {
     AliMpArrayI    fBusPatchIds;  ///< Bus patches connected to this detection element
     mutable TExMap fManuToSerialNbs; ///< Map from manuId to serial #   
     mutable TExMap fSerialNbToManus; ///< Map manu serial # to manuId
-     
-  ClassDef(AliMpDetElement,1)  // The manager class for definition of detection element types
+    
+    mutable TExMap fManuList;  ///< map of manus
+    mutable TExMap fTrackerChannels; ///< list of connected pads (tracker only)
+    
+    AliMpExMap fHVmanus; ///< map of HV->manu
+    
+  ClassDef(AliMpDetElement,2)  // The manager class for definition of detection element types
 };
 
 // inline function