]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDClusterHistoComponent.cxx
style modifications (Markus)
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDClusterHistoComponent.cxx
index dd428e4d5cb73d09bca2c15338e58ca52bd9c8af..dbf6773ae17dcda31e09f8871ee5e63041e44696 100644 (file)
 using namespace std;
 #endif
 
+#include "TFile.h"
+#include "TString.h"
+#include "TObjString.h"
+#include "TClonesArray.h"
+#include "TH1F.h"
+
 #include "AliHLTTRDClusterHistoComponent.h"
 #include "AliHLTTRDDefinitions.h"
-#include "AliHLTTRDCluster.h"
 #include "AliTRDcluster.h"
 #include "AliCDBEntry.h"
 #include "AliCDBManager.h"
-#include <TFile.h>
-#include <TString.h>
-#include "TObjString.h"
-#include "TClonesArray.h"
 #include "AliHLTTRDUtils.h"
 
 //#include "AliHLTTRD.h"
@@ -43,11 +44,18 @@ using namespace std;
 ClassImp(AliHLTTRDClusterHistoComponent)
 
 AliHLTTRDClusterHistoComponent::AliHLTTRDClusterHistoComponent()
-: fNClsDet(0),
-  fClsAmp(0),
-  fClsAmpDrift(0),
-  fClsTB(0),
-  fClsAmpDist(0)
+: AliHLTProcessor(),
+  fOutputSize(100000),
+  fSpec(0),
+  fClusterArray(NULL),
+  fNClsDet(NULL),
+  fClsAmp(NULL),
+  fClsAmpDrift(NULL),
+  fClsTB(NULL),
+  fClsAmpDist(NULL),
+  fSClsDist(NULL),
+  fNScls(NULL),
+  fEvSize(NULL)
 {
   // see header file for class documentation
   // or
@@ -82,16 +90,15 @@ void AliHLTTRDClusterHistoComponent::GetInputDataTypes(AliHLTComponentDataTypeLi
 AliHLTComponentDataType AliHLTTRDClusterHistoComponent::GetOutputDataType()
 {
   // see header file for class documentation
-  return kAliHLTDataTypeHistogram;
+  return kAliHLTDataTypeHistogram  | kAliHLTDataOriginTRD;
 
 }
 
 void AliHLTTRDClusterHistoComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
 {
   // see header file for class documentation
-  // XXX TODO: Find more realistic values.
-  constBase = 5000;
-  inputMultiplier = 3;
+  constBase = fOutputSize;
+  inputMultiplier = 0;
 }
 
 AliHLTComponent* AliHLTTRDClusterHistoComponent::Spawn()
@@ -100,23 +107,11 @@ AliHLTComponent* AliHLTTRDClusterHistoComponent::Spawn()
   return new AliHLTTRDClusterHistoComponent;
 }
 
-int AliHLTTRDClusterHistoComponent::DoInit( int argc, const char** argv )
+int AliHLTTRDClusterHistoComponent::DoInit(int argc, const char** argv)
 {
   // Initialize histograms
-
-  fNClsDet = new TH1D("trdClsDet", ";detector", 540, -0.5, 539.5);
-  fClsAmp  = new TH1D("trdClsAmp", ";amplitude", 200, -0.5, 199.5);
-  fClsAmpDrift = new TH1D("trdClsAmpDrift", ";amplitude", 200, -0.5, 199.5) ;
-  fClsTB = new TH1D("trdClsTB", ";time bin", 35, -0.5, 34.5);
-  fClsAmpDist = new TH1D("trdClsAmpDist", "mean amplitude", 200, 0, 100);
-
-  for(int i=0; i<540; i++)
-    fClsAmpDriftDet[i] = new TH1D(Form("trdClsDriftDet_%d",i), "", 200, -0.5, 199.5);
-
-  /*
-  // configure
-
   int iResult=0;
+  
   TString configuration="";
   TString argument="";
   for (int i=0; i<argc && iResult>=0; i++) {
@@ -124,102 +119,174 @@ int AliHLTTRDClusterHistoComponent::DoInit( int argc, const char** argv )
     if (!configuration.IsNull()) configuration+=" ";
     configuration+=argument;
   }
-  
+
   if (!configuration.IsNull()) {
     iResult=Configure(configuration.Data());
-  }  
+  } 
 
-  return iResult; 
-    */
-    
-    return 0;
+  fClusterArray = new TClonesArray("AliTRDcluster");
+
+  fNClsDet = new TH1F("trdClsDet", ";detector", 540, -0.5, 539.5);
+  fClsAmp  = new TH1F("trdClsAmp", ";amplitude", 200, -0.5, 1999.5);
+  fClsAmpDrift = new TH1F("trdClsAmpDrift", ";amplitude", 200, -0.5, 199.5) ;
+  fClsTB = new TH1F("trdClsTB", ";time bin", 35, -0.5, 34.5);
+  fClsAmpDist = new TH1F("trdClsAmpDist", "mean amplitude", 200, 0, 1000);
+  fSClsDist = new TH1F("sclsdist", "Super cluster spectrum", 200, 0, 8000);
+  fNScls = new TH1F("nscls", "No. of Kr clusters per event", 540, 0, 540);
+  fEvSize = new TH1F("TrdClEvSize", "Clusters size per event per ddl in kbyte", 512, 0, 512);
+
+  for(int i=0; i<540; i++) {
+    fClsAmpDriftDet[i] = new TH1F(Form("trdClsDriftDet_%d",i), "", 200, -0.5, 199.5);
+  }
+  
+  return 0;
 }
   
 int AliHLTTRDClusterHistoComponent::DoDeinit()
 {
   // see header file for class documentation
 
+  fClusterArray->Delete();
+  delete fClusterArray;
+
   // delete histograms
   if (fNClsDet) delete fNClsDet;
   if (fClsAmp) delete fClsAmp;
   if (fClsAmpDrift) delete fClsAmpDrift;
   if (fClsTB) delete fClsTB;
   if (fClsAmpDist) delete fClsAmpDist;
+  if (fSClsDist) delete fSClsDist;
+  if (fNScls) delete fNScls;
+  if (fEvSize) delete fEvSize;
 
-  for(int i=0; i<540; i++)
+  for(int i=0; i<540; i++){
     if (fClsAmpDriftDet[i]) delete fClsAmpDriftDet[i];
+  }
 
   return 0;
 }
 
-int AliHLTTRDClusterHistoComponent::DoEvent(const AliHLTComponentEventData& /*evtData*/, 
+int AliHLTTRDClusterHistoComponent::DoEvent(const AliHLTComponentEventData& /*evtData*/,
                                            AliHLTComponentTriggerData& /*trigData*/)
 {
 
-  if ( GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR ) )
-    return 0;
-  
+  // if (GetFirstInputBlock(kAliHLTDataTypeSOR)) return 0;
+  // else if (GetFirstInputBlock(kAliHLTDataTypeEOR))
+  //   {
+  //     TString fileName="/tmp/ClusterHistoDump_run";
+  //     fileName+=AliCDBManager::Instance()->GetRun();
+  //     fileName+=".root";
+  //     HLTInfo("Dumping Histogram file to %s",fileName.Data());
+  //     TFile* file = TFile::Open(fileName, "RECREATE");
+  //     fNClsDet->Write();
+  //     fClsAmp->Write();
+  //     fClsAmpDrift->Write();
+  //     fClsTB->Write();
+  //     fClsAmpDist->Write(); 
+  //     fSClsDist->Write();
+  //     fNScls->Write();
+  //     file->Close();
+  //     HLTInfo("Histogram file dumped");
+  //     return 0;
+  //   }
+
+  if(!IsDataEvent())return 0;
+
   const AliHLTComponentBlockData* iter = NULL;
-  
+  Bool_t gotData = kFALSE;
+
   for ( iter = GetFirstInputBlock(AliHLTTRDDefinitions::fgkClusterDataType); 
        iter != NULL; iter = GetNextInputBlock() ) {
 
-    HLTDebug("We get the right data type: Block Ptr: 0x%x; Block Size: %i",
-            iter->fPtr, iter->fSize);
+    fEvSize->Fill((iter->fSize+0.5f)/1024);
+    AliHLTTRDUtils::ReadClusters(fClusterArray, iter->fPtr, iter->fSize);
+    HLTDebug("TClonesArray of clusters: nbEntries = %i", fClusterArray->GetEntriesFast());
+    gotData = kTRUE;
+    fSpec |= iter->fSpecification;
+  }
 
-    TClonesArray* clusterArray = new TClonesArray("AliTRDcluster");
-    AliHLTTRDUtils::ReadClusters(clusterArray, iter->fPtr, iter->fSize);
-    HLTDebug("TClonesArray of clusters: nbEntries = %i", clusterArray->GetEntriesFast());
+  if(!gotData) return 0;
 
+  Float_t sClusterCharge[540] = { 0 };
     AliTRDcluster *cls;
-        
+
     // loop over clusters 
-    for(int i=0;i<clusterArray->GetEntriesFast();i++) {
+    for(int i=0;i<fClusterArray->GetEntriesFast();i++) {
 
-      cls=(AliTRDcluster*)clusterArray->At(i);
+      cls=(AliTRDcluster*)fClusterArray->At(i);
       
       fNClsDet->Fill(cls->GetDetector());
       fClsAmp->Fill(cls->GetQ());
       
       int tb = cls->GetPadTime();
       fClsTB->Fill(tb);
-      if (tb > 5 && tb <25)
+    if (tb > 5 && tb <25){
        fClsAmpDrift->Fill(cls->GetQ()); 
+    }
       
-      fClsAmpDriftDet[cls->GetDetector()]->Fill(cls->GetQ());
+    //fClsAmpDriftDet[cls->GetDetector()]->Fill(cls->GetQ());
+
+      Int_t det = cls->GetDetector();
+      sClusterCharge[det] += cls->GetQ();
+
     }
     
-    clusterArray->Delete();
-    delete clusterArray;
+    fClusterArray->Delete();
     
+  //fClsAmpDist->Reset();
+  //Int_t nSClusters = 0;
+  for(int det=0; det<540; det++) {
+    // if (fClsAmpDriftDet[det]->GetSum() > 0) 
+    //   fClsAmpDist->Fill(fClsAmpDriftDet[det]->GetMean());
+    if(sClusterCharge[det])
+    fSClsDist->Fill(sClusterCharge[det]);
   }
-   
-  fClsAmpDist->Reset();
-  for(int det=0; det<540; det++)
-    if (fClsAmpDriftDet[det]->GetSum() > 0) 
-      fClsAmpDist->Fill(fClsAmpDriftDet[det]->GetMean());
-
-  PushBack((TObject*)fNClsDet, kAliHLTDataTypeHistogram, 0);   
-  PushBack((TObject*)fClsAmp, kAliHLTDataTypeHistogram, 0);  
-  PushBack((TObject*)fClsAmpDrift, kAliHLTDataTypeHistogram, 0);   
-  PushBack((TObject*)fClsTB, kAliHLTDataTypeHistogram, 0);  
-  PushBack((TObject*)fClsAmpDist, kAliHLTDataTypeHistogram, 0);  
-
-  //delete til dodeinit
-  // if(fPlotChargeOROCAll){
-  //  AliHLTUInt32_t fSpecification = AliHLTTRDDefinitions::EncodeDataSpecification(0,35,2,5);
-  //  PushBack( (TObject*) fTotalClusterChargeOROCAll,kAliHLTDataTypeHistogram,fSpecification);
-  //}
-  
-  return 0;
-}
 
-int AliHLTTRDClusterHistoComponent::Configure(const char* arguments)
-{
+  //fNScls->Fill(nSClusters);
+
+  PushBack((TObject*)fNClsDet, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  PushBack((TObject*)fClsAmp, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  PushBack((TObject*)fClsAmpDrift, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  PushBack((TObject*)fClsTB, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  //PushBack((TObject*)fClsAmpDist, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  //PushBack((TObject*)fNScls, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  PushBack((TObject*)fSClsDist, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+  PushBack((TObject*)fEvSize, kAliHLTDataTypeHistogram | kAliHLTDataOriginTRD, fSpec);
+
   return 0;
 }
 
-int AliHLTTRDClusterHistoComponent::Reconfigure(const char* cdbEntry, const char* chainId)
-{
-  return 0;
+int AliHLTTRDClusterHistoComponent::Configure(const char* arguments){
+  int iResult=0;
+  if (!arguments) return iResult;
+  
+  TString allArgs=arguments;
+  TString argument;
+  int bMissingParam=0;
+
+  TObjArray* pTokens=allArgs.Tokenize(" ");
+  if (pTokens) {
+    for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
+      argument=((TObjString*)pTokens->At(i))->GetString();
+      if (argument.IsNull()) continue;
+      
+      if (argument.CompareTo("output_size")==0) {
+       if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+       HLTInfo("Setting output size to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+       fOutputSize=((TObjString*)pTokens->At(i))->GetString().Atoi();
+       continue;
+      } 
+      else {
+       HLTError("unknown argument: %s", argument.Data());
+       iResult=-EINVAL;
+       break;
+      }
+    }
+    delete pTokens;
+  }
+  if (bMissingParam) {
+    HLTError("missing parameter for argument %s", argument.Data());
+    iResult=-EINVAL;
+  }
+  return iResult;
 }