]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/global/AliHLTGlobalTrackMatcherComponent.cxx
implementing proper cleanup of internal variables in Clear, renaming member variable...
[u/mrichter/AliRoot.git] / HLT / global / AliHLTGlobalTrackMatcherComponent.cxx
index 1570b7548d932076f287d2edeb11594c55d5a392..fae28e9283572c08fe904aa687bea89085fc7bcf 100644 (file)
@@ -32,7 +32,12 @@ using namespace std;
 #include "AliHLTGlobalBarrelTrack.h"
 #include "AliHLTCaloClusterDataStruct.h"
 #include "AliHLTCaloClusterReader.h"
-
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "TGeoManager.h"
+#include "TRefArray.h"
+#include "TString.h"
+#include "TMap.h"
 
 /** ROOT macro for the implementation of ROOT specific class methods */
 AliHLTGlobalTrackMatcherComponent gAliHLTGlobalTrackMatcherComponent;
@@ -40,6 +45,8 @@ AliHLTGlobalTrackMatcherComponent gAliHLTGlobalTrackMatcherComponent;
 ClassImp(AliHLTGlobalTrackMatcherComponent);
 
 AliHLTGlobalTrackMatcherComponent::AliHLTGlobalTrackMatcherComponent() :
+  fOCDBEntry("HLT/ConfigHLT/GlobalTrackMatcher"), //TODO
+  fMethod(1), //Method 1(PbPb) 2(pp)
   fTrackMatcher(NULL),
   fNEvents(0),
   fBz(-9999999),
@@ -95,7 +102,7 @@ void AliHLTGlobalTrackMatcherComponent::GetOutputDataSize( unsigned long& constB
   // see header file for class documentation
   // XXX TODO: Find more realistic values.
   constBase = 80000;
-  inputMultiplier = 0;
+  inputMultiplier = 1;
 }
 
 AliHLTComponent* AliHLTGlobalTrackMatcherComponent::Spawn()
@@ -106,10 +113,20 @@ AliHLTComponent* AliHLTGlobalTrackMatcherComponent::Spawn()
 
 int AliHLTGlobalTrackMatcherComponent::DoInit( int argc, const char** argv ) 
 {
+  Int_t iResult=ConfigureFromCDBTObjString(fOCDBEntry); //MARCEL
+    // configure from the command line parameters if specified
+  if (iResult>=0 && argc>0) {
+    iResult=ConfigureFromArgumentString(argc, argv);
+    HLTImportant("Extrapolation Method from argument string:  %d", fMethod);   
+  } else if ( iResult >=0 ) {
+    HLTImportant("Extrapolation Method from OCDB database entry:  %d", fMethod);   
+  } 
+  
+  
   //BALLE TODO, use command line values to initialise matching vaules
  // init
-  Int_t iResult = argc;
+//   Int_t iResult = argc;
+//   iResult = argc;
   
   if(argc > 0){
     HLTWarning("Ignoring all configuration args, starting with: argv %s", argv[0]);
@@ -133,6 +150,20 @@ int AliHLTGlobalTrackMatcherComponent::DoInit( int argc, const char** argv )
     fTrackArray->SetOwner(kFALSE);
   }
 
+  //*** GeoManager ***
+   AliCDBPath path("GRP","Geometry","Data");
+   AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path);
+   if (pEntry) {
+      if(!gGeoManager) {
+      gGeoManager = (TGeoManager*)pEntry->GetObject();
+      }
+   }
+   else {
+      HLTError("can not fetch object \"%s\" from CDB",path.GetPath().Data());
+   }
+   // ****
+
+
   return iResult; 
 }
   
@@ -163,13 +194,16 @@ int AliHLTGlobalTrackMatcherComponent::DoEvent(const AliHLTComponentEventData& /
   
   if ( GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR ) )
     return 0;
-
+  
+  if(!IsDataEvent()){//marcel test
+    return 0;//marcel test
+  }//marcel test
 
   fNEvents++;
 
   //Loop over TPC blocks
   //BALLE TODO check that the tracks in the TObjArray are fine over several blocks
-
+  
    fTrackArray->Clear();
    vector<AliHLTGlobalBarrelTrack> tracks;
    
@@ -185,49 +219,74 @@ int AliHLTGlobalTrackMatcherComponent::DoEvent(const AliHLTComponentEventData& /
      }
     
      //     //Push the TPC block on, without any changes
-     PushBack(pBlock->fPtr, pBlock->fSize, pBlock->fDataType, pBlock->fSpecification);
+     //PushBack(pBlock->fPtr, pBlock->fSize, pBlock->fDataType, pBlock->fSpecification);
 
    }
-
-  //Get the clusters
-  AliHLTCaloClusterDataStruct * caloClusterStruct;
-  vector<AliHLTCaloClusterDataStruct*> phosClustersVector;
-  
-   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeCaloCluster | kAliHLTDataOriginAny); pBlock!=NULL; pBlock=GetNextInputBlock()) {
+    
+   AliHLTCaloClusterDataStruct * caloClusterStruct;
+   //Get the PHOS Clusters
+   vector<AliHLTCaloClusterDataStruct*> phosClustersVector;
+   
+   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeCaloCluster | kAliHLTDataOriginPHOS); pBlock!=NULL; pBlock=GetNextInputBlock()) {
      AliHLTCaloClusterHeaderStruct *caloClusterHeader = reinterpret_cast<AliHLTCaloClusterHeaderStruct*>(pBlock->fPtr);
      fClusterReader->SetMemory(caloClusterHeader);
-     
      if ( (caloClusterHeader->fNClusters) < 0) {
        HLTWarning("Event has negative number of clusters: %d! Very bad for vector resizing", (Int_t) (caloClusterHeader->fNClusters));
+       continue;
      } else {    
-       HLTInfo("Event has positive number of clusters: %d", (Int_t ) (caloClusterHeader->fNClusters));
-
-       //BALLE, TODO, make it able to do EMCAL as well!!!
-       phosClustersVector.resize((int) (caloClusterHeader->fNClusters)); 
-       Int_t nClusters = 0;
-       cout << "nclustes " << caloClusterHeader->fNClusters << endl;
+       phosClustersVector.reserve( (int) (caloClusterHeader->fNClusters) + phosClustersVector.size() ); 
        while( (caloClusterStruct = fClusterReader->NextCluster()) != 0) {
-        cout << caloClusterStruct->fEnergy << "BALLE ENERGY" <<endl;
-        //BALLE stil just phos
-        phosClustersVector[nClusters++] = caloClusterStruct;  
+        phosClustersVector.push_back(caloClusterStruct);  
        }
-       
-       iResult = fTrackMatcher->Match(fTrackArray, phosClustersVector, fBz);
      }
-     
-     if(iResult <0) {
-       HLTWarning("Error in track matcher");
+   }
+
+    //Get the EMCAL Clusters
+   vector<AliHLTCaloClusterDataStruct*> emcalClustersVector;
+   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeCaloCluster | kAliHLTDataOriginEMCAL); pBlock!=NULL; pBlock=GetNextInputBlock()) {
+     AliHLTCaloClusterHeaderStruct *caloClusterHeader = reinterpret_cast<AliHLTCaloClusterHeaderStruct*>(pBlock->fPtr);
+     fClusterReader->SetMemory(caloClusterHeader);
+//           HLTInfo("\n EMCAL: estou aqui");//marcel
+     if ( (caloClusterHeader->fNClusters) < 0) {
+       HLTWarning("Event has negative number of clusters: %d! Very bad for vector resizing", (Int_t) (caloClusterHeader->fNClusters));
+       continue;
+     } else {    
+       emcalClustersVector.reserve( (int) (caloClusterHeader->fNClusters) + emcalClustersVector.size() ); 
+       while( (caloClusterStruct = fClusterReader->NextCluster()) != 0) {
+        emcalClustersVector.push_back(caloClusterStruct);  
+       }
      }
-     PushBack(pBlock->fPtr, pBlock->fSize, pBlock->fDataType, pBlock->fSpecification);
-     //PushBack(pBlock->fPtr, pBlock->fSize, kAliHLTDataTypeCaloCluster | kAliHLTDataOriginAny );
-  }
+   }
 
+      iResult = fTrackMatcher->Match(fTrackArray, phosClustersVector, emcalClustersVector, fBz,fMethod); //With Method String
 
-   fTrackArray->Clear();
-   //BALLE TODO phos only !!!!
+
+   //Push the blocks on
+   for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeCaloCluster | kAliHLTDataOriginAny); pBlock!=NULL; pBlock=GetNextInputBlock()) {
+     PushBack(pBlock->fPtr, pBlock->fSize, pBlock->fDataType, pBlock->fSpecification);
+    }
    
+   fTrackArray->Clear();
+
    return iResult;
+}
 
+int AliHLTGlobalTrackMatcherComponent::ScanConfigurationArgument(int argc, const char** argv) {
+  // see header file for class documentation
+  if (argc<=0) return 0;
+  int i=0;
+  TString argument=argv[i];
+
+  // -maxpt
+  if (argument.CompareTo("-method")==0) {
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fMethod=argument.Atoi(); // 
+    return 2;
+  }    
+
+// unknown argument
+  return -EINVAL;
 }
 
 // int AliHLTGlobalTrackMatcherComponent::Configure(const char* arguments)
@@ -241,3 +300,22 @@ int AliHLTGlobalTrackMatcherComponent::DoEvent(const AliHLTComponentEventData& /
 //   Int_t iResult = 1;
 //   return iResult;
 // }
+
+int AliHLTGlobalTrackMatcherComponent::Reconfigure(const char* cdbEntry, const char* /*chainId*/) {
+  // configure from the specified antry or the default one
+  const char* entry=cdbEntry;
+  if (!entry || entry[0]==0) entry=fOCDBEntry;
+
+  return ConfigureFromCDBTObjString(entry);
+}
+
+void AliHLTGlobalTrackMatcherComponent::GetOCDBObjectDescription( TMap* const targetMap) {
+  
+  // Get a list of OCDB object description.
+  if (!targetMap) return;
+  targetMap->Add(new TObjString(fOCDBEntry),
+                new TObjString(Form("Track-Matcher Method OCDB object") ) 
+                );
+}
+
+