Fixed a bug in the Digit reader, moved clusterfinder to initialize from OCDB, Added...
authorkaamodt <kaamodt@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Oct 2009 09:01:41 +0000 (09:01 +0000)
committerkaamodt <kaamodt@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 22 Oct 2009 09:01:41 +0000 (09:01 +0000)
HLT/TPCLib/AliHLTTPCClusterFinder.cxx
HLT/TPCLib/AliHLTTPCClusterFinder.h
HLT/TPCLib/AliHLTTPCClusterFinderComponent.cxx
HLT/TPCLib/AliHLTTPCClusterFinderComponent.h
HLT/TPCLib/AliHLTTPCDigitReader32Bit.cxx
HLT/TPCLib/AliHLTTPCDigitReader32Bit.h

index 7b0f673..059090e 100644 (file)
@@ -617,6 +617,21 @@ void AliHLTTPCClusterFinder::FindClusters(){
 }
 
 
+Bool_t AliHLTTPCClusterFinder::UpdateCalibDB(){
+  
+  //update the db
+  AliTPCcalibDB::Instance()->Update();
+
+  //uptate the transform class
+  AliTPCTransform * tmp = AliTPCcalibDB::Instance()->GetTransform(); 
+  if(!tmp){
+    HLTError("AliHLTTPCClusterFinder::UpdateCAlibDB: Offline transform not in AliTPCcalibDB.");
+    return 0;
+  }
+  fOfflineTransform = tmp;
+  return 1;
+}
+
 //---------------------------------- Under this line the old sorted clusterfinder functions can be found --------------------------------
 
 
index fd02851..967f53c 100644 (file)
@@ -218,6 +218,8 @@ class AliHLTTPCClusterFinder : public AliHLTLogging {
 
   vector<AliHLTTPCClusterFinder::MCWeight> GetClusterMCInfo(){return fClusterMCVector;}
 
+  Bool_t UpdateCalibDB();
+
  protected: 
   /** copy constructor prohibited */
   AliHLTTPCClusterFinder(const AliHLTTPCClusterFinder&);
index 87c0f4b..00a316c 100644 (file)
@@ -57,6 +57,11 @@ using namespace std;
 /** ROOT macro for the implementation of ROOT specific class methods */
 ClassImp(AliHLTTPCClusterFinderComponent)
 
+const char* AliHLTTPCClusterFinderComponent::fgkOCDBEntryPacked="HLT/ConfigTPC/TPCClusterFinderPacked";
+const char* AliHLTTPCClusterFinderComponent::fgkOCDBEntryUnpacked="HLT/ConfigTPC/TPCClusterFinderUnpacked";
+const char* AliHLTTPCClusterFinderComponent::fgkOCDBEntryDecoder="HLT/ConfigTPC/TPCClusterFinderDecoder";
+const char* AliHLTTPCClusterFinderComponent::fgkOCDBEntry32Bit="HLT/ConfigTPC/TPCClusterFinder32Bit";
+
 AliHLTTPCClusterFinderComponent::AliHLTTPCClusterFinderComponent(int mode)
   :
   fClusterFinder(NULL),
@@ -202,6 +207,29 @@ int AliHLTTPCClusterFinderComponent::DoInit( int argc, const char** argv )
 
   fClusterFinder = new AliHLTTPCClusterFinder();
 
+  // first configure the default
+  int iResult = 0;
+  switch(fModeSwitch){
+  case kClusterFinderPacked:
+    iResult=ConfigureFromCDBTObjString(fgkOCDBEntryPacked);
+    break;
+  case kClusterFinderUnpacked:          
+    iResult=ConfigureFromCDBTObjString(fgkOCDBEntryUnpacked);
+    break;
+  case kClusterFinderDecoder:
+    iResult=ConfigureFromCDBTObjString(fgkOCDBEntryDecoder);
+    break;
+  case kClusterFinder32Bit:
+    iResult=ConfigureFromCDBTObjString(fgkOCDBEntry32Bit);
+    break;
+  }
+
+  // configure from the command line parameters if specified
+  if (iResult>=0 && argc>0)
+    iResult=ConfigureFromArgumentString(argc, argv);
+  // return iResult;
+
+  /*
   Int_t iResult=0;
   TString configuration="";
   TString argument="";
@@ -216,6 +244,7 @@ int AliHLTTPCClusterFinderComponent::DoInit( int argc, const char** argv )
   } else {
     iResult=Reconfigure(NULL, NULL);
   }
+  */
 
   //Checking for conflicting arguments
   if(fClusterDeconv){
@@ -279,7 +308,7 @@ int AliHLTTPCClusterFinderComponent::DoInit( int argc, const char** argv )
     fClusterFinder->SetLastTimeBin(fLastTimeBin);
   }
 
-  return 0;
+  return iResult;
 }
 
 int AliHLTTPCClusterFinderComponent::DoDeinit()
@@ -481,6 +510,203 @@ int AliHLTTPCClusterFinderComponent::DoEvent( const AliHLTComponentEventData& ev
   return iResult;
 }
 
+int AliHLTTPCClusterFinderComponent::ScanConfigurationArgument(int argc, const char** argv){
+
+  // see header file for class documentation
+
+  if (argc<=0) return 0;
+  int i=0;
+  TString argument=argv[i];
+
+  if (argument.CompareTo("-update-calibdb")==0 || argument.CompareTo("-update-transform")==0 ){
+    if(fClusterFinder->UpdateCalibDB()){
+      HLTDebug("CalibDB and offline transform successfully updated.");
+    }
+    else{
+      HLTError("CalibDB could not be updated.");
+    }
+    return 1;
+  }
+
+  if (argument.CompareTo("-deconvolute-time")==0){
+    HLTDebug("Switching on deconvolution in time direction.");
+    fDeconvTime = kTRUE;
+    fClusterFinder->SetDeconvTime(fDeconvTime);
+    return 1;
+  }
+
+  if (argument.CompareTo("-deconvolute-pad")==0){
+    HLTDebug("Switching on deconvolution in pad direction.");
+    fDeconvPad = kTRUE;
+    fClusterFinder->SetDeconvPad(fDeconvPad);
+    return 1;
+  }
+
+  if (argument.CompareTo("-timebins")==0 || argument.CompareTo("timebins" )==0){
+    HLTWarning("Argument %s is depreciated after moving to the offline AliTPCTransform class for xyz calculations.",argument.Data());
+    /*
+      if (++i>=argc) return -EPROTO;
+      argument=argv[i];
+      AliHLTTPCTransform::SetNTimeBins(argument.Atoi());
+      fClusterFinder->UpdateLastTimeBin();
+      HLTInfo("number of timebins set to %d, zbin=%f", AliHLTTPCTransform::GetNTimeBins(), AliHLTTPCTransform::GetZWidth());
+      return 2;
+    */
+    if(argument.CompareTo("timebins")==0){
+      HLTWarning("Argument 'timebins' is old, please switch to new argument naming convention (-timebins). The timebins argument will still work, but please change anyway.");
+    }
+    return 2;
+  }
+  
+  if (argument.CompareTo("-first-timebin")==0){
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fFirstTimeBin = argument.Atoi();
+    if(fFirstTimeBin>=0){
+      HLTDebug("fFirstTimeBin set to %d",fFirstTimeBin);
+      fClusterFinder->SetFirstTimeBin(fFirstTimeBin);
+    }
+    else{
+      HLTError("-first-timebin specifier is negative: %d",fFirstTimeBin);
+    }
+    return 2;
+  }
+
+  if (argument.CompareTo("-last-timebin")==0){
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fLastTimeBin = argument.Atoi();
+    if(fLastTimeBin<AliHLTTPCTransform::GetNTimeBins()){
+      HLTDebug("fLastTimeBin set to %d",fLastTimeBin);
+    }
+    else{
+      HLTError("fLastTimeBins is too big: %d. Maximum: %d",fLastTimeBin,AliHLTTPCTransform::GetNTimeBins());
+    }
+    return 2;
+  }
+  if (argument.CompareTo("-sorted")==0) {
+    fUnsorted=0;
+    HLTDebug("Swithching unsorted off.");
+    fClusterFinder->SetUnsorted(0);
+    return 1;
+  } 
+  
+  if (argument.CompareTo("-do-mc")==0) {
+    fDoMC=kTRUE;
+    fClusterFinder->SetDoMC(fDoMC);
+    HLTDebug("Setting fDoMC to true.");
+    return 1;
+  }
+
+  if (argument.CompareTo("-active-pads")==0 || argument.CompareTo("activepads")==0){
+    if(argument.CompareTo("activepads" )==0){
+      HLTWarning("Please change to new component argument naming scheme and use '-active-pads' instead of 'activepads'");
+    }
+    HLTDebug("Switching on ActivePads");
+    fGetActivePads = 1;
+    fClusterFinder->SetDoPadSelection(kTRUE);
+    return 1;
+  }
+
+  if (argument.CompareTo("-occupancy-limit")==0 || argument.CompareTo("occupancy-limit")==0){
+    if(argument.CompareTo("occupancy-limit" )==0){
+      HLTWarning("Please switch to new component argument naming convention, use '-occupancy-limit' instead of 'occupancy-limit'");
+    }
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fClusterFinder->SetOccupancyLimit(argument.Atof());
+    HLTDebug("Occupancy limit set to occulimit %f", argument.Atof());
+    return 2;
+  }
+
+  if (argument.CompareTo("rawreadermode")==0){
+    if (++i>=argc) return -EPROTO;
+    HLTWarning("Argument 'rawreadermode' is deprecated");
+    return 2;
+  }
+  
+  if (argument.CompareTo("pp-run")==0){
+    HLTWarning("Argument 'pp-run' is obsolete, deconvolution is swiched off in both time and pad directions by default.");
+    fClusterDeconv = false;
+    return 1;
+  }
+
+  if (argument.CompareTo("adc-threshold" )==0){
+    if (++i>=argc) return -EPROTO;
+    HLTWarning("'adc-threshold' is no longer a valid argument, please use TPCZeroSuppression component if you want to zerosuppress data.");
+    return 2;
+  } 
+  
+  if (argument.CompareTo("oldrcuformat" )==0){
+    if (++i>=argc) return -EPROTO;
+    HLTWarning("Argument 'oldrcuformat' is deprecated.");
+    return 2;
+  }
+  
+  if (argument.CompareTo("unsorted" )==0 || argument.CompareTo("-unsorted" )==0){
+    HLTWarning("Argument is obsolete, unsorted reading is default.");
+    //    fClusterFinder->SetUnsorted(1);
+    return 1;
+  }
+  if (argument.CompareTo("nsigma-threshold")==0){
+    if (++i>=argc) return -EPROTO;
+    HLTWarning("Argument 'nsigma-threshold' argument is obsolete.");
+    return 2;
+  }
+
+  // unknown argument
+  return -EINVAL;
+}
+
+int AliHLTTPCClusterFinderComponent::Reconfigure(const char* cdbEntry, const char* /*chainId*/)
+{  
+  // see header file for class documentation
+
+  const char* entry=cdbEntry;
+  if (!entry || entry[0]==0){
+    switch(fModeSwitch){
+    case kClusterFinderPacked:
+      entry=fgkOCDBEntryPacked;
+      break;
+    case kClusterFinderUnpacked:        
+      entry=fgkOCDBEntryUnpacked;
+      break;
+    case kClusterFinderDecoder:
+      entry=fgkOCDBEntryDecoder;
+      break;
+    case kClusterFinder32Bit:
+      entry=fgkOCDBEntry32Bit;
+      break;
+    }
+  }
+
+  return ConfigureFromCDBTObjString(entry);
+
+  /*
+  int iResult=0;
+  
+  const char* path="HLT/ConfigTPC/ClusterFinderComponent";
+  if (cdbEntry) path=cdbEntry;
+  if (path) {
+    HLTInfo("reconfigure from entry %s, chain id %s", path, (chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
+    AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path);//,GetRunNo());
+    if (pEntry) {
+      TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
+      if (pString) {
+       HLTInfo("received configuration object: %s", pString->GetString().Data());
+       iResult = Configure(pString->GetString().Data());
+      } else {
+       HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
+      }
+    } else {
+      HLTError("can not fetch object \"%s\" from CDB", path);
+    }
+  }
+  return iResult;
+  */
+}
+
 int AliHLTTPCClusterFinderComponent::Configure(const char* arguments){
   // see header file for class documentation
   int iResult=0;
@@ -510,13 +736,17 @@ int AliHLTTPCClusterFinderComponent::Configure(const char* arguments){
        fClusterFinder->SetDeconvPad(fDeconvPad);
       }
       else if (argument.CompareTo("-timebins")==0 || argument.CompareTo("timebins" )==0){
+       HLTWarning("Argument %s is depreciated after moving to the offline AliTPCTransform class for xyz calculations.",argument.Data());
+       /*
        if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
        AliHLTTPCTransform::SetNTimeBins(((TObjString*)pTokens->At(i))->GetString().Atoi());
        fClusterFinder->UpdateLastTimeBin();
        HLTInfo("number of timebins set to %d, zbin=%f", AliHLTTPCTransform::GetNTimeBins(), AliHLTTPCTransform::GetZWidth());
+       */
        if(argument.CompareTo("timebins")==0){
          HLTWarning("Argument 'timebins' is old, please switch to new argument naming convention (-timebins). The timebins argument will still work, but please change anyway.");
        }
+       
       }
       else if (argument.CompareTo("-first-timebin")==0){
        if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
@@ -590,6 +820,9 @@ int AliHLTTPCClusterFinderComponent::Configure(const char* arguments){
        if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
        HLTWarning("Argument 'nsigma-threshold' argument is obsolete.");
       }
+      else if (argument.CompareTo("-update-calibdb")==0){
+       fClusterFinder->UpdateCalibDB();
+      }
       else {
        HLTError("unknown argument %s", argument.Data());
        iResult=-EINVAL;
@@ -605,27 +838,3 @@ int AliHLTTPCClusterFinderComponent::Configure(const char* arguments){
   return iResult;
 }
 
-int AliHLTTPCClusterFinderComponent::Reconfigure(const char* cdbEntry, const char* chainId)
-{
-  
-  int iResult=0;
-  // see header file for class documentation
-  const char* path="HLT/ConfigTPC/ClusterFinderComponent";
-  if (cdbEntry) path=cdbEntry;
-  if (path) {
-    HLTInfo("reconfigure from entry %s, chain id %s", path, (chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
-    AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
-    if (pEntry) {
-      TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
-      if (pString) {
-       HLTInfo("received configuration object: %s", pString->GetString().Data());
-       iResult = Configure(pString->GetString().Data());
-      } else {
-       HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
-      }
-    } else {
-      HLTError("can not fetch object \"%s\" from CDB", path);
-    }
-  }
-  return iResult;
-}
index 726647d..cf25dca 100644 (file)
@@ -140,6 +140,7 @@ class AliHLTTPCClusterFinderComponent : public AliHLTProcessor
                     AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr, 
                     AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks );
        int Configure(const char* arguments);
+       int ScanConfigurationArgument(int argc, const char** argv);
        int Reconfigure(const char* cdbEntry, const char* chainId);
        
        using AliHLTProcessor::DoEvent;
@@ -201,7 +202,13 @@ class AliHLTTPCClusterFinderComponent : public AliHLTProcessor
 
        Bool_t fDoMC;
 
-       ClassDef(AliHLTTPCClusterFinderComponent, 6)
+       /// the default configuration entry for this component
+       static const char* fgkOCDBEntryPacked; //!transient
+       static const char* fgkOCDBEntryUnpacked; //!transient
+       static const char* fgkOCDBEntryDecoder; //!transient
+       static const char* fgkOCDBEntry32Bit; //!transient
+
+       ClassDef(AliHLTTPCClusterFinderComponent, 7)
 
 };
 #endif
index 156103c..1365693 100644 (file)
@@ -45,7 +45,8 @@ AliHLTTPCDigitReader32Bit::AliHLTTPCDigitReader32Bit()
   fRawReader(NULL),
   fRawReaderMemory(NULL),
   fAltroRawStreamV3(NULL),
-  fMapping(NULL)
+  fMapping(NULL),
+  fSkipDataReadingFlag(kFALSE)
 {
   // see header file for class documentation
   // or
@@ -97,7 +98,7 @@ int AliHLTTPCDigitReader32Bit::InitBlock(void* ptr,unsigned long size, Int_t pat
   fRawReaderMemory->SetMemory(reinterpret_cast<UChar_t*>(ptr), ULong_t(size));
   fRawReaderMemory->SetEquipmentID(ddlno);
   fRawReaderMemory->Reset();
-  fRawReaderMemory->NextEvent();
+  fSkipDataReadingFlag = fRawReaderMemory->NextEvent();
 
 #ifndef HAVE_NOT_ALTRORAWSTREAMV3
   if(fAltroRawStreamV3 != NULL){
@@ -109,7 +110,9 @@ int AliHLTTPCDigitReader32Bit::InitBlock(void* ptr,unsigned long size, Int_t pat
   if (!fAltroRawStreamV3){
     return -ENODEV;
   }
-  fAltroRawStreamV3->NextDDL();
+
+  fSkipDataReadingFlag = fAltroRawStreamV3->NextDDL();
+
 #else
   HLTError("AltroRawStreamV3 is not available in this AliRoot version");
 #endif //HAVE_NOT_ALTRORAWSTREAMV3
@@ -142,6 +145,10 @@ void AliHLTTPCDigitReader32Bit::SetUnsorted(bool unsorted)
 bool AliHLTTPCDigitReader32Bit::NextChannel()
 {
   // see header file for class documentation
+  if(fSkipDataReadingFlag == kFALSE){
+    return kFALSE;
+  }
+
 #ifndef HAVE_NOT_ALTRORAWSTREAMV3
   return fAltroRawStreamV3->NextChannel(); 
 #else
index ab97283..043fcbc 100644 (file)
@@ -69,8 +69,10 @@ private:
   AliAltroRawStreamV3 * fAltroRawStreamV3;                   //! transient
   
   AliHLTTPCMapping *fMapping;                                //! transient
+
+  Bool_t fSkipDataReadingFlag;                                       //! transient
   
-  ClassDef(AliHLTTPCDigitReader32Bit, 0)
+  ClassDef(AliHLTTPCDigitReader32Bit, 1)
     
 };
 #endif