added TPC conformal mapping tracking to default simulation; improved robustness in...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Mar 2008 08:58:02 +0000 (08:58 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Mar 2008 08:58:02 +0000 (08:58 +0000)
HLT/TPCLib/AliHLTTPCAgent.cxx
HLT/TPCLib/AliHLTTPCConfMapper.cxx
HLT/TPCLib/AliHLTTPCFileHandler.cxx
HLT/TPCLib/AliHLTTPCFileHandler.h
HLT/TPCLib/AliHLTTPCMemHandler.cxx
HLT/TPCLib/AliHLTTPCMemHandler.h

index e15791bea41fbd9e1004861b40ad7ed829e08193..05daf71f7409c1f79626dbcb98ec2ff9508129a3 100644 (file)
@@ -98,18 +98,18 @@ int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
 
        // digit publisher components
        arg.Form("-slice %d -partition %d", slice, part);
-       publisher.Form("DP_%02d_%d", slice, part);
+       publisher.Form("TPC-DP_%02d_%d", slice, part);
        handler->CreateConfiguration(publisher.Data(), "TPCDigitPublisher", NULL , arg.Data());
 
        // cluster finder components
-       cf.Form("CF_%02d_%d", slice, part);
+       cf.Form("TPC-CF_%02d_%d", slice, part);
        handler->CreateConfiguration(cf.Data(), "TPCClusterFinderUnpacked", publisher.Data(), "pp-run timebins 446");
        if (trackerInput.Length()>0) trackerInput+=" ";
        trackerInput+=cf;
       }
       TString tracker;
       // tracker finder components
-      tracker.Form("TR_%02d", slice);
+      tracker.Form("TPC-TR_%02d", slice);
       handler->CreateConfiguration(tracker.Data(), "TPCSliceTracker", trackerInput.Data(), "-pp-run -bfield 0.5");
 
       if (mergerInput.Length()>0) mergerInput+=" ";
@@ -118,10 +118,10 @@ int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
     }
 
     // GlobalMerger component
-    handler->CreateConfiguration("globalmerger","TPCGlobalMerger",mergerInput.Data(),"");
+    handler->CreateConfiguration("TPC-globalmerger","TPCGlobalMerger",mergerInput.Data(),"");
 
     // the esd converter configuration
-    handler->CreateConfiguration("esd-converter", "TPCEsdConverter"   , "globalmerger", "-tree");
+    handler->CreateConfiguration("TPC-esd-converter", "TPCEsdConverter"   , "TPC-globalmerger", "-tree");
   }
   return 0;
 }
@@ -130,8 +130,8 @@ const char* AliHLTTPCAgent::GetReconstructionChains(AliRawReader* /*rawReader*/,
                                                    AliRunLoader* /*runloader*/) const
 {
   // see header file for class documentation
-  return NULL;
-  //return "esd-converter";
+  //return NULL;
+  return "TPC-esd-converter";
 }
 
 const char* AliHLTTPCAgent::GetRequiredComponentLibraries() const
index 93003d7f6ee19890156b307af91e19b2e76cc261..6f53c360b228efa054a5382c1b7ea83cdd8671cb 100644 (file)
@@ -267,6 +267,12 @@ void AliHLTTPCConfMapper::SetPointers()
        fRow[(localrow-fRowMin)].last = (void *)thisHit;
     }
   
+  // Matthias 2008-03-25
+  // I'm not really sure if this is en error condition. Has to be investigated.
+  // With the ifdef below, the message is only printed if the library was build
+  // in the HLT build system. By that we avoid irritating messages for the
+  // reconstruction included into the Grid tests
+#ifdef PACKAGE_STRING
   if(fClustersUnused>0 && localcounter==0)
     LOG(AliHLTTPCLog::kError,"AliHLTTPCConfMapper::SetPointers","Parameters")
       <<AliHLTTPCLog::kDec<<"No points passed to track finder, hits out of range: "
@@ -276,6 +282,7 @@ void AliHLTTPCConfMapper::SetPointers()
   LOG(AliHLTTPCLog::kDebug,"AliHLTTPCConfMapper::SetPointers","Setup")
     <<"Setup finished, hits out of range: "<<fEtaHitsOutOfRange+fPhiHitsOutOfRange
     <<" hits accepted "<<hits_accepted<<ENDLOG;
+#endif //PACKAGE_STRING
 }
 
 void AliHLTTPCConfMapper::MainVertexTrackingA()
index 4dad126852b09d83a966b86f313a0c357852dfbf..96f39a9b044f5879abf5b33e919f9ea35d04354d 100644 (file)
@@ -395,14 +395,21 @@ Bool_t AliHLTTPCFileHandler::CreateIndex()
          <<sector<<" "<<row<<ENDLOG;
        return kFALSE;
       }
+      // this is just to make sure the same array dimensions are
+      // used as in the AliHLTTPCTransform class. The check for
+      // correct bounds is done in AliHLTTPCTransform::Sector2Slice
+      assert(lslice>=0 && lslice<fgkNSlice);
+      assert(lrow>=0 && lrow<fgkNRow);
       if(fIndex[lslice][lrow]==-1) {
        fIndex[lslice][lrow]=n;
       }
     }
+    assert(AliHLTTPCTransform::GetNSlice()==fgkNSlice);
+    assert(AliHLTTPCTransform::GetNRows()==fgkNRow);
     if(fUseStaticIndex) { // create static index
-      for(Int_t i=0;i<AliHLTTPCTransform::GetNSlice();i++){
-       for(Int_t j=0;j<AliHLTTPCTransform::GetNRows();j++)
-         fgStaticIndex[i][j]=fIndex[i][j];
+      for(Int_t islice=0;islice<AliHLTTPCTransform::GetNSlice() && islice<fgkNSlice;islice++){
+       for(Int_t irow=0;irow<AliHLTTPCTransform::GetNRows() && irow<fgkNRow;irow++)
+         fgStaticIndex[islice][irow]=fIndex[islice][irow];
       }
       fgStaticIndexCreated=kTRUE; //remember that index has been created
     }
@@ -411,9 +418,9 @@ Bool_t AliHLTTPCFileHandler::CreateIndex()
     <<"Index successfully created."<<ENDLOG;
 
   } else if(fUseStaticIndex) { //simply copy static index
-    for(Int_t i=0;i<AliHLTTPCTransform::GetNSlice();i++){
-      for(Int_t j=0;j<AliHLTTPCTransform::GetNRows();j++)
-       fIndex[i][j]=fgStaticIndex[i][j];
+    for(Int_t islice=0;islice<AliHLTTPCTransform::GetNSlice() && islice<fgkNSlice;islice++){
+      for(Int_t irow=0;irow<AliHLTTPCTransform::GetNRows() && irow<fgkNRow;irow++)
+       fIndex[islice][irow]=fgStaticIndex[islice][irow];
     }
 
   LOG(AliHLTTPCLog::kInformational,"AliHLTTPCFileHandler::CreateIndex","Index")
@@ -480,7 +487,8 @@ AliHLTTPCDigitRowData * AliHLTTPCFileHandler::AliDigits2Memory(UInt_t & nrow,Int
   // The index map relates the AliSimDigits objects in the tree to dedicated pad rows
   // in the TPC
   // This loop filters the pad rows according to the slice no set via Init
-  for(Int_t r=fRowMin;r<=fRowMax;r++){
+  assert(fRowMax<fgkNRow);
+  for(Int_t r=fRowMin;r<=fRowMax && r<fgkNRow;r++){
     Int_t n=fIndex[fSlice][r];
     if(n!=-1){ // there is data on that row available
       Int_t lslice,lrow;
@@ -550,7 +558,7 @@ AliHLTTPCDigitRowData * AliHLTTPCFileHandler::AliDigits2Memory(UInt_t & nrow,Int
   AliHLTTPCDigitRowData *tempPt = data;
   memset(data, 0, bufferSize);
 
-  for(Int_t r=fRowMin;r<=fRowMax;r++){
+  for(Int_t r=fRowMin;r<=fRowMax && r<fgkNRow;r++){
     Int_t n=fIndex[fSlice][r];
 
     AliHLTTPCTransform::Slice2Sector(fSlice,r,sector,row);
@@ -666,7 +674,7 @@ AliHLTTPCDigitRowData * AliHLTTPCFileHandler::AliAltroDigits2Memory(UInt_t & nro
   Int_t zerosupval=AliHLTTPCTransform::GetZeroSup();
   Float_t xyz[3];
 
-  for(Int_t r=fRowMin;r<=fRowMax;r++){
+  for(Int_t r=fRowMin;r<=fRowMax && r<fgkNRow;r++){
     Int_t n=fIndex[fSlice][r];
 
     ndigits[r] = 0;
index eefaf5c2df0e83e99acf14b6d86fdec0ef1f7f03..b95e190666c9ac68653a6269feb09a0fc4fb1483 100644 (file)
@@ -148,13 +148,13 @@ class AliHLTTPCFileHandler:public AliHLTTPCMemHandler {
 
   TTree *fDigitsTree;//!
   FILE *fMC;//!
-  
+
   Bool_t fIndexCreated;   //is index created
-  Int_t  fIndex[36][159]; //stores index over digitstree 
+  Int_t  fIndex[fgkNSlice][fgkNRow]; //stores index over digitstree 
                           //for faster access w/o ASVVERSION
   Bool_t fUseStaticIndex; //take static index
   static Bool_t fgStaticIndexCreated;   //global index created
-  static Int_t  fgStaticIndex[36][159]; //global index
+  static Int_t  fgStaticIndex[fgkNSlice][fgkNRow]; //global index
 
   virtual Bool_t SetAliInput();
   Bool_t GetDigitsTree(Int_t event);
@@ -166,7 +166,7 @@ class AliHLTTPCFileHandler:public AliHLTTPCMemHandler {
   /** assignment operator prohibited */
   AliHLTTPCFileHandler& operator=(const AliHLTTPCFileHandler&);
 
-  ClassDef(AliHLTTPCFileHandler,1)   //Filehandler class
+  ClassDef(AliHLTTPCFileHandler,2)   //HLT TPC Filehandler IO class
 };
 
 #endif
index 29b92f5e788d0ec105940ed7dc557b284437c0ec..ed3b4a3ed06a242fe5247f897b52b72bb705638e 100644 (file)
@@ -90,6 +90,7 @@
 </pre>
 */  
 
+#include <cassert>
 #include "AliHLTTPCRootTypes.h"
 #include "AliHLTTPCDigitData.h"
 #include "AliHLTTPCLogging.h"
@@ -140,6 +141,17 @@ AliHLTTPCMemHandler::~AliHLTTPCMemHandler()
 void AliHLTTPCMemHandler::Init(Int_t s,Int_t p, Int_t *r)
 {
   //init handler
+  assert(s<fgkNSlice);
+  if (s>fgkNSlice) {
+    fSlice=0;
+    fPatch=0;
+    fRowMin=0;
+    fRowMax=0;
+    if (r) *r=0;
+    LOG(AliHLTTPCLog::kWarning,"AliHLTTPCMemHandler::Init","sector coordinates")
+      <<"Invalid slice no " << s <<ENDLOG;
+    return;
+  }
   fSlice=s;fPatch=p;
   if(r) {
     fRowMin=r[0];
@@ -175,7 +187,7 @@ void AliHLTTPCMemHandler::SetROI(Float_t *eta,Int_t */*slice*/)
   if(eta[1]==0)
     {
       LOG(AliHLTTPCLog::kWarning,"AliHLTTPCMemHandler::SetROI","Eta Values")
-       <<"Bad ROI parameters. IDIOT! "<<ENDLOG;
+       <<"Bad ROI parameters."<<ENDLOG;
       for(Int_t i=fRowMin; i<=fRowMax; i++)
        {
          fEtaMinTimeBin[i]=0;
index 7d246bc8ca7732a8d07157aa45e97bb92d670dcb..dcac7b0d80775ded3719dc33517582dfa2eb01cb 100644 (file)
@@ -206,8 +206,11 @@ class AliHLTTPCMemHandler {
   Int_t fSlice;  //slice
   Int_t fPatch;  //patch
 
-  Int_t fEtaMinTimeBin[159]; //for ROI in eta only
-  Int_t fEtaMaxTimeBin[159]; //for ROI in eta only
+  static const Int_t fgkNSlice = 36; //!
+  static const Int_t fgkNRow = 159; //!
+
+  Int_t fEtaMinTimeBin[fgkNRow]; //for ROI in eta only
+  Int_t fEtaMaxTimeBin[fgkNRow]; //for ROI in eta only
   
   FILE *fInBinary;//!
   FILE *fOutBinary;//!