Skip to content
Snippets Groups Projects
Select Git revision
  • 005efdadad6491483902b78a7d9fe90ce793275d
  • master default protected
  • nightly_master
  • online_much_readconf_cleanup protected
  • online_mvd_readconf_cleanup protected
  • jul25_patches
  • cleanup_rich_v25a
  • jul24_patches
  • nov23_patches
  • DC_2404
  • nighly_master
  • DC_Jan24
  • DC_Nov23
  • DC_Oct23
  • feb23_patches
  • L1Algo-dev9
  • dec21_patches protected
  • apr21_patches protected
  • dev_2025_48
  • dev_2025_47
  • RC2_jul25
  • dev_2025_46
  • dev_2025_45
  • dev_2025_44
  • dev_2025_43
  • dev_2025_42
  • dev_2025_41
  • dev_2025_40
  • dev_2025_39
  • dev_2025_38
  • dev_2025_37
  • dev_2025_36
  • dev_2025_35
  • dev_2025_34
  • dev_2025_33
  • dev_2025_32
  • dev_2025_31
  • dev_2025_30
38 results

TrackingChain.h

Blame
  • CbmStsModule.cxx 3.63 KiB
    /** @file CbmStsModule.cxx
     ** @author Volker Friese <v.friese@gsi.de>
     ** @date 14.05.2013
     **/
    #include "CbmStsModule.h"
    
    #include "CbmStsAddress.h"    // for GetAddress, SetElementId, ToString
    #include "CbmStsParAsic.h"    // for CbmStsParAsic
    #include "CbmStsParModule.h"  // for CbmStsParModule
    #include "CbmStsSensor.h"     // for CbmStsSensor
    
    #include <FairLogger.h>  // for LOG, Logger
    
    #include <TGeoManager.h>       // for gGeoManager
    #include <TGeoNode.h>          // for TGeoNode
    #include <TGeoPhysicalNode.h>  // for TGeoPhysicalNode
    
    #include <assert.h>  // for assert
    #include <ostream>   // for operator<<, basic_ostream, stringstream
    #include <string>    // for string
    
    using namespace std;
    
    
    // -----   Default constructor   -------------------------------------------
    CbmStsModule::CbmStsModule(UInt_t address,
                               TGeoPhysicalNode* node,
                               CbmStsElement* mother)
      : CbmStsElement(address, kStsModule, node, mother) {}
    // -------------------------------------------------------------------------
    
    
    // --- Destructor   --------------------------------------------------------
    CbmStsModule::~CbmStsModule() {}
    // -------------------------------------------------------------------------
    
    
    // -----   Get the unique address from the sensor name (static)   ----------
    Int_t CbmStsModule::GetAddressFromName(TString name) {
    
      Bool_t isValid = kTRUE;
      if (name.Length() != 16) isValid = kFALSE;
      if (isValid) {
        if (!name.BeginsWith("STS")) isValid = kFALSE;
        if (name[4] != 'U') isValid = kFALSE;
        if (name[8] != 'L') isValid = kFALSE;
        if (name[13] != 'M') isValid = kFALSE;
      }
      if (!isValid) {
        LOG(fatal) << "GetAddressFromName: Not a valid module name " << name;
        return 0;
      }
    
      Int_t unit    = 10 * (name[5] - '0') + name[6] - '0' - 1;
      Int_t ladder  = 10 * (name[9] - '0') + name[10] - '0' - 1;
      Int_t hLadder = (name[11] == 'U' ? 0 : 1);
      Int_t module  = 10 * (name[14] - '0') + name[15] - '0' - 1;
    
      return CbmStsAddress::GetAddress(unit, ladder, hLadder, module);
    }
    // -------------------------------------------------------------------------
    
    
    // -----   Initialise daughters from geometry   ----------------------------
    void CbmStsModule::InitDaughters() {
    
      // --- Catch absence of TGeoManager
      assert(gGeoManager);
    
      // --- Catch physical node not being set
      assert(fNode);
    
      TGeoNode* moduleNode = fNode->GetNode();  // This node
      TString modulePath   = fNode->GetName();  // Full path to this node
    
      for (Int_t iNode = 0; iNode < moduleNode->GetNdaughters(); iNode++) {
    
        // Check name of daughter node for level name
        TString daughterName = moduleNode->GetDaughter(iNode)->GetName();
        if (daughterName.Contains("Sensor", TString::kIgnoreCase)) {
    
          // Create physical node
          TString daughterPath         = modulePath + "/" + daughterName;
          TGeoPhysicalNode* sensorNode = new TGeoPhysicalNode(daughterPath.Data());
    
          // Get or create element from setup and add it as daughter
          Int_t address =
            CbmStsAddress::SetElementId(fAddress, kStsSensor, GetNofDaughters());
          CbmStsSensor* sensor = new CbmStsSensor(address, sensorNode, this);
          fDaughters.push_back(sensor);
    
        }  //? name of daughter node contains "sensor"
    
      }  //# daughter nodes
    }
    // -------------------------------------------------------------------------
    
    
    // -----   String output   -------------------------------------------------
    string CbmStsModule::ToString() const {
      stringstream ss;
      ss << GetName() << ", address " << CbmStsAddress::ToString(fAddress);
      return ss.str();
    }
    // -------------------------------------------------------------------------
    
    
    ClassImp(CbmStsModule)