Skip to content
Snippets Groups Projects
CbmMcbm2019TimeWinEventBuilderAlgo.cxx 45.5 KiB
Newer Older
Administrator's avatar
Administrator committed
  fhEventDt->Reset();
  fhEventSize->Reset();
  fhNbDigiPerEvtTime->Reset();
  fhNbDigiPerEvtTimeT0->Reset();
  fhNbDigiPerEvtTimeSts->Reset();
  fhNbDigiPerEvtTimeMuch->Reset();
  fhNbDigiPerEvtTimeTrd->Reset();
  fhNbDigiPerEvtTimeTof->Reset();
  fhNbDigiPerEvtTimeRich->Reset();
  fhNbDigiPerEvtTimePsd->Reset();

  /*
   if( kTRUE == bResetTime )
   {
      /// Also reset the Start time for the evolution plots!
      fdStartTime = -1.0;
   } // if( kTRUE == bResetTime )
*/
}
//----------------------------------------------------------------------
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector(
  ECbmModuleId refDet) {
  for (std::vector<ECbmModuleId>::iterator det = fvDets.begin();
       det != fvDets.end();
       ++det) {
    if (*det == refDet) {
      LOG(warning)
        << "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => Doing "
           "nothing, reference detector already in selection detector list!"
        << refDet;
      LOG(warning)
        << "                                                         => You "
           "may want to use RemoveDetector before this command to remove it?";
Administrator's avatar
Administrator committed
    }  // if( *det  == selDet )
  }  // for( std::vector< ECbmModuleId >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )

  if (fRefDet == refDet) {
    LOG(warning)
      << "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => Doing "
         "nothing, identical reference detector already in use";
  }  // if( fRefDet == refDet )
  else {
    LOG(info) << "CbmMcbm2019TimeWinEventBuilderAlgo::SetReferenceDetector => "
                 "Replacing "
              << fRefDet << " with " << refDet << " as reference detector";
    LOG(warning)
      << "                                                         => You may "
         "want to use AddDetector after this command to add in selection "
      << fRefDet;
    LOG(warning) << "                                                         "
                    "=> Please also remember to update the selection windows!";
    fRefDet = refDet;
  }  // else of if( fRefDet == refDet )
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector(ECbmModuleId selDet) {
  /// FIXME: This is not true in case TOF is used as reference !!!!!
Administrator's avatar
Administrator committed
  if (fRefDet == selDet) {
    LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => Cannot "
                  "add the reference detector as selection detector!";
  }  // if( fRefDet == selDet )

  for (std::vector<ECbmModuleId>::iterator det = fvDets.begin();
       det != fvDets.end();
       ++det) {
    if (*det == selDet) {
      LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::AddDetector => "
                      "Doing nothing, selection detector already in list!"
                   << selDet;
Administrator's avatar
Administrator committed
    }  // if( *det  == selDet )
  }  // for( std::vector< ECbmModuleId >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
  fvDets.push_back(selDet);
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector(ECbmModuleId selDet) {
  for (std::vector<ECbmModuleId>::iterator det = fvDets.begin();
       det != fvDets.end();
       ++det) {
    if (*det == selDet) {
      fvDets.erase(det);
Administrator's avatar
Administrator committed
    }  // if( *det  == selDet )
  }  // for( std::vector< ECbmModuleId >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
  LOG(warning) << "CbmMcbm2019TimeWinEventBuilderAlgo::RemoveDetector => Doing "
                  "nothing, selection detector not in list!"
               << selDet;
}
//----------------------------------------------------------------------
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMinNumber(
  ECbmModuleId selDet,
  UInt_t uVal) {
  /// Store in corresponding members
  std::string sDet = "";
Administrator's avatar
Administrator committed
  switch (selDet) {
    case ECbmModuleId::kSts: {
      fuTriggerMinStsDigis = uVal;
      sDet                 = "STS";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kRich: {
      fuTriggerMinRichDigis = uVal;
Administrator's avatar
Administrator committed
      sDet                  = "RICH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kMuch: {
      fuTriggerMinMuchDigis = uVal;
      sDet                  = "MUCH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTrd: {
      fuTriggerMinTrdDigis = uVal;
      sDet                 = "TRD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTof: {
      fuTriggerMinTofDigis = uVal;
Administrator's avatar
Administrator committed
      sDet                 = "TOF";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kPsd: {
      fuTriggerMinPsdDigis = uVal;
      sDet                 = "PSD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kT0: {
      fuTriggerMinT0Digis = uVal;
      sDet                = "T0";
Administrator's avatar
Administrator committed
    default: {
      LOG(fatal)
        << "CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMinNumber => "
        << "Unsupported or unknow detector enum";
Administrator's avatar
Administrator committed
  }  // switch( det )
Administrator's avatar
Administrator committed
  LOG(debug) << "Set Trigger min limit for " << sDet << " to " << uVal;
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMaxNumber(
  ECbmModuleId selDet,
  Int_t iVal) {
  /// Store in corresponding members
  std::string sDet = "";
Administrator's avatar
Administrator committed
  switch (selDet) {
    case ECbmModuleId::kSts: {
      fiTriggerMaxStsDigis = iVal;
      sDet                 = "STS";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kRich: {
      fiTriggerMaxRichDigis = iVal;
Administrator's avatar
Administrator committed
      sDet                  = "RICH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kMuch: {
      fiTriggerMaxMuchDigis = iVal;
      sDet                  = "MUCH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTrd: {
      fiTriggerMaxTrdDigis = iVal;
      sDet                 = "TRD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTof: {
      fiTriggerMaxTofDigis = iVal;
Administrator's avatar
Administrator committed
      sDet                 = "TOF";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kPsd: {
      fiTriggerMaxPsdDigis = iVal;
      sDet                 = "PSD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kT0: {
      fiTriggerMaxT0Digis = iVal;
      sDet                = "T0";
Administrator's avatar
Administrator committed
    default: {
      LOG(fatal)
        << "CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerMaxNumber => "
        << "Unsupported or unknow detector enum";
Administrator's avatar
Administrator committed
  }  // switch( det )
Administrator's avatar
Administrator committed
  LOG(debug) << "Set Trigger nax limit for " << sDet << " to " << iVal;
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerWindow(ECbmModuleId det,
                                                          Double_t dWinBeg,
                                                          Double_t dWinEnd) {
  /// Check if valid time window: end strictly after beginning
Administrator's avatar
Administrator committed
  if (dWinEnd <= dWinBeg)
    LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerWindow => "
                  "Invalid time window: [ "
               << dWinBeg << ", " << dWinEnd << " ]";

  std::string sDet = "";
  /// Store in corresponding members
Administrator's avatar
Administrator committed
  switch (det) {
    case ECbmModuleId::kSts: {
      fdStsTimeWinBeg = dWinBeg;
      fdStsTimeWinEnd = dWinEnd;
      sDet            = "STS";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kRich: {
      fdRichTimeWinBeg = dWinBeg;
      fdRichTimeWinEnd = dWinEnd;
Administrator's avatar
Administrator committed
      sDet             = "RICH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kMuch: {
      fdMuchTimeWinBeg = dWinBeg;
      fdMuchTimeWinEnd = dWinEnd;
Administrator's avatar
Administrator committed
      sDet             = "MUCH";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTrd: {
      fdTrdTimeWinBeg = dWinBeg;
      fdTrdTimeWinEnd = dWinEnd;
      sDet            = "TRD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kTof: {
      fdTofTimeWinBeg = dWinBeg;
      fdTofTimeWinEnd = dWinEnd;
      sDet            = "TOF";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kPsd: {
      fdPsdTimeWinBeg = dWinBeg;
      fdPsdTimeWinEnd = dWinEnd;
      sDet            = "PSD";
Administrator's avatar
Administrator committed
    case ECbmModuleId::kT0: {
      fdT0TimeWinBeg = dWinBeg;
      fdT0TimeWinEnd = dWinEnd;
      sDet           = "T0";
Administrator's avatar
Administrator committed
    default: {
      LOG(fatal) << "CbmMcbm2019TimeWinEventBuilderAlgo::SetTriggerWindow => "
                 << "Unsupported or unknow detector enum";
Administrator's avatar
Administrator committed
  }  // switch( det )
Administrator's avatar
Administrator committed
  LOG(debug) << "Set Trigger window for " << sDet << " to [ " << dWinBeg << "; "
             << dWinEnd << " ]";

  /// Update the variables storing the earliest and latest time window boundaries
  UpdateTimeWinBoundariesExtrema();
  /// Update the variable storing the size if widest time window for overlap detection
  UpdateWidestTimeWinRange();
}
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::UpdateTimeWinBoundariesExtrema() {
  fdEarliestTimeWinBeg = std::min(
    fdStsTimeWinBeg,
    std::min(
      fdMuchTimeWinBeg,
      std::min(fdTrdTimeWinBeg,
               std::min(fdTofTimeWinBeg,
                        std::min(fdRichTimeWinBeg,
                                 std::min(fdPsdTimeWinBeg, fdT0TimeWinBeg))))));
  fdLatestTimeWinEnd = std::max(
    fdStsTimeWinEnd,
    std::max(
      fdMuchTimeWinEnd,
      std::max(fdTrdTimeWinEnd,
               std::max(fdTofTimeWinEnd,
                        std::max(fdRichTimeWinEnd,
                                 std::max(fdPsdTimeWinEnd, fdT0TimeWinEnd))))));
Administrator's avatar
Administrator committed
void CbmMcbm2019TimeWinEventBuilderAlgo::UpdateWidestTimeWinRange() {
  Double_t fdStsTimeWinRange  = fdStsTimeWinEnd - fdStsTimeWinBeg;
  Double_t fdMuchTimeWinRange = fdMuchTimeWinEnd - fdMuchTimeWinBeg;
Administrator's avatar
Administrator committed
  Double_t fdTrdTimeWinRange  = fdTrdTimeWinEnd - fdTrdTimeWinBeg;
  Double_t fdTofTimeWinRange  = fdTofTimeWinEnd - fdTofTimeWinBeg;
  Double_t fdRichTimeWinRange = fdRichTimeWinEnd - fdRichTimeWinBeg;
Administrator's avatar
Administrator committed
  Double_t fdPsdTimeWinRange  = fdPsdTimeWinEnd - fdPsdTimeWinBeg;
  Double_t fdT0TimeWinRange   = fdT0TimeWinEnd - fdT0TimeWinBeg;

  fdWidestTimeWinRange = std::max(
    fdStsTimeWinRange,
    std::max(fdMuchTimeWinRange,
             std::max(fdTrdTimeWinRange,
                      std::max(fdTofTimeWinRange,
                               std::max(fdRichTimeWinRange,
                                        std::max(fdPsdTimeWinRange,
                                                 fdT0TimeWinRange))))));
}
//----------------------------------------------------------------------

ClassImp(CbmMcbm2019TimeWinEventBuilderAlgo)