]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDTrackerComponent.cxx
initial HLT-TRD commit
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDTrackerComponent.cxx
diff --git a/HLT/TRD/AliHLTTRDTrackerComponent.cxx b/HLT/TRD/AliHLTTRDTrackerComponent.cxx
new file mode 100644 (file)
index 0000000..68738af
--- /dev/null
@@ -0,0 +1,289 @@
+// $Id$
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Authors: Matthias Richter <Matthias.Richter@ift.uib.no>                *
+ *          Timm Steinbeck <timm@kip.uni-heidelberg.de>                   *
+ *          for The ALICE Off-line Project.                               *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** @file   AliHLTTRDTrackerComponent.cxx
+    @author Timm Steinbeck, Matthias Richter
+    @date   
+    @brief  A TRDTracker processing component for the HLT. */
+
+#if __GNUC__ >= 3
+using namespace std;
+#endif
+
+#include "TFile.h"
+
+#include "AliHLTTRDTrackerComponent.h"
+#include "AliHLTTRDDefinitions.h"
+
+#include "AliCDBManager.h"
+#include "AliTRDclusterizerV1HLT.h"
+#include "AliTRDReconstructor.h"
+#include "AliESD.h"
+#include "AliTRDtrackerHLT.h"
+
+#include "AliTRDCalibraFillHisto.h"
+
+#include "AliTRDcluster.h"
+#include "TObjArray.h"
+
+#include <cstdlib>
+#include <cerrno>
+#include <string>
+
+// this is a global object used for automatic component registration, do not use this
+AliHLTTRDTrackerComponent gAliHLTTRDTrackerComponent;
+
+ClassImp(AliHLTTRDTrackerComponent);
+    
+AliHLTTRDTrackerComponent::AliHLTTRDTrackerComponent()
+{
+  fOutputPercentage = 100; // By default we copy to the output exactly what we got as input
+
+  fStrorageDBpath = "local://$ALICE_ROOT";
+  fCDB = AliCDBManager::Instance();
+  //fCDB->SetDefaultStorage(fStrorageDBpath.c_str());
+  fCDB->SetRun(0);
+
+  fGeometryFileName = getenv("ALICE_ROOT");
+  fGeometryFileName += "/HLT/TRD/geometry.root";
+}
+
+AliHLTTRDTrackerComponent::~AliHLTTRDTrackerComponent()
+{
+}
+
+const char* AliHLTTRDTrackerComponent::GetComponentID()
+{
+  return "TRDTracker"; // The ID of this component
+}
+
+void AliHLTTRDTrackerComponent::GetInputDataTypes( vector<AliHLTComponent_DataType>& list)
+{
+  list.clear(); // We do not have any requirements for our input data type(s).
+  list.push_back( AliHLTTRDDefinitions::gkClusterDataType );
+}
+
+AliHLTComponent_DataType AliHLTTRDTrackerComponent::GetOutputDataType()
+{
+  return AliHLTTRDDefinitions::gkClusterDataType;
+}
+
+void AliHLTTRDTrackerComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
+{
+  constBase = 0;
+  inputMultiplier = ((double)fOutputPercentage)/100.0;
+}
+
+// Spawn function, return new instance of this class
+AliHLTComponent* AliHLTTRDTrackerComponent::Spawn()
+{
+  return new AliHLTTRDTrackerComponent;
+};
+
+int AliHLTTRDTrackerComponent::DoInit( int argc, const char** argv )
+{
+  // perform initialization. We check whether our relative output size is specified in the arguments.
+  fOutputPercentage = 100;
+  int i = 0;
+  char* cpErr;
+  while ( i < argc )
+    {
+      Logging( kHLTLogDebug, "HLT::TRDTracker::DoInit", "Arguments", "argv[%d] == %s", i, argv[i] );
+      if ( !strcmp( argv[i], "output_percentage" ) )
+       {
+         if ( i+1>=argc )
+           {
+             Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing output_percentage parameter");
+             return ENOTSUP;
+           }
+         Logging( kHLTLogDebug, "HLT::TRDTracker::DoInit", "Arguments", "argv[%d+1] == %s", i, argv[i+1] );
+         fOutputPercentage = strtoul( argv[i+1], &cpErr, 0 );
+         if ( *cpErr )
+           {
+             Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Wrong Argument", "Cannot convert output_percentage parameter '%s'", argv[i+1] );
+             return EINVAL;
+           }
+         Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
+         i += 2;
+         continue;
+       }
+
+      if ( strcmp( argv[i], "-cdb" ) == 0)
+       {
+         if ( i+1 >= argc )
+           {
+             Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing -cdb argument");
+             return ENOTSUP;         
+           }
+         fStrorageDBpath = argv[i+1];
+         Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "DB storage set", "DB storage is %s", fStrorageDBpath.c_str() );       
+         fCDB->SetDefaultStorage(fStrorageDBpath.c_str());
+         i += 2;
+         continue;
+       }      
+
+      if ( strcmp( argv[i], "-geometry" ) == 0)
+       {
+         if ( i+1 >= argc )
+           {
+             Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Missing Argument", "Missing -geometry argument");
+             return ENOTSUP;         
+           }
+         fGeometryFileName = argv[i+1];
+         Logging( kHLTLogInfo, "HLT::TRDTracker::DoInit", "GeomFile storage set", "GeomFile storage is %s", 
+                  fGeometryFileName.c_str() );   
+         i += 2;
+         continue;
+       }      
+
+      Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Unknown Option", "Unknown option '%s'", argv[i] );
+      return EINVAL;
+    }
+
+  fClusterizer = new AliTRDclusterizerV1HLT("TRCclusterizer", "TRCclusterizer");
+
+  fGeometryFile = TFile::Open(fGeometryFileName.c_str());
+  if (fGeometryFile)
+    {
+      fGeoManager = (TGeoManager *)fGeometryFile->Get("Geometry");
+      fTracker = new AliTRDtrackerHLT(fGeometryFile);
+    }
+  else
+    {
+      Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "fGeometryFile", "Unable to open file. FATAL!");
+      return -1;
+    }
+
+  AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance();
+  if (calibra == 0)
+    {
+      Logging(kHLTLogError, "HLT::TRDTracker::DoInit", "Calibration Histos", "::Instance failed");
+      return -1;      
+    }
+  else
+    {
+      calibra->SetMITracking(kTRUE);
+      calibra->Init2Dhistos();
+    }
+
+  return 0;
+}
+
+int AliHLTTRDTrackerComponent::DoDeinit()
+{
+  delete fClusterizer;
+  fClusterizer = 0;
+
+  delete fTracker;
+  fTracker = 0;
+  
+  if (fGeometryFile)
+    {
+      fGeometryFile->Close();
+      delete fGeometryFile;
+    }
+
+  AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance();
+  if (calibra)
+    {
+      calibra->Write2d();
+      calibra->Destroy();
+    }
+
+  return 0;
+}
+
+int AliHLTTRDTrackerComponent::DoEvent( const AliHLTComponentEventData & evtData,
+                                       AliHLTComponentTriggerData & trigData )
+{
+  Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "Output percentage set", "Output percentage set to %lu %%", fOutputPercentage );
+  Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "BLOCKS", "NofBlocks %lu", evtData.fBlockCnt );
+
+  AliHLTUInt32_t fDblock_Specification = 0;
+
+  AliHLTComponentBlockData *dblock = (AliHLTComponentBlockData *)GetFirstInputBlock( AliHLTTRDDefinitions::gkClusterDataType );
+  if (dblock != 0)
+    {
+      fDblock_Specification = dblock->fSpecification;
+    }
+  else
+    {
+      Logging( kHLTLogWarning, "HLT::TRDTracker::DoEvent", "DATAIN", "First Input Block not found! 0x%x", dblock);
+      return -1;
+    }
+
+  int ibForce = 0;
+  TObject *tobjin = (TObject *)GetFirstInputObject( AliHLTTRDDefinitions::gkClusterDataType, "TObjArray", ibForce);
+  Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "1stBLOCK", "Pointer = 0x%x", tobjin);
+
+//   int iTotalClusterCounter = 0;
+  while (tobjin != 0)
+    {
+      TObjArray *clusters = (TObjArray *)tobjin;
+      if (clusters != 0)
+       {
+         //put back to the clusterizers tree
+         Int_t iSuggestedDet = -1; // take the det number from the first cluster
+         Bool_t kInsert = kFALSE;
+         if (clusters->GetEntries() > 0)
+           {
+             AliTRDcluster *cl = (AliTRDcluster*)clusters->At(0);
+             iSuggestedDet = cl->GetDetector();
+             kInsert = fClusterizer->InsertClusters(clusters, iSuggestedDet);      
+             Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "TOTREE", "Result = %d", kInsert);        
+           }
+           
+         Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "CLUSTERS", "Pointer = 0x%x", clusters);      
+//       //dump the clusters to the log files
+//       for (Int_t ic = 0; ic < clusters->GetEntries(); ic++)
+//         {
+//           AliTRDcluster *cl = (AliTRDcluster*)clusters->At(ic);
+//           Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "CLUSTER", "%d : %d : Q = %1.2f", 
+//                    iTotalClusterCounter, ic, cl->GetQ());         
+//           iTotalClusterCounter++;
+//         }
+         
+         //Pass the data further...
+         //PushBack(clusters, AliHLTTRDDefinitions::gkClusterDataType, fDblock_Specification);
+       }
+      else
+       {
+         Logging( kHLTLogError, "HLT::TRDTracker::DoEvent", "CLUSTERS", "Pointer = 0x%x", clusters);     
+       }
+
+      tobjin = (TObject *)GetNextInputObject( ibForce );
+      Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "nextBLOCK", "Pointer = 0x%x", tobjin);
+
+    }
+
+  Int_t iNclusters = fClusterizer->GetNclusters();
+  Logging( kHLTLogInfo, "HLT::TRDTracker::DoEvent", "COUNT", "N of Clusters = %d", iNclusters);
+  fTracker->LoadClusters(fClusterizer->GetClusterTree());
+
+  AliTRDReconstructor::SetSeedingOn(kTRUE);
+
+  AliESD *esd = new AliESD();
+
+  //fTracker->MakeSeedsMI(3, 5, esd);
+  fTracker->PropagateBack(esd);
+
+  //here transport the esd tracks further
+  //no receiver defined yet(!)
+  delete esd;
+  return 0;
+}