]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TRD/AliHLTTRDCalibrationComponent.cxx
Coverity (Melinda)
[u/mrichter/AliRoot.git] / HLT / TRD / AliHLTTRDCalibrationComponent.cxx
index 7c45a7213c9da43e5c3c72c5d06e0ecd797b63c9..50bccc63fdcaeee18a48184ad0131032afcfc625 100644 (file)
@@ -3,9 +3,8 @@
 /**************************************************************************
  * 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.                               *
+ * Authors:                                                               *
+ *          for The ALICE HLT Project.                                    *
  *                                                                        *
  * Permission to use, copy, modify and distribute this software and its   *
  * documentation strictly for non-commercial purposes is hereby granted   *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/** @file   AliHLTTRDCalibrationComponent.cxx
-    @author Timm Steinbeck, Matthias Richter
-    @date
-    @brief  A TRDCalibration processing component for the HLT. */
+//  @file   AliHLTTRDCalibrationComponent.cxx
+//  @author 
+//  @date
+//  @brief  A TRDCalibration processing component for the HLT. 
+// 
 
 #if __GNUC__ >= 3
 using namespace std;
@@ -52,6 +52,8 @@ using namespace std;
 #include "AliTRDCalibraMode.h"
 #include "AliTRDCalibraVector.h"
 #include "AliTRDCalibraVdriftLinearFit.h"
+#include "AliTRDReconstructor.h"
+#include "AliTRDrecoParam.h"
 
 #include <cstdlib>
 #include <cerrno>
@@ -67,9 +69,12 @@ AliHLTTRDCalibrationComponent::AliHLTTRDCalibrationComponent()
     fOutArray(NULL),
     fAfterRunArray(NULL),
     fDisplayArray(NULL),
-    fRecievedTimeBins(kFALSE),
+    fSavedTimeBins(kFALSE),
     fTrgStrings(NULL),
-    fAccRejTrg(0)
+    fAccRejTrg(0),
+    fMinClusters(0),
+    fMinTracklets(0),
+    fTakeAllEvents(kFALSE)
 {
   // Default constructor
 }
@@ -89,7 +94,7 @@ void AliHLTTRDCalibrationComponent::GetInputDataTypes( vector<AliHLTComponentDat
 {
   // Get the list of input data
   list.clear(); // We do not have any requirements for our input data type(s).
-  list.push_back(AliHLTTRDDefinitions::fgkTRDSATracksDataType);
+  list.push_back(AliHLTTRDDefinitions::fgkTracksDataType);
 }
 
 AliHLTComponentDataType AliHLTTRDCalibrationComponent::GetOutputDataType()
@@ -151,15 +156,27 @@ Int_t AliHLTTRDCalibrationComponent::ScanArgument( int argc, const char** argv )
           i += 2;
           continue;
         }
-      if ( !strcmp( argv[i], "-everyNevent" ) )
+      if ( !strcmp( argv[i], "-minClusters" ) )
         {
           if ( i+1>=argc )
             {
-              HLTError("Missing everyNevent parameter");
+              HLTError("Missing minClusters parameter");
               return ENOTSUP;
             }
           HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
-          HLTInfo("Option -everyNevent depreceated");
+         fMinClusters = strtoul( argv[i+1], &cpErr, 0 );
+          i += 2;
+          continue;
+        }
+      if ( !strcmp( argv[i], "-minTracklets" ) )
+        {
+          if ( i+1>=argc )
+            {
+              HLTError("Missing minTracklets parameter");
+              return ENOTSUP;
+            }
+          HLTDebug("argv[%d+1] == %s", i, argv[i+1] );
+         fMinTracklets = strtoul( argv[i+1], &cpErr, 0 );
           i += 2;
           continue;
         }
@@ -188,6 +205,13 @@ Int_t AliHLTTRDCalibrationComponent::ScanArgument( int argc, const char** argv )
           i += 1;
           continue;
         }
+      if ( !strcmp( argv[i], "-takeAllEvents" ) )
+        {
+         fTakeAllEvents = kTRUE;
+         fAccRejTrg = 0;
+          i += 1;
+          continue;
+        }
 
       else {
         HLTError("Unknown option '%s'", argv[i] );
@@ -248,6 +272,7 @@ Int_t AliHLTTRDCalibrationComponent::DeinitCalibration()
   
   HLTDebug("DeinitCalibration");
   delete fTracksArray; fTracksArray=0;
+  fTRDCalibraFillHisto->DestroyDebugStreamer();
   //fTRDCalibraFillHisto->Destroy();
   //fOutArray->Delete();
   delete fOutArray; fOutArray=0;
@@ -260,101 +285,106 @@ Int_t AliHLTTRDCalibrationComponent::DeinitCalibration()
   return 0;
 }
 
-Int_t AliHLTTRDCalibrationComponent::ProcessCalibration(const AliHLTComponent_EventData& evtData,
-                                                        const AliHLTComponent_BlockData* blocks,
-                                                        AliHLTComponent_TriggerData& trigData,
+Int_t AliHLTTRDCalibrationComponent::ProcessCalibration(const AliHLTComponent_EventData& /*evtData*/,
+                                                        const AliHLTComponent_BlockData* /*blocks*/,
+                                                        AliHLTComponent_TriggerData& /*trigData*/,
                                                         AliHLTUInt8_t* /*outputPtr*/,
                                                         AliHLTUInt32_t& /*size*/,
                                                         vector<AliHLTComponent_BlockData>& /*outputBlocks*/)
 {
-  HLTDebug("NofBlocks %lu", evtData.fBlockCnt );
   // Process an event
        
-  
-  // Loop over all input blocks in the event
-  vector<AliHLTComponent_DataType> expectedDataTypes;
-  GetInputDataTypes(expectedDataTypes);
-  for ( unsigned long iBlock = 0; iBlock < evtData.fBlockCnt; iBlock++ )
+  TClonesArray* TCAarray[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+  Int_t usedEntries = 0;
+  Int_t blockOrObject = 0;
+  Int_t nTimeBins = -1;
+
+  for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(AliHLTTRDDefinitions::fgkTracksDataType); pBlock; pBlock=GetNextInputBlock()) 
     {
-      const AliHLTComponentBlockData &block = blocks[iBlock];
-      AliHLTComponentDataType inputDataType = block.fDataType;
-      Bool_t correctDataType = kFALSE;
-
-      for(UInt_t i = 0; i < expectedDataTypes.size(); i++)
-        if( expectedDataTypes.at(i) == inputDataType)
-          correctDataType = kTRUE;
-      if (!correctDataType) {
-        HLTDebug( "Block # %i/%i; Event 0x%08LX (%Lu) Wrong received datatype: %s - Skipping",
-                  iBlock, evtData.fBlockCnt,
-                  evtData.fEventID, evtData.fEventID,
-                  DataType2Text(inputDataType).c_str());
-        continue;
-      }
-      else {
-        HLTDebug("We get the right data type: Block # %i/%i; Event 0x%08LX (%Lu) Received datatype: %s; Block Size: %i",
-                 iBlock, evtData.fBlockCnt-1,
-                 evtData.fEventID, evtData.fEventID,
-                 DataType2Text(inputDataType).c_str(),
-                block.fSize);
-      }
+      TCAarray[0] = fTracksArray;
+      AliHLTTRDUtils::ReadTracks(TCAarray[0], pBlock->fPtr, pBlock->fSize, &nTimeBins);
+      usedEntries = 1;
+      blockOrObject = -1;
+    }  
 
-      Int_t nTimeBins;
-      AliHLTTRDUtils::ReadTracks(fTracksArray, block.fPtr, block.fSize, &nTimeBins);
-      
-          
-      if(!fRecievedTimeBins){
-       HLTDebug("Reading number of time bins from input block. Value is: %d", nTimeBins);
-       fTRDCalibraFillHisto->Init2Dhistos(nTimeBins); // initialise the histos
-       fTRDCalibraFillHisto->SetNumberClusters(0); // At least 1 clusters
-       fTRDCalibraFillHisto->SetNumberClustersf(nTimeBins); // Not more than %d  clusters
-       fRecievedTimeBins=kTRUE;
+  for(const TObject *iter = GetFirstInputObject(AliHLTTRDDefinitions::fgkHiLvlTracksDataType); iter; iter = GetNextInputObject()) 
+    {
+      if(blockOrObject<0){
+       HLTError("You may not mix high level and low level!");
+       return -1;
       }
-      
-       
-      Bool_t TriggerPassed=kFALSE;
-               
-      if(fAccRejTrg){
-       if(fAccRejTrg>0){
-         TriggerPassed=kFALSE;
-         for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
-           const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
-           const TString tString=obString->GetString();
-           //printf("Trigger Output: %i\n",EvaluateCTPTriggerClass(tString.Data(),trigData));
-           if(EvaluateCTPTriggerClass(tString.Data(),trigData)){TriggerPassed=kTRUE; break;}
-         }
-       }
-       else{
-         TriggerPassed=kTRUE;
-         for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
-           const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
-           const TString tString=obString->GetString();
-           if(EvaluateCTPTriggerClass(tString.Data(),trigData)){TriggerPassed=kFALSE; break;}
-         }
-       }
+
+      TCAarray[usedEntries] = dynamic_cast<TClonesArray*>(const_cast<TObject*>(iter));
+      if(!TCAarray[usedEntries])continue;
+      TObjString* strg = dynamic_cast<TObjString*>(const_cast<TObject*>(GetNextInputObject()));
+      if(!strg)continue;
+
+      nTimeBins = strg->String().Atoi();
+      usedEntries++;
+      blockOrObject = 1;
+    }
+
+  if(!blockOrObject)
+    return 0;
+
+  if(!fSavedTimeBins){
+    if(nTimeBins<0){
+      HLTFatal("Number of timebins is negative!");
+      return -1;
+    }
+    HLTDebug("Saving number of time bins which was read from input block. Value is: %d", nTimeBins);
+    fTRDCalibraFillHisto->Init2Dhistos(nTimeBins); // initialise the histos
+    fTRDCalibraFillHisto->SetNumberClusters(fMinClusters); // At least fMinClusters clusters
+    fTRDCalibraFillHisto->SetNumberClustersf(nTimeBins); // Not more than %d  clusters
+    fSavedTimeBins=kTRUE;
+  }
+
+  Bool_t TriggerPassed = fTakeAllEvents;
+
+  if(fAccRejTrg){
+    if(fAccRejTrg>0){
+      TriggerPassed=kFALSE;
+      for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
+       const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
+       const TString tString=obString->GetString();
+       if(CheckCTPTrigger(tString.Data())>0){TriggerPassed=kTRUE; break;}
       }
-      
-      
-      Int_t nbEntries = fTracksArray->GetEntries();
-      HLTDebug(" %i TRDtracks in tracksArray", nbEntries);
-      AliTRDtrackV1* trdTrack = 0x0;
-      for (Int_t i = 0; i < nbEntries; i++){
-       HLTDebug("%i/%i: ", i+1, nbEntries);
-       trdTrack = (AliTRDtrackV1*)fTracksArray->At(i);
-       //trdTrack->Print();
-       fTRDCalibraFillHisto->SetCH2dOn(TriggerPassed);
-       fTRDCalibraFillHisto->UpdateHistogramsV1(trdTrack);
-       fTRDCalibraFillHisto->SetCH2dOn(kTRUE);
+    }
+    else{
+      TriggerPassed=kTRUE;
+      for(int i = 0; i < fTrgStrings->GetEntriesFast(); i++){
+       const TObjString *const obString=(TObjString*)fTrgStrings->At(i);
+       const TString tString=obString->GetString();
+       if(CheckCTPTrigger(tString.Data())>0){TriggerPassed=kFALSE; break;}
       }
-      
-
-      if(!fOutArray->At(0))FormOutput(0);
-      if(!fDisplayArray->At(0))FormOutput(1);
-      PushBack(fDisplayArray, AliHLTTRDDefinitions::fgkCalibrationDataType);
-      
-      fTracksArray->Delete();
-      
     }
+  }
+  
+  fTRDCalibraFillHisto->SetCH2dOn(TriggerPassed);
+  fTRDCalibraFillHisto->SetPH2dOn(TriggerPassed);
+  for(int i=0; i<usedEntries; i++){
+    const TClonesArray* inArr = TCAarray[i];
+    Int_t nbEntries = inArr->GetEntries();
+    HLTDebug(" %i TRDtracks in tracksArray", nbEntries);
+    AliTRDtrackV1* trdTrack = 0x0;
+    for (Int_t ii = 0; ii < nbEntries; ii++){
+      HLTDebug("%i/%i: ", ii+1, nbEntries);
+      trdTrack = (AliTRDtrackV1*)inArr->At(ii);
+      if(trdTrack->GetNumberOfTracklets()<fMinTracklets)continue;
+      fTRDCalibraFillHisto->UpdateHistogramsV1(trdTrack);
+      // for(int i3=0; i3<7; i3++)
+      //   if(trdTrack->GetTracklet(i3))trdTrack->GetTracklet(i3)->Bootstrap(fReconstructor);
+    }
+  }
+
+  if(!fOutArray->At(0))FormOutput(0);
+  if(!fDisplayArray->At(0))FormOutput(1);
+  PushBack(fDisplayArray, AliHLTTRDDefinitions::fgkCalibrationDataType);
+
+  if(blockOrObject<0){
+    TCAarray[0]->Delete();
+  }
+
   return 0;
 
 }
@@ -404,8 +434,6 @@ void AliHLTTRDCalibrationComponent::FormOutput(Int_t param)
 
 Int_t AliHLTTRDCalibrationComponent::ShipDataToFXS(const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/)
 {
-  //fTRDCalibraFillHisto->DestroyDebugStreamer();
-
   AliHLTReadoutList rdList(AliHLTReadoutList::kTRD);
 
   EORCalibration();
@@ -415,41 +443,29 @@ Int_t AliHLTTRDCalibrationComponent::ShipDataToFXS(const AliHLTComponentEventDat
   //fOutArray->Remove(fOutArray->FindObject("PH2d"));
   //fOutArray->Remove(fOutArray->FindObject("CH2d"));
 
-  //if(!(fOutArray->FindObject("CH2d"))) {
-  //  TH2I * ch2d = new TH2I("CH2d","Nz0Nrphi0",100,0.0,300.0,540,0,540);
-  //  fOutArray->Add(ch2d);
-  //}
-
-  //if(!(fOutArray->FindObject("PH2d"))) {
-  //  TProfile2D * ph2d = new TProfile2D("PH2d","Nz0Nrphi0",30,-0.05,2.95,540,0,540);
-  //  fOutArray->Add(ph2d);
-  //}
+  if(!(fOutArray->FindObject("CH2d"))) {
+    TH2I * ch2d = new TH2I("CH2d","Nz0Nrphi0",100,0.0,300.0,540,0,540);
+    fOutArray->Add(ch2d);
+  }
 
-  //if(!(fOutArray->FindObject("PRF2d"))) {
-  //  TProfile2D * prf2d = new TProfile2D("PRF2d","Nz0Nrphi0Ngp3",60,-9.0,9.0,540,0,540);
-  //  fOutArray->Add(prf2d);
-  //}
+  if(!(fOutArray->FindObject("PH2d"))) {
+    TProfile2D * ph2d = new TProfile2D("PH2d","Nz0Nrphi0",30,-0.05,2.95,540,0,540);
+    fOutArray->Add(ph2d);
+  }
 
+  if(!(fOutArray->FindObject("PRF2d"))) {
+    TProfile2D * prf2d = new TProfile2D("PRF2d","Nz0Nrphi0Ngp3",60,-9.0,9.0,540,0,540);
+    fOutArray->Add(prf2d);
+  }
 
   HLTDebug("Size of the fOutArray is %d\n",fOutArray->GetEntriesFast());
 
-  /*
-  TString fileName="$ALIHLT_TOPDIR/build-debug/output/CalibHistoDump_run";
-  fileName+=".root";
-  HLTInfo("Dumping Histogram file to %s",fileName.Data());
-  TFile* file = TFile::Open(fileName, "RECREATE");
-  //fAfterRunArray->Write();
-  fOutArray->Write();
-  file->Close();
-  HLTInfo("Histogram file dumped");
-  */
-  
-  PushToFXS((TObject*)fOutArray, "TRD", "GAINDRIFTPRF", rdList.Buffer() );
+  PushToFXS((TObject*)fOutArray, "TRD", "GAINDRIFTPRF", &rdList );
   //PushToFXS((TObject*)fOutArray->FindObject("CH2d"), "TRD", "GAINDRIFTPRF", rdList.Buffer() );
 
-       
   return 0;
 }
+
 Int_t AliHLTTRDCalibrationComponent::EORCalibration()
 {
   //Also Fill histograms for the online display
@@ -467,10 +483,10 @@ Int_t AliHLTTRDCalibrationComponent::EORCalibration()
   //Gain
   calibra->SetMinEntries(100);
   calibra->AnalyseCH(hCH2d);
-  Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(0))
-    + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(0));
-  Int_t nbfit       = calibra->GetNumberFit();
-  Int_t nbE         = calibra->GetNumberEnt();
+  //Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(0))
+  //  + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(0));
+  //Int_t nbfit       = calibra->GetNumberFit();
+  //Int_t nbE         = calibra->GetNumberEnt();
   TH1F *coefgain = 0x0;
   // enough statistics
   //if ((nbtg >                  0) && 
@@ -487,9 +503,9 @@ Int_t AliHLTTRDCalibrationComponent::EORCalibration()
   calibra->SetMinEntries(100); // If there is less than 100
   hVdriftLinearFit->FillPEArray();
   calibra->AnalyseLinearFitters(hVdriftLinearFit);
-  nbtg = 540;
-  nbfit = calibra->GetNumberFit();
-  nbE   = calibra->GetNumberEnt();
+  //nbtg = 540;
+  //nbfit = calibra->GetNumberFit();
+  //nbE   = calibra->GetNumberEnt();
   TH1F *coefdriftsecond = 0x0;
   // enough statistics
   //if ((nbtg >                  0) && 
@@ -506,10 +522,10 @@ Int_t AliHLTTRDCalibrationComponent::EORCalibration()
   // vdrift first method
   calibra->SetMinEntries(100*20); // If there is less than 20000
   calibra->AnalysePH(hPH2d);
-  nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
-    + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
-  nbfit        = calibra->GetNumberFit();
-  nbE          = calibra->GetNumberEnt();
+  //nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
+  //  + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
+  //nbfit        = calibra->GetNumberFit();
+  //nbE          = calibra->GetNumberEnt();
   TH1F *coefdrift = 0x0;
   TH1F *coeft0 = 0x0;
   // enough statistics
@@ -531,10 +547,10 @@ Int_t AliHLTTRDCalibrationComponent::EORCalibration()
   //PRF
   calibra->SetMinEntries(200); 
   calibra->AnalysePRFMarianFit(hPRF2d);
-  nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
-    + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
-  nbfit        = calibra->GetNumberFit();
-  nbE          = calibra->GetNumberEnt();
+  //nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
+  //  + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
+  //nbfit        = calibra->GetNumberFit();
+  //nbE          = calibra->GetNumberEnt();
   TH1F *coefprf = 0x0;
   // enough statistics
   //if ((nbtg >                  0) && 
@@ -552,27 +568,23 @@ Int_t AliHLTTRDCalibrationComponent::EORCalibration()
   coefdrift->SetName("coefdrift");
   coefdriftsecond->SetName("coefdriftsecond");
   coeft0->SetName("coeft0");
-  if(coefgain) fAfterRunArray->Add(coefgain);
-  if(coefprf) fAfterRunArray->Add(coefprf);
-  if(coefdrift) fAfterRunArray->Add(coefdrift);
-  if(coefdriftsecond) fAfterRunArray->Add(coefdriftsecond);
-  if(coeft0) fAfterRunArray->Add(coeft0);
-  
+  fAfterRunArray->Add(coefgain);
+  fAfterRunArray->Add(coefprf);
+  fAfterRunArray->Add(coefdrift);
+  fAfterRunArray->Add(coefdriftsecond);
+  fAfterRunArray->Add(coeft0);
 
-  if(coefgain||coefprf||coefdrift||coeft0||coefdriftsecond) {
-    PushBack(fAfterRunArray, AliHLTTRDDefinitions::fgkEORCalibrationDataType);
-  }
-
-  /*
-  TString fileName="$ALIHLT_TOPDIR/build-debug/output/CalibHistoDump_run";
-  fileName+=".root";
-  HLTInfo("Dumping Histogram file to %s",fileName.Data());
-  TFile* file = TFile::Open(fileName, "RECREATE");
-  fAfterRunArray->Write();
-  fOutArray->Write();
-  file->Close();
-  HLTInfo("Histogram file dumped");
-  */
+  PushBack(fAfterRunArray, AliHLTTRDDefinitions::fgkEORCalibrationDataType);
+  
+  // TString fileName="/tmp/CalibHistoDump_run";
+  // fileName+=AliCDBManager::Instance()->GetRun();
+  // fileName+=".root";
+  // HLTInfo("Dumping Histogram file to %s",fileName.Data());
+  // TFile* file = TFile::Open(fileName, "RECREATE");
+  // fAfterRunArray->Write();
+  // fOutArray->Write();
+  // file->Close();
+  // HLTInfo("Histogram file dumped");
 
   return 0;
 }