]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
remove performance train from TRD directory. The new location is
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 Nov 2009 13:26:54 +0000 (13:26 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 Nov 2009 13:26:54 +0000 (13:26 +0000)
PWG1/TRD

62 files changed:
TRD/TRDqaRecLinkDef.h [deleted file]
TRD/libTRDqaRec.pkg [deleted file]
TRD/qaRec/AliTRDalignmentTask.cxx [deleted file]
TRD/qaRec/AliTRDalignmentTask.h [deleted file]
TRD/qaRec/AliTRDcalibration.cxx [deleted file]
TRD/qaRec/AliTRDcalibration.h [deleted file]
TRD/qaRec/AliTRDcheckDET.cxx [deleted file]
TRD/qaRec/AliTRDcheckDET.h [deleted file]
TRD/qaRec/AliTRDcheckESD.cxx [deleted file]
TRD/qaRec/AliTRDcheckESD.h [deleted file]
TRD/qaRec/AliTRDcheckPID.cxx [deleted file]
TRD/qaRec/AliTRDcheckPID.h [deleted file]
TRD/qaRec/AliTRDclusterResolution.cxx [deleted file]
TRD/qaRec/AliTRDclusterResolution.h [deleted file]
TRD/qaRec/AliTRDefficiency.cxx [deleted file]
TRD/qaRec/AliTRDefficiency.h [deleted file]
TRD/qaRec/AliTRDefficiencyMC.cxx [deleted file]
TRD/qaRec/AliTRDefficiencyMC.h [deleted file]
TRD/qaRec/AliTRDinfoGen.cxx [deleted file]
TRD/qaRec/AliTRDinfoGen.h [deleted file]
TRD/qaRec/AliTRDmultiplicity.cxx [deleted file]
TRD/qaRec/AliTRDmultiplicity.h [deleted file]
TRD/qaRec/AliTRDpidRefMaker.cxx [deleted file]
TRD/qaRec/AliTRDpidRefMaker.h [deleted file]
TRD/qaRec/AliTRDpidRefMakerLQ.cxx [deleted file]
TRD/qaRec/AliTRDpidRefMakerLQ.h [deleted file]
TRD/qaRec/AliTRDpidRefMakerNN.cxx [deleted file]
TRD/qaRec/AliTRDpidRefMakerNN.h [deleted file]
TRD/qaRec/AliTRDrecoTask.cxx [deleted file]
TRD/qaRec/AliTRDrecoTask.h [deleted file]
TRD/qaRec/AliTRDresolution.cxx [deleted file]
TRD/qaRec/AliTRDresolution.h [deleted file]
TRD/qaRec/info/AliTRDclusterInfo.cxx [deleted file]
TRD/qaRec/info/AliTRDclusterInfo.h [deleted file]
TRD/qaRec/info/AliTRDeventInfo.cxx [deleted file]
TRD/qaRec/info/AliTRDeventInfo.h [deleted file]
TRD/qaRec/info/AliTRDtrackInfo.cxx [deleted file]
TRD/qaRec/info/AliTRDtrackInfo.h [deleted file]
TRD/qaRec/info/AliTRDv0Info.cxx [deleted file]
TRD/qaRec/info/AliTRDv0Info.h [deleted file]
TRD/qaRec/info/Makefile [deleted file]
TRD/qaRec/info/trdTrackInfoLinkDef.h [deleted file]
TRD/qaRec/macros/AddTRDcheckDET.C [deleted file]
TRD/qaRec/macros/AddTRDcheckESD.C [deleted file]
TRD/qaRec/macros/AddTRDcheckPID.C [deleted file]
TRD/qaRec/macros/AddTRDefficiency.C [deleted file]
TRD/qaRec/macros/AddTRDinfoGen.C [deleted file]
TRD/qaRec/macros/AddTRDresolution.C [deleted file]
TRD/qaRec/macros/AliTRDperformanceTrain.h [deleted file]
TRD/qaRec/macros/AliTrackletsinTRD.C [deleted file]
TRD/qaRec/macros/AliTrackletsinTRD.h [deleted file]
TRD/qaRec/macros/EVE/PH.C [deleted file]
TRD/qaRec/macros/EVE/nclusters.C [deleted file]
TRD/qaRec/macros/PID/ConvertMLPs.C [deleted file]
TRD/qaRec/macros/PID/MonitorTraining.C [deleted file]
TRD/qaRec/macros/PID/makeTrainingData.C [deleted file]
TRD/qaRec/macros/PID/runTraining.C [deleted file]
TRD/qaRec/macros/helper.C [deleted file]
TRD/qaRec/macros/makeCalibResults.C [deleted file]
TRD/qaRec/macros/makeResults.C [deleted file]
TRD/qaRec/run.C [deleted file]
TRD/qaRec/run.jdl [deleted file]

diff --git a/TRD/TRDqaRecLinkDef.h b/TRD/TRDqaRecLinkDef.h
deleted file mode 100644 (file)
index 5597cb4..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifdef __CINT__
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-#pragma link off all globals;
-#pragma link off all classes;
-#pragma link off all functions;
-
-#pragma link C++ class  AliTRDclusterInfo+;
-#pragma link C++ class  AliTRDv0Info+;
-#pragma link C++ class  AliTRDtrackInfo+;
-#pragma link C++ class  AliTRDeventInfo+;
-#pragma link C++ class  AliTRDtrackInfo::AliESDinfo+;
-#pragma link C++ class  AliTRDtrackInfo::AliMCinfo+;
-#pragma link C++ class  AliTRDcheckESD+;
-#pragma link C++ class  AliTRDinfoGen+;
-#pragma link C++ class  AliTRDrecoTask+;
-#pragma link C++ class  AliTRDcheckDET+;
-#pragma link C++ class  AliTRDresolution+;
-#pragma link C++ class  AliTRDefficiency+;
-#pragma link C++ class  AliTRDefficiencyMC+;
-#pragma link C++ class  AliTRDcheckPID+;
-
-// reconstruction calibration tasks
-#pragma link C++ class  AliTRDmultiplicity+;
-#pragma link C++ class  AliTRDclusterResolution+;
-#pragma link C++ class  AliTRDalignmentTask+;
-#pragma link C++ class  AliTRDcalibration+;
-#pragma link C++ class  AliTRDpidRefMaker+;
-#pragma link C++ class  AliTRDpidRefMaker::AliTRDpidRefData+;
-#pragma link C++ class  AliTRDpidRefMaker::AliTRDpidRefDataArray+;
-#pragma link C++ class  AliTRDpidRefMakerLQ+;
-#pragma link C++ class  AliTRDpidRefMakerNN+;
-
-#endif
diff --git a/TRD/libTRDqaRec.pkg b/TRD/libTRDqaRec.pkg
deleted file mode 100644 (file)
index 9975fb7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#-*- Mode: Makefile -*-
-
-ORGSRCS  := $(wildcard TRD/qaRec/*.cxx)
-ORGSRCS  += $(wildcard TRD/qaRec/info/*.cxx)
-SRCS     := $(patsubst TRD/%, %, ${ORGSRCS})
-
-HDRS= $(SRCS:.cxx=.h)
-
-DHDR= TRDqaRecLinkDef.h
-
-
-ifeq (win32gcc,$(ALICE_TARGET))
-PACKSOFLAGS:= $(SOFLAGS) -L$(ALICE_ROOT)/lib/tgt_$(ALICE_TARGET) \
-                         -lANALYSIS -lANALYSISalice -lESD \
-#                         -L$(ROOTLIBDIR) -lGui
-endif
diff --git a/TRD/qaRec/AliTRDalignmentTask.cxx b/TRD/qaRec/AliTRDalignmentTask.cxx
deleted file mode 100644 (file)
index 37681fa..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* Permission to use, copy, modify and distribute this software and its   *
-* documentation strictly for non-commercialf 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.                  *
-**************************************************************************/
-
-///////////////////////////////////////////////
-// TRD alignment task
-//
-// Some documentation
-//
-// Authors :
-//
-////////////////////////////////////////////////
-
-#include "TTreeStream.h"
-#include "TROOT.h"
-#include "TH1.h"
-#include "TH2.h"
-
-#include "AliTrackPointArray.h"
-#include "AliLog.h"
-
-#include "AliTRDgeometry.h"
-#include "AliTRDcluster.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-
-#include "AliTRDalignmentTask.h"
-
-ClassImp(AliTRDalignmentTask)
-
-//________________________________________________________
-AliTRDalignmentTask::AliTRDalignmentTask()
-  :AliTRDrecoTask("Alignment", "TRD alignment")
-  ,fTree(0x0)
-  ,fArray(0x0)
-{
-  InitFunctorList();
-  DefineOutput(1, TTree::Class());
-
-}
-
-//________________________________________________________
-AliTRDalignmentTask::~AliTRDalignmentTask()
-{
-  if (fArray) delete fArray;
-}
-
-
-//________________________________________________________
-void AliTRDalignmentTask::CreateOutputObjects()
-{
-  // spatial resolution
-  OpenFile(1, "RECREATE");
-
-  fTree = new TTree("spTree", "Tree with track space point arrays");
-  fTree->Branch("SP","AliTrackPointArray", &fArray);
-}
-
-
-//________________________________________________________
-void AliTRDalignmentTask::Exec(Option_t *opt)
-{
-// Documentation to come
-
-  AliTRDrecoTask::Exec(opt);
-  PostData(1, fTree);
-}
-
-
-//________________________________________________________
-TH1* AliTRDalignmentTask::PlotTrackPoints(const AliTRDtrackV1 *track)
-{
-// Documentation to come 
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-
-  if (fArray) delete fArray;
-  fArray = new AliTrackPointArray(fkTrack->GetNumberOfTracklets());
-
-  // Filling the track points array
-  Float_t x, y, z;
-  AliTrackPoint p; Int_t ip = 0;
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-    if(!(tracklet = fkTrack->GetTracklet(il))) continue;
-    if(!tracklet->IsOK()) continue;
-    tracklet->Fit(kTRUE);
-
-    x = tracklet->GetX0();
-    y = tracklet->GetYfit(0)-tracklet->GetYfit(1)*(tracklet->GetX0()-x);
-    z = tracklet->GetZfit(0);
-    p.SetXYZ(x,y,z);
-    fArray->AddPoint(ip++, &p);
-  }
-  fTree->Fill();
-
-/*  if(fDebugLevel>=1){
-    Float_t yt = fRim.GetYat(x[il]);
-    (*fDebugStream) << "TrkltResiduals"
-      << "layer="  << il
-      << "x="      <<x[il]
-      << "y="      <<y[il]
-      << "yt="     <<yt
-      << "dydx="   << dydx[il]
-      << "dy="     << dy
-      << "\n";
-  }*/
-  return 0x0;
-}
-
-
-
-//________________________________________________________
-Bool_t AliTRDalignmentTask::IsIdenticalWithOneOf(AliTrackPoint * const p, AliTrackPointArray *parray, int nmax) {
-
-  // Is the point p identical with one of the points on the list parray?
-  // This is a fix for aliroot 4-16-Rev-01 (and before) writing some 
-  // spurious unitialized points. 
-  for (int i=0; i<parray->GetNPoints() && i<nmax; i++) {
-    AliTrackPoint pa;
-    parray->GetPoint(pa,i);
-    //printf("comparing %7.3f with %7.3f\n",p->GetY(),pa.GetY());
-    if (p->GetResidual(pa,0)<1e-8) return kTRUE;
-    //printf("different\n");
-  }
-  return kFALSE;
-}
diff --git a/TRD/qaRec/AliTRDalignmentTask.h b/TRD/qaRec/AliTRDalignmentTask.h
deleted file mode 100644 (file)
index 568894a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef ALITRDALIGNMENTTASK_H
-#define ALITRDALIGNMENTTASK_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  TRD Alignment QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class TH1;
-class TTree;
-class AliTrackPoint;
-class AliTrackPointArray;
-class AliTRDtrackV1;
-class AliTRDalignmentTask : public AliTRDrecoTask
-{
-public:
-
-  AliTRDalignmentTask();
-  virtual ~AliTRDalignmentTask();
-  
-  void    CreateOutputObjects();
-  void    Exec(Option_t *opt);
-  TH1*    PlotTrackPoints(const AliTRDtrackV1 *track=0x0);
-  Bool_t  PostProcess() { return kTRUE;}
-  
-private:
-  Bool_t IsIdenticalWithOneOf(AliTrackPoint * const p, AliTrackPointArray *parray, int nmax);
-  AliTRDalignmentTask(const AliTRDalignmentTask&);
-  AliTRDalignmentTask& operator=(const AliTRDalignmentTask&);
-
-private:
-  TTree          *fTree;    //! pointer to the output TTree 
-  AliTrackPointArray *fArray; // pointer to the track points
-  ClassDef(AliTRDalignmentTask, 1) // tracking resolution task
-};
-#endif
diff --git a/TRD/qaRec/AliTRDcalibration.cxx b/TRD/qaRec/AliTRDcalibration.cxx
deleted file mode 100644 (file)
index 82a7907..0000000
+++ /dev/null
@@ -1,1373 +0,0 @@
-
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/////////////////////////////////////////////////////////////////////////////////
-//                                                                             
-// AliTRDcalibration                                                            
-//                                                                             
-// Task to run the calibration offline.
-// Author:
-//   R. Bailhache (rbailhache@ikf.uni-frankfurt.de, R.Bailhache@gsi.de)
-//           
-//////////////////////////////////////////////////////////////////////////////////
-
-
-#include "Riostream.h"
-#include "TChain.h"
-#include "TTree.h"
-#include "TProfile2D.h"
-#include "TH2I.h"
-#include "TH1F.h"
-#include "TList.h"
-#include "TMath.h"
-#include "TCanvas.h"
-#include "TObject.h"
-#include "TFile.h"
-#include "TObjArray.h"
-#include "TGraph.h"
-#include "TStyle.h"
-#include "TLegend.h"
-#include "TGraphErrors.h"
-
-#include "AliTRDrecoTask.h"
-#include "AliAnalysisManager.h"
-
-#include "AliESDInputHandler.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDcluster.h"
-#include "info/AliTRDtrackInfo.h"
-#include "AliTRDcalibDB.h"
-
-#include "AliTRDCalibraFillHisto.h"
-#include "AliTRDCalibraFit.h"
-#include "AliTRDCalibraVdriftLinearFit.h"
-#include "AliTRDCalibraMode.h"
-#include "AliTRDCalibraVector.h"
-#include "./Cal/AliTRDCalPad.h"
-#include "./Cal/AliTRDCalDet.h"
-#include "AliCDBMetaData.h"
-#include "AliCDBManager.h"
-#include "AliCDBStorage.h"
-
-#include "AliLog.h"
-
-#include "AliTRDcalibration.h"
-
-
-ClassImp(AliTRDcalibration)
-
-//________________________________________________________________________
-AliTRDcalibration::AliTRDcalibration() 
-  :AliTRDrecoTask("Calibration", "Calibration on tracks")
-  ,fTrackInfo(0)
-  ,ftrdTrack(0)
-  ,fcl(0)
-  ,fTRDCalibraFillHisto(0)
-  ,fNbTRDTrack(0)
-  ,fNbTRDTrackOffline(0)
-  ,fNbTRDTrackStandalone(0)
-  ,fNbTRDTracklet(0)
-  ,fNbTRDTrackletOffline(0)
-  ,fNbTRDTrackletStandalone(0)
-  ,fNbTimeBin(0x0)
-  ,fNbTimeBinOffline(0x0)
-  ,fNbTimeBinStandalone(0x0)
-  ,fNbClusters(0)
-  ,fNbClustersOffline(0)
-  ,fNbClustersStandalone(0)
-  ,fPHSum(0)
-  ,fCHSum(0)
-  ,fDetSum(0)
-  ,fDetSumVector(0)
-  ,fHisto2d(kTRUE)
-  ,fVector2d(kFALSE)
-  ,fVdriftLinear(kTRUE)
-  ,flow(0)
-  ,fhigh(30)
-  ,fNbTimeBins(30)
-  ,ffillZero(kFALSE)
-  ,fnormalizeNbOfCluster(kFALSE)
-  ,fmaxCluster(0)
-  ,fOfflineTracks(kFALSE)
-  ,fStandaloneTracks(kFALSE)
-  ,fCompressPerDetector(kFALSE)
-  ,fRunNumber(0)
-  ,fkNameDirectory("local://.")
-  ,fGraph(0x0)
-  ,fPostProcess(kFALSE)
-{
-  // Constructor
-  
-  fNRefFigures = 17;
-
-  for(Int_t k = 0; k < 3; k++)
-    {
-      fNz[k]=0;
-      fNrphi[k]=0;
-    }
-
-}  
-//________________________________________________________________________
-AliTRDcalibration::~AliTRDcalibration() 
-{
-  // Default destructor
-
-  if(fNbTRDTrack) delete fNbTRDTrack;
-  if(fNbTRDTrackOffline) delete fNbTRDTrackOffline;
-  if(fNbTRDTrackStandalone) delete fNbTRDTrackStandalone;
-  if(fNbTRDTracklet) delete fNbTRDTracklet;
-  if(fNbTRDTrackletOffline) delete fNbTRDTrackletOffline;
-  if(fNbTRDTrackletStandalone) delete fNbTRDTrackletStandalone;
-  if(fNbTimeBin) delete fNbTimeBin;
-  if(fNbTimeBinOffline) delete fNbTimeBinOffline;
-  if(fNbTimeBinStandalone) delete fNbTimeBinStandalone;
-  if(fNbClusters) delete fNbClusters;
-  if(fNbClustersOffline) delete fNbClustersOffline;
-  if(fNbClustersStandalone) delete fNbClustersStandalone;
-  if(fPHSum) delete fPHSum;
-  if(fCHSum) delete fCHSum;
-  if(fDetSum) delete fDetSum;
-  if(fDetSumVector) delete fDetSumVector;
-  if(fkNameDirectory) delete fkNameDirectory;
-  if(fGraph){fGraph->Delete(); delete fGraph;}
-
-}
-//________________________________________________________________________
-void AliTRDcalibration::CreateOutputObjects() 
-{
-  // Create output objects
-
-  OpenFile(0, "RECREATE");
-  
-  // Number of time bins
-  AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
-  fNbTimeBins = cal->GetNumberOfTimeBins();
-  
-  // instance calibration: what to calibrate
-  fTRDCalibraFillHisto = AliTRDCalibraFillHisto::Instance();
-  fTRDCalibraFillHisto->SetHisto2d(fHisto2d); // choose to use histograms
-  fTRDCalibraFillHisto->SetVector2d(fVector2d); // choose to use vectors
-  fTRDCalibraFillHisto->SetCH2dOn();  // choose to calibrate the gain
-  fTRDCalibraFillHisto->SetPH2dOn();  // choose to calibrate the drift velocity
-  fTRDCalibraFillHisto->SetPRF2dOn(); // choose to look at the PRF
-  fTRDCalibraFillHisto->SetLinearFitterOn(fVdriftLinear); // Other possibility vdrift VDRIFT
-  fTRDCalibraFillHisto->SetLinearFitterDebugOn(fVdriftLinear); // Other possibility vdrift
-
-  // segmentation (should be per default the max and add at the end)
-  for(Int_t k = 0; k < 3; k++){
-    if(((fNz[k] != 10) && (fNrphi[k] != 10)) && ((fNz[k] != 100) && (fNrphi[k] != 100))) {
-      fTRDCalibraFillHisto->SetNz(k,fNz[k]);                                    // Mode calibration
-      fTRDCalibraFillHisto->SetNrphi(k,fNrphi[k]);                             // Mode calibration
-    }
-    else {
-      if((fNz[k] == 100) && (fNrphi[k] == 100))  {
-       if(fVector2d) AliInfo("The mode all together is not supported by the vector method");
-       fTRDCalibraFillHisto->SetAllTogether(k);
-      }
-      if((fNz[k] == 10) && (fNrphi[k] == 10))  {
-       if(fVector2d) AliInfo("The mode per supermodule is not supported by the vector method");
-       fTRDCalibraFillHisto->SetPerSuperModule(k);
-      }
-    }
-  }
-
-  // Debug level
-  fTRDCalibraFillHisto->SetDebugLevel(DebugLevel()); //debug stuff
-
-  // Init the stuff
-  fTRDCalibraFillHisto->Init2Dhistos(); // initialise the histos
-
-  // cuts
-  fTRDCalibraFillHisto->SetNumberClusters(flow); // At least flow clusters
-  fTRDCalibraFillHisto->SetNumberClustersf(fhigh); // The more fhigh clusters
-  fTRDCalibraFillHisto->SetFillWithZero(ffillZero); // Fill zeros
-  fTRDCalibraFillHisto->SetNormalizeNbOfCluster(fnormalizeNbOfCluster); // For iterations
-
-  // Add them to the container
-  fContainer = new TObjArray();
-  if(fHisto2d) {
-    fContainer->Add(fTRDCalibraFillHisto->GetCH2d()); //TH2I
-    fContainer->Add(fTRDCalibraFillHisto->GetPH2d()); //TProfile2D
-    fContainer->Add(fTRDCalibraFillHisto->GetPRF2d()); //TProfile2D
-  }
-  if(fVdriftLinear) fContainer->Add(fTRDCalibraFillHisto->GetVdriftLinearFit()); // Other drift velocity 
-  if(fVector2d) fContainer->Add(fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector
-      
-  if(DebugLevel()) {
-    
-    // Init the debug histos
-    fNbTRDTrack = new TH1F("TRDTrack","TRDTrack",500,0,500);
-    fNbTRDTrack->Sumw2();
-    fNbTRDTrackOffline = new TH1F("TRDTrackOffline","TRDTrackOffline",500,0,500);
-    fNbTRDTrackOffline->Sumw2();
-    fNbTRDTrackStandalone = new TH1F("TRDTrackStandalone","TRDTrackStandalone",500,0,500);
-    fNbTRDTrackStandalone->Sumw2();
-    //
-    fNbTRDTracklet = new TH1F("TRDTracklet","TRDTracklet",540,0.,540.);
-    fNbTRDTracklet->Sumw2();
-    fNbTRDTrackletOffline = new TH1F("TRDTrackletOffline","TRDTrackletOffline",540,0.,540.);
-    fNbTRDTrackletOffline->Sumw2();
-    fNbTRDTrackletStandalone = new TH1F("TRDTrackletStandalone","TRDTrackletStandalone",540,0.,540.);
-    fNbTRDTrackletStandalone->Sumw2();
-    //
-    fNbTimeBin = new TH1F("TimeBin","TimeBin",35,0,35);
-    fNbTimeBin->Sumw2();
-    fNbTimeBinOffline = new TH1F("TimeBinOffline","TimeBinOffline",35,0,35);
-    fNbTimeBinOffline->Sumw2();
-    fNbTimeBinStandalone = new TH1F("TimeBinStandalone","TimeBinStandalone",35,0,35);
-    fNbTimeBinStandalone->Sumw2();
-    //
-    fNbClusters = new TH1F("NbClusters","",35,0,35);
-    fNbClusters->Sumw2();
-    fNbClustersOffline = new TH1F("NbClustersOffline","",35,0,35);
-    fNbClustersOffline->Sumw2();
-    fNbClustersStandalone = new TH1F("NbClustersStandalone","",35,0,35);
-    fNbClustersStandalone->Sumw2();
-    //
-    fPHSum = new TProfile2D("PH2dSum","Nz0Nrphi0"
-                           ,fNbTimeBins,-0.05,(Double_t)(fNbTimeBins/10.0)-0.05
-                           ,540,0,540);
-    fPHSum->SetYTitle("Det/pad groups");
-    fPHSum->SetXTitle("time [#mus]");
-    fPHSum->SetZTitle("<PH> [a.u.]");
-    fPHSum->SetStats(0);
-    //
-    fCHSum = new TH2I("CH2dSum","Nz0Nrphi0",100,0,300,540,0,540);
-    fCHSum->SetYTitle("Det/pad groups");
-    fCHSum->SetXTitle("charge deposit [a.u]");
-    fCHSum->SetZTitle("counts");
-    fCHSum->SetStats(0);
-    fCHSum->Sumw2();
-    
-    // Add them
-    fContainer->Add(fNbTRDTrack);
-    fContainer->Add(fNbTRDTrackOffline);
-    fContainer->Add(fNbTRDTrackStandalone);
-    fContainer->Add(fNbTRDTracklet);
-    fContainer->Add(fNbTRDTrackletOffline);
-    fContainer->Add(fNbTRDTrackletStandalone);
-    fContainer->Add(fNbTimeBin);
-    fContainer->Add(fNbTimeBinOffline);
-    fContainer->Add(fNbTimeBinStandalone);
-    fContainer->Add(fNbClusters);
-    fContainer->Add(fNbClustersOffline);
-    fContainer->Add(fNbClustersStandalone);
-    fContainer->Add(fPHSum);
-    fContainer->Add(fCHSum);
-
-  }
-
-}
-
-//________________________________________________________________________
-void AliTRDcalibration::Exec(Option_t *) 
-{
-  //
-  // Execute function where the reference data are filled
-  //
-
-  if(!fTracks) return;
-  
-  // In total
-  Int_t nbTrdTracks = 0;
-  // standalone
-  Int_t nbTrdTracksStandalone = 0;
-  // offline
-  Int_t nbTrdTracksOffline = 0;
-  
-
-  //
-  // Loop on track in the event
-  //
-  //printf("Total of %d\n",fTracks->GetEntriesFast());
-  for(Int_t itrk=0; itrk < fTracks->GetEntriesFast(); itrk++){
-    
-    //printf("itrk %d\n",itrk);
-
-    fTrackInfo = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
-    ftrdTrack = fTrackInfo->GetTrack();
-    if(!ftrdTrack) continue;
-
-    nbTrdTracks++;
-  
-    fTRDCalibraFillHisto->UpdateHistogramsV1(ftrdTrack);
-
-    if(DebugLevel()) {
-      
-      Bool_t standalonetracklet = kFALSE;  
-      const AliTRDseedV1 *tracklet = 0x0;
-      //
-      // Loop on tracklet in the event
-      //
-      for(Int_t itr = 0; itr < 6; itr++){
-       //printf("itr %d\n",itr);
-       if(!(tracklet = ftrdTrack->GetTracklet(itr))) continue;
-       if(!tracklet->IsOK()) continue;
-       // standalone
-       if(tracklet->IsStandAlone()) standalonetracklet = kTRUE;
-       Int_t nbclusters = 0;
-       // For PH
-       Double_t phtb[AliTRDseedV1::kNtb];
-       memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
-       // For CH
-       Double_t sum = 0.0;
-       // normalisation
-       Float_t normalisation = 6.67;
-       Int_t detector = 0;
-       Int_t crossrow = 0;
-       for(int ic=0; ic<AliTRDseedV1::kNtb; ic++){
-         // Check no shared clusters
-         for(int icc=AliTRDseedV1::kNtb; icc<AliTRDseedV1::kNclusters; icc++){
-           if((fcl = tracklet->GetClusters(icc)))  crossrow = 1;
-         }
-         if(!(fcl = tracklet->GetClusters(ic))) continue;
-         nbclusters++;
-         Int_t time = fcl->GetPadTime();
-         Float_t ch =  tracklet->GetdQdl(ic);
-         Float_t qcl = TMath::Abs(fcl->GetQ());
-         detector = fcl->GetDetector();          
-         if((time>-1) && (time<fNbTimeBins)) phtb[time]=qcl;
-         sum += ch/normalisation;
-         fNbTimeBin->Fill(time);
-         if(tracklet->IsStandAlone()) fNbTimeBinStandalone->Fill(time);
-         else fNbTimeBinOffline->Fill(time);
-       }
-
-       fNbTRDTracklet->Fill(detector);
-       if(tracklet->IsStandAlone()) fNbTRDTrackletStandalone->Fill(detector);
-       else fNbTRDTrackletOffline->Fill(detector);
-       
-       fNbClusters->Fill(nbclusters);
-       if(tracklet->IsStandAlone())  fNbClustersStandalone->Fill(nbclusters);
-       else  fNbClustersOffline->Fill(nbclusters);
-       
-       if((nbclusters > flow) && (nbclusters < fhigh)){
-         fCHSum->Fill(sum/20.0,0.0);
-         for(int ic=0; ic<fNbTimeBins; ic++){
-           //printf("ic %d and time %f and cluster %f \n",ic,(Double_t)(ic/10.0),(Double_t)phtb[ic]);
-           if(ffillZero) fPHSum->Fill((Double_t)(ic/10.0),0.0,(Double_t)phtb[ic]);
-           else {
-             if(phtb[ic] > 0.0) fPHSum->Fill((Double_t)(ic/10.0),0.0,(Double_t)phtb[ic]);
-           }
-         }
-       }
-      }
-    
-    if(standalonetracklet) nbTrdTracksStandalone++;
-    else nbTrdTracksOffline++;
-    
-    }
-    
-  }
-  
-  if(DebugLevel()) {
-    
-    //Fill Histos
-    fNbTRDTrack->Fill(nbTrdTracks);
-    fNbTRDTrackStandalone->Fill(nbTrdTracksStandalone);
-    fNbTRDTrackOffline->Fill(nbTrdTracksOffline);
-    
-  }
-
-  //printf("Nbof tracks %d\n",nbTrdTracks);
-  
-  TFile *file = TFile::Open("test.root","RECREATE");
-  fContainer->Write();
-  file->Close();
-
-  // Post output data
-  PostData(0, fContainer);
-
-  //printf("post container\n");
-  
-}      
-//________________________________________________________________________
-void AliTRDcalibration::Terminate(Option_t *) 
-{
-  // Draw result to the screen
-  // Called once at the end of the query
-
-  //printf("terminate\n");
-
-  if(fTRDCalibraFillHisto) fTRDCalibraFillHisto->DestroyDebugStreamer();
-}
-//________________________________________________________
-Bool_t AliTRDcalibration::GetRefFigure(Int_t ifig)
-{
-  //
-  // Draw filled histos
-  //
-  
-  gStyle->SetPalette(1);
-  gStyle->SetOptStat(1111);
-  gStyle->SetPadBorderMode(0);
-  gStyle->SetCanvasColor(10);
-  gStyle->SetPadLeftMargin(0.13);
-  gStyle->SetPadRightMargin(0.13);
-
-  if(!fContainer) return kFALSE;
-  
-  switch(ifig){
-  case kNbTrack:{
-    TCanvas *c0 = new TCanvas("c0","c0",10,10,510,510);
-    TLegend *legNbTrack = new TLegend(.7, .7, .98, .98);
-    legNbTrack->SetBorderSize(1);
-    TH1F *h  = 0x0;
-    TH1F *ho = 0x0;
-    TH1F *hs = 0x0;
-    if(!(h = (TH1F *)fContainer->FindObject("TRDTrack"))) break;
-    if(!(ho = (TH1F *)fContainer->FindObject("TRDTrackOffline"))) break;
-    if(!(hs = (TH1F *)fContainer->FindObject("TRDTrackStandalone"))) break;
-    c0->cd();
-    //gPad->SetLogy();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    h->Draw();
-    ho->Draw("same");
-    hs->Draw("same");
-    legNbTrack->AddEntry(h, "all", "p");
-    legNbTrack->AddEntry(ho, "offline", "p");
-    legNbTrack->AddEntry(hs, "standalone", "p");
-    legNbTrack->Draw("same");
-    return kTRUE;
-  }
-  case kNbTracklet:{
-    TLegend *legNbTracklet = new TLegend(.7, .7, .98, .98);
-    legNbTracklet->SetBorderSize(1);
-    TH1F *h = 0x0;
-    TH1F *ho = 0x0;
-    TH1F *hs = 0x0;
-    if(!(h = (TH1F *)fContainer->FindObject("TRDTracklet"))) break;
-    if(!(ho = (TH1F *)fContainer->FindObject("TRDTrackletOffline"))) break;
-    if(!(hs = (TH1F *)fContainer->FindObject("TRDTrackletStandalone"))) break;
-    h->Draw();
-    ho->Draw("same");
-    hs->Draw("same");
-    legNbTracklet->AddEntry(h, "all", "p");
-    legNbTracklet->AddEntry(ho, "offline", "p");
-    legNbTracklet->AddEntry(hs, "standalone", "p");
-    legNbTracklet->Draw("same");
-    gPad->SetLogy();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kNbTimeBin:{
-    TLegend *legNbTimeBin = new TLegend(.7, .7, .98, .98);
-    legNbTimeBin->SetBorderSize(1);
-    TH1F *h = 0x0;
-    TH1F *ho = 0x0;
-    TH1F *hs = 0x0;
-    if(!(h = (TH1F *)fContainer->FindObject("TimeBin"))) break;
-    if(!(ho = (TH1F *)fContainer->FindObject("TimeBinOffline"))) break;
-    if(!(hs = (TH1F *)fContainer->FindObject("TimeBinStandalone"))) break;
-    h->Draw();
-    ho->Draw("same");
-    hs->Draw("same");
-    legNbTimeBin->AddEntry(h, "all", "p");
-    legNbTimeBin->AddEntry(ho, "offline", "p");
-    legNbTimeBin->AddEntry(hs, "standalone", "p");
-    legNbTimeBin->Draw("same");
-    //gPad->SetLogy();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kNbClusters:{
-    TLegend *legNbClusters = new TLegend(.7, .7, .98, .98);
-    legNbClusters->SetBorderSize(1);
-    TH1F *h = 0x0;
-    TH1F *ho = 0x0;
-    TH1F *hs = 0x0;
-    if(!(h = (TH1F *)fContainer->FindObject("NbClusters"))) break;
-    if(!(ho = (TH1F *)fContainer->FindObject("NbClustersOffline"))) break;
-    if(!(hs = (TH1F *)fContainer->FindObject("NbClustersStandalone"))) break;
-    h->Draw();
-    ho->Draw("same");
-    hs->Draw("same");
-    legNbClusters->AddEntry(h, "all", "p");
-    legNbClusters->AddEntry(ho, "offline", "p");
-    legNbClusters->AddEntry(hs, "standalone", "p");
-    legNbClusters->Draw("same");
-    gPad->SetLogy();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kPHSum:{
-    TProfile2D *h = 0x0;
-    if(!(h = (TProfile2D *)fContainer->FindObject("PH2dSum"))) break;
-    TH1D *projh = h->ProjectionX("projh",1,1,"e");
-    projh->Draw();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kCHSum:{
-    TH2I *h = 0x0;
-    if(!(h = (TH2I *)fContainer->FindObject("CH2dSum"))) break;
-    TH1D *projh = h->ProjectionX("projhh",1,1,"e");
-    projh->Draw();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kPH2D:{
-    if(!fHisto2d) {
-      AliInfo("Histo was not filled!");
-      break;
-    }
-    TProfile2D *h = 0x0;
-    if(!(h = (TProfile2D *)fContainer->FindObject("PH2d"))) break;
-    h->Draw("lego");
-    return kTRUE;
-  }
-  case kCH2D:{
-    if(!fHisto2d) {
-      AliInfo("Histo was not filled!");
-      break;
-    }
-    TH2I *h = 0x0;
-    if(!(h = (TH2I *)fContainer->FindObject("CH2d"))) break;
-    h->Draw("lego");
-    return kTRUE;
-  }
-  case kPRF2D:{
-    if(!fHisto2d) {
-      AliInfo("Histo was not filled!");
-      break;
-    }
-    TProfile2D *h = 0x0;
-    if(!(h = (TProfile2D *)fContainer->FindObject("PRF2d"))) break;
-    h->Draw("lego");
-    return kTRUE;
-  }
-  case kPH2DVector:{
-    if(!fVector2d) {
-      AliInfo("vector was not filled!");
-      break;
-    }
-    AliTRDCalibraVector *v = 0x0;
-    TGraphErrors *vdet = 0x0; 
-    if(!(v = (AliTRDCalibraVector *)fContainer->FindObject("AliTRDCalibraVector"))) break;
-    Int_t detectormax = -1;
-    Int_t groupmax    = -1;
-    if(!v->FindTheMaxEntries(1,detectormax,groupmax)) break;
-    if(!(vdet = v->ConvertVectorPHTGraphErrors((Int_t)detectormax,groupmax,"plotPH2dVector"))) break;
-    Int_t nbeentries = 0;
-    TH1F *ko = v->CorrectTheError(vdet,nbeentries);
-    ko->Draw();
-    AliInfo(Form("There are %d entries in the detector %d and group %d",nbeentries,detectormax,groupmax));
-    return kTRUE;
-  }
-case kCH2DVector:{
-    if(!fVector2d) {
-      AliInfo("vector was not filled!");
-      break;
-    }
-    AliTRDCalibraVector *v = 0x0;
-    TH1F *vdet = 0x0; 
-    if(!(v = (AliTRDCalibraVector *)fContainer->FindObject("AliTRDCalibraVector"))) break;
-    Int_t detectormax = -1;
-    Int_t groupmax    = -1;
-    if(!v->FindTheMaxEntries(0,detectormax,groupmax)) break;
-    if(!(vdet = v->ConvertVectorCHHisto((Int_t)detectormax,groupmax,"plotCH2dVector"))) break;
-    vdet->Draw();
-    AliInfo(Form("The detectormax and groupmax are %d and %d",detectormax,groupmax));
-    return kTRUE;
-  }
-  case kPRF2DVector:{
-    if(!fVector2d) {
-      AliInfo("vector was not filled!");
-      break;
-    }
-    AliTRDCalibraVector *v = 0x0;
-    TGraphErrors *vdet = 0x0; 
-    if(!(v = (AliTRDCalibraVector *)fContainer->FindObject("AliTRDCalibraVector"))) break;
-    Int_t detectormax  = -1;
-    Int_t groupmax     = -1;
-    Int_t nbeentries   = 0;
-    if(!v->FindTheMaxEntries(2,detectormax,groupmax)) break;
-    if(!(vdet = v->ConvertVectorPRFTGraphErrors((Int_t)detectormax,groupmax,"plotPRF2dVector"))) break;
-    TH1F *ko = v->CorrectTheError(vdet,nbeentries);
-    ko->Draw();
-    AliInfo(Form("The detectormax and groupmax are %d and %d",detectormax,groupmax));
-    return kTRUE;
-  }
-  case kLinearFitter:{
-    if(!fVdriftLinear) {
-      AliInfo("vdrift linear was not filled!");
-      break;
-    }
-    AliTRDCalibraVdriftLinearFit *h = 0x0;
-    TH2S *hdetector = 0x0; 
-    if(!(h = (AliTRDCalibraVdriftLinearFit *)fContainer->FindObject("AliTRDCalibraVdriftLinearFit"))) break;
-    Double_t entries[540];
-    for(Int_t k = 0; k < 540; k++){
-      entries[k] = 0.0;
-      hdetector = 0x0;
-      if(!(hdetector = (TH2S *)h->GetLinearFitterHisto(k,kFALSE))) continue;
-      entries[k] = hdetector->GetEntries();
-    }
-    Double_t max = -10.0;
-    Double_t detectormax = -1;
-    for(Int_t k = 0; k < 540; k++){
-      if(entries[k] > max) {
-       max = entries[k];
-       detectormax = k;
-      }
-    }
-    hdetector = 0x0;
-    if((TMath::Abs(max) <= 0.001) || (detectormax <0.0) || (detectormax >=540.0)) break;
-    if(!(hdetector = (TH2S *)h->GetLinearFitterHisto((Int_t)detectormax,kFALSE))) break;
-    AliInfo(Form("The detector with the maximum of entries is %d",detectormax));
-    hdetector->Draw();
-    return kTRUE;
-  }
-  case kGainFactor:{
-    if(!fPostProcess){
-      if(!PostProcess()) break;
-    }
-    TGraph *fgain = (TGraph *) fGraph->At(0);
-    if(!fgain) break;
-    fgain->Draw("ALP");
-    return kTRUE;
-  }
-  case kVdriftT0Factor:{
-    if(!fPostProcess){
-      if(!PostProcess()) break;
-    }
-    TCanvas *c = new TCanvas("c","c",10,10,510,510);
-    c->Divide(2,1);
-    TGraph *fvd = (TGraph *) fGraph->At(1);
-    if(fvd){
-      c->cd(1);
-      fvd->Draw("ALP");
-    } 
-    TGraph *ft0 = (TGraph *) fGraph->At(2);
-    if(ft0){
-      c->cd(2);
-      ft0->Draw("ALP");
-    } 
-    return kTRUE;
-  }
-  case kVdriftLorentzAngleFactor:{
-    if(!fVdriftLinear) {
-      AliInfo("vdrift linear was not filled!");
-      break;
-    }
-    if(!fPostProcess){
-      if(!PostProcess()) break;
-    }
-    TCanvas *c = new TCanvas("c","c",10,10,510,510);
-    c->Divide(2,1);
-    TGraph *fvdl = (TGraph *) fGraph->At(3);
-    if(fvdl){
-      c->cd(1);
-      fvdl->Draw("ALP");
-    } 
-    TGraph *flal = (TGraph *) fGraph->At(4);
-    if(flal){
-      c->cd(2);
-      flal->Draw("ALP");
-    } 
-    return kTRUE;
-  }
-  case kPRFFactor:{
-    if(!fPostProcess){
-      if(!PostProcess()) break;
-    }
-    TGraph *fprf = (TGraph *) fGraph->At(5);
-    if(!fprf) break;
-    fprf->Draw("ALP");
-    return kTRUE;
-  }
-  }
-  
-  return kFALSE;
-  
-}
-//________________________________________________________________________
-Bool_t AliTRDcalibration::PostProcess()
-{
-  // 
-  // Fit the filled histos
-  //
-
-  if(!fGraph){
-    fGraph = new TObjArray(6);
-    fGraph->SetOwner();
-  }
-  else {
-    delete fGraph;
-    PostProcess();
-  }
-
-  Bool_t storage[3] = {kFALSE,kFALSE,kFALSE};
-
-  // storage element
-  AliCDBManager *man = AliCDBManager::Instance();
-  man->SetDefaultStorage("local://$ALICE_ROOT");
-  AliCDBStorage* storLoc = man->GetStorage(fkNameDirectory);
-  if (!storLoc)
-    return kFALSE;
-  man->SetRun(fRunNumber);
-
-  // MetaData
-  AliCDBMetaData mdDet; 
-  mdDet.SetObjectClassName("AliTRDCalDet");
-  AliCDBMetaData mdPad; 
-  mdPad.SetObjectClassName("AliTRDCalPad");
-  
-  // Objects for fitting
-  AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
-  calibra->SetDebugLevel(2); // 0 rien, 1 fitvoir, 2 debug files, 3 one detector  
-  
-  // Take the stuff
-  if (!fContainer) {
-    Printf("ERROR: list not available");
-    return kFALSE;
-  }
-
-  if(fHisto2d && fVector2d) AliInfo("We will only look at histos. Set fHisto2d off if you don't want");
-  AliTRDCalibraVector *calibraVector = 0x0;
-  if(fVector2d) calibraVector = (AliTRDCalibraVector *) fContainer->FindObject("CalibraVector");
-  //
-  // GAIN TH2I
-  //
-  Bool_t pass = kFALSE; 
-  AliTRDCalibraVector *vvect = 0x0;
-  if(fHisto2d) {
-    TH2I *histogain = (TH2I *) fContainer->FindObject("CH2d");  
-    if(histogain) {
-      histogain->SetDirectory(0);
-      calibra->SetMinEntries(20); 
-      if(fCompressPerDetector){
-       if(AddStatsPerDetector(histogain)) pass = calibra->AnalyseCH(fCHSum);
-      }
-      else pass = calibra->AnalyseCH(histogain);
-    }
-  }
-  else {
-    if(fVector2d && calibraVector) {
-      calibra->SetMinEntries(20); 
-      if(fCompressPerDetector){
-       if(!(vvect = calibraVector->AddStatsPerDetectorCH())) return kFALSE;
-               pass = calibra->AnalyseCH(vvect);
-      }
-      else pass = calibra->AnalyseCH(calibraVector);
-    }
-  }
-  
-  if(pass)
-    {
-      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();  //Number of fits
-      Int_t nbE   = calibra->GetNumberEnt();  //Number of detector mit entries
-      // enough statistics
-      if ((nbtg >                  0) && 
-         (nbfit        >= 0.001*nbE))
-       {
-         // create the cal objects
-         calibra->PutMeanValueOtherVectorFit(1,kTRUE); 
-         TObjArray object           = calibra->GetVectorFit();
-         AliTRDCalDet *objgaindet   = calibra->CreateDetObjectGain(&object);
-         TObject *objgainpad        = calibra->CreatePadObjectGain();
-         // store
-         AliCDBId id1("TRD/Calib/ChamberGainFactor",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objgaindet, id1, &mdDet); 
-         AliCDBId id2("TRD/Calib/LocalGainFactor",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objgainpad, id2, &mdPad);
-         storage[0] = kTRUE;
-         // Make graph
-         TGraph *graph = 0x0;
-         if(FillGraphIndex(&object,graph)){ 
-           fGraph->AddAt(graph,0);
-         }
-       }//if(enough statistics?)
-      calibra->ResetVectorFit();
-    }
-  else return kFALSE;
-  
-  //
-  // VDRIFT average pulse height
-  //
-  pass = kFALSE; 
-  if(fHisto2d) {
-    TProfile2D *histodriftvelocity = (TProfile2D *) fContainer->FindObject("PH2d");  
-    if(histodriftvelocity) {
-      histodriftvelocity->SetDirectory(0);  
-      calibra->SetMinEntries(20*20);  
-      if(fCompressPerDetector){
-       if(AddStatsPerDetector(histodriftvelocity,1)) {
-         pass = calibra->AnalysePH(fDetSumVector);
-       }
-      }
-      else pass = calibra->AnalysePH(histodriftvelocity);
-    }
-  }
-  else {
-    if(fVector2d && calibraVector) {
-      calibra->SetMinEntries(20*20);  
-      if(fCompressPerDetector){
-       if(!(vvect = calibraVector->AddStatsPerDetectorPH())) return kFALSE;
-               pass = calibra->AnalysePH(vvect);
-      }
-      else pass = calibra->AnalysePH(calibraVector);  
-    }
-  }
-
-  if(pass) {
-    Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
-      + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
-    Int_t nbfit  = calibra->GetNumberFit();
-    Int_t nbE    = calibra->GetNumberEnt();
-    // enough statistics
-    if ((nbtg >                  0) && 
-       (nbfit        >= 0.001*nbE))
-      {
-       // create the cal objects
-       calibra->PutMeanValueOtherVectorFit(1,kTRUE);
-       calibra->PutMeanValueOtherVectorFit2(1,kTRUE); 
-       TObjArray object  = calibra->GetVectorFit();
-       AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
-       TObject *objdriftvelocitypad      = calibra->CreatePadObjectVdrift();
-       TObjArray objectt          = calibra->GetVectorFit2();
-       AliTRDCalDet *objtime0det  = calibra->CreateDetObjectT0(&object,kTRUE);
-       TObject *objtime0pad       = calibra->CreatePadObjectT0();
-       // store
-       AliCDBId id1("TRD/Calib/ChamberVdrift",fRunNumber, AliCDBRunRange::Infinity()); 
-       storLoc->Put((TObject *)objdriftvelocitydet, id1, &mdDet); 
-       AliCDBId id2("TRD/Calib/LocalVdrift",fRunNumber, AliCDBRunRange::Infinity()); 
-       storLoc->Put((TObject *)objdriftvelocitypad, id2, &mdPad); 
-       //
-       AliCDBId idd1("TRD/Calib/ChamberT0",fRunNumber, AliCDBRunRange::Infinity()); 
-       storLoc->Put((TObject *)objtime0det, idd1, &mdDet); 
-       AliCDBId idd2("TRD/Calib/LocalT0",fRunNumber, AliCDBRunRange::Infinity()); 
-       storLoc->Put((TObject *)objtime0pad, idd2, &mdPad); 
-       // Make graph
-       TGraph *graph = 0x0;
-       if(FillGraphIndex(&object,graph)){ 
-         fGraph->AddAt(graph,1);
-       }
-       TGraph *graphh = 0x0;
-       if(FillGraphIndex(&objectt,graphh)){ 
-         fGraph->AddAt(graphh,2);
-       }
-      }//if(enough statistics)
-    calibra->ResetVectorFit();
-  }
-  else return kFALSE;
-  
-  //
-  // PRF
-  //
-  pass = kFALSE; 
-  if(fHisto2d) {
-    TProfile2D *histoprf = (TProfile2D *) fContainer->FindObject("PRF2d");
-    if (histoprf) {
-      histoprf->SetDirectory(0);  
-      calibra->SetMinEntries(600); 
-      if(fCompressPerDetector){
-       if(AddStatsPerDetector(histoprf,2)) pass = calibra->AnalysePRFMarianFit(fDetSumVector);
-      }
-      else pass = calibra->AnalysePRFMarianFit(histoprf);
-    }
-  }
-  else {
-    if(fVector2d && calibraVector) {
-      calibra->SetMinEntries(600);  
-      if(fCompressPerDetector){
-       if(!(vvect =calibraVector->AddStatsPerDetectorPRF())) return kFALSE;
-       pass = calibra->AnalysePRFMarianFit(vvect);
-      }
-      else pass = calibra->AnalysePRFMarianFit(calibraVector);  
-    }
-  }
-  
-  if(pass){
-    Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
-      + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
-    Int_t nbfit        = calibra->GetNumberFit();
-    Int_t nbE          = calibra->GetNumberEnt();
-    // enough statistics
-    if ((nbtg >                  0) && 
-       (nbfit        >= 0.001*nbE)) {
-      TObjArray object            = calibra->GetVectorFit();
-      TObject *objPRFpad          = calibra->CreatePadObjectPRF(&object);
-      // store
-      AliCDBId id2("TRD/Calib/PRFWidth",fRunNumber, AliCDBRunRange::Infinity()); 
-      storLoc->Put((TObject *)objPRFpad, id2, &mdPad); 
-      // Make graph
-      TGraph *graph = 0x0;
-      if(FillGraphIndex(&object,graph)){ 
-       fGraph->AddAt(graph,5);
-      }
-    }
-    calibra->ResetVectorFit();
-  }
-  else return kFALSE;
-  
-  //
-  // VDRIFT linear fit 
-  //
-  AliTRDCalibraVdriftLinearFit *vlinearfit = (AliTRDCalibraVdriftLinearFit *) fContainer->FindObject("LinearVdriftFit"); 
-  if (vlinearfit) {
-    calibra->SetMinEntries(20*20);     
-    if(calibra->AnalyseLinearFitters(vlinearfit)) {
-      
-      Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
-       + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
-      Int_t nbfit  = calibra->GetNumberFit();
-      Int_t nbE    = calibra->GetNumberEnt();
-      // enough statistics
-      if ((nbtg >                  0) && 
-         (nbfit        >= 0.001*nbE))
-       {
-         // create the cal objects
-         calibra->PutMeanValueOtherVectorFit(1,kTRUE);
-         calibra->PutMeanValueOtherVectorFit2(1,kTRUE); 
-         TObjArray object  = calibra->GetVectorFit();
-         AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
-         TObject *objdriftvelocitypad      = calibra->CreatePadObjectVdrift();
-         TObjArray objectt          = calibra->GetVectorFit2();
-         AliTRDCalDet *objtime0det  = calibra->CreateDetObjectT0(&object,kTRUE);
-         TObject *objtime0pad       = calibra->CreatePadObjectT0();
-         // store dummy
-         AliCDBId id1("TRD/Calib/ChamberVdriftLinear",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objdriftvelocitydet, id1, &mdDet); 
-         AliCDBId id2("TRD/Calib/LocalVdriftLinear",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objdriftvelocitypad, id2, &mdPad); 
-         //
-         AliCDBId idd1("TRD/Calib/ChamberLorentzAngle",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objtime0det, idd1, &mdDet); 
-         AliCDBId idd2("TRD/Calib/LocalLorentzAngle",fRunNumber, AliCDBRunRange::Infinity()); 
-         storLoc->Put((TObject *)objtime0pad, idd2, &mdPad); 
-         // Make graph
-         TGraph *graph = 0x0;
-         if(FillGraphIndex(&object,graph)){ 
-           fGraph->AddAt(graph,3);
-         }
-         TGraph *graphh = 0x0;
-         if(FillGraphIndex(&objectt,graphh)){ 
-           fGraph->AddAt(graphh,4);
-         }
-       }//if(enough statistics)
-    }// if fit
-    calibra->ResetVectorFit();
-  }
-  else return kFALSE;
-  
-  fPostProcess = kTRUE;
-  
-  return kTRUE;
-  
-}
-
-//________________________________________________________________________
-Bool_t AliTRDcalibration::FillGraphIndex(const TObjArray *vectora,TGraph *graph) const
-{
-  //
-  // Fill one value (the first one) per detector
-  //
-
-  Int_t loop = (Int_t) vectora->GetEntriesFast();
-  if(loop != 540) {
-    AliInfo("The Vector Fit is not complete!");
-    return kFALSE;
-  }
-  
-  Double_t x[540];
-  Double_t y[540];
-  for (Int_t k = 0; k < loop; k++) {
-    if(!vectora->At(k)){
-      x[k] = -1.0;
-      y[k] = -1.0;
-      continue;
-    }
-    x[k]  = ((AliTRDCalibraFit::AliTRDFitInfo *) vectora->At(k))->GetDetector();
-    y[k]  = ((Float_t *)((AliTRDCalibraFit::AliTRDFitInfo *) vectora->At(k))->GetCoef())[0];
-  }
-
-  if(!graph) graph = new TGraph(540,&x[0],&y[0]);
-  else{ 
-    graph->~TGraph();
-    new(graph) TGraph(540,&x[0],&y[0]);
-  }
-
-  return kTRUE;
-
-}
-//________________________________________________________________________
-Bool_t AliTRDcalibration::AddStatsPerDetector(const TH2I *ch) 
-{
-  //
-  // Add statistic per detector
-  //
-  
-  AliTRDCalibraMode calibMode = AliTRDCalibraMode();
-  const char *name = ch->GetTitle();
-  if(!SetNzFromTObject(name,0,&calibMode)) return 0x0;
-  if(!SetNrphiFromTObject(name,0,&calibMode)) return 0x0;
-  if(((calibMode.GetNz(0) == 100) && (calibMode.GetNrphi(0) == 100)) || ((calibMode.GetNz(0) == 10) && (calibMode.GetNrphi(0) == 10))) return kFALSE;
-
-  Int_t    nybins  = ch->GetNbinsY();// groups number
-  Int_t    nxbins  = ch->GetNbinsX();// number of bins X
-  TAxis   *xaxis   = ch->GetXaxis();
-  Double_t lowedge  = xaxis->GetBinLowEdge(1);
-  Double_t upedge   = xaxis->GetBinUpEdge(nxbins);
-
-  // number per chamber 2
-  calibMode.ModePadCalibration(2,0);
-  calibMode.ModePadFragmentation(0,2,0,0);
-  calibMode.SetDetChamb2(0);
-  Int_t perChamber2 = (Int_t) calibMode.GetDetChamb2(0);
-
-  // number per other chamber
-  calibMode.ModePadCalibration(0,0);
-  calibMode.ModePadFragmentation(0,0,0,0);
-  calibMode.SetDetChamb0(0);
-  Int_t perChamber0 = (Int_t) calibMode.GetDetChamb0(0);
-
-  if(nybins != (6*18*perChamber2+6*4*18*perChamber0)) return kFALSE;
-
-  // Create Histo
-  TString nname((const char *)ch->GetName());
-  nname  += "PerDetector";
-  TString title("Nz");
-  title += 0;
-  title += "Nrphi";
-  title += 0;
-  if(!fCHSum) fCHSum = new TH2I((const char *)nname,(const char *)title
-                               ,nxbins,lowedge,upedge,540,0,540);
-  else{ 
-    fCHSum->~TH2I();
-    new(fCHSum) TH2I((const Char_t *) nname,(const char *)title
-                    ,nxbins,lowedge,upedge,540,0,540);
-  }
-  fCHSum->SetYTitle("Detector number");
-  fCHSum->SetXTitle("charge deposit [a.u]");
-  fCHSum->SetZTitle("counts");
-  fCHSum->SetStats(0);
-  fCHSum->Sumw2();
-
-  Int_t counter = 0;
-  
-  for(Int_t det = 0; det < 540; det++){
-
-    Int_t numberofgroup = 0;
-    if(AliTRDgeometry::GetStack(det) == 2) numberofgroup = perChamber2;
-    else numberofgroup = perChamber0;
-    TH1I *projch = (TH1I *) ch->ProjectionX("projch",counter+1,counter+numberofgroup,(Option_t *)"e");
-    projch->SetDirectory(0);
-       
-    for(Int_t nx = 0; nx <= nxbins; nx++) {
-      fCHSum->SetBinContent(nx,det+1,projch->GetBinContent(nx));
-      fCHSum->SetBinError(nx,det+1,projch->GetBinError(nx));
-    }
-
-    counter += numberofgroup;
-    
-    delete projch;
-
-  }
-
-  return kTRUE;
-
-}
-//_____________________________________________________________________________________________________________________
-Bool_t AliTRDcalibration::AddStatsPerDetector(const TProfile2D *ph,Int_t i)
-{
-  //
-  // Add statistic per detector
-  //
-
-  AliTRDCalibraMode calibMode = AliTRDCalibraMode();
-  const char *name = ph->GetTitle();
-  //printf("name %s\n",name);
-  if(!SetNzFromTObject(name,0,&calibMode)) return kFALSE;
-  if(!SetNrphiFromTObject(name,0,&calibMode)) return kFALSE;
-  if(((calibMode.GetNz(0) == 100) && (calibMode.GetNrphi(0) == 100)) || ((calibMode.GetNz(0) == 10) && (calibMode.GetNrphi(0) == 10))) return kFALSE;
-  //printf("Found mode Mz %d, Nrphi %d\n",calibMode.GetNz(0),calibMode.GetNrphi(0));  
-
-
-  Int_t    nybins  = ph->GetNbinsY();// groups number
-  Int_t    nxbins  = ph->GetNbinsX();// number of bins X
-  TAxis   *xaxis = ph->GetXaxis();
-  Double_t lowedge  = xaxis->GetBinLowEdge(1);
-  Double_t upedge   = xaxis->GetBinUpEdge(nxbins);
-
-  // number per chamber 2
-  calibMode.ModePadCalibration(2,0);
-  calibMode.ModePadFragmentation(0,2,0,0);
-  calibMode.SetDetChamb2(0);
-  Int_t perChamber2 = (Int_t) calibMode.GetDetChamb2(0);
-
-  // number per other chamber
-  calibMode.ModePadCalibration(0,0);
-  calibMode.ModePadFragmentation(0,0,0,0);
-  calibMode.SetDetChamb0(0);
-  Int_t perChamber0 = (Int_t) calibMode.GetDetChamb0(0);
-
-  if(nybins != (6*18*perChamber2+6*4*18*perChamber0)) return kFALSE;
-  
-  // Create calvector 
-  TString nbname((const char *)ph->GetName());
-  nbname  += "PerDetectorVector";
-  if(!fDetSumVector) fDetSumVector = new AliTRDCalibraVector();
-  else{ 
-    fDetSumVector->~AliTRDCalibraVector();
-    new(fDetSumVector) AliTRDCalibraVector();
-  }
-  if(i==1){
-    fDetSumVector->SetTimeMax(nxbins);
-  }
-  if(i==2){
-    fDetSumVector->SetNumberBinPRF(nxbins);
-    fDetSumVector->SetPRFRange(TMath::Abs(lowedge));
-  }
-  fDetSumVector->SetDetCha0(i,1);
-  fDetSumVector->SetDetCha2(i,1);
-  fDetSumVector->SetNzNrphi(i,0,0);
-  if(i==2) {
-    Int_t nbg = GetNumberOfGroupsPRF((const char *)name);
-    fDetSumVector->SetNbGroupPRF(nbg);
-  }
-
-  // Create Histo
-  TString nname((const char *)ph->GetName());
-  nname  += "PerDetector";
-  TString title("Nz");
-  title += 0;
-  title += "Nrphi";
-  title += 0;
-  if(!fDetSum) fDetSum = new TH2D((const char *)nname,(const Char_t *) title
-                               ,nxbins,lowedge,upedge,540,0,540);
-  else{ 
-    fDetSum->~TH2D();
-    new(fDetSum) TH2D((const Char_t *) nname,(const Char_t *) title
-                    ,nxbins,lowedge,upedge,540,0,540);
-  }
-  fDetSum->SetYTitle("Detector number");
-  fDetSum->SetXTitle(xaxis->GetTitle());
-  fDetSum->SetStats(0);
-  
-  Int_t counter = 0;
-
-  for(Int_t det = 0; det < 540; det++){
-
-    Int_t numberofgroup = 0;
-    if(AliTRDgeometry::GetStack(det) == 2) numberofgroup = perChamber2;
-    else numberofgroup = perChamber0;
-    
-    for(Int_t nx = 1; nx <= nxbins; nx++) {
-      
-      Double_t entries = 0.0;
-      Double_t sumw2 = 0.0;
-      Double_t sumw = 0.0;
-
-      for(Int_t k = counter+1; k <= (counter+numberofgroup); k++){
-       Int_t  binnumber = ph->GetBin(nx,k);
-       entries += ph->GetBinEntries(binnumber);
-       sumw2 += (ph->GetBinError(binnumber)*ph->GetBinError(binnumber)+ph->GetBinContent(binnumber)*ph->GetBinContent(binnumber))*ph->GetBinEntries(binnumber);
-       sumw += ph->GetBinContent(binnumber)*ph->GetBinEntries(binnumber);
-      }
-
-      Double_t mean = 0.0;
-      if(entries > 0.0) mean = sumw/entries;
-      Double_t squaremean = 0.0;
-      if(entries > 0.0) squaremean = sumw2/entries;
-      Double_t errorf = squaremean - mean*mean;
-      Double_t error = 0.0;
-      if(entries > 0.0) error = TMath::Sqrt(TMath::Abs(errorf)/entries);
-      
-      fDetSum->SetBinContent(nx,det+1,mean);
-      fDetSum->SetBinError(nx,det+1,error);
-
-      if(i==1) fDetSumVector->FillVectorPH(det,0,nx-1,(Int_t)entries,(Float_t)mean,(Float_t)squaremean);
-      if(i==2) fDetSumVector->FillVectorPRF(det,0,nx-1,(Int_t)entries,(Float_t)mean,(Float_t)squaremean);
-      
-    }
-    
-    counter += numberofgroup;
-
-  }
-
-  return kTRUE;
-
-  
-}
-//_____________________________________________________________________________
-Bool_t AliTRDcalibration::SetNrphiFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const
-{
-  //
-  // Set the granularity from object
-  //  
-  
-  const Char_t *patternrphi0 = "Nrphi0";
-  const Char_t *patternrphi1 = "Nrphi1";
-  const Char_t *patternrphi2 = "Nrphi2";
-  const Char_t *patternrphi3 = "Nrphi3";
-  const Char_t *patternrphi4 = "Nrphi4";
-  const Char_t *patternrphi5 = "Nrphi5";
-  const Char_t *patternrphi6 = "Nrphi6";
-
-  
-  const Char_t *patternrphi10 = "Nrphi10";
-  const Char_t *patternrphi100 = "Nrphi100";
-  const Char_t *patternz10 = "Nz10";
-  const Char_t *patternz100 = "Nz100";
-
-  // Nrphi mode
-  if ((strstr(name,patternrphi100)) && (strstr(name,patternz100))) {
-    calibMode->SetAllTogether(i);
-    return kTRUE;
-  }
-  if ((strstr(name,patternrphi10)) && (strstr(name,patternz10))) {
-    calibMode->SetPerSuperModule(i);
-    return kTRUE;
-  }
-  
-  if (strstr(name,patternrphi0)) {
-    calibMode->SetNrphi(i ,0);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi1)) {
-    calibMode->SetNrphi(i, 1);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi2)) {
-    calibMode->SetNrphi(i, 2);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi3)) {
-    calibMode->SetNrphi(i, 3);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi4)) {
-    calibMode->SetNrphi(i, 4);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi5)) {
-    calibMode->SetNrphi(i, 5);
-    return kTRUE;
-  }
-  if (strstr(name,patternrphi6)) {
-    calibMode->SetNrphi(i, 6);
-    return kTRUE;
-  }
-  
-  calibMode->SetNrphi(i ,0);
-  return kFALSE;
-  
-}
-//_____________________________________________________________________________
-Bool_t AliTRDcalibration::SetNzFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const
-{
-  //
-  // Set fNz[i] of the AliTRDCalibraFit::Instance()
-  // corresponding to the given TObject
-  //
-
-  // Some patterns
-  const Char_t *patternz0    = "Nz0";
-  const Char_t *patternz1    = "Nz1";
-  const Char_t *patternz2    = "Nz2";
-  const Char_t *patternz3    = "Nz3";
-  const Char_t *patternz4    = "Nz4";
-
-  const Char_t *patternrphi10 = "Nrphi10";
-  const Char_t *patternrphi100 = "Nrphi100";
-  const Char_t *patternz10 = "Nz10";
-  const Char_t *patternz100 = "Nz100";
-
-  if ((strstr(name,patternrphi100)) && (strstr(name,patternz100))) {
-    calibMode->SetAllTogether(i);
-    return kTRUE;
-  }
-  if ((strstr(name,patternrphi10)) && (strstr(name,patternz10))) {
-    calibMode->SetPerSuperModule(i);
-    return kTRUE;
-  }
-  if (strstr(name,patternz0)) {
-    calibMode->SetNz(i, 0);
-    return kTRUE;
-  }
-  if (strstr(name,patternz1)) {
-    calibMode->SetNz(i ,1);
-    return kTRUE;
-  }
-  if (strstr(name,patternz2)) {
-    calibMode->SetNz(i ,2);
-    return kTRUE;
-  }
-  if (strstr(name,patternz3)) {
-    calibMode->SetNz(i ,3);
-    return kTRUE;  
-  }
-  if (strstr(name,patternz4)) {
-    calibMode->SetNz(i ,4);
-    return kTRUE;
-  }
-  calibMode->SetNz(i ,0);
-  return kFALSE;
-}
-//____________________________________________________________________________________________________
-Int_t AliTRDcalibration::GetNumberOfGroupsPRF(const char* nametitle) const
-{
-  //
-  // Get numberofgroupsprf
-  //
-  
-  // Some patterns
-  const Char_t *pattern0 = "Ngp0";
-  const Char_t *pattern1 = "Ngp1";
-  const Char_t *pattern2 = "Ngp2";
-  const Char_t *pattern3 = "Ngp3";
-  const Char_t *pattern4 = "Ngp4";
-  const Char_t *pattern5 = "Ngp5";
-  const Char_t *pattern6 = "Ngp6";
-
-  // Nrphi mode
-  if (strstr(nametitle,pattern0)) {
-    return 0;
-  }
-  if (strstr(nametitle,pattern1)) {
-    return 1;
-  }
-  if (strstr(nametitle,pattern2)) {
-    return 2;
-  }
-  if (strstr(nametitle,pattern3)) {
-    return 3;
-  }
-  if (strstr(nametitle,pattern4)) {
-    return 4;
-  }
-  if (strstr(nametitle,pattern5)) {
-    return 5;
-  }
-  if (strstr(nametitle,pattern6)){
-    return 6;
-  }
-  else return -1;
-
-}
diff --git a/TRD/qaRec/AliTRDcalibration.h b/TRD/qaRec/AliTRDcalibration.h
deleted file mode 100644 (file)
index 0c24a2c..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef ALITRDCALIBRATION_H
-#define ALITRDCALIBRATION_H
-
-// macro for extremely simple analysis
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  TRD calibration class                                                    //
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
-
-#include "AliTRDrecoTask.h"
-
-class TList;
-class TObject;
-class TH1F;
-class TProfile2D;
-class TGraph;
-class TH2I;
-class TH2D;
-class TTree;
-class TObjArray;
-class AliTRDtrackV1;
-class AliTRDCalibraFillHisto;
-class AliTRDCalibraVector;
-class AliTRDCalibraMode;
-class AliTRDcluster;
-class AliTRDtrackInfo;
-
-class AliTRDcalibration : public AliTRDrecoTask 
-{
-public:
-
-  // Plots registered for this task
-  enum{
-    kNbTrack        =  0     // Nb tracks per event
-      ,kNbTracklet     =  1     // Nb of traklets per detector
-      ,kNbTimeBin      =  2     // Nb of clusters per timebin
-      ,kNbClusters     =  3     // Nb of clusters per tracklet
-      ,kPHSum          =  4     // All integrated PH
-      ,kCHSum          =  5     // All integrated CH
-      ,kPH2D           =  6     // PH2D
-      ,kCH2D           =  7     // CH2D
-      ,kPRF2D          =  8     // PRF2D 
-      ,kPH2DVector     =  9     // PH2D
-      ,kCH2DVector     =  10     // CH2D
-      ,kPRF2DVector    =  11     // PRF2D 
-      ,kLinearFitter   =  12    // For the one with the most stats 
-      ,kGainFactor     =  13    // Gain factor
-      ,kVdriftT0Factor   = 14   // VdriftT0 average pulse height
-      ,kVdriftLorentzAngleFactor = 15  // VdriftLorentzAngle
-      ,kPRFFactor = 16                 //PRF Factor
-      };
-  
-
-  AliTRDcalibration();
-  virtual ~AliTRDcalibration();
-  
-  virtual void    CreateOutputObjects();
-  virtual void    Exec(Option_t *option);
-  virtual void    Terminate(Option_t *);
-  virtual Bool_t  GetRefFigure(Int_t ifig);
-  virtual Bool_t  PostProcess();
-
-  Bool_t FillGraphIndex(const TObjArray *vectora, TGraph *graph) const;
-  Bool_t AddStatsPerDetector(const TH2I *ch);
-  Bool_t AddStatsPerDetector(const TProfile2D *ph, Int_t i);
-
-  Bool_t SetNrphiFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const;
-  Bool_t SetNzFromTObject(const char *name, Int_t i, AliTRDCalibraMode *calibMode) const;
-
-  Int_t  GetNumberOfGroupsPRF(const char* nametitle) const;
-  TH2I  *GetSumCH() const                                           { return fCHSum; };
-  TH2D  *GetSumDet() const                                          { return fDetSum;};
-  AliTRDCalibraVector  *GetSumDetVector() const                     { return fDetSumVector;};
-
-  
-
-  void SetHisto2d(Bool_t histo2d)                                   {fHisto2d=histo2d;};
-  void SetVector2d(Bool_t vector2d)                                 {fVector2d=vector2d;};
-  void SetVdriftLinear(Bool_t vdriftLinear)                         {fVdriftLinear = vdriftLinear;};
-  void SetLow(Int_t low)                                            {flow=low;};
-  void SetHigh(Int_t high)                                          {fhigh=high;};
-  void SetNz(Short_t nz, Int_t i)                                   {fNz[i]=nz;};
-  void SetNrphi(Short_t nrphi, Int_t i)                             {fNrphi[i]=nrphi;};
-  void SetFillZero(Bool_t fillZero)                                 {ffillZero =  fillZero;};
-  void SetNormalizeNbOfCluster(Bool_t normalizeNbOfCluster)         {fnormalizeNbOfCluster = normalizeNbOfCluster;};
-  void SetMaxCluster(Float_t maxcluster)                            {fmaxCluster =  maxcluster; }; 
-  void SetOfflineTracks()                                           {fOfflineTracks=kTRUE; fStandaloneTracks=kFALSE; };
-  void SetStandaloneTracks()                                        {fStandaloneTracks=kTRUE; fOfflineTracks=kFALSE; };
-  void SetCompressPerDetector(Bool_t compressPerDetector=kTRUE)     {fCompressPerDetector=compressPerDetector; };
-  void SetRunNumber(Int_t runNumber)                                {fRunNumber=runNumber; };
-  void SetNameDirectoryOutput(const char *nameDirectory)            {fkNameDirectory=nameDirectory; };
-  
-private:
-  AliTRDtrackInfo  *fTrackInfo;                  //track info
-
-  AliTRDtrackV1 *ftrdTrack;                      //trdtrack
-  AliTRDcluster *fcl;                            //cluster
-  
-  AliTRDCalibraFillHisto *fTRDCalibraFillHisto;  //! calibration analyse object
-  TH1F        *fNbTRDTrack;                      //! nb ESD tracks used
-  TH1F        *fNbTRDTrackOffline;               //! nb ESD tracks offline used
-  TH1F        *fNbTRDTrackStandalone;            //! nb ESD tracks standalone used
-  TH1F        *fNbTRDTracklet;                   //! nb tracklets used
-  TH1F        *fNbTRDTrackletOffline;            //! nb tracklets offline used
-  TH1F        *fNbTRDTrackletStandalone;         //! nb tracklets standalone used
-  TH1F        *fNbTimeBin;                       //! nb Time Bin
-  TH1F        *fNbTimeBinOffline;                //! nb Time Bin offline
-  TH1F        *fNbTimeBinStandalone;             //! nb Time Bin standalone
-  TH1F        *fNbClusters;                      //! nb Clusters
-  TH1F        *fNbClustersOffline;               //! nb Clusters offline
-  TH1F        *fNbClustersStandalone;            //! nb Clusters standalone
-
-
-  TProfile2D  *fPHSum;                           //! sum PH
-  TH2I        *fCHSum;                           //! sum CH
-  TH2D        *fDetSum;                          //! sum Det
-  AliTRDCalibraVector *fDetSumVector;            //! sum Det Vect
-  
-  Bool_t      fHisto2d;                          //! histo
-  Bool_t      fVector2d;                         //! vector
-  Bool_t      fVdriftLinear;                     //! vdrift Linear
-
-  Int_t       flow;                              //! lower limit nb of clusters
-  Int_t       fhigh;                             //! higher limit nb of clusters
-  Int_t       fNbTimeBins;                       //! number of timebins 
-  Bool_t      ffillZero;                         //! fill zero
-  Short_t     fNz[3];                            //! Nz mode 
-  Short_t     fNrphi[3];                         //! Nrphi mode
-  Bool_t      fnormalizeNbOfCluster;             //! normalize with number of clusters
-  Float_t     fmaxCluster;                       //! maxcluster (noise at the end)
-  Bool_t      fOfflineTracks;                    //! Offline refited tracks
-  Bool_t      fStandaloneTracks;                 //! Take only standalone tracks
-
-  Bool_t      fCompressPerDetector;              //! Compress per detector 
-
-  Int_t       fRunNumber;                        //! Run number
-  const char *fkNameDirectory;                   //! Name output directory fit parameters
-
-  TObjArray  *fGraph;                            //! array of graphs filled in PostProcess
-  Bool_t      fPostProcess;                      //Post process 
-
-  AliTRDcalibration(const AliTRDcalibration&); 
-  AliTRDcalibration& operator=(const AliTRDcalibration&); 
-
-  ClassDef(AliTRDcalibration, 1) // calibration task
-};
-#endif
-
diff --git a/TRD/qaRec/AliTRDcheckDET.cxx b/TRD/qaRec/AliTRDcheckDET.cxx
deleted file mode 100644 (file)
index 3b34d5d..0000000
+++ /dev/null
@@ -1,1210 +0,0 @@
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//                                                                        //
-//  Basic checks for tracking and detector performance                    //
-//  
-//     For the moment (15.10.2009) the following checks are implemented    //
-//       - Number of clusters/track
-//       - Number of clusters/tracklet
-//       - Number of tracklets/track from different sources (Barrel, StandAlone)
-//       - Number of findable tracklets
-//       - Number of tracks per event and TRD sector
-//       - <PH>
-//       - Chi2 distribution for tracks
-//       - Charge distribution per cluster and tracklet
-//       - Number of events and tracks per trigger source 
-//       - Trigger purity
-//       - Track and Tracklet propagation status
-//
-//  Authors:                                                              //
-//    Anton Andronic <A.Andronic@gsi.de>                                  //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include <TAxis.h>
-#include <TCanvas.h>
-#include <TFile.h>
-#include <TH1F.h>
-#include <TH1I.h>
-#include <TF1.h>
-#include <TGaxis.h>
-#include <TGraph.h>
-#include <TLegend.h>
-#include <TMath.h>
-#include <TMap.h>
-#include <TObjArray.h>
-#include <TObject.h>
-#include <TObjString.h>
-
-#include <TPad.h>
-#include <TProfile.h>
-#include <TProfile2D.h>
-#include <TROOT.h>
-
-#include "AliLog.h"
-#include "AliTRDcluster.h"
-#include "AliESDHeader.h"
-#include "AliESDRun.h"
-#include "AliESDtrack.h"
-#include "AliTRDgeometry.h"
-#include "AliTRDpadPlane.h"
-#include "AliTRDSimParam.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDtrackerV1.h"
-#include "AliTRDReconstructor.h"
-#include "AliTrackReference.h"
-#include "AliTrackPointArray.h"
-#include "AliTracker.h"
-#include "TTreeStream.h"
-
-#include "info/AliTRDtrackInfo.h"
-#include "info/AliTRDeventInfo.h"
-#include "AliTRDcheckDET.h"
-
-#include <cstdio>
-#include <iostream>
-
-ClassImp(AliTRDcheckDET)
-
-//_______________________________________________________
-AliTRDcheckDET::AliTRDcheckDET():
-  AliTRDrecoTask("checkDET", "Basic TRD data checker")
-  ,fEventInfo(0x0)
-  ,fTriggerNames(0x0)
-  ,fReconstructor(0x0)
-  ,fGeo(0x0)
-{
-  //
-  // Default constructor
-  //
-  DefineInput(1,AliTRDeventInfo::Class());
-  fReconstructor = new AliTRDReconstructor;
-  fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
-  fGeo = new AliTRDgeometry;
-  InitFunctorList();
-}
-
-//_______________________________________________________
-AliTRDcheckDET::~AliTRDcheckDET(){
-  //
-  // Destructor
-  // 
-  if(fTriggerNames) delete fTriggerNames;
-  delete fReconstructor;
-  delete fGeo;
-}
-
-//_______________________________________________________
-void AliTRDcheckDET::ConnectInputData(Option_t *opt){
-  //
-  // Connect the Input data with the task
-  //
-  AliTRDrecoTask::ConnectInputData(opt);
-  fEventInfo = dynamic_cast<AliTRDeventInfo *>(GetInputData(1));
-}
-
-//_______________________________________________________
-void AliTRDcheckDET::CreateOutputObjects(){
-  //
-  // Create Output Objects
-  //
-  OpenFile(0,"RECREATE");
-  fContainer = Histos();
-  if(!fTriggerNames) fTriggerNames = new TMap();
-}
-
-//_______________________________________________________
-void AliTRDcheckDET::Exec(Option_t *opt){
-  //
-  // Execution function
-  // Filling TRD quality histos
-  //
-  if(!HasMCdata() && fEventInfo->GetEventHeader()->GetEventType() != 7) return;        // For real data we select only physical events
-  AliTRDrecoTask::Exec(opt);  
-  Int_t nTracks = 0;           // Count the number of tracks per event
-  Int_t triggermask = fEventInfo->GetEventHeader()->GetTriggerMask();
-  TString triggername =  fEventInfo->GetRunInfo()->GetFiredTriggerClasses(triggermask);
-  AliDebug(6, Form("Trigger cluster: %d, Trigger class: %s\n", triggermask, triggername.Data()));
-  dynamic_cast<TH1F *>(fContainer->UncheckedAt(kNeventsTrigger))->Fill(triggermask);
-  for(Int_t iti = 0; iti < fTracks->GetEntriesFast(); iti++){
-    if(!fTracks->UncheckedAt(iti)) continue;
-    AliTRDtrackInfo *fTrackInfo = dynamic_cast<AliTRDtrackInfo *>(fTracks->UncheckedAt(iti));
-    if(!fTrackInfo->GetTrack()) continue;
-    nTracks++;
-  }
-  if(nTracks){
-    dynamic_cast<TH1F *>(fContainer->UncheckedAt(kNeventsTriggerTracks))->Fill(triggermask);
-    dynamic_cast<TH1F *>(fContainer->UncheckedAt(kNtracksEvent))->Fill(nTracks);
-  }
-  if(triggermask <= 20 && !fTriggerNames->FindObject(Form("%d", triggermask))){
-    fTriggerNames->Add(new TObjString(Form("%d", triggermask)), new TObjString(triggername));
-    // also set the label for both histograms
-    TH1 *histo = dynamic_cast<TH1F *>(fContainer->UncheckedAt(kNeventsTriggerTracks));
-    histo->GetXaxis()->SetBinLabel(histo->FindBin(triggermask), triggername);
-    histo = dynamic_cast<TH1F *>(fContainer->UncheckedAt(kNeventsTrigger));
-    histo->GetXaxis()->SetBinLabel(histo->FindBin(triggermask), triggername);
-  }
-  PostData(0, fContainer);
-}
-
-
-//_______________________________________________________
-Bool_t AliTRDcheckDET::PostProcess(){
-  //
-  // Do Postprocessing (for the moment set the number of Reference histograms)
-  //
-  
-  TH1 * h = 0x0;
-  
-  // Calculate of the trigger clusters purity
-  h = dynamic_cast<TH1F *>(fContainer->FindObject("hEventsTrigger"));
-  TH1F *h1 = dynamic_cast<TH1F *>(fContainer->FindObject("hEventsTriggerTracks"));
-  h1->Divide(h);
-  Float_t purities[20], val = 0;
-  TString triggernames[20];
-  Int_t nTriggerClasses = 0;
-  for(Int_t ibin = 1; ibin <= h->GetNbinsX(); ibin++){
-    if((val = h1->GetBinContent(ibin))){
-      purities[nTriggerClasses] = val;
-      triggernames[nTriggerClasses] = h1->GetXaxis()->GetBinLabel(ibin);
-      nTriggerClasses++;
-    }
-  }
-  h = dynamic_cast<TH1F *>(fContainer->UncheckedAt(kTriggerPurity));
-  TAxis *ax = h->GetXaxis();
-  for(Int_t itrg = 0; itrg < nTriggerClasses; itrg++){
-    h->Fill(itrg, purities[itrg]);
-    ax->SetBinLabel(itrg+1, triggernames[itrg].Data());
-  }
-  ax->SetRangeUser(-0.5, nTriggerClasses+.5);
-  h->GetYaxis()->SetRangeUser(0,1);
-
-  // track status
-  h=dynamic_cast<TH1F*>(fContainer->At(kTrackStatus));
-  Float_t ok = h->GetBinContent(1);
-  Int_t nerr = h->GetNbinsX();
-  for(Int_t ierr=nerr; ierr--;){
-    h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/ok);
-  }
-  h->SetBinContent(1, 0.);
-
-  // tracklet status
-  TObjArray *arr = dynamic_cast<TObjArray*>(fContainer->UncheckedAt(kTrackletStatus));
-  for(Int_t ily = AliTRDgeometry::kNlayer; ily--;){
-    h=dynamic_cast<TH1F*>(arr->At(ily));
-    Float_t okB = h->GetBinContent(1);
-    Int_t nerrB = h->GetNbinsX();
-    for(Int_t ierr=nerrB; ierr--;){
-      h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/okB);
-    }
-    h->SetBinContent(1, 0.);
-  }
-
-  fNRefFigures = 18;
-
-  return kTRUE;
-}
-
-//_______________________________________________________
-Bool_t AliTRDcheckDET::GetRefFigure(Int_t ifig){
-  //
-  // Setting Reference Figures
-  //
-  gPad->SetLogy(0);
-  gPad->SetLogx(0);
-  TH1 *h = 0x0; TObjArray *arr=0x0;
-  TLegend *leg = 0x0;
-  Bool_t kFIRST(1);
-  switch(ifig){
-  case kNclustersTrack:
-    (h=(TH1F*)fContainer->FindObject("hNcls"))->Draw("pl");
-    PutTrendValue("NClustersTrack", h->GetMean());
-    PutTrendValue("NClustersTrackRMS", h->GetRMS());
-    return kTRUE;
-  case kNclustersTracklet:
-    (h =(TH1F*)fContainer->FindObject("hNclTls"))->Draw("pc");
-    PutTrendValue("NClustersTracklet", h->GetMean());
-    PutTrendValue("NClustersTrackletRMS", h->GetRMS());
-    return kTRUE;
-  case kNtrackletsTrack:
-    h=MakePlotNTracklets();
-    PutTrendValue("NTrackletsTrack", h->GetMean());
-    PutTrendValue("NTrackletsTrackRMS", h->GetRMS());
-    return kTRUE;
-  case kNtrackletsCross:
-    h = (TH1F*)fContainer->FindObject("hNtlsCross");
-    if(!MakeBarPlot(h, kRed)) break;
-    PutTrendValue("NTrackletsCross", h->GetMean());
-    PutTrendValue("NTrackletsCrossRMS", h->GetRMS());
-    return kTRUE;
-  case kNtrackletsFindable:
-    h = (TH1F*)fContainer->FindObject("hNtlsFindable");
-    if(!MakeBarPlot(h, kGreen)) break;
-    PutTrendValue("NTrackletsFindable", h->GetMean());
-    PutTrendValue("NTrackletsFindableRMS", h->GetRMS());
-    return kTRUE;
-  case kNtracksEvent:
-    (h = (TH1F*)fContainer->FindObject("hNtrks"))->Draw("pl");
-    PutTrendValue("NTracksEvent", h->GetMean());
-    PutTrendValue("NTracksEventRMS", h->GetRMS());
-    return kTRUE;
-  case kNtracksSector:
-    h = (TH1F*)fContainer->FindObject("hNtrksSector");
-    if(!MakeBarPlot(h, kGreen)) break;
-    PutTrendValue("NTracksSector", h->Integral()/h->GetNbinsX());
-    return kTRUE;
-  case kTrackStatus:
-    if(!(h=(TH1F *)fContainer->FindObject("hTrackStatus"))) break;
-    h->GetXaxis()->SetRangeUser(0.5, -1);
-    h->GetYaxis()->CenterTitle();
-    h->Draw("c");
-    PutTrendValue("TrackStatus", h->Integral());
-    gPad->SetLogy(0);
-    return kTRUE;
-  case kTrackletStatus:
-    if(!(arr = dynamic_cast<TObjArray*>(fContainer->At(kTrackletStatus)))) break;
-    leg = new TLegend(.68, .7, .98, .98);
-    leg->SetBorderSize(1);leg->SetFillColor(0);
-    leg->SetHeader("TRD layer");
-    for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
-      if(!(h=dynamic_cast<TH1F*>(arr->At(ily)))) continue;
-      if(kFIRST){
-        h->Draw("c");
-        h->GetXaxis()->SetRangeUser(0.5, -1);
-        h->GetYaxis()->CenterTitle();
-        kFIRST = kFALSE;
-      } else h->Draw("samec");
-      leg->AddEntry(h, Form("%d", ily), "l");
-      PutTrendValue(Form("TrackletStatus%d", ily), h->Integral());
-    }
-    leg->Draw();
-    gPad->SetLogy(0);
-    return kTRUE;
-  case kChi2:
-    MakePlotChi2();
-    return kTRUE;
-  case kPH:
-    MakePlotPulseHeight();
-    gPad->SetLogy(0);
-    return kTRUE;
-  case kChargeCluster:
-    (h = (TH1F*)fContainer->FindObject("hQcl"))->Draw("c");
-    gPad->SetLogy(1);
-    PutTrendValue("ChargeCluster", h->GetMaximumBin());
-    PutTrendValue("ChargeClusterRMS", h->GetRMS());
-    return kTRUE;
-  case kChargeTracklet:
-    (h=(TH1F*)fContainer->FindObject("hQtrklt"))->Draw("c");
-    PutTrendValue("ChargeTracklet", h->GetMaximumBin());
-    PutTrendValue("ChargeTrackletRMS", h->GetRMS());
-    return kTRUE;
-  case kNeventsTrigger:
-    ((TH1F*)fContainer->FindObject("hEventsTrigger"))->Draw("");
-    return kTRUE;
-  case kNeventsTriggerTracks:
-    ((TH1F*)fContainer->FindObject("hEventsTriggerTracks"))->Draw("");
-    return kTRUE;
-  case kTriggerPurity: 
-    if(!MakeBarPlot((TH1F*)fContainer->FindObject("hTriggerPurity"), kGreen)) break;
-    break;
-  default:
-    break;
-  }
-  AliInfo(Form("Reference plot [%d] missing result", ifig));
-  return kFALSE;
-}
-
-//_______________________________________________________
-TObjArray *AliTRDcheckDET::Histos(){
-  //
-  // Create QA histograms
-  //
-  if(fContainer) return fContainer;
-  
-  fContainer = new TObjArray(20);
-  //fContainer->SetOwner(kTRUE);
-
-  // Register Histograms
-  TH1 * h = NULL;
-  TAxis *ax = NULL;
-  if(!(h = (TH1F *)gROOT->FindObject("hNcls"))){
-    h = new TH1F("hNcls", "N_{clusters} / track", 181, -0.5, 180.5);
-    h->GetXaxis()->SetTitle("N_{clusters}");
-    h->GetYaxis()->SetTitle("Entries");
-  } else h->Reset();
-  fContainer->AddAt(h, kNclustersTrack);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hNclTls"))){
-    h = new TH1F("hNclTls","N_{clusters} / tracklet", 51, -0.5, 50.5);
-    h->GetXaxis()->SetTitle("N_{clusters}");
-    h->GetYaxis()->SetTitle("Entries");
-  } else h->Reset();
-  fContainer->AddAt(h, kNclustersTracklet);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hNtls"))){
-    h = new TH1F("hNtls", "N_{tracklets} / track", AliTRDgeometry::kNlayer, 0.5, 6.5);
-    h->GetXaxis()->SetTitle("N^{tracklet}");
-    h->GetYaxis()->SetTitle("freq. [%]");
-  } else h->Reset();
-  fContainer->AddAt(h, kNtrackletsTrack);
-
-  if(!(h = (TH1F *)gROOT->FindObject("htlsSTA"))){
-    h = new TH1F("hNtlsSTA", "N_{tracklets} / track (Stand Alone)", AliTRDgeometry::kNlayer, 0.5, 6.5);
-    h->GetXaxis()->SetTitle("N^{tracklet}");
-    h->GetYaxis()->SetTitle("freq. [%]");
-  }
-  fContainer->AddAt(h, kNtrackletsSTA);
-
-  if(!(h = (TH1F *)gROOT->FindObject("htlsBAR"))){
-    h = new TH1F("hNtlsBAR", "N_{tracklets} / track (Barrel)", AliTRDgeometry::kNlayer, 0.5, 6.5);
-    h->GetXaxis()->SetTitle("N^{tracklet}");
-    h->GetYaxis()->SetTitle("freq. [%]");
-  }
-  fContainer->AddAt(h, kNtrackletsBAR);
-
-  // 
-  if(!(h = (TH1F *)gROOT->FindObject("hNtlsCross"))){
-    h = new TH1F("hNtlsCross", "N_{tracklets}^{cross} / track", 7, -0.5, 6.5);
-    h->GetXaxis()->SetTitle("n_{row cross}");
-    h->GetYaxis()->SetTitle("freq. [%]");
-  } else h->Reset();
-  fContainer->AddAt(h, kNtrackletsCross);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hNtlsFindable"))){
-    h = new TH1F("hNtlsFindable", "Found/Findable Tracklets" , 101, -0.005, 1.005);
-    h->GetXaxis()->SetTitle("r [a.u]");
-    h->GetYaxis()->SetTitle("Entries");
-  } else h->Reset();
-  fContainer->AddAt(h, kNtrackletsFindable);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hNtrks"))){
-    h = new TH1F("hNtrks", "N_{tracks} / event", 100, 0, 100);
-    h->GetXaxis()->SetTitle("N_{tracks}");
-    h->GetYaxis()->SetTitle("Entries");
-  } else h->Reset();
-  fContainer->AddAt(h, kNtracksEvent);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hNtrksSector"))){
-    h = new TH1F("hNtrksSector", "N_{tracks} / sector", AliTRDgeometry::kNsector, -0.5, 17.5);
-    h->GetXaxis()->SetTitle("sector");
-    h->GetYaxis()->SetTitle("freq. [%]");
-  } else h->Reset();
-  fContainer->AddAt(h, kNtracksSector);
-
-  if(!(h = (TH1F*)gROOT->FindObject("hTrackStatus"))){
-    const Int_t nerr = 7;
-    h = new TH1F("hTrackStatus", "Track Status", nerr, -0.5, nerr-0.5);
-    const Char_t *label[nerr] = {"OK", "PROL", "PROP", "AJST", "SNP", "TINI", "UPDT"};
-    ax = h->GetXaxis();
-    for(Int_t ierr=nerr; ierr--;) ax->SetBinLabel(ierr+1, label[ierr]);
-    h->SetYTitle("Relative Error to Good [%]");
-  }
-  fContainer->AddAt(h, kTrackStatus);
-
-  TObjArray *arr = new TObjArray(AliTRDgeometry::kNlayer);
-  arr->SetOwner(kTRUE);  arr->SetName("TrackletStatus");
-  fContainer->AddAt(arr, kTrackletStatus);
-  for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
-    if(!(h = (TH1F *)gROOT->FindObject(Form("hTrackletStatus%d", ily)))){
-      const Int_t nerr = 8;
-      h = new TH1F(Form("hTrackletStatus%d", ily), "Tracklet status", nerr, -0.5, nerr-0.5);
-      h->SetLineColor(ily+1);
-      const Char_t *label[nerr] = {"OK", "Geom", "Bound", "NoCl", "NoAttach", "NoClTr", "NoFit", "Chi2"};
-      ax = h->GetXaxis();
-      for(Int_t ierr=nerr; ierr--;) ax->SetBinLabel(ierr+1, label[ierr]);
-      h->SetYTitle("Relative Error to Good [%]");
-    } else h->Reset();
-    arr->AddAt(h, ily);
-  }
-
-  // <PH> histos
-  arr = new TObjArray(2);
-  arr->SetOwner(kTRUE);  arr->SetName("<PH>");
-  fContainer->AddAt(arr, kPH);
-  if(!(h = (TH1F *)gROOT->FindObject("hPHt"))){
-    h = new TProfile("hPHt", "<PH>", 31, -0.5, 30.5);
-    h->GetXaxis()->SetTitle("Time / 100ns");
-    h->GetYaxis()->SetTitle("<PH> [a.u]");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  if(!(h = (TH1F *)gROOT->FindObject("hPHx")))
-    h = new TProfile("hPHx", "<PH>", 31, -0.08, 4.88);
-  else h->Reset();
-  arr->AddAt(h, 1);
-
-  // Chi2 histos
-  if(!(h = (TH2S*)gROOT->FindObject("hChi2"))){
-    h = new TH2S("hChi2", "#chi^{2} per track", AliTRDgeometry::kNlayer, .5, AliTRDgeometry::kNlayer+.5, 100, 0, 50);
-    h->SetXTitle("ndf");
-    h->SetYTitle("#chi^{2}/ndf");
-    h->SetZTitle("entries");
-  } else h->Reset();
-  fContainer->AddAt(h, kChi2);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hQcl"))){
-    h = new TH1F("hQcl", "Q_{cluster}", 200, 0, 1200);
-    h->GetXaxis()->SetTitle("Q_{cluster} [a.u.]");
-    h->GetYaxis()->SetTitle("Entries");
-  }else h->Reset();
-  fContainer->AddAt(h, kChargeCluster);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hQtrklt"))){
-    h = new TH1F("hQtrklt", "Q_{tracklet}", 6000, 0, 6000);
-    h->GetXaxis()->SetTitle("Q_{tracklet} [a.u.]");
-    h->GetYaxis()->SetTitle("Entries");
-  }else h->Reset();
-  fContainer->AddAt(h, kChargeTracklet);
-
-
-  if(!(h = (TH1F *)gROOT->FindObject("hEventsTrigger")))
-    h = new TH1F("hEventsTrigger", "Trigger Class", 100, 0, 100);
-  else h->Reset();
-  fContainer->AddAt(h, kNeventsTrigger);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hEventsTriggerTracks")))
-    h = new TH1F("hEventsTriggerTracks", "Trigger Class (Tracks)", 100, 0, 100);
-  else h->Reset();
-  fContainer->AddAt(h, kNeventsTriggerTracks);
-
-  if(!(h = (TH1F *)gROOT->FindObject("hTriggerPurity"))){
-    h = new TH1F("hTriggerPurity", "Trigger Purity", 10, -0.5, 9.5);
-    h->GetXaxis()->SetTitle("Trigger Cluster");
-    h->GetYaxis()->SetTitle("freq.");
-  } else h->Reset();
-  fContainer->AddAt(h, kTriggerPurity);
-
-  return fContainer;
-}
-
-/*
-* Plotting Functions
-*/
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotTrackStatus(const AliTRDtrackV1 *track)
-{
-//
-// Plot the track propagation status. The following errors are defined (see AliTRDtrackV1::ETRDtrackError)
-//   PROL - track prolongation failure
-//   PROP - track propagation failure
-//   AJST - crossing sectors failure
-//   SNP  - too large bending
-//   TINI - tracklet initialization failure
-//   UPDT - track position/covariance update failure 
-//
-// Performance plot looks as below:
-//Begin_Html
-//<img src="TRD/trackStatus.gif">
-//End_Html
-//
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kTrackStatus)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  h->Fill(fkTrack->GetStatusTRD());
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotTrackletStatus(const AliTRDtrackV1 *track)
-{
-//
-// Plot the tracklet propagation status. The following errors are defined for tracklet (see AliTRDtrackV1::ETRDlayerError)
-//   Geom   - 
-//   Bound  - tracklet too close to chamber walls
-//   NoCl   - no clusters in the track roads
-//   NoAttach - fail to attach clusters
-//   NoClTr - fail to use clusters for fit
-//   NoFit  - tracklet fit failled
-//   Chi2   - chi2 tracklet-track over threshold
-//
-// Performance plot looks as below:
-//Begin_Html
-//<img src="TRD/trackletStatus.gif">
-//End_Html
-//
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TObjArray *arr =0x0;
-  if(!(arr = dynamic_cast<TObjArray*>(fContainer->At(kTrackletStatus)))){
-    AliWarning("Histograms not defined.");
-    return 0x0;
-  }
-
-  TH1 *h = 0x0;
-  for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
-    if(!(h = dynamic_cast<TH1F*>(arr->At(ily)))){
-      AliWarning(Form("Missing histo for layer %d.", ily));
-      continue;
-    }
-    h->Fill(fkTrack->GetStatusTRD(ily));
-  }
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotNClustersTracklet(const AliTRDtrackV1 *track){
-  //
-  // Plot the mean number of clusters per tracklet
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNclustersTracklet)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
-    h->Fill(tracklet->GetN2());
-  }
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotNClustersTrack(const AliTRDtrackV1 *track){
-  //
-  // Plot the number of clusters in one track
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNclustersTrack)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  
-  Int_t nclusters = 0;
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
-    nclusters += tracklet->GetN();
-    if(DebugLevel() > 2){
-      Int_t crossing = Int_t(tracklet->IsRowCross());
-      Int_t detector = tracklet->GetDetector();
-      Float_t theta = TMath::ATan(tracklet->GetZref(1));
-      Float_t phi = TMath::ATan(tracklet->GetYref(1));
-      Float_t momentum = 0.;
-      Int_t pdg = 0;
-      Int_t kinkIndex = fkESD ? fkESD->GetKinkIndex() : 0;
-      UShort_t nclsTPC = fkESD ? fkESD->GetTPCncls() : 0;
-      if(fkMC){
-        if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-        pdg = fkMC->GetPDG();
-      }
-      (*DebugStream()) << "NClustersTrack"
-        << "Detector="  << detector
-        << "crossing="  << crossing
-        << "momentum=" << momentum
-        << "pdg="                              << pdg
-        << "theta="                    << theta
-        << "phi="                              << phi
-        << "kinkIndex="        << kinkIndex
-        << "TPCncls="          << nclsTPC
-        << "nclusters=" << nclusters
-        << "\n";
-    }
-  }
-  h->Fill(nclusters);
-  return h;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotNTrackletsTrack(const AliTRDtrackV1 *track){
-  //
-  // Plot the number of tracklets
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0, *hMethod = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsTrack)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  Int_t nTracklets = fkTrack->GetNumberOfTracklets();
-  h->Fill(nTracklets);
-  if(!fkESD) return h;
-  Int_t status = fkESD->GetStatus();
-/*  printf("in/out/refit/pid: TRD[%d|%d|%d|%d]\n", status &AliESDtrack::kTRDin ? 1 : 0, status &AliESDtrack::kTRDout ? 1 : 0, status &AliESDtrack::kTRDrefit ? 1 : 0, status &AliESDtrack::kTRDpid ? 1 : 0);*/
-  if((status & AliESDtrack::kTRDin) != 0){
-    // Full BarrelTrack
-    if(!(hMethod = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsBAR))))
-      AliWarning("Method: Barrel.  Histogram not processed!");
-  } else {
-    // Stand alone Track
-    if(!(hMethod = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsSTA))))
-      AliWarning("Method: StandAlone.  Histogram not processed!");
-  }
-  hMethod->Fill(nTracklets);
-
-  if(DebugLevel() > 3){
-    if(nTracklets == 1){
-      // If we have one Tracklet, check in which layer this happens
-      Int_t layer = -1;
-      AliTRDseedV1 *tracklet = 0x0;
-      for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-        if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){layer =  il; break;}
-      }
-      (*DebugStream()) << "NTrackletsTrack"
-        << "Layer=" << layer
-        << "\n";
-    }
-  }
-  return h;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotNTrackletsRowCross(const AliTRDtrackV1 *track){
-  //
-  // Plot the number of tracklets
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsCross)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  Int_t ncross = 0;
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-    if(!(tracklet = fkTrack->GetTracklet(il)) || !tracklet->IsOK()) continue;
-
-    if(tracklet->IsRowCross()) ncross++;
-  }
-  h->Fill(ncross);
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotFindableTracklets(const AliTRDtrackV1 *track){
-  //
-  // Plots the ratio of number of tracklets vs.
-  // number of findable tracklets
-  //
-  // Findable tracklets are defined as track prolongation
-  // to layer i does not hit the dead area +- epsilon
-  //
-  // In order to check whether tracklet hist active area in Layer i, 
-  // the track is refitted and the fitted position + an uncertainty 
-  // range is compared to the chamber border (also with a different
-  // uncertainty)
-  //
-  // For the track fit two cases are distinguished:
-  // If the track is a stand alone track (defined by the status bit 
-  // encoding, then the track is fitted with the tilted Rieman model
-  // Otherwise the track is fitted with the Kalman fitter in two steps:
-  // Since the track parameters are give at the outer point, we first 
-  // fit in direction inwards. Afterwards we fit again in direction outwards
-  // to extrapolate the track to layers which are not reached by the track
-  // For the Kalman model, the radial track points have to be shifted by
-  // a distance epsilon in the direction that we want to fit
-  //
-  const Float_t epsilon = 0.01;   // dead area tolerance
-  const Float_t epsilonR = 1;    // shift in radial direction of the anode wire position (Kalman filter only)
-  const Float_t deltaY = 0.7;    // Tolerance in the track position in y-direction
-  const Float_t deltaZ = 7.0;    // Tolerance in the track position in z-direction (Padlength)
-  Double_t xAnode[AliTRDgeometry::kNlayer] = {300.2, 312.8, 325.4, 338.0, 350.6, 363.2}; // Take the default X0
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsFindable)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  Int_t nFound = 0, nFindable = 0;
-  Int_t stack = -1;
-  Double_t ymin = 0., ymax = 0., zmin = 0., zmax = 0.;
-  Double_t y = 0., z = 0.;
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDpadPlane *pp;  
-  for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-    if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){
-      tracklet->SetReconstructor(fReconstructor);
-      nFound++;
-    }
-  }
-  // 2 Different cases:
-  // 1st stand alone: here we cannot propagate, but be can do a Tilted Rieman Fit
-  // 2nd barrel track: here we propagate the track to the layers
-  AliTrackPoint points[6];
-  Float_t xyz[3];
-  memset(xyz, 0, sizeof(Float_t) * 3);
-  if(((fkESD->GetStatus() & AliESDtrack::kTRDout) > 0) && !((fkESD->GetStatus() & AliESDtrack::kTRDin) > 0)){
-    // stand alone track
-    for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-      xyz[0] = xAnode[il];
-      points[il].SetXYZ(xyz);
-    }
-    AliTRDtrackerV1::FitRiemanTilt(const_cast<AliTRDtrackV1 *>(fkTrack), 0x0, kTRUE, 6, points);
-  } else {
-    // barrel track
-    //
-    // 2 Steps:
-    // -> Kalman inwards
-    // -> Kalman outwards
-    AliTRDtrackV1 copyTrack(*fkTrack);  // Do Kalman on a (non-constant) copy of the track
-    AliTrackPoint pointsInward[6], pointsOutward[6];
-    for(Int_t il = AliTRDgeometry::kNlayer; il--;){
-      // In order to avoid complications in the Kalman filter if the track points have the same radial
-      // position like the tracklets, we have to shift the radial postion of the anode wire by epsilon
-      // in the direction we want to go
-      // The track points have to be in reverse order for the Kalman Filter inwards
-      xyz[0] = xAnode[AliTRDgeometry::kNlayer - il - 1] - epsilonR;
-      pointsInward[il].SetXYZ(xyz);
-      xyz[0] = xAnode[il] + epsilonR;
-      pointsOutward[il].SetXYZ(xyz);
-    }
-    /*for(Int_t ipt = 0; ipt < AliTRDgeometry::kNlayer; ipt++)
-      printf("%d. X = %f\n", ipt, points[ipt].GetX());*/
-    // Kalman inwards
-    AliTRDtrackerV1::FitKalman(&copyTrack, 0x0, kFALSE, 6, pointsInward);
-    memcpy(points, pointsInward, sizeof(AliTrackPoint) * 6); // Preliminary store the inward results in the Array points
-    // Kalman outwards
-    AliTRDtrackerV1::FitKalman(&copyTrack, 0x0, kTRUE, 6, pointsInward);
-    memcpy(points, pointsOutward, sizeof(AliTrackPoint) * AliTRDgeometry::kNlayer);
-  }
-  for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-    y = points[il].GetY();
-    z = points[il].GetZ();
-    if((stack = fGeo->GetStack(z, il)) < 0) continue; // Not findable
-    pp = fGeo->GetPadPlane(il, stack);
-    ymin = pp->GetCol0() + epsilon;
-    ymax = pp->GetColEnd() - epsilon; 
-    zmin = pp->GetRowEnd() + epsilon; 
-    zmax = pp->GetRow0() - epsilon;
-    // ignore y-crossing (material)
-    if((z + deltaZ > zmin && z - deltaZ < zmax) && (y + deltaY > ymin && y - deltaY < ymax)) nFindable++;
-      if(DebugLevel() > 3){
-        Double_t posTracklet[2] = {tracklet ? tracklet->GetYfit(0) : 0, tracklet ? tracklet->GetZfit(0) : 0};
-        Int_t hasTracklet = tracklet ? 1 : 0;
-        (*DebugStream())   << "FindableTracklets"
-          << "layer="     << il
-          << "ytracklet=" << posTracklet[0]
-          << "ytrack="    << y
-          << "ztracklet=" << posTracklet[1]
-          << "ztrack="    << z
-          << "tracklet="  << hasTracklet
-          << "\n";
-      }
-  }
-  
-  h->Fill(nFindable > 0 ? TMath::Min(nFound/static_cast<Double_t>(nFindable), 1.) : 1);
-  AliDebug(2, Form("Findable[Found]: %d[%d|%f]", nFindable, nFound, nFound/static_cast<Float_t>(nFindable > 0 ? nFindable : 1)));
-  return h;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotChi2(const AliTRDtrackV1 *track){
-  //
-  // Plot the chi2 of the track
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH2S*>(fContainer->At(kChi2)))) {
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  Int_t n = fkTrack->GetNumberOfTracklets();
-  if(!n) return 0x0;
-
-  h->Fill(n, fkTrack->GetChi2()/n);
-  return h;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotPHt(const AliTRDtrackV1 *track){
-  //
-  // Plot the average pulse height
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TProfile *h = 0x0;
-  if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(0)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *c = 0x0;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK())continue;
-    Int_t crossing = Int_t(tracklet->IsRowCross());
-    Int_t detector = tracklet->GetDetector();
-    tracklet->ResetClusterIter();
-    while((c = tracklet->NextCluster())){
-      if(!c->IsInChamber()) continue;
-      Int_t localtime        = c->GetLocalTimeBin();
-      Double_t absoluteCharge = TMath::Abs(c->GetQ());
-      h->Fill(localtime, absoluteCharge);
-      if(DebugLevel() > 3){
-        Double_t distance[2];
-        GetDistanceToTracklet(distance, tracklet, c);
-        Float_t theta = TMath::ATan(tracklet->GetZref(1));
-        Float_t phi = TMath::ATan(tracklet->GetYref(1));
-        Float_t momentum = 0.;
-        Int_t pdg = 0;
-        Int_t kinkIndex = fkESD ? fkESD->GetKinkIndex() : 0;
-        UShort_t TPCncls = fkESD ? fkESD->GetTPCncls() : 0;
-        if(fkMC){
-          if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-          pdg = fkMC->GetPDG();
-        }
-        (*DebugStream()) << "PHt"
-          << "Detector="       << detector
-          << "crossing="       << crossing
-          << "Timebin="                << localtime
-          << "Charge="         << absoluteCharge
-          << "momentum="       << momentum
-          << "pdg="                            << pdg
-          << "theta="                  << theta
-          << "phi="                            << phi
-          << "kinkIndex="      << kinkIndex
-          << "TPCncls="                << TPCncls
-          << "dy="        << distance[0]
-          << "dz="        << distance[1]
-          << "c.="        << c
-          << "\n";
-      }
-    }
-  }
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotPHx(const AliTRDtrackV1 *track){
-  //
-  // Plots the average pulse height vs the distance from the anode wire
-  // (plus const anode wire offset)
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TProfile *h = 0x0;
-  if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(1)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  Float_t offset = .5*AliTRDgeometry::CamHght();
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *c = 0x0;
-  Double_t distance = 0;
-  Double_t x, y;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !(tracklet->IsOK())) continue;
-    tracklet->ResetClusterIter();
-    while((c = tracklet->NextCluster())){
-      if(!c->IsInChamber()) continue;
-      x = c->GetX()-AliTRDcluster::GetXcorr(c->GetLocalTimeBin());
-      y = c->GetY()-AliTRDcluster::GetYcorr(AliTRDgeometry::GetLayer(c->GetDetector()), c->GetCenter());
-
-      distance = tracklet->GetX0() - (c->GetX() + 0.3) + offset;
-      h->Fill(distance, TMath::Abs(c->GetQ()));
-    }
-  }  
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotChargeCluster(const AliTRDtrackV1 *track){
-  //
-  // Plot the cluster charge
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kChargeCluster)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *c = 0x0;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK())continue;
-    for(Int_t itime = 0; itime < AliTRDtrackerV1::GetNTimeBins(); itime++){
-      if(!(c = tracklet->GetClusters(itime))) continue;
-      h->Fill(c->GetQ());
-    }
-  }
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotChargeTracklet(const AliTRDtrackV1 *track){
-  //
-  // Plot the charge deposit per chamber
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kChargeTracklet)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *c = 0x0;
-  Double_t qTot = 0;
-  Int_t nTracklets =fkTrack->GetNumberOfTracklets();
-  for(Int_t itl = 0x0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
-    qTot = 0.;
-    for(Int_t ic = AliTRDseedV1::kNclusters; ic--;){
-      if(!(c = tracklet->GetClusters(ic))) continue;
-      qTot += TMath::Abs(c->GetQ());
-    }
-    h->Fill(qTot);
-    if(DebugLevel() > 3){
-      Int_t crossing = (Int_t)tracklet->IsRowCross();
-      Int_t detector = tracklet->GetDetector();
-      Float_t theta = TMath::ATan(tracklet->GetZfit(1));
-      Float_t phi = TMath::ATan(tracklet->GetYfit(1));
-      Float_t momentum = 0.;
-      Int_t pdg = 0;
-      Int_t kinkIndex = fkESD ? fkESD->GetKinkIndex() : 0;
-      UShort_t nclsTPC = fkESD ? fkESD->GetTPCncls() : 0;
-      if(fkMC){
-             if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-        pdg = fkMC->GetPDG();
-      }
-      (*DebugStream()) << "ChargeTracklet"
-        << "Detector="  << detector
-        << "crossing="  << crossing
-        << "momentum=" << momentum
-        << "nTracklets="<< nTracklets
-        << "pdg="                              << pdg
-        << "theta="                    << theta
-        << "phi="                              << phi
-        << "kinkIndex="        << kinkIndex
-        << "TPCncls="          << nclsTPC
-        << "QT="        << qTot
-        << "\n";
-    }
-  }
-  return h;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckDET::PlotNTracksSector(const AliTRDtrackV1 *track){
-  //
-  // Plot the number of tracks per Sector
-  //
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNtracksSector)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  // TODO we should compare with
-  // sector = Int_t(track->GetAlpha() / AliTRDgeometry::GetAlpha());
-
-  AliTRDseedV1 *tracklet = 0x0;
-  Int_t sector = -1;
-  for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-    if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
-    sector = static_cast<Int_t>(tracklet->GetDetector()/AliTRDgeometry::kNdets);
-    break;
-  }
-  h->Fill(sector);
-  return h;
-}
-
-
-//________________________________________________________
-void AliTRDcheckDET::SetRecoParam(AliTRDrecoParam *r)
-{
-
-  fReconstructor->SetRecoParam(r);
-}
-
-//________________________________________________________
-void AliTRDcheckDET::GetDistanceToTracklet(Double_t *dist, AliTRDseedV1 * const tracklet, AliTRDcluster * const c)
-{
-  Float_t x = c->GetX();
-  dist[0] = c->GetY() - tracklet->GetYat(x);
-  dist[1] = c->GetZ() - tracklet->GetZat(x);
-}
-
-
-//_______________________________________________________
-TH1* AliTRDcheckDET::MakePlotChi2()
-{
-// Plot chi2/track normalized to number of degree of freedom 
-// (tracklets) and compare with the theoretical distribution.
-// 
-// Alex Bercuci <A.Bercuci@gsi.de>
-
-  TH2S *h2 = (TH2S*)fContainer->At(kChi2);
-  TF1 f("fChi2", "[0]*pow(x, [1]-1)*exp(-0.5*x)", 0., 50.);
-  TLegend *leg = new TLegend(.7,.7,.95,.95);
-  leg->SetBorderSize(1); leg->SetHeader("Tracklets per Track");
-  TH1D *h1 = 0x0;
-  Bool_t kFIRST = kTRUE;
-  for(Int_t il=1; il<=h2->GetNbinsX(); il++){
-    h1 = h2->ProjectionY(Form("pyChi2%d", il), il, il);
-    if(h1->Integral()<50) continue;
-    h1->Scale(1./h1->Integral());
-    h1->SetMarkerStyle(7);h1->SetMarkerColor(il);
-    h1->SetLineColor(il);h1->SetLineStyle(2);
-    f.SetParameter(1, .5*il);f.SetLineColor(il);
-    h1->Fit(&f, "QW+", kFIRST ? "pc": "pcsame");
-    leg->AddEntry(h1, Form("%d", il), "l");
-    if(kFIRST){
-      h1->GetXaxis()->SetRangeUser(0., 25.);
-    }
-    kFIRST = kFALSE;
-  }
-  leg->Draw();
-  gPad->SetLogy();
-  return h1;
-}
-
-
-//________________________________________________________
-TH1* AliTRDcheckDET::MakePlotNTracklets(){
-  //
-  // Make nice bar plot of the number of tracklets in each method
-  //
-  TH1F *hBAR = (TH1F *)fContainer->FindObject("hNtlsBAR");
-  TH1F *hSTA = (TH1F *)fContainer->FindObject("hNtlsSTA");
-  TH1F *hCON = (TH1F *)fContainer->FindObject("hNtls");
-  TLegend *leg = new TLegend(0.13, 0.75, 0.39, 0.89);
-  leg->SetBorderSize(1);
-  leg->SetFillColor(0);
-
-  Float_t scale = hCON->Integral();
-  hCON->Scale(100./scale);
-  hCON->SetFillColor(kRed);hCON->SetLineColor(kRed);
-  hCON->SetBarWidth(0.2);
-  hCON->SetBarOffset(0.6);
-  hCON->SetStats(kFALSE);
-  hCON->GetYaxis()->SetRangeUser(0.,40.);
-  hCON->GetYaxis()->SetTitleOffset(1.2);
-  hCON->Draw("bar1"); leg->AddEntry(hCON, "Total", "f");
-  hCON->SetMaximum(55.);
-
-  hBAR->Scale(100./scale);
-  hBAR->SetFillColor(kGreen);hBAR->SetLineColor(kGreen);
-  hBAR->SetBarWidth(0.2);
-  hBAR->SetBarOffset(0.2);
-  hBAR->SetTitle("");
-  hBAR->SetStats(kFALSE);
-  hBAR->GetYaxis()->SetRangeUser(0.,40.);
-  hBAR->GetYaxis()->SetTitleOffset(1.2);
-  hBAR->Draw("bar1same"); leg->AddEntry(hBAR, "Barrel", "f");
-
-  hSTA->Scale(100./scale);
-  hSTA->SetFillColor(kBlue);hSTA->SetLineColor(kBlue);
-  hSTA->SetBarWidth(0.2);
-  hSTA->SetBarOffset(0.4);
-  hSTA->SetTitle("");
-  hSTA->SetStats(kFALSE);
-  hSTA->GetYaxis()->SetRangeUser(0.,40.);
-  hSTA->GetYaxis()->SetTitleOffset(1.2);
-  hSTA->Draw("bar1same"); leg->AddEntry(hSTA, "Stand Alone", "f");
-  leg->Draw();
-  gPad->Update();
-  return hCON;
-}
-
-//________________________________________________________
-TH1* AliTRDcheckDET::MakePlotPulseHeight(){
-  //
-  // Create Plot of the Pluse Height Spectrum
-  //
-  TH1 *h, *h1, *h2;
-  TObjArray *arr = (TObjArray*)fContainer->FindObject("<PH>");
-  h = (TH1F*)arr->At(0);
-  h->SetMarkerStyle(24);
-  h->SetMarkerColor(kBlack);
-  h->SetLineColor(kBlack);
-  h->Draw("e1");
-//   copy the second histogram in a new one with the same x-dimension as the phs with respect to time
-  h1 = (TH1F *)arr->At(1);
-  h2 = new TH1F("hphs1","Average PH", 31, -0.5, 30.5);
-  for(Int_t ibin = h1->GetXaxis()->GetFirst(); ibin < h1->GetNbinsX(); ibin++) 
-    h2->SetBinContent(ibin, h1->GetBinContent(ibin));
-  h2->SetMarkerStyle(22);
-  h2->SetMarkerColor(kBlue);
-  h2->SetLineColor(kBlue);
-  h2->Draw("e1same");
-  gPad->Update();
-//   create axis according to the histogram dimensions of the original second histogram
-  TGaxis *axis = new TGaxis(gPad->GetUxmin(),
-                    gPad->GetUymax(),
-                    gPad->GetUxmax(),
-                    gPad->GetUymax(),
-                    -0.08, 4.88, 510,"-L");
-  axis->SetLineColor(kBlue);
-  axis->SetLabelColor(kBlue);
-  axis->SetTextColor(kBlue);
-  axis->SetTitle("x_{0}-x_{c} [cm]");
-  axis->Draw();
-  return h1;
-}
-
-//________________________________________________________
-Bool_t AliTRDcheckDET::MakeBarPlot(TH1 *histo, Int_t color){
-  //
-  // Draw nice bar plots
-  //
-  if(!histo->GetEntries()) return kFALSE;
-  histo->Scale(100./histo->Integral());
-  histo->SetFillColor(color);
-  histo->SetBarOffset(.2);
-  histo->SetBarWidth(.6);
-  histo->Draw("bar1");
-  return kTRUE;
-}
diff --git a/TRD/qaRec/AliTRDcheckDET.h b/TRD/qaRec/AliTRDcheckDET.h
deleted file mode 100644 (file)
index 04fef04..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef ALITRDCHECKDET_H
-#define ALITRDCHECKDET_H
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-////////////////////////////////////////////////////////////////////////////
-//  Basic checks for tracking and detector performance                    //
-//                                                                        //
-//  Authors:                                                              //
-//    Anton Andronic <A.Andronic@gsi.de>                                  //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-////////////////////////////////////////////////////////////////////////////
-
-
-class TObjArray;
-class TH1;
-class TMap;
-class AliESDHeader;
-class AliTRDcluster;
-class AliTRDseedV1;
-class AliTRDgeometry;
-class AliTRDReconstructor;
-class AliTRDrecoParam;
-class AliTRDeventInfo;
-class AliTRDcheckDET : public AliTRDrecoTask{
-public:
-  // The Histogram number
-  enum  HistType_t {
-    kNclustersTrack     = 0,
-    kNclustersTracklet  = 1,
-    kNtrackletsTrack    = 2,
-    kNtrackletsSTA      = 3,
-    kNtrackletsBAR      = 4,
-    kNtrackletsCross    = 5,
-    kNtrackletsFindable = 6,
-    kNtracksEvent       = 7,
-    kNtracksSector      = 8,
-    kPH                 = 9,
-    kChi2               = 10,
-    kChargeCluster      = 11,
-    kChargeTracklet     = 12,
-    kNeventsTrigger     = 13,
-    kNeventsTriggerTracks=14,
-    kTriggerPurity      = 15,
-    kTrackStatus        = 16,
-    kTrackletStatus     = 17
-  };
-
-  AliTRDcheckDET();
-  virtual ~AliTRDcheckDET();
-
-  virtual void ConnectInputData(const Option_t *);
-  virtual void CreateOutputObjects();
-  virtual void Exec(Option_t *opt);
-
-  virtual TObjArray *Histos();
-
-  // Plotting Functions:
-  TH1 *PlotTrackStatus(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotTrackletStatus(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotNClustersTracklet(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotNClustersTrack(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotNTrackletsTrack(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotNTrackletsRowCross(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotFindableTracklets(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotNTracksSector(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotPHt(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotPHx(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotChi2(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotChargeCluster(const AliTRDtrackV1 *t = 0x0);
-  TH1 *PlotChargeTracklet(const AliTRDtrackV1 *t = 0x0);
-
-  virtual Bool_t PostProcess();
-  virtual Bool_t GetRefFigure(Int_t ifig);
-  
-  void SetRecoParam(AliTRDrecoParam *r);
-
-private:
-  AliTRDcheckDET(const AliTRDcheckDET &);
-  AliTRDcheckDET& operator=(const AliTRDcheckDET &);
-  void GetDistanceToTracklet(Double_t *dist, AliTRDseedV1 * const tracklet, AliTRDcluster * const c);
-  TH1* MakePlotChi2();
-  TH1* MakePlotNTracklets();
-  TH1* MakePlotPulseHeight();
-  Bool_t MakeBarPlot(TH1 *histo, Int_t Color);
-
-  AliTRDeventInfo *fEventInfo;         //! ESD Header
-  TMap *fTriggerNames;                 //! Containing trigger class names
-  AliTRDReconstructor *fReconstructor; // TRD Reconstructor
-  AliTRDgeometry *fGeo;                // TRD Geometry object
-    
-  ClassDef(AliTRDcheckDET, 1)
-};
-#endif
-
diff --git a/TRD/qaRec/AliTRDcheckESD.cxx b/TRD/qaRec/AliTRDcheckESD.cxx
deleted file mode 100644 (file)
index 82da643..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/////////////////////////////////////////////////////
-//
-// Check basic detector results at ESD level
-//   - Geometrical efficiency  
-//   - Tracking efficiency  
-//   - PID efficiency  
-//   - Refit efficiency  
-//
-// Author
-//   Alex Bercuci <A.Bercuci@gsi.de>
-//
-//////////////////////////////////////////////////////
-
-#include <TClonesArray.h>
-#include <TObjArray.h>
-#include <TObject.h>
-#include <TH2I.h>
-#include <TPad.h>
-#include <TLegend.h>
-#include <TGraphErrors.h>
-#include <TGraphAsymmErrors.h>
-#include <TFile.h>
-#include <TTree.h>
-#include <TROOT.h>
-#include <TChain.h>
-#include <TParticle.h>
-
-#include "AliLog.h"
-#include "AliAnalysisManager.h"
-#include "AliESDEvent.h"
-#include "AliESDkink.h"
-#include "AliMCEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliMCEventHandler.h"
-
-#include "AliESDtrack.h"
-#include "AliMCParticle.h"
-#include "AliPID.h"
-#include "AliStack.h"
-#include "AliTrackReference.h"
-
-#include "AliTRDcheckESD.h"
-
-ClassImp(AliTRDcheckESD)
-
-const Float_t AliTRDcheckESD::fgkxTPC = 290.;
-const Float_t AliTRDcheckESD::fgkxTOF = 365.;
-FILE* AliTRDcheckESD::fgFile = 0x0;
-
-//____________________________________________________________________
-AliTRDcheckESD::AliTRDcheckESD():
-  AliAnalysisTask("checkESD", "ESD checker for TRD info")
-  ,fStatus(0)
-  ,fESD(0x0)
-  ,fMC(0x0)
-  ,fHistos(0x0)
-  ,fResults(0x0)
-{
-  //
-  // Default constructor
-  //
-  SetMC(kTRUE);
-  DefineInput(0, TChain::Class());
-  DefineOutput(0, TObjArray::Class());
-}
-
-//____________________________________________________________________
-AliTRDcheckESD::~AliTRDcheckESD()
-{
-// Destructor
-  if(fHistos){
-    //fHistos->Delete();
-    delete fHistos;
-  }
-  if(fResults){
-    fResults->Delete();
-    delete fResults;
-  }
-}
-
-//____________________________________________________________________
-void AliTRDcheckESD::ConnectInputData(Option_t *)
-{
-  //
-  // Link the Input Data
-  //
-  TTree *tree = dynamic_cast<TChain*>(GetInputData(0));
-  if(tree) tree->SetBranchStatus("Tracks", 1);
-
-  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-  fESD = esdH ? esdH->GetEvent() : 0x0;
-
-  if(!HasMC()) return;
-  AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
-  fMC = mcH ? mcH->MCEvent() : 0x0;
-}
-
-//____________________________________________________________________
-void AliTRDcheckESD::CreateOutputObjects()
-{      
-  //
-  // Create Output Containers (TObjectArray containing 1D histograms)
-  //
-  OpenFile(0, "RECREATE");  
-  Histos();
-}
-
-//____________________________________________________________________
-Bool_t AliTRDcheckESD::GetRefFigure(Int_t ifig)
-{
-  if(!gPad){
-    AliWarning("Please provide a canvas to draw results.");
-    return kFALSE;
-  }
-  TGraph *g(0x0); TH1 *h(0x0); TLegend *leg(0x0);
-  switch(ifig){
-  case kNCl:
-    if(!fHistos || !(h=(TH1I*)fHistos->At(kNCl))) break;
-    h->Draw("c");
-    return kTRUE;
-  case kTRDstat:
-    leg=new TLegend(.5, .75, .98, .98);
-    leg->SetBorderSize(1); leg->SetFillColor(0);
-    leg->SetHeader("Tracking Efficiency");
-    for(Int_t ieff=0; ieff<4; ieff++){
-      if(!(g=GetGraph(ieff, ""))) break;
-      if(!ieff){
-        if((h=(TH1S*)gROOT->FindObject("frame"))) delete h;
-        h=new TH1S("h","",100, 0., 15.);
-        h->SetLineColor(1);h->SetLineWidth(1);
-        h->SetMinimum(0.2);h->SetMaximum(1.2);
-        h->SetXTitle("p_{T} [GeV/c]");
-        h->SetYTitle("Efficiency");
-        h->Draw();
-      }
-      g->Draw("pc"); leg->AddEntry(g, g->GetTitle(), "pl");
-    }
-    leg->Draw();
-    return kTRUE;
-  case kTRDmom:
-    leg=new TLegend(.6, .75, .98, .98);
-    leg->SetBorderSize(1); leg->SetFillColor(0);
-    leg->SetHeader("Energy loss");
-    for(Int_t ieff=0; ieff<2; ieff++){
-      if(!(g=GetGraph(4+ieff, ""))) break;
-      if(!ieff){
-        if((h=(TH1S*)gROOT->FindObject("frame"))) delete h;
-        h=new TH1S("h","",100, -0.5, 5.5);
-        h->SetLineColor(0);h->SetLineWidth(1);
-        h->SetMinimum(-0.5);h->SetMaximum(1.2);
-        h->SetXTitle("layer");
-        h->SetYTitle("p_{T}^{Inner TPC} - p_{T}^{layer} [GeV/c]");
-        h->Draw();
-      }
-      g->Draw("p"); leg->AddEntry(g, g->GetTitle(), "pl");
-    }
-    leg->Draw();
-    return kTRUE;
-  default:
-    break;
-  }
-  AliInfo(Form("Reference plot [%d] missing result", ifig));
-  return kFALSE;
-}
-
-//____________________________________________________________________
-TGraph* AliTRDcheckESD::GetGraph(Int_t id, Option_t *opt)
-{
-// Retrieve graph with "id"
-// Possible options are :
-//   "b" - build graph if none found
-//   "c" - clear existing graph
-
-  Bool_t kBUILD = strstr(opt, "b"), // build graph if none found
-         kCLEAR = strstr(opt, "c"); // clear existing graph
-
-  const Char_t *name[] = {
-    "Geo", "Trk", "Pid", "Ref", "Max06", "Mean09"
-  };
-  const Char_t *title[] = {
-    "TRD geometrical efficiency (TRDin/TPCout)"
-    ,"TRD tracking efficiency (TRDout/TRDin)"
-    ,"TRD PID efficiency (TRDpid/TRDin)"
-    ,"TRD refit efficiency (TRDrefit/TRDin)"
-    ,"TRD Eloss (Max/90% quantile)"
-    ,"TRD Eloss (Mean/60% quantile)"
-  };
-  const Int_t ngr = sizeof(name)/sizeof(Char_t*);
-  if(ngr != kNgraphs){
-    AliWarning("No of graphs defined different from definition");
-    return 0x0;
-  }
-
-  if(!fResults){
-    fResults = new TObjArray(kNgraphs);
-    fResults->SetOwner();
-    fResults->SetName("results");
-  }
-
-  TGraph *g = 0x0;
-  if((g = dynamic_cast<TGraph*>(fResults->At(id)))){
-    if(kCLEAR){ 
-      for(Int_t ip=g->GetN(); ip--;) g->RemovePoint(ip);
-    } else {
-      PutTrendValue(name[id], g->GetMean(2));
-      PutTrendValue(Form("%sRMS", name[id]), g->GetRMS(2));
-    }
-  } else {
-    if(kBUILD){
-      switch(id){
-      case 0:
-        g = new TGraphErrors();
-        g->SetMarkerStyle(7);g->SetMarkerColor(kBlack);
-        g->SetLineColor(kBlack);
-        break;
-      case 1:
-        g = new TGraphErrors();
-        g->SetMarkerStyle(7);g->SetMarkerColor(kRed);
-        g->SetLineColor(kRed);
-        break;
-      case 2:
-        g = new TGraphErrors();
-        g->SetMarkerStyle(7);g->SetMarkerColor(kBlue);
-        g->SetLineColor(kBlue);
-        break;
-      case 3:
-        g = new TGraphErrors();
-        g->SetMarkerStyle(7);g->SetMarkerColor(kGreen);
-        g->SetLineColor(kGreen);
-        break;
-      case 4:
-        g = new TGraphAsymmErrors(6);
-        g->SetMarkerStyle(22);g->SetMarkerColor(kRed);
-        g->SetLineColor(kBlack);g->SetLineWidth(2);
-        break;
-      case 5:
-        g = new TGraphAsymmErrors(6);
-        g->SetMarkerStyle(21);
-        g->SetLineColor(kRed);g->SetLineWidth(2);
-        break;
-      default:
-        AliWarning(Form("Graph index[%d] missing/not defined.", id));
-        return 0x0;
-      }
-      g->SetNameTitle(name[id], title[id]);
-      fResults->AddAt(g, id);
-    }
-  }
-  return g;
-}
-
-//____________________________________________________________________
-void AliTRDcheckESD::Exec(Option_t *){
-  //
-  // Run the Analysis
-  //
-  if(!fESD){
-    AliError("ESD event missing.");
-    return;
-  }
-
-  // Get MC information if available
-  AliStack * fStack = 0x0;
-  if(HasMC()){
-    if(!fMC){ 
-      AliWarning("MC event missing");
-      SetMC(kFALSE);
-    } else {
-      if(!(fStack = fMC->Stack())){
-        AliWarning("MC stack missing");
-        SetMC(kFALSE);
-      }
-    }
-  }
-  Bool_t bTRDin(0), bTRDout(0), bTRDpid(0);
-
-  AliESDtrack *esdTrack = 0x0;
-  for(Int_t itrk = 0; itrk < fESD->GetNumberOfTracks(); itrk++){
-    bTRDin=0;bTRDout=0;bTRDpid=0;
-    esdTrack = fESD->GetTrack(itrk);
-
-//     if(esdTrack->GetNcls(1)) nTPC++;
-//     if(esdTrack->GetNcls(2)) nTRD++;
-
-    // track status
-    ULong_t status = esdTrack->GetStatus();
-    //PrintStatus(status);
-
-    // define TPC out tracks
-    if(!Bool_t(status & AliESDtrack::kTPCout)) continue;
-    if(esdTrack->GetKinkIndex(0) > 0) continue;
-
-    // TRD PID
-    Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
-    // pid quality
-    //esdTrack->GetTRDntrackletsPID();
-
-    // look at external track param
-    const AliExternalTrackParam *op = esdTrack->GetOuterParam();
-    const AliExternalTrackParam *ip = esdTrack->GetInnerParam();
-    Double_t xyz[3];
-    if(op){
-      op->GetXYZ(xyz);
-      op->Global2LocalPosition(xyz, op->GetAlpha());
-      //printf("op @ X[%7.3f]\n", xyz[0]);
-    }
-
-    // read MC info
-    if(!HasMC()) continue;
-
-    Int_t fLabel = esdTrack->GetLabel();
-    if(TMath::Abs(fLabel) > fStack->GetNtrack()) continue; 
-    
-    // read MC particle
-    AliMCParticle *mcParticle = 0x0; 
-    if(!(mcParticle = (AliMCParticle*) fMC->GetTrack(TMath::Abs(fLabel)))){
-      AliWarning(Form("MC particle missing. Label[ %d].", fLabel));
-      continue;
-    }
-
-    AliTrackReference *ref = 0x0; 
-    Int_t nRefs = mcParticle->GetNumberOfTrackReferences();
-    if(!nRefs){
-      AliWarning(Form("Track refs missing. Label[%d].", fLabel));
-      continue;
-    }
-    Int_t iref = 0;
-    while(iref<nRefs){
-      ref = mcParticle->GetTrackReference(iref);
-      if(ref->LocalX() > fgkxTPC) break;
-      ref=0x0; iref++;
-    }
-
-    // read TParticle
-    //TParticle *tParticle = mcParticle->Particle(); 
-    //Int_t fPdg = tParticle->GetPdgCode();
-    // reject secondaries
-    //if(!tParticle->IsPrimary()) continue;
-
-    if(ref){ 
-      if(ref->LocalX() > fgkxTOF){ // track skipping TRD fiducial volume
-        ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0));
-      } else {
-        bTRDin=1;
-        if(esdTrack->GetNcls(2)) bTRDout=1;
-        if(esdTrack->GetTRDntrackletsPID()>=4) bTRDpid=1;
-      }
-    } else { // track stopped in TPC 
-      ref = mcParticle->GetTrackReference(TMath::Max(iref-1, 0));
-    }
-    // get the MC pt !!
-    Float_t pt = ref->Pt();
-
-    TH2 *h = (TH2I*)fHistos->At(kTRDstat);
-    if(status & AliESDtrack::kTPCout) h->Fill(pt, kTPCout);
-    if(/*status & AliESDtrack::k*/bTRDin) h->Fill(pt, kTRDin);
-    if(/*status & AliESDtrack::k*/bTRDout){ 
-      ((TH1*)fHistos->At(kNCl))->Fill(esdTrack->GetNcls(2));
-      h->Fill(pt, kTRDout);
-    }
-    if(/*status & AliESDtrack::k*/bTRDpid) h->Fill(pt, kTRDpid);
-    if(status & AliESDtrack::kTRDrefit) h->Fill(pt, kTRDref);
-
-    if(ip){
-      h = (TH2I*)fHistos->At(kTRDmom);
-      Float_t pp(0.);
-      for(Int_t ily=6; ily--;){
-        if((pp=esdTrack->GetTRDmomentum(ily))<0.) continue;
-        h->Fill(ip->GetP()-pp, ily);
-      }
-    }
-  }  
-  PostData(0, fHistos);
-}
-
-//____________________________________________________________________
-TObjArray* AliTRDcheckESD::Histos()
-{
-// Retrieve histograms array if already build or build it
-
-  if(fHistos) return fHistos;
-
-  fHistos = new TObjArray(kNhistos);
-  //fHistos->SetOwner(kTRUE);
-  
-  TH1 *h = 0x0;
-
-  // clusters per tracklet
-  if(!(h = (TH1I*)gROOT->FindObject("hNCl"))){
-    h = new TH1I("hNCl", "Clusters per TRD track", 100, 0., 200.);
-    h->GetXaxis()->SetTitle("N_{cl}^{TRD}");
-    h->GetYaxis()->SetTitle("entries");
-  } else h->Reset();
-  fHistos->AddAt(h, kNCl);
-
-  // status bits histogram
-  if(!(h = (TH2I*)gROOT->FindObject("hTRDstat"))){
-    h = new TH2I("hTRDstat", "TRD status bits", 100, 0., 20., kNbits, .5, kNbits+.5);
-    h->GetXaxis()->SetTitle("p_{T} [GeV/c]");
-    h->GetYaxis()->SetTitle("status bits");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  fHistos->AddAt(h, kTRDstat);
-
-  // energy loss
-  if(!(h = (TH2I*)gROOT->FindObject("hTRDmom"))){
-    h = new TH2I("hTRDmom", "TRD energy loss", 100, -1., 2., 6, -0.5, 5.5);
-    h->GetXaxis()->SetTitle("p_{inner} - p_{ly} [GeV/c]");
-    h->GetYaxis()->SetTitle("layer");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  fHistos->AddAt(h, kTRDmom);
-
-  return fHistos;
-}
-
-//____________________________________________________________________
-Bool_t AliTRDcheckESD::Load(const Char_t *filename, const Char_t *name)
-{
-// Load data from performance file
-
-  if(!TFile::Open(filename)){
-    AliWarning(Form("Couldn't open file %s.", filename));
-    return kFALSE;
-  }
-  TObjArray *o = 0x0;
-  if(!(o = (TObjArray*)gFile->Get(name ? name : GetName()))){
-    AliWarning("Missing histogram container.");
-    return kFALSE;
-  }
-  fHistos = (TObjArray*)o->Clone(GetName());
-  gFile->Close();
-  return kTRUE;
-}
-
-//_______________________________________________________
-Bool_t AliTRDcheckESD::PutTrendValue(const Char_t *name, Double_t val)
-{
-// Dump trending value to default file
-
-  if(!fgFile){
-    fgFile = fopen("TRD.Performance.txt", "at");
-  }
-  fprintf(fgFile, "%s_%s %f\n", GetName(), name, val);
-  return kTRUE;
-}
-
-//____________________________________________________________________
-void AliTRDcheckESD::Terminate(Option_t *)
-{
-// Steer post-processing 
-
-
-  // geometrical efficiency
-  TH2I *h2 = (TH2I*)fHistos->At(kTRDstat);
-  TH1 *h1[2] = {0x0, 0x0};
-  h1[0] = h2->ProjectionX("checkESDx0", kTPCout, kTPCout);
-  h1[1] = h2->ProjectionX("checkESDx1", kTRDin, kTRDin);
-  Process(h1, (TGraphErrors*)GetGraph(0));
-  delete h1[0];delete h1[1];
-
-  // tracking efficiency
-  h1[0] = h2->ProjectionX("checkESDx0", kTRDin, kTRDin);
-  h1[1] = h2->ProjectionX("checkESDx1", kTRDout, kTRDout);
-  Process(h1, (TGraphErrors*)GetGraph(1));
-  delete h1[1];
-
-  // PID efficiency
-  h1[1] = h2->ProjectionX("checkESDx1", kTRDpid, kTRDpid);
-  Process(h1, (TGraphErrors*)GetGraph(2));
-  delete h1[1];
-
-  // Refit efficiency
-  h1[1] = h2->ProjectionX("checkESDx1", kTRDref, kTRDref);
-  Process(h1, (TGraphErrors*)GetGraph(3));
-  delete h1[1];
-  if(!(h2 = dynamic_cast<TH2I*>(fHistos->At(kTRDmom)))) return;
-  TGraphAsymmErrors *g06 = (TGraphAsymmErrors*)GetGraph(4), *g09 = (TGraphAsymmErrors*)GetGraph(5);
-  TAxis *ax=h2->GetXaxis();
-  const Int_t nq(4);
-  const Double_t xq[nq] = {0.05, 0.2, 0.8, 0.95};
-  Double_t yq[nq];
-  for(Int_t ily=6; ily--;){
-    h1[0] = h2->ProjectionX("checkESDp0", ily+1, ily+1);
-    h1[0]->GetQuantiles(nq,yq,xq);
-    g06->SetPoint(ily, Float_t(ily), ax->GetBinCenter(h1[0]->GetMaximumBin()));
-    g06->SetPointError(ily, 0., 0., TMath::Abs(yq[0]), yq[3]);
-    g09->SetPoint(ily, Float_t(ily), h1[0]->GetMean());
-    g09->SetPointError(ily, 0., 0., TMath::Abs(yq[1]), yq[2]);
-
-    //printf(" max[%f] mean[%f] q[%f %f %f %f]\n", ax->GetBinCenter(h1[0]->GetMaximumBin()), h1[0]->GetMean(), yq[0], yq[1], yq[2], yq[3]);
-    delete h1[0];
-  }
-}
-
-//____________________________________________________________________
-void AliTRDcheckESD::Process(TH1 **h1, TGraphErrors *g)
-{
-// Generic function to process one reference plot
-
-  Int_t n1 = 0, n2 = 0, ip=0;
-  Double_t eff = 0.;
-
-  TAxis *ax = h1[0]->GetXaxis();
-  for(Int_t ib=1; ib<=ax->GetNbins(); ib++){
-    if(!(n1 = (Int_t)h1[0]->GetBinContent(ib))) continue;
-    n2 = (Int_t)h1[1]->GetBinContent(ib);
-    eff = n2/Float_t(n1);
-
-    ip=g->GetN();
-    g->SetPoint(ip, ax->GetBinCenter(ib), eff);
-    g->SetPointError(ip, 0., n2 ? eff*TMath::Sqrt(1./n1+1./n2) : 0.);
-  }
-}  
-
-//____________________________________________________________________
-void AliTRDcheckESD::PrintStatus(ULong_t status)
-{
-// Dump track status to stdout
-
-  printf("ITS[i(%d) o(%d) r(%d)] TPC[i(%d) o(%d) r(%d) p(%d)] TRD[i(%d) o(%d) r(%d) p(%d) s(%d)] HMPID[o(%d) p(%d)]\n"
-    ,Bool_t(status & AliESDtrack::kITSin)
-    ,Bool_t(status & AliESDtrack::kITSout)
-    ,Bool_t(status & AliESDtrack::kITSrefit)
-    ,Bool_t(status & AliESDtrack::kTPCin)
-    ,Bool_t(status & AliESDtrack::kTPCout)
-    ,Bool_t(status & AliESDtrack::kTPCrefit)
-    ,Bool_t(status & AliESDtrack::kTPCpid)
-    ,Bool_t(status & AliESDtrack::kTRDin)
-    ,Bool_t(status & AliESDtrack::kTRDout)
-    ,Bool_t(status & AliESDtrack::kTRDrefit)
-    ,Bool_t(status & AliESDtrack::kTRDpid)
-    ,Bool_t(status & AliESDtrack::kTRDStop)
-    ,Bool_t(status & AliESDtrack::kHMPIDout)
-    ,Bool_t(status & AliESDtrack::kHMPIDpid)
-  );
-}
-
diff --git a/TRD/qaRec/AliTRDcheckESD.h b/TRD/qaRec/AliTRDcheckESD.h
deleted file mode 100644 (file)
index d07d508..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef ALITRDCHECKESD_H
-#define ALITRDCHECKESD_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDcheckESD.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-/////////////////////////////////////////////////////
-//
-// Check basic detector results at ESD level
-//
-// Author
-//   Alex Bercuci <A.Bercuci@gsi.de>
-//
-//////////////////////////////////////////////////////
-
-#ifndef ALIANALYSISTASK_H
-#include "AliAnalysisTask.h"
-#endif
-
-class AliESDEvent;
-class AliMCEvent;
-class TH1;
-class TObjArray;
-class TGraph;
-class TGraphErrors;
-class AliTRDcheckESD : public AliAnalysisTask {
-public:
-  enum ETRDcheckESDstatus {
-    kMC = BIT(0)
-  };
-  enum ETRDcheckESDhistos {
-    kNCl  = 0    // number of clusters per track
-   ,kTRDstat     // TRD tracks status
-   ,kTRDmom      // TRD track momentum
-   ,kNhistos = 3 // number of histograms
-   ,kNgraphs = 6 // number of graphs
-  };
-  enum ETRDcheckESDbits {
-    kTPCout = 1 // track left TPC
-   ,kTRDin      // track reach TRD fiducial volume
-   ,kTRDout     // track reconstructed in TRD
-   ,kTRDpid     // PID calculated in TRD
-   ,kTRDref     // track refitted in TRD
-   ,kNbits  = 5 // number of check bits
-  };
-  AliTRDcheckESD();
-  virtual ~AliTRDcheckESD();
-  
-  void          ConnectInputData(Option_t *);
-  void          CreateOutputObjects();
-  Bool_t        GetRefFigure(Int_t ifig);
-  void          Exec(Option_t *);
-
-  Bool_t        HasMC() const { return TESTBIT(fStatus, kMC);}
-  Bool_t        Load(const Char_t *fn, const Char_t *name=0x0);
-  void          SetMC(Bool_t mc = kTRUE) { mc ? SETBIT(fStatus, kMC) : CLRBIT(fStatus, kMC);}
-  Bool_t        PutTrendValue(const Char_t *name, Double_t val);
-  void          Terminate(Option_t *);
-
-private:
-  static const Float_t fgkxTPC; // end radial position of TPC
-  static const Float_t fgkxTOF; // start radial position of TOF
-
-  AliTRDcheckESD(const AliTRDcheckESD&);
-  AliTRDcheckESD& operator=(const AliTRDcheckESD&);
-  TGraph*       GetGraph(Int_t id, Option_t *opt="bc");
-  TObjArray*    Histos();
-  void          Process(TH1 **h, TGraphErrors *g);
-  void          PrintStatus(ULong_t s);
-
-  Int_t            fStatus;            // bit mask for controlling the task
-  AliESDEvent      *fESD;              // ESD event
-  AliMCEvent       *fMC;               // MC event
-  TObjArray        *fHistos;           // QA histos
-  TObjArray        *fResults;          // QA graphs
-  static FILE *fgFile;                 //! trend file streamer
-  ClassDef(AliTRDcheckESD, 3)          // user oriented TRD analysis based on ESD-MC data
-};
-#endif
diff --git a/TRD/qaRec/AliTRDcheckPID.cxx b/TRD/qaRec/AliTRDcheckPID.cxx
deleted file mode 100644 (file)
index 389954e..0000000
+++ /dev/null
@@ -1,1075 +0,0 @@
-//////////////////////////////////////////////////////
-//
-// PID performance checker of the TRD
-//
-// Performs checks of ESD information for TRD-PID and recalculate PID based on OCDB information
-// Also provides performance plots on detector based on the PID information - for the moment only 
-// MC source is used but V0 is also possible. Here is a list of detector performance checks
-//   - Integrated dE/dx per chamber
-//   - <PH> as function of time bin and local radial position
-//   - number of clusters/tracklet 
-//   - number of tracklets/track 
-//
-// Author : Alex Wilk <wilka@uni-muenster.de>
-//          Alex Bercuci <A.Bercuci@gsi.de>
-//          Markus Fasel <M.Fasel@gsi.de>
-//
-///////////////////////////////////////////////////////
-
-#include "TAxis.h"
-#include "TROOT.h"
-#include "TPDGCode.h"
-#include "TCanvas.h"
-#include "TF1.h"
-#include "TH1F.h"
-#include "TH1D.h"
-#include "TH2F.h"
-#include "TProfile.h"
-#include "TProfile2D.h"
-#include "TGraph.h"
-#include "TGraphErrors.h"
-#include "TLegend.h"
-
-#include <TClonesArray.h>
-#include <TObjArray.h>
-#include <TList.h>
-
-#include "AliESDEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliTrackReference.h"
-
-#include "AliAnalysisTask.h"
-
-#include "AliTRDtrackerV1.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDcluster.h"
-#include "AliTRDReconstructor.h"
-#include "AliCDBManager.h"
-#include "AliTRDpidUtil.h"
-
-#include "AliTRDcheckPID.h"
-#include "info/AliTRDtrackInfo.h"
-
-ClassImp(AliTRDcheckPID)
-
-//________________________________________________________________________
-AliTRDcheckPID::AliTRDcheckPID() 
-  :AliTRDrecoTask("checkPID", "TRD PID checker")
-  ,fReconstructor(0x0)
-  ,fUtil(0x0)
-  ,fGraph(0x0)
-  ,fEfficiency(0x0)
-  ,fMomentumAxis(0x0)
-  ,fMinNTracklets(AliTRDgeometry::kNlayer)
-  ,fMaxNTracklets(AliTRDgeometry::kNlayer)
- {
-  //
-  // Default constructor
-  //
-
-  fReconstructor = new AliTRDReconstructor();
-  fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
-
-  // Initialize momentum axis with default values
-  Double_t defaultMomenta[AliTRDCalPID::kNMom+1];
-  for(Int_t imom = 0; imom < AliTRDCalPID::kNMom+1; imom++)
-    defaultMomenta[imom] = AliTRDCalPID::GetMomentumBinning(imom);
-  SetMomentumBinning(AliTRDCalPID::kNMom, defaultMomenta);
-
-  fUtil = new AliTRDpidUtil();
-  InitFunctorList();
-}
-
-
-//________________________________________________________________________
-AliTRDcheckPID::~AliTRDcheckPID() 
-{
- if(fGraph){fGraph->Delete(); delete fGraph;}
- if(fReconstructor) delete fReconstructor;
- if(fUtil) delete fUtil;
-}
-
-
-//________________________________________________________________________
-void AliTRDcheckPID::CreateOutputObjects()
-{
-  // Create histograms
-  // Called once
-
-  OpenFile(0, "RECREATE");
-  fContainer = Histos();
-}
-
-
-//_______________________________________________________
-TObjArray * AliTRDcheckPID::Histos(){
-
-  //
-  // Create QA histograms
-  //
-  if(fContainer) return fContainer;
-
-  Int_t xBins = AliPID::kSPECIES*fMomentumAxis->GetNbins(); 
-  fContainer = new TObjArray(); fContainer->Expand(kNPlots);
-
-  const Float_t epsilon = 1./(2*(AliTRDpidUtil::kBins-1));     // get nice histos with bin center at 0 and 1
-
-  // histos of the electron probability of all 5 particle species and 11 momenta for the 2-dim LQ method 
-  fEfficiency = new TObjArray(3);
-  fEfficiency->SetOwner(); fEfficiency->SetName("Efficiency");
-  fContainer->AddAt(fEfficiency, kEfficiency);
-  
-  TH1 *h = 0x0;
-  if(!(h = (TH2F*)gROOT->FindObject("PID_LQ"))){
-    h = new TH2F("PID_LQ", "", xBins, -0.5, xBins - 0.5,
-      AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon);
-  } else h->Reset();
-  fEfficiency->AddAt(h, AliTRDpidUtil::kLQ);
-
-  // histos of the electron probability of all 5 particle species and 11 momenta for the neural network method
-  if(!(h = (TH2F*)gROOT->FindObject("PID_NN"))){
-    h = new TH2F("PID_NN", "", 
-      xBins, -0.5, xBins - 0.5,
-      AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon);
-  } else h->Reset();
-  fEfficiency->AddAt(h, AliTRDpidUtil::kNN);
-
-  // histos of the electron probability of all 5 particle species and 11 momenta for the ESD output
-  if(!(h = (TH2F*)gROOT->FindObject("PID_ESD"))){
-    h = new TH2F("PID_ESD", "", 
-      xBins, -0.5, xBins - 0.5,
-      AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon);
-  } else h->Reset();
-  fEfficiency->AddAt(h, AliTRDpidUtil::kESD);
-
-  // histos of the dE/dx distribution for all 5 particle species and 11 momenta 
-  if(!(h = (TH2F*)gROOT->FindObject("dEdx"))){
-    h = new TH2F("dEdx", "", 
-      xBins, -0.5, xBins - 0.5,
-      200, 0, 10000);
-  } else h->Reset();
-  fContainer->AddAt(h, kdEdx);
-
-  // histos of the dE/dx slices for all 5 particle species and 11 momenta 
-  if(!(h = (TH2F*)gROOT->FindObject("dEdxSlice"))){
-    h = new TH2F("dEdxSlice", "", 
-      xBins*AliTRDpidUtil::kLQslices, -0.5, xBins*AliTRDpidUtil::kLQslices - 0.5,
-      200, 0, 5000);
-  } else h->Reset();
-  fContainer->AddAt(h, kdEdxSlice);
-
-  // histos of the pulse height distribution for all 5 particle species and 11 momenta 
-  TObjArray *fPH = new TObjArray(2);
-  fPH->SetOwner(); fPH->SetName("PH");
-  fContainer->AddAt(fPH, kPH);
-  if(!(h = (TProfile2D*)gROOT->FindObject("PHT"))){
-    h = new TProfile2D("PHT", "", 
-      xBins, -0.5, xBins - 0.5,
-      AliTRDtrackerV1::GetNTimeBins(), -0.5, AliTRDtrackerV1::GetNTimeBins() - 0.5);
-  } else h->Reset();
-  fPH->AddAt(h, 0);
-  if(!(h = (TProfile2D*)gROOT->FindObject("PHX"))){
-    h = new TProfile2D("PHX", "", 
-      xBins, -0.5, xBins - 0.5,
-      AliTRDtrackerV1::GetNTimeBins(), 0., .5*AliTRDgeometry::CamHght()+AliTRDgeometry::CdrHght());
-  } else h->Reset();
-  fPH->AddAt(h, 1);
-
-  // histos of the number of clusters distribution for all 5 particle species and 11 momenta 
-  if(!(h = (TH2F*)gROOT->FindObject("NClus"))){
-    h = new TH2F("NClus", "", 
-      xBins, -0.5, xBins - 0.5,
-      50, -0.5, 49.5);
-  } else h->Reset();
-  fContainer->AddAt(h, kNClus);
-
-
-  // momentum distributions - absolute and in momentum bins
-  if(!(h = (TH1F*)gROOT->FindObject("hMom"))){
-    h = new TH1F("hMom", "momentum distribution", fMomentumAxis->GetNbins(), fMomentumAxis->GetXmin(), fMomentumAxis->GetXmax());
-  } else h->Reset();
-  fContainer->AddAt(h, kMomentum);
-  
-  if(!(h = (TH1F*)gROOT->FindObject("hMomBin"))){
-    h = new TH1F("hMomBin", "momentum distribution in momentum bins", fMomentumAxis->GetNbins(), fMomentumAxis->GetXmin(), fMomentumAxis->GetXmax());
-  } else h->Reset();
-  fContainer->AddAt(h, kMomentumBin);
-
-  // Number of tracklets per track
-  if(!(h = (TH2F*)gROOT->FindObject("nTracklets"))){
-    h = new TH2F("nTracklets", "", 
-      xBins, -0.5, xBins - 0.5,
-      AliTRDgeometry::kNlayer, 0.5, AliTRDgeometry::kNlayer+.5);
-  } else h->Reset();
-  fContainer->AddAt(h, kNTracklets);
-
-  return fContainer;
-}
-
-
-//________________________________________________________________________
-Bool_t AliTRDcheckPID::CheckTrackQuality(const AliTRDtrackV1* track) const
-{
-  //
-  // Check if the track is ok for PID
-  //
-  
-  Int_t ntracklets = track->GetNumberOfTracklets();
-  if(ntracklets >= fMinNTracklets && ntracklets <= fMaxNTracklets) return 1;
-//   if(!fESD)
-//     return 0;
-
-  return 0;
-}
-
-//________________________________________________________________________
-Int_t AliTRDcheckPID::CalcPDG(AliTRDtrackV1* track) 
-{
-// Documentation to come
-
-  track -> SetReconstructor(fReconstructor);
-  (const_cast<AliTRDrecoParam*>(fReconstructor->GetRecoParam()))->SetPIDNeuralNetwork();
-  track -> CookPID();
-
-  if(track -> GetPID(AliPID::kElectron) > track -> GetPID(AliPID::kMuon) + track -> GetPID(AliPID::kPion)  + track -> GetPID(AliPID::kKaon) + track -> GetPID(AliPID::kProton)){
-    return kElectron;
-  }
-  else if(track -> GetPID(kProton) > track -> GetPID(AliPID::kPion)  && track -> GetPID(AliPID::kProton) > track -> GetPID(AliPID::kKaon)  && track -> GetPID(AliPID::kProton) > track -> GetPID(AliPID::kMuon)){
-    return kProton;
-  }
-  else if(track -> GetPID(AliPID::kKaon) > track -> GetPID(AliPID::kMuon)  && track -> GetPID(AliPID::kKaon) > track -> GetPID(AliPID::kPion)){
-    return kKPlus;
-  }
-  else if(track -> GetPID(AliPID::kMuon) > track -> GetPID(AliPID::kPion)){
-    return kMuonPlus;
-  }
-  else{
-    return kPiPlus;
-  }
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotLQ(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(!fkESD){
-    AliWarning("No ESD info available.");
-    return 0x0;
-  }
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-
-  ULong_t status;
-  status = fkESD -> GetStatus();
-  if(!(status&AliESDtrack::kTRDin)) return 0x0;
-
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  if(!(fEfficiency = dynamic_cast<TObjArray *>(fContainer->At(kEfficiency)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  TH2F *hPIDLQ = 0x0;
-  if(!(hPIDLQ = dynamic_cast<TH2F *>(fEfficiency->At(AliTRDpidUtil::kLQ)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  AliTRDtrackV1 cTrack(*fkTrack);
-  cTrack.SetReconstructor(fReconstructor);
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else{
-    //AliWarning("No MC info available!");
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;
-
-  (const_cast<AliTRDrecoParam*>(fReconstructor->GetRecoParam()))->SetPIDNeuralNetwork(kFALSE);
-  cTrack.CookPID();
-  if(cTrack.GetNumberOfTrackletsPID() < fMinNTracklets) return 0x0;
-
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  hPIDLQ -> Fill(FindBin(species, momentum), cTrack.GetPID(AliPID::kElectron));
-  return hPIDLQ;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotNN(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(!fkESD){
-    AliWarning("No ESD info available.");
-    return 0x0;
-  }
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  ULong_t status;
-  status = fkESD -> GetStatus();
-  if(!(status&AliESDtrack::kTRDin)) return 0x0;
-
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  if(!(fEfficiency = dynamic_cast<TObjArray *>(fContainer->At(kEfficiency)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  TH2F *hPIDNN;
-  if(!(hPIDNN = dynamic_cast<TH2F *>(fEfficiency->At(AliTRDpidUtil::kNN)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  AliTRDtrackV1 cTrack(*fkTrack);
-  cTrack.SetReconstructor(fReconstructor);
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;
-
-  (const_cast<AliTRDrecoParam*>(fReconstructor->GetRecoParam()))->SetPIDNeuralNetwork();
-  cTrack.CookPID();
-  if(cTrack.GetNumberOfTrackletsPID() < fMinNTracklets) return 0x0;
-
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  hPIDNN -> Fill(FindBin(species, momentum), cTrack.GetPID(AliPID::kElectron));
-  return hPIDNN;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotESD(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(!fkESD){
-    AliWarning("No ESD info available.");
-    return 0x0;
-  }
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  ULong_t status;
-  status = fkESD -> GetStatus();
-  if(!(status&AliESDtrack::kTRDin)) return 0x0;
-
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  if(fkTrack->GetNumberOfTrackletsPID() < fMinNTracklets) return 0x0;
-  
-  if(!(fEfficiency = dynamic_cast<TObjArray *>(fContainer->At(kEfficiency)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  TH2F *hPIDESD = 0x0;
-  if(!(hPIDESD = dynamic_cast<TH2F *>(fEfficiency->At(AliTRDpidUtil::kESD)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    AliTRDtrackV1 cTrack(*fkTrack);
-    cTrack.SetReconstructor(fReconstructor);
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;
-
-//   Double32_t pidESD[AliPID::kSPECIES];
-  const Double32_t *pidESD = fkESD->GetResponseIter();
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  hPIDESD -> Fill(FindBin(species, momentum), pidESD[0]);
-  return hPIDESD;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotdEdx(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TH2F *hdEdx;
-  if(!(hdEdx = dynamic_cast<TH2F *>(fContainer->At(kdEdx)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  AliTRDtrackV1 cTrack(*fkTrack);
-  cTrack.SetReconstructor(fReconstructor);
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  if(!IsInRange(momentum)) return 0x0;
-
-  (const_cast<AliTRDrecoParam*>(fReconstructor->GetRecoParam()))->SetPIDNeuralNetwork(kFALSE);
-  Float_t sumdEdx = 0;
-  Int_t iBin = FindBin(species, momentum);
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-    sumdEdx = 0;
-    tracklet = cTrack.GetTracklet(iChamb);
-    if(!tracklet) continue;
-    tracklet -> CookdEdx(AliTRDpidUtil::kLQslices);
-    for(Int_t i = 3; i--;) sumdEdx += tracklet->GetdEdx()[i];
-    hdEdx -> Fill(iBin, sumdEdx);
-  }
-  return hdEdx;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotdEdxSlice(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TH2F *hdEdxSlice;
-  if(!(hdEdxSlice = dynamic_cast<TH2F *>(fContainer->At(kdEdxSlice)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  AliTRDtrackV1 cTrack(*fkTrack);
-  cTrack.SetReconstructor(fReconstructor);
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;
-
-  (const_cast<AliTRDrecoParam*>(fReconstructor->GetRecoParam()))->SetPIDNeuralNetwork(kFALSE);
-  Int_t iMomBin = fMomentumAxis->FindBin(momentum);
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  Float_t *fdEdx;
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-    tracklet = cTrack.GetTracklet(iChamb);
-    if(!tracklet) continue;
-    tracklet -> CookdEdx(AliTRDpidUtil::kLQslices);
-    fdEdx = const_cast<Float_t *>(tracklet->GetdEdx());
-    for(Int_t iSlice = 0; iSlice < AliTRDpidUtil::kLQslices; iSlice++){
-      hdEdxSlice -> Fill(species * fMomentumAxis->GetNbins() * AliTRDpidUtil::kLQslices + (iMomBin-1) * AliTRDpidUtil::kLQslices + iSlice, fdEdx[iSlice]);
-    }
-  }  
-
-  return hdEdxSlice;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotPH(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TObjArray *arr = 0x0;
-  TProfile2D *hPHX, *hPHT;
-  if(!(arr = dynamic_cast<TObjArray *>(fContainer->At(kPH)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-  hPHT = (TProfile2D*)arr->At(0);
-  hPHX = (TProfile2D*)arr->At(1);
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    AliTRDtrackV1 cTrack(*fkTrack);
-    cTrack.SetReconstructor(fReconstructor);
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;;
-
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *cluster = 0x0;
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  Int_t iBin = FindBin(species, momentum);
-  for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-    tracklet = fkTrack->GetTracklet(iChamb);
-    if(!tracklet) continue;
-    Float_t x0 = tracklet->GetX0(); 
-    for(Int_t ic = 0; ic < AliTRDtrackerV1::GetNTimeBins(); ic++){
-      if(!(cluster = tracklet->GetClusters(ic))) continue;
-      hPHT -> Fill(iBin, cluster->GetLocalTimeBin(), TMath::Abs(cluster->GetQ()));
-      hPHX -> Fill(iBin, x0 - cluster->GetX(), tracklet->GetdQdl(ic));
-    }
-  }
-  return hPHT;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotNClus(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TH2F *hNClus;
-  if(!(hNClus = dynamic_cast<TH2F *>(fContainer->At(kNClus)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    AliTRDtrackV1 cTrack(*fkTrack);
-    cTrack.SetReconstructor(fReconstructor);
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(!IsInRange(momentum)) return 0x0;
-
-  Int_t species = AliTRDpidUtil::AliTRDpidUtil::Pdg2Pid(pdg);
-  Int_t iBin = FindBin(species, momentum); 
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-    tracklet = fkTrack->GetTracklet(iChamb);
-    if(!tracklet) continue;
-    hNClus -> Fill(iBin, tracklet->GetN());
-  }
-
-  return hNClus;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotNTracklets(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  TH2F *hTracklets;
-  if(!(hTracklets = dynamic_cast<TH2F *>(fContainer->At(kNTracklets)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-  AliTRDtrackV1 cTrack(*fkTrack);
-  cTrack.SetReconstructor(fReconstructor);
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  Int_t species = AliTRDpidUtil::Pdg2Pid(pdg);
-  if(!IsInRange(momentum)) return 0x0;
-
-  Int_t iBin = FindBin(species, momentum);
-  hTracklets -> Fill(iBin, cTrack.GetNumberOfTracklets());
-  return hTracklets;
-}
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotMom(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TH1F *hMom;
-  if(!(hMom = dynamic_cast<TH1F *>(fContainer->At(kMomentum)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    AliTRDtrackV1 cTrack(*fkTrack);
-    cTrack.SetReconstructor(fReconstructor);
-    momentum = cTrack.GetMomentum(0);
-    pdg = CalcPDG(&cTrack);
-  }
-  if(IsInRange(momentum)) hMom -> Fill(momentum);
-  return hMom;
-}
-
-
-//_______________________________________________________
-TH1 *AliTRDcheckPID::PlotMomBin(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the probabilities for electrons using 2-dim LQ
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  
-  if(!CheckTrackQuality(fkTrack)) return 0x0;
-  
-  TH1F *hMomBin;
-  if(!(hMomBin = dynamic_cast<TH1F *>(fContainer->At(kMomentumBin)))){
-    AliWarning("No Histogram defined.");
-    return 0x0;
-  }
-
-
-  Int_t pdg = 0;
-  Float_t momentum = 0.;
-
-  if(fkMC){
-    if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
-    pdg = fkMC->GetPDG();
-  } else {
-    //AliWarning("No MC info available!");
-    AliTRDtrackV1 cTrack(*fkTrack);
-    cTrack.SetReconstructor(fReconstructor);
-    momentum = cTrack.GetMomentum(0);
-  }
-  if(IsInRange(momentum)) hMomBin -> Fill(fMomentumAxis->FindBin(momentum));
-  return hMomBin;
-}
-
-
-//________________________________________________________
-Bool_t AliTRDcheckPID::GetRefFigure(Int_t ifig)
-{
-// Steering function to retrieve performance plots
-
-  Bool_t kFIRST = kTRUE;
-  TGraphErrors *g = 0x0;
-  TAxis *ax = 0x0;
-  TObjArray *arr = 0x0;
-  TH1 *h1 = 0x0, *h=0x0;
-  TH2 *h2 = 0x0;
-  TList *content = 0x0;
-  switch(ifig){
-  case kEfficiency:{
-    gPad->Divide(2, 1, 1.e-5, 1.e-5);
-    TList *l=gPad->GetListOfPrimitives();
-    TVirtualPad *pad = ((TVirtualPad*)l->At(0));pad->cd();
-    pad->SetMargin(0.1, 0.01, 0.1, 0.01);
-
-    TLegend *legEff = new TLegend(.65, .75, .98, .98);
-    legEff->SetBorderSize(1);
-    legEff->SetFillColor(0);
-    h=new TH1S("hEff", "", 1, .5, 11.);
-    h->SetLineColor(1);h->SetLineWidth(1);
-    ax = h->GetXaxis();
-    ax->SetTitle("p [GeV/c]");
-    ax->SetRangeUser(.5, 11.);
-    ax->SetMoreLogLabels();
-    ax = h->GetYaxis();
-    ax->SetTitle("#epsilon_{#pi} [%]");
-    ax->CenterTitle();
-    ax->SetRangeUser(1.e-2, 10.);
-    h->Draw();
-    content = (TList *)fGraph->FindObject("Efficiencies");
-    if(!(g = (TGraphErrors*)content->At(AliTRDpidUtil::kLQ))) break;
-    if(!g->GetN()) break;
-    legEff->SetHeader("PID Source");
-    g->Draw("pc"); legEff->AddEntry(g, "LQ 2D", "pl");
-    if(! (g = (TGraphErrors*)content->At(AliTRDpidUtil::kNN))) break;
-    g->Draw("pc"); legEff->AddEntry(g, "NN", "pl");
-    if(! (g = (TGraphErrors*)content->At(AliTRDpidUtil::kESD))) break;
-    g->Draw("p"); legEff->AddEntry(g, "ESD", "pl");
-    legEff->Draw();
-    gPad->SetLogy();
-    gPad->SetLogx();
-    gPad->SetGridy();
-    gPad->SetGridx();
-
-    pad = ((TVirtualPad*)l->At(1));pad->cd();
-    pad->SetMargin(0.1, 0.01, 0.1, 0.01);
-    h=new TH1S("hThr", "", 1, .5, 11.);
-    h->SetLineColor(1);h->SetLineWidth(1);
-    ax = h->GetXaxis();
-    ax->SetTitle("p [GeV/c]");
-    ax->SetMoreLogLabels();
-    ax = h->GetYaxis();
-    ax->SetTitle("Threshold [%]");
-    ax->SetRangeUser(5.e-2, 1.);
-    h->Draw();
-    content = (TList *)fGraph->FindObject("Thresholds");
-    if(!(g = (TGraphErrors*)content->At(AliTRDpidUtil::kLQ))) break;
-    if(!g->GetN()) break;
-    g->Draw("pc");
-    if(!(g = (TGraphErrors*)content->At(AliTRDpidUtil::kNN))) break;
-    g->Draw("pc");
-    if(!(g = (TGraphErrors*)content->At(AliTRDpidUtil::kESD))) break;
-    g->Draw("p");
-    gPad->SetLogx();
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kdEdx:{
-    // save 2.0 GeV projection as reference
-    TLegend *legdEdx = new TLegend(.7, .7, .98, .98);
-    legdEdx->SetBorderSize(1);
-    kFIRST = kTRUE;
-    if(!(h2 = (TH2F*)(fContainer->At(kdEdx)))) break;
-    legdEdx->SetHeader("Particle Species");
-    gPad->SetMargin(0.1, 0.01, 0.1, 0.01);
-    for(Int_t is = AliPID::kSPECIES-1; is>=0; is--){
-      Int_t bin = FindBin(is, 2.);
-      h1 = h2->ProjectionY(Form("px%d", is), bin, bin);
-      if(!h1->GetEntries()) continue;
-      h1->Scale(1./h1->Integral());
-      h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
-      if(kFIRST){
-        h1->GetXaxis()->SetTitle("dE/dx (a.u.)");
-        h1->GetYaxis()->SetTitle("<Entries>");
-      }
-      h = (TH1F*)h1->DrawClone(kFIRST ? "c" : "samec");
-      legdEdx->AddEntry(h, Form("%s", AliTRDCalPID::GetPartName(is)), "l");
-      kFIRST = kFALSE;
-    }
-    if(kFIRST) break;
-    legdEdx->Draw();
-    gPad->SetLogy();
-    gPad->SetLogx(0);
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kdEdxSlice:
-    break;
-  case kPH:{
-    gPad->Divide(2, 1, 1.e-5, 1.e-5);
-    TList *l=gPad->GetListOfPrimitives();
-
-    // save 2.0 GeV projection as reference
-    TLegend *legPH = new TLegend(.4, .7, .68, .98);
-    legPH->SetBorderSize(1);legPH->SetFillColor(0);
-    legPH->SetHeader("Particle Species");
-    if(!(arr = (TObjArray*)(fContainer->At(kPH)))) break;
-    if(!(h2 = (TProfile2D*)(arr->At(0)))) break;
-
-    TVirtualPad *pad = ((TVirtualPad*)l->At(0));pad->cd();
-    pad->SetMargin(0.1, 0.01, 0.1, 0.01);
-    kFIRST = kTRUE;
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      Int_t bin = FindBin(is, 2.);
-      h1 = h2->ProjectionY(Form("pyt%d", is), bin, bin);
-      if(!h1->GetEntries()) continue;
-      h1->SetMarkerStyle(24);
-      h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
-      h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
-      if(kFIRST){
-        h1->GetXaxis()->SetTitle("t_{drift} [100*ns]");
-        h1->GetYaxis()->SetTitle("<dQ/dt> [a.u.]");
-      }
-      h = (TH1F*)h1->DrawClone(kFIRST ? "c" : "samec");
-      legPH->AddEntry(h, Form("%s", AliTRDCalPID::GetPartName(is)), "pl");
-      kFIRST = kFALSE;
-    }
-
-    pad = ((TVirtualPad*)l->At(1));pad->cd();
-    pad->SetMargin(0.1, 0.01, 0.1, 0.01);
-    if(!(h2 = (TProfile2D*)(arr->At(1)))) break;
-    kFIRST = kTRUE;
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      Int_t bin = FindBin(is, 2.);
-      h1 = h2->ProjectionY(Form("pyx%d", is), bin, bin);
-      if(!h1->GetEntries()) continue;
-      h1->SetMarkerStyle(24);
-      h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
-      h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
-      if(kFIRST){
-        h1->GetXaxis()->SetTitle("x_{drift} [cm]");
-        h1->GetYaxis()->SetTitle("<dQ/dl> [a.u./cm]");
-      }
-      h = (TH1F*)h1->DrawClone(kFIRST ? "c" : "samec");
-      kFIRST = kFALSE;
-    }
-
-    if(kFIRST) break;
-    legPH->Draw();
-    gPad->SetLogy(0);
-    gPad->SetLogx(0);
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kNClus:{
-    // save 2.0 GeV projection as reference
-    TLegend *legNClus = new TLegend(.13, .7, .4, .98);
-    legNClus->SetBorderSize(1);
-    legNClus->SetFillColor(0);
-
-    kFIRST = kTRUE;
-    if(!(h2 = (TH2F*)(fContainer->At(kNClus)))) break;
-    legNClus->SetHeader("Particle Species");
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      Int_t bin = FindBin(is, 2.);
-      h1 = h2->ProjectionY(Form("pyNClus%d", is), bin, bin);
-      if(!h1->GetEntries()) continue;
-      h1->Scale(100./h1->Integral());
-      //h1->SetMarkerStyle(24);
-      //h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
-      h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
-      if(kFIRST){ 
-        h1->GetXaxis()->SetTitle("N^{cl}/tracklet");
-        h1->GetYaxis()->SetTitle("Prob. [%]");
-        h = (TH1F*)h1->DrawClone("c");
-        h->SetMaximum(55.);
-        h->GetXaxis()->SetRangeUser(0., 35.);
-        kFIRST = kFALSE;
-      } else h = (TH1F*)h1->DrawClone("samec");
-
-      legNClus->AddEntry(h, Form("%s", AliTRDCalPID::GetPartName(is)), "l");
-    }
-    if(kFIRST) break;
-    legNClus->Draw();
-    gPad->SetLogy(0);
-    gPad->SetLogx(0);
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  case kMomentum:
-  case kMomentumBin:
-    break; 
-  case kNTracklets:{
-    TLegend *legNClus = new TLegend(.4, .7, .68, .98);
-    legNClus->SetBorderSize(1);
-    kFIRST = kTRUE;
-    if(!(h2 = (TH2F*)(fContainer->At(kNTracklets)))) break;
-    legNClus->SetHeader("Particle Species");
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      Int_t bin = FindBin(is, 2.);
-      h1 = h2->ProjectionY(Form("pyNTracklets%d", is), bin, bin);
-      if(!h1->GetEntries()) continue;
-      h1->Scale(100./h1->Integral());
-      //h1->SetMarkerStyle(24);
-      //h1->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
-      h1->SetLineColor(AliTRDCalPID::GetPartColor(is));
-      if(kFIRST){ 
-        h1->GetXaxis()->SetTitle("N^{trklt}/track");
-        h1->GetXaxis()->SetRangeUser(1.,6.);
-        h1->GetYaxis()->SetTitle("Prob. [%]");
-      }
-      h = (TH1F*)h1->DrawClone(kFIRST ? "c" : "samec");
-      legNClus->AddEntry(h, Form("%s", AliTRDCalPID::GetPartName(is)), "l");
-      kFIRST = kFALSE;
-    }
-    if(kFIRST) break;
-    legNClus->Draw();
-    gPad->SetLogy(0);
-    gPad->SetLogx(0);
-    gPad->SetGridy();
-    gPad->SetGridx();
-    return kTRUE;
-  }
-  }
-  AliInfo(Form("Reference plot [%d] missing result", ifig));
-  return kFALSE;
-}
-
-//________________________________________________________________________
-Bool_t AliTRDcheckPID::PostProcess()
-{
-  // Draw result to the screen
-  // Called once at the end of the query
-
-  if (!fContainer) {
-    Printf("ERROR: list not available");
-    return kFALSE;
-  }
-  if(!(fEfficiency = dynamic_cast<TObjArray *>(fContainer->At(kEfficiency)))){
-    AliError("Efficiency container missing.");
-    return 0x0;
-  }
-  if(!fGraph){ 
-    fGraph = new TObjArray(6);
-    fGraph->SetOwner();
-    EvaluatePionEfficiency(fEfficiency, fGraph, 0.9);
-  }
-  fNRefFigures = 9;
-  return kTRUE;
-}
-
-//________________________________________________________________________
-void AliTRDcheckPID::EvaluatePionEfficiency(TObjArray * const histoContainer, TObjArray *results, Float_t electronEfficiency){
-// Process PID information for pion efficiency
-
-  fUtil->SetElectronEfficiency(electronEfficiency);
-
-  Color_t colors[3] = {kBlue, kGreen+2, kRed};
-  Int_t markerStyle[3] = {7, 7, 24};
-  TString methodName[3] = {"LQ", "NN", "ESD"};
-  // efficiency graphs
-  TGraphErrors *g, *gPtrEff[3], *gPtrThres[3];
-  TObjArray *eff = new TObjArray(3); eff->SetOwner(); eff->SetName("Efficiencies");
-  results->AddAt(eff, 0);
-  for(Int_t iMethod = 0; iMethod < 3; iMethod++){
-    eff->AddAt(g = gPtrEff[iMethod] = new TGraphErrors(), iMethod);
-    g->SetName(Form("efficiency_%s", methodName[iMethod].Data()));
-    g->SetLineColor(colors[iMethod]);
-    g->SetMarkerColor(colors[iMethod]);
-    g->SetMarkerStyle(markerStyle[iMethod]);
-  }
-
-  // Threshold graphs
-  TObjArray *thres = new TObjArray(3); thres->SetOwner(); thres->SetName("Thresholds");
-  results->AddAt(thres, 1);
-  for(Int_t iMethod = 0; iMethod < 3; iMethod++){
-    thres->AddAt(g = gPtrThres[iMethod] = new TGraphErrors(), iMethod);
-    g->SetName(Form("threshold_%s", methodName[iMethod].Data()));
-    g->SetLineColor(colors[iMethod]);
-    g->SetMarkerColor(colors[iMethod]);
-    g->SetMarkerStyle(markerStyle[iMethod]);
-  }
-  
-  Float_t mom = 0.;
-  TH1D *histo1=0x0, *histo2=0x0;
-
-  TH2F *hPtr[3];
-  hPtr[0] = (TH2F*)histoContainer->At(AliTRDpidUtil::kLQ);
-  hPtr[1] = (TH2F*)histoContainer->At(AliTRDpidUtil::kNN);
-  hPtr[2] = (TH2F*)histoContainer->At(AliTRDpidUtil::kESD);
-  
-  for(Int_t iMom = 0; iMom < fMomentumAxis->GetNbins(); iMom++){
-    mom = fMomentumAxis->GetBinCenter(iMom+1);
-
-    Int_t binEl = fMomentumAxis->GetNbins() * AliPID::kElectron + iMom + 1, 
-         binPi = fMomentumAxis->GetNbins() * AliPID::kPion + iMom + 1;
-    for(Int_t iMethod = 0; iMethod < 3; iMethod++){
-      // Calculate the Pion Efficiency at 90% electron efficiency for each Method
-      histo1 = hPtr[iMethod] -> ProjectionY(Form("%s_ele", methodName[iMethod].Data()), binEl, binEl);
-      histo2 = hPtr[iMethod] -> ProjectionY(Form("%s_pio", methodName[iMethod].Data()), binPi, binPi);
-
-      if(!fUtil->CalculatePionEffi(histo1, histo2)) continue;
-     
-      gPtrEff[iMethod]->SetPoint(iMom, mom, 1.e2*fUtil->GetPionEfficiency());
-      gPtrEff[iMethod]->SetPointError(iMom, 0., 1.e2*fUtil->GetError());
-      gPtrThres[iMethod]->SetPoint(iMom, mom, fUtil->GetThreshold());
-      gPtrThres[iMethod]->SetPointError(iMom, 0., 0.);
-
-      AliDebug(2, Form("Pion Efficiency for %s is : %f +/- %f", methodName[iMethod].Data(), fUtil->GetPionEfficiency(), fUtil->GetError()));
-    }
-  }
-}
diff --git a/TRD/qaRec/AliTRDcheckPID.h b/TRD/qaRec/AliTRDcheckPID.h
deleted file mode 100644 (file)
index d1f9eb3..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef ALITRDCHECKPID_H
-#define ALITRDCHECKPID_H
-
-//////////////////////////////////////////////////////
-//
-// PID performance checker of the TRD
-//
-// Author : Alex Wilk <wilka@uni-muenster.de>
-//          Alex Bercuci <A.Bercuci@gsi.de>
-//          Markus Fasel <M.Fasel@gsi.de>
-//
-///////////////////////////////////////////////////////
-
-#ifndef ROOT_TAxis
-#include "TAxis.h"
-#endif
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class AliTRDReconstructor;
-class AliTRDpidUtil;
-class AliTRDcheckPID : public AliTRDrecoTask 
-{
-public:
-  // Plots registered for this task
-  enum{
-     kEfficiency     =  0     // pi Efficiency plot
-    ,kdEdx           =  1     // dE/dx spectra
-    ,kdEdxSlice      =  2     // dE/dx spectra
-    ,kPH             =  3     // pulse height spectra
-    ,kNClus          =  4     //  number of clusters per track
-    ,kMomentum       =  5     // momentum distribution
-    ,kMomentumBin    =  6     // momentum distribution
-    ,kNTracklets     =  7     // Number of tracklets per track
-    ,kNPlots         =  8     // Number of plots for this tasks 
-  };
-  AliTRDcheckPID();
-  virtual ~AliTRDcheckPID();
-  
-  virtual void    CreateOutputObjects();
-  virtual Bool_t  GetRefFigure(Int_t ifig);
-  virtual Bool_t  PostProcess();
-
-  TH1 *PlotLQ(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotNN(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotESD(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotdEdx(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotdEdxSlice(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotPH(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotNClus(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotNTracklets(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotMom(const AliTRDtrackV1 *track = 0x0);
-  TH1 *PlotMomBin(const AliTRDtrackV1 *track = 0x0);
-
-  void SetRequireMinNTracklets(Int_t mintracklets) { fMinNTracklets = mintracklets; }
-  void SetRequireMaxNTracklets(Int_t maxtracklets) { fMaxNTracklets = maxtracklets; }
-
-  TObjArray *GetGraphs() const { return fGraph; };
-  //TObjArray *GetHistos() { return fContainer; };
-  virtual TObjArray *Histos();
-  void EvaluatePionEfficiency(TObjArray * const histoContainer, TObjArray *results, Float_t electronEfficiency);
-  inline void SetMomentumBinning(Int_t nBins, Double_t *bins);
-  inline Int_t FindBin(Int_t species, Double_t momentum);
-  inline Bool_t IsInRange(Double_t momentum);
-
-private:
-  AliTRDcheckPID(const AliTRDcheckPID&);               // not implemented
-  AliTRDcheckPID& operator=(const AliTRDcheckPID&);    // not implemented
-
-  Int_t  CalcPDG(AliTRDtrackV1* track = 0x0);
-  Bool_t CheckTrackQuality(const AliTRDtrackV1* track = 0x0) const;
-  
-  AliTRDReconstructor *fReconstructor;     //! reconstructor needed for recalculation the PID
-  AliTRDpidUtil       *fUtil;              //! utility class for PID calculations
-  TObjArray           *fGraph;             //! array of graphs filled in PostProcess
-  TObjArray           *fEfficiency;        //! array of histograms with efficiency
-  TAxis               *fMomentumAxis;      //! helper mementum binning
-  Int_t                fMinNTracklets;     // minimum number of required Tracklets (for systematic studies)
-  Int_t                fMaxNTracklets;     // maximum number of required Tracklets (for systematic studies) 
-  ClassDef(AliTRDcheckPID, 1); // TRD PID checker
-};
-
-//________________________________________________________________________
-inline void AliTRDcheckPID::SetMomentumBinning(Int_t nBins, Double_t *bins){
-  //
-  // Set the Momentum Bins
-  //
-  if(fMomentumAxis) delete fMomentumAxis;
-  fMomentumAxis = new TAxis(nBins, bins);
-}
-
-//________________________________________________________________________
-inline Int_t AliTRDcheckPID::FindBin(Int_t species, Double_t momentum){
-  //
-  // Find the Bin in the 2D Histogram
-  //
-  return species * fMomentumAxis->GetNbins() + (fMomentumAxis->FindBin(momentum) -1);
-}
-
-//________________________________________________________________________
-inline Bool_t AliTRDcheckPID::IsInRange(Double_t momentum){
-  //
-  // Check Whether momentum is in the defined Range
-  //
-  return (momentum >= fMomentumAxis->GetXmin() && momentum <= fMomentumAxis->GetXmax());
-}
-
-#endif
diff --git a/TRD/qaRec/AliTRDclusterResolution.cxx b/TRD/qaRec/AliTRDclusterResolution.cxx
deleted file mode 100644 (file)
index fc8d264..0000000
+++ /dev/null
@@ -1,1225 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* Permission to use, copy, modify and distribute this software and its   *
-* documentation strictly for non-commercialf 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDclusterResolution.cxx */
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  TRD cluster error parameterization                                        //
-//                                                                           //
-// This class is designed to produce the reference plots for a detailed study//
-// and parameterization of TRD cluster errors. The following effects are taken//
-// into account :                                                            //
-//   - dependence with the total charge of the cluster                       //
-//   - dependence with the distance from the center pad. This is monitored 
-// for each layer individually since the pad size varies with layer
-//   - dependence with the drift length - here the influence of anisochronity 
-// and diffusion are searched
-//   - dependence with the distance to the anode wire - anisochronity effects
-//   - dependence with track angle (for y resolution)
-// The correlation between effects is taken into account. 
-// 
-// Since magnetic field plays a very important role in the TRD measurement 
-// the ExB correction is forced by the setter function SetExB(Int_t). The 
-// argument is the detector index, if none is specified all will be 
-// considered.
-// 
-// Two cases are of big importance.
-//   - comparison with MC
-//   - comparison with Kalman fit. In this case the covariance matrix of the
-// Kalman fit are needed.
-// 
-// The functionalities implemented in this class are based on the storage 
-// class AliTRDclusterInfo.
-// 
-// The Method
-// ----------
-// 
-// The method to disentangle s_y and s_x is based on the relation (see also fig.)
-// BEGIN_LATEX
-// #sigma^{2} = #sigma^{2}_{y} + tg^{2}(#alpha_{L})*#sigma^{2}_{x_{d}} + tg^{2}(#phi-#alpha_{L})*(#sigma^{2}_{x_{d}}+#sigma^{2}_{x_{c}})
-// END_LATEX
-// with
-// BEGIN_LATEX
-// #sigma^{2}_{x_{c}} #approx 0 
-// END_LATEX
-// we suppose the chamber is well calibrated for t_{0} and aligned in
-// radial direction. 
-//
-// Clusters can be radially shifted due to three causes:
-//   - globally shifted - due to residual misalignment/miscalibration(t0)
-//   - locally shifted - due to different local drift velocity from the mean
-//   - randomly shifted - due to neighboring (radial direction) clusters 
-// charge induced by asymmetry of the TRF.
-//
-// We estimate this effects by the relations:
-// BEGIN_LATEX
-// #mu_{y} = tg(#alpha_{L})*#Delta x_{d}(...) + tg(#phi-#alpha_{L})*(#Delta x_{c}(...) + #Delta x_{d}(...))
-// END_LATEX
-// where
-// BEGIN_LATEX
-// #Delta x_{d}(...) = (<v_{d}> + #delta v_{d}(x_{d}, d)) * (t + t^{*}(Q))
-// END_LATEX
-// and we specified explicitely the variation of drift velocity parallel 
-// with the track (x_{d}) and perpendicular to it due to anisochronity (d).
-// 
-// For estimating the contribution from asymmetry of TRF the following
-// parameterization is being used
-// BEGIN_LATEX
-// t^{*}(Q) = #delta_{0} * #frac{Q_{t+1} - Q_{t-1}}{Q_{t-1} + Q_{t} + Q_{t+1}}
-// END_LATEX
-//
-//
-// Clusters can also be r-phi shifted due to:
-//   - wrong PRF or wrong cuts at digits level
-//The following correction is applied :
-// BEGIN_LATEX
-// <#Delta y> = a + b * sin(c*y_{pw})
-// END_LATEX
-
-// The Models
-//
-//   Parameterization against total charge
-//
-// Obtained for B=0T at phi=0. All other effects integrated out.
-// BEGIN_LATEX
-// #sigma^{2}_{y}(Q) = #sigma^{2}_{y}(...) + b(#frac{1}{Q} - #frac{1}{Q_{0}}) 
-// END_LATEX
-// For B diff 0T the error of the average ExB correction error has to be subtracted !! 
-//
-//   Parameterization Sx
-//
-// The parameterization of the error in the x direction can be written as
-// BEGIN_LATEX
-// #sigma_{x} = #sigma_{x}^{||} + #sigma_{x}^{#perp}
-// END_LATEX
-//
-// where the parallel component is given mainly by the TRF width while 
-// the perpendicular component by the anisochronity. The model employed for 
-// the parallel is gaus(0)+expo(3) with the following parameters
-// 1  C   5.49018e-01   1.23854e+00   3.84540e-04  -8.21084e-06
-// 2  M   7.82999e-01   6.22531e-01   2.71272e-04  -6.88485e-05
-// 3  S   2.74451e-01   1.13815e+00   2.90667e-04   1.13493e-05
-// 4  E1  2.53596e-01   1.08646e+00   9.95591e-05  -2.11625e-05
-// 5  E2 -2.40078e-02   4.26520e-01   4.67153e-05  -2.35392e-04
-//
-// and perpendicular to the track is pol2 with the parameters
-//
-// Par_0 = 0.190676 +/- 0.41785
-// Par_1 = -3.9269  +/- 7.49862
-// Par_2 = 14.7851  +/- 27.8012
-//
-//   Parameterization Sy
-//
-// The parameterization of the error in the y direction along track uses
-// BEGIN_LATEX
-// #sigma_{y}^{||} = #sigma_{y}^{0} -a*exp(1/(x-b))
-// END_LATEX
-//
-// with following values for the parameters:
-// 1  sy0 2.60967e-01   2.99652e-03   7.82902e-06  -1.89636e-04
-// 2  a  -7.68941e+00   1.87883e+00   3.84539e-04   9.38268e-07
-// 3  b  -3.41160e-01   7.72850e-02   1.63231e-05   2.51602e-05
-//
-//==========================================================================
-// Example how to retrive reference plots from the task
-// void steerClErrParam(Int_t fig=0)
-// {
-//   gSystem->Load("libANALYSIS.so");
-//   gSystem->Load("libTRDqaRec.so");
-// 
-//   // initialize DB manager
-//   AliCDBManager *cdb = AliCDBManager::Instance();
-//   cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
-//   cdb->SetRun(0);
-//   // initialize magnetic field.
-//   AliMagFCheb *field=new AliMagFCheb("Maps","Maps", 2, 1., 10., AliMagFCheb::k5kG);
-//   AliTracker::SetFieldMap(field, kTRUE);
-// 
-//   AliTRDclusterResolution *res = new AliTRDclusterResolution();
-//   res->SetMCdata();
-//   res->Load("TRD.TaskClErrParam.root");
-//   res->SetExB();  
-//   res->SetVisual(); 
-//   //res->SetSaveAs();
-//   res->SetProcessCharge(kFALSE);
-//   res->SetProcessCenterPad(kFALSE);
-//   //res->SetProcessMean(kFALSE);
-//   res->SetProcessSigma(kFALSE);
-//   if(!res->PostProcess()) return;
-//   new TCanvas;
-//   res->GetRefFigure(fig);
-// }
-//
-//  Authors:                                                              //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-////////////////////////////////////////////////////////////////////////////
-
-#include "AliTRDclusterResolution.h"
-#include "info/AliTRDclusterInfo.h"
-#include "AliTRDgeometry.h"
-#include "AliTRDcluster.h"
-#include "AliTRDcalibDB.h"
-#include "AliTRDCommonParam.h"
-#include "Cal/AliTRDCalROC.h"
-#include "Cal/AliTRDCalDet.h"
-
-#include "AliLog.h"
-#include "AliTracker.h"
-#include "AliCDBManager.h"
-
-#include "TROOT.h"
-#include "TObjArray.h"
-#include "TAxis.h"
-#include "TF1.h"
-#include "TLegend.h"
-#include "TGraphErrors.h"
-#include "TLine.h"
-#include "TH2I.h"
-#include "TH3S.h"
-#include "TTree.h"
-#include "TMath.h"
-#include "TLinearFitter.h"
-
-#include "TCanvas.h"
-#include "TSystem.h"
-
-ClassImp(AliTRDclusterResolution)
-
-const Float_t AliTRDclusterResolution::fgkTimeBinLength = 1./ AliTRDCommonParam::Instance()->GetSamplingFrequency();
-//_______________________________________________________
-AliTRDclusterResolution::AliTRDclusterResolution(const char *name, const char *title)
-  : AliTRDrecoTask(name, title)
-  ,fCanvas(0x0)
-  ,fInfo(0x0)
-  ,fResults(0x0)
-  ,fAt(0x0)
-  ,fStatus(0)
-  ,fDet(-1)
-  ,fExB(0.)
-  ,fVdrift(0.)
-  ,fLy(0)
-  ,fX(0.)
-  ,fY(0.)
-  ,fZ(0.)
-{
-// Constructor
-
-  memset(fR, 0, 4*sizeof(Float_t));
-  memset(fP, 0, 4*sizeof(Float_t));
-  // time drift axis
-  fAt = new TAxis(kNTB, 0., kNTB*fgkTimeBinLength);
-
-  // By default register all analysis
-  // The user can switch them off in his steering macro
-  SetProcess(kQRes);
-  SetProcess(kCenter);
-  SetProcess(kMean);
-  SetProcess(kSigm);
-}
-
-//_______________________________________________________
-AliTRDclusterResolution::~AliTRDclusterResolution()
-{
-// Destructor
-
-  if(fCanvas) delete fCanvas;
-  if(fAt) delete fAt;
-  if(fResults){
-    fResults->Delete();
-    delete fResults;
-  }
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::ConnectInputData(Option_t *)
-{
-  fInfo = dynamic_cast<TObjArray *>(GetInputData(0));
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::CreateOutputObjects()
-{
-  OpenFile(0, "RECREATE");
-  fContainer = Histos();
-}
-
-//_______________________________________________________
-Bool_t AliTRDclusterResolution::GetRefFigure(Int_t ifig)
-{
-// Steering function to retrieve performance plots
-
-  if(!fResults) return kFALSE;
-  TLegend *leg = 0x0;
-  TList *l = 0x0;
-  TObjArray *arr = 0x0;
-  TTree *t = 0x0;
-  TH2 *h2 = 0x0;TH1 *h1 = 0x0;
-  TGraphErrors *gm(0x0), *gs(0x0), *gp(0x0);
-  switch(ifig){
-  case kQRes:
-    if(!(arr = (TObjArray*)fResults->At(kQRes))) break;
-    if(!(gm = (TGraphErrors*)arr->At(0))) break;
-    if(!(gs = (TGraphErrors*)arr->At(1))) break;
-    if(!(gp = (TGraphErrors*)arr->At(2))) break;
-    gs->Draw("apl");
-    gs->GetHistogram()->GetYaxis()->SetRangeUser(-50., 700.);
-    gs->GetHistogram()->SetXTitle("Q [a.u.]");
-    gs->GetHistogram()->SetYTitle("#sigma_{y} / #mu_{y} [#mum] / freq");
-    gm->Draw("pl");
-    gp->Draw("pl");
-    return kTRUE;
-  case kCenter:
-    if(!(arr = (TObjArray*)fResults->At(kCenter))) break;
-    gPad->Divide(2, 1); l = gPad->GetListOfPrimitives();
-    ((TVirtualPad*)l->At(0))->cd();
-    ((TTree*)arr->At(0))->Draw("y:x>>h(23, 0.1, 2.4, 51, -.51, .51)",
-            "m[0]*(ly==0&&abs(m[0])<1.e-1)", "colz");
-    ((TVirtualPad*)l->At(1))->cd();
-    leg= new TLegend(.7, .7, .9, .95);
-    leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetFillStyle(0);
-    leg->SetHeader("TRD Plane"); 
-    for(Int_t il = 1; il<=AliTRDgeometry::kNlayer; il++){
-      if(!(gm = (TGraphErrors*)arr->At(il))) return kFALSE;
-      gm->Draw(il>1?"pc":"apc"); leg->AddEntry(gm, Form("%d", il-1), "pl");
-      if(il>1) continue;
-      gm->GetHistogram()->SetXTitle("t_{drift} [#mus]");
-      gm->GetHistogram()->SetYTitle("#sigma_{y}(x|cen=0) [#mum]");
-      gm->GetHistogram()->GetYaxis()->SetRangeUser(150., 500.);
-    }
-    leg->Draw();
-    return kTRUE;
-  case kSigm:
-    if(!(t = (TTree*)fResults->At(kSigm))) break;
-    t->Draw("z:t>>h2x(23, 0.1, 2.4, 25, 0., 2.5)","sx*(1)", "lego2fb");
-    h2 = (TH2F*)gROOT->FindObject("h2x");
-    printf("  const Double_t sx[24][25]={\n");
-    for(Int_t ix=1; ix<=h2->GetNbinsX(); ix++){
-      printf("    {");
-      for(Int_t iy=1; iy<h2->GetNbinsY(); iy++){
-        printf("%6.4f ", h2->GetBinContent(ix, iy));
-      }
-      printf("%6.4f},\n", h2->GetBinContent(ix, h2->GetNbinsY()));
-    }
-    printf("  };\n");
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l = gPad->GetListOfPrimitives();
-    ((TVirtualPad*)l->At(0))->cd();
-    h1 = h2->ProjectionX("hsx_pxx"); h1->Scale(1.e4/kND); h1->SetMarkerStyle(24);
-    h1->SetYTitle("<#sigma_{x}> [#mum]");
-    h1->SetXTitle("t_{drift} [#mus]");
-    h1->GetXaxis()->SetRange(2, kNTB-1); h1->Draw("pc");
-
-    t->Draw("z:t>>h2y(23, 0.1, 2.4, 25, 0., 2.5)","sy*(1)", "lego2fb");
-    h2 = (TH2F*)gROOT->FindObject("h2y");
-    printf("  const Double_t sy[24][25]={\n");
-    for(Int_t ix=1; ix<=h2->GetNbinsX(); ix++){
-      printf("    {");
-      for(Int_t iy=1; iy<h2->GetNbinsY(); iy++){
-        printf("%6.4f ", h2->GetBinContent(ix, iy));
-      }
-      printf("%6.4f},\n", h2->GetBinContent(ix, h2->GetNbinsY()));
-    }
-    printf("  };\n");
-    ((TVirtualPad*)l->At(1))->cd();
-    h1 = h2->ProjectionX("hsy_pxx"); h1->Scale(1.e4/kND); h1->SetMarkerStyle(24);
-    h1->SetYTitle("<#sigma_{y}> [#mum]");
-    h1->SetXTitle("t_{drift} [#mus]");
-    h1->GetXaxis()->SetRange(2, kNTB-1); h1->Draw("pc");
-    return kTRUE;
-  case kMean:
-    if(!(t = (TTree*)fResults->At(kMean))) break;
-    t->Draw("z:t>>h2x(23, 0.1, 2.4, 25, 0., 2.5)","dx*(1)", "goff");
-    h2 = (TH2F*)gROOT->FindObject("h2x");
-    printf("  const Double_t dx[24][25]={\n");
-    for(Int_t ix=1; ix<=h2->GetNbinsX(); ix++){
-      printf("    {");
-      for(Int_t iy=1; iy<h2->GetNbinsY(); iy++){
-        printf("%6.4f ", h2->GetBinContent(ix, iy));
-      }
-      printf("%6.4f},\n", h2->GetBinContent(ix, h2->GetNbinsY()));
-    }
-    printf("  };\n");
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l = gPad->GetListOfPrimitives();
-    ((TVirtualPad*)l->At(0))->cd();
-    h1 = h2->ProjectionX("hdx_pxx"); h1->Scale(1.e4/kND); h1->SetMarkerStyle(24);
-    h1->SetYTitle("<dx> [#mum]");
-    h1->SetXTitle("t_{drift} [#mus]");
-    h1->GetXaxis()->SetRange(2, kNTB-1); h1->Draw("pc");
-
-    t->Draw("z:t>>h2y(23, 0.1, 2.4, 25, 0., 2.5)","dy*(1)", "goff");
-    h2 = (TH2F*)gROOT->FindObject("h2y");
-    printf("  const Double_t dy[24][25]={\n");
-    for(Int_t ix=1; ix<=h2->GetNbinsX(); ix++){
-      printf("    {");
-      for(Int_t iy=1; iy<h2->GetNbinsY(); iy++){
-        printf("%6.4f ", h2->GetBinContent(ix, iy));
-      }
-      printf("%6.4f},\n", h2->GetBinContent(ix, h2->GetNbinsY()));
-    }
-    printf("  };\n");
-    ((TVirtualPad*)l->At(1))->cd();
-    h1 = h2->ProjectionX("hdy_pxx"); h1->Scale(1.e4/kND); h1->SetMarkerStyle(24);
-    h1->SetYTitle("<dy> [#mum]");
-    h1->SetXTitle("t_{drift} [#mus]");
-    h1->GetXaxis()->SetRange(2, kNTB-1); h1->Draw("pc");
-
-    return kTRUE;
-  default:
-    break;
-  }
-  AliWarning("No container/data found.");
-  return kFALSE;
-}
-
-//_______________________________________________________
-TObjArray* AliTRDclusterResolution::Histos()
-{
-// Retrieve histograms array if already build or build it
-
-  if(fContainer) return fContainer;
-  fContainer = new TObjArray(kNtasks);
-  //fContainer->SetOwner(kTRUE);
-
-  TH3S *h3 = 0x0;
-  TObjArray *arr = 0x0;
-
-  fContainer->AddAt(arr = new TObjArray(2*AliTRDgeometry::kNlayer), kCenter);
-  arr->SetName("Center");
-  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-    // add resolution plot for each layer
-    if(!(h3=(TH3S*)gROOT->FindObject(Form("hCenResLy%d", il)))){ 
-      h3 = new TH3S(
-        Form("hCenResLy%d", il), 
-        Form(" ly [%d]", il), 
-        kNTB, fAt->GetBinLowEdge(1), fAt->GetBinUpEdge(kNTB),   // x
-        51, -.51, .51, // y 
-        60, -.3, .3); // dy
-      h3->SetXTitle("x [#mus]");
-      h3->SetYTitle("y [pw]");
-      h3->SetZTitle("#Delta y[cm]");
-    } h3->Reset();
-    arr->AddAt(h3, il);
-    // add Pull plot for each layer
-    if(!(h3=(TH3S*)gROOT->FindObject(Form("hCenPullLy%d", il)))){ 
-      h3 = new TH3S(
-        Form("hCenPullLy%d", il), 
-        Form(" ly [%d]", il), 
-        kNTB, fAt->GetBinLowEdge(1), fAt->GetBinUpEdge(kNTB),   // x
-        51, -.51, .51, // y 
-        60, -4., 4.); // dy
-      h3->SetXTitle("x [#mus]");
-      h3->SetYTitle("y [pw]");
-      h3->SetZTitle("#Delta y/#sigma_{y}");
-    } h3->Reset();
-    arr->AddAt(h3, AliTRDgeometry::kNlayer+il);
-  }
-
-  if(!(h3 = (TH3S*)gROOT->FindObject("Charge"))){
-    h3 = new TH3S("Charge", "dy=f(q)", 50, 2.2, 7.5, 60, -.3, .3, 60, -4., 4.);
-    h3->SetXTitle("log(q) [a.u.]");
-    h3->SetYTitle("#Delta y[cm]");
-    h3->SetZTitle("#Delta y/#sigma_{y}");
-  }
-  fContainer->AddAt(h3, kQRes);
-
-  fContainer->AddAt(arr = new TObjArray(kNTB), kSigm);
-  arr->SetName("Resolution");
-  for(Int_t ix=0; ix<kNTB; ix++){
-    if(!(h3=(TH3S*)gROOT->FindObject(Form("hr_x%02d", ix)))){
-      h3 = new TH3S(
-        Form("hr_x%02d", ix), 
-        Form(" t_{drift}(%3.1f-%3.1f)[#mus]", fAt->GetBinLowEdge(ix+1), fAt->GetBinUpEdge(ix+1)), 
-        kND, 0., 2.5,   // z 
-        35, -.35, .35, // tgp 
-        60, -.3, .3); // dy
-      h3->SetXTitle("z [mm]");
-      h3->SetYTitle("tg#phi");
-      h3->SetZTitle("#Delta y[cm]");
-    }
-    arr->AddAt(h3, ix);
-  }
-
-  fContainer->AddAt(arr = new TObjArray(kNTB), kMean);
-  arr->SetName("Systematics");
-  for(Int_t ix=0; ix<kNTB; ix++){
-    if(!(h3=(TH3S*)gROOT->FindObject(Form("hs_x%02d", ix)))){
-      h3 = new TH3S(
-        Form("hs_x%02d", ix), 
-        Form(" t_{drift}(%3.1f-%3.1f)[#mus]", fAt->GetBinLowEdge(ix+1), fAt->GetBinUpEdge(ix+1)), 
-        kND, 0., 2.5,   // z 
-        35, -.35, .35, // tgp-h tgt 
-        60, -.3, .3); // dy
-      h3->SetXTitle("z [mm]");
-      h3->SetYTitle("tg(#phi) - h*tg(#theta)");
-      h3->SetZTitle("#Delta y[cm]");
-    }
-    arr->AddAt(h3, ix);
-  }
-
-  return fContainer;
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::Exec(Option_t *)
-{
-// Fill container histograms
-
-  if(!HasExB()) AliWarning("ExB was not set. Call SetExB() before running the task.");
-
-  Int_t det, t;
-  Float_t x, y, z, q, dy, dydx, dzdx, cov[3], covcl[3];
-  TH3S *h3 = 0x0;
-
-  // define limits around ExB for which x contribution is negligible
-  const Float_t kDtgPhi = 3.5e-2; //(+- 2 deg)
-
-  TObjArray *arr0 = (TObjArray*)fContainer->At(kCenter);
-  TObjArray *arr1 = (TObjArray*)fContainer->At(kSigm);
-  TObjArray *arr2 = (TObjArray*)fContainer->At(kMean);
-
-  const AliTRDclusterInfo *cli = 0x0;
-  TIterator *iter=fInfo->MakeIterator();
-  while((cli=dynamic_cast<AliTRDclusterInfo*>((*iter)()))){
-    cli->GetCluster(det, x, y, z, q, t, covcl);
-    if(fDet>=0 && fDet!=det) continue;
-    
-    dy = cli->GetResolution();
-    cli->GetGlobalPosition(y, z, dydx, dzdx, &cov[0]);
-
-    // resolution as a function of cluster charge
-    // only for phi equal exB 
-    if(TMath::Abs(dydx-fExB) < kDtgPhi){
-      h3 = (TH3S*)fContainer->At(kQRes);
-      h3->Fill(TMath::Log(q), dy, dy/TMath::Sqrt(covcl[0]));
-
-      printf("q=%f Log(q)=%f dy=%f pull=%f\n",q, TMath::Log(q), dy, dy/TMath::Sqrt(covcl[0]));
-    }
-
-    // do not use problematic clusters in resolution analysis
-    // TODO define limits as calibration aware (gain) !!
-    if(q<20. || q>250.) continue;
-
-    x = (t+.5)*fgkTimeBinLength; // conservative approach !!
-
-    // resolution as a function of y displacement from pad center
-    // only for phi equal exB
-    if(TMath::Abs(dydx-fExB) < kDtgPhi/* &&
-       TMath::Abs(x-0.675)<0.225*/){
-      Int_t ly(AliTRDgeometry::GetLayer(det));
-      h3 = (TH3S*)arr0->At(ly);
-      h3->Fill(x, cli->GetYDisplacement(), dy);
-      h3 = (TH3S*)arr0->At(AliTRDgeometry::kNlayer+ly);
-      h3->Fill(x, cli->GetYDisplacement(), dy/TMath::Sqrt(covcl[0]));
-    }
-
-    Int_t ix = fAt->FindBin(x);
-    if(ix==0 || ix == fAt->GetNbins()+1){
-      AliWarning(Form("Drift time %3.1f outside allowed range", x));
-      continue;
-    }
-
-    // fill histo for resolution (sigma)
-    ((TH3S*)arr1->At(ix-1))->Fill(10.*cli->GetAnisochronity(), dydx, dy);
-
-    // fill histo for systematic (mean)
-    ((TH3S*)arr2->At(ix-1))->Fill(10.*cli->GetAnisochronity(), dydx-cli->GetTilt()*dzdx, dy);  
-  }
-  PostData(0, fContainer);
-}
-
-
-//_______________________________________________________
-Bool_t AliTRDclusterResolution::PostProcess()
-{
-  if(!fContainer) return kFALSE;
-  if(!HasExB()) AliWarning("ExB was not set. Call SetExB() before running the post processing.");
-  
-  TObjArray *arr = 0x0;
-  TTree *t=0x0;
-  if(!fResults){
-    TGraphErrors *g = 0x0;
-    fResults = new TObjArray(kNtasks);
-    fResults->SetOwner();
-    fResults->AddAt(arr = new TObjArray(3), kQRes);
-    arr->SetOwner();
-    arr->AddAt(g = new TGraphErrors(), 0);
-    g->SetLineColor(kBlue); g->SetMarkerColor(kBlue);
-    g->SetMarkerStyle(7); 
-    arr->AddAt(g = new TGraphErrors(), 1);
-    g->SetLineColor(kRed); g->SetMarkerColor(kRed);
-    g->SetMarkerStyle(23); 
-    arr->AddAt(g = new TGraphErrors(), 2);
-    g->SetLineColor(kGreen); g->SetMarkerColor(kGreen);
-    g->SetMarkerStyle(7); 
-
-    // pad center dependence
-    fResults->AddAt(arr = new TObjArray(AliTRDgeometry::kNlayer+1), kCenter);
-    arr->SetOwner();
-    arr->AddAt(
-    t = new TTree("cent", "dy=f(y,x,ly)"), 0);
-    t->Branch("ly", &fLy, "ly/B");
-    t->Branch("x", &fX, "x/F");
-    t->Branch("y", &fY, "y/F");
-    t->Branch("m", &fR[0], "m[2]/F");
-    t->Branch("s", &fR[2], "s[2]/F");
-    t->Branch("pm", &fP[0], "pm[2]/F");
-    t->Branch("ps", &fP[2], "ps[2]/F");
-    for(Int_t il=1; il<=AliTRDgeometry::kNlayer; il++){
-      arr->AddAt(g = new TGraphErrors(), il);
-      g->SetLineColor(il); g->SetLineStyle(il);
-      g->SetMarkerColor(il);g->SetMarkerStyle(4); 
-    }
-
-
-    fResults->AddAt(t = new TTree("sigm", "dy=f(dw,x,dydx)"), kSigm);
-    t->Branch("t", &fX, "t/F");
-    t->Branch("z", &fZ, "z/F");
-    t->Branch("sx", &fR[0], "sx[2]/F");
-    t->Branch("sy", &fR[2], "sy[2]/F");
-
-
-    fResults->AddAt(t = new TTree("mean", "dy=f(dw,x,dydx - h dzdx)"), kMean);
-    t->Branch("t", &fX, "t/F");
-    t->Branch("z", &fZ, "z/F");
-    t->Branch("dx", &fR[0], "dx[2]/F");
-    t->Branch("dy", &fR[2], "dy[2]/F");
-  } else {
-    TObject *o = 0x0;
-    TIterator *iter=fResults->MakeIterator();
-    while((o=((*iter)()))) o->Clear(); // maybe it is wrong but we should never reach this point
-  }
-  
-  // precalculated value of tg^2(alpha_L)
-  Double_t exb2 = fExB*fExB;
-  // square of the mean value of sigma drift length.
-  // has to come from previous calibration 
-  //Double_t sxd2 = 1.;// [mm^2]
-
-  printf("ExB[%e] ExB2[%e]\n", fExB, exb2);
-
-  // process resolution dependency on charge
-  if(HasProcess(kQRes)) ProcessCharge();
-  
-  // process resolution dependency on y displacement
-  if(HasProcess(kCenter)) ProcessCenterPad();
-
-  // process resolution dependency on drift legth and drift cell width
-  if(HasProcess(kSigm)) ProcessSigma();
-
-  // process systematic shift on drift legth and drift cell width
-  if(HasProcess(kMean)) ProcessMean();
-
-  return kTRUE;
-}
-
-//_______________________________________________________
-Bool_t AliTRDclusterResolution::SetExB(Int_t det, Int_t col, Int_t row)
-{
-  // check OCDB
-  AliCDBManager *cdb = AliCDBManager::Instance();
-  if(cdb->GetRun() < 0){
-    AliError("OCDB manager not properly initialized");
-    return kFALSE;
-  }
-
-  // check magnetic field
-  if(TMath::Abs(AliTracker::GetBz()) < 1.e-10){
-    AliWarning("B=0. Magnetic field may not be initialized. Continue if you know what you are doing !");
-  }
-
-  // set reference detector if any
-  if(det>=0 && det<AliTRDgeometry::kNdet) fDet = det;
-  else det = 0;
-
-  AliTRDcalibDB *fCalibration  = AliTRDcalibDB::Instance();
-  AliTRDCalROC  *fCalVdriftROC = fCalibration->GetVdriftROC(det);
-  const AliTRDCalDet  *fCalVdriftDet = fCalibration->GetVdriftDet();
-
-  fVdrift = fCalVdriftDet->GetValue(det) * fCalVdriftROC->GetValue(col, row);
-  fExB   = AliTRDCommonParam::Instance()->GetOmegaTau(fVdrift);
-  SetBit(kExB);
-  return kTRUE;
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::SetVisual()
-{
-  if(fCanvas) return;
-  fCanvas = new TCanvas("clResCanvas", "Cluster Resolution Visualization", 10, 10, 600, 600);
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::ProcessCharge()
-{
-// Resolution as a function of cluster charge.
-//
-// As described in the function ProcessCenterPad() the error parameterization for clusters for phi = a_L can be 
-// written as:
-// BEGIN_LATEX
-// #sigma_{y}^{2} = #sigma_{y}^{2}|_{B=0} + tg^{2}(#alpha_{L})*#sigma_{x}^{2}
-// END_LATEX
-// with the contribution in case of B=0 given by:
-// BEGIN_LATEX
-// #sigma_{y}|_{B=0} = #sigma_{diff}*Gauss(0, s_{ly}) + #delta_{#sigma}(q)
-// END_LATEX
-// which further can be simplified to:
-// BEGIN_LATEX
-// <#sigma_{y}|_{B=0}>(q) = <#sigma_{y}> + #delta_{#sigma}(q)
-// <#sigma_{y}> = #int{f(q)#sigma_{y}dq}
-// END_LATEX
-// The results for s_y and f(q) are displayed below:
-//Begin_Html
-//<img src="TRD/clusterQerror.gif">
-//End_Html
-// The function has to extended to accomodate gain calibration scalling and errors.
-//
-// Author
-// Alexandru Bercuci <A.Bercuci@gsi.de>
-
-  TH2I *h2 = 0x0;
-  if(!(h2 = (TH2I*)fContainer->At(kQRes))) {
-    AliWarning("Missing dy=f(Q) histo");
-    return;
-  }
-  TF1 f("f", "gaus", -.5, .5);
-  TAxis *ax = 0x0;
-  TH1D *h1 = 0x0;
-
-  // compute mean error on x
-  Double_t s2x = 0.; 
-  for(Int_t ix=5; ix<kNTB; ix++){
-    // retrieve error on the drift length
-    s2x += AliTRDcluster::GetSX(ix);
-  }
-  s2x /= (kNTB-5); s2x *= s2x;
-  Double_t exb2 = fExB*fExB;
-
-  TObjArray *arr = (TObjArray*)fResults->At(kQRes);
-  TGraphErrors *gqm = (TGraphErrors*)arr->At(0);
-  TGraphErrors *gqs = (TGraphErrors*)arr->At(1);
-  TGraphErrors *gqp = (TGraphErrors*)arr->At(2);
-  Double_t q, n = 0., entries;
-  ax = h2->GetXaxis();
-  for(Int_t ix=1; ix<=ax->GetNbins(); ix++){
-    q = TMath::Exp(ax->GetBinCenter(ix));
-    if(q<20. || q>250.) continue; // ?!
-
-    h1 = h2->ProjectionY("py", ix, ix);
-    entries = h1->GetEntries();
-    if(entries < 50) continue;
-    Adjust(&f, h1);
-    h1->Fit(&f, "Q");
-
-    // Fill sy^2 = f(q)
-    Int_t ip = gqm->GetN();
-    gqm->SetPoint(ip, q, 1.e4*f.GetParameter(1));
-    gqm->SetPointError(ip, 0., 1.e4*f.GetParError(1));
-
-    // correct sigma for ExB effect
-    gqs->SetPoint(ip, q, 1.e4*(f.GetParameter(2)*f.GetParameter(2)-exb2*s2x));
-    gqs->SetPointError(ip, 0., 1.e4*f.GetParError(2)*f.GetParameter(2));
-
-    // save probability
-    n += entries;
-    gqp->SetPoint(ip, q, entries);
-    gqp->SetPointError(ip, 0., 0./*TMath::Sqrt(entries)*/);
-  } 
-
-  // normalize probability and get mean sy
-  Double_t sm = 0., sy;
-  for(Int_t ip=gqp->GetN(); ip--;){
-    gqp->GetPoint(ip, q, entries);
-    entries/=n;
-    gqp->SetPoint(ip, q, 1.e3*entries);
-    gqs->GetPoint(ip, q, sy);
-    sm += entries*sy;
-  }
-
-  // error parametrization s(q) = <sy> + b(1/q-1/q0)
-  TF1 fq("fq", "[0] + [1]/x", 20., 250.);
-  gqs->Fit(&fq/*, "W"*/);
-  printf("sm=%f [0]=%f [1]=%f\n", 1.e-4*sm, fq.GetParameter(0), fq.GetParameter(1));
-  printf("  const Float_t sq0inv = %f; // [1/q0]\n", (sm-fq.GetParameter(0))/fq.GetParameter(1));
-  printf("  const Float_t sqb    = %f; // [cm]\n", 1.e-4*fq.GetParameter(1));
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::ProcessCenterPad()
-{
-// Resolution as a function of y displacement from pad center and drift length.
-//
-// Since the error parameterization of cluster r-phi position can be written as (see AliTRDcluster::SetSigmaY2()):
-// BEGIN_LATEX
-// #sigma_{y}^{2} = (#sigma_{diff}*Gauss(0, s_{ly}) + #delta_{#sigma}(q))^{2} + tg^{2}(#alpha_{L})*#sigma_{x}^{2} + tg^{2}(#phi-#alpha_{L})*#sigma_{x}^{2}+[tg(#phi-#alpha_{L})*tg(#alpha_{L})*x]^{2}/12
-// END_LATEX
-// one can see that for phi = a_L one gets the following expression:
-// BEGIN_LATEX
-// #sigma_{y}^{2} = #sigma_{y}^{2}|_{B=0} + tg^{2}(#alpha_{L})*#sigma_{x}^{2}
-// END_LATEX
-// where we have explicitely marked the remaining term in case of absence of magnetic field. Thus one can use the 
-// previous equation to estimate s_y for B=0 and than by comparing in magnetic field conditions one can get the s_x.
-// This is a simplified method to determine the error parameterization for s_x and s_y as compared to the one 
-// implemented in ProcessSigma(). For more details on cluster error parameterization please see also 
-// AliTRDcluster::SetSigmaY2()
-// 
-// The representation of dy=f(y_cen, x_drift| layer) can be also used to estimate the systematic shift in the r-phi 
-// coordinate resulting from imperfection in the cluster shape parameterization. From the expresion of the shift derived 
-// in ProcessMean() with phi=exb one gets: 
-// BEGIN_LATEX
-// <#Delta y>= <#delta x> * (tg(#alpha_{L})-h*dz/dx) + <#delta y - #delta x * tg(#alpha_{L})>
-// <#Delta y>(y_{cen})= -h*<#delta x>(x_{drift}, q_{cl}) * dz/dx + #delta y(y_{cen}, ...)
-// END_LATEX
-// where all dependences are made explicit. This last expression can be used in two ways:
-//   - by average on the dz/dx we can determine directly dy (the method implemented here) 
-//   - by plotting as a function of dzdx one can determine both dx and dy components in an independent method.
-//Begin_Html
-//<img src="TRD/clusterYcorr.gif">
-//End_Html
-// Author
-// Alexandru Bercuci <A.Bercuci@gsi.de>
-
-  TObjArray *arr = (TObjArray*)fContainer->At(kCenter);
-  if(!arr) {
-    AliWarning("Missing dy=f(y | x, ly) container");
-    return;
-  }
-  Double_t exb2 = fExB*fExB;
-  Float_t s[AliTRDgeometry::kNlayer];
-  TF1 f("f", "gaus", -.5, .5);
-  TF1 fp("fp", "gaus", -3.5, 3.5);
-
-  TH1D *h1 = 0x0; TH2F *h2 = 0x0; TH3S *h3r=0x0, *h3p=0x0;
-  TObjArray *arrRes = (TObjArray*)fResults->At(kCenter);
-  TTree *t = (TTree*)arrRes->At(0);
-  TGraphErrors *gs = 0x0;
-  TAxis *ax = 0x0;
-
-  printf("  const Float_t lSy[6][24] = {\n      {");
-  const Int_t nl = AliTRDgeometry::kNlayer;
-  for(Int_t il=0; il<nl; il++){
-    if(!(h3r = (TH3S*)arr->At(il))) continue;
-    if(!(h3p = (TH3S*)arr->At(nl+il))) continue;
-    gs = (TGraphErrors*)arrRes->At(il+1);
-    fLy = il;
-//    printf("Ly[%d]\n", il);
-    for(Int_t ix=1; ix<=h3r->GetXaxis()->GetNbins(); ix++){
-      ax = h3r->GetXaxis(); ax->SetRange(ix, ix);
-      ax = h3p->GetXaxis(); ax->SetRange(ix, ix);
-      fX  = ax->GetBinCenter(ix);
-//      printf("  x[%2d]=%4.2f\n", ix, fX);
-      for(Int_t iy=1; iy<=h3r->GetYaxis()->GetNbins(); iy++){
-        ax = h3r->GetYaxis(); ax->SetRange(iy, iy);
-        ax = h3p->GetYaxis(); ax->SetRange(iy, iy);
-        fY  = ax->GetBinCenter(iy);
-//        printf("    y[%2d]=%5.2f\n", iy, fY);
-        // finish navigation in the HnSparse
-
-        h1 = (TH1D*)h3r->Project3D("z");
-        Int_t entries = (Int_t)h1->Integral();
-        if(entries < 50) continue;
-        //Adjust(&f, h1);
-        h1->Fit(&f, "QN");
-    
-        // Fill sy,my=f(y_w,x,ly)
-        fR[0] = f.GetParameter(1); fR[1] = f.GetParError(1);
-        fR[2] = f.GetParameter(2); fR[3] = f.GetParError(2);
-
-        h1 = (TH1D*)h3p->Project3D("z");
-        h1->Fit(&fp, "QN");
-        fP[0] = fp.GetParameter(1); fP[1] = fp.GetParError(1);
-        fP[2] = fp.GetParameter(2); fP[3] = fp.GetParError(2);
-
-        //printf("ly[%d] x[%3.1f] y[%+5.2f] m[%5.3f] s[%5.3f] \n", fLy, fX, fY, fR[0], fR[2]);
-        t->Fill();
-
-
-      }
-    }
-    t->Draw("y:x>>h(24, 0., 2.4, 51, -.51, .51)",
-            Form("s[0]*(ly==%d&&abs(m[0])<1.e-1)", fLy),
-            "goff");
-    h2=(TH2F*)gROOT->FindObject("h");
-    f.FixParameter(1, 0.);
-    Int_t n = h2->GetXaxis()->GetNbins(), nn(0); s[il]=0.;
-    printf("    {");
-    for(Int_t ix=1; ix<=n; ix++){
-      ax = h2->GetXaxis();
-      fX  = ax->GetBinCenter(ix);
-      h1 = h2->ProjectionY("hCenPy", ix, ix);
-      //if((Int_t)h1->Integral() < 1.e-10) continue; 
-
-      // Apply lorentz angle correction
-      // retrieve error on the drift length
-      Double_t s2x = AliTRDcluster::GetSX(ix-1); s2x *= s2x;
-      Int_t nnn = 0;
-      for(Int_t iy=1; iy<=h1->GetNbinsX(); iy++){
-        Double_t s2 = h1->GetBinContent(iy); s2*= s2;
-        // sigma square corrected for Lorentz angle
-        // s2 = s2_y(y_w,x)+exb2*s2_x
-        Double_t sy = TMath::Sqrt(TMath::Max(s2 - exb2*s2x, Double_t(0.)));
-        if(sy<1.e-20) continue;
-        h1->SetBinContent(iy, sy); nnn++;
-        printf("s[%6.2f] sx[%6.2f] sy[%6.2f]\n",
-        1.e4*TMath::Sqrt(s2), 1.e4*TMath::Abs(fExB*AliTRDcluster::GetSX(ix-1)), 
-        1.e4*h1->GetBinContent(iy));
-      }
-      // do fit only if enough data
-      Double_t sPRF = 0.;
-      if(nnn>5){
-        h1->Fit(&f, "QN");
-        sPRF = f.GetParameter(2);
-        nn++;
-      }
-      s[il]+=sPRF;
-      printf("%6.4f,%s", sPRF, ix%6?" ":"\n     ");
-      Int_t jx = gs->GetN();
-      gs->SetPoint(jx, fX, 1.e4*sPRF);
-      gs->SetPointError(jx, 0., 0./*f.GetParError(0)*/);
-    }
-    printf("\b},\n");
-    s[il]/=nn;
-
-    f.ReleaseParameter(2);
-
-
-    if(!fCanvas) continue;
-    h2->Draw("lego2fb");
-    fCanvas->Modified(); fCanvas->Update();
-    if(IsSaveAs()) fCanvas->SaveAs(Form("Figures/ProcessCenter_ly[%d].gif", fLy));
-    else gSystem->Sleep(100);
-  }
-  printf("  };\n");
-  printf("  const Float_t lPRF[] = {"
-    "%5.3f, %5.3f, %5.3f, %5.3f, %5.3f, %5.3f};\n",
-    s[0], s[1], s[2], s[3], s[4], s[5]);
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::ProcessSigma()
-{
-// As the r-phi coordinate is the only one which is measured by the TRD detector we have to rely on it to
-// estimate both the radial (x) and r-phi (y) errors. This method is based on the following assumptions. 
-// The measured error in the y direction is the sum of the intrinsic contribution of the r-phi measurement
-// with the contribution of the radial measurement - because x is not a parameter of Alice track model (Kalman).
-// BEGIN_LATEX
-// #sigma^{2}|_{y} = #sigma^{2}_{y*} + #sigma^{2}_{x*}   
-// END_LATEX
-// In the general case 
-// BEGIN_LATEX
-// #sigma^{2}_{y*} = #sigma^{2}_{y} + tg^{2}(#alpha_{L})#sigma^{2}_{x_{drift}}   
-// #sigma^{2}_{x*} = tg^{2}(#phi - #alpha_{L})*(#sigma^{2}_{x_{drift}} + #sigma^{2}_{x_{0}} + tg^{2}(#alpha_{L})*x^{2}/12)
-// END_LATEX
-// where we have explicitely show the lorentz angle correction on y and the projection of radial component on the y
-// direction through the track angle in the bending plane (phi). Also we have shown that the radial component in the
-// last equation has twp terms, the drift and the misalignment (x_0). For ideal geometry or known misalignment one 
-// can solve the equation
-// BEGIN_LATEX
-// #sigma^{2}|_{y} = tg^{2}(#phi - #alpha_{L})*(#sigma^{2}_{x} + tg^{2}(#alpha_{L})*x^{2}/12)+ [#sigma^{2}_{y} + tg^{2}(#alpha_{L})#sigma^{2}_{x}]
-// END_LATEX
-// by fitting a straight line:
-// BEGIN_LATEX
-// #sigma^{2}|_{y} = a(x_{cl}, z_{cl}) * tg^{2}(#phi - #alpha_{L}) + b(x_{cl}, z_{cl})
-// END_LATEX
-// the error parameterization will be given by:
-// BEGIN_LATEX
-// #sigma_{x} (x_{cl}, z_{cl}) = #sqrt{a(x_{cl}, z_{cl}) - tg^{2}(#alpha_{L})*x^{2}/12}
-// #sigma_{y} (x_{cl}, z_{cl}) = #sqrt{b(x_{cl}, z_{cl}) - #sigma^{2}_{x} (x_{cl}, z_{cl}) * tg^{2}(#alpha_{L})}
-// END_LATEX
-// Below there is an example of such dependency. 
-//Begin_Html
-//<img src="TRD/clusterSigmaMethod.gif">
-//End_Html
-//
-// The error parameterization obtained by this method are implemented in the functions AliTRDcluster::GetSX() and
-// AliTRDcluster::GetSYdrift(). For an independent method to determine s_y as a function of drift length check the 
-// function ProcessCenterPad(). One has to keep in mind that while this method return the mean s_y over the distance
-// to pad center distribution the other method returns the *STANDARD* value at center=0 (maximum). To recover the 
-// standard value one has to solve the obvious equation:
-// BEGIN_LATEX
-// #sigma_{y}^{STANDARD} = #frac{<#sigma_{y}>}{#int{s exp(s^{2}/#sigma) ds}}
-// END_LATEX
-// with "<s_y>" being the value calculated here and "sigma" the width of the s_y distribution calculated in 
-// ProcessCenterPad().
-//  
-// Author
-// Alexandru Bercuci <A.Bercuci@gsi.de>
-
-  TObjArray *arr = (TObjArray*)fContainer->At(kSigm);
-  if(!arr){
-    AliWarning("Missing dy=f(x_d, d_w) container");
-    return;
-  }
-
-  // init visualization
-  TGraphErrors *ggs = 0x0;
-  TGraph *line = 0x0;
-  if(fCanvas){
-    ggs = new TGraphErrors();
-    line = new TGraph();
-    line->SetLineColor(kRed);line->SetLineWidth(2);
-  }
-
-  // init logistic support
-  TF1 f("f", "gaus", -.5, .5);
-  TLinearFitter gs(1,"pol1");
-  TH1 *hFrame=0x0;
-  TH1D *h1 = 0x0; TH3S *h3=0x0;
-  TAxis *ax = 0x0;
-  Double_t exb2 = fExB*fExB, x;
-  AliTRDcluster c;
-  TTree *t = (TTree*)fResults->At(kSigm);
-  for(Int_t ix=0; ix<kNTB; ix++){
-    if(!(h3=(TH3S*)arr->At(ix))) continue;
-    c.SetPadTime(ix);
-    x = c.GetXloc(0., 1.5);
-    fX= fAt->GetBinCenter(ix+1);
-    for(Int_t iz=1; iz<=h3->GetXaxis()->GetNbins(); iz++){
-      ax = h3->GetXaxis();
-      ax->SetRange(iz, iz);
-      fZ = ax->GetBinCenter(iz);
-
-      // reset visualization
-      if(fCanvas){ 
-        new(ggs) TGraphErrors();
-        ggs->SetMarkerStyle(7);
-      }
-      gs.ClearPoints();
-
-      for(Int_t ip=1; ip<=h3->GetYaxis()->GetNbins(); ip++){
-        ax = h3->GetYaxis();
-        ax->SetRange(ip, ip); 
-        Double_t tgl = ax->GetBinCenter(ip);
-        // finish navigation in the HnSparse
-
-        //if(TMath::Abs(dydx)>0.18) continue;
-        Double_t tgg = (tgl-fExB)/(1.+tgl*fExB);
-        Double_t tgg2 = tgg*tgg;
-
-        h1 = (TH1D*)h3->Project3D("z");
-        Int_t entries = (Int_t)h1->Integral();
-        if(entries < 50) continue;
-        //Adjust(&f, h1);
-        h1->Fit(&f, "QN");
-
-        Double_t s2  = f.GetParameter(2)*f.GetParameter(2);
-        Double_t s2e = 2.*f.GetParameter(2)*f.GetParError(2);
-        // Fill sy^2 = f(tg^2(phi-a_L))
-        gs.AddPoint(&tgg2, s2, s2e);
-
-        if(!ggs) continue;
-        Int_t jp = ggs->GetN();
-        ggs->SetPoint(jp, tgg2, s2);
-        ggs->SetPointError(jp, 0., s2e);
-      }
-      // TODO here a more robust fit method has to be provided
-      // for which lower boundaries on the parameters have to 
-      // be imposed. Unfortunately the Minuit fit does not work 
-      // for the TGraph in the case of B not 0.
-      if(gs.Eval()) continue;
-
-      fR[0] = gs.GetParameter(1) - x*x*exb2/12.;
-      printf("s2x+x2=%f ang=%f s2x=%f\n", gs.GetParameter(1), x*x*exb2/12., fR[0]);
-      fR[0] = TMath::Max(fR[0], Float_t(4.e-4)); 
-
-      // s^2_y  = s0^2_y + tg^2(a_L) * s^2_x
-      // s0^2_y = f(D_L)*x + s_PRF^2 
-      fR[2]= gs.GetParameter(0)-exb2*fR[0];
-      printf("s2y+s2x=%f s2y=%f\n", fR[0], fR[2]);
-      fR[2] = TMath::Max(fR[2], Float_t(2.5e-5)); 
-      fR[0] = TMath::Sqrt(fR[0]);
-      fR[1] = .5*gs.GetParError(1)/fR[0];
-      fR[2] = TMath::Sqrt(fR[2]);
-      fR[3] = gs.GetParError(0)+exb2*exb2*gs.GetParError(1);
-      t->Fill();
-      printf("    xd=%4.2f[cm] sx=%6.1f[um] sy=%5.1f[um]\n", x, 1.e4*fR[0], 1.e4*fR[2]);
-
-      if(!fCanvas) continue;
-      fCanvas->cd(); fCanvas->SetLogx(); //fCanvas->SetLogy();
-      if(!hFrame){ 
-        fCanvas->SetMargin(0.15, 0.01, 0.1, 0.01);
-        hFrame=new TH1I("hFrame", "", 100, 0., .3);
-        hFrame->SetMinimum(0.);hFrame->SetMaximum(.005);
-        hFrame->SetXTitle("tg^{2}(#phi-#alpha_{L})");
-        hFrame->SetYTitle("#sigma^{2}y[cm^{2}]");
-        hFrame->GetYaxis()->SetTitleOffset(2.);
-        hFrame->SetLineColor(1);hFrame->SetLineWidth(1);
-        hFrame->Draw();
-      } else hFrame->Reset();
-      Double_t xx = 0., dxx=.2/50;
-      for(Int_t ip=0;ip<50;ip++){ 
-        line->SetPoint(ip, xx,  gs.GetParameter(0)+xx*gs.GetParameter(1)); 
-        xx+=dxx;
-      }
-      ggs->Draw("pl"); line->Draw("l");
-      fCanvas->Modified(); fCanvas->Update();
-      if(IsSaveAs()) fCanvas->SaveAs(Form("Figures/ProcessSigma_z[%5.3f]_x[%5.3f].gif", fZ, fX));
-      else gSystem->Sleep(100);
-    }
-  }
-  return;
-}
-
-//_______________________________________________________
-void AliTRDclusterResolution::ProcessMean()
-{
-// By this method the cluster shift in r-phi and radial directions can be estimated by comparing with the MC.
-// The resolution of the cluster corrected for pad tilt with respect to MC in the r-phi (measuring) plane can be 
-// expressed by:
-// BEGIN_LATEX
-// #Delta y=w - y_{MC}(x_{cl})
-// w = y_{cl}^{'} + h*(z_{MC}(x_{cl})-z_{cl})
-// y_{MC}(x_{cl}) = y_{0} - dy/dx*x_{cl}
-// z_{MC}(x_{cl}) = z_{0} - dz/dx*x_{cl}
-// y_{cl}^{'} = y_{cl}-x_{cl}*tg(#alpha_{L})
-// END_LATEX
-// where x_cl is the drift length attached to a cluster, y_cl is the r-phi coordinate of the cluster measured by
-// charge sharing on adjacent pads and y_0 and z_0 are MC reference points (as example the track references at 
-// entrance/exit of a chamber). If we suppose that both r-phi (y) and radial (x) coordinate of the clusters are 
-// affected by errors we can write
-// BEGIN_LATEX
-// x_{cl} = x_{cl}^{*} + #delta x 
-// y_{cl} = y_{cl}^{*} + #delta y 
-// END_LATEX 
-// where the starred components are the corrected values. Thus by definition the following quantity
-// BEGIN_LATEX
-// #Delta y^{*}= w^{*} - y_{MC}(x_{cl}^{*})
-// END_LATEX
-// has 0 average over all dependency. Using this decomposition we can write:
-// BEGIN_LATEX
-// <#Delta y>=<#Delta y^{*}> + <#delta x * (dy/dx-h*dz/dx) + #delta y - #delta x * tg(#alpha_{L})>
-// END_LATEX
-// which can be transformed to the following linear dependence:
-// BEGIN_LATEX
-// <#Delta y>= <#delta x> * (dy/dx-h*dz/dx) + <#delta y - #delta x * tg(#alpha_{L})>
-// END_LATEX
-// if expressed as function of dy/dx-h*dz/dx. Furtheremore this expression can be plotted for various clusters
-// i.e. we can explicitely introduce the diffusion (x_cl) and drift cell - anisochronity (z_cl) dependences. From 
-// plotting this dependence and linear fitting it with:
-// BEGIN_LATEX
-// <#Delta y>= a(x_{cl}, z_{cl}) * (dy/dx-h*dz/dx) + b(x_{cl}, z_{cl})
-// END_LATEX
-// the systematic shifts will be given by:
-// BEGIN_LATEX
-// #delta x (x_{cl}, z_{cl}) = a(x_{cl}, z_{cl})
-// #delta y (x_{cl}, z_{cl}) = b(x_{cl}, z_{cl}) + a(x_{cl}, z_{cl}) * tg(#alpha_{L})
-// END_LATEX
-// Below there is an example of such dependency. 
-//Begin_Html
-//<img src="TRD/clusterShiftMethod.gif">
-//End_Html
-//
-// The occurance of the radial shift is due to the following conditions 
-//   - the approximation of a constant drift velocity over the drift length (larger drift velocities close to 
-//     cathode wire plane)
-//   - the superposition of charge tails in the amplification region (first clusters appear to be located at the 
-//     anode wire)
-//   - the superposition of charge tails in the drift region (shift towards anode wire)
-//   - diffusion effects which convolute with the TRF thus enlarging it
-//   - approximate knowledge of the TRF (approximate measuring in test beam conditions) 
-// 
-// The occurance of the r-phi shift is due to the following conditions 
-//   - approximate model for cluster shape (LUT)
-//   - rounding-up problems
-//
-// The numerical results for ideal simulations for the radial and r-phi shifts are displayed below and used 
-// for the cluster reconstruction (see the functions AliTRDcluster::GetXcorr() and AliTRDcluster::GetYcorr()). 
-//Begin_Html
-//<img src="TRD/clusterShiftX.gif">
-//<img src="TRD/clusterShiftY.gif">
-//End_Html
-// More details can be found in the presentation given during the TRD
-// software meeting at the end of 2008 and beginning of year 2009, published on indico.cern.ch.
-// 
-// Author 
-// Alexandru Bercuci <A.Bercuci@gsi.de>
-
-
-  TObjArray *arr = (TObjArray*)fContainer->At(kMean);
-  if(!arr){
-    AliWarning("Missing dy=f(x_d, d_w) container");
-    return;
-  }
-
-  // init logistic support
-  TF1 f("f", "gaus", -.5, .5);
-  TF1 line("l", "[0]+[1]*x", -.15, .15);
-  TGraphErrors *gm = new TGraphErrors();
-  TH1 *hFrame=0x0;
-  TH1D *h1 = 0x0; TH3S *h3 =0x0;
-  TAxis *ax = 0x0;
-  Double_t x;
-
-  AliTRDcluster c;
-  TTree *t = (TTree*)fResults->At(kMean);
-  for(Int_t ix=0; ix<kNTB; ix++){
-    if(!(h3=(TH3S*)arr->At(ix))) continue;
-    c.SetPadTime(ix);
-    x = c.GetXloc(0., 1.5);
-    fX= fAt->GetBinCenter(ix+1);
-    for(Int_t iz=1; iz<=h3->GetXaxis()->GetNbins(); iz++){
-      ax = h3->GetXaxis();
-      ax->SetRange(iz, iz);
-      fZ = ax->GetBinCenter(iz);
-
-      // reset fitter
-      new(gm) TGraphErrors();
-      gm->SetMarkerStyle(7);
-
-      for(Int_t ip=1; ip<=h3->GetYaxis()->GetNbins(); ip++){
-        ax = h3->GetYaxis();
-        ax->SetRange(ip, ip); 
-        Double_t tgl = ax->GetBinCenter(ip);
-        // finish navigation in the HnSparse
-
-        h1 = (TH1D*)h3->Project3D("z");
-        Int_t entries = (Int_t)h1->Integral();
-        if(entries < 50) continue;
-        //Adjust(&f, h1);
-        h1->Fit(&f, "QN");
-
-        // Fill <Dy> = f(dydx - h*dzdx)
-        Int_t jp = gm->GetN();
-        gm->SetPoint(jp, tgl, f.GetParameter(1));
-        gm->SetPointError(jp, 0., f.GetParError(1));
-      }
-      if(gm->GetN()<4) continue;
-
-      gm->Fit(&line, "QN");
-      fR[0] = line.GetParameter(1); // dx
-      fR[1] = line.GetParError(1);
-      fR[2] = line.GetParameter(0) + fExB*fR[0]; // xs = dy - tg(a_L)*dx
-      t->Fill();
-      printf("    xd=%4.2f[cm] dx=%6.2f[um] dy=%6.2f[um]\n", x, 1.e4*fR[0], 1.e4*fR[2]);
-
-      if(!fCanvas) continue;
-      fCanvas->cd();
-      if(!hFrame){ 
-        fCanvas->SetMargin(0.1, 0.02, 0.1, 0.01);
-        hFrame=new TH1I("hFrame", "", 100, -.3, .3);
-        hFrame->SetMinimum(-.1);hFrame->SetMaximum(.1);
-        hFrame->SetXTitle("tg#phi-htg#theta");
-        hFrame->SetYTitle("#Delta y[cm]");
-        hFrame->GetYaxis()->SetTitleOffset(1.5);
-        hFrame->SetLineColor(1);hFrame->SetLineWidth(1);
-        hFrame->Draw();
-      } else hFrame->Reset();
-      gm->Draw("pl"); line.Draw("same");
-      fCanvas->Modified(); fCanvas->Update();
-      if(IsSaveAs()) fCanvas->SaveAs(Form("Figures/ProcessMean_Z[%5.3f]_X[%5.3f].gif", fZ, fX));
-      else gSystem->Sleep(100);
-    }
-  }
-}
diff --git a/TRD/qaRec/AliTRDclusterResolution.h b/TRD/qaRec/AliTRDclusterResolution.h
deleted file mode 100644 (file)
index 7bdc891..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef ALITRDCLUSTERRESOLUTION_H
-#define ALITRDCLUSTERRESOLUTION_H
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  TRD cluster error parameterization                  
-//  Authors:                                                              //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class TCanvas;
-class TObjArray;
-class TAxis;
-class AliTRDclusterResolution : public AliTRDrecoTask
-{
-public:
-  enum EAxisBinning { // bins in z and x direction
-    kNTB = 24
-   ,kND  = 25
-   ,kN   = kND*kNTB
-  };
-  enum EResultContainer { // results container type
-    kCenter = 0   // cluster2center pad calibration
-   ,kQRes   = 1   // resolution on charge dependence
-   ,kSigm   = 2   // sigma cluster as func of x and z
-   ,kMean   = 3   // shift cluster as func of x and z
-   ,kNtasks = 4   // total number os sub tasks
-  };
-  enum ECheckBits { // force setting the ExB
-    kSaveAs    = BIT(22)
-   ,kExB       = BIT(23)
-  };
-  AliTRDclusterResolution(const char *name="ClErrParam", const char *title="Cluster error monitor");
-  virtual ~AliTRDclusterResolution();
-
-  void          ConnectInputData(Option_t *);
-  void          CreateOutputObjects();
-  void          Exec(Option_t *);
-  Int_t         GetDetector() const { return fDet; }
-  inline Float_t GetExB() const;
-  inline Float_t GetVdrift() const;
-  Bool_t        GetRefFigure(Int_t ifig);
-  Bool_t        HasProcess(EResultContainer bit) const {return TESTBIT(fStatus, bit);}
-  Bool_t        HasExB() const { return TestBit(kExB);}
-
-  TObjArray*    Histos(); 
-  TObjArray*    Results() const {return fResults;}; 
-
-  Bool_t        IsVisual() const {return Bool_t(fCanvas);}
-  Bool_t        IsSaveAs() const {return TestBit(kSaveAs);}
-
-  Bool_t        PostProcess();
-  Bool_t        SetExB(Int_t det=-1, Int_t c = 70, Int_t r = 7);
-  void          SetVisual();
-  void          SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fStatus, bit) : CLRBIT(fStatus, bit);}
-  void          SetSaveAs(Bool_t v = kTRUE) {SetBit(kSaveAs, v);}
-  inline void   ResetProcess();
-
-protected:
-  void    ProcessCharge();
-  void    ProcessCenterPad();
-  void    ProcessSigma();
-  void    ProcessMean();
-
-private:
-  AliTRDclusterResolution(const AliTRDclusterResolution&);  
-  AliTRDclusterResolution& operator=(const AliTRDclusterResolution&);
-
-  TCanvas    *fCanvas; //! visualization canvas 
-  TObjArray  *fInfo;   //! list of cluster info
-  TObjArray  *fResults;// list of result graphs/histos
-  TAxis      *fAt;     //! binning in the x(radial) direction (time)
-  UChar_t    fStatus;  // steer parameter of the task
-  Short_t    fDet;     // detector (-1 for all)
-  Float_t    fExB;     // tg of the Lorentz angle
-  Float_t    fVdrift;  // mean drift velocity
-  static const Float_t fgkTimeBinLength;// time bin length (invers of sampling frequency)
-
-  // working named variables
-  UChar_t    fLy;      //! TRD plane 
-  Float_t    fX;       //! local drift length 
-  Float_t    fY;       //! local rphi offset 
-  Float_t    fZ;       //! local anode wire offset 
-  Float_t    fR[4];    //! mean/sgm resolution
-  Float_t    fP[4];    //! mean/sgm pulls
-  
-  ClassDef(AliTRDclusterResolution, 3)  // cluster resolution
-};
-
-//___________________________________________________
-inline Float_t AliTRDclusterResolution::GetExB() const
-{ 
-  if(!HasExB()){
-    printf("WARNING :: ExB was not set. Use B=0.\n");
-  }
-  return fExB;
-}
-
-//___________________________________________________
-inline Float_t AliTRDclusterResolution::GetVdrift() const
-{ 
-  if(!HasExB()){
-    printf("WARNING :: ExB was not set. Use B=0.\n");
-  }
-  return fVdrift;
-}
-
-//___________________________________________________
-inline void AliTRDclusterResolution::ResetProcess()
-{
-  CLRBIT(fStatus, kQRes);
-  CLRBIT(fStatus, kCenter);
-  CLRBIT(fStatus, kSigm);
-  CLRBIT(fStatus, kMean);
-}
-
-#endif
-
diff --git a/TRD/qaRec/AliTRDefficiency.cxx b/TRD/qaRec/AliTRDefficiency.cxx
deleted file mode 100644 (file)
index 1d4440e..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * 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.                  *
- **************************************************************************/
-
-/* $Id: AliTRDefficiency.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-//  Authors:                                                              //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include <TClonesArray.h>
-#include <TObjArray.h>
-#include <TProfile.h>
-#include "TTreeStream.h"
-
-#include "AliPID.h"
-#include "AliESDtrack.h"
-#include "AliTrackReference.h"
-#include "AliExternalTrackParam.h"
-#include "AliTracker.h"
-#include "AliAnalysisManager.h"
-
-#include "Cal/AliTRDCalPID.h"
-#include "AliTRDefficiency.h"
-#include "info/AliTRDtrackInfo.h"
-
-ClassImp(AliTRDefficiency)
-
-//____________________________________________________________________
-AliTRDefficiency::AliTRDefficiency()
-  :AliTRDrecoTask("efficiency", "TRD barrel tracking efficiency checker")
-  ,fMissed(0x0)
-{
-  //
-  // Default constructor
-  //
-}
-
-//____________________________________________________________________
-AliTRDefficiency::~AliTRDefficiency()
-{
-  // Destructor
-  if(fMissed){
-    fMissed->Delete();
-    delete fMissed;
-  }
-}
-
-//____________________________________________________________________
-void  AliTRDefficiency::CreateOutputObjects()
-{
-  //
-  // Create output objects
-  //
-
-  OpenFile(0, "RECREATE");
-  const Int_t nbins = AliTRDCalPID::kNMom;
-  Float_t xbins[nbins+1] = {.5, .7, .9, 1.3, 1.7, 2.4, 3.5, 4.5, 5.5, 7., 9., 11.};
-
-  TH1 *h = 0x0;
-  fContainer = new TObjArray();
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    fContainer->Add(h = new TProfile(Form("h%s", AliTRDCalPID::GetPartSymb(is)), "", nbins, xbins));
-    h->SetLineColor(AliTRDCalPID::GetPartColor(is));
-    h->SetMarkerColor(AliTRDCalPID::GetPartColor(is));
-    h->SetMarkerStyle(7);
-  }
-  fContainer->Add(h = new TProfile("h", "", nbins, xbins));
-  h->SetMarkerStyle(7);
-} 
-
-//____________________________________________________________________
-void AliTRDefficiency::Exec(Option_t *)
-{
-  //
-  // Do it
-  //
-
-  Int_t labelsacc[10000]; 
-  memset(labelsacc, 0, sizeof(Int_t) * 10000);
-       
-  if(!fMissed){ 
-    fMissed = new TClonesArray("AliTRDtrackInfo", 10);
-    fMissed->SetOwner();
-  }
-
-  Float_t mom;
-  Int_t selection[10000], nselect = 0;
-  ULong_t status; Int_t pidx;
-  Int_t nTRD = 0, nTPC = 0, nMiss = 0;
-  AliTRDtrackInfo     *track = 0x0;
-  AliTrackReference     *ref = 0x0;
-  AliExternalTrackParam *esd = 0x0;
-  for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
-    track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
-
-               if(!track->HasESDtrack()) continue;
-    status = track->GetStatus();
-
-    // missing TPC propagation - interesting for SA
-    if(!(status&AliESDtrack::kTPCout)) continue;
-
-    // missing MC info.
-    if(HasMCdata() && track->GetNTrackRefs() <= 1) continue;
-   
-    nTPC++;
-    selection[nselect++]=itrk;
-    ref  = track->GetTrackRef(0);
-    esd  = track->GetESDinfo()->GetOuterParam();
-    mom  = ref ? ref->P(): esd->P();
-    pidx = AliTRDCalPID::GetPartIndex(track->GetPDG());
-    pidx = TMath::Max(pidx, 0);
-
-    //Int_t n = track->GetNumberOfClusters(); 
-    // where are this tracklets ???
-    //if(ncls0 > ncls1) printf("%3d ESD[%3d] TRD[%3d|%3d]\n", itrk, ncls0, ncls1, n);
-    if(track->GetNumberOfClustersRefit()){ 
-      ((TProfile*)fContainer->At(pidx))->Fill(mom, 1.);
-                       labelsacc[nTRD] = track->GetLabel();
-      nTRD++;
-      continue;
-    }
-
-
-
-    Float_t xmed, xleng;
-    Int_t iref = 1; Bool_t found = kFALSE;
-    while((ref = track->GetTrackRef(iref))){
-      xmed = .5*(ref->LocalX() + track->GetTrackRef(iref-1)->LocalX());
-      xleng= (ref->LocalX() - track->GetTrackRef(iref-1)->LocalX());
-      if(TMath::Abs(xmed - 298.5) < .5 &&
-        TMath::Abs(xleng - 3.7) < .1){ 
-        found = kTRUE;
-        break;
-      }
-      iref++;
-    }
-    if(!found){ 
-      nTPC--;
-      // track missing first layer. Maybe interesting for SA.
-      continue;
-    }
-    nselect--;
-    new ((*fMissed)[nMiss]) AliTRDtrackInfo(*track);
-    nMiss++;
-  }
-  AliDebug(2, Form("%3d Tracks: ESD[%3d] TPC[%3d] TRD[%3d | %5.2f%%] Off[%d]", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), fTracks->GetEntriesFast(), nTPC, nTRD, nTPC ? 1.E2*nTRD/float(nTPC) : 0., fMissed->GetEntriesFast()));
-
-
-  // Find double tracks
-  Float_t threshold = 10.;
-  AliTrackReference *refMiss = 0x0;
-  AliExternalTrackParam *op = 0x0;
-  AliTRDtrackInfo       *tt = 0x0;
-  for(Int_t imiss=0; imiss<nMiss; imiss++){
-    //printf("Searching missing %d ...\n", imiss);
-
-    // get outer param of missed
-    tt = (AliTRDtrackInfo*)fMissed->UncheckedAt(imiss);
-    op = tt->GetESDinfo()->GetOuterParam();
-    Double_t alpha = op->GetAlpha(), cosa = TMath::Cos(alpha), sina = TMath::Sin(alpha);
-
-    Double_t xyz[3], x0, y0, z0, x, y, z, dx, dy, dz, d;
-
-    Bool_t bFOUND = kFALSE;
-    for(Int_t iselect=0; iselect<nselect; iselect++){
-      track = (AliTRDtrackInfo*)fTracks->UncheckedAt(selection[iselect]);
-
-      // check first MC ... if available
-      d = 0;
-      for(Int_t iref=0; iref<track->GetNTrackRefs(); iref++){
-        if(!(ref = track->GetTrackRef(iref))) continue;
-        if((refMiss = tt->GetTrackRef(iref))){
-          dy = ref->LocalY() - refMiss->LocalY();
-          dz = ref->Z() - refMiss->Z();
-        } else {
-          // compare missOP with refTrackRef in LTC
-          x0 = ref->LocalX();
-          op->GetYAt(x0, AliTracker::GetBz(), y0);
-          op->GetZAt(x0, AliTracker::GetBz(), z0);
-          dy = y0 - ref->LocalY();
-          dz = z0 - ref->Z();
-        }
-        d += (dy*dy + dz*dz);
-      }
-      //printf("\td[%d] = %f N[%d]\n", selection[iselect], d, track->GetNTrackRefs());
-      if((track->GetNTrackRefs())){ 
-        d /= track->GetNTrackRefs();
-        if(d < threshold){
-          //printf("\t\tFound %2d in ref[%3d] : d[%f]\n", imiss, selection[iselect], d/track->GetNTrackRefs());
-          bFOUND = kTRUE; break;
-        }
-      }
-
-      // process outer param ... always available
-      // compare missOP with OP in GTC
-      esd = track->GetESDinfo()->GetOuterParam();
-      esd->GetXYZ(xyz);
-      x0 = esd->GetX();
-      op->GetYAt(x0, AliTracker::GetBz(), y0);
-      op->GetZAt(x0, AliTracker::GetBz(), z0);
-      x = x0*cosa - y0*sina;
-      y = x0*sina + y0*cosa;
-      z = z0;
-      dx=xyz[0]-x;
-      dy=xyz[1]-y;
-      dz=xyz[2]-z;
-      d = dx*dx+dy*dy+dz*dz;
-      //printf("\td[%d] = %f op\n", selection[iselect], d);
-      if(d < threshold){
-        //printf("\t\tFound %2d in op[%3d]  : d[%f] dx[%5.2f] dy[%5.2f] dz[%5.2f]\n", imiss, selection[iselect], d, dx, dy, dz);
-        bFOUND = kTRUE; break;
-      }
-    }
-    if(bFOUND) nTPC--;
-    else{ 
-      ref = tt->GetTrackRef(0);
-      mom = ref ? ref->P(): op->P();
-      pidx = AliTRDCalPID::GetPartIndex(tt->GetPDG());
-      pidx = TMath::Max(pidx, 0);
-      ((TProfile*)fContainer->At(pidx))->Fill(mom, 0.);
-      AliDebug(2, Form("  NOT bFOUND Id[%d] Mom[%f]\n", tt->GetTrackId(), mom));
-    }
-  }
-
-  AliDebug(2, Form("%3d Tracks: ESD[%3d] TPC[%3d] TRD[%3d | %5.2f%%] Off[%d]", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), fTracks->GetEntriesFast(), nTPC, nTRD, nTPC ? 1.E2*nTRD/float(nTPC) : 0., fMissed->GetEntriesFast()));
-
-  //fMissed->Delete();
-       // check for double countings
-       Int_t indices[10000]; memset(indices, 0, sizeof(Int_t) * 10000);
-       TMath::Sort(nTRD, labelsacc, indices);
-       if(DebugLevel() > 2){
-       for(Int_t itk = 0; itk < nTRD - 1; itk++)
-               if(labelsacc[indices[itk]] ==labelsacc[indices[itk + 1]]) printf("Double counted MC track: %d\n", labelsacc[indices[itk]]);
-       }
-  PostData(0, fContainer);
-}
-
-
-//____________________________________________________________________
-Bool_t AliTRDefficiency::GetRefFigure(Int_t ifig)
-{
-// Steer reference figures
-
-  Bool_t bFIRST = kTRUE;
-  TProfile *h = 0x0;
-  switch(ifig){
-  case 0:
-    h = (TProfile*)fContainer->At(AliPID::kSPECIES);
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      h->Add((TProfile*)fContainer->At(is));
-    }
-    h->SetMarkerColor(kBlack);
-    h->SetLineColor(kBlack);
-    h->GetXaxis()->SetTitle("p [GeV/c]");
-    h->Draw("e1");
-    break;
-  case 1:
-    bFIRST = kTRUE;
-    for(Int_t is=0; is<AliPID::kSPECIES; is++){
-      if(!(h = (TProfile*)fContainer->At(is))) continue;
-      if(bFIRST){
-        h->Draw("e1");
-        h->GetXaxis()->SetTitle("p [GeV/c]");
-      } else h->Draw("same e1");
-      bFIRST = kFALSE;
-    }
-    break;
-  }
-  return kTRUE;
-}
-
-
-//____________________________________________________________________
-Bool_t AliTRDefficiency::PostProcess()
-{
-  fNRefFigures = HasMCdata() ? 2 : 1; 
-  return kTRUE;
-}
diff --git a/TRD/qaRec/AliTRDefficiency.h b/TRD/qaRec/AliTRDefficiency.h
deleted file mode 100644 (file)
index ea27399..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef ALITRDEFFICIENCY_H
-#define ALITRDEFFICIENCY_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDefficiency.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class TObjArray;
-class TList;
-class TClonesArray;
-class TTreeSRedirector;
-class AliTRDefficiency : public AliTRDrecoTask
-{
-public:
-  AliTRDefficiency();
-  virtual ~AliTRDefficiency();
-  void    CreateOutputObjects();
-  void    Exec(Option_t *);
-  Bool_t  GetRefFigure(Int_t ifig);
-  Bool_t  PostProcess();
-
-private:
-  AliTRDefficiency(const AliTRDefficiency&);
-  AliTRDefficiency& operator=(const AliTRDefficiency&);
-
-private:
-  TClonesArray     *fMissed;            // Missed ?
-
-  ClassDef(AliTRDefficiency, 1) // TRD tracking efficiency
-};
-
-#endif
-
diff --git a/TRD/qaRec/AliTRDefficiencyMC.cxx b/TRD/qaRec/AliTRDefficiencyMC.cxx
deleted file mode 100644 (file)
index 1297757..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDefficiencyMC.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-//  Authors:                                                              //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include <TObjArray.h>
-#include <TClonesArray.h>
-#include <TProfile.h>
-#include <TMath.h>
-#include "TTreeStream.h"
-
-#include "AliMagF.h"
-#include "AliPID.h"
-#include "AliMathBase.h"
-#include "AliTrackReference.h"
-#include "AliAnalysisManager.h"
-
-#include "AliTRDcluster.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-#include "Cal/AliTRDCalPID.h"
-#include "info/AliTRDtrackInfo.h"
-#include "AliTRDinfoGen.h"
-#include "AliTRDefficiencyMC.h"
-
-ClassImp(AliTRDefficiencyMC)
-
-//_____________________________________________________________________________
-AliTRDefficiencyMC::AliTRDefficiencyMC()
-  :AliTRDrecoTask("EfficiencyMC", "Combined Tracking Efficiency")
-{
-  //
-  // Default constructor
-  //
-}
-
-
-//_____________________________________________________________________________
-void AliTRDefficiencyMC::CreateOutputObjects(){
-  //
-  // Create output objects
-  //
-
-  OpenFile(0, "RECREATE");
-  fContainer = Histos();
-
-}
-
-//_____________________________________________________________________________
-void AliTRDefficiencyMC::Exec(Option_t *){
-  //
-  // Execute the task:
-  //
-  // Loop over TrackInfos
-  // 1st: check if there is a trackTRD
-  // 2nd: put conditions on the track:
-  //      - check if we did not register it before
-  //      - check if we have Track References for the track 
-  // 3rd: Register track:
-  //      - accepted if both conditions are fulfilled
-  //      - contamination if at least one condition is not fulfilled
-  // 4th: check Monte-Carlo Track wheter findable or not if there is no TRD track in this track info
-  // 5th: register MC track as rejected if findable and not jet registered
-  // Match the registers accepted and rejected and clean register rejected
-  // Fill the histograms
-  //
-  const Int_t kArraySize = 10000;     // Store indices of track references in an array
-  Int_t indexAccepted[kArraySize], indexRejected[kArraySize], indexContamination[kArraySize];
-  memset(indexAccepted, 0, sizeof(Int_t) * kArraySize);
-  memset(indexRejected, 0, sizeof(Int_t) * kArraySize);
-  memset(indexContamination, 0, sizeof(Int_t) * kArraySize);
-  Int_t naccepted = 0, nrejected = 0, ncontamination = 0;
-  Bool_t isContamination = kFALSE;
-  
-  Int_t nTrackInfos = fTracks->GetEntriesFast();
-  AliTRDtrackV1 *trackTRD = 0x0;
-  AliTRDtrackInfo *trkInf = 0x0;
-  for(Int_t itinf = 0; itinf < nTrackInfos; itinf++){
-    trkInf = dynamic_cast<AliTRDtrackInfo *>(fTracks->UncheckedAt(itinf));
-    if(!trkInf) continue;
-    if(trkInf->GetTrack() || trkInf->GetNumberOfClustersRefit()){
-      isContamination = IsRegistered(trkInf,indexAccepted,naccepted);
-      if(!trkInf->GetNTrackRefs()){
-        // We reject the track since the Monte Carlo Information is missing
-        AliDebug(1, Form("Error: Track Reference missing for Track %d", trkInf->GetLabel()));
-        isContamination = kTRUE;
-        // Debugging
-        if(trackTRD && DebugLevel() > 5) FillStreamTrackWOMC(trkInf);
-      }        
-      if(isContamination){
-        // reject kink (we count these only once)
-        if(trkInf->GetKinkIndex()) continue;
-        // Register track as contamination
-        indexContamination[ncontamination++]=itinf;
-        continue;
-      }
-      // Accept track
-      AliDebug(4, "Accept track");
-      // Register track as accepted
-      indexAccepted[naccepted++] = itinf;
-    }else{
-      if(IsFindable(trkInf)){
-        // register track as rejected if not already registered there
-        // Attention:
-        // These track infos are not!!! registered as contamination
-        if(!IsRegistered(trkInf, indexRejected, nrejected)) indexRejected[nrejected++] = itinf;
-      }
-    }
-  }
-  // we have to check if the rejected tracks are registered as found
-  // a possible source for this:
-  // first the track is not found by the barrel tracking but it is later found
-  // by the stand alone tracking, then two track info objects with the same 
-  // label would be created
-  // Attention:
-  // these tracks are not! registered as contamination
-  Int_t tmprejected[kArraySize]; Int_t nrej = nrejected;
-  memcpy(tmprejected, indexRejected, sizeof(Int_t) * nrejected);
-  nrejected = 0;
-  for(Int_t irej = 0; irej < nrej; irej++){
-    trkInf = dynamic_cast<AliTRDtrackInfo *>(fTracks->At(tmprejected[irej]));
-    if(!IsRegistered(trkInf,indexAccepted,naccepted)) indexRejected[nrejected++] = tmprejected[irej];
-  }
-  // Fill Histograms
-  FillHistograms(naccepted, &indexAccepted[0], kAccepted);
-  FillHistograms(nrejected, &indexRejected[0], kRejected);
-  FillHistograms(ncontamination, &indexContamination[0], kContamination);
-  Int_t nall = naccepted + nrejected;
-  //if(DebugLevel()>=1)
-  AliInfo(Form("%3d Tracks: MC[%3d] TRD[%3d | %5.2f%%] \n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nall, naccepted, nall ? 1.E2*Float_t(naccepted)/Float_t(nall) : 0.));
-  AliInfo(Form("%3d Tracks: ALL[%3d] Contamination[%3d | %5.2f%%] \n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nall + ncontamination, ncontamination, nall ? 1.E2*Float_t(ncontamination)/Float_t(nall + ncontamination) : 0.));
-
-  PostData(0, fContainer);
-}
-
-
-//_____________________________________________________________________________
-Bool_t AliTRDefficiencyMC::PostProcess()
-{
-  //
-  // Post Process 
-  //
-  // Change the histogram style
-  // For species histograms apply the colors connected with the given particle species
-  //
-  TH1 *histo = dynamic_cast<TH1 *>(fContainer->At(kEfficiencyHistogram));
-  histo->SetMarkerStyle(22);
-  histo->SetMarkerColor(kBlue);
-  histo->GetXaxis()->SetTitle("p [GeV/c]");
-  histo->GetXaxis()->SetMoreLogLabels();
-  histo->GetYaxis()->SetTitle("Efficiency [%]");
-  histo->GetYaxis()->SetRangeUser(0.99, 1.005);
-
-  histo = dynamic_cast<TH1 *>(fContainer->At(kContaminationHistogram));
-  histo->SetMarkerStyle(22);
-  histo->SetMarkerColor(kBlue);
-  histo->GetXaxis()->SetTitle("p [GeV/c]");
-  histo->GetXaxis()->SetMoreLogLabels();
-  histo->GetYaxis()->SetTitle("Contamination [%]");
-  
-  // Species Efficiency Histograms
-  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
-    histo = dynamic_cast<TH1 *>(fContainer->At(kEfficiencySpeciesHistogram  + ispec));
-    histo->SetMarkerStyle(22);
-    histo->SetLineColor(AliTRDCalPID::GetPartColor(ispec));
-    histo->SetMarkerColor(AliTRDCalPID::GetPartColor(ispec));
-    histo->GetXaxis()->SetTitle("p [GeV/c]");
-    histo->GetXaxis()->SetMoreLogLabels();
-    histo->GetYaxis()->SetTitle("Efficiency [%]");
-    histo->GetYaxis()->SetRangeUser(0.99, 1.005);
-  }
-  
-  // Species Contamination Histograms
-  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
-    histo = dynamic_cast<TH1 *>(fContainer->At(kContaminationSpeciesHistogram  + ispec));
-    histo->SetMarkerStyle(22);
-    histo->SetLineColor(AliTRDCalPID::GetPartColor(ispec));
-    histo->SetMarkerColor(AliTRDCalPID::GetPartColor(ispec));
-    histo->GetXaxis()->SetTitle("p [GeV/c]");
-    histo->GetXaxis()->SetMoreLogLabels();
-    histo->GetYaxis()->SetTitle("Contamination [%]");
-  }
-  
-  fNRefFigures = 6;
-  return kTRUE;
-}
-
-//_____________________________________________________________________________
-Bool_t AliTRDefficiencyMC::GetRefFigure(Int_t ifig){
-  //
-  // Plot the histograms
-  //
-  if(ifig >= fNRefFigures) return kFALSE;
-  if(ifig < 2){
-    (dynamic_cast<TH1 *>(fContainer->At(ifig)))->Draw("e1");
-    return kTRUE;
-  }
-  switch(ifig){
-  case 2:
-    (dynamic_cast<TH1 *>(fContainer->At(kEfficiencySpeciesHistogram)))->Draw("e1");
-    for(Int_t ispec = 1; ispec < AliPID::kSPECIES; ispec++)
-      (dynamic_cast<TH1 *>(fContainer->At(kEfficiencySpeciesHistogram + ispec)))->Draw("e1same");
-    break;
-  case 3:
-    (dynamic_cast<TH1 *>(fContainer->At(kContaminationSpeciesHistogram)))->Draw("e1");
-    for(Int_t ispec = 1; ispec < AliPID::kSPECIES; ispec++)
-      (dynamic_cast<TH1 *>(fContainer->At(kContaminationSpeciesHistogram + ispec)))->Draw("e1same");
-    break;
-  case 4:
-    (dynamic_cast<TH1 *>(fContainer->At(kEfficiencyNoPID)))->Draw("e1");
-    break;
-  case 5:
-    (dynamic_cast<TH1 *>(fContainer->At(kContaminationNoPID)))->Draw("e1");
-    break;
-  }
-  return kTRUE;
-}
-
-//_____________________________________________________________________________
-TObjArray *AliTRDefficiencyMC::Histos(){
-  //
-  // Create the histograms
-  //
-  const Int_t nbins = 11;
-
-  if(fContainer) return fContainer;
-  Float_t xbins[nbins+1] = {.5, .7, .9, 1.3, 1.7, 2.4, 3.5, 4.5, 5.5, 7., 9., 11.};
-  
-  TString species[AliPID::kSPECIES] = {"Pions", "Muons", "Electrons", "Kaons", "Protons"};
-  TString species_short[AliPID::kSPECIES] = {"Pi", "Mu", "El", "Ka", "Pr"};
-  
-  fContainer = new TObjArray();
-  fContainer->AddAt(new TProfile("trEffComb", "Combined Tracking Efficiency", nbins, xbins), kEfficiencyHistogram);
-  fContainer->AddAt(new TProfile("trContComb", "Combined Tracking Contamination", nbins, xbins), kContaminationHistogram);
-  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++)
-    fContainer->AddAt(new TProfile(Form("trEffComb%s", species_short[ispec].Data()), Form("Combined Tracking Efficiency %s", species[ispec].Data()), nbins, xbins), kEfficiencySpeciesHistogram + ispec);
-  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++)
-    fContainer->AddAt(new TProfile(Form("trContComb%s", species_short[ispec].Data()), Form("Combined Tracking Contamination %s", species[ispec].Data()), nbins, xbins), kContaminationSpeciesHistogram + ispec);
-  fContainer->AddAt(new TProfile("trEffCombNoPID", "Combined Tracking Efficiency", nbins, xbins), kEfficiencyNoPID);
-  fContainer->AddAt(new TProfile("trContCombNoPID", "Combined Tracking Contamination", nbins, xbins), kContaminationNoPID);
-  return fContainer;
-}
-
-//_____________________________________________________________________________
-Bool_t AliTRDefficiencyMC::IsFindable(AliTRDtrackInfo * const trkInf){
-  //
-  // Apply Cuts on the Monte Carlo track references
-  // return whether track is findable or not
-  //
-  const Float_t kAlpha = 0.349065850;
-  
-  AliDebug(10, "Analysing Track References\n");
-  // Check if track is findable
-  Double_t mom = 0.;
-  Float_t xmin = 10000.0, xmax = 0.0; 
-  Float_t ymin = 0.0, ymax = 0.0;
-  Float_t zmin = 0.0, zmax = 0.0;
-  Float_t lastx = 0.0, x = 0.0;
-  Int_t nLayers = 0;
-  Int_t sector[20];
-  AliTrackReference *trackRef = 0x0;
-  for(Int_t itr = 0; itr < trkInf->GetNTrackRefs(); itr++){
-    trackRef = trkInf->GetTrackRef(itr);
-    AliDebug(10, Form("%d. x[%f], y[%f], z[%f]\n", itr, trackRef->LocalX(), trackRef->LocalY(), trackRef->Z()));
-    x = trackRef->LocalX(); 
-        
-    // Be Sure that we are inside TRD
-    if(x < AliTRDinfoGen::GetTPCx() || x > AliTRDinfoGen::GetTOFx()) continue; 
-    sector[itr] = Int_t(trackRef->Alpha()/kAlpha);
-    if(x < xmin){
-      xmin = trackRef->LocalX();
-      ymin = trackRef->LocalY();
-      zmin = trackRef->Z();
-      mom = trackRef->P();
-    } else if(x > xmax){
-      xmax = trackRef->LocalX();
-      ymax = trackRef->LocalY();
-      zmax = trackRef->Z();
-    }
-    if(itr > 0){
-      Float_t dist = TMath::Abs(x - lastx);
-      AliDebug(10, Form("x = %f, lastx = %f, dist = %f\n", x, lastx, dist));
-      if(TMath::Abs(dist - 3.7) < 0.1) nLayers++;      // ref(i+1) has to be larger than ref(i)
-    }
-    lastx = x;
-  }
-
-  // Apply cuts
-  Bool_t findable = kTRUE;
-  if(trkInf->GetNTrackRefs() > 2 && xmax > xmin){
-    if(mom < 0.55) findable = kFALSE;                                                                  // momentum cut at 0.6
-    Double_t yangle = (ymax -ymin)/(xmax - xmin);
-    Double_t zangle = (zmax -zmin)/(xmax - xmin);
-    AliDebug(10, Form("\ntrack: y-Angle = %f, z-Angle = %f\nnLayers = %d", yangle, zangle, nLayers));
-    if(TMath::ATan(TMath::Abs(yangle)) > 45.) findable = kFALSE;
-    if(TMath::ATan(TMath::Abs(zangle)) > 45.) findable = kFALSE;
-    if(nLayers < 4) findable = kFALSE;
-    if(!trkInf->IsPrimary()) findable = kFALSE;
-    Bool_t samesec = kTRUE;
-    for(Int_t iref = 1; iref < trkInf->GetNTrackRefs(); iref++)
-      if(sector[iref] != sector[0]) samesec = kFALSE;
-    if(!samesec) findable = kFALSE;            // Discard all tracks which are passing more than one sector
-    if(DebugLevel()){
-      Double_t trackAngle = TMath::ATan(yangle);
-      Bool_t primary = trkInf->IsPrimary();
-      (*DebugStream()) << "NotFoundTrack"
-        << "Momentum="         << mom
-        << "trackAngle="<< trackAngle
-        << "NLayers="  << nLayers
-        << "Primary="  << primary
-        << "\n";
-    }
-  }
-  else
-    findable = kFALSE;
-  return findable;
-}
-
-//_____________________________________________________________________________
-void AliTRDefficiencyMC::FillHistograms(Int_t nTracks, Int_t *indices, FillingMode_t mode){
-  //
-  // Fill Histograms in three different modes:
-  // 1st tracks which are found and accepted
-  // 2nd tracks which are not found and not already counted
-  // 3rd contaminating tracks: either double counts (kinks!) or tracks with no MC hit inside TRD
-  //
-  const Int_t pid[AliPID::kSPECIES] = {211,13,11,321,2212};
-  Double_t trkmom = 0.;   // the track momentum
-  Int_t trkpid = -1;      // particle species
-  AliTRDtrackInfo *trkInf = 0x0;
-  for(Int_t itk = 0; itk < nTracks; itk++){
-    trkInf = dynamic_cast<AliTRDtrackInfo *>(fTracks->At(indices[itk]));
-    AliDebug(3, Form("Accepted MC track: %d\n", trkInf->GetLabel()));
-    if(trkInf->GetNTrackRefs()){
-      // use Monte-Carlo Information for Momentum and PID
-      trkmom = trkInf->GetTrackRef(0)->P();
-      trkpid = trkInf->GetPDG();
-    }else{
-      // Use TPC Momentum
-      trkmom = trkInf->GetTrack()->P();
-    }
-    switch(mode){
-      case kAccepted:
-        (dynamic_cast<TProfile *>(fContainer->At(kEfficiencyHistogram)))->Fill(trkmom, 1);
-        (dynamic_cast<TProfile *>(fContainer->At(kContaminationHistogram)))->Fill(trkmom, 0);
-        break;
-      case kRejected:
-        (dynamic_cast<TProfile *>(fContainer->At(kEfficiencyHistogram)))->Fill(trkmom, 0);
-        (dynamic_cast<TProfile *>(fContainer->At(kContaminationHistogram)))->Fill(trkmom, 0);
-        break;
-      case kContamination:
-        (dynamic_cast<TProfile *>(fContainer->At(kContaminationHistogram)))->Fill(trkmom, 1);
-        break;
-    }
-    // Fill species histogram
-    Int_t partSpec = -1;
-    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
-      if(trkpid == pid[ispec]) partSpec = ispec;
-    }
-    if(partSpec >= 0){
-      switch(mode){
-        case kAccepted:
-          (dynamic_cast<TProfile *>(fContainer->At(kEfficiencySpeciesHistogram + partSpec)))->Fill(trkmom, 1);
-          (dynamic_cast<TProfile *>(fContainer->At(kContaminationSpeciesHistogram + partSpec)))->Fill(trkmom, 0);
-          break;
-        case kRejected:
-          (dynamic_cast<TProfile *>(fContainer->At(kEfficiencySpeciesHistogram + partSpec)))->Fill(trkmom, 0);          (dynamic_cast<TProfile *>(fContainer->At(kContaminationSpeciesHistogram + partSpec)))->Fill(trkmom, 0);
-          break;
-        case kContamination:
-          (dynamic_cast<TProfile *>(fContainer->At(kContaminationSpeciesHistogram + partSpec)))->Fill(trkmom, 1);
-          break;
-      }
-    } else {
-      // The particle Type is not registered
-      (dynamic_cast<TProfile *>(fContainer->At(kEfficiencyNoPID)))->Fill(trkmom, 1);
-      (dynamic_cast<TProfile *>(fContainer->At(kContaminationNoPID)))->Fill(trkmom, 1);
-    }
-  }
-}
-
-//_____________________________________________________________________________
-void AliTRDefficiencyMC::FillStreamTrackWOMC(AliTRDtrackInfo * const trkInf){
-  // fill debug stream
-  // we want to know:
-  //  1. The event number
-  //  2. The track label
-  //  3. The TRD track label
-  //  4. The frequency of the TRD Label
-  //  5. Momentum from TPC (NO STAND ALONE TRACK)
-  //  6. TPC Phi angle
-  //  7. the TRD track
-  //  8. Monte Carlo PID
-  //  9. We check the Labels of the TRD track according to them we search the maching Monte-Carlo track.
-  //     From the matching Monte-Carlo track we store trackRefs, phi and momentum
-  // 10. We may also want to keep the kink index
-  Double_t mom = trkInf->GetESDinfo()->GetOuterParam()->P();
-  Int_t event = (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry();
-  Int_t label = trkInf->GetLabel();
-  Int_t kinkIndex = trkInf->GetKinkIndex();
-  Int_t pdg = trkInf->GetPDG();
-  Double_t phiTPC = trkInf->GetESDinfo()->GetOuterParam()->Phi();
-  Int_t labelsTRD[180];        // Container for the cluster labels
-  Int_t sortlabels[360];       // Cluster Labels sorted according their occurancy
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *c = 0x0;
-  Int_t nclusters = 0x0;
-  AliTRDtrackV1 *trackTRD = trkInf->GetTrack();
-  for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-    tracklet = trackTRD->GetTracklet(il);
-    if(!tracklet) continue;
-    tracklet->ResetClusterIter();
-    c = 0x0;
-    while((c = tracklet->NextCluster())) labelsTRD[nclusters++] = c->GetLabel(0);
-  }
-  // Determine Label and Frequency
-  AliMathBase::Freq(nclusters, const_cast<const Int_t *>(&labelsTRD[0]), &sortlabels[0], kTRUE);
-  Int_t labelTRD = sortlabels[0];
-  Int_t freqTRD = sortlabels[1];
-  // find the track info object matching to the TRD track
-  AliTRDtrackInfo *realtrack = 0;
-  TObjArrayIter rtiter(fTracks);
-  while((realtrack = (AliTRDtrackInfo *)rtiter())){
-    if(realtrack->GetLabel() != labelTRD) continue;
-    break;
-  }
-  TClonesArray trackRefs("AliTrackReference");
-  Int_t realPdg = -1;
-  Double_t realP = 0.;
-  Double_t realPhi = 0.;
-  if(realtrack){
-    // pack the track references into the trackRefsContainer
-    for(Int_t iref = 0; iref < realtrack->GetNTrackRefs(); iref++){
-    new(trackRefs[iref])AliTrackReference(*(realtrack->GetTrackRef(iref)));
-    }
-    realPdg = realtrack->GetPDG();
-    if(realtrack->GetNTrackRefs()){
-      realP = realtrack->GetTrackRef(0)->P();
-      realPhi = realtrack->GetTrackRef(0)->Phi();
-    }
-  }
-  (*DebugStream()) << "TrackingEffMCfake"
-    << "Event="        << event
-    << "Label=" << label
-    << "labelTRD=" << labelTRD
-    << "FreqTRDlabel=" << freqTRD
-    << "TPCp=" << mom
-    << "phiTPC=" << phiTPC
-    << "trackTRD=" << trackTRD
-    << "PDG="  << pdg
-    << "TrackRefs=" << &trackRefs
-    << "RealPDG=" << realPdg
-    << "RealP="        << realP
-    << "RealPhi" << realPhi
-    << "KinkIndex=" << kinkIndex
-    << "\n";
-}
-
-//_____________________________________________________________________________
-Bool_t AliTRDefficiencyMC::IsRegistered(AliTRDtrackInfo * const trkInf, Int_t *indices, Int_t nTracks){
-  //
-  // Checks if track is registered in a given mode
-  //
-  Bool_t isRegistered = kFALSE;
-  for(Int_t il = 0; il < nTracks; il++){
-    if((dynamic_cast<AliTRDtrackInfo *>(fTracks->At(indices[il])))->GetLabel() == trkInf->GetLabel()){
-      isRegistered = kTRUE;        
-      break;
-    }
-  }
-  return isRegistered;
-}
-
diff --git a/TRD/qaRec/AliTRDefficiencyMC.h b/TRD/qaRec/AliTRDefficiencyMC.h
deleted file mode 100644 (file)
index b0890ac..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef ALITRDEFFICIENCYMC_H
-#define ALITRDEFFICIENCYMC_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-* See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDefficiencyMC.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class AliTRDefficiencyMC : public AliTRDrecoTask{
-public:
-  AliTRDefficiencyMC();
-  virtual ~AliTRDefficiencyMC(){;}
-  
-  void        CreateOutputObjects();
-  void        Exec(Option_t *);
-  
-  Bool_t      PostProcess();
-  TObjArray*  Histos();
-  Bool_t      GetRefFigure(Int_t ifig);
-    
-private:
-  enum{
-    kEfficiencyHistogram = 0,
-    kContaminationHistogram = 1,
-    kEfficiencySpeciesHistogram = 2,
-    kContaminationSpeciesHistogram = 7,
-    kEfficiencyNoPID = 12,
-    kContaminationNoPID = 13
-  };
-  typedef enum{
-    kAccepted = 0,
-    kRejected = 1,
-    kContamination = 2
-  } FillingMode_t;
-  AliTRDefficiencyMC(const AliTRDefficiencyMC &);
-  AliTRDefficiencyMC& operator=(const AliTRDefficiencyMC &);
-  
-  void    FillHistograms(Int_t ntracks, Int_t *indices, FillingMode_t mode);
-  void    FillStreamTrackWOMC(AliTRDtrackInfo * const trkInf);
-
-  Bool_t  IsFindable(AliTRDtrackInfo * const trkInf);
-  Bool_t  IsRegistered(AliTRDtrackInfo * const trkInf, Int_t *indices, Int_t nTracks);
-    
-  ClassDef(AliTRDefficiencyMC, 1); // Combined tracking efficiency
-};
-    
-#endif
diff --git a/TRD/qaRec/AliTRDinfoGen.cxx b/TRD/qaRec/AliTRDinfoGen.cxx
deleted file mode 100644 (file)
index 4dc3f59..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDinfoGen.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//
-//  Tender wagon for TRD performance/calibration train
-//
-// In this wagon the information from
-//   - ESD
-//   - Friends [if available]
-//   - MC [if available]
-// are grouped into AliTRDtrackInfo objects and fed to worker tasks
-//
-//  Authors:
-//    Markus Fasel <M.Fasel@gsi.de>
-//    Alexandru Bercuci <A.Bercuci@gsi.de>
-//
-////////////////////////////////////////////////////////////////////////////
-
-#include <TClonesArray.h>
-#include <TObjArray.h>
-#include <TObject.h>
-#include <TH1F.h>
-#include <TFile.h>
-#include <TTree.h>
-#include <TROOT.h>
-#include <TChain.h>
-#include <TParticle.h>
-
-#include "AliLog.h"
-#include "AliAnalysisManager.h"
-#include "AliESDEvent.h"
-#include "AliMCEvent.h"
-#include "AliESDInputHandler.h"
-#include "AliMCEventHandler.h"
-
-#include "AliESDfriend.h"
-#include "AliESDfriendTrack.h"
-#include "AliESDHeader.h"
-#include "AliESDtrack.h"
-#include "AliMCParticle.h"
-#include "AliPID.h"
-#include "AliStack.h"
-#include "AliTRDtrackV1.h"
-#include "AliTrackReference.h"
-#include "AliTRDgeometry.h"
-#include "AliTRDcluster.h"
-#include "AliTRDseedV1.h"
-#include "TTreeStream.h"
-
-#include <cstdio>
-#include <climits>
-#include <cstring>
-#include <iostream>
-
-#include "AliTRDinfoGen.h"
-#include "info/AliTRDtrackInfo.h"
-#include "info/AliTRDeventInfo.h"
-#include "info/AliTRDv0Info.h"
-
-ClassImp(AliTRDinfoGen)
-
-const Float_t AliTRDinfoGen::fgkTPC = 290.;
-const Float_t AliTRDinfoGen::fgkTOF = 365.;
-
-//____________________________________________________________________
-AliTRDinfoGen::AliTRDinfoGen():
-  AliTRDrecoTask("infoGen", "MC-REC TRD-track list generator")
-  ,fESDev(0x0)
-  ,fMCev(0x0)
-  ,fESDfriend(0x0)
-  ,fTrackInfo(0x0)
-  ,fEventInfo(0x0)
-  ,fV0container(0x0)
-  ,fV0Info(0x0)
-{
-  //
-  // Default constructor
-  //
-
-  DefineInput(0, TChain::Class());
-  DefineOutput(0, TObjArray::Class());
-  DefineOutput(1, AliTRDeventInfo::Class());
-  DefineOutput(2, TObjArray::Class());
-}
-
-//____________________________________________________________________
-AliTRDinfoGen::~AliTRDinfoGen()
-{
-// Destructor
-  if(fTrackInfo) delete fTrackInfo; fTrackInfo = 0x0;
-  if(fEventInfo) delete fEventInfo; fEventInfo = 0x0;
-  if(fV0Info) delete fV0Info; fV0Info = 0x0;
-  if(fContainer){ 
-    fContainer->Delete(); delete fContainer;
-    fContainer = 0x0;
-  }
-  if(fV0container){ 
-    fV0container->Delete(); delete fV0container;
-    fV0container = 0x0;
-  }
-}
-
-//____________________________________________________________________
-void AliTRDinfoGen::ConnectInputData(Option_t *)
-{
-  //
-  // Link the Input Data
-  //
-  TTree *tree = dynamic_cast<TChain*>(GetInputData(0));
-  if(!tree){
-    printf("ERROR - ESD event not found");
-  } else {
-    tree->SetBranchStatus("Tracks", 1);
-    tree->SetBranchStatus("ESDfriend*",1);
-  }
-
-  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-  if(!esdH){
-    printf("ERROR - ESD input handler not found");
-  } else {
-    fESDev = esdH->GetEvent();
-    if(!fESDev){
-      printf("ERROR - ESD event not found");
-    } else {
-      esdH->SetActiveBranches("ESDfriend*");
-      fESDfriend = (AliESDfriend *)fESDev->FindListObject("AliESDfriend");
-    }
-  }
-  if(HasMCdata()){
-    AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
-    if(!mcH){ 
-      AliError("MC input handler not found");
-    } else {
-      fMCev = mcH->MCEvent();
-    }
-  }
-}
-
-//____________________________________________________________________
-void AliTRDinfoGen::CreateOutputObjects()
-{      
-  //
-  // Create Output Containers (TObjectArray containing 1D histograms)
-  //
-  fTrackInfo = new AliTRDtrackInfo();
-  fEventInfo = new AliTRDeventInfo();
-  fV0Info    = new AliTRDv0Info();
-  fContainer = new TObjArray(1000);
-  fContainer->SetOwner(kTRUE);
-  fV0container = new TObjArray(50);
-  fV0container->SetOwner(kTRUE);
-
-}
-
-//____________________________________________________________________
-void AliTRDinfoGen::Exec(Option_t *){
-  //
-  // Run the Analysis
-  //
-  if(!fESDev){
-    AliError("Failed retrieving ESD event");
-    return;
-  }
-  if(!fESDfriend){
-    AliError("Failed retrieving ESD friend event");
-    return;
-  }
-  if(HasMCdata() && !fMCev){
-    AliError("Failed retrieving MC event");
-    return;
-  }
-  fContainer->Delete();
-  fV0container->Delete();
-  fEventInfo->Delete("");
-  fESDev->SetESDfriend(fESDfriend);
-  new(fEventInfo)AliTRDeventInfo(fESDev->GetHeader(), const_cast<AliESDRun *>(fESDev->GetESDRun()));
-  
-  Bool_t *trackMap = 0x0;
-  AliStack * mStack = 0x0;
-  Int_t nTracksMC = HasMCdata() ? fMCev->GetNumberOfTracks() : 0, nTracksESD = fESDev->GetNumberOfTracks();
-  if(HasMCdata()){
-    mStack = fMCev->Stack();
-    if(!mStack){
-      AliError("Failed retrieving MC Stack");
-      return;
-    }
-    trackMap = new Bool_t[nTracksMC];
-    memset(trackMap, 0, sizeof(Bool_t) * nTracksMC);
-  }
-  
-  Int_t nTRD = 0, nTPC = 0, nclsTrklt;
-  AliDebug(2, Form("Entry[%3d] Tracks: ESD[%d] MC[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC));
-  AliESDtrack *esdTrack = 0x0;
-  AliESDfriendTrack *esdFriendTrack = 0x0;
-  TObject *calObject = 0x0;
-  AliTRDtrackV1 *track = 0x0;
-  AliTRDseedV1 *tracklet = 0x0;
-  AliTRDcluster *cl = 0x0;
-  for(Int_t itrk = 0; itrk < nTracksESD; itrk++){
-    esdTrack = fESDev->GetTrack(itrk);
-    AliDebug(3, Form("\n%3d ITS[%d] TPC[%d] TRD[%d]\n", itrk, esdTrack->GetNcls(0), esdTrack->GetNcls(1), esdTrack->GetNcls(2)));
-    if(esdTrack->GetNcls(1)) nTPC++;
-    if(esdTrack->GetNcls(2)) nTRD++;
-
-    // look at external track param
-    const AliExternalTrackParam *op = esdTrack->GetOuterParam();
-    Double_t xyz[3];
-    if(op){
-      op->GetXYZ(xyz);
-      op->Global2LocalPosition(xyz, op->GetAlpha());
-      AliDebug(3, Form("op @ X[%7.3f]\n", xyz[0]));
-    }
-
-    // read MC info
-    Int_t fPdg = -1;
-    Int_t label = -1; UInt_t alab=UINT_MAX;
-    if(HasMCdata()){
-      label = esdTrack->GetLabel(); 
-      alab = TMath::Abs(label);
-      // register the track
-      if(alab < UInt_t(nTracksMC)){ 
-        trackMap[alab] = kTRUE; 
-      } else { 
-        AliError(Form("MC label[%d] outside scope for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk));
-        continue; 
-      }
-      AliMCParticle *mcParticle = 0x0; 
-      if(!(mcParticle = (AliMCParticle*) fMCev->GetTrack(alab))){
-        AliError(Form("MC particle label[%d] missing for Ev[%d] Trk[%d].", label, (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), itrk));
-        continue;
-      }
-      fPdg = mcParticle->Particle()->GetPdgCode();
-      Int_t nRefs = mcParticle->GetNumberOfTrackReferences();
-      Int_t iref = 0; AliTrackReference *ref = 0x0; 
-      while(iref<nRefs){
-        ref = mcParticle->GetTrackReference(iref);
-        if(ref->LocalX() > fgkTPC) break;
-        iref++;
-      }
-
-      new(fTrackInfo) AliTRDtrackInfo();
-      fTrackInfo->SetPDG(fPdg);
-      fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary());
-      Int_t jref = iref;//, kref = 0;
-      while(jref<nRefs){
-        ref = mcParticle->GetTrackReference(jref);
-        if(ref->LocalX() > fgkTOF) break;
-        AliDebug(4, Form("  trackRef[%2d (%2d)] @ %7.3f OK", jref-iref, jref, ref->LocalX()));
-        fTrackInfo->AddTrackRef(ref);
-        jref++;
-      }
-      AliDebug(3, Form("NtrackRefs[%d(%d)]", fTrackInfo->GetNTrackRefs(), nRefs));
-    } else {
-      new (fTrackInfo) AliTRDtrackInfo();
-      fTrackInfo->SetPDG(fPdg);
-    }
-
-    // copy some relevant info to TRD track info
-    fTrackInfo->SetStatus(esdTrack->GetStatus());
-    fTrackInfo->SetTrackId(esdTrack->GetID());
-    Double_t p[AliPID::kSPECIES]; esdTrack->GetTRDpid(p);
-    fTrackInfo->SetESDpid(p);
-    fTrackInfo->SetESDpidQuality(esdTrack->GetTRDntrackletsPID());
-    fTrackInfo->SetLabel(label);
-    fTrackInfo->SetNumberOfClustersRefit(esdTrack->GetNcls(2));
-    // some other Informations which we may wish to store in order to find problematic cases
-    fTrackInfo->SetKinkIndex(esdTrack->GetKinkIndex(0));
-    fTrackInfo->SetTPCncls(static_cast<UShort_t>(esdTrack->GetNcls(1)));
-    nclsTrklt = 0;
-  
-
-    // read REC info
-    esdFriendTrack = fESDfriend->GetTrack(itrk);
-    if(esdFriendTrack){
-      Int_t icalib = 0;
-      while((calObject = esdFriendTrack->GetCalibObject(icalib++))){
-        if(strcmp(calObject->IsA()->GetName(),"AliTRDtrackV1") != 0) continue; // Look for the TRDtrack
-        if(!(track = dynamic_cast<AliTRDtrackV1*>(calObject))) break;
-        nTRD++;
-        AliDebug(4, Form("TRD track OK"));
-        // Set the clusters to unused
-        for(Int_t ipl = 0; ipl < AliTRDgeometry::kNlayer; ipl++){
-          if(!(tracklet = track->GetTracklet(ipl))) continue;
-          tracklet->ResetClusterIter();
-          while((cl = tracklet->NextCluster())) cl->Use(0);
-        }
-        fTrackInfo->SetTrack(track);
-        break;
-      }
-      AliDebug(3, Form("Ntracklets[%d]\n", fTrackInfo->GetNTracklets()));
-    } else AliDebug(3, "No ESD friends");
-    if(op) fTrackInfo->SetOuterParam(op);
-
-    if(DebugLevel() >= 1){
-      AliTRDtrackInfo info(*fTrackInfo);
-      (*DebugStream()) << "trackInfo"
-      << "TrackInfo.=" << &info
-      << "\n";
-      info.Delete("");
-    }
-  
-    fContainer->Add(new AliTRDtrackInfo(*fTrackInfo));
-    fTrackInfo->Delete("");
-  }
-  AliDebug(3, Form("%3d Tracks: TPC[%d] TRD[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTPC, nTRD));
-
-//   AliESDv0 *v0 = 0x0;
-//   for(Int_t iv0=0; iv0<fESD->GetNumberOfV0s(); iv0++){
-//     if(!(v0 = fESD->GetV0(iv0))) continue;
-//     fV0container->Add(new AliTRDv0Info(v0));
-//   }
-
-  // Insert also MC tracks which are passing TRD where the track is not reconstructed
-  if(HasMCdata()){
-    AliDebug(10, "Output of the MC track map:");
-    for(Int_t itk = 0; itk < nTracksMC;  itk++) AliDebug(10, Form("trackMap[%d] = %s", itk, trackMap[itk] == kTRUE ? "TRUE" : "kFALSE"));
-  
-    for(Int_t itk = 0; itk < nTracksMC; itk++){
-      if(trackMap[itk]) continue;
-      AliMCParticle *mcParticle =  (AliMCParticle*) fMCev->GetTrack(TMath::Abs(itk));
-      Int_t fPdg = mcParticle->Particle()->GetPdgCode();
-      Int_t nRefs = mcParticle->GetNumberOfTrackReferences();
-      Int_t iref = 0; AliTrackReference *ref = 0x0; 
-      Int_t nRefsTRD = 0;
-      new(fTrackInfo) AliTRDtrackInfo();
-      fTrackInfo->SetPDG(fPdg);
-      while(iref<nRefs){
-        ref = mcParticle->GetTrackReference(iref);
-        if(ref->LocalX() > 250. && ref->LocalX() < 370.){
-          AliDebug(4, Form("  trackRef[%2d] @ %7.3f IN", iref, ref->LocalX()));
-          fTrackInfo->AddTrackRef(ref);
-          nRefsTRD++;
-        }
-        else AliDebug(4, Form("  trackRef[%2d] @ %7.3f OUT", iref, ref->LocalX()));
-        iref++;
-      }
-      if(!nRefsTRD){
-        // In this stage we at least require 1 hit inside TRD. What will be done with this tracks is a task for the 
-        // analysis job
-        fTrackInfo->Delete("");
-        continue;
-      }
-      fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary());
-      fTrackInfo->SetLabel(itk);
-      if(DebugLevel() >= 1){
-        AliTRDtrackInfo info(*fTrackInfo);
-        (*DebugStream()) << "trackInfo"
-        << "TrackInfo.=" << &info
-        << "\n";
-        info.Delete("");
-      }
-      AliDebug(3, Form("Registering rejected MC track with label %d", itk));
-      fContainer->Add(new AliTRDtrackInfo(*fTrackInfo));
-      fTrackInfo->Delete("");
-    }
-    delete[] trackMap;
-  }
-  PostData(0, fContainer);
-  PostData(1, fEventInfo);
-  PostData(2, fV0container);
-}
-
diff --git a/TRD/qaRec/AliTRDinfoGen.h b/TRD/qaRec/AliTRDinfoGen.h
deleted file mode 100644 (file)
index 61dafcc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef ALITRDINFOGEN_H
-#define ALITRDINFOGEN_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDinfoGen.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class AliESDEvent;
-class AliMCEvent;
-class AliESDfriend;
-class AliTRDtrackInfo;
-class AliTRDeventInfo;
-class AliTRDv0Info;
-class TObjArray;
-class TTreeSRedirector;
-class AliTRDinfoGen : public AliTRDrecoTask{
-public:
-
-  AliTRDinfoGen();
-  virtual ~AliTRDinfoGen();
-  
-  void  ConnectInputData(Option_t *);
-  void  CreateOutputObjects();
-  void  Exec(Option_t *);
-  static Float_t GetTPCx() { return fgkTPC;}
-  static Float_t GetTOFx() { return fgkTOF;}
-
-private:
-  static const Float_t fgkTPC; // end TPC radial position
-  static const Float_t fgkTOF; // begin TOF radial position
-
-  AliTRDinfoGen(const AliTRDinfoGen&);
-  AliTRDinfoGen& operator=(const AliTRDinfoGen&);
-
-  AliESDEvent      *fESDev;          //! ESD event
-  AliMCEvent       *fMCev;           //! MC event
-  AliESDfriend     *fESDfriend;      //! ESD friends
-  AliTRDtrackInfo  *fTrackInfo;      //! Track info
-  AliTRDeventInfo  *fEventInfo;                   //! Event info
-  TObjArray        *fV0container;    //! V0 container
-  AliTRDv0Info     *fV0Info;                //! V0 info
-
-  ClassDef(AliTRDinfoGen, 2)         // entry to TRD analysis train
-};
-#endif
diff --git a/TRD/qaRec/AliTRDmultiplicity.cxx b/TRD/qaRec/AliTRDmultiplicity.cxx
deleted file mode 100644 (file)
index 619c89d..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * 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.                  *
- **************************************************************************/
-
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  TRD multiplicity                                                      //
-//                                                                        //
-// Task to select true single tracks
-// 
-// Program flow:
-// Part A - task AliTRDmultiplicity (within the framework qaRec):
-//   For TRD standalone or TRD&TOF tracks I make a FitRiemanTilt
-//   The resulting parameterization is dumped into a DebugStreamer written to a file
-// 
-// Part B â€“ $ALICE_ROOT/TRD/qaRec/macros/TrackletsinTRD.C[h] (analysis macro):
-//   The clusters are read in
-//   The above produced file is read in
-//   I make a fit through the parameterization of the  FitRiemanTilt -> in order to get a straight line (representing the track)
-//   the distance of each cluster with respect to the straight line is calculated
-//   If there is no cluster at a distance of 0.6  to 2 with respect to the track, the track is defined as a good track, i.e. clean single track
-//                                                                        //
-//  Authors: Yvonne C. Pachmayer <pachmay@physi.uni-heidelberg.de>        //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include <TObjArray.h>
-#include <TH1F.h>
-#include <TTreeStream.h>
-
-#include "AliESDtrack.h"
-#include "AliExternalTrackParam.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDtrackerV1.h"
-#include "AliTrackPointArray.h"
-
-#include "AliTRDmultiplicity.h"
-#include "AliTRDgeometry.h"
-#include "info/AliTRDtrackInfo.h"
-
-ClassImp(AliTRDmultiplicity)
-
-//____________________________________________________________________
-AliTRDmultiplicity::AliTRDmultiplicity()
-    :AliTRDrecoTask("Multiplicity", "Barrel Tracking Multiplicity")
-  ,fEventCounter(0)
-{
-  //
-  // Default constructor
-    //
-}
-
-//____________________________________________________________________
-AliTRDmultiplicity::~AliTRDmultiplicity()
-{
-}
-
-//____________________________________________________________________
-void  AliTRDmultiplicity::CreateOutputObjects()
-{
-  //
-  // Create output objects
-  //
-
-  OpenFile(0, "RECREATE");
-
-  TH1 *h = 0x0;
-  fContainer = new TObjArray();
-  for(Int_t is=0; is<AliTRDgeometry::kNsector; is++){
-  fContainer->Add(h = new TH1F(Form("h_sector_%i", is), " ", 100,-10,10));
-  }
-} 
-
-//____________________________________________________________________
-void AliTRDmultiplicity::Exec(Option_t *)
-{
-  //
-  // Do it
-  //
-
-
-
-  ULong_t status;
-  AliTRDtrackInfo     *track = 0x0;
-  AliExternalTrackParam *esd = 0x0;
-  AliTRDtrackV1 *trackTRD = 0x0;
-  Double_t x_anode[AliTRDgeometry::kNlayer] = {300.2, 312.8, 325.4, 338.0, 350.6, 363.2}; // Take the default X0
-  Int_t standAlone=1;
-  fEventCounter++;
-
-
-  for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
-    track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
-    if(!track->HasESDtrack()) continue;
-    status = track->GetStatus();
-
-    AliTrackPoint points[6];
-    Float_t xyz[3];
-    memset(xyz, 0, sizeof(Float_t) * 3);
-    Float_t trackletX[6];
-    Float_t trackletY[6];
-    Float_t trackletZ[6];
-    for(Int_t a=0;a<6;a++)
-    {
-        xyz[0] = x_anode[a];
-        points[a].SetXYZ(xyz);
-        trackletX[a]=-1000;
-        trackletY[a]=-1000;
-        trackletZ[a]=-1000;
-    }
-    Int_t detTracklet=600;
-
-
-
-    // TRD standalone
-    if(((status&AliESDtrack::kTRDout)>0) && !((status&AliESDtrack::kTRDin)>0))
-    {
-        trackTRD = track->GetTrack();
-
-        if(trackTRD)
-        {
-            AliTRDseedV1 *tracklet = 0x0;
-            Int_t counterTracklet=0;
-            for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++)
-            {
-                tracklet = trackTRD->GetTracklet(itl);
-                if(tracklet)
-                {
-                    if(tracklet->IsOK())
-                    {
-                        counterTracklet++;
-                        detTracklet=tracklet->GetDetector();
-                        //printf("%i %f %f \n",itl,tracklet->GetYfit(0),tracklet->GetZfit(0));
-                        trackletX[itl]=tracklet->GetX0();
-                        trackletY[itl]=tracklet->GetYfit(0);
-                        trackletZ[itl]=tracklet->GetZfit(0);
-                    }
-                }
-            }
-            // this cut is needed otherwise the order of tracklets in the fit function is not correct
-            if(counterTracklet==AliTRDgeometry::kNlayer) AliTRDtrackerV1::FitRiemanTilt(const_cast<AliTRDtrackV1 *>(trackTRD), 0x0, kTRUE, counterTracklet, points);
-            else continue;
-
-            if(DebugLevel()>=1){
-              for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-                //printf("---------------------------------------- %i %i %f %f %f \n",counterTracklet,il,points[il].GetX(),points[il].GetY(),points[il].GetZ());
-                Double_t pointX=points[il].GetX();
-                Double_t pointY=points[il].GetY();
-                Double_t pointZ=points[il].GetZ();
-
-
-                (*DebugStream())   << "TrackletsinTRD"
-                    << "standalone=" << standAlone
-                    << "eventcounter=" << fEventCounter
-                    << "layer="     << il
-                    << "dettracklet=" << detTracklet
-                    << "xtracklet=" << trackletX[il]
-                    << "xtrack="    << pointX
-                    << "ytracklet=" << trackletY[il]
-                    << "ytrack="    << pointY
-                    << "ztracklet=" << trackletZ[il]
-                    << "ztrack="    << pointZ
-                    << "num_tracklets=" << counterTracklet
-                    << "\n";
-
-              }
-            }
-        }
-    } // end TRD standalone
-
-
-
-    // TPC cluster selection for cosmic data
-    if((track->GetTPCncls())<40) continue;
-    // missing TPC propagation
-    if(!(status&AliESDtrack::kTPCout)) continue;
-    standAlone=0;
-
-    esd = track->GetESDinfo()->GetOuterParam();
-    // calculate sector - does not matter if track ends in TPC or TRD - sector number independent
-    Double_t alpha;
-    alpha=-100;
-    Int_t fSector=100;
-    if(esd){
-        alpha=esd->GetAlpha();
-        fSector = (Int_t)((alpha+ TMath::Pi())/(20*TMath::Pi()/180));
-        if((fSector>-1) && (fSector<18))
-        {
-        }
-        else
-        {
-            continue;
-        }
-    }
-
-
-
-    // only these sectors have a TRD detector at the moment
-   if(fSector==0||fSector==8||fSector==9||fSector==17)
-    {
-        trackTRD = track->GetTrack();
-        if(!trackTRD) continue;
-        AliTRDseedV1 *tracklet = 0x0;
-        Int_t counterTracklet=0;
-
-
-        for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
-            tracklet = trackTRD->GetTracklet(itl);
-            if(!tracklet || !tracklet->IsOK()) continue;
-            counterTracklet++;
-            detTracklet=tracklet->GetDetector();
-            trackletX[itl]=tracklet->GetX0();
-            trackletY[itl]=tracklet->GetYfit(0);
-            trackletZ[itl]=tracklet->GetZfit(0);
-
-            /*
-            AliTRDcluster *c = 0x0;
-            for(Int_t itime = 0; itime < AliTRDseedV1::kNtb; itime++){
-                c = tracklet->GetClusters(itime);
-                if(!c) continue;
-//                Float_t cluster_x = c->GetX();
-//                Bool_t isprop;
-//                isprop=kFALSE;
-//                isprop=AliTracker::PropagateTrackTo(esd,(Double_t)cluster_x,0.105,5,kFALSE);
-//                if(isprop)
-//                {
-//                    Int_t detector = c->GetDetector();
-//                    ((TH1F*)fContainer->At(fSector))->Fill((c->GetY())-(esd->GetY()));
-//                    if(c->GetY()-esd->GetY()>);
-//                    printf("diff: %f\n",c->GetY()-(esd->GetY()));
-//                }
-            }
-            */
-
-        } // loop over tracklets ends
-
-        if(counterTracklet==AliTRDgeometry::kNlayer)
-        {
-            AliTRDtrackerV1::FitRiemanTilt(const_cast<AliTRDtrackV1 *>(trackTRD), 0x0, kTRUE, counterTracklet, points);
-        }
-        else continue;
-
-       
-
-        if(DebugLevel()>=1){
-          for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-            //printf("---------------------------------------- %i %i %f %f %f \n",counterTracklet,il,points[il].GetX(),points[il].GetY(),points[il].GetZ());
-            Double_t pointX=points[il].GetX();
-            Double_t pointY=points[il].GetY();
-            Double_t pointZ=points[il].GetZ();
-            
-            (*DebugStream())   << "TrackletsinTRD"
-                << "standalone=" << standAlone
-                << "eventcounter=" << fEventCounter
-                << "layer="     << il
-                << "dettracklet=" << detTracklet
-                << "xtracklet=" << trackletX[il]
-                << "xtrack="    << pointX
-                << "ytracklet=" << trackletY[il]
-                << "ytrack="    << pointY
-                << "ztracklet=" << trackletZ[il]
-                << "ztrack="    << pointZ
-                << "num_tracklets=" << counterTracklet
-                << "\n";
-          }
-        }
-
-    }
-  }
-
-  
-  PostData(0, fContainer);
-}
-
-
diff --git a/TRD/qaRec/AliTRDmultiplicity.h b/TRD/qaRec/AliTRDmultiplicity.h
deleted file mode 100644 (file)
index f544424..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef ALITRDMULTIPLICITY_H
-#define ALITRDMULTIPLICITY_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  TRD multiplicity                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class AliTRDmultiplicity : public AliTRDrecoTask
-{
-public:
-  AliTRDmultiplicity();
-  virtual ~AliTRDmultiplicity();
-  void    CreateOutputObjects();
-  void    Exec(Option_t *);
-
-private:
-  AliTRDmultiplicity(const AliTRDmultiplicity&);
-  AliTRDmultiplicity& operator=(const AliTRDmultiplicity&);
-
-private:
-  Int_t fEventCounter;            // Event counter
-
-
-  ClassDef(AliTRDmultiplicity, 1) // TRD tracking multiplicity
-};
-
-#endif
-
diff --git a/TRD/qaRec/AliTRDpidRefMaker.cxx b/TRD/qaRec/AliTRDpidRefMaker.cxx
deleted file mode 100644 (file)
index be8d4e6..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-#include "TPDGCode.h"
-#include "TFile.h"
-#include "TTree.h"
-#include "TEventList.h"
-#include "TObjArray.h"
-#include "TH2.h"
-
-#include "AliLog.h"
-#include "AliESDtrack.h"
-#include "AliTrackReference.h"
-
-#include "AliTRDReconstructor.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDpidRefMaker.h"
-#include "info/AliTRDv0Info.h"
-
-
-// Defines and implements basic functionality for building reference data for TRD PID. 
-// 
-// Here is the list of functionality provided by this class
-// 1.
-// 2.
-// 
-// Authors:
-//   Alex Bercuci <A.Bercuci@gsi.de>
-//   Alex Wilk    <wilka@uni-muenster.de>
-//   Markus Fasel <mfasel@gsi.de>
-//   Markus Heide <mheide@uni-muenster.de>
-// 
-
-ClassImp(AliTRDpidRefMaker)
-ClassImp(AliTRDpidRefMaker::AliTRDpidRefData)
-ClassImp(AliTRDpidRefMaker::AliTRDpidRefDataArray)
-
-//________________________________________________________________________
-AliTRDpidRefMaker::AliTRDpidRefDataArray::AliTRDpidRefDataArray() :
-  fNtracklets(0)
-  ,fData(0x0)
-{
-  // Constructor of data array
-  fData = new AliTRDpidRefData[AliTRDgeometry::kNlayer];
-}
-
-//________________________________________________________________________
-AliTRDpidRefMaker::AliTRDpidRefDataArray::~AliTRDpidRefDataArray()
-{
-  // Destructor
-  delete [] fData;
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::AliTRDpidRefDataArray::PushBack(Int_t ly, Int_t p, Float_t *dedx)
-{
-// Add PID data to the end of the array 
-  fData[fNtracklets].fPLbin= (ly<<4) | (p&0xf);
-  memcpy(fData[fNtracklets].fdEdx, dedx, 8*sizeof(Float_t));
-  fNtracklets++;
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::AliTRDpidRefDataArray::Reset()
-{
-// Reset content
-
-  if(!fNtracklets) return;
-  while(fNtracklets--){
-    fData[fNtracklets].fPLbin = 0xff;
-    memset(fData[fNtracklets].fdEdx, 0, 8*sizeof(Float_t));
-  }
-  fNtracklets=0;
-}
-
-//________________________________________________________________________
-AliTRDpidRefMaker::AliTRDpidRefMaker(const char *name, const char *title) 
-  :AliTRDrecoTask(name, title)
-  ,fReconstructor(0x0)
-  ,fV0s(0x0)
-  ,fData(0x0)
-  ,fPIDdataArray(0x0)
-  ,fRefPID(kMC)
-  ,fRefP(kMC)
-  ,fPIDbin(0xff)
-  ,fFreq(1.)
-  ,fP(-1.)
-  ,fPthreshold(0.5)
-{
-  //
-  // Default constructor
-  //
-
-  fReconstructor = new AliTRDReconstructor();
-  fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
-  memset(fdEdx, 0, 10*sizeof(Float_t));
-  memset(fPID, 0, AliPID::kSPECIES*sizeof(Float_t));
-
-  DefineInput(1, TObjArray::Class());
-  DefineOutput(1, TTree::Class());
-}
-
-
-//________________________________________________________________________
-AliTRDpidRefMaker::~AliTRDpidRefMaker() 
-{
-  if(fPIDdataArray) delete fPIDdataArray;
-  if(fReconstructor) delete fReconstructor;
-}
-
-//________________________________________________________________________
-Bool_t AliTRDpidRefMaker::CheckQuality(AliTRDseedV1* /*trklt*/)
-{
-// Place holder for checking tracklet quality for PID.
-  return kTRUE;  
-}
-
-
-//________________________________________________________________________
-Float_t* AliTRDpidRefMaker::CookdEdx(AliTRDseedV1 *trklt)
-{
-  trklt->CookdEdx(AliTRDpidUtil::kNNslices);
-  memcpy(fdEdx, trklt->GetdEdx(), AliTRDpidUtil::kNNslices*sizeof(Float_t));
-  return fdEdx;
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::ConnectInputData(Option_t *opt)
-{
-  AliTRDrecoTask::ConnectInputData(opt);
-  fV0s = dynamic_cast<TObjArray*>(GetInputData(1));
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::CreateOutputObjects()
-{
-  // Create histograms
-  // Called once
-
-  OpenFile(0, "RECREATE");
-  fContainer = new TObjArray();
-  fContainer->SetName(Form("Moni%s", GetName()));
-
-  TH2 *h2 = new TH2I("hPDG","Particle abundance", AliPID::kSPECIES, -0.5, 4.5, AliTRDCalPID::kNMom, -0.5, AliTRDCalPID::kNMom-0.5);
-  TAxis *ax = h2->GetXaxis();
-  ax->SetNdivisions(505);
-  ax->SetTitle("Particle species");
-  for(Int_t is=AliPID::kSPECIES; is--;) ax->SetBinLabel(is+1, AliPID::ParticleShortName(is));
-  h2->GetYaxis()->SetTitle("P bins");
-  h2->GetYaxis()->SetNdivisions(511);
-
-  fContainer->AddAt(h2, 0);
-
-  fData = new TTree(GetName(), Form("Reference data for %s", GetName()));
-  fData->Branch("s", &fPIDbin, "s/b");
-  fData->Branch("data", &fPIDdataArray);
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::Exec(Option_t *) 
-{
-  // Main loop
-  // Called for each event
-
-  AliTRDtrackInfo     *track = 0x0;
-  AliTRDtrackV1    *trackTRD = 0x0;
-  AliTrackReference     *ref = 0x0;
-  const AliTRDtrackInfo::AliESDinfo *infoESD = 0x0;
-  for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
-    track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
-    if(!track->HasESDtrack()) continue;
-    trackTRD = track->GetTrack();
-    infoESD  = track->GetESDinfo();
-    Double32_t *infoPID = infoESD->GetSliceIter();
-    Int_t n = infoESD->GetNSlices() - AliTRDgeometry::kNlayer;
-    Double32_t *p = &infoPID[n];
-
-
-    ULong_t status = track->GetStatus();
-    if(!(status&AliESDtrack::kTPCout)) continue;
-
-    // fill the pid information
-    SetRefPID(fRefPID, track, fPID);
-
-    // prepare PID data array
-    if(!fPIDdataArray){ 
-      fPIDdataArray = new AliTRDpidRefDataArray();
-    } else fPIDdataArray->Reset();
-
-    // fill PID information
-    for(Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++){
-
-      // fill P & dE/dx information
-      if(HasFriends()){ // from TRD track
-        if(!trackTRD) continue;
-        AliTRDseedV1 *trackletTRD(0x0);
-        trackTRD -> SetReconstructor(fReconstructor);
-        if(!(trackletTRD = trackTRD -> GetTracklet(ily))) continue;
-        if(!CheckQuality(trackletTRD)) continue;
-        if(!CookdEdx(trackletTRD)) continue;
-
-        // fill momentum information
-        fP = 0.;
-        switch(fRefP){
-        case kMC:
-          if(!(ref = track->GetTrackRef(trackletTRD))) continue;
-          fP = ref->P();
-          break;
-        case kRec:
-          fP = trackletTRD->GetMomentum();
-          break;
-        default: continue;
-        }
-      } else { // from ESD track
-        // fill momentum information
-        switch(fRefP){
-        case kMC:
-          if(!(ref = track->GetTrackRef(ily))) continue;
-          fP = ref->P();
-          break;
-        case kRec:
-          fP = p[ily];
-          break;
-        default: continue;
-        } 
-        Double32_t *it = &infoPID[ily*AliTRDCalPID::kNSlicesNN];
-        for(Int_t is=AliTRDCalPID::kNSlicesNN; is--; it++) fdEdx[is] = (*it);
-      }
-
-      // momentum threshold
-      if(fP < fPthreshold) continue;
-
-      // store information
-      fPIDdataArray->PushBack(ily, AliTRDpidUtil::GetMomentumBin(fP), fdEdx);
-    }
-
-    Fill();
-  }
-
-  PostData(0, fContainer);
-  PostData(1, fData);
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::Fill() 
-{
-// Fill data tree
-
-  if(!fPIDdataArray->fNtracklets) return;
-  fPIDbin = TMath::LocMax(AliPID::kSPECIES, fPID); // get particle type
-// Fill data tree
-  fData->Fill();
-
-  
-  // fill monitor
-  for(Int_t ily=fPIDdataArray->fNtracklets; ily--;){
-    Int_t pBin = fPIDdataArray->fData[ily].fPLbin & 0xf;
-    ((TH2*)fContainer->At(0))->Fill(fPIDbin, pBin);
-  }
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::LinkPIDdata() 
-{
-// Link data tree to data members
-  fData->SetBranchAddress("s", &fPIDbin);
-  fData->SetBranchAddress("data", &fPIDdataArray);
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, void *source, Float_t *pid) 
-{
-// Fill the reference PID values "pid" from "source" object
-// according to the option "select". Possible options are
-// - kV0  - v0 based PID
-// - kMC  - MC truth [default]
-// - kRec - outside detectors
-
-
-  memset(fPID, 0, AliPID::kSPECIES*sizeof(Float_t));
-  switch(select){ 
-  case kV0:
-    {
-      AliTRDtrackInfo *track = static_cast<AliTRDtrackInfo*>(source);
-      if(!track){
-        AliError("No trackInfo found");
-        return;
-      }
-
-      //Get V0 PID decisions from the AliTRDv0Info for all particle species (implemented so far : electrons from conversions, pions from K0s and protons from Lambdas) :
-      AliTRDv0Info v0;
-      for(Int_t is=AliPID::kSPECIES; is--;) fPID[is] = v0.GetV0PID(is, track);
-    }
-    break;
-  case kMC:
-    if(!HasMCdata()){
-      AliError("Could not retrive reference PID from MC");
-      return;
-    }
-    {
-      AliTRDtrackInfo *track = static_cast<AliTRDtrackInfo*>(source);
-      switch(track->GetPDG()){
-      case kElectron:
-      case kPositron:
-        fPID[AliPID::kElectron] = 1.;
-        break;
-      case kMuonPlus:
-      case kMuonMinus:
-        fPID[AliPID::kMuon] = 1.;
-        break;
-      case kPiPlus:
-      case kPiMinus:
-        fPID[AliPID::kPion] = 1.;
-        break;
-      case kKPlus:
-      case kKMinus:
-        fPID[AliPID::kKaon] = 1.;
-        break;
-      case kProton:
-      case kProtonBar:
-        fPID[AliPID::kProton] = 1.;
-        break;
-      }
-    }
-    break;
-  case kRec:
-    { 
-      AliTRDtrackInfo *track = static_cast<AliTRDtrackInfo*>(source);
-      AliTRDtrackV1 *trackTRD = track->GetTrack();
-      trackTRD -> SetReconstructor(fReconstructor);
-      //fReconstructor -> SetOption("nn");
-      trackTRD -> CookPID();
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-        pid[iPart] = trackTRD -> GetPID(iPart);
-        AliDebug(4, Form("PDG is (in V0info) %d %f", iPart, pid[iPart]));
-      }
-    }
-    break;
-  default:
-    AliWarning("PID reference source not implemented");
-    return;
-  }
-  AliDebug(4, Form("Ref PID [%] : %s[%5.2f] %s[%5.2f] %s[%5.2f] %s[%5.2f] %s[%5.2f]"
-    ,AliPID::ParticleShortName(0), 1.e2*fPID[0]
-    ,AliPID::ParticleShortName(1), 1.e2*fPID[1]
-    ,AliPID::ParticleShortName(2), 1.e2*fPID[2]
-    ,AliPID::ParticleShortName(3), 1.e2*fPID[3]
-    ,AliPID::ParticleShortName(4), 1.e2*fPID[4]
-  ));
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMaker::SetAbundance(Float_t train) 
-{
-// Split data sample between trainning and testing
-
-  if(train<0. || train >1.){
-    AliWarning("The input data should be in the interval [0, 1]");
-    return;
-  }
-
-  fFreq = train; 
-}
-
diff --git a/TRD/qaRec/AliTRDpidRefMaker.h b/TRD/qaRec/AliTRDpidRefMaker.h
deleted file mode 100644 (file)
index dfd8bb6..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#ifndef ALITRDPIDREFMAKER_H
-#define ALITRDPIDREFMAKER_H
-
-////////////////////////////////////////////////////////////
-//
-// Base class for the Task to build TRD-PID reference data
-// For the actual implementation please check the classes
-//   - AliTRDpidRefMakerNN (Neural Networks)
-//   - AliTRDpidRefMakerLQ (Multidimensional Likelihood)
-//
-// Authors: Alex Bercuci <A.Bercuci@gsi.de>
-//          Alex Wilk    <wilka@uni-muenster.de>
-//
-/////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-#ifndef ALIPID_H
-#include "AliPID.h"
-#endif
-#ifndef ALITRDCALPID_H
-#include "../Cal/AliTRDCalPID.h"
-#endif
-#ifndef ALITRDGEOMETRY_H
-#include "../AliTRDgeometry.h"
-#endif
-
-class TTree;
-class TObjArray;
-class AliTRDReconstructor;
-class AliTRDseedV1;
-class AliTRDpidRefMaker : public AliTRDrecoTask
-{
-public:
-  enum ETRDpidRefMakerPBins {
-    k006  =  0
-    ,k008 =  1
-    ,k010 =  2
-    ,k015 =  3
-    ,k020 =  4
-    ,k030 =  5
-    ,k040 =  6
-    ,k050 =  7
-    ,k060 =  8
-    ,k080 =  9
-    ,k100 = 10
-    ,kAll = 11
-  };
-  enum ETRDpidRefMakerSource {
-    kV0 = 0 // use V0 as reference
-   ,kMC = 1 // use MC as reference
-   ,kRec= 2 // use Reconstructed PID as reference
-  };
-
-  struct AliTRDpidRefData {
-    AliTRDpidRefData() : fPLbin(0xff) {
-      memset(fdEdx, 0, 8*sizeof(Float_t));
-    }
-    virtual ~AliTRDpidRefData(){}
-    UChar_t fPLbin;   // momentum / layer bin
-    Float_t fdEdx[8]; // dEdx array
-    ClassDef(AliTRDpidRefData, 1)  // PID data representation
-  };
-  struct AliTRDpidRefDataArray {
-    AliTRDpidRefDataArray();
-    virtual ~AliTRDpidRefDataArray();
-    void    PushBack(Int_t ly, Int_t p, Float_t *dedx);
-    void    Reset();
-
-    Int_t   fNtracklets;     // number of tracklets
-    AliTRDpidRefData *fData; //[fNtracklets] PID data array
-  private:
-    AliTRDpidRefDataArray(const AliTRDpidRefMaker::AliTRDpidRefDataArray& ref);
-    AliTRDpidRefDataArray& operator=(const AliTRDpidRefMaker::AliTRDpidRefDataArray& ref);
-    ClassDef(AliTRDpidRefDataArray, 1)  // track PID data representation
-  };
-
-  AliTRDpidRefMaker(const char *name="PIDrefMaker", const char *title="PID Reference Maker");
-
-  virtual ~AliTRDpidRefMaker();
-  
-  void    ConnectInputData(Option_t *opt);
-  void    CreateOutputObjects();
-  void    Exec(Option_t *option);
-  Float_t GetPthreshold() const { return fPthreshold;}
-
-  void    SetAbundance(Float_t train);
-  void    SetPthreshold(Float_t t) { fPthreshold = t;}
-  void    SetRefPID(ETRDpidRefMakerSource select, void *source, Float_t *pid);
-  void    SetSource(ETRDpidRefMakerSource pid, ETRDpidRefMakerSource momentum) {fRefPID = pid; fRefP = momentum;}
-
-
-protected:
-  virtual Bool_t   CheckQuality(AliTRDseedV1* trklt);
-  virtual Float_t* CookdEdx(AliTRDseedV1* trklt);
-  virtual void     LinkPIDdata();
-  virtual void     Fill();
-
-  AliTRDReconstructor *fReconstructor;  //! reconstructor needed for recalculation the PID
-  TObjArray     *fV0s;                  //! v0 array
-  TTree         *fData;                 //! dEdx-P data
-  AliTRDpidRefDataArray *fPIDdataArray; //! pid data array
-  ETRDpidRefMakerSource  fRefPID;       // reference PID source
-  ETRDpidRefMakerSource  fRefP;         // reference momentum source
-  UChar_t       fPIDbin;                //! species bin
-  Float_t       fFreq;                  //! training sample relative abundance
-  Float_t       fP;                     //! momentum
-  Float_t       fdEdx[8];               //! dEdx array
-  Float_t       fPID[AliPID::kSPECIES]; //! pid from v0s
-
-private:
-  AliTRDpidRefMaker(const AliTRDpidRefMaker&);              // not implemented
-  AliTRDpidRefMaker& operator=(const AliTRDpidRefMaker&);   // not implemented
-
-  Float_t        fPthreshold;            // momentum threshold [GeV/c]
-
-  ClassDef(AliTRDpidRefMaker, 3); // TRD PID reference  maker base class
-};
-
-#endif
diff --git a/TRD/qaRec/AliTRDpidRefMakerLQ.cxx b/TRD/qaRec/AliTRDpidRefMakerLQ.cxx
deleted file mode 100644 (file)
index fc0b63d..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDpidRefMakerLQ.cxx 34163 2009-08-07 11:28:51Z cblume $ */
-
-///////////////////////////////////////////////////////////////////////////////
-//
-//
-//  TRD calibration class for building reference data for PID
-//  - 2D reference histograms (responsible A.Bercuci) 
-//  - 3D reference histograms (not yet implemented) (responsible A.Bercuci)
-//  - Neural Network (responsible A.Wilk)
-//
-//   Origin
-//   Alex Bercuci  (A.Bercuci@gsi.de)
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#include <TFile.h>
-#include <TROOT.h>
-#include <TTree.h>
-#include <TMath.h>
-#include <TEventList.h>
-#include <TH2D.h>
-#include <TH2I.h>
-#include <TPrincipal.h>
-//#include <TVector3.h>
-//#include <TLinearFitter.h>
-#include <TCanvas.h>
-//#include <TEllipse.h>
-//#include <TMarker.h>
-
-#include "AliLog.h"
-#include "../../STAT/TKDPDF.h"
-#include "AliTRDpidRefMakerLQ.h"
-#include "../Cal/AliTRDCalPID.h"
-#include "../Cal/AliTRDCalPIDLQ.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDcalibDB.h"
-#include "AliTRDgeometry.h"
-
-ClassImp(AliTRDpidRefMakerLQ)
-
-//__________________________________________________________________
-AliTRDpidRefMakerLQ::AliTRDpidRefMakerLQ()
-  :AliTRDpidRefMaker("PIDrefMakerLQ", "PID(LQ) Reference Maker")
-{
-  //
-  // AliTRDpidRefMakerLQ default constructor
-  //
-}
-
-//__________________________________________________________________
-AliTRDpidRefMakerLQ::~AliTRDpidRefMakerLQ()
-{
-  //
-  // AliTRDCalPIDQRef destructor
-  //
-}
-
-//________________________________________________________________________
-void AliTRDpidRefMakerLQ::CreateOutputObjects()
-{
-  // Create histograms
-  // Called once
-
-  AliTRDpidRefMaker::CreateOutputObjects();
-
-  // save dE/dx references
-  TH2 *h2 = 0x0;
-  for(Int_t ip=AliTRDCalPID::kNMom; ip--;){ 
-    TObjArray *arr = new TObjArray(AliPID::kSPECIES);
-    arr->SetName(Form("Pbin%02d", ip));
-    for(Int_t is=AliPID::kSPECIES; is--;) {
-      h2 = new TH2D(Form("h%s%d", AliPID::ParticleShortName(is), ip), Form("%s ref. dEdx @ Pbin[%d]", AliPID::ParticleName(is), ip), 50, 5., 10., 50, 5., 10.);
-      h2->GetXaxis()->SetTitle("log(dE/dx_{am}) [au]");
-      h2->GetYaxis()->SetTitle("log(dE/dx_{dr}) [au]");
-      h2->GetZaxis()->SetTitle("#");
-      arr->AddAt(h2, is);
-    }
-    fContainer->AddAt(arr, 1+ip);
-  }
-}
-
-/*
-//________________________________________________________________________
-Float_t* AliTRDpidRefMakerLQ::CookdEdx(AliTRDseedV1 *trklt)
-{
-// Fill dEdx array for multidim LQ PID
-
-  trklt->CookdEdx(AliTRDpidUtil::kLQslices);
-  const Float_t *dedx = trklt->GetdEdx();
-  if(dedx[0]+dedx[1] <= 0.) return 0x0;
-  if(dedx[2] <= 0.) return 0x0;
-
-  fdEdx[0] = TMath::Log(dedx[0]+dedx[1]);
-  fdEdx[1] = TMath::Log(dedx[2]);
-  return fdEdx;
-}*/
-
-//__________________________________________________________________
-TObject* AliTRDpidRefMakerLQ::GetOCDBEntry(Option_t *opt)
-{
-// Steer loading of OCDB LQ PID
-
-  TDirectoryFile *d = 0x0;
-  if(!TFile::Open(Form("TRD.Calib%s.root", GetName()))) return 0x0;
-  if(!(d=(TDirectoryFile*)gFile->Get(Form("PDF_%s", opt)))) return 0x0;
-  AliTRDCalPIDLQ *cal = new AliTRDCalPIDLQ("pidLQ", "LQ TRD PID object");
-  cal->LoadPDF(d);
-  return cal;
-}
-
-//__________________________________________________________________
-Bool_t AliTRDpidRefMakerLQ::GetRefFigure(Int_t ifig)
-{
-// Steering reference picture
-
-  if(ifig<0 || ifig>AliTRDCalPID::kNMom-1){ 
-    AliError("Ref fig requested outside definition.");
-    return kFALSE;
-  }
-  if(!gPad){
-    AliWarning("Please provide a canvas to draw results.");
-    return kFALSE;
-  }
-
-  TObjArray *arr = (TObjArray*)fContainer->At(ifig);
-  gPad->Divide(3, 2, 1.e-5, 1.e-5); 
-  TList *l=gPad->GetListOfPrimitives(); 
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    ((TVirtualPad*)l->At(is))->cd();
-    ((TH2*)arr->At(is))->Draw("cont4z");
-  }
-
-  return kTRUE;
-}
-
-//________________________________________________________________________
-Bool_t AliTRDpidRefMakerLQ::PostProcess()
-{
-// Analyse merged dedx = f(p) distributions.
-//   - select momentum - species bins
-//   - rotate to principal components
-//   - locally interpolate with TKDPDF
-//   - save interpolation to monitoring histograms
-//   - write pdf to file for loading to OCDB
-// 
-
-
-  TFile *fCalib = TFile::Open(Form("TRD.Calib%s.root", GetName()), "update");
-  fData = dynamic_cast<TTree*>(gFile->Get(GetName()));
-  if (!fData) {
-    AliError("Calibration data not available");
-    return kFALSE;
-  }
-  TObjArray *o = 0x0;
-  if(!(o = (TObjArray*)gFile->Get(Form("Moni%s", GetName())))){
-    AliWarning("Missing monitoring container.");
-    return kFALSE;
-  }
-  fContainer = (TObjArray*)o->Clone("monitor");
-
-  TDatime d;
-  TDirectoryFile *pdfs = new TDirectoryFile(Form("PDF_%d", d.GetDate()), "PDFs for LQ TRD-PID", "", gFile);
-  pdfs->Write();
-  AliDebug(2, Form("Data[%d]", fData->GetEntries()));
-  pdfs->cd();
-
-  //TCanvas *cc = new TCanvas("cc", "", 500, 500);
-  LinkPIDdata();
-  Float_t *data[] = {0x0, 0x0};
-  // allocate storage
-  data[0] = new Float_t[kMaxStat];data[1] = new Float_t[kMaxStat];
-  for(Int_t ip=AliTRDCalPID::kNMom; ip--; ){ 
-    for(Int_t is=AliPID::kSPECIES; is--;) {
-      Int_t n(0); // index of data
-      for(Int_t itrk=0; (itrk < fData->GetEntries()) && (n<kMaxStat); itrk++){
-        if(!(fData->GetEntry(itrk))) continue;
-        if(fPIDbin!=is) continue;
-        for(Int_t ily=fPIDdataArray->fNtracklets; ily--;){
-          if((fPIDdataArray->fData[ily].fPLbin & 0xf)!= ip) continue;
-          
-          Float_t dedx[] = {0., 0.};
-          for(Int_t islice=AliTRDCalPID::kNSlicesNN; islice--;){
-            Int_t jslice = islice>kNN2LQtransition;
-            dedx[jslice]+=fPIDdataArray->fData[ily].fdEdx[islice];
-          }
-          
-          // check data integrity
-          if(dedx[0]<1.e-30) continue;
-          if(dedx[1]<1.e-30) continue;
-
-          // store data
-          data[0][n] = TMath::Log(dedx[0]);
-          data[1][n] = TMath::Log(dedx[1]);
-          n++; if(n==kMaxStat) break;
-        }
-      }
-
-      // estimate bucket statistics
-      Int_t nb(kMinBuckets), // number of buckets
-            ns(Int_t(Float_t(n)/nb));    //statistics/bucket
-            
-// if(Float_t(n)/nb < 220.) ns = 200; // 7% stat error
-//       else if(Float_t(n)/nb < 420.) ns = 400; // 5% stat error
-
-      AliDebug(2, Form("pBin[%d] sBin[%d] n[%d] ns[%d] nb[%d]", ip, is, n, ns, nb));
-      if(ns<Int_t(kMinStat)){
-        AliWarning(Form("Not enough entries [%d] for %s[%d].", n, AliPID::ParticleShortName(is), ip));
-        continue;
-      }
-
-      // build PDF
-      TKDPDF pdf(n, 2, ns, data);
-      pdf.SetCOG(kFALSE);
-      pdf.SetWeights();
-      pdf.SetStore();
-      pdf.SetAlpha(5.);
-      pdf.GetStatus();
-      Float_t *c, v, ve; Double_t r, e, rxy[2];
-      for(Int_t in=pdf.GetNTNodes(); in--;){
-        pdf.GetCOGPoint(in, c, v, ve);
-        rxy[0] = (Double_t)c[0];rxy[1] = (Double_t)c[1];
-        pdf.Eval(rxy, r, e, kTRUE);
-      }
-//       // visual on-line monitoring
-//       pdf.DrawProjection();cc->Modified(); cc->Update(); cc->SaveAs(Form("pdf_%s%02d.gif", AliPID::ParticleShortName(is), ip));
-//       cc->SaveAs(Form("%s_%s%02d.gif", GetName(), AliPID::ParticleShortName(is), ip));
-
-      // save a discretization of the PDF for result monitoring
-      TH2 *h2s = (TH2D*)((TObjArray*)fContainer->At(ip))->At(is);
-      TAxis *ax = h2s->GetXaxis(), *ay = h2s->GetYaxis();
-      h2s->Clear();
-      for(int ix=1; ix<=ax->GetNbins(); ix++){
-        rxy[0] = ax->GetBinCenter(ix);
-        for(int iy=1; iy<=ay->GetNbins(); iy++){
-          rxy[1] = ay->GetBinCenter(iy);
-      
-          Double_t rr,ee;
-          pdf.Eval(rxy, rr, ee, kFALSE);
-          if(rr<0. || ee/rr>.15) continue; // 15% relative error
-          //printf("x[%2d] x[%2d] r[%f] e[%f]\n", ix, iy, rr, ee);
-          h2s->SetBinContent(ix, iy, rr);
-        }
-      }
-
-      // write results to output array
-      //pdf.GetStatus();
-      pdf.Write(Form("%s[%d]", AliPID::ParticleShortName(is), ip));
-    }
-  }
-  delete [] data[0]; delete [] data[1];
-  pdfs->Write();
-  fCalib->Close(); delete fCalib;
-
-  return kTRUE; // testing protection
-}
-
-
diff --git a/TRD/qaRec/AliTRDpidRefMakerLQ.h b/TRD/qaRec/AliTRDpidRefMakerLQ.h
deleted file mode 100644 (file)
index a791a2c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef ALITRDPIDREFMAKERLQ_H
-#define ALITRDPIDREFMAKERLQ_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDpidRefMakerLQ.h 34125 2009-08-06 09:35:40Z cblume $ */
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  TRD calibration class for building reference data for PID                //
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALIPID_H
-#include "AliPID.h"
-#endif
-
-#ifndef ALITRDPIDREFMAKER_H
-#include "AliTRDpidRefMaker.h"
-#endif
-
-#ifndef ALITRDPIDUTIL_H
-#include "AliTRDpidUtil.h"
-#endif
-
-class TObjArray;
-class AliTRDpidRefMakerLQ : public AliTRDpidRefMaker {
-public:
-  enum ETRDpidRefMakerLQsteer{
-    kMaxStat    = 180000 // maximum statistics/PID bin
-   ,kMinStat    = 50     // minimum statistics/bucket 14%
-   ,kMinBuckets = 450    // minimum number of buckets [lambda(6)*alpha(1.5)*regions(50)]
-   ,kNN2LQtransition = 4 // index of NN slices where first LQ slice ends 
-  };
-  AliTRDpidRefMakerLQ();
-  ~AliTRDpidRefMakerLQ();
-  void      CreateOutputObjects();
-  TObject*  GetOCDBEntry(Option_t *opt);
-  Bool_t    GetRefFigure(Int_t ifig);
-  Bool_t    PostProcess();
-
-private:
-  AliTRDpidRefMakerLQ(const AliTRDpidRefMakerLQ &ref);
-  AliTRDpidRefMakerLQ& operator=(const AliTRDpidRefMakerLQ &ref);
-private:
-  ClassDef(AliTRDpidRefMakerLQ, 5)  // Reference builder for Multidim-LQ TRD-PID
-
-};
-
-#endif
-
diff --git a/TRD/qaRec/AliTRDpidRefMakerNN.cxx b/TRD/qaRec/AliTRDpidRefMakerNN.cxx
deleted file mode 100644 (file)
index e6e7870..0000000
+++ /dev/null
@@ -1,536 +0,0 @@
-/*************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* Permission to use, copy, modify and distribute this software and its   *
-* documentation strictly for non-commercialf 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDpidRefMakerNN.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Builds the reference tree for the training of neural networks         //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include "TSystem.h"
-#include "TDatime.h"
-#include "TPDGCode.h"
-#include "TH1F.h"
-#include "TH2F.h"
-#include "TFile.h"
-#include "TGraphErrors.h"
-#include "TTree.h"
-#include "TEventList.h"
-#include "TMultiLayerPerceptron.h"
-
-#include "AliPID.h"
-#include "AliESDtrack.h"
-#include "AliTrackReference.h"
-
-#include "AliTRDtrackV1.h"
-#include "AliTRDReconstructor.h"
-#include "AliTRDpidUtil.h"
-#include "AliTRDpidRefMakerNN.h"
-#include "AliTRDpidUtil.h"
-
-#include "../Cal/AliTRDCalPID.h"
-#include "../Cal/AliTRDCalPIDNN.h"
-#include "info/AliTRDtrackInfo.h"
-#include "info/AliTRDv0Info.h"
-
-ClassImp(AliTRDpidRefMakerNN)
-
-//________________________________________________________________________
-AliTRDpidRefMakerNN::AliTRDpidRefMakerNN() 
-  :AliTRDpidRefMaker("PidRefMakerNN", "PID(NN) Reference Maker")
-//   :AliTRDrecoTask("PidRefMakerNN", "PID(NN) Reference Maker")
-  ,fTrainMomBin(kAll)
-  ,fEpochs(1000)
-  ,fMinTrain(100)
-  ,fDate(0)
-  ,fDoTraining(0)
-  ,fContinueTraining(0)
-  ,fTrainPath(0x0)
-  ,fScale(0)
-{
-  //
-  // Default constructor
-  //
-
-  memset(fTrain, 0, AliTRDCalPID::kNMom*AliTRDgeometry::kNlayer*sizeof(TEventList*));
-  memset(fTest, 0, AliTRDCalPID::kNMom*AliTRDgeometry::kNlayer*sizeof(TEventList*));
-  memset(fNet, 0, AliTRDgeometry::kNlayer*sizeof(TMultiLayerPerceptron*));
-
-  SetAbundance(.67);
-  SetScaledEdx(Float_t(AliTRDCalPIDNN::kMLPscale));
-  TDatime datime;
-  fDate = datime.GetDate();
-
-  DefineInput(1, TObjArray::Class());
-  DefineOutput(1, TTree::Class());
-}
-
-
-//________________________________________________________________________
-AliTRDpidRefMakerNN::~AliTRDpidRefMakerNN() 
-{
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMakerNN::CreateOutputObjects()
-{
-  // Create histograms
-  // Called once
-
-  AliTRDpidRefMaker::CreateOutputObjects();
-  TGraphErrors *gEffisTrain = new TGraphErrors(kMoniTrain);
-  gEffisTrain -> SetLineColor(4);
-  gEffisTrain -> SetMarkerColor(4);
-  gEffisTrain -> SetMarkerStyle(29);
-  gEffisTrain -> SetMarkerSize(1);
-
-  TGraphErrors *gEffisTest = new TGraphErrors(kMoniTrain);
-  gEffisTest -> SetLineColor(2);
-  gEffisTest -> SetMarkerColor(2);
-  gEffisTest -> SetMarkerStyle(29);
-  gEffisTest -> SetMarkerSize(1);
-
-  fContainer -> AddAt(gEffisTrain,kGraphTrain);
-  fContainer -> AddAt(gEffisTest,kGraphTest);
-}
-
-
-
-//________________________________________________________________________
-Bool_t AliTRDpidRefMakerNN::PostProcess()
-{
-  // Draw result to the screen
-  // Called once at the end of the query
-
-  // build the training andthe test list for the neural networks
-  MakeTrainingLists();        
-  if(!fDoTraining) return kTRUE;
-
-  // train the neural networks and build the refrence histos for 2-dim LQ
-  gSystem->Exec(Form("mkdir ./Networks_%d/",fDate));
-  AliDebug(2, Form("TrainMomBin [%d] [%d]", fTrainMomBin, kAll));
-
-  // train single network for a single momentum (recommended)
-  if(!(fTrainMomBin == kAll)){
-    if(fTrain[fTrainMomBin][0] -> GetN() < fMinTrain){
-      AliDebug(2, Form("Warning in AliTRDpidRefMakerNN::PostProcess : Not enough events for training available! Please check Data sample!"));
-      return kFALSE;
-    }
-    MakeRefs(fTrainMomBin);
-//     TrainNetworks(fTrainMomBin);
-    MonitorTraining(fTrainMomBin);
-  }
-  // train all momenta
-  else{
-    for(Int_t iMomBin = 0; iMomBin < AliTRDCalPID::kNMom; iMomBin++){
-      if(fTrain[iMomBin][0] -> GetN() < fMinTrain){
-        AliDebug(2, Form("Warning in AliTRDpidRefMakerNN::PostProcess : Not enough events for training available for momentum bin [%d]! Please check Data sample!", iMomBin));
-  continue;
-      }
-      MakeRefs(fTrainMomBin);
-//       TrainNetworks(iMomBin);
-      MonitorTraining(iMomBin);
-    }
-  }
-
-  return kTRUE; // testing protection
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMakerNN::MakeTrainingLists() 
-{
-  //
-  // build the training lists for the neural networks
-  //
-
-  if (!fData) {
-    LoadFile("TRD.CalibPidRefMakerNN.root");
-  }
-
-  if (!fData) {
-    Printf("ERROR tree for training list not available");
-    return;
-  }
-
-  AliDebug(2, "  Making training lists! \n");
-
-  Int_t nPart[AliPID::kSPECIES][AliTRDCalPID::kNMom];
-  memset(nPart, 0, AliPID::kSPECIES*AliTRDCalPID::kNMom*sizeof(Int_t));
-
-  // set needed branches
-  LinkPIDdata();
-
-  // start first loop to check total number of each particle type
-  for(Int_t iEv=0; iEv < fData -> GetEntries(); iEv++){
-    fData -> GetEntry(iEv);
-
-    // use only events with goes through 6 layers TRD
-    if(fPIDdataArray->fNtracklets != AliTRDgeometry::kNlayer) continue;
-
-    for(Int_t ily=AliTRDgeometry::kNlayer; ily--;) nPart[fPIDbin][fPIDdataArray->fData[ily].fPLbin & 0xf]++;
-  }
-
-  AliDebug(2, "Particle multiplicities:");
-  for(Int_t iMomBin = 0; iMomBin <AliTRDCalPID::kNMom; iMomBin++)
-    AliDebug(2, Form("Momentum[%d]  Elecs[%d] Muons[%d] Pions[%d] Kaons[%d] Protons[%d]", iMomBin, nPart[AliPID::kElectron][iMomBin], nPart[AliPID::kMuon][iMomBin], nPart[AliPID::kPion][iMomBin], nPart[AliPID::kKaon][iMomBin], nPart[AliPID::kProton][iMomBin]));
-
-  // implement counter of training and test sample size
-  Int_t iTrain[AliTRDCalPID::kNMom], iTest[AliTRDCalPID::kNMom];
-  memset(iTrain, 0, AliTRDCalPID::kNMom*sizeof(Int_t));
-  memset(iTest, 0, AliTRDCalPID::kNMom*sizeof(Int_t));
-
-  // set training sample size per momentum interval to 2/3 
-  // of smallest particle counter and test sample to 1/3
-  for(Int_t iMomBin = 0; iMomBin < AliTRDCalPID::kNMom; iMomBin++){
-    iTrain[iMomBin] = nPart[0][iMomBin];
-    for(Int_t iPart = 1; iPart < AliPID::kSPECIES; iPart++){
-      if(iTrain[iMomBin] > nPart[iPart][iMomBin])
-  iTrain[iMomBin] = nPart[iPart][iMomBin];
-    } 
-    iTrain[iMomBin] = Int_t(iTrain[iMomBin] * .66);
-    iTest[iMomBin] = Int_t( iTrain[iMomBin] * .5);
-    AliDebug(2, Form("Momentum[%d]  Train[%d] Test[%d]", iMomBin, iTrain[iMomBin], iTest[iMomBin]));
-  }
-
-
-  // reset couters
-  memset(nPart, 0, AliPID::kSPECIES*AliTRDCalPID::kNMom*sizeof(Int_t));
-
-  // start second loop to set the event lists
-  for(Int_t iEv = 0; iEv < fData -> GetEntries(); iEv++){
-    fData -> GetEntry(iEv);
-
-    // use only events with goes through 6 layers TRD
-    if(fPIDdataArray->fNtracklets != AliTRDgeometry::kNlayer) continue;
-
-    for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){ 
-      Int_t iMomBin = fPIDdataArray->fData[ily].fPLbin & 0xf;
-    
-      // set event list
-      if(nPart[fPIDbin][iMomBin] < iTrain[iMomBin]){
-        fTrain[iMomBin][ily] -> Enter(iEv + ily);
-        nPart[fPIDbin][iMomBin]++;
-      } else if(nPart[fPIDbin][iMomBin] < iTest[iMomBin]+iTrain[iMomBin]){
-        fTest[iMomBin][ily] -> Enter(iEv + ily);
-        nPart[fPIDbin][iMomBin]++;
-      } else continue;
-    }
-  }
-  
-  AliDebug(2, "Particle multiplicities in both lists:");
-  for(Int_t iMomBin = 0; iMomBin <AliTRDCalPID::kNMom; iMomBin++)
-    AliDebug(2, Form("Momentum[%d]  Elecs[%d] Muons[%d] Pions[%d] Kaons[%d] Protons[%d]", iMomBin, nPart[AliPID::kElectron][iMomBin], nPart[AliPID::kMuon][iMomBin], nPart[AliPID::kPion][iMomBin], nPart[AliPID::kKaon][iMomBin], nPart[AliPID::kProton][iMomBin]));
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMakerNN::MakeRefs(Int_t mombin) 
-{
-  //
-  // train the neural networks
-  //
-  
-  
-  if (!fData) LoadFile(Form("TRD.Calib%s.root", GetName()));
-
-  if (!fData) {
-    AliError("Tree for training list not available");
-    return;
-  }
-
-  TDatime datime;
-  fDate = datime.GetDate();
-
-  AliDebug(2, Form("Training momentum bin %d", mombin));
-
-  // set variable to monitor the training and to save the development of the networks
-  Int_t nEpochs = fEpochs/kMoniTrain;       
-  AliDebug(2, Form("Training %d times %d epochs", kMoniTrain, nEpochs));
-
-  // make directories to save the networks 
-  gSystem->Exec(Form("rm -r ./Networks_%d/MomBin_%d",fDate, mombin));
-  gSystem->Exec(Form("mkdir ./Networks_%d/MomBin_%d",fDate, mombin));
-
-  // variable to check if network can load weights from previous training
-  Bool_t bFirstLoop[AliTRDgeometry::kNlayer];
-  memset(bFirstLoop, kTRUE, AliTRDgeometry::kNlayer*sizeof(Bool_t));
-
-  // train networks over several loops and save them after each loop
-  for(Int_t iLoop = 0; iLoop < kMoniTrain; iLoop++){
-    // loop over chambers
-    for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-      // set the event lists
-      fData -> SetEventList(fTrain[mombin][iChamb]);
-      fData -> SetEventList(fTest[mombin][iChamb]);
-      
-      AliDebug(2, Form("Trainingloop[%d] Chamber[%d]", iLoop, iChamb));
-      
-      // check if network is already implemented
-      if(bFirstLoop[iChamb] == kTRUE){
-  fNet[iChamb] = new TMultiLayerPerceptron("fdEdx[0],fdEdx[1],fdEdx[2],fdEdx[3],fdEdx[4],fdEdx[5],fdEdx[6],fdEdx[7]:15:7:fPID[0],fPID[1],fPID[2],fPID[3],fPID[4]!",fData,fTrain[mombin][iChamb],fTest[mombin][iChamb]);
-  fNet[iChamb] -> SetLearningMethod(TMultiLayerPerceptron::kStochastic);       // set learning method
-  fNet[iChamb] -> TMultiLayerPerceptron::SetEta(0.001);                        // set learning speed
-  if(!fContinueTraining){
-    if(DebugLevel()>=2) fNet[iChamb] -> Train(nEpochs,"text update=10, graph");
-    else fNet[iChamb] -> Train(nEpochs,"");
-  }
-  else{
-    fNet[iChamb] -> LoadWeights(Form("./Networks_%d/MomBin_%d/Net%d_%d",fTrainPath, mombin, iChamb, kMoniTrain - 1));
-    if(DebugLevel()>=2) fNet[iChamb] -> Train(nEpochs,"text update=10, graph+");      
-    else fNet[iChamb] -> Train(nEpochs,"+");                   
-  }
-  bFirstLoop[iChamb] = kFALSE;
-      }
-      else{    
-  if(DebugLevel()>=2) fNet[iChamb] -> Train(nEpochs,"text update=10, graph+");      
-  else fNet[iChamb] -> Train(nEpochs,"+");                   
-      }
-      
-      // save weights for monitoring of the training
-      fNet[iChamb] -> DumpWeights(Form("./Networks_%d/MomBin_%d/Net%d_%d",fDate, mombin, iChamb, iLoop));
-    } // end chamber loop
-  }   // end training loop
-}
-
-
-
-//________________________________________________________________________
-void AliTRDpidRefMakerNN::MonitorTraining(Int_t mombin) 
-{
-  //
-  // train the neural networks
-  //
-  
-  if (!fData) LoadFile(Form("TRD.Calib%s.root", GetName()));
-  if (!fData) {
-    AliError("Tree for training list not available");
-    return;
-  }
-
-  // init networks and set event list
-  for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-  fNet[iChamb] = new TMultiLayerPerceptron("fdEdx[0],fdEdx[1],fdEdx[2],fdEdx[3],fdEdx[4],fdEdx[5],fdEdx[6],fdEdx[7]:15:7:fPID[0],fPID[1],fPID[2],fPID[3],fPID[4]!",fData,fTrain[mombin][iChamb],fTest[mombin][iChamb]);   
-  fData -> SetEventList(fTrain[mombin][iChamb]);
-  fData -> SetEventList(fTest[mombin][iChamb]);
-  }
-
-  // implement variables for likelihoods
-  Float_t like[AliPID::kSPECIES][AliTRDgeometry::kNlayer];
-  memset(like, 0, AliPID::kSPECIES*AliTRDgeometry::kNlayer*sizeof(Float_t));
-  Float_t likeAll[AliPID::kSPECIES], totProb;
-
-  Double_t pionEffiTrain[kMoniTrain], pionEffiErrTrain[kMoniTrain];
-  Double_t pionEffiTest[kMoniTrain], pionEffiErrTest[kMoniTrain];
-  memset(pionEffiTrain, 0, kMoniTrain*sizeof(Double_t));
-  memset(pionEffiErrTrain, 0, kMoniTrain*sizeof(Double_t));
-  memset(pionEffiTest, 0, kMoniTrain*sizeof(Double_t));
-  memset(pionEffiErrTest, 0, kMoniTrain*sizeof(Double_t));
-
-  // init histos
-  const Float_t epsilon = 1/(2*(AliTRDpidUtil::kBins-1));     // get nice histos with bin center at 0 and 1
-  TH1F *hElecs, *hPions;
-  hElecs = new TH1F("hElecs","Likelihood for electrons", AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon);
-  hPions = new TH1F("hPions","Likelihood for pions", AliTRDpidUtil::kBins, 0.-epsilon, 1.+epsilon);
-
-  TGraphErrors *gEffisTrain=0x0, *gEffisTest=0x0;
-  gEffisTrain = (TGraphErrors*)fContainer->At(kGraphTrain);
-  gEffisTest = (TGraphErrors*)fContainer->At(kGraphTest);
-
-  AliTRDpidUtil *util = new AliTRDpidUtil();
-  
-  // monitor training progress
-  for(Int_t iLoop = 0; iLoop < kMoniTrain; iLoop++){
-
-    // load weights
-    for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-      fNet[iChamb] -> LoadWeights(Form("./Networks_%d/MomBin_%d/Net%d_%d",fDate, mombin, iChamb, iLoop));
-    }
-
-    // event loop training list
-    for(Int_t iEvent = 0; iEvent < fTrain[mombin][0] -> GetN(); iEvent++ ){
-
-      // reset particle probabilities
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  likeAll[iPart] = 1./AliPID::kSPECIES;
-      }
-      totProb = 0.;
-
-      fData -> GetEntry(fTrain[mombin][0] -> GetEntry(iEvent));
-      // use event only if it is electron or pion
-      if(!((fPID[AliPID::kElectron] == 1.0) || (fPID[AliPID::kPion] == 1.0))) continue;
-
-      // get the probabilities for each particle type in each chamber
-      for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-  for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-    like[iPart][iChamb] = fNet[iChamb] -> Result(fTrain[mombin][iChamb] -> GetEntry(iEvent), iPart);
-    likeAll[iPart] *=  like[iPart][iChamb];
-  }
-      }
-
-      // get total probability and normalize it
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  totProb += likeAll[iPart];
-      }
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  likeAll[iPart] /= totProb;
-      }
-
-      // fill likelihood distributions
-      if(fPID[AliPID::kElectron] == 1)      
-  hElecs -> Fill(likeAll[AliPID::kElectron]);
-      if(fPID[AliPID::kPion] == 1)      
-  hPions -> Fill(likeAll[AliPID::kElectron]);
-    } // end event loop
-
-
-    // calculate the pion efficiency and fill the graph
-    util -> CalculatePionEffi(hElecs, hPions);
-    pionEffiTrain[iLoop] = util -> GetPionEfficiency();
-    pionEffiErrTrain[iLoop] = util -> GetError();
-
-    gEffisTrain -> SetPoint(iLoop, iLoop+1, pionEffiTrain[iLoop]);
-    gEffisTrain -> SetPointError(iLoop, 0, pionEffiErrTrain[iLoop]);
-    hElecs -> Reset();
-    hPions -> Reset();
-    AliDebug(2, Form("TrainingLoop[%d] PionEfficiency[%f +/- %f]", iLoop, pionEffiTrain[iLoop], pionEffiErrTrain[iLoop]));
-    // end training loop
-    
-
-
-    // event loop test list
-    for(Int_t iEvent = 0; iEvent < fTest[mombin][0] -> GetN(); iEvent++ ){
-
-      // reset particle probabilities
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  likeAll[iPart] = 1./AliTRDgeometry::kNlayer;
-      }
-      totProb = 0.;
-
-      fData -> GetEntry(fTest[mombin][0] -> GetEntry(iEvent));
-      // use event only if it is electron or pion
-      if(!((fPID[AliPID::kElectron] == 1.0) || (fPID[AliPID::kPion] == 1.0))) continue;
-
-      // get the probabilities for each particle type in each chamber
-      for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
-  for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-    like[iPart][iChamb] = fNet[iChamb] -> Result(fTest[mombin][iChamb] -> GetEntry(iEvent), iPart);
-    likeAll[iPart] *=  like[iPart][iChamb];
-  }
-      }
-
-      // get total probability and normalize it
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  totProb += likeAll[iPart];
-      }
-      for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
-  likeAll[iPart] /= totProb;
-      }
-
-      // fill likelihood distributions
-      if(fPID[AliPID::kElectron] == 1)      
-  hElecs -> Fill(likeAll[AliPID::kElectron]);
-      if(fPID[AliPID::kPion] == 1)      
-  hPions -> Fill(likeAll[AliPID::kElectron]);
-    } // end event loop
-
-    // calculate the pion efficiency and fill the graph
-    util -> CalculatePionEffi(hElecs, hPions);
-    pionEffiTest[iLoop] = util -> GetPionEfficiency();
-    pionEffiErrTest[iLoop] = util -> GetError();
-
-    gEffisTest -> SetPoint(iLoop, iLoop+1, pionEffiTest[iLoop]);
-    gEffisTest -> SetPointError(iLoop, 0, pionEffiErrTest[iLoop]);
-    hElecs -> Reset();
-    hPions -> Reset();
-    AliDebug(2, Form("TestLoop[%d] PionEfficiency[%f +/- %f] \n", iLoop, pionEffiTest[iLoop], pionEffiErrTest[iLoop]));
-    
-  } //   end training loop
-
-  util -> Delete();
-
-  gEffisTest -> Draw("PAL");
-  gEffisTrain -> Draw("PL");
-
-}
-
-
-//________________________________________________________________________
-void AliTRDpidRefMakerNN::LoadFile(const Char_t *InFileNN) 
-{
-  //
-  // Loads the files and sets the event list
-  // for neural network training and 
-  // building of the 2-dim reference histograms.
-  // Useable for training outside of the makeResults.C macro
-  //
-
-  TFile *fInFileNN;
-  fInFileNN = new TFile(InFileNN, "READ");
-  fData = (TTree*)fInFileNN -> Get("NN");
-
-  for(Int_t iMom = 0; iMom < AliTRDCalPID::kNMom; iMom++){
-    for(Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++){
-      fTrain[iMom][ily] = new TEventList(Form("fTrainMom%d_%d", iMom, ily), Form("Training list for momentum intervall %d and plane %d", iMom, ily));
-      fTest[iMom][ily] = new TEventList(Form("fTestMom%d_%d", iMom, ily), Form("Test list for momentum intervall %d and plane %d", iMom, ily));
-    }
-  }
-}
-
-
-// //________________________________________________________________________
-// void AliTRDpidRefMakerNN::LoadContainer(const Char_t *InFileCont) 
-// {
-
-//   //
-//   // Loads the container if no container is there.
-//   // Useable for training outside of the makeResults.C macro
-//   //
-
-//   TFile *fInFileCont;
-//   fInFileCont = new TFile(InFileCont, "READ");
-//   fContainer = (TObjArray*)fInFileCont -> Get("PidRefMaker");
-
-// }
-
-
-// //________________________________________________________________________
-// void AliTRDpidRefMakerNN::CreateGraphs()
-// {
-//   // Create histograms
-//   // Called once
-
-//   OpenFile(0, "RECREATE");
-//   fContainer = new TObjArray();
-//   fContainer->AddAt(new TH1F("hPDG","hPDG",AliPID::kSPECIES,-0.5,5.5),0);
-
-//   TGraphErrors *gEffisTrain = new TGraphErrors(kMoniTrain);
-//   gEffisTrain -> SetLineColor(4);
-//   gEffisTrain -> SetMarkerColor(4);
-//   gEffisTrain -> SetMarkerStyle(29);
-//   gEffisTrain -> SetMarkerSize(2);
-
-//   TGraphErrors *gEffisTest = new TGraphErrors(kMoniTrain);
-//   gEffisTest -> SetLineColor(2);
-//   gEffisTest -> SetMarkerColor(2);
-//   gEffisTest -> SetMarkerSize(2);
-
-//   fContainer -> AddAt(gEffisTrain,kGraphTrain);
-//   fContainer -> AddAt(gEffisTest,kGraphTest);
-// }
-
diff --git a/TRD/qaRec/AliTRDpidRefMakerNN.h b/TRD/qaRec/AliTRDpidRefMakerNN.h
deleted file mode 100644 (file)
index 78b5960..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#ifndef ALITRDPIDREFMAKERNN_H
-#define ALITRDPIDREFMAKERNN_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDpidRefMakerNN.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-//////////////////////////////////////////////////////
-//
-// Task to build PID reference tree for the training
-// of neural networs for the TRD PID
-//
-// Authors: Alex Wilk    <wilka@uni-muenster.de>
-//          Markus Heide <mheide@uni-muenster.de>
-//
-///////////////////////////////////////////////////////
-
-/* #ifndef ALITRDRECOTASK_H */
-/* #include "AliTRDrecoTask.h" */
-/* #endif */
-
-/* #ifndef ALIPID_H */
-/* #include "AliPID.h" */
-/* #endif */
-
-/* #ifndef ALITRDCALPID_H */
-/* #include "../Cal/AliTRDCalPID.h" */
-/* #endif */
-
-/* #ifndef ALITRDGEOMETRY_H */
-/* #include "../AliTRDgeometry.h" */
-/* #endif */
-
-#ifndef ALITRDPIDREFMAKER_H
-#include "AliTRDpidRefMaker.h"
-#endif
-
-/* class TTree; */
-/* class TObjArray; */
-/* class TEventList; */
-/* class TMultiLayerPerceptron; */
-/* class AliPID; */
-/* class AliTRDtrackV1; */
-/* class AliTRDReconstructor; */
-
-/* class AliTRDpidRefMakerNN : public AliTRDrecoTask */
-
-class TEventList;
-class TMultiLayerPerceptron;
-class AliTRDpidRefMakerNN : public AliTRDpidRefMaker
-{
-
-public:
-  enum ETRDpidRefMakerNNgraph {
-    kGraphTrain = 0
-    ,kGraphTest = 1
-  };
-
-  enum ETRDpidRefMakerNNmoni {
-    kMoniTrain = 50
-  };
-
-  AliTRDpidRefMakerNN();
-
-  virtual ~AliTRDpidRefMakerNN();
-  
-  void    CreateOutputObjects();
-  Int_t   GetEpochs() const {return fEpochs;};
-  Int_t   GetMinTrain() const {return fMinTrain;};
-  Int_t   GetTrainMomBin() const {return fTrainMomBin;};
-
-  Bool_t  PostProcess();
-
-  void    SetEpochs(Int_t epochs) {fEpochs = epochs;};
-  void    SetMinTrain(Int_t mintrain) {fMinTrain = mintrain;};
-  void    SetTrainMomBin(Int_t trainmombin) {fTrainMomBin = trainmombin;};
-  void    SetDate(Int_t date) {fDate = date;};
-  void    SetDoTraining(Bool_t train) {fDoTraining = train;};
-  void    SetContinueTraining(Bool_t continTrain) {fContinueTraining = continTrain;};
-  void    SetTrainPath(Int_t path) {fTrainPath = path;};
-  void    LoadFile(const Char_t *InFileNN);
-  void    SetScaledEdx(Float_t s) {fScale = s;};
-
-  void    MakeTrainingLists();                                 // build the training and the test list
-  void    MonitorTraining(Int_t mombin);                       // monitor training process
-
-protected:
-  void MakeRefs(Int_t mombin);                         // train the neural networks for a given momentum bin
-
-private:
-  AliTRDpidRefMakerNN(const AliTRDpidRefMakerNN&);              // not implemented
-  AliTRDpidRefMakerNN& operator=(const AliTRDpidRefMakerNN&);   // not implemented
-
-  TEventList *fTrain[AliTRDCalPID::kNMom][AliTRDgeometry::kNlayer];          // Training list for each momentum 
-  TEventList *fTest[AliTRDCalPID::kNMom][AliTRDgeometry::kNlayer];           // Test list for each momentum 
-  TMultiLayerPerceptron *fNet[AliTRDgeometry::kNlayer]; // artificial neural network
-
-  Int_t         fTrainMomBin;              // momentum bin for the training
-  Int_t         fEpochs;                   // Number of epochs for the training of the NNs
-  Int_t         fMinTrain;                 // minimum of events needed for training
-  Int_t         fDate;                     // date stamp for training of the NNs
-  Bool_t        fDoTraining;               // checks if training will be done
-  Bool_t        fContinueTraining;         // checks if training from an older run should be continued
-  Int_t         fTrainPath;                // sets the path for continuing the training
-
-  Float_t fScale;
-
-  ClassDef(AliTRDpidRefMakerNN, 2); // TRD reference  maker for NN
-};
-
-#endif
diff --git a/TRD/qaRec/AliTRDrecoTask.cxx b/TRD/qaRec/AliTRDrecoTask.cxx
deleted file mode 100644 (file)
index 4937f5f..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-///////////////////////////////////////////////////////
-//
-// Basic class for Performance/Calibration TRD tasks
-// 
-// It performs generic tasks like :
-//   - data file manegment
-//   - reference container management
-//   - debug container management
-//   - interaction with AliAnalysisManager
-//   - Plot functor loop
-//
-// Author: Alexandru Bercuci <A.Bercuci@gsi.de>, 10/09/2008
-//
-/////////////////////////////////////////////////////////
-
-#include "TClass.h"
-#include "TMethod.h"
-#include "TMethodCall.h"
-#include "TMethodArg.h"
-#include "TFile.h"
-#include "TList.h"
-#include "TMap.h"
-#include "TH1.h"
-#include "TF1.h"
-#include "TObjArray.h"
-#include "TDirectory.h"
-#include "TTreeStream.h"
-
-#include "AliLog.h"
-#include "AliAnalysisTask.h"
-
-#include "AliTRDrecoTask.h"
-
-ClassImp(AliTRDrecoTask)
-
-TList* AliTRDrecoTask::fgTrendPoint(0x0);
-TTreeSRedirector* AliTRDrecoTask::fgDebugStream(0x0);
-//_______________________________________________________
-AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)
-  : AliAnalysisTask(name, title)
-  ,fNRefFigures(0)
-  ,fContainer(0x0)
-  ,fTracks(0x0)
-  ,fkTrack(0x0)
-  ,fkMC(0x0)
-  ,fkESD(0x0)
-  ,fDebugLevel(0)
-  ,fPlotFuncList(0x0)
-{
-  DefineInput(0, TObjArray::Class());
-  DefineOutput(0, TObjArray::Class());
-}
-
-//_______________________________________________________
-AliTRDrecoTask::~AliTRDrecoTask() 
-{
-
-  // Generic task destructor
-
-  AliDebug(1, Form(" Ending %s (%s)\n", GetName(), GetTitle()));
-  if(fgDebugStream){ 
-    delete fgDebugStream;
-    fgDebugStream = 0x0;
-  }
-
-  if(fPlotFuncList){
-    fPlotFuncList->Delete();
-    delete fPlotFuncList;
-    fPlotFuncList = 0x0;
-  }
-  
-  if(fContainer){
-    if(fContainer->IsOwner()) fContainer->Delete();
-    delete fContainer;
-    fContainer = 0x0;
-  }
-
-  if(fgTrendPoint){
-    TFile::Open("TRD.PerformanceTrend.root", "UPDATE");
-    fgTrendPoint->Write();
-    delete fgTrendPoint;
-    fgTrendPoint=0x0;
-    gFile->Close();
-  }
-}
-
-//_______________________________________________________
-void AliTRDrecoTask::ConnectInputData(Option_t *)
-{
-  //
-  // Connect input data
-  //
-
-  fTracks = dynamic_cast<TObjArray *>(GetInputData(0));
-}
-
-//_______________________________________________________
-void AliTRDrecoTask::Exec(Option_t *)
-{
-// Loop over Plot functors published by particular tasks
-
-  if(!fPlotFuncList){
-    AliWarning("No functor list defined for the reference plots");
-    return;
-  }
-  if(!fTracks) return;
-  if(!fTracks->GetEntriesFast()) return;
-  
-  AliTRDtrackInfo *trackInfo = 0x0;
-  TIter plotIter(fPlotFuncList);
-  TObjArrayIter trackIter(fTracks);
-  while((trackInfo = dynamic_cast<AliTRDtrackInfo*>(trackIter()))){
-    fkTrack = trackInfo->GetTrack();
-    fkMC    = trackInfo->GetMCinfo();
-    fkESD   = trackInfo->GetESDinfo();
-
-    TMethodCall *plot = 0x0;
-    plotIter.Reset();
-    while((plot=dynamic_cast<TMethodCall*>(plotIter()))){
-      plot->Execute(this);
-    }
-  }
-  PostData(0, fContainer);
-}
-
-//_______________________________________________________
-Bool_t AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/)
-{
-  AliWarning("Retrieving reference figures not implemented.");
-  return kFALSE;
-}
-
-//_______________________________________________________
-Bool_t AliTRDrecoTask::PutTrendValue(const Char_t *name, Double_t val)
-{
-// Generic publisher for trend values
-
-  if(!fgTrendPoint){
-    fgTrendPoint = new TList();
-    fgTrendPoint->SetOwner();
-  }
-  fgTrendPoint->AddLast(new TNamed(Form("%s_%s", GetName(), name), Form("%f", val)));
-  return kTRUE;
-}
-
-//_______________________________________________________
-void AliTRDrecoTask::InitFunctorList()
-{
-// Initialize list of functors
-
-  TClass *c = this->IsA();
-
-  TMethod *m = 0x0;
-  TIter methIter(c->GetListOfMethods());
-  while((m=dynamic_cast<TMethod*>(methIter()))){
-    TString name(m->GetName());
-    if(!name.BeginsWith("Plot")) continue;
-    if(!fPlotFuncList) fPlotFuncList = new TList();
-    fPlotFuncList->AddLast(new TMethodCall(c, (const char*)name, ""));
-  }
-}
-
-//_______________________________________________________
-Bool_t AliTRDrecoTask::Load(const Char_t *filename)
-{
-// Generic container loader
-
-  if(!TFile::Open(filename)){
-    AliWarning(Form("Couldn't open file %s.", filename));
-    return kFALSE;
-  }
-  TObjArray *o = 0x0;
-  if(!(o = (TObjArray*)gFile->Get(GetName()))){
-    AliWarning("Missing histogram container.");
-    return kFALSE;
-  }
-  fContainer = (TObjArray*)o->Clone(GetName());
-  gFile->Close();
-  return kTRUE;
-}
-
-//________________________________________________________
-Bool_t AliTRDrecoTask::Save(TObjArray * const results){
-  //
-  // Store the output graphs in a ROOT file
-  // Input TObject array will not be written as Key to the file,
-  // only content itself
-  //
-
-  TDirectory *cwd = gDirectory;
-  if(!TFile::Open(Form("TRD.Result%s.root", GetName()), "RECREATE")) return kFALSE;
-
-  TIterator *iter = results->MakeIterator();
-  TObject *inObject = 0x0, *outObject = 0x0;
-  while((inObject = iter->Next())){
-    outObject = inObject->Clone();
-    outObject->Write(0x0, TObject::kSingleKey);
-  }
-  delete iter;
-  gFile->Close(); delete gFile;
-  cwd->cd(); 
-  return kTRUE;
-}
-
-//_______________________________________________________
-Bool_t AliTRDrecoTask::PostProcess()
-{
-// To be implemented by particular tasks
-
-  AliWarning("Post processing of reference histograms not implemented.");
-  return kFALSE;
-}
-
-//_______________________________________________________
-void AliTRDrecoTask::SetDebugLevel(Int_t level)
-{
-// Generic debug handler
-
-  fDebugLevel = level;
-  if(fDebugLevel>=1){
-    TDirectory *savedir = gDirectory;
-    fgDebugStream = new TTreeSRedirector("TRD.DebugPerformance.root");
-    savedir->cd();
-  }
-}
-
-//____________________________________________________________________
-void AliTRDrecoTask::Terminate(Option_t *)
-{
-  //
-  // Terminate
-  //
-
-  if(fgDebugStream){ 
-    delete fgDebugStream;
-    fgDebugStream = 0x0;
-    fDebugLevel = 0;
-  }
-  if(HasPostProcess()) PostProcess();
-}
-
-//________________________________________________________
-void AliTRDrecoTask::Adjust(TF1 *f, TH1 * const h)
-{
-// Helper function to avoid duplication of code
-// Make first guesses on the fit parameters
-
-  // find the intial parameters of the fit !! (thanks George)
-  Int_t nbinsy = Int_t(.5*h->GetNbinsX());
-  Double_t sum = 0.;
-  for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;
-  f->SetParLimits(0, 0., 3.*sum);
-  f->SetParameter(0, .9*sum);
-
-  f->SetParLimits(1, -.2, .2);
-  f->SetParameter(1, -0.1);
-
-  f->SetParLimits(2, 0., 4.e-1);
-  f->SetParameter(2, 2.e-2);
-  if(f->GetNpar() <= 4) return;
-
-  f->SetParLimits(3, 0., sum);
-  f->SetParameter(3, .1*sum);
-
-  f->SetParLimits(4, -.3, .3);
-  f->SetParameter(4, 0.);
-
-  f->SetParLimits(5, 0., 1.e2);
-  f->SetParameter(5, 2.e-1);
-}
diff --git a/TRD/qaRec/AliTRDrecoTask.h b/TRD/qaRec/AliTRDrecoTask.h
deleted file mode 100644 (file)
index 66d2805..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef ALITRDRECOTASK_H
-#define ALITRDRECOTASK_H
-
-///////////////////////////////////////////////////////
-//
-// Basic class for Performance/Calibration TRD tasks
-//
-// Author: Alexandru Bercuci, 10/09/2008
-//
-//////////////////////////////////////////////////
-
-#ifndef ALIANALYSISTASK_H
-#include "AliAnalysisTask.h"
-#endif
-
-#ifndef ALITRDTRACKINFO_H
-#include "info/AliTRDtrackInfo.h"
-#endif
-
-class TH1;
-class TF1;
-class TList;
-class TObjArray;
-class TTreeSRedirector;
-class AliTRDtrackV1;
-class AliTRDtrackInfo;
-class AliTRDrecoTask : public AliAnalysisTask 
-{
-public:
-  enum AliTRDrecoSteeringBits{
-    kMCdata       = BIT(20)
-    ,kFriends     = BIT(21)
-    ,kPostProcess = BIT(22)
-  };
-  AliTRDrecoTask(const char *name, const char *title);
-  virtual ~AliTRDrecoTask();
-  
-  
-  void           ConnectInputData(Option_t *);
-  virtual void   CreateOutputObjects() = 0;
-  virtual void   Exec(Option_t *);
-
-  Int_t          GetNRefFigures() const  { return fNRefFigures; } 
-  TList*         GetPlotFunctors() const { return fPlotFuncList;}
-  virtual Bool_t GetRefFigure(Int_t ifig);
-
-  Bool_t         HasFriends() const      { return TestBit(kFriends);};
-  Bool_t         HasMCdata() const       { return TestBit(kMCdata);};
-  Bool_t         HasPostProcess() const  { return TestBit(kPostProcess);};
-  virtual TObjArray* Histos()            { return fContainer;}
-
-  virtual Bool_t Load(const Char_t *filename = "TRD.Performance.root");
-  virtual Bool_t Save(TObjArray * const res);
-  virtual Bool_t PostProcess();
-  virtual Bool_t PutTrendValue(const Char_t *name, Double_t val);
-  virtual void   SetDebugLevel(Int_t level);
-  virtual void   SetFriends(Bool_t fr = kTRUE) {SetBit(kFriends, fr);}
-  virtual void   SetMCdata(Bool_t mc = kTRUE) {SetBit(kMCdata, mc);}
-  virtual void   SetPostProcess(Bool_t pp = kTRUE) {SetBit(kPostProcess, pp);}
-  virtual void   Terminate(Option_t *);
-
-protected:
-  Int_t          DebugLevel() const      { return fDebugLevel;}
-  static TTreeSRedirector* DebugStream() { return fgDebugStream;}
-  void           InitFunctorList();
-  void           Adjust(TF1 *f, TH1 * const h);
-
-  UChar_t   fNRefFigures;  //! no of reference figures reported by task
-  TObjArray *fContainer;   //! container to store results
-  TObjArray *fTracks;      //! Array of tracks
-  const AliTRDtrackV1    *fkTrack;         //! current track
-  const AliTRDtrackInfo::AliMCinfo  *fkMC; //! MC info
-  const AliTRDtrackInfo::AliESDinfo *fkESD;//! ESD info
-
-private:
-  AliTRDrecoTask(const AliTRDrecoTask&);
-  AliTRDrecoTask& operator=(const AliTRDrecoTask&);
-
-  UChar_t   fDebugLevel;   //! Debug level 
-  TList     *fPlotFuncList;//! plot functors list
-  static TList     *fgTrendPoint;          //! trend point
-  static TTreeSRedirector *fgDebugStream;  //! Debug stream 
-
-  ClassDef(AliTRDrecoTask, 1) // base TRD reconstruction task
-};
-
-#endif
-
diff --git a/TRD/qaRec/AliTRDresolution.cxx b/TRD/qaRec/AliTRDresolution.cxx
deleted file mode 100644 (file)
index 3f346e3..0000000
+++ /dev/null
@@ -1,2048 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* Permission to use, copy, modify and distribute this software and its   *
-* documentation strictly for non-commercialf 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDresolution.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  TRD tracking resolution                                               //
-//
-// The class performs resolution and residual studies 
-// of the TRD tracks for the following quantities :
-//   - spatial position (y, [z])
-//   - angular (phi) tracklet
-//   - momentum at the track level
-// 
-// The class has to be used for regular detector performance checks using the official macros:
-//   - $ALICE_ROOT/TRD/qaRec/run.C
-//   - $ALICE_ROOT/TRD/qaRec/makeResults.C
-// 
-// For stand alone usage please refer to the following example: 
-// {  
-//   gSystem->Load("libANALYSIS.so");
-//   gSystem->Load("libTRDqaRec.so");
-//   AliTRDresolution *res = new AliTRDresolution();
-//   //res->SetMCdata();
-//   //res->SetVerbose();
-//   //res->SetVisual();
-//   res->Load();
-//   if(!res->PostProcess()) return;
-//   res->GetRefFigure(0);
-// }  
-//
-//  Authors:                                                              //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include <TROOT.h>
-#include <TObjArray.h>
-#include <TH3.h>
-#include <TH2.h>
-#include <TH1.h>
-#include <TF1.h>
-#include <TCanvas.h>
-#include <TGaxis.h>
-#include <TBox.h>
-#include <TGraphErrors.h>
-#include <TGraphAsymmErrors.h>
-#include <TMath.h>
-#include <TMatrixT.h>
-#include <TVectorT.h>
-#include <TTreeStream.h>
-#include <TGeoManager.h>
-
-#include "AliPID.h"
-
-#include "AliTRDresolution.h"
-#include "AliTRDgeometry.h"
-#include "AliTRDpadPlane.h"
-#include "AliTRDcluster.h"
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDReconstructor.h"
-#include "AliTRDrecoParam.h"
-
-#include "info/AliTRDclusterInfo.h"
-
-ClassImp(AliTRDresolution)
-
-UChar_t const AliTRDresolution::fgNElements[kNhistos] = {
-  2, 2, 5, 5,
-  2, 5, 12, 2, 11
-};
-Char_t const * AliTRDresolution::fgPerformanceName[kNhistos] = {
-     "Charge"
-    ,"Cluster2Track"
-    ,"Tracklet2Track"
-    ,"Tracklet2TPC" 
-    ,"Cluster2MC"
-    ,"Tracklet2MC"
-    ,"TPC2MC"
-    ,"TOF/HMPID2MC"
-    ,"TRD2MC"
-};
-Char_t const *AliTRDresolution::fgAxTitle[46][4] = {
-  // Charge
-  {"Impv", "x [cm]", "I_{mpv}", "x/x_{0}"}
- ,{"dI/Impv", "x/x_{0}", "#delta I/I_{mpv}", "x[cm]"}
-  // Clusters to Kalman
- ,{"Pos", "tg(#phi)", "#mu_{y}^{cl} [#mum]", "#sigma_{y}^{cl} [#mum]"}
- ,{"Pulls", "tg(#phi)", "PULL: #mu_{y}^{cl}", "PULL: #sigma_{y}^{cl}"}
-  // TRD tracklet to Kalman fit
- ,{"PosY", "tg(#phi)", "#mu_{y}^{trklt} [#mum]", "#sigma_{y}^{trklt} [#mum]"}
- ,{"PullsY", "tg(#phi)", "PULL: #mu_{y}^{trklt}", "PULL: #sigma_{y}^{trklt}"}
- ,{"PosZ", "tg(#theta)", "#mu_{z}^{trklt} [#mum]", "#sigma_{z}^{trklt} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "PULL: #mu_{z}^{trklt}", "PULL: #sigma_{z}^{trklt}"}
- ,{"Phi", "tg(#phi)", "#mu_{#phi}^{trklt} [mrad]", "#sigma_{#phi}^{trklt} [mrad]"}
-  // TPC track 2 first TRD tracklet
- ,{"PosY", "tg(#phi)", "#mu_{y}^{TPC trklt} [#mum]", "#sigma_{y}^{TPC trklt} [#mum]"}
- ,{"PullsY", "tg(#phi)", "PULL: #mu_{y}^{TPC trklt}", "PULL: #sigma_{y}^{TPC trklt}"}
- ,{"PosZ", "tg(#theta)", "#mu_{z}^{TPC trklt} [#mum]", "#sigma_{z}^{TPC trklt} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "PULL: #mu_{z}^{TPC trklt}", "PULL: #sigma_{z}^{TPC trklt}"}
- ,{"Phi", "tg(#phi)", "#mu_{#phi}^{TPC trklt} [mrad]", "#sigma_{#phi}^{TPC trklt} [mrad]"}
-  // MC cluster
- ,{"Pos", "tg(#phi)", "MC: #mu_{y}^{cl} [#mum]", "MC: #sigma_{y}^{cl} [#mum]"}
- ,{"Pulls", "tg(#phi)", "MC PULL: #mu_{y}^{cl}", "MC PULL: #sigma_{y}^{cl}"}
-  // MC tracklet
- ,{"PosY", "tg(#phi)", "MC: #mu_{y}^{trklt} [#mum]", "MC: #sigma_{y}^{trklt} [#mum]"}
- ,{"PullsY", "tg(#phi)", "MC PULL: #mu_{y}^{trklt}", "MC PULL: #sigma_{y}^{trklt}"}
- ,{"PosZ", "tg(#theta)", "MC: #mu_{z}^{trklt} [#mum]", "MC: #sigma_{z}^{trklt} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "MC PULL: #mu_{z}^{trklt}", "MC PULL: #sigma_{z}^{trklt}"}
- ,{"Phi", "tg(#phi)", "MC: #mu_{#phi}^{trklt} [mrad]", "MC: #sigma_{#phi}^{trklt} [mrad]"}
-  // MC track TPC
- ,{"PosY", "tg(#phi)", "MC: #mu_{y}^{TPC} [#mum]", "MC: #sigma_{y}^{TPC} [#mum]"}
- ,{"PullsY", "tg(#phi)", "MC PULL: #mu_{y}^{TPC}", "MC PULL: #sigma_{y}^{TPC}"}
- ,{"PosZ", "tg(#theta)", "MC: #mu_{z}^{TPC} [#mum]", "MC: #sigma_{z}^{TPC} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "MC PULL: #mu_{z}^{TPC}", "MC PULL: #sigma_{z}^{TPC}"}
- ,{"Phi", "tg(#phi)", "MC: #mu_{#phi}^{TPC} [mrad]", "MC: #sigma_{#phi}^{TPC} [mrad]"}
- ,{"PullsSNP", "tg(#phi)", "MC PULL: #mu_{snp}^{TPC}", "MC PULL: #sigma_{snp}^{TPC}"}
- ,{"Theta", "tg(#theta)", "MC: #mu_{#theta}^{TPC} [mrad]", "MC: #sigma_{#theta}^{TPC} [mrad]"}
- ,{"PullsTGL", "tg(#theta)", "MC PULL: #mu_{tgl}^{TPC}", "MC PULL: #sigma_{tgl}^{TPC}"}
- ,{"Pt", "p_{t}^{MC} [GeV/c]", "MC: #mu^{TPC}(#Deltap_{t}/p_{t}^{MC}) [%]", "MC: #sigma^{TPC}(#Deltap_{t}/p_{t}^{MC}) [%]"}
- ,{"Pulls1Pt", "1/p_{t}^{MC} [c/GeV]", "MC PULL: #mu_{1/p_{t}}^{TPC}", "MC PULL: #sigma_{1/p_{t}}^{TPC}"}
- ,{"P", "p^{MC} [GeV/c]", "MC: #mu^{TPC}(#Deltap/p^{MC}) [%]", "MC: #sigma^{TPC}(#Deltap/p^{MC}) [%]"}
- ,{"PullsP", "p^{MC} [GeV/c]", "MC PULL: #mu^{TPC}(#Deltap/#sigma_{p})", "MC PULL: #sigma^{TPC}(#Deltap/#sigma_{p})"}
-  // MC track TOF
- ,{"PosZ", "tg(#theta)", "MC: #mu_{z}^{TOF} [#mum]", "MC: #sigma_{z}^{TOF} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "MC PULL: #mu_{z}^{TOF}", "MC PULL: #sigma_{z}^{TOF}"}
-  // MC track in TRD
- ,{"PosY", "tg(#phi)", "MC: #mu_{y}^{Trk} [#mum]", "MC: #sigma_{y}^{Trk} [#mum]"}
- ,{"PullsY", "tg(#phi)", "MC PULL: #mu_{y}^{Trk}", "MC PULL: #sigma_{y}^{Trk}"}
- ,{"PosZ", "tg(#theta)", "MC: #mu_{z}^{Trk} [#mum]", "MC: #sigma_{z}^{Trk} [#mum]"}
- ,{"PullsZ", "tg(#theta)", "MC PULL: #mu_{z}^{Trk}", "MC PULL: #sigma_{z}^{Trk}"}
- ,{"Phi", "tg(#phi)", "MC: #mu_{#phi}^{Trk} [mrad]", "MC: #sigma_{#phi}^{Trk} [mrad]"}
- ,{"PullsSNP", "tg(#phi)", "MC PULL: #mu_{snp}^{Trk}", "MC PULL: #sigma_{snp}^{Trk}"}
- ,{"Theta", "tg(#theta)", "MC: #mu_{#theta}^{Trk} [mrad]", "MC: #sigma_{#theta}^{Trk} [mrad]"}
- ,{"PullsTGL", "tg(#theta)", "MC PULL: #mu_{tgl}^{Trk}", "MC PULL: #sigma_{tgl}^{Trk}"}
- ,{"Pt", "p_{t}^{MC} [GeV/c]", "MC: #mu^{Trk}(#Deltap_{t}/p_{t}^{MC}) [%]", "MC: #sigma^{Trk}(#Deltap_{t}/p_{t}^{MC}) [%]"}
- ,{"Pulls1Pt", "1/p_{t}^{MC} [c/GeV]", "MC PULL: #mu_{1/p_{t}}^{Trk}", "MC PULL: #sigma_{1/p_{t}}^{Trk}"}
- ,{"P", "p^{MC} [GeV/c]", "MC: #mu^{Trk}(#Deltap/p^{MC}) [%]", "MC: #sigma^{Trk}(#Deltap/p^{MC}) [%]"}
-};
-
-//________________________________________________________
-AliTRDresolution::AliTRDresolution()
-  :AliTRDrecoTask("resolution", "Spatial and momentum TRD resolution checker")
-  ,fStatus(0)
-  ,fIdxPlot(0)
-  ,fReconstructor(0x0)
-  ,fGeo(0x0)
-  ,fGraphS(0x0)
-  ,fGraphM(0x0)
-  ,fCl(0x0)
-  ,fTrklt(0x0)
-  ,fMCcl(0x0)
-  ,fMCtrklt(0x0)
-{
-  //
-  // Default constructor
-  //
-
-  fReconstructor = new AliTRDReconstructor();
-  fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
-  fGeo = new AliTRDgeometry();
-
-  InitFunctorList();
-
-  DefineOutput(1, TObjArray::Class()); // cluster2track
-  DefineOutput(2, TObjArray::Class()); // tracklet2track
-  DefineOutput(3, TObjArray::Class()); // cluster2mc
-  DefineOutput(4, TObjArray::Class()); // tracklet2mc
-}
-
-//________________________________________________________
-AliTRDresolution::~AliTRDresolution()
-{
-  //
-  // Destructor
-  //
-
-  if(fGraphS){fGraphS->Delete(); delete fGraphS;}
-  if(fGraphM){fGraphM->Delete(); delete fGraphM;}
-  delete fGeo;
-  delete fReconstructor;
-  if(gGeoManager) delete gGeoManager;
-  if(fCl){fCl->Delete(); delete fCl;}
-  if(fTrklt){fTrklt->Delete(); delete fTrklt;}
-  if(fMCcl){fMCcl->Delete(); delete fMCcl;}
-  if(fMCtrklt){fMCtrklt->Delete(); delete fMCtrklt;}
-}
-
-
-//________________________________________________________
-void AliTRDresolution::CreateOutputObjects()
-{
-  // spatial resolution
-  OpenFile(0, "RECREATE");
-
-  fContainer = Histos();
-
-  fCl = new TObjArray();
-  fCl->SetOwner(kTRUE);
-  fTrklt = new TObjArray();
-  fTrklt->SetOwner(kTRUE);
-  fMCcl = new TObjArray();
-  fMCcl->SetOwner(kTRUE);
-  fMCtrklt = new TObjArray();
-  fMCtrklt->SetOwner(kTRUE);
-}
-
-//________________________________________________________
-void AliTRDresolution::Exec(Option_t *opt)
-{
-  //
-  // Execution part
-  //
-
-  fCl->Delete();
-  fTrklt->Delete();
-  fMCcl->Delete();
-  fMCtrklt->Delete();
-
-  AliTRDrecoTask::Exec(opt);
-
-  PostData(1, fCl);
-  PostData(2, fTrklt);
-  PostData(3, fMCcl);
-  PostData(4, fMCtrklt);
-}
-
-//________________________________________________________
-TH1* AliTRDresolution::PlotCharge(const AliTRDtrackV1 *track)
-{
-  //
-  // Plots the charge distribution
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TObjArray *arr = 0x0;
-  if(!(arr = ((TObjArray*)fContainer->At(kCharge)))){
-    AliWarning("No output container defined.");
-    return 0x0;
-  }
-  TH3S* h = 0x0;
-
-  AliTRDseedV1 *fTracklet = 0x0;  
-  AliTRDcluster *c = 0x0;
-  for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
-    if(!(fTracklet = fkTrack->GetTracklet(ily))) continue;
-    if(!fTracklet->IsOK()) continue;
-    Float_t x0 = fTracklet->GetX0();
-    Float_t dq, dl;
-    for(Int_t itb=AliTRDseedV1::kNtb; itb--;){
-      if(!(c = fTracklet->GetClusters(itb))){ 
-        if(!(c = fTracklet->GetClusters(AliTRDseedV1::kNtb+itb))) continue;
-      }
-      dq = fTracklet->GetdQdl(itb, &dl);
-      dl /= 0.15; // dl/dl0, dl0 = 1.5 mm for nominal vd
-      (h = (TH3S*)arr->At(0))->Fill(dl, x0-c->GetX(), dq);
-    }
-
-//     if(!HasMCdata()) continue;
-//     UChar_t s;
-//     Float_t pt0, y0, z0, dydx0, dzdx0;
-//     if(!fMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, s)) continue;
-
-  }
-  return h;
-}
-
-
-//________________________________________________________
-TH1* AliTRDresolution::PlotCluster(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot the cluster distributions
-  //
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TObjArray *arr = 0x0;
-  if(!(arr = ((TObjArray*)fContainer->At(kCluster)))){
-    AliWarning("No output container defined.");
-    return 0x0;
-  }
-
-  Double_t cov[7];
-  Float_t x0, y0, z0, dy, dydx, dzdx;
-  AliTRDseedV1 *fTracklet = 0x0;  
-  for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
-    if(!(fTracklet = fkTrack->GetTracklet(ily))) continue;
-    if(!fTracklet->IsOK()) continue;
-    x0 = fTracklet->GetX0();
-
-    // retrive the track angle with the chamber
-    y0   = fTracklet->GetYref(0);
-    z0   = fTracklet->GetZref(0);
-    dydx = fTracklet->GetYref(1);
-    dzdx = fTracklet->GetZref(1);
-    fTracklet->GetCovRef(cov);
-    Float_t tilt = fTracklet->GetTilt();
-    AliTRDcluster *c = 0x0;
-    fTracklet->ResetClusterIter(kFALSE);
-    while((c = fTracklet->PrevCluster())){
-      Float_t xc = c->GetX();
-      Float_t yc = c->GetY();
-      Float_t zc = c->GetZ();
-      Float_t dx = x0 - xc; 
-      Float_t yt = y0 - dx*dydx;
-      Float_t zt = z0 - dx*dzdx; 
-      yc -= tilt*(zc-zt); // tilt correction
-      dy = yt - yc;
-
-      //Float_t sx2 = dydx*c->GetSX(c->GetLocalTimeBin()); sx2*=sx2;
-      Float_t sy2 = c->GetSigmaY2();
-      if(sy2<=0.) continue;
-      ((TH2I*)arr->At(0))->Fill(dydx, dy);
-      ((TH2I*)arr->At(1))->Fill(dydx, dy/TMath::Sqrt(cov[0] /*+ sx2*/ + sy2));
-  
-/*      if(DebugLevel()>=3){
-        // Get z-position with respect to anode wire
-        //AliTRDSimParam    *simParam    = AliTRDSimParam::Instance();
-        Int_t istk = fGeo->GetStack(c->GetDetector());
-        AliTRDpadPlane *pp = fGeo->GetPadPlane(ily, istk);
-        Float_t row0 = pp->GetRow0();
-        Float_t d  =  row0 - zt + pp->GetAnodeWireOffset();
-        d -= ((Int_t)(2 * d)) / 2.0;
-        if (d > 0.25) d  = 0.5 - d;
-
-        AliTRDclusterInfo *clInfo = new AliTRDclusterInfo;
-        fCl->Add(clInfo);
-        clInfo->SetCluster(c);
-        clInfo->SetGlobalPosition(yt, zt, dydx, dzdx);
-        clInfo->SetResolution(dy);
-        clInfo->SetAnisochronity(d);
-        clInfo->SetDriftLength(dx);
-        (*DebugStream()) << "ClusterResiduals"
-          <<"clInfo.=" << clInfo
-          << "\n";
-      }*/
-    }
-  }
-  return (TH2I*)arr->At(0);
-}
-
-
-//________________________________________________________
-TH1* AliTRDresolution::PlotTracklet(const AliTRDtrackV1 *track)
-{
-// Plot normalized residuals for tracklets to track. 
-// 
-// We start from the result that if X=N(|m|, |Cov|)
-// BEGIN_LATEX
-// (Cov^{-1})^{1/2}X = N((Cov^{-1})^{1/2}*|m|, |1|)
-// END_LATEX
-// in our case X=(y_trklt - y_trk z_trklt - z_trk) and |Cov| = |Cov_trklt| + |Cov_trk| at the radial 
-// reference position. 
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TObjArray *arr = 0x0;
-  if(!(arr = (TObjArray*)fContainer->At(kTrackTRD ))){
-    AliWarning("No output container defined.");
-    return 0x0;
-  }
-
-  Double_t cov[3], covR[7]/*, sqr[3], inv[3]*/;
-  Float_t x, dx, dy, dz;
-  AliTRDseedV1 *fTracklet = 0x0;  
-  for(Int_t il=AliTRDgeometry::kNlayer; il--;){
-    if(!(fTracklet = fkTrack->GetTracklet(il))) continue;
-    if(!fTracklet->IsOK()) continue;
-    x    = fTracklet->GetX();
-    dx   = fTracklet->GetX0() - x;
-    // compute dy^2 and dz^2
-    dy   = fTracklet->GetYref(0)-dx*fTracklet->GetYref(1) - fTracklet->GetY();
-    dz   = fTracklet->GetZref(0)-dx*fTracklet->GetZref(1) - fTracklet->GetZ();
-    // compute covariance matrix
-    fTracklet->GetCovAt(x, cov);
-    fTracklet->GetCovRef(covR);
-    cov[0] += covR[0]; cov[1] += covR[1]; cov[2] += covR[2]; 
-/*  // Correct PULL calculation by considering off  
-    // diagonal elements in the covariance matrix
-    // compute square root matrix
-    if(AliTRDseedV1::GetCovInv(cov, inv)==0.) continue;
-    if(AliTRDseedV1::GetCovSqrt(inv, sqr)<0.) continue;
-    Double_t y = sqr[0]*dy+sqr[1]*dz;
-    Double_t z = sqr[1]*dy+sqr[2]*dz;
-    ((TH3*)h)->Fill(y, z, fTracklet->GetYref(1));*/
-
-    ((TH2I*)arr->At(0))->Fill(fTracklet->GetYref(1), dy);
-    ((TH2I*)arr->At(1))->Fill(fTracklet->GetYref(1), dy/TMath::Sqrt(cov[0]));
-    ((TH2I*)arr->At(4))->Fill(fTracklet->GetYref(1), TMath::ATan((fTracklet->GetYref(1)-fTracklet->GetYfit(1))/(1-fTracklet->GetYref(1)*fTracklet->GetYfit(1))));
-    if(!fTracklet->IsRowCross()) continue;
-    ((TH2I*)arr->At(2))->Fill(fTracklet->GetZref(1), dz);
-    ((TH2I*)arr->At(3))->Fill(fTracklet->GetZref(1), dz/TMath::Sqrt(cov[2]));
-  }
-
-
-  return (TH2I*)arr->At(0);
-}
-
-
-//________________________________________________________
-TH1* AliTRDresolution::PlotTrackTPC(const AliTRDtrackV1 *track)
-{
-// Store resolution/pulls of Kalman before updating with the TRD information 
-// at the radial position of the first tracklet. The following points are used 
-// for comparison  
-//  - the (y,z,snp) of the first TRD tracklet
-//  - the (y, z, snp, tgl, pt) of the MC track reference
-// 
-// Additionally the momentum resolution/pulls are calculated for usage in the 
-// PID calculation. 
-
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  AliExternalTrackParam *tin = 0x0;
-  if(!(tin = fkTrack->GetTrackLow())){
-    AliWarning("Track did not entered TRD fiducial volume.");
-    return 0x0;
-  }
-  TH1 *h = 0x0;
-  
-  Double_t x = tin->GetX();
-  AliTRDseedV1 *tracklet = 0x0;  
-  for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
-    if(!(tracklet = fkTrack->GetTracklet(ily))) continue;
-    break;
-  }
-  if(!tracklet || TMath::Abs(x-tracklet->GetX())>1.e-3){
-    AliWarning("Tracklet did not match TRD entrance.");
-    return 0x0;
-  }
-  const Int_t kNPAR(5);
-  Double_t parR[kNPAR]; memcpy(parR, tin->GetParameter(), kNPAR*sizeof(Double_t));
-  Double_t covR[3*kNPAR]; memcpy(covR, tin->GetCovariance(), 3*kNPAR*sizeof(Double_t));
-  Double_t cov[3]; tracklet->GetCovAt(x, cov);
-
-  // define sum covariances
-  TMatrixDSym COV(kNPAR); TVectorD PAR(kNPAR);
-  Double_t *pc = &covR[0], *pp = &parR[0];
-  for(Int_t ir=0; ir<kNPAR; ir++, pp++){
-    PAR(ir) = (*pp);
-    for(Int_t ic = 0; ic<=ir; ic++,pc++){ 
-      COV(ir,ic) = (*pc); COV(ic,ir) = (*pc);
-    }
-  }
-  PAR[4] = TMath::Abs(PAR[4]); // remove sign of pt !!
-  //COV.Print(); PAR.Print();
-
-  //TODO Double_t dydx =  TMath::Sqrt(1.-parR[2]*parR[2])/parR[2]; 
-  Double_t dy = parR[0] - tracklet->GetY(); 
-  TObjArray *arr = (TObjArray*)fContainer->At(kTrackTPC);
-  ((TH2I*)arr->At(0))->Fill(tracklet->GetYref(1), dy);
-  ((TH2I*)arr->At(1))->Fill(tracklet->GetYref(1), dy/TMath::Sqrt(COV(0,0)+cov[0]));
-  if(tracklet->IsRowCross()){
-    Double_t dz = parR[1] - tracklet->GetZ(); 
-    ((TH2I*)arr->At(2))->Fill(tracklet->GetZref(1), dz);
-    ((TH2I*)arr->At(3))->Fill(tracklet->GetZref(1), dz/TMath::Sqrt(COV(1,1)+cov[2]));
-  }
-  Double_t dphi = TMath::ASin(PAR[2])-TMath::ATan(tracklet->GetYfit(1));  ((TH2I*)arr->At(4))->Fill(tracklet->GetYref(1), dphi);
-
-
-  // register reference histo for mini-task
-  h = (TH2I*)arr->At(0);
-
-  if(DebugLevel()>=1){
-    (*DebugStream()) << "trackIn"
-      << "x="       << x
-      << "P="       << &PAR
-      << "C="       << &COV
-      << "\n";
-
-    Double_t y = tracklet->GetY(); 
-    Double_t z = tracklet->GetZ(); 
-    (*DebugStream()) << "trackletIn"
-      << "y="       << y
-      << "z="       << z
-      << "Vy="      << cov[0]
-      << "Cyz="     << cov[1]
-      << "Vz="      << cov[2]
-      << "\n";
-  }
-
-
-  if(!HasMCdata()) return h;
-  UChar_t s;
-  Float_t dx, pt0, x0=tracklet->GetX0(), y0, z0, dydx0, dzdx0;
-  if(!fkMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, s)) return h;
-  // translate to reference radial position
-  dx = x0 - x; y0 -= dx*dydx0; z0 -= dx*dzdx0;
-  Float_t norm = 1./TMath::Sqrt(1.+dydx0*dydx0); // 1/sqrt(1+tg^2(phi))
-  //Fill MC info
-  TVectorD PARMC(kNPAR);
-  PARMC[0]=y0; PARMC[1]=z0;
-  PARMC[2]=dydx0*norm; PARMC[3]=dzdx0*norm;
-  PARMC[4]=1./pt0;
-
-//   TMatrixDSymEigen eigen(COV);
-//   TVectorD evals = eigen.GetEigenValues();
-//   TMatrixDSym evalsm(kNPAR);
-//   for(Int_t ir=0; ir<kNPAR; ir++) for(Int_t ic=0; ic<kNPAR; ic++) evalsm(ir,ic) = (ir==ic ? evals(ir): 0.);
-//   TMatrixD evecs = eigen.GetEigenVectors();
-//   TMatrixD sqrcov(evecs, TMatrixD::kMult, TMatrixD(evalsm, TMatrixD::kMult, evecs.T()));
-  
-  // fill histos
-  arr = (TObjArray*)fContainer->At(kMCtrackTPC);
-  // y resolution/pulls
-  ((TH2I*)arr->At(0))->Fill(dydx0, PARMC[0]-PAR[0]);
-  ((TH2I*)arr->At(1))->Fill(dydx0, (PARMC[0]-PAR[0])/TMath::Sqrt(COV(0,0)));
-  // z resolution/pulls
-  ((TH2I*)arr->At(2))->Fill(dzdx0, PARMC[1]-PAR[1]);
-  ((TH2I*)arr->At(3))->Fill(dzdx0, (PARMC[1]-PAR[1])/TMath::Sqrt(COV(1,1)));
-  // phi resolution/snp pulls
-  ((TH2I*)arr->At(4))->Fill(dydx0, TMath::ASin(PARMC[2])-TMath::ASin(PAR[2]));
-  ((TH2I*)arr->At(5))->Fill(dydx0, (PARMC[2]-PAR[2])/TMath::Sqrt(COV(2,2)));
-  // theta resolution/tgl pulls
-  ((TH2I*)arr->At(6))->Fill(dzdx0, TMath::ATan((PARMC[3]-PAR[3])/(1-PARMC[3]*PAR[3])));
-  ((TH2I*)arr->At(7))->Fill(dzdx0, (PARMC[3]-PAR[3])/TMath::Sqrt(COV(3,3)));
-  // pt resolution\\1/pt pulls\\p resolution/pull
-  for(Int_t is=AliPID::kSPECIES; is--;){
-    if(TMath::Abs(fkMC->GetPDG())!=AliPID::ParticleCode(is)) continue;
-    ((TH3S*)arr->At(8))->Fill(pt0, PARMC[4]/PAR[4]-1., is);
-    ((TH3S*)arr->At(9))->Fill(PARMC[4], (PARMC[4]-PAR[4])/TMath::Sqrt(COV(4,4)), is);
-
-    Double_t p0 = TMath::Sqrt(1.+ PARMC[3]*PARMC[3])*pt0, p;
-    Float_t sp;
-    p = tracklet->GetMomentum(&sp);
-    ((TH3S*)arr->At(10))->Fill(p0, p/p0-1., is);
-    ((TH3S*)arr->At(11))->Fill(p0, (p0-p)/sp, is);
-    break;
-  }
-
-  // fill debug for MC 
-  if(DebugLevel()>=1){
-    (*DebugStream()) << "trackInMC"
-      << "P="   << &PARMC
-      << "\n";
-  }
-  return h;
-}
-
-//________________________________________________________
-TH1* AliTRDresolution::PlotMC(const AliTRDtrackV1 *track)
-{
-  //
-  // Plot MC distributions
-  //
-
-  if(!HasMCdata()){ 
-    AliWarning("No MC defined. Results will not be available.");
-    return 0x0;
-  }
-  if(track) fkTrack = track;
-  if(!fkTrack){
-    AliWarning("No Track defined.");
-    return 0x0;
-  }
-  TObjArray *arr = 0x0;
-  TH1 *h = 0x0;
-  UChar_t s;
-  Int_t pdg = fkMC->GetPDG(), det=-1;
-  Int_t label = fkMC->GetLabel();
-  Double_t xAnode, x, y, z, pt, dydx, dzdx, dzdl;
-  Float_t pt0, x0, y0, z0, dx, dy, dz, dydx0, dzdx0;
-  Double_t covR[7]/*, cov[3]*/;
-
-  if(DebugLevel()>=1){
-    Double_t dX[12], dY[12], dZ[12], dPt[12], cCOV[12][15];
-    fkMC->PropagateKalman(dX, dY, dZ, dPt, cCOV);
-    (*DebugStream()) << "MCkalman"
-      << "pdg="  << pdg
-      << "dx0="  << dX[0]
-      << "dx1="  << dX[1]
-      << "dx2="  << dX[2]
-      << "dy0="  << dY[0]
-      << "dy1="  << dY[1]
-      << "dy2="  << dY[2]
-      << "dz0="  << dZ[0]
-      << "dz1="  << dZ[1]
-      << "dz2="  << dZ[2]
-      << "dpt0=" << dPt[0]
-      << "dpt1=" << dPt[1]
-      << "dpt2=" << dPt[2]
-      << "\n";
-  }
-
-  AliTRDReconstructor rec;
-  AliTRDseedV1 *fTracklet = 0x0;  
-  for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
-    if(!(fTracklet = fkTrack->GetTracklet(ily)))/* ||
-       !fTracklet->IsOK())*/ continue;
-
-    det = fTracklet->GetDetector();
-    x0  = fTracklet->GetX0();
-    //radial shift with respect to the MC reference (radial position of the pad plane)
-    x= fTracklet->GetX();
-    if(!fkMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, s)) continue;
-    xAnode  = fTracklet->GetX0();
-
-    // MC track position at reference radial position
-    dx  = x0 - x;
-    if(DebugLevel()>=1){
-      (*DebugStream()) << "MC"
-        << "det="     << det
-        << "pdg="     << pdg
-        << "pt="      << pt0
-        << "x="       << x0
-        << "y="       << y0
-        << "z="       << z0
-        << "dydx="    << dydx0
-        << "dzdx="    << dzdx0
-        << "\n";
-    }
-    Float_t ymc = y0 - dx*dydx0;
-    Float_t zmc = z0 - dx*dzdx0;
-    //p = pt0*TMath::Sqrt(1.+dzdx0*dzdx0); // pt -> p
-
-    // Kalman position at reference radial position
-    dx = xAnode - x;
-    dydx = fTracklet->GetYref(1);
-    dzdx = fTracklet->GetZref(1);
-    dzdl = fTracklet->GetTgl();
-    y  = fTracklet->GetYref(0) - dx*dydx;
-    dy = y - ymc;
-    z  = fTracklet->GetZref(0) - dx*dzdx;
-    dz = z - zmc;
-    pt = TMath::Abs(fTracklet->GetPt());
-    fTracklet->GetCovRef(covR);
-
-    arr = (TObjArray*)fContainer->At(kMCtrackTRD);
-    // y resolution/pulls
-    ((TH2I*)arr->At(0))->Fill(dydx0, dy);
-    ((TH2I*)arr->At(1))->Fill(dydx0, dy/TMath::Sqrt(covR[0]));
-    // z resolution/pulls
-    ((TH2I*)arr->At(2))->Fill(dzdx0, dz);
-    ((TH2I*)arr->At(3))->Fill(dzdx0, dz/TMath::Sqrt(covR[2]));
-    // phi resolution/ snp pulls
-    Double_t dtgp = (dydx - dydx0)/(1.- dydx*dydx0);
-    ((TH2I*)arr->At(4))->Fill(dydx0, TMath::ATan(dtgp));
-    Double_t dsnp = dydx/TMath::Sqrt(1.+dydx*dydx) - dydx0/TMath::Sqrt(1.+dydx0*dydx0);
-    ((TH2I*)arr->At(5))->Fill(dydx0, dsnp/TMath::Sqrt(covR[3]));
-    // theta resolution/ tgl pulls
-    Double_t dzdl0 = dzdx0/TMath::Sqrt(1.+dydx0*dydx0),
-              dtgl = (dzdl - dzdl0)/(1.- dzdl*dzdl0);
-    ((TH2I*)arr->At(6))->Fill(dzdl0, 
-    TMath::ATan(dtgl));
-    ((TH2I*)arr->At(7))->Fill(dzdl0, (dzdl - dzdl0)/TMath::Sqrt(covR[4]));
-    // pt resolution  \\ 1/pt pulls \\ p resolution for PID
-    for(Int_t is=AliPID::kSPECIES; is--;){
-      if(TMath::Abs(pdg)!=AliPID::ParticleCode(is)) continue;
-      ((TH3S*)((TObjArray*)arr->At(8))->At(ily))->Fill(pt0, pt/pt0-1., is);
-      ((TH3S*)((TObjArray*)arr->At(9))->At(ily))->Fill(1./pt0, (1./pt-1./pt0)/TMath::Sqrt(covR[6]), is);
-      Double_t p0 = TMath::Sqrt(1.+ dzdl0*dzdl0)*pt0,
-               p  = TMath::Sqrt(1.+ dzdl*dzdl)*pt;
-     ((TH3S*)((TObjArray*)arr->At(10))->At(ily))->Fill(p0, p/p0-1., is);
-      break;
-    }
-
-    // Fill Debug stream for Kalman track
-    if(DebugLevel()>=1){
-      (*DebugStream()) << "MCtrack"
-        << "pt="      << pt
-        << "x="       << x
-        << "y="       << y
-        << "z="       << z
-        << "dydx="    << dydx
-        << "dzdx="    << dzdx
-        << "s2y="     << covR[0]
-        << "s2z="     << covR[2]
-        << "\n";
-    }
-
-    // recalculate tracklet based on the MC info
-    AliTRDseedV1 tt(*fTracklet);
-    tt.SetZref(0, z0 - (x0-xAnode)*dzdx0);
-    tt.SetZref(1, dzdx0); 
-    tt.SetReconstructor(&rec);
-    tt.Fit(kTRUE, kTRUE);
-    x= tt.GetX();y= tt.GetY();z= tt.GetZ();
-    dydx = tt.GetYfit(1);
-    dx = x0 - x;
-    ymc = y0 - dx*dydx0;
-    zmc = z0 - dx*dzdx0;
-    Bool_t rc = tt.IsRowCross(); 
-    
-    // add tracklet residuals for y and dydx
-    arr = (TObjArray*)fContainer->At(kMCtracklet);
-    if(!rc){
-      dy    = y-ymc;
-
-      Float_t dphi  = (dydx - dydx0);
-      dphi /= (1.- dydx*dydx0);
-
-      ((TH2I*)arr->At(0))->Fill(dydx0, dy);
-      if(tt.GetS2Y()>0.) ((TH2I*)arr->At(1))->Fill(dydx0, dy/TMath::Sqrt(tt.GetS2Y()));
-      ((TH2I*)arr->At(4))->Fill(dydx0, TMath::ATan(dphi));
-    } else {
-      // add tracklet residuals for z
-      dz = z-zmc;
-      ((TH2I*)arr->At(2))->Fill(dzdl0, dz);
-      if(tt.GetS2Z()>0.) ((TH2I*)arr->At(3))->Fill(dzdl0, dz/TMath::Sqrt(tt.GetS2Z()));
-    }
-  
-    // Fill Debug stream for tracklet
-    if(DebugLevel()>=1){
-      Float_t s2y = tt.GetS2Y();
-      Float_t s2z = tt.GetS2Z();
-      (*DebugStream()) << "MCtracklet"
-        << "rc="    << rc
-        << "x="     << x
-        << "y="     << y
-        << "z="     << z
-        << "dydx="  << dydx
-        << "s2y="   << s2y
-        << "s2z="   << s2z
-        << "\n";
-    }
-
-    Int_t istk = AliTRDgeometry::GetStack(det); 
-    AliTRDpadPlane *pp = fGeo->GetPadPlane(ily, istk);
-    Float_t zr0 = pp->GetRow0() + pp->GetAnodeWireOffset();
-    Float_t tilt = fTracklet->GetTilt();
-    //Double_t exb = AliTRDCommonParam::Instance()->GetOmegaTau(1.5);
-
-    arr = (TObjArray*)fContainer->At(kMCcluster);
-    AliTRDcluster *c = 0x0;
-    fTracklet->ResetClusterIter(kFALSE);
-    while((c = fTracklet->PrevCluster())){
-      Float_t  q = TMath::Abs(c->GetQ());
-      x = c->GetX(); y = c->GetY();z = c->GetZ();
-      dx = x0 - x; 
-      ymc= y0 - dx*dydx0;
-      zmc= z0 - dx*dzdx0;
-      dy = ymc - (y - tilt*(z-zmc));
-      // Fill Histograms
-      if(q>20. && q<250.){ 
-        ((TH2I*)arr->At(0))->Fill(dydx0, dy);
-        ((TH2I*)arr->At(1))->Fill(dydx0, dy/TMath::Sqrt(c->GetSigmaY2()));
-      }
-
-      // Fill calibration container
-      Float_t d = zr0 - zmc;
-      d -= ((Int_t)(2 * d)) / 2.0;
-      if (d > 0.25) d  = 0.5 - d;
-      AliTRDclusterInfo *clInfo = new AliTRDclusterInfo;
-      fMCcl->Add(clInfo);
-      clInfo->SetCluster(c);
-      clInfo->SetMC(pdg, label);
-      clInfo->SetGlobalPosition(ymc, zmc, dydx0, dzdx0);
-      clInfo->SetResolution(dy);
-      clInfo->SetAnisochronity(d);
-      clInfo->SetDriftLength(((c->GetPadTime()+0.5)*.1)*1.5);
-      //dx-.5*AliTRDgeometry::CamHght());
-      clInfo->SetTilt(tilt);
-
-      // Fill Debug Tree
-      if(DebugLevel()>=2){
-        //clInfo->Print();
-        (*DebugStream()) << "MCcluster"
-          <<"clInfo.=" << clInfo
-          << "\n";
-      }
-    }
-  }
-  return h;
-}
-
-
-//________________________________________________________
-Bool_t AliTRDresolution::GetRefFigure(Int_t ifig)
-{
-  //
-  // Get the reference figures
-  //
-
-  Float_t xy[4] = {0., 0., 0., 0.};
-  if(!gPad){
-    AliWarning("Please provide a canvas to draw results.");
-    return kFALSE;
-  }
-  TList *l = 0x0; TVirtualPad *pad=0x0;
-  switch(ifig){
-  case kCharge:
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    ((TVirtualPad*)l->At(0))->cd();
-    ((TGraphAsymmErrors*)((TObjArray*)fGraphM->At(kCharge))->At(0))->Draw("apl");
-    ((TVirtualPad*)l->At(1))->cd();
-    ((TGraphErrors*)((TObjArray*)fGraphS->At(kCharge))->At(0))->Draw("apl");
-    break;
-  case kCluster:
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = -.3; xy[1] = -200.; xy[2] = .3; xy[3] = 1000.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kCluster, 0)) break;
-    xy[0] = -.3; xy[1] = -0.5; xy[2] = .3; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kCluster, 1)) break;
-    return kTRUE;
-  case kTrackTRD :
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = -.3; xy[1] = -500.; xy[2] = .3; xy[3] = 1500.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kTrackTRD , 0)) break;
-    xy[0] = -.3; xy[1] = -0.5; xy[2] = .3; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kTrackTRD , 1)) break;
-    return kTRUE;
-  case 3: // kTrackTRD  z
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = -1.; xy[1] = -1000.; xy[2] = 1.; xy[3] = 4000.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kTrackTRD , 2)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kTrackTRD , 3)) break;
-    return kTRUE;
-  case 4: // kTrackTRD  phi
-    xy[0] = -.3; xy[1] = -5.; xy[2] = .3; xy[3] = 50.;
-    if(GetGraphPlot(&xy[0], kTrackTRD , 4)) return kTRUE;
-    break;
-  case 5: // kTrackTPC y
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = -.3; xy[1] = -500.; xy[2] = .3; xy[3] = 1500.;
-    pad = ((TVirtualPad*)l->At(0)); pad->cd();
-    pad->SetMargin(0.1, 0.1, 0.1, 0.01);
-    if(!GetGraphPlot(&xy[0], kTrackTPC, 0)) break;
-    xy[0] = -.3; xy[1] = -0.5; xy[2] = .3; xy[3] = 2.5;
-    pad=((TVirtualPad*)l->At(1)); pad->cd();
-    pad->SetMargin(0.1, 0.1, 0.1, 0.01);
-    if(!GetGraphPlot(&xy[0], kTrackTPC, 1)) break;
-    return kTRUE;
-  case 6: // kTrackTPC z
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = -1.; xy[1] = -1000.; xy[2] = 1.; xy[3] = 4000.;
-    pad = ((TVirtualPad*)l->At(0)); pad->cd();
-    pad->SetMargin(0.1, 0.1, 0.1, 0.01);
-    if(!GetGraphPlot(&xy[0], kTrackTPC, 2)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 2.5;
-    pad = ((TVirtualPad*)l->At(1)); pad->cd();
-    pad->SetMargin(0.1, 0.1, 0.1, 0.01);
-    if(!GetGraphPlot(&xy[0], kTrackTPC, 3)) break;
-    return kTRUE;
-  case 7: // kTrackTPC phi
-    xy[0] = -.3; xy[1] = -5.; xy[2] = .3; xy[3] = 50.;
-    if(GetGraphPlot(&xy[0], kTrackTPC, 4)) return kTRUE;
-    break;
-  case 8: // kMCcluster
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.3; xy[1]=-50.; xy[2]=.3; xy[3]=650.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCcluster, 0)) break;
-    xy[0] = -.3; xy[1] = -0.5; xy[2] = .3; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCcluster, 1)) break;
-    return kTRUE;
-  case 9: //kMCtracklet [y]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.2; xy[1]=-50.; xy[2]=.2; xy[3] =250.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtracklet, 0)) break;
-    xy[0] = -.2; xy[1] = -0.5; xy[2] = .2; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtracklet, 1)) break;
-    return kTRUE;
-  case 10: //kMCtracklet [z]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-1.; xy[1]=-100.; xy[2]=1.; xy[3] =2500.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtracklet, 2)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtracklet, 3)) break;
-    return kTRUE;
-  case 11: //kMCtracklet [phi]
-    xy[0]=-.3; xy[1]=-3.; xy[2]=.3; xy[3] =25.;
-    if(!GetGraphPlot(&xy[0], kMCtracklet, 4)) break;
-    return kTRUE;
-  case 12: //kMCtrackTRD [y]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.2; xy[1]=-50.; xy[2]=.2; xy[3] =200.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 0)) break;
-    xy[0] = -.2; xy[1] = -0.5; xy[2] = .2; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 1)) break;
-    return kTRUE;
-  case 13: //kMCtrackTRD [z]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-1.; xy[1]=-700.; xy[2]=1.; xy[3] =1500.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 2)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 3)) break;
-    return kTRUE;
-  case 14: //kMCtrackTRD [phi/snp]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.2; xy[1]=-0.2; xy[2]=.2; xy[3] =2.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 4)) break;
-    xy[0] = -.2; xy[1] = -0.5; xy[2] = .2; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 5)) break;
-    return kTRUE;
-  case 15: //kMCtrackTRD [theta/tgl]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-1.; xy[1]=-0.5; xy[2]=1.; xy[3] =5.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 6)) break;
-    xy[0] = -.2; xy[1] = -0.5; xy[2] = .2; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTRD, 7)) break;
-    return kTRUE;
-  case 16: //kMCtrackTRD [pt]
-    xy[0] = 0.; xy[1] = -5.; xy[2] = 12.; xy[3] = 7.;
-    gPad->Divide(2, 3, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-      pad = (TVirtualPad*)l->At(il); pad->cd();
-      pad->SetMargin(0.07, 0.07, 0.1, 0.);
-      if(!GetGraphTrack(&xy[0], 8, il)) break;
-    }
-    return kTRUE;
-  case 17: //kMCtrackTRD [1/pt] pulls
-    xy[0] = 0.; xy[1] = -1.5; xy[2] = 2.; xy[3] = 2.;
-    gPad->Divide(2, 3, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-      pad = (TVirtualPad*)l->At(il); pad->cd();
-      pad->SetMargin(0.07, 0.07, 0.1, 0.);
-      if(!GetGraphTrack(&xy[0], 9, il)) break;
-    }
-    return kTRUE;
-  case 18: //kMCtrackTRD [p]
-    xy[0] = 0.; xy[1] = -7.5; xy[2] = 12.; xy[3] = 10.5;
-    gPad->Divide(2, 3, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-      pad = (TVirtualPad*)l->At(il); pad->cd();
-      pad->SetMargin(0.07, 0.07, 0.1, 0.);
-      if(!GetGraphTrack(&xy[0], 10, il)) break;
-    }
-    return kTRUE;
-  case 19: // kMCtrackTPC [y]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.25; xy[1]=-50.; xy[2]=.25; xy[3] =800.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 0)) break;
-    xy[0] = -.25; xy[1] = -0.5; xy[2] = .25; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 1)) break;
-    return kTRUE;
-  case 20: // kMCtrackTPC [z]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-1.; xy[1]=-500.; xy[2]=1.; xy[3] =800.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 2)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 3)) break;
-    return kTRUE;
-  case 21: // kMCtrackTPC [phi|snp]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-.25; xy[1]=-0.5; xy[2]=.25; xy[3] =2.5;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 4)) break;
-    xy[0] = -.25; xy[1] = -0.5; xy[2] = .25; xy[3] = 1.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 5)) break;
-    return kTRUE;
-  case 22: // kMCtrackTPC [theta|tgl]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0]=-1.; xy[1]=-1.; xy[2]=1.; xy[3] =4.;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 6)) break;
-    xy[0] = -1.; xy[1] = -0.5; xy[2] = 1.; xy[3] = 1.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphPlot(&xy[0], kMCtrackTPC, 7)) break;
-    return kTRUE;
-  case 23: // kMCtrackTPC [pt]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = 0.; xy[1] = -.8; xy[2] = 12.; xy[3] = 2.3;
-    ((TVirtualPad*)l->At(0))->cd();
-    if(!GetGraphTrackTPC(xy, 8)) break;
-    xy[0]=0.; xy[1]=-0.5; xy[2]=2.; xy[3] =2.5;
-    ((TVirtualPad*)l->At(1))->cd();
-    if(!GetGraphTrackTPC(xy, 9)) break;
-    return kTRUE;
-  case 24: // kMCtrackTPC [p]
-    gPad->Divide(2, 1, 1.e-5, 1.e-5); l=gPad->GetListOfPrimitives(); 
-    xy[0] = 0.; xy[1] = -.8; xy[2] = 12.; xy[3] = 2.3;
-    pad = ((TVirtualPad*)l->At(0));pad->cd();
-    pad->SetMargin(0.12, 0.12, 0.1, 0.04);
-    if(!GetGraphTrackTPC(xy, 10)) break;
-    xy[0]=0.; xy[1]=-1.5; xy[2]=12.; xy[3] =2.5;
-    pad = ((TVirtualPad*)l->At(1)); pad->cd();
-    pad->SetMargin(0.12, 0.12, 0.1, 0.04);
-    if(!GetGraphTrackTPC(xy, 11)) break;
-    return kTRUE;
-  case 25:  // kMCtrackTOF [z]
-    return kTRUE;
-  }
-  AliWarning(Form("Reference plot [%d] missing result", ifig));
-  return kFALSE;
-}
-
-
-//________________________________________________________
-Bool_t AliTRDresolution::PostProcess()
-{
-  //fContainer = dynamic_cast<TObjArray*>(GetOutputData(0));
-  if (!fContainer) {
-    AliError("ERROR: list not available");
-    return kFALSE;
-  }
-  TGraph *gm= 0x0, *gs= 0x0;
-  if(!fGraphS && !fGraphM){ 
-    TObjArray *aM(0x0), *aS(0x0), *a(0x0);
-    Int_t n = fContainer->GetEntriesFast();
-    fGraphS = new TObjArray(n); fGraphS->SetOwner();
-    fGraphM = new TObjArray(n); fGraphM->SetOwner();
-    for(Int_t ig=0; ig<n; ig++){
-      fGraphM->AddAt(aM = new TObjArray(fgNElements[ig]), ig);
-      fGraphS->AddAt(aS = new TObjArray(fgNElements[ig]), ig);
-
-      for(Int_t ic=0; ic<fgNElements[ig]; ic++){
-        if(ig==kMCtrackTPC&&(ic>=8&&ic<=12)){ // TPC momentum plot
-          aS->AddAt(a = new TObjArray(AliPID::kSPECIES), ic); 
-          for(Int_t is=AliPID::kSPECIES; is--;){
-            a->AddAt(gs = new TGraphErrors(), is);
-            gs->SetMarkerStyle(23);
-            gs->SetMarkerColor(is ? kRed : kMagenta);
-            gs->SetLineStyle(is);
-            gs->SetLineColor(is ? kRed : kMagenta);
-            gs->SetLineWidth(is ? 1 : 3);
-            gs->SetNameTitle(Form("s_%d%02d%d", ig, ic, is), "");
-          }
-          aM->AddAt(a = new TObjArray(AliPID::kSPECIES), ic); 
-          for(Int_t is=AliPID::kSPECIES; is--;){
-            a->AddAt(gm = new TGraphErrors(), is);
-            gm->SetLineColor(is ? kBlack : kBlue);
-            gm->SetLineStyle(is);
-            gm->SetMarkerStyle(7);
-            gm->SetMarkerColor(is ? kBlack : kBlue);
-            gm->SetLineWidth(is ? 1 : 3);
-            gm->SetNameTitle(Form("m_%d%02d%d", ig, ic, is), "");
-          }
-          continue;
-        } else if(ig==kMCtrackTRD&&(ic==8||ic==9||ic==10)){ // TRD momentum plot
-          TObjArray *aaS, *aaM;
-          aS->AddAt(aaS = new TObjArray(AliTRDgeometry::kNlayer), ic); 
-          aM->AddAt(aaM = new TObjArray(AliTRDgeometry::kNlayer), ic);
-          for(Int_t il=AliTRDgeometry::kNlayer; il--;){
-            aaS->AddAt(a = new TObjArray(AliPID::kSPECIES), il); 
-            for(Int_t is=AliPID::kSPECIES; is--;){
-              a->AddAt(gs = new TGraphErrors(), is);
-              gs->SetMarkerStyle(23);
-              gs->SetMarkerColor(is ? kRed : kMagenta);
-              gs->SetLineStyle(is);
-              gs->SetLineColor(is ? kRed : kMagenta);
-              gs->SetLineWidth(is ? 1 : 3);
-              gs->SetNameTitle(Form("s_%d%02d%d%d", ig, ic, is, il), "");
-            }
-            aaM->AddAt(a = new TObjArray(AliPID::kSPECIES), il);
-            for(Int_t is=AliPID::kSPECIES; is--;){
-              a->AddAt(gm = new TGraphErrors(), is);
-              gm->SetMarkerStyle(7);
-              gm->SetMarkerColor(is ? kBlack : kBlue);
-              gm->SetLineStyle(is);
-              gm->SetLineColor(is ? kBlack : kBlue);
-              gm->SetLineWidth(is ? 1 : 3);
-              gm->SetNameTitle(Form("m_%d%02d%d%d", ig, ic, is, il), "");
-            }
-          } 
-          continue;
-        }
-
-        aS->AddAt(gs = new TGraphErrors(), ic);
-        gs->SetMarkerStyle(23);
-        gs->SetMarkerColor(kRed);
-        gs->SetLineColor(kRed);
-        gs->SetNameTitle(Form("s_%d%02d", ig, ic), "");
-
-        aM->AddAt(gm = ig ? (TGraph*)new TGraphErrors() : (TGraph*)new TGraphAsymmErrors(), ic);
-        gm->SetLineColor(kBlack);
-        gm->SetMarkerStyle(7);
-        gm->SetMarkerColor(kBlack);
-        gm->SetNameTitle(Form("m_%d%02d", ig, ic), "");
-      }
-    }
-  }
-
-/*  printf("\n\n\n"); fGraphS->ls();
-  printf("\n\n\n"); fGraphM->ls();*/
-  
-
-  // DEFINE MODELS
-  // simple gauss
-  TF1 fg("fGauss", "gaus", -.5, .5);  
-  // Landau for charge resolution
-  TF1 fl("fLandau", "landau", 0., 1000.);  
-
-  //PROCESS EXPERIMENTAL DISTRIBUTIONS
-  // Charge resolution
-  //Process3DL(kCharge, 0, &fl); 
-  // Clusters residuals
-  Process2D(kCluster, 0, &fg, 1.e4); 
-  Process2D(kCluster, 1, &fg); 
-  fNRefFigures = 1;
-  // Tracklet residual/pulls
-  Process2D(kTrackTRD , 0, &fg, 1.e4); 
-  Process2D(kTrackTRD , 1, &fg); 
-  Process2D(kTrackTRD , 2, &fg, 1.e4); 
-  Process2D(kTrackTRD , 3, &fg); 
-  Process2D(kTrackTRD , 4, &fg, 1.e3); 
-  fNRefFigures = 4;
-  // TPC track residual/pulls
-  Process2D(kTrackTPC, 0, &fg, 1.e4); 
-  Process2D(kTrackTPC, 1, &fg); 
-  Process2D(kTrackTPC, 2, &fg, 1.e4); 
-  Process2D(kTrackTPC, 3, &fg); 
-  Process2D(kTrackTPC, 4, &fg, 1.e3); 
-  fNRefFigures = 7;
-
-  if(!HasMCdata()) return kTRUE;
-
-
-  //PROCESS MC RESIDUAL DISTRIBUTIONS
-
-  // CLUSTER Y RESOLUTION/PULLS
-  Process2D(kMCcluster, 0, &fg, 1.e4);
-  Process2D(kMCcluster, 1, &fg);
-  fNRefFigures = 8;
-
-  // TRACKLET RESOLUTION/PULLS
-  Process2D(kMCtracklet, 0, &fg, 1.e4); // y
-  Process2D(kMCtracklet, 1, &fg);       // y pulls
-  Process2D(kMCtracklet, 2, &fg, 1.e4); // z
-  Process2D(kMCtracklet, 3, &fg);       // z pulls
-  Process2D(kMCtracklet, 4, &fg, 1.e3); // phi
-  fNRefFigures = 11;
-
-  // TRACK RESOLUTION/PULLS
-  Process2D(kMCtrackTRD, 0, &fg, 1.e4);   // y
-  Process2D(kMCtrackTRD, 1, &fg);         // y PULL
-  Process2D(kMCtrackTRD, 2, &fg, 1.e4);   // z
-  Process2D(kMCtrackTRD, 3, &fg);         // z PULL
-  Process2D(kMCtrackTRD, 4, &fg, 1.e3);   // phi
-  Process2D(kMCtrackTRD, 5, &fg);         // snp PULL
-  Process2D(kMCtrackTRD, 6, &fg, 1.e3);   // theta
-  Process2D(kMCtrackTRD, 7, &fg);         // tgl PULL
-  Process4D(kMCtrackTRD, 8, &fg, 1.e2);   // pt resolution
-  Process4D(kMCtrackTRD, 9, &fg);         // 1/pt pulls
-  Process4D(kMCtrackTRD, 10, &fg, 1.e2);  // p resolution
-  fNRefFigures = 18;
-
-  // TRACK TPC RESOLUTION/PULLS
-  Process2D(kMCtrackTPC, 0, &fg, 1.e4);// y resolution
-  Process2D(kMCtrackTPC, 1, &fg);      // y pulls
-  Process2D(kMCtrackTPC, 2, &fg, 1.e4);// z resolution
-  Process2D(kMCtrackTPC, 3, &fg);      // z pulls
-  Process2D(kMCtrackTPC, 4, &fg, 1.e3);// phi resolution
-  Process2D(kMCtrackTPC, 5, &fg);      // snp pulls
-  Process2D(kMCtrackTPC, 6, &fg, 1.e3);// theta resolution
-  Process2D(kMCtrackTPC, 7, &fg);      // tgl pulls
-  Process3D(kMCtrackTPC, 8, &fg, 1.e2);// pt resolution
-  Process3D(kMCtrackTPC, 9, &fg);      // 1/pt pulls
-  Process3D(kMCtrackTPC, 10, &fg, 1.e2);// p resolution
-  Process3D(kMCtrackTPC, 11, &fg);      // p pulls
-  fNRefFigures = 24;
-
-  // TRACK HMPID RESOLUTION/PULLS
-  Process2D(kMCtrackTOF, 0, &fg, 1.e4); // z towards TOF
-  Process2D(kMCtrackTOF, 1, &fg);       // z towards TOF
-  fNRefFigures = 25;
-
-  return kTRUE;
-}
-
-
-//________________________________________________________
-void AliTRDresolution::Terminate(Option_t *opt)
-{
-  AliTRDrecoTask::Terminate(opt);
-  if(HasPostProcess()) PostProcess();
-}
-
-//________________________________________________________
-void AliTRDresolution::AdjustF1(TH1 *h, TF1 *f)
-{
-// Helper function to avoid duplication of code
-// Make first guesses on the fit parameters
-
-  // find the intial parameters of the fit !! (thanks George)
-  Int_t nbinsy = Int_t(.5*h->GetNbinsX());
-  Double_t sum = 0.;
-  for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;
-  f->SetParLimits(0, 0., 3.*sum);
-  f->SetParameter(0, .9*sum);
-  Double_t rms = h->GetRMS();
-  f->SetParLimits(1, -rms, rms);
-  f->SetParameter(1, h->GetMean());
-
-  f->SetParLimits(2, 0., 2.*rms);
-  f->SetParameter(2, rms);
-  if(f->GetNpar() <= 4) return;
-
-  f->SetParLimits(3, 0., sum);
-  f->SetParameter(3, .1*sum);
-
-  f->SetParLimits(4, -.3, .3);
-  f->SetParameter(4, 0.);
-
-  f->SetParLimits(5, 0., 1.e2);
-  f->SetParameter(5, 2.e-1);
-}
-
-//________________________________________________________
-TObjArray* AliTRDresolution::Histos()
-{
-  //
-  // Define histograms
-  //
-
-  if(fContainer) return fContainer;
-
-  fContainer  = new TObjArray(kNhistos);
-  //fContainer->SetOwner(kTRUE);
-  TH1 *h = 0x0;
-  TObjArray *arr = 0x0;
-
-  // cluster to track residuals/pulls
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kCharge]), kCharge);
-  arr->SetName("Charge");
-  if(!(h = (TH3S*)gROOT->FindObject("hCharge"))){
-    h = new TH3S("hCharge", "Charge Resolution", 20, 1., 2., 24, 0., 3.6, 100, 0., 500.);
-    h->GetXaxis()->SetTitle("dx/dx_{0}");
-    h->GetYaxis()->SetTitle("x_{d} [cm]");
-    h->GetZaxis()->SetTitle("dq/dx [ADC/cm]");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-
-  // cluster to track residuals/pulls
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kCluster]), kCluster);
-  arr->SetName("Cl");
-  if(!(h = (TH2I*)gROOT->FindObject("hCl"))){
-    h = new TH2I("hCl", "Cluster Residuals", 21, -.33, .33, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  if(!(h = (TH2I*)gROOT->FindObject("hClpull"))){
-    h = new TH2I("hClpull", "Cluster Pulls", 21, -.33, .33, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y/#sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-
-  // tracklet to track residuals/pulls in y direction
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kTrackTRD ]), kTrackTRD );
-  arr->SetName("Trklt");
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkltY"))){
-    h = new TH2I("hTrkltY", "Tracklet Y Residuals", 21, -.33, .33, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("#tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkltYpull"))){
-    h = new TH2I("hTrkltYpull", "Tracklet Y Pulls", 21, -.33, .33, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("#tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y/#sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-  // tracklet to track residuals/pulls in z direction
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkltZ"))){
-    h = new TH2I("hTrkltZ", "Tracklet Z Residuals", 50, -1., 1., 100, -1.5, 1.5);
-    h->GetXaxis()->SetTitle("#tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 2);
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkltZpull"))){
-    h = new TH2I("hTrkltZpull", "Tracklet Z Pulls", 50, -1., 1., 100, -5.5, 5.5);
-    h->GetXaxis()->SetTitle("#tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z/#sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 3);
-  // tracklet to track phi residuals
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkltPhi"))){
-    h = new TH2I("hTrkltPhi", "Tracklet #phi Residuals", 21, -.33, .33, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta phi [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 4);
-
-
-  // tracklet to TPC track residuals/pulls in y direction
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kTrackTPC]), kTrackTPC);
-  arr->SetName("TrkTPC");
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkTPCY"))){
-    h = new TH2I("hTrkTPCY", "Track[TPC] Y Residuals", 21, -.33, .33, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("#tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkTPCYpull"))){
-    h = new TH2I("hTrkTPCYpull", "Track[TPC] Y Pulls", 21, -.33, .33, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("#tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y/#sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-  // tracklet to TPC track residuals/pulls in z direction
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkTPCZ"))){
-    h = new TH2I("hTrkTPCZ", "Track[TPC] Z Residuals", 50, -1., 1., 100, -1.5, 1.5);
-    h->GetXaxis()->SetTitle("#tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 2);
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkTPCZpull"))){
-    h = new TH2I("hTrkTPCZpull", "Track[TPC] Z Pulls", 50, -1., 1., 100, -5.5, 5.5);
-    h->GetXaxis()->SetTitle("#tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z/#sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 3);
-  // tracklet to TPC track phi residuals
-  if(!(h = (TH2I*)gROOT->FindObject("hTrkTPCPhi"))){
-    h = new TH2I("hTrkTPCPhi", "Track[TPC] #phi Residuals", 21, -.33, .33, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta phi [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 4);
-
-
-  // Resolution histos
-  if(!HasMCdata()) return fContainer;
-
-  // cluster y resolution [0]
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kMCcluster]), kMCcluster);
-  arr->SetName("McCl");
-  if(!(h = (TH2I*)gROOT->FindObject("hMcCl"))){
-    h = new TH2I("hMcCl", "Cluster Resolution", 48, -.48, .48, 100, -.3, .3);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  if(!(h = (TH2I*)gROOT->FindObject("hMcClPull"))){
-    h = new TH2I("hMcClPull", "Cluster Pulls", 48, -.48, .48, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Deltay/#sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-
-
-  // TRACKLET RESOLUTION
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kMCtracklet]), kMCtracklet);
-  arr->SetName("McTrklt");
-  // tracklet y resolution
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltY"))){
-    h = new TH2I("hMcTrkltY", "Tracklet Resolution (Y)", 48, -.48, .48, 100, -.2, .2);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  // tracklet y pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltYPull"))){
-    h = new TH2I("hMcTrkltYPull", "Tracklet Pulls (Y)", 48, -.48, .48, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y / #sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-  // tracklet z resolution
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltZ"))){
-    h = new TH2I("hMcTrkltZ", "Tracklet Resolution (Z)", 100, -1., 1., 100, -1., 1.);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 2);
-  // tracklet z pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltZPull"))){
-    h = new TH2I("hMcTrkltZPull", "Tracklet Pulls (Z)", 100, -1., 1., 100, -3.5, 3.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z / #sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 3);
-  // tracklet phi resolution
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltPhi"))){
-    h = new TH2I("hMcTrkltPhi", "Tracklet Resolution (#Phi)", 48, -.48, .48, 100, -.15, .15);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta #phi [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 4);
-
-
-  // KALMAN TRACK RESOLUTION
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kMCtrackTRD]), kMCtrackTRD);
-  arr->SetName("McTrkTRD");
-  // Kalman track y resolution
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkY"))){
-    h = new TH2I("hMcTrkY", "Track Y Resolution", 48, -.48, .48, 100, -.2, .2);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  // Kalman track y pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkYPull"))){
-    h = new TH2I("hMcTrkYPull", "Track Y Pulls", 48, -.48, .48, 100, -4., 4.);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y / #sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-  // Kalman track Z
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkZ"))){
-    h = new TH2I("hMcTrkZ", "Track Z Resolution", 100, -1., 1., 100, -1., 1.);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 2);
-  // Kalman track Z pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkZPull"))){
-    h = new TH2I("hMcTrkZPull", "Track Z Pulls", 100, -1., 1., 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z / #sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 3);
-  // Kalman track SNP
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkSNP"))){
-    h = new TH2I("hMcTrkSNP", "Track Phi Resolution", 60, -.3, .3, 100, -5e-3, 5e-3);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta #phi [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 4);
-  // Kalman track SNP pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkSNPPull"))){
-    h = new TH2I("hMcTrkSNPPull", "Track SNP Pulls", 60, -.3, .3, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta(sin(#phi)) / #sigma_{sin(#phi)}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 5);
-  // Kalman track TGL
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTGL"))){
-    h = new TH2I("hMcTrkTGL", "Track Theta Resolution", 100, -1., 1., 100, -5e-3, 5e-3);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta#theta [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 6);
-  // Kalman track TGL pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTGLPull"))){
-    h = new TH2I("hMcTrkTGLPull", "Track TGL  Pulls", 100, -1., 1., 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta(tg(#theta)) / #sigma_{tg(#theta)}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 7);
-  // Kalman track Pt resolution
-  const Int_t n = AliPID::kSPECIES;
-  TObjArray *arr2 = 0x0; TH3S* h3=0x0;
-  arr->AddAt(arr2 = new TObjArray(AliTRDgeometry::kNlayer), 8);
-  arr2->SetName("Track Pt Resolution");
-  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-    if(!(h3 = (TH3S*)gROOT->FindObject(Form("hMcTrkPt%d", il)))){
-      h3 = new TH3S(Form("hMcTrkPt%d", il), "Track Pt Resolution", 40, 0., 20., 150, -.1, .2, n, -.5, n-.5);
-      h3->GetXaxis()->SetTitle("p_{t} [GeV/c]");
-      h3->GetYaxis()->SetTitle("#Delta p_{t}/p_{t}^{MC}");
-      h3->GetZaxis()->SetTitle("SPECIES");
-    } else h3->Reset();
-    arr2->AddAt(h3, il);
-  }
-  // Kalman track Pt pulls
-  arr->AddAt(arr2 = new TObjArray(AliTRDgeometry::kNlayer), 9);
-  arr2->SetName("Track 1/Pt Pulls");
-  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-    if(!(h3 = (TH3S*)gROOT->FindObject(Form("hMcTrkPtPulls%d", il)))){
-      h3 = new TH3S(Form("hMcTrkPtPulls%d", il), "Track 1/Pt Pulls", 40, 0., 2., 100, -4., 4., n, -.5, n-.5);
-      h3->GetXaxis()->SetTitle("1/p_{t}^{MC} [c/GeV]");
-      h3->GetYaxis()->SetTitle("#Delta(1/p_{t})/#sigma(1/p_{t}) ");
-      h3->GetZaxis()->SetTitle("SPECIES");
-    } else h3->Reset();
-    arr2->AddAt(h3, il);
-  }
-  // Kalman track P resolution
-  arr->AddAt(arr2 = new TObjArray(AliTRDgeometry::kNlayer), 10);
-  arr2->SetName("Track P Resolution [PID]");
-  for(Int_t il=0; il<AliTRDgeometry::kNlayer; il++){
-    if(!(h3 = (TH3S*)gROOT->FindObject(Form("hMcTrkP%d", il)))){
-      h3 = new TH3S(Form("hMcTrkP%d", il), "Track P Resolution", 40, 0., 20., 150, -.15, .35, n, -.5, n-.5);
-      h3->GetXaxis()->SetTitle("p [GeV/c]");
-      h3->GetYaxis()->SetTitle("#Delta p/p^{MC}");
-      h3->GetZaxis()->SetTitle("SPECIES");
-    } else h3->Reset();
-    arr2->AddAt(h3, il);
-  }
-
-  // TPC TRACK RESOLUTION
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kMCtrackTPC]), kMCtrackTPC);
-  arr->SetName("McTrkTPC");
-  // Kalman track Y
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCY"))){
-    h = new TH2I("hMcTrkTPCY", "Track[TPC] Y Resolution", 60, -.3, .3, 100, -.5, .5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  // Kalman track Y pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCYPull"))){
-    h = new TH2I("hMcTrkTPCYPull", "Track[TPC] Y Pulls", 60, -.3, .3, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta y / #sigma_{y}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-  // Kalman track Z
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCZ"))){
-    h = new TH2I("hMcTrkTPCZ", "Track[TPC] Z Resolution", 100, -1., 1., 100, -1., 1.);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 2);
-  // Kalman track Z pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCZPull"))){
-    h = new TH2I("hMcTrkTPCZPull", "Track[TPC] Z Pulls", 100, -1., 1., 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z / #sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 3);
-  // Kalman track SNP
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCSNP"))){
-    h = new TH2I("hMcTrkTPCSNP", "Track[TPC] Phi Resolution", 60, -.3, .3, 100, -5e-3, 5e-3);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta #phi [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 4);
-  // Kalman track SNP pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCSNPPull"))){
-    h = new TH2I("hMcTrkTPCSNPPull", "Track[TPC] SNP Pulls", 60, -.3, .3, 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#phi)");
-    h->GetYaxis()->SetTitle("#Delta(sin(#phi)) / #sigma_{sin(#phi)}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 5);
-  // Kalman track TGL
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCTGL"))){
-    h = new TH2I("hMcTrkTPCTGL", "Track[TPC] Theta Resolution", 100, -1., 1., 100, -5e-3, 5e-3);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta#theta [rad]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 6);
-  // Kalman track TGL pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTPCTGLPull"))){
-    h = new TH2I("hMcTrkTPCTGLPull", "Track[TPC] TGL  Pulls", 100, -1., 1., 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta(tg(#theta)) / #sigma_{tg(#theta)}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 7);
-  // Kalman track Pt resolution
-  if(!(h3 = (TH3S*)gROOT->FindObject("hMcTrkTPCPt"))){
-    h3 = new TH3S("hMcTrkTPCPt", "Track[TPC] Pt Resolution", 80, 0., 20., 150, -.1, .2, n, -.5, n-.5);
-    h3->GetXaxis()->SetTitle("p_{t} [GeV/c]");
-    h3->GetYaxis()->SetTitle("#Delta p_{t}/p_{t}^{MC}");
-    h3->GetZaxis()->SetTitle("SPECIES");
-  } else h3->Reset();
-  arr->AddAt(h3, 8);
-  // Kalman track Pt pulls
-  if(!(h3 = (TH3S*)gROOT->FindObject("hMcTrkTPCPtPulls"))){
-    h3 = new TH3S("hMcTrkTPCPtPulls", "Track[TPC] 1/Pt Pulls", 80, 0., 2., 100, -4., 4., n, -.5, n-.5);
-    h3->GetXaxis()->SetTitle("1/p_{t}^{MC} [c/GeV]");
-    h3->GetYaxis()->SetTitle("#Delta(1/p_{t})/#sigma(1/p_{t}) ");
-    h3->GetZaxis()->SetTitle("SPECIES");
-  } else h3->Reset();
-  arr->AddAt(h3, 9);
-  // Kalman track P resolution
-  if(!(h3 = (TH3S*)gROOT->FindObject("hMcTrkTPCP"))){
-    h3 = new TH3S("hMcTrkTPCP", "Track[TPC] P Resolution", 80, 0., 20., 150, -.15, .35, n, -.5, n-.5);
-    h3->GetXaxis()->SetTitle("p [GeV/c]");
-    h3->GetYaxis()->SetTitle("#Delta p/p^{MC}");
-    h3->GetZaxis()->SetTitle("SPECIES");
-  } else h3->Reset();
-  arr->AddAt(h3, 10);
-  // Kalman track Pt pulls
-  if(!(h3 = (TH3S*)gROOT->FindObject("hMcTrkTPCPPulls"))){
-    h3 = new TH3S("hMcTrkTPCPPulls", "Track[TPC] P Pulls", 80, 0., 20., 100, -5., 5., n, -.5, n-.5);
-    h3->GetXaxis()->SetTitle("p^{MC} [GeV/c]");
-    h3->GetYaxis()->SetTitle("#Deltap/#sigma_{p}");
-    h3->GetZaxis()->SetTitle("SPECIES");
-  } else h3->Reset();
-  arr->AddAt(h3, 11);
-
-
-
-  // Kalman track Z resolution [TOF]
-  fContainer->AddAt(arr = new TObjArray(fgNElements[kMCtrackTOF]), kMCtrackTOF);
-  arr->SetName("McTrkTOF");
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTOFZ"))){
-    h = new TH2I("hMcTrkTOFZ", "Track[TOF] Z Resolution", 100, -1., 1., 100, -1., 1.);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z [cm]");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 0);
-  // Kalman track Z pulls
-  if(!(h = (TH2I*)gROOT->FindObject("hMcTrkTOFZPull"))){
-    h = new TH2I("hMcTrkTOFZPull", "Track[TOF] Z Pulls", 100, -1., 1., 100, -4.5, 4.5);
-    h->GetXaxis()->SetTitle("tg(#theta)");
-    h->GetYaxis()->SetTitle("#Delta z / #sigma_{z}");
-    h->GetZaxis()->SetTitle("entries");
-  } else h->Reset();
-  arr->AddAt(h, 1);
-
-  return fContainer;
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::Process(TH2 * const h2, TF1 *f, Float_t k, TGraphErrors **g)
-{
-  //
-  // Do the processing
-  //
-
-  Char_t pn[10]; sprintf(pn, "p%02d", fIdxPlot);
-  Int_t n = 0;
-  if((n=g[0]->GetN())) for(;n--;) g[0]->RemovePoint(n);
-  if((n=g[1]->GetN())) for(;n--;) g[1]->RemovePoint(n);
-
-  for(Int_t ibin = 1; ibin <= h2->GetNbinsX(); ibin++){
-    Double_t x = h2->GetXaxis()->GetBinCenter(ibin);
-    TH1D *h = h2->ProjectionY(pn, ibin, ibin);
-    if(h->GetEntries()<100) continue;
-    //AdjustF1(h, f);
-
-    h->Fit(f, "QN");
-    
-    Int_t ip = g[0]->GetN();
-    g[0]->SetPoint(ip, x, k*f->GetParameter(1));
-    g[0]->SetPointError(ip, 0., k*f->GetParError(1));
-    g[1]->SetPoint(ip, x, k*f->GetParameter(2));
-    g[1]->SetPointError(ip, 0., k*f->GetParError(2));
-    
-/*  
-    g[0]->SetPoint(ip, x, k*h->GetMean());
-    g[0]->SetPointError(ip, 0., k*h->GetMeanError());
-    g[1]->SetPoint(ip, x, k*h->GetRMS());
-    g[1]->SetPointError(ip, 0., k*h->GetRMSError());*/
-  }
-  fIdxPlot++;
-  return kTRUE;
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::Process2D(ETRDresolutionPlot plot, Int_t idx, TF1 *f, Float_t k)
-{
-  //
-  // Do the processing
-  //
-
-  if(!fContainer || !fGraphS || !fGraphM) return kFALSE;
-
-  // retrive containers
-  TH2I *h2 = idx<0 ? (TH2I*)(fContainer->At(plot)) : (TH2I*)((TObjArray*)(fContainer->At(plot)))->At(idx);
-  if(!h2) return kFALSE;
-  TGraphErrors *g[2];
-  if(!(g[0] = idx<0 ? (TGraphErrors*)fGraphM->At(plot) : (TGraphErrors*)((TObjArray*)(fGraphM->At(plot)))->At(idx))) return kFALSE;
-
-  if(!(g[1] = idx<0 ? (TGraphErrors*)fGraphS->At(plot) : (TGraphErrors*)((TObjArray*)(fGraphS->At(plot)))->At(idx))) return kFALSE;
-
-  return Process(h2, f, k, g);
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::Process3D(ETRDresolutionPlot plot, Int_t idx, TF1 *f, Float_t k)
-{
-  //
-  // Do the processing
-  //
-
-  if(!fContainer || !fGraphS || !fGraphM) return kFALSE;
-
-  // retrive containers
-  TH3S *h3 = idx<0 ? (TH3S*)(fContainer->At(plot)) : (TH3S*)((TObjArray*)(fContainer->At(plot)))->At(idx);
-  if(!h3) return kFALSE;
-
-  TObjArray *gm, *gs;
-  if(!(gm = (TObjArray*)((TObjArray*)(fGraphM->At(plot)))->At(idx))) return kFALSE;
-  if(!(gs = (TObjArray*)((TObjArray*)(fGraphS->At(plot)))->At(idx))) return kFALSE;
-  TGraphErrors *g[2];
-
-  TAxis *az = h3->GetZaxis();
-  for(Int_t iz=1; iz<=az->GetNbins(); iz++){
-    if(!(g[0] = (TGraphErrors*)gm->At(iz-1))) return kFALSE;
-    if(!(g[1] = (TGraphErrors*)gs->At(iz-1))) return kFALSE;
-    az->SetRange(iz, iz);
-    if(!Process((TH2*)h3->Project3D("yx"), f, k, g)) return kFALSE;
-  }
-
-  return kTRUE;
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::Process3DL(ETRDresolutionPlot plot, Int_t idx, TF1 *f, Float_t k)
-{
-  //
-  // Do the processing
-  //
-
-  if(!fContainer || !fGraphS || !fGraphM) return kFALSE;
-
-  // retrive containers
-  TH3S *h3 = (TH3S*)((TObjArray*)fContainer->At(plot))->At(idx);
-  if(!h3) return kFALSE;
-
-  TGraphAsymmErrors *gm; 
-  TGraphErrors *gs;
-  if(!(gm = (TGraphAsymmErrors*)((TObjArray*)fGraphM->At(plot))->At(0))) return kFALSE;
-  if(!(gs = (TGraphErrors*)((TObjArray*)fGraphS->At(plot)))) return kFALSE;
-
-  Float_t x, r, mpv, xM, xm;
-  TAxis *ay = h3->GetYaxis();
-  for(Int_t iy=1; iy<=h3->GetNbinsY(); iy++){
-    ay->SetRange(iy, iy);
-    x = ay->GetBinCenter(iy);
-    TH2F *h2=(TH2F*)h3->Project3D("zx");
-    TAxis *ax = h2->GetXaxis();
-    for(Int_t ix=1; ix<=h2->GetNbinsX(); ix++){
-      r = ax->GetBinCenter(ix);
-      TH1D *h1 = h2->ProjectionY("py", ix, ix);
-      if(h1->Integral()<50) continue;
-      h1->Fit(f, "QN");
-
-      GetLandauMpvFwhm(f, mpv, xm, xM);
-      Int_t ip = gm->GetN();
-      gm->SetPoint(ip, x, k*mpv);
-      gm->SetPointError(ip, 0., 0., k*xm, k*xM);
-      gs->SetPoint(ip, r, k*(xM-xm)/mpv);
-      gs->SetPointError(ip, 0., 0.);
-    }
-  }
-
-  return kTRUE;
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::Process4D(ETRDresolutionPlot plot, Int_t idx, TF1 *f, Float_t k)
-{
-  //
-  // Do the processing
-  //
-
-  if(!fContainer || !fGraphS || !fGraphM) return kFALSE;
-
-  // retrive containers
-  TObjArray *arr = (TObjArray*)((TObjArray*)(fContainer->At(plot)))->At(idx);
-  if(!arr) return kFALSE;
-
-
-  TObjArray *gm[2], *gs[2];
-  if(!(gm[0] = (TObjArray*)((TObjArray*)(fGraphM->At(plot)))->At(idx))) return kFALSE;
-  if(!(gs[0] = (TObjArray*)((TObjArray*)(fGraphS->At(plot)))->At(idx))) return kFALSE;
-
-  TGraphErrors *g[2];
-
-  TH3S *h3 = 0x0;
-  for(Int_t ix=0; ix<arr->GetEntriesFast(); ix++){
-    if(!(h3 = (TH3S*)arr->At(ix))) return kFALSE;
-    if(!(gm[1] = (TObjArray*)gm[0]->At(ix))) return kFALSE;
-    if(!(gs[1] = (TObjArray*)gs[0]->At(ix))) return kFALSE;
-    TAxis *az = h3->GetZaxis();
-    for(Int_t iz=1; iz<=az->GetNbins(); iz++){
-      if(!(g[0] = (TGraphErrors*)gm[1]->At(iz-1))) return kFALSE;
-      if(!(g[1] = (TGraphErrors*)gs[1]->At(iz-1))) return kFALSE;
-      az->SetRange(iz, iz);
-      if(!Process((TH2*)h3->Project3D("yx"), f, k, g)) return kFALSE;
-    }
-  }
-
-  return kTRUE;
-}
-
-//________________________________________________________
-Bool_t AliTRDresolution::GetGraphPlot(Float_t *bb, ETRDresolutionPlot ip, Int_t idx)
-{
-  //
-  // Get the graphs
-  //
-
-  if(!fGraphS || !fGraphM) return kFALSE;
-  TGraphErrors *gm = idx<0 ? (TGraphErrors*)fGraphM->At(ip) : (TGraphErrors*)((TObjArray*)(fGraphM->At(ip)))->At(idx);
-  if(!gm) return kFALSE;
-  TGraphErrors *gs = idx<0 ? (TGraphErrors*)fGraphS->At(ip) : (TGraphErrors*)((TObjArray*)(fGraphS->At(ip)))->At(idx);
-  if(!gs) return kFALSE;
-  gs->Draw("apl"); gm->Draw("pl");
-
-  // titles look up
-  Int_t nref = 0;
-  for(Int_t jp=0; jp<(Int_t)ip; jp++) nref+=fgNElements[jp];
-  UChar_t jdx = idx<0?0:idx;
-  for(Int_t jc=0; jc<TMath::Min(jdx,fgNElements[ip]-1); jc++) nref++;
-  const Char_t **at = fgAxTitle[nref];
-
-  Int_t n(0);
-  if((n=gm->GetN())) {
-    PutTrendValue(Form("%s_%s", fgPerformanceName[ip], at[0]), gm->GetMean(2));
-    PutTrendValue(Form("%s_%sRMS", fgPerformanceName[ip], at[0]), gm->GetRMS(2));
-  }
-
-  if((n=gs->GetN())){
-    gs->Sort(&TGraph::CompareY);
-    PutTrendValue(Form("%s_%sSigMin", fgPerformanceName[ip], at[0]), gs->GetY()[0]);
-    PutTrendValue(Form("%s_%sSigMax", fgPerformanceName[ip], at[0]), gs->GetY()[n-1]);
-    gs->Sort(&TGraph::CompareX); 
-  }
-
-  // axis range
-  TAxis *ax = 0x0;
-  ax = gs->GetHistogram()->GetXaxis();
-  ax->SetRangeUser(bb[0], bb[2]);
-  ax->SetTitle(at[1]);ax->CenterTitle();
-
-  ax = gs->GetHistogram()->GetYaxis();
-  ax->SetRangeUser(bb[1], bb[3]);
-  ax->SetTitleOffset(1.1);
-  ax->SetTitle(at[2]);ax->CenterTitle();
-
-  TGaxis *gax = 0x0;
-  gax = new TGaxis(bb[2], bb[1], bb[2], bb[3], bb[1], bb[3], 510, "+U");
-  gax->SetLineColor(kRed);gax->SetLineWidth(2);gax->SetTextColor(kRed);
-  //gax->SetVertical();
-  gax->CenterTitle(); gax->SetTitleOffset(.7);
-  gax->SetTitle(at[3]); gax->Draw();
-
-  // bounding box
-  TBox *b = new TBox(-.15, bb[1], .15, bb[3]);
-  b->SetFillStyle(3002);b->SetLineColor(0);
-  b->SetFillColor(ip<=Int_t(kMCcluster)?kGreen:kBlue);
-  b->Draw();
-  return kTRUE;
-}
-
-
-//________________________________________________________
-Bool_t AliTRDresolution::GetGraphTrack(Float_t *bb, Int_t idx, Int_t il)
-{
-  //
-  // Get the graphs
-  //
-
-  if(!fGraphS || !fGraphM) return kFALSE;
-
-  // axis titles look up
-  Int_t nref = 0;
-  for(Int_t jp=0; jp<Int_t(kMCtrackTRD); jp++) nref+=fgNElements[jp];
-  for(Int_t jc=0; jc<idx; jc++) nref++;
-  const Char_t **at = fgAxTitle[nref];
-
-  TGraphErrors *gm = 0x0, *gs = 0x0;
-  TObjArray *a0 = fGraphS, *a1 = 0x0;
-  a1 = (TObjArray*)a0->At(kMCtrackTRD); a0 = a1;
-  a1 = (TObjArray*)a0->At(idx); a0 = a1;
-  a1 = (TObjArray*)a0->At(il); a0 = a1;
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    if(!(gs =  (TGraphErrors*)a0->At(is))) return kFALSE;
-    if(!gs->GetN()) continue;
-    gs->Draw(is ? "pl" : "apl");
-    gs->Sort(&TGraph::CompareY); Int_t n = gs->GetN();
-    PutTrendValue(Form("%s_%sSigMin%s", fgPerformanceName[kMCtrackTRD], at[0], AliPID::ParticleShortName(is)), gs->GetY()[0]);
-    PutTrendValue(Form("%s_%sSigMax%s", fgPerformanceName[kMCtrackTRD], at[0], AliPID::ParticleShortName(is)), gs->GetY()[n-1]);
-    gs->Sort(&TGraph::CompareX); 
-  }
-  gs =  (TGraphErrors*)a0->At(0);
-
-  // axis range
-  TAxis *ax = gs->GetHistogram()->GetXaxis();
-  ax->SetRangeUser(bb[0], bb[2]);
-  ax->SetTitle(at[1]);ax->CenterTitle();
-
-  ax = gs->GetHistogram()->GetYaxis();
-  ax->SetRangeUser(bb[1], bb[3]);
-  ax->SetTitleOffset(.5);ax->SetTitleSize(.06);
-  ax->SetTitle(at[2]);ax->CenterTitle();
-
-  TGaxis *gax = 0x0;
-  gax = new TGaxis(bb[2], bb[1], bb[2], bb[3], bb[1], bb[3], 510, "+U");
-  gax->SetLineColor(kRed);gax->SetLineWidth(2);gax->SetTextColor(kRed);
-  //gax->SetVertical();
-  gax->CenterTitle(); gax->SetTitleOffset(.5);gax->SetTitleSize(.06);
-  gax->SetTitle(at[3]); gax->Draw();
-
-
-  a0 = fGraphM;
-  a1 = (TObjArray*)a0->At(kMCtrackTRD); a0 = a1;
-  a1 = (TObjArray*)a0->At(idx); a0 = a1;
-  a1 = (TObjArray*)a0->At(il); a0 = a1;
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    if(!(gm =  (TGraphErrors*)a0->At(is))) return kFALSE;
-    if(!gm->GetN()) continue;
-    gm->Draw("pl");
-    PutTrendValue(Form("%s_%s_%s", fgPerformanceName[kMCtrackTRD], at[0], AliPID::ParticleShortName(is)), gm->GetMean(2));
-    PutTrendValue(Form("%s_%s_%sRMS", fgPerformanceName[kMCtrackTRD], at[0], AliPID::ParticleShortName(is)), gm->GetRMS(2));
-  }
-
-  return kTRUE;
-}
-
-
-//________________________________________________________
-Bool_t AliTRDresolution::GetGraphTrackTPC(Float_t *bb, Int_t sel)
-{
-  //
-  // Get the graphs
-  //
-
-  if(!fGraphS || !fGraphM) return kFALSE;
-
-  // axis titles look up
-  Int_t nref = 0;
-  for(Int_t jp=0; jp<Int_t(kMCtrackTPC); jp++) nref+=fgNElements[jp];
-  for(Int_t jc=0; jc<sel; jc++) nref++;
-  const Char_t **at = fgAxTitle[nref];
-
-  TGraphErrors *gm = 0x0, *gs = 0x0;
-  TObjArray *a0 = fGraphS, *a1 = 0x0;
-  a1 = (TObjArray*)a0->At(kMCtrackTPC); a0 = a1;
-  a1 = (TObjArray*)a0->At(sel); a0 = a1;
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    if(!(gs =  (TGraphErrors*)a0->At(is))) return kFALSE;
-    if(!gs->GetN()) continue;
-    gs->Draw(is ? "pl" : "apl");
-    gs->Sort(&TGraph::CompareY); Int_t n = gs->GetN();
-    PutTrendValue(Form("%s_%sSigMin%s", fgPerformanceName[kMCtrackTPC], at[0], AliPID::ParticleShortName(is)), gs->GetY()[0]);
-    PutTrendValue(Form("%s_%sSigMax%s", fgPerformanceName[kMCtrackTPC], at[0], AliPID::ParticleShortName(is)), gs->GetY()[n-1]);
-    gs->Sort(&TGraph::CompareX); 
-  }
-  gs =  (TGraphErrors*)a0->At(0);
-  // axis range
-  TAxis *ax = gs->GetHistogram()->GetXaxis();
-  ax->SetRangeUser(bb[0], bb[2]);
-  ax->SetTitle(at[1]);ax->CenterTitle();
-
-  ax = gs->GetHistogram()->GetYaxis();
-  ax->SetRangeUser(bb[1], bb[3]);
-  ax->SetTitleOffset(1.);ax->SetTitleSize(0.05);
-  ax->SetTitle(at[2]);ax->CenterTitle();
-
-  TGaxis *gax = 0x0;
-  gax = new TGaxis(bb[2], bb[1], bb[2], bb[3], bb[1], bb[3], 510, "+U");
-  gax->SetLineColor(kRed);gax->SetLineWidth(2);gax->SetTextColor(kRed);
-  //gax->SetVertical();
-  gax->CenterTitle(); gax->SetTitleOffset(.7);gax->SetTitleSize(0.05);
-  gax->SetTitle(at[3]); gax->Draw();
-
-
-  a0 = fGraphM;
-  a1 = (TObjArray*)a0->At(kMCtrackTPC); a0 = a1;
-  a1 = (TObjArray*)a0->At(sel); a0 = a1;
-  for(Int_t is=0; is<AliPID::kSPECIES; is++){
-    if(!(gm =  (TGraphErrors*)a0->At(is))) return kFALSE;
-    if(!gm->GetN()) continue;
-    gm->Draw("pl");
-    PutTrendValue(Form("%s_%s_%s", fgPerformanceName[kMCtrackTPC], at[0], AliPID::ParticleShortName(is)), gm->GetMean(2));
-    PutTrendValue(Form("%s_%s_%sRMS", fgPerformanceName[kMCtrackTPC], at[0], AliPID::ParticleShortName(is)), gm->GetRMS(2));
-  }
-
-  return kTRUE;
-}
-
-//________________________________________________________
-void AliTRDresolution::GetLandauMpvFwhm(TF1 * const f, Float_t &mpv, Float_t &xm, Float_t &xM)
-{
-  //
-  // Get the most probable value and the full width half mean 
-  // of a Landau distribution
-  //
-
-  const Float_t dx = 1.;
-  mpv = f->GetParameter(1);
-  Float_t fx, max = f->Eval(mpv);
-
-  xm = mpv - dx;
-  while((fx = f->Eval(xm))>.5*max){
-    if(fx>max){ 
-      max = fx;
-      mpv = xm;
-    }
-    xm -= dx;
-  }
-
-  xM += 2*(mpv - xm);
-  while((fx = f->Eval(xM))>.5*max) xM += dx;
-}
-
-
-//________________________________________________________
-void AliTRDresolution::SetRecoParam(AliTRDrecoParam *r)
-{
-
-  fReconstructor->SetRecoParam(r);
-}
diff --git a/TRD/qaRec/AliTRDresolution.h b/TRD/qaRec/AliTRDresolution.h
deleted file mode 100644 (file)
index 9830f89..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef ALITRDRESOLUTION_H
-#define ALITRDRESOLUTION_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDresolution.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  TRD Resolution performance                                            //
-//                                                                        //
-//  Authors:                                                              //
-//    Alexandru Bercuci <A.Bercuci@gsi.de>                                //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef ALITRDRECOTASK_H
-#include "AliTRDrecoTask.h"
-#endif
-
-class TH1;
-class TH2;
-class TF1;
-class TGraphErrors;
-class TObjArray;
-class AliTRDReconstructor;
-class AliTRDgeometry;
-class AliTRDrecoParam;
-class AliTRDseedV1;
-class AliTRDtrackInfo;
-class AliTRDresolution : public AliTRDrecoTask
-{
-public:
-  enum ETRDresolutionPlot {
-     kCharge     =  0 // charge resolution
-    ,kCluster    =  1 // cluster - track
-    ,kTrackTRD   =  2 // tracklet - track residuals/pulls
-    ,kTrackTPC   =  3 // tracklet - track residuals/pulls at lower TRD entrance 
-    ,kMCcluster  =  4 // cluster-mc resolution/pulls
-    ,kMCtracklet =  5 // tracklet-mc resolution/pulls
-    ,kMCtrackTPC =  6 // TPC track monitor
-    ,kMCtrackTOF =  7 // TOF/HMPID track monitor
-    ,kMCtrackTRD =  8 // TRD track monitor
-    ,kNhistos    =  9
-  };
-  enum ETRDresolutionSteer {
-    kVerbose  = 0
-    ,kVisual  = 1
-  };
-
-  AliTRDresolution();
-  virtual ~AliTRDresolution();
-  
-  void    CreateOutputObjects();
-  Bool_t  GetRefFigure(Int_t ifig);
-  TObjArray*  Histos(); 
-  TObjArray*  Results(Int_t i=0) const {return i ? fGraphS : fGraphM;} 
-  void    Exec(Option_t * opt);
-  Bool_t  IsVerbose() const {return TESTBIT(fStatus, kVerbose);}
-  Bool_t  IsVisual() const {return TESTBIT(fStatus, kVisual);}
-  Bool_t  PostProcess();
-
-  TH1*    PlotCharge(const AliTRDtrackV1 *t=0x0);
-  TH1*    PlotCluster(const AliTRDtrackV1 *t=0x0);
-  TH1*    PlotTracklet(const AliTRDtrackV1 *t=0x0);
-  TH1*    PlotTrackTPC(const AliTRDtrackV1 *t=0x0);
-  TH1*    PlotMC(const AliTRDtrackV1 *t=0x0);
-
-  void    SetRecoParam(AliTRDrecoParam *r);
-  void    SetVerbose(Bool_t v = kTRUE) {v ? SETBIT(fStatus ,kVerbose): CLRBIT(fStatus ,kVerbose);}
-  void    SetVisual(Bool_t v = kTRUE) {v ? SETBIT(fStatus, kVisual) : CLRBIT(fStatus, kVisual);}
-
-  void    Terminate(Option_t * opt);
-  Bool_t  GetGraphPlot(Float_t *bb, ETRDresolutionPlot ip, Int_t idx=-1);
-  Bool_t  GetGraphTrack(Float_t *bb, Int_t idx, Int_t ily);
-  Bool_t  GetGraphTrackTPC(Float_t *bb, Int_t selector);
-  
-private:
-  AliTRDresolution(const AliTRDresolution&);
-  AliTRDresolution& operator=(const AliTRDresolution&);
-  void    AdjustF1(TH1 *h, TF1 *f);
-  void    GetLandauMpvFwhm(TF1 * const f, Float_t &mpv, Float_t &xm, Float_t &xM);
-  Bool_t  Process(TH2* const h2, TF1 *f, Float_t k, TGraphErrors **g);
-  Bool_t  Process2D(ETRDresolutionPlot ip, Int_t idx=-1, TF1 *f=0x0,  Float_t scale=1.);
-  Bool_t  Process3D(ETRDresolutionPlot ip, Int_t idx=-1, TF1 *f=0x0,  Float_t scale=1.);
-  Bool_t  Process3DL(ETRDresolutionPlot ip, Int_t idx=-1, TF1 *f=0x0,  Float_t scale=1.);
-  Bool_t  Process4D(ETRDresolutionPlot ip, Int_t idx=-1, TF1 *f=0x0,  Float_t scale=1.);
-
-  UChar_t             fStatus;          // steer parameter of the task
-  UChar_t             fIdxPlot;         //! plot counter (internal)
-  static Char_t const *fgPerformanceName[kNhistos]; // name of performance plot
-  static UChar_t const fgNElements[kNhistos]; // number of componets per task
-  static Char_t const *fgAxTitle[46][4]; // Title for all ref histos
-  AliTRDReconstructor *fReconstructor;  //! local reconstructor
-  AliTRDgeometry      *fGeo;            //! TRD geometry
-  TObjArray           *fGraphS;         //! result holder - sigma values
-  TObjArray           *fGraphM;         //! result holder - mean values
-
-  // calibration containers
-  TObjArray           *fCl;     //! cluster2track calib
-  TObjArray           *fTrklt;  //! tracklet2track calib
-  TObjArray           *fMCcl;   //! cluster2mc calib
-  TObjArray           *fMCtrklt;//! tracklet2mc calib
-  
-  ClassDef(AliTRDresolution, 3) // TRD tracking resolution task
-};
-#endif
diff --git a/TRD/qaRec/info/AliTRDclusterInfo.cxx b/TRD/qaRec/info/AliTRDclusterInfo.cxx
deleted file mode 100644 (file)
index dbd8d2f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "TMath.h"
-
-#include "AliLog.h"
-#include "AliTRDcluster.h"
-
-#include "AliTRDclusterInfo.h"
-
-ClassImp(AliTRDclusterInfo)
-
-//_________________________________________________
-AliTRDclusterInfo::AliTRDclusterInfo()
-  : TObject()
-  ,fDet(0xffff)
-  ,fPdg(0)
-  ,fLbl(-1)
-  ,fLocalTime(-100)
-  ,fQ(0.)
-  ,fX(0.)
-  ,fY(0.)
-  ,fYd(0.)
-  ,fZ(0.)
-  ,fdydx(0.)
-  ,fdzdx(0.)
-  ,fXd(0.)
-  ,fYt(0.)
-  ,fZt(0.)
-  ,fdy(0.)
-  ,fD(0.)
-  ,fTilt(0.)
-{
-  fCov[0] = 1.; fCov[1] = 0.;
-  fCov[2] = 1.;
-  fCovCl[0] = 1.; fCovCl[1] = 0.;
-  fCovCl[2] = 1.;
-}
-
-//_________________________________________________
-void AliTRDclusterInfo::SetCluster(const AliTRDcluster *c)
-{
-  if(!c) return;
-  fDet = c->GetDetector();
-  fX   = c->GetX();
-  fY   = c->GetY();
-  fZ   = c->GetZ();
-  fQ   = TMath::Abs(c->GetQ());
-  fLocalTime = c->GetLocalTimeBin();
-  fYd  = c->GetCenter();
-  fCovCl[0] = c->GetSigmaY2();
-  fCovCl[1] = 0.;
-  fCovCl[2] = c->GetSigmaZ2();
-}
-
-//_________________________________________________
-void AliTRDclusterInfo::Print(Option_t */*opt*/) const
-{
-  printf("Det[%3d] X[%7.2f] Y[%7.2f] Z[%7.2f] Q[%7.2f]\n", fDet==0xffff ? -1 : fDet, fX, fY, fZ, fQ);
-  printf("\tPdg[%d] Lbl[%d] Yt[%7.2f] Zt[%7.2f]\n", fPdg, fLbl, fYt, fZt);
-}
diff --git a/TRD/qaRec/info/AliTRDclusterInfo.h b/TRD/qaRec/info/AliTRDclusterInfo.h
deleted file mode 100644 (file)
index b946fa3..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef ALITRDCLUSTERINFO_H
-#define ALITRDCLUSTERINFO_H
-
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-
-#ifndef Root_TObject
-#include "TObject.h"
-#endif
-
-class AliTRDcluster;
-class AliTRDclusterInfo : public TObject
-{
-public:
-  AliTRDclusterInfo();
-
-  Float_t   GetAnisochronity() const {return fD;}
-  inline void GetCluster(Int_t &det, Float_t &x, Float_t &y, Float_t &z, Float_t &q, Int_t &t, Float_t *cov=0x0) const;
-  void      GetMC(Int_t &pdg, Int_t &label) const{
-      pdg  = fPdg;
-      label= fLbl; }
-  void      GetGlobalPosition(Float_t &yt, Float_t &zt, Float_t &dydx, Float_t &dzdx, Float_t *cov=0x0) const {
-      dydx = fdydx;
-      dzdx = fdzdx;
-      yt   = fYt;
-      zt   = fZt;
-      if(cov) memcpy(cov, fCov, 3*sizeof(Float_t));}
-  Float_t   GetResolution() const {return fdy;}
-  Float_t   GetDriftLength() const {return fXd;}
-  Float_t   GetYDisplacement() const {return fYd;}
-  Float_t   GetTilt() const { return fTilt;}
-
-  void      Print(Option_t *opt="") const;
-
-  void      SetAnisochronity(Float_t d) {fD = d;}
-  void      SetCluster(const AliTRDcluster *c);
-  void      SetMC(Int_t pdg, Int_t label){
-      fPdg  = pdg;
-      fLbl  = label;}
-  void      SetGlobalPosition(Float_t yt, Float_t zt, Float_t dydx, Float_t dzdx, Float_t *cov=0x0) {
-      fdydx = dydx;
-      fdzdx = dzdx;
-      fYt   = yt;
-      fZt   = zt;
-      if(cov) memcpy(fCov, cov, 3*sizeof(Float_t));}
-  void      SetResolution(Float_t dy) {fdy = dy;}
-  void      SetDriftLength(Float_t d) {fXd = d;}
-  void      SetTilt(Float_t t) {fTilt = t;}
-
-private:
-  UShort_t fDet;   // detector
-  Short_t  fPdg;   // particle code
-  Short_t  fLbl;   // track label (MC)
-  Short_t  fLocalTime; // calibrate drift time
-  Float_t  fQ;     // cluster charge (REC)
-  Float_t  fX;     // x coordinate (REC)
-  Float_t  fY;     // y coordinate (REC)
-  Float_t  fYd;    // displacement from pad center y coordinate
-  Float_t  fZ;     // z coordinate (REC)
-  Float_t  fdydx;  // slope in phi (MC)
-  Float_t  fdzdx;  // slope in theta (MC)
-  Float_t  fXd;    // drift length
-  Float_t  fYt;    // y coordinate (MC)
-  Float_t  fZt;    // z coordinate (MC)
-  Float_t  fCov[3];// covariance matrix in the yz plane (track)
-  Float_t  fCovCl[3];// covariance matrix in the yz plane (cluster)
-  Float_t  fdy;    // difference in y after tilt correction
-  Float_t  fD;     // distance to the anode wire
-  Float_t  fTilt;  // pad tilt;
-
-  ClassDef(AliTRDclusterInfo, 1) // extracted cluster2MC information
-};
-
-
-//_________________________________________________
-inline void AliTRDclusterInfo::GetCluster(Int_t &det, Float_t &x, Float_t &y, Float_t &z, Float_t &q, Int_t &t, Float_t *cov) const
-{
-  det = fDet;
-  x   = fX;
-  y   = fY;
-  z   = fZ;
-  q   = fQ;
-  t   = fLocalTime;
-  if(cov) memcpy(cov, fCovCl, 3*sizeof(Float_t));
-}
-
-#endif
-
diff --git a/TRD/qaRec/info/AliTRDeventInfo.cxx b/TRD/qaRec/info/AliTRDeventInfo.cxx
deleted file mode 100644 (file)
index f6cda69..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#include "AliESDHeader.h"
-#include "AliESDRun.h"
-
-#include "AliTRDeventInfo.h"
-
-ClassImp(AliTRDeventInfo)
-
-AliTRDeventInfo::AliTRDeventInfo():
-  TObject()
-  ,fHeader(0x0)
-  ,fRun(0x0)
-{
-  //
-  // Default Constructor
-  // 
-  SetBit(kOwner, 0);
-}
-
-AliTRDeventInfo::AliTRDeventInfo(AliESDHeader *header, AliESDRun *run):
-  TObject()
-  ,fHeader(header)
-  ,fRun(run)
-{
-  //
-  // Constructor with Arguments
-  //
-  SetBit(kOwner, 0);
-}
-
-AliTRDeventInfo::AliTRDeventInfo(const AliTRDeventInfo &info):
-  TObject()
-  ,fHeader(info.fHeader)
-  ,fRun(info.fRun)
-{
-  //
-  // Copy Constructor
-  // Flat Copy
-  // 
-  SetBit(kOwner, 0);
-}
-
-AliTRDeventInfo& AliTRDeventInfo::operator=(const AliTRDeventInfo& info){
-  //
-  // Operator=
-  // Flat Copy
-  //
-  this->fHeader = info.fHeader;
-  this->fRun = info.fRun;
-  SetBit(kOwner, 0);
-  return *this;
-}
-
-AliTRDeventInfo::~AliTRDeventInfo(){
-  //
-  // Destructor
-  // Delete the entries if it is the Owner
-  //
-  Delete("");
-}
-
-void AliTRDeventInfo::Delete(const Option_t *){
-  //
-  // Delete the Object
-  // Delete the entries if it is the Owner
-  // 
-  if(IsOwner()){
-    if(fHeader) delete fHeader;
-    if(fRun) delete fRun;
-  };
-  fHeader = 0x0;
-  fRun = 0x0;
-}
-
-void AliTRDeventInfo::SetOwner(){
-  SetBit(kOwner, 1);
-  // Do deep copy
-  fHeader = new AliESDHeader(*fHeader);
-  fRun = new AliESDRun(*fRun);
-}
diff --git a/TRD/qaRec/info/AliTRDeventInfo.h b/TRD/qaRec/info/AliTRDeventInfo.h
deleted file mode 100644 (file)
index ced9c65..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __ALITRDEVENTINFO_H__
-#define __ALITRDEVENTINFO_H__
-
-#include <TObject.h>
-
-class AliESDHeader;
-class AliESDRun;
-
-class AliTRDeventInfo : public TObject{
-public:
-  AliTRDeventInfo();
-  AliTRDeventInfo(AliESDHeader *header, AliESDRun *run);
-  AliTRDeventInfo(const AliTRDeventInfo &info);
-  AliTRDeventInfo& operator=(const AliTRDeventInfo &info);
-  virtual ~AliTRDeventInfo();
-  virtual void Delete(const Option_t *);
-
-  AliESDHeader *GetEventHeader() const { return fHeader; }
-  AliESDRun *GetRunInfo() const { return fRun; }
-  Bool_t IsOwner() const { return TestBit(kOwner); }
-  void SetEventHeader(AliESDHeader *evHeader){ fHeader = evHeader; }
-  void SetRunInfo(AliESDRun *evRun) { fRun = evRun; }
-  void SetOwner();
-
-private:
-  enum{
-    kOwner = BIT(14)
-  };
-  AliESDHeader *fHeader;               //! The ESD Header
-  AliESDRun *fRun;             //! The ESD Run Info
-
-  ClassDef(AliTRDeventInfo, 1)
-};
-#endif
diff --git a/TRD/qaRec/info/AliTRDtrackInfo.cxx b/TRD/qaRec/info/AliTRDtrackInfo.cxx
deleted file mode 100644 (file)
index c33a8df..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDtrackInfo.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-//  Authors:                                                              //
-//    Alex Bercuci <A.Bercuci@gsi.de>                                     //
-//    Markus Fasel <M.Fasel@gsi.de>                                       //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include "TDatabasePDG.h"
-
-#include "AliTrackReference.h"
-#include "AliExternalTrackParam.h"
-
-#include "AliTRDseedV1.h"
-#include "AliTRDtrackV1.h"
-#include "AliTRDgeometry.h"
-#include "AliTRDtrackerV1.h"
-
-#include "AliTRDtrackInfo.h"
-
-ClassImp(AliTRDtrackInfo)
-ClassImp(AliTRDtrackInfo::AliMCinfo)
-ClassImp(AliTRDtrackInfo::AliESDinfo)
-
-//___________________________________________________
-AliTRDtrackInfo::AliTRDtrackInfo():
-  TObject()
-  ,fNClusters(0)
-  ,fTRDtrack(0x0)
-  ,fMC(0x0)
-  ,fESD()
-{
-  //
-  // Default constructor
-  //
-}
-
-
-//___________________________________________________
-AliTRDtrackInfo::AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo):
-  TObject((const TObject&)trdInfo)  
-  ,fNClusters(trdInfo.fNClusters)
-  ,fTRDtrack(0x0)
-  ,fMC(new AliMCinfo(*trdInfo.fMC))
-  ,fESD(trdInfo.fESD)
-{
-  //
-  // copy Entries
-  //
-
-  if(trdInfo.fMC) fMC = new AliMCinfo(*trdInfo.fMC);
-
-  if(trdInfo.fTRDtrack){ 
-    fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
-    if(trdInfo.fTRDtrack->IsOwner()) fTRDtrack->SetOwner();
-  }
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliMCinfo::AliMCinfo()
-  :fLabel(0)
-  ,fPDG(0)
-  ,fNTrackRefs(0)
-{
-  // Set 0-Pointers
-  memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliMCinfo::AliMCinfo(const AliMCinfo &mc)
-  :fLabel(mc.fLabel)
-  ,fPDG(mc.fPDG)
-  ,fNTrackRefs(mc.fNTrackRefs)
-{
-  //
-  // Constructor
-  //
-
-  memset(fTrackRefs, 0, sizeof(AliTrackReference *) * 12);
-  for(Int_t ien = 0; ien < 12; ien++){
-    if(mc.fTrackRefs[ien])
-      fTrackRefs[ien] = new AliTrackReference(*(mc.fTrackRefs[ien]));
-  }
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliESDinfo::AliESDinfo()
-  :fId(-1)
-  ,fStatus(0)
-  ,fKinkIndex(0)
-  ,fTPCncls(0)
-  ,fTRDpidQuality(0)
-  ,fTRDnSlices(0)
-  ,fTRDslices(0x0)
-  ,fOP(0x0)
-{
-  //
-  // Constructor
-  //
-
-  memset(fTRDr, 0, AliPID::kSPECIES*sizeof(Double32_t));
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliESDinfo::AliESDinfo(const AliESDinfo &esd)
-  :fId(esd.fId)
-  ,fStatus(esd.fStatus)
-  ,fKinkIndex(esd.fKinkIndex)
-  ,fTPCncls(esd.fTPCncls)
-  ,fTRDpidQuality(esd.fTRDpidQuality)
-  ,fTRDnSlices(esd.fTRDnSlices)
-  ,fTRDslices(0x0)
-  ,fOP(0x0)
-{
-  //
-  // Constructor
-  //
-
-  memcpy(fTRDr, esd.fTRDr, AliPID::kSPECIES*sizeof(Double32_t));
-
-  if(fTRDnSlices){
-    fTRDslices = new Double32_t[fTRDnSlices];
-    memcpy(fTRDslices, esd.fTRDslices, fTRDnSlices*sizeof(Double32_t));
-  }
-  if(esd.fOP) fOP = new AliExternalTrackParam(*esd.fOP);
-}
-
-
-//___________________________________________________
-AliTRDtrackInfo::~AliTRDtrackInfo()
-{
-  //
-  // Destructor
-  //
-
-  if(fMC) delete fMC;
-  if(fTRDtrack) delete fTRDtrack;
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliMCinfo::~AliMCinfo()
-{
-  //
-  // Destructor
-  //
-
-  fNTrackRefs = 0;
-  for(Int_t ien = 0; ien < 12; ien++){
-    if(fTrackRefs[ien]) delete fTrackRefs[ien];
-    fTrackRefs[ien] = 0x0;
-  }
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliESDinfo::~AliESDinfo()
-{
-  //
-  // Destructor
-  //
-
-  if(fTRDnSlices){
-    delete [] fTRDslices;
-    fTRDslices = 0x0;
-    fTRDnSlices = 0;
-  }
-  if(fOP) delete fOP; fOP = 0x0;
-}
-
-
-//___________________________________________________
-AliTRDtrackInfo& AliTRDtrackInfo::operator=(const AliTRDtrackInfo &trdInfo)
-{
-  //
-  // = Operator
-  //
-
-  fNClusters  = trdInfo.fNClusters;
-  fESD = trdInfo.fESD;
-
-  if(trdInfo.fMC){
-    if(!fMC)
-      fMC = new AliMCinfo(*trdInfo.fMC);
-    else
-      new(fMC) AliMCinfo(*trdInfo.fMC);
-  }
-
-  if(trdInfo.fTRDtrack){
-    if(!fTRDtrack)
-      fTRDtrack = new AliTRDtrackV1(*trdInfo.fTRDtrack);
-    else
-      new(fTRDtrack) AliTRDtrackV1(*trdInfo.fTRDtrack);
-    if(trdInfo.fTRDtrack->IsOwner()) fTRDtrack->SetOwner();
-  }
-
-  return *this;
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliMCinfo& AliTRDtrackInfo::AliMCinfo::operator=(const AliMCinfo &mc)
-{
-  //
-  // Assignment operator
-  //
-
-  fLabel      = mc.fLabel;
-  fPDG        = mc.fPDG;
-  fNTrackRefs = mc.fNTrackRefs;
-
-  AliTrackReference **itr = &fTrackRefs[0];
-  AliTrackReference* const *jtr = &mc.fTrackRefs[0];
-  for(Int_t ien = 0; ien < 12; ien++, itr++, jtr++){
-    if((*jtr)){
-      if(!(*itr)) (*itr) = new AliTrackReference(*(*jtr));
-      else new(&(*itr)) AliTrackReference(*(*jtr));
-    } else (*itr) = 0x0;
-  }
-  return *this;
-}
-
-//___________________________________________________
-AliTRDtrackInfo::AliESDinfo& AliTRDtrackInfo::AliESDinfo::operator=(const AliESDinfo &esd)
-{
-  //
-  // Assignment operator
-  //
-
-  fId          = esd.fId;
-  fStatus      = esd.fStatus; 
-  fTRDpidQuality = esd.fTRDpidQuality;
-  fTRDnSlices  = esd.fTRDnSlices;
-  fTRDslices   = 0x0;
-
-  memcpy(fTRDr, esd.fTRDr, AliPID::kSPECIES*sizeof(Double32_t));
-
-  if(fTRDnSlices){
-    fTRDslices = new Double32_t[fTRDnSlices];
-    memcpy(fTRDslices, esd.fTRDslices, fTRDnSlices*sizeof(Double32_t));
-  }
-  if(esd.fOP){
-    if(fOP) new(fOP) AliExternalTrackParam(esd.fOP);
-    else fOP = new AliExternalTrackParam(esd.fOP);
-  } else fOP = 0x0;
-
-  return *this;
-}
-
-//___________________________________________________
-void AliTRDtrackInfo::Delete(const Option_t *)
-{
-  //
-  // Delete
-  //
-
-  fNClusters  = 0;
-  if(fMC) delete fMC; fMC = 0x0;
-  if(fTRDtrack) delete fTRDtrack; fTRDtrack = 0x0;
-}
-
-//___________________________________________________
-void AliTRDtrackInfo::SetTrack(const AliTRDtrackV1 *track)
-{
-  //
-  // Set the TRD track
-  //
-
-  if(!fTRDtrack)
-    fTRDtrack = new AliTRDtrackV1(*track);     
-  else
-    new(fTRDtrack)AliTRDtrackV1(*track);
-  fTRDtrack->SetOwner();
-  // Make a copy for the object in order to avoid ownership problems
-}
-
-//___________________________________________________
-void AliTRDtrackInfo::AddTrackRef(const AliTrackReference *tref)
-{
-  //
-  // Add track reference
-  //
-
-  SetMC();
-  if(fMC->fNTrackRefs >= 12){ 
-    SetCurved();
-    return;
-  }
-  // Make a copy for the object in order to avoid ownership problems
-  fMC->fTrackRefs[fMC->fNTrackRefs++] = new AliTrackReference(*tref);
-}
-
-//___________________________________________________
-AliTrackReference* AliTRDtrackInfo::GetTrackRef(Int_t idx) const
-{
-//
-// Returns a track reference
-//
-  if(!fMC) return 0x0;
-  return (idx>=0 && idx < 12) ? fMC->fTrackRefs[idx] : 0x0;
-}
-
-//___________________________________________________
-AliTrackReference* AliTRDtrackInfo::GetTrackRef(AliTRDseedV1* const tracklet) const
-{
-//
-// Returns a track reference
-//
-  if(!fMC) return 0x0;
-  Double_t cw = AliTRDgeometry::CamHght() + AliTRDgeometry::CdrHght();
-  AliTrackReference * const* jtr = &(fMC->fTrackRefs[0]);
-  for(Int_t itr = 0; itr < fMC->fNTrackRefs; itr++, ++jtr){
-    if(!(*jtr)) break;   
-    if(TMath::Abs(tracklet->GetX0() - (*jtr)->LocalX()) < cw) return (*jtr);
-  }
-  return 0x0;
-}
-
-//___________________________________________________
-Int_t AliTRDtrackInfo::GetNumberOfClusters() const
-{
-  //
-  // Returns the number of clusters
-  //
-
-  Int_t n = 0;
-  if(!fTRDtrack) return 0;
-  if(fTRDtrack->GetNumberOfTracklets() == 0) return n;
-  AliTRDseedV1 *tracklet = 0x0;
-  for(Int_t ip=0; ip<6; ip++){
-    if(!(tracklet = const_cast<AliTRDseedV1 *>(fTRDtrack->GetTracklet(ip)))) continue;
-    n+=tracklet->GetN();
-  }
-  return n;
-}
-
-
-//___________________________________________________
-void  AliTRDtrackInfo::SetOuterParam(const AliExternalTrackParam *op)
-{
-  //
-  // Set outer track parameters
-  //
-
-  if(!op) return;
-  if(fESD.fOP) new(fESD.fOP) AliExternalTrackParam(*op);
-  else fESD.fOP = new AliExternalTrackParam(*op);
-}
-
-//___________________________________________________
-Int_t AliTRDtrackInfo::GetNTracklets() const
-{
-  //
-  // Return the number of tracklets
-  //
-
-  if(!fTRDtrack) return 0x0;
-  return fTRDtrack->GetNumberOfTracklets();
-}
-
-//___________________________________________________
-void AliTRDtrackInfo::SetSlices(Int_t n, Double32_t *s)
-{
-  //
-  // Set the slices
-  //
-
-  if(fESD.fTRDnSlices != n){
-    fESD.fTRDnSlices = 0;
-    delete [] fESD.fTRDslices;
-    fESD.fTRDslices = 0x0;
-  }
-
-  if(!fESD.fTRDnSlices){
-    fESD.fTRDnSlices = n;
-    fESD.fTRDslices = new Double32_t[n];
-  }
-
-  memcpy(fESD.fTRDslices, s, n*sizeof(Double32_t));
-}
-//___________________________________________________
-Bool_t AliTRDtrackInfo::AliMCinfo::GetDirections(Float_t &x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, Float_t &pt, UChar_t &status) const
-{
-// Check for 2 track ref for the tracklet defined bythe radial position x0
-// The "status" is a bit map and gives a more informative output in case of failure:
-//   - 0 : everything is OK
-//   - BIT(0) : 0 track refs found
-//   - BIT(1) : 1 track reference found
-//   - BIT(2) : dx <= 0 between track references
-//   - BIT(3) : dx > 0 && dx < 3.7 - tangent tracks 
-
-  status = 0;
-  Double_t cw = AliTRDgeometry::CamHght() + AliTRDgeometry::CdrHght();
-  Int_t nFound = 0;
-  AliTrackReference *tr[2] = {0x0, 0x0};
-  AliTrackReference * const* jtr = &fTrackRefs[0];
-  for(Int_t itr = 0; itr < fNTrackRefs; itr++, ++jtr){
-    if(!(*jtr)) break;
-/*
-    if(fDebugLevel>=5) printf("\t\tref[%2d] x[%6.3f]\n", itr, (*jtr)->LocalX());*/
-    if(TMath::Abs(x0 - (*jtr)->LocalX()) > cw) continue;
-    tr[nFound++] = (*jtr);
-    if(nFound == 2) break;
-  } 
-  if(nFound < 2){ 
-    AliWarningGeneral("AliTRDtrackInfo::AliMCinfo::GetDirections()", Form("Missing track ref x0[%6.3f] nref[%d]\n", x0, nFound));
-    if(!nFound) SETBIT(status, 0);
-    else SETBIT(status, 1);
-    return kFALSE;
-  }
-  if((pt=tr[1]->Pt()) < 1.e-3) return kFALSE;
-
-  Double_t dx = tr[1]->LocalX() - tr[0]->LocalX();
-  if(dx <= 0.){
-    AliWarningGeneral("AliTRDtrackInfo::AliMCinfo::GetDirections()", Form("Track ref with wrong radial distances refX0[%6.3f] refX1[%6.3f]", tr[0]->LocalX(), tr[1]->LocalX()));
-    SETBIT(status, 2);
-    return kFALSE;
-  }
-  if(TMath::Abs(dx-AliTRDgeometry::CamHght()-AliTRDgeometry::CdrHght())>1.E-3) SETBIT(status, 3); 
-
-  dydx = (tr[1]->LocalY() - tr[0]->LocalY()) / dx;
-  dzdx = (tr[1]->Z() - tr[0]->Z()) / dx;
-  //Float_t dx0 = tr[1]->LocalX() - x0;
-  y0   =  tr[1]->LocalY()/* - dydx*dx0*/;
-  z0   =  tr[1]->Z()/* - dzdx*dx0*/;
-  x0   =  tr[1]->LocalX();
-  return kTRUE;
-}
-
-//___________________________________________________
-void AliTRDtrackInfo::AliMCinfo::PropagateKalman(Double_t dx[kNTrackRefs], Double_t dy[kNTrackRefs], Double_t dz[kNTrackRefs], Double_t dp[kNTrackRefs], Double_t c[kNTrackRefs][15], Double_t step) const
-{
-// Propagate Kalman from the first TRD track reference to 
-// last one and save residuals in the y, z and pt.
-// 
-// This is to calibrate the dEdx and MS corrections
-
-  for(Int_t itr=kNTrackRefs; itr--;){
-    dx[itr] = -1.; dy[itr] = 100.; dz[itr] = 100.; dp[itr] = 100.;
-  }
-  if(!fNTrackRefs) return;
-
-  // Initialize TRD track to the first track reference
-  AliTrackReference *tr = fTrackRefs[0];
-  if(tr->Pt()<1.e-3) return;
-
-  AliTRDtrackV1 tt;
-  Double_t xyz[3]={tr->X(),tr->Y(),tr->Z()};
-  Double_t pxyz[3]={tr->Px(),tr->Py(),tr->Pz()};
-  Double_t var[6] = {1.e-4, 1.e-4, 1.e-4, 1.e-4, 1.e-4, 1.e-4};
-  Double_t cov[21]={
-    var[0],  0.,  0.,  0.,  0.,  0.,
-         var[1],  0.,  0.,  0.,  0.,
-              var[2],  0.,  0.,  0.,
-                   var[3],  0.,  0.,
-                        var[4],  0.,
-                             var[5]
-  };
-  TDatabasePDG db;
-  const TParticlePDG *pdg=db.GetParticle(fPDG);
-  if(!pdg){
-    AliWarningGeneral("AliTRDtrackInfo::AliMCinfo::PropagateKalman()", Form("PDG entry missing for code %d. References for track %d", fPDG, fNTrackRefs));
-    return;
-  }
-  tt.Set(xyz, pxyz, cov, Short_t(pdg->Charge()));
-  tt.SetMass(pdg->Mass());
-  
-  Double_t x0 = tr->LocalX();
-  const Double_t *cc = 0x0;
-  for(Int_t itr=1, ip=0; itr<fNTrackRefs; itr++){
-    tr = fTrackRefs[itr];
-    if(!AliTRDtrackerV1::PropagateToX(tt, tr->LocalX(), step)) continue;
-
-    //if(update) ...
-    dx[ip] = tt.GetX() - x0;
-    dy[ip] = tt.GetY() - tr->LocalY();
-    dz[ip] = tt.GetZ() - tr->Z();
-    dp[ip] = tt.Pt()- tr->Pt();
-    cc = tt.GetCovariance();
-    memcpy(c[ip], cc, 15*sizeof(Double_t));
-    ip++;
-  }
-}
diff --git a/TRD/qaRec/info/AliTRDtrackInfo.h b/TRD/qaRec/info/AliTRDtrackInfo.h
deleted file mode 100644 (file)
index d6d4a5e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#ifndef ALITRDTRACKINFO_H
-#define ALITRDTRACKINFO_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-* See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDtrackInfo.h 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef Root_TObject
-#include "TObject.h"
-#endif
-
-#ifndef ALIPID_H
-#include "AliPID.h"
-#endif
-
-class AliTRDseedV1;
-class AliTRDtrackV1;
-class AliTrackReference;
-class AliExternalTrackParam;
-class AliTRDtrackInfo : public TObject{
-public:
-  enum{
-    kNTrackRefs = 12
-  };
-  class AliESDinfo{
-    friend class AliTRDtrackInfo;  // Friend class
-  public:
-    AliESDinfo();
-    AliESDinfo(const AliESDinfo &esd);
-    virtual ~AliESDinfo();
-    AliESDinfo& operator=(const AliESDinfo &esd);
-
-    Int_t       GetId() const {return fId;}
-    ULong_t     GetStatus() const {return fStatus;}
-    Int_t       GetKinkIndex() const {return fKinkIndex;}
-    UShort_t    GetTPCncls() const {return fTPCncls;}
-    UChar_t     GetPidQuality() const {return fTRDpidQuality;}
-    Int_t       GetNSlices() const {return fTRDnSlices;}
-    Double32_t* GetSliceIter() const {return fTRDslices;}
-    const Double32_t* GetResponseIter() const {return &fTRDr[0];}
-    AliExternalTrackParam* GetOuterParam() const { return fOP;}
-
-  protected:
-    Int_t       fId;            // ESD track id
-    ULong_t     fStatus;        // ESD track status
-    Int_t       fKinkIndex;     // ESD kink index
-    UShort_t    fTPCncls;       // Number of Clusters inside TPC
-    Double32_t  fTRDr[AliPID::kSPECIES];  // TRD radial position
-    UChar_t     fTRDpidQuality; // TRD PID quality
-    Int_t       fTRDnSlices;    // number of slices used for PID
-    Double32_t *fTRDslices;     //[fTRDnSlices] 
-    AliExternalTrackParam *fOP; // outer param
-
-    ClassDef(AliESDinfo, 2)     // ESD info related to TRD
-  };
-
-  class AliMCinfo{
-  friend class AliTRDtrackInfo;
-  public:
-    //typedef AliTrackReference (const* constAliTrackReference);
-    AliMCinfo();
-    AliMCinfo(const AliMCinfo &mc);
-    virtual ~AliMCinfo();
-    AliMCinfo& operator=(const AliMCinfo &mc);
-    Int_t   GetLabel() const {return fLabel;}
-    Int_t   GetNTrackRefs() const {return fNTrackRefs;}
-    Int_t   GetPDG() const {return fPDG;}
-    Bool_t  GetDirections(Float_t &x0, Float_t &y0, Float_t &z0, Float_t &dydx, Float_t &dzdx, Float_t &pt, UChar_t &s) const;
-    AliTrackReference const* GetTrackRef(Int_t ref=0) const {return fTrackRefs[ref];}
-    void    PropagateKalman(Double_t dx[kNTrackRefs], Double_t dy[kNTrackRefs], Double_t dz[kNTrackRefs], Double_t dpt[kNTrackRefs], Double_t c[kNTrackRefs][15], Double_t step = 2.) const;
-
-  protected:
-    Int_t   fLabel;             // MC label  
-    Int_t   fPDG;               // particle code
-    Int_t   fNTrackRefs;         // number of track refs
-    AliTrackReference  *fTrackRefs[kNTrackRefs];       // track refs array
-    ClassDef(AliMCinfo, 1)      // MC info related to TRD
-  };
-
-  AliTRDtrackInfo();
-  AliTRDtrackInfo(const AliTRDtrackInfo &trdInfo);
-  ~AliTRDtrackInfo();
-  
-//  void               Clear(const Option_t *){}
-  void               Delete(const Option_t *);
-  
-  AliTRDtrackInfo&   operator=(const AliTRDtrackInfo &trdInfo);
-  
-  void               AddTrackRef(const AliTrackReference *trackRef);
-  
-  Int_t              GetTrackId() const { return fESD.fId;}
-  const AliESDinfo*  GetESDinfo() const { return &fESD; }
-  const AliMCinfo*   GetMCinfo() const { return fMC; }
-  Int_t              GetNumberOfClusters() const;
-  Int_t              GetNumberOfClustersRefit() const {return fNClusters;}
-  Int_t              GetNTracklets() const;
-  Int_t              GetNTrackRefs() const {return fMC ? fMC->fNTrackRefs:0;} 
-  Int_t              GetLabel() const { return fMC ? fMC->fLabel:0; }
-  Int_t              GetKinkIndex() const { return fESD.fKinkIndex;}
-  UShort_t           GetTPCncls() const { return fESD.fTPCncls;}
-  Int_t              GetPDG() const { return fMC ? fMC->fPDG : 0; }
-  ULong_t            GetStatus() const {return fESD.fStatus;}
-  AliTRDtrackV1*     GetTrack() const { return fTRDtrack; }
-  AliTrackReference* GetTrackRef(Int_t entry) const;
-  AliTrackReference* GetTrackRef(AliTRDseedV1* const tracklet) const;
-
-  Bool_t             IsCurved() const {return TestBit(kCurv);}
-  Bool_t             IsPrimary() const {return TestBit(kPrim);}
-  Bool_t             HasESDtrack() const{return ((fTRDtrack != 0x0) ||(fESD.fOP != 0));}
-  Bool_t             HasMCinfo() const { return (Bool_t)fMC; }
-
-  void               SetCurved(Bool_t curv = kTRUE) {SetBit(kCurv, curv);}
-  void               SetLabel(Int_t lab) { SetMC(); fMC->fLabel = lab; }
-  void               SetNumberOfClustersRefit(Int_t n) {fNClusters = n;}
-  inline void        SetMC();
-  void               SetPDG(Int_t pdg) { SetMC(); fMC->fPDG = pdg; }
-  void               SetPrimary(Bool_t prim = kTRUE) {SetBit(kPrim, prim);}
-  void               SetOuterParam(const AliExternalTrackParam *op);
-  void               SetStatus(ULong_t stat) {fESD.fStatus = stat;}
-  void               SetKinkIndex(Int_t kinkIndex) {fESD.fKinkIndex = kinkIndex;}
-  void               SetTPCncls(UShort_t TPCncls) {fESD.fTPCncls = TPCncls;}
-  void               SetTrackId(Int_t id) {fESD.fId = id;}
-  void               SetTrack(const AliTRDtrackV1 *track);
-  void               SetESDpidQuality(UChar_t q) { fESD.fTRDpidQuality = q;}
-  void               SetSlices(Int_t n, Double32_t *s);
-  inline void        SetESDpid(Double_t *);
-  
-private:
-    enum{
-      kCurv = 14,
-      kPrim = 15
-  };
-  // this 2 data members have to go to ESD header.
-  Int_t              fNClusters;       // Numer of clusters from refit
-  AliTRDtrackV1      *fTRDtrack;           // tracklets data array
-  AliMCinfo          *fMC;            // MC extract for TRD
-  AliESDinfo         fESD;            // ESD extract for TRD
-
-  ClassDef(AliTRDtrackInfo, 3)        // TRD track info
-};
-
-
-//________________________________________________________
-inline void AliTRDtrackInfo::SetMC()
-{
-  if(!fMC) fMC = new AliMCinfo();
-}
-
-//________________________________________________________
-inline void AliTRDtrackInfo::SetESDpid(Double_t * const r)
-{ 
-  for(Int_t is = AliPID::kSPECIES; is--;) fESD.fTRDr[is] = r[is];
-}
-
-#endif
diff --git a/TRD/qaRec/info/AliTRDv0Info.cxx b/TRD/qaRec/info/AliTRDv0Info.cxx
deleted file mode 100644 (file)
index b3f7836..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-*                                                                        *
-* Author: The ALICE Off-line Project.                                    *
-* Contributors are mentioned in the code where appropriate.              *
-*                                                                        *
-* 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.                  *
-**************************************************************************/
-
-/* $Id: AliTRDv0Info.cxx 27496 2008-07-22 08:35:45Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-//  Gathers all information necessary for reference data selection about  //
-//  the track and (in case) its corresponding V0.                         //
-//  Carries out the selection of electrons (from gamma conversions),      //
-//  pions (from K0s decays) and protons (from Lambda and Anti-Lambda      //
-//  decays) by cuts specific for the respective decay and particle        //
-//  species.                                                              //
-//  (M.Heide, 2009/10/06)                                                 //
-//                                                                        //
-//  Authors:                                                              //
-//   Alex Bercuci <A.Bercuci@gsi.de>                                      //
-//   Alex Wilk    <wilka@uni-muenster.de>                                 //
-//   Markus Heide <mheide@uni-muenster.de>                                //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#include "TMath.h"
-
-#include "AliESDtrack.h"
-#include "AliESDv0.h"
-#include "AliESDInputHandler.h"
-#include "AliAnalysisManager.h"
-#include "AliLog.h"
-
-#include "AliTRDv0Info.h"
-#include "AliTRDtrackInfo.h"
-#include "AliTRDtrackInfo.h"
-
-ClassImp(AliTRDv0Info)
-
-//_________________________________________________
-AliTRDv0Info::AliTRDv0Info()
-  : TObject()
-  ,fESD(0x0)
-  ,fHasV0(0)      
-  ,fQuality(0)    
-  ,fMomentum(0)
-  ,fDCA(10)
-  ,fPointingAngle(10)
-  ,fOpenAngle(10)
-  ,fPsiPair(99)
-  ,fMagField(0)
-  ,fRadius(0)
-  ,fTrackID(0)
-  ,fV0Momentum(0)
-  ,fTrackP(0x0)
-  ,fTrackN(0x0)
-  ,fTrack(0x0)
-  ,fNindex(0)
-  ,fPindex(0)
-{
-  //
-  // Default constructor
-  //
-
-  memset(fPplus, 0, 2*kNlayer*sizeof(Float_t));
-  memset(fPminus, 0, 2*kNlayer*sizeof(Float_t));
-  memset(fDetPID, 0, 2*kNDaughters*kNDetectors*AliPID::kSPECIES*sizeof(Float_t));
-  memset(fInvMass, 0, kNMomBins*kNDecays*sizeof(Double_t));
-
-  /////////////////////////////////////////////////////////////////////////////
-  //Set Cut values: First specify decay in brackets, then the actual cut value!
-  ///////////////////////////////////////////////////////////////////////////// 
-
-  //Upper limit for distance of closest approach of two daughter tracks :
-  fUpDCA[kGamma] = 0.25;
-  fUpDCA[kK0s] = 0.25;
-  fUpDCA[kLambda] = 0.25;
-  fUpDCA[kAntiLambda] = 0.25;
-
-  //Upper limit for pointing angle (= angle between between vector from primary to secondary vertex and reconstructed momentum of V0 mother particle) :
-  fUpPointingAngle[kGamma] = 0.03;
-  fUpPointingAngle[kK0s] = 0.03;
-  fUpPointingAngle[kLambda] = 0.03;
-  fUpPointingAngle[kAntiLambda] = 0.03;
-
-  //Upper limit for invariant mass of V0 mother :
-  fUpInvMass[kGamma][0] = 0.04;// second pair of brackets is for momentum bin: 0: below mother momentm of 2.5 GeV
-  fUpInvMass[kGamma][1] = 0.07;//1: above 2.5 GeV
-  fUpInvMass[kK0s][0] = fUpInvMass[kK0s][1] = 0.51;
-  fUpInvMass[kLambda][0] = fUpInvMass[kLambda][1] = 1.22;
-  fUpInvMass[kAntiLambda][0] = fUpInvMass[kAntiLambda][1] = 1.22;
-
-  //Lower limit for invariant mass of V0 mother :
-  fDownInvMass[kGamma] = -1.;
-  fDownInvMass[kK0s] = 0.49;
-  fDownInvMass[kLambda] = 1.;
-  fDownInvMass[kAntiLambda] = 1.;
-
-  //Lower limit for distance from secondary vertex to primary vertex in x-y plane :
-  fDownRadius[kGamma] = 5.7;
-  fDownRadius[kK0s] = 0.;
-  fDownRadius[kLambda] = 10.;
-  fDownRadius[kAntiLambda] = 10.;
-
-  //Upper limit for distance from secondary vertex to primary vertex in x-y plane :
-  fUpRadius[kGamma] = 1000.;
-  fUpRadius[kK0s] = 1000.;
-  fUpRadius[kLambda] = 1000.;
-  fUpRadius[kAntiLambda] = 1000.;
-
-  //Upper limit for opening angle between two daughter tracks (characteristically near zero for conversions) :
-  fUpOpenAngle[kGamma] = 0.1;
-  fUpOpenAngle[kK0s] = 3.15;
-  fUpOpenAngle[kLambda] = 3.15;
-  fUpOpenAngle[kAntiLambda] = 3.15;
-
-  //Upper limit for angle between daughter momentum plane and plane perpendicular to magnetic field (characteristically around zero for conversions) :
-  fUpPsiPair[kGamma] = 0.1;
-  fUpPsiPair[kK0s] = 1.6;
-  fUpPsiPair[kLambda] = 1.6;
-  fUpPsiPair[kAntiLambda] = 1.6;
-
-  //Lower limit for likelihood value of TPC PID :
-  fDownTPCPIDneg[AliPID::kElectron] = 0.21;
-  fDownTPCPIDpos[AliPID::kElectron] = 0.21;
-
-  fDownTPCPIDneg[AliPID::kMuon] = 0.21;
-  fDownTPCPIDpos[AliPID::kMuon] = 0.21;
-
-  fDownTPCPIDneg[AliPID::kPion] = 0.21;
-  fDownTPCPIDpos[AliPID::kPion] = 0.21;
-
-  fDownTPCPIDneg[AliPID::kKaon] = 0.21;
-  fDownTPCPIDpos[AliPID::kKaon] = 0.21;
-
-  fDownTPCPIDneg[AliPID::kProton] = 0.21;
-  fDownTPCPIDpos[AliPID::kProton] = 0.21;
-  //////////////////////////////////////////////////////////////////////////////////
-
-}
-
-//_________________________________________________
-void AliTRDv0Info::GetESDv0Info(AliESDv0 *esdv0)
-{//Gets values of ESDv0 and daughter track properties
-  //See header file for description of variables
-
-  Int_t part1 = -1;
-  Int_t part2 = -1;
-
-  fQuality = Quality(esdv0);//Attributes an Int_t to the V0 due to quality cuts (= 1 if V0 is accepted, other integers depending on cut which excludes the vertex)    
-
-  fRadius = Radius(esdv0);//distance from secondary vertex to primary vertex in x-y plane
-      
-  fDCA = esdv0->GetDcaV0Daughters();//distance of closest approach of two daughter tracks
-      
-  fPointingAngle = TMath::ACos(esdv0->GetV0CosineOfPointingAngle());// pointing angle (= angle between between vector from primary to secondary vertex and reconstructed momentum of V0 mother particle)
-      
-  fOpenAngle = OpenAngle(esdv0);//Opening angle between two daughter tracks
-      
-  fPsiPair = PsiPair(esdv0);//Angle between daughter momentum plane and plane perpendicular to magnetic field
-
-  fV0Momentum = V0Momentum(esdv0);//Reconstructed momentum of the mother particle
-      
-  for(Int_t idecay = 0; idecay < kNDecays; idecay++)//4 decay types : conversions, K0s, Lambda, Anti-Lambda 
-    //five particle types: electrons, muons, pions, kaons, protons (muons and kaons not involved)
-    {
-      if(idecay == kLambda)//protons and pions from Lambda
-  {
-    part1 = AliPID::kProton;
-    part2 = AliPID::kPion;
-  }
-      else if(idecay == kAntiLambda)//antiprotons and pions from Anti-Lambda
-  {
-    part1 = AliPID::kPion;
-    part2 = AliPID::kProton;
-  }
-      else if(idecay == kK0s)//pions from K0s
-  part1 = part2 = AliPID::kPion;
-      else if(idecay == kGamma)//electrons from conversions
-  part1 = part2 = AliPID::kElectron;
-    
-      fInvMass[idecay] = InvMass(part1, part2, esdv0);//Calculate invariant mass for all of our four supposed decays
-    }
-  GetDetectorPID();//Gets all likelihood values from TPC, TOF and ITS PID for the fDetPID[kNDaughters][kNDetectors][AliPID::kSPECIES] array
-
-    
-}
-//_________________________________________________
-Float_t  AliTRDv0Info::V0Momentum(AliESDv0 *esdv0) const
-{
-  //
-  // Reconstructed momentum of V0 mother particle
-  //
-
-  Double_t mn[3] = {0,0,0};
-  Double_t mp[3] = {0,0,0};
-
-
-  esdv0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter; 
-  esdv0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter;
-  
-  
-  return TMath::Sqrt((mn[0]+mp[0])*(mn[0]+mp[0]) + (mn[1]+mp[1])*(mn[1]+mp[1])+(mn[2]+mp[2])*(mn[2]+mp[2]));
-}
-
-//_________________________________________________
-Double_t AliTRDv0Info::InvMass(Int_t part1, Int_t part2, AliESDv0 *esdv0) const
-{
-  //
-  // Invariant mass of reconstructed V0 mother
-  //
-
-  const Double_t kpmass[5] = {AliPID::ParticleMass(AliPID::kElectron),AliPID::ParticleMass(AliPID::kMuon),AliPID::ParticleMass(AliPID::kPion),AliPID::ParticleMass(AliPID::kKaon),AliPID::ParticleMass(AliPID::kProton)};
-  //Masses of electrons, muons, pions, kaons and protons, as implemented in ROOT
-
-
-  Double_t mn[3] = {0,0,0};
-  Double_t mp[3] = {0,0,0};  
-
-  esdv0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter;
-  esdv0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter;
-  
-  Double_t mass1 = kpmass[part1];//sets supposed rest masses for both daughters
-  Double_t mass2 = kpmass[part2];   
-
-  //Calculate daughters' energies :
-  Double_t e1    = TMath::Sqrt(mass1*mass1+
-            mp[0]*mp[0]+
-            mp[1]*mp[1]+
-            mp[2]*mp[2]);
-  Double_t e2    = TMath::Sqrt(mass2*mass2+
-            mn[0]*mn[0]+
-            mn[1]*mn[1]+
-            mn[2]*mn[2]);  
-
-  //Sum of daughter momenta :   
-  Double_t momsum =  
-    (mn[0]+mp[0])*(mn[0]+mp[0])+
-    (mn[1]+mp[1])*(mn[1]+mp[1])+
-    (mn[2]+mp[2])*(mn[2]+mp[2]);
-
-  //invariant mass :                
-  Double_t mInv = TMath::Sqrt((e1+e2)*(e1+e2)-momsum);
-
-  return mInv;
-  
-}
-//_________________________________________________
-Float_t AliTRDv0Info::OpenAngle(AliESDv0 *esdv0)
-{//Opening angle between two daughter tracks
-  Double_t mn[3] = {0,0,0};
-  Double_t mp[3] = {0,0,0};
-    
-
-  esdv0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter;
-  esdv0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter;
-
-  
-  fOpenAngle = TMath::ACos((mp[0]*mn[0] + mp[1]*mn[1] + mp[2]*mn[2])/(TMath::Sqrt(mp[0]*mp[0] + mp[1]*mp[1] + mp[2]*mp[2])*TMath::Sqrt(mn[0]*mn[0] + mn[1]*mn[1] + mn[2]*mn[2])));
-  
-  return fOpenAngle;
-}
-
-//_________________________________________________
-Float_t AliTRDv0Info::PsiPair(AliESDv0 *esdv0)
-{//Angle between daughter momentum plane and plane perpendicular to magnetic field
-  Double_t x, y, z;
-  esdv0->GetXYZ(x,y,z);//Reconstructed coordinates of V0; to be replaced by Markus Rammler's method in case of conversions!
-  
-  Double_t mn[3] = {0,0,0};
-  Double_t mp[3] = {0,0,0};
-  
-
-  esdv0->GetNPxPyPz(mn[0],mn[1],mn[2]);//reconstructed cartesian momentum components of negative daughter;
-  esdv0->GetPPxPyPz(mp[0],mp[1],mp[2]);//reconstructed cartesian momentum components of positive daughter; 
-
-
-  Double_t deltat = 1.;
-  deltat = TMath::ATan(mp[2]/(TMath::Sqrt(mp[0]*mp[0] + mp[1]*mp[1])+1.e-13)) -  TMath::ATan(mn[2]/(TMath::Sqrt(mn[0]*mn[0] + mn[1]*mn[1])+1.e-13));//difference of angles of the two daughter tracks with z-axis
-
-  Double_t radiussum = TMath::Sqrt(x*x + y*y) + 50;//radius to which tracks shall be propagated
-
-  Double_t momPosProp[3];
-  Double_t momNegProp[3];
-    
-  AliExternalTrackParam nt(*fTrackN), pt(*fTrackP);
-    
-  fPsiPair = 4.;
-
-  if(nt.PropagateTo(radiussum,fMagField) == 0)//propagate tracks to the outside
-    fPsiPair =  -5.;
-  if(pt.PropagateTo(radiussum,fMagField) == 0)
-    fPsiPair = -5.;
-  pt.GetPxPyPz(momPosProp);//Get momentum vectors of tracks after propagation
-  nt.GetPxPyPz(momNegProp);
-  
-  Double_t pEle =
-    TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);//absolute momentum value of negative daughter
-  Double_t pPos =
-    TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);//absolute momentum value of positive daughter
-    
-  Double_t scalarproduct =
-    momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];//scalar product of propagated positive and negative daughters' momenta
-    
-  Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));//Angle between propagated daughter tracks
-
-  fPsiPair =  TMath::Abs(TMath::ASin(deltat/chipair));  
-
-  return fPsiPair; 
-
-}
-
-//_________________________________________________
-void AliTRDv0Info::V0fromTrack(AliTRDtrackInfo * const track, Int_t ivertex)
-{//Checks if track is a secondary vertex daughter (due to V0 finder)
-  
-  fMagField = fESD->GetMagneticField();
-
-  fTrackID =  track->GetTrackId();//index of the track
-
-  fTrack = fESD->GetTrack(fTrackID);//sets track information
-
-  fHasV0 = 0;
-
-  //comparing index of track with indices of pos./neg. V0 daughter :
-  AliESDv0 * esdv0 = fESD->GetV0(ivertex);
-  if((esdv0->GetIndex(0) == fTrackID)||(esdv0->GetIndex(1) == fTrackID))
-    {
-      fHasV0 = 1;//track belongs to vertex found by V0 finder!
-      fNindex = esdv0->GetIndex(0);
-      fPindex = esdv0->GetIndex(1);
-      fTrackN = fESD->GetTrack(esdv0->GetIndex(0));//providing information about the other of the two daughter tracks 
-      fTrackP = fESD->GetTrack(esdv0->GetIndex(1));
-      GetESDv0Info(esdv0);//gets all the relevant information about our V0
-    }
-}
-//_________________________________________________
-void AliTRDv0Info::GetDetectorPID()
-{//PID likelihoods from TPC, TOF, and ITS, for all particle species
-
-  fTrackN->GetTPCpid(fDetPID[kNeg][kTPC]);
-  fTrackP->GetTPCpid(fDetPID[kPos][kTPC]);
-  fTrackN->GetTOFpid(fDetPID[kNeg][kTOF]);
-  fTrackP->GetTOFpid(fDetPID[kPos][kTOF]);
-  fTrackN->GetITSpid(fDetPID[kNeg][kITS]);
-  fTrackP->GetITSpid(fDetPID[kPos][kITS]);
-
-}
-
-//_________________________________________________
-Float_t AliTRDv0Info::Radius(AliESDv0 *esdv0)
-{//distance from secondary vertex to primary vertex in x-y plane
-  Double_t x, y, z;
-  esdv0->GetXYZ(x,y,z); //Reconstructed coordinates of V0; to be replaced by Markus Rammler's method in case of conversions!
-  fRadius = TMath::Sqrt(x*x + y*y);
-  return fRadius;
-
-}
-
-//_________________________________________________
-Int_t AliTRDv0Info::Quality(AliESDv0 *const esdv0)
-{ 
-  //
-  // Checking track and V0 quality status in order to exclude vertices based on poor information
-  //
-
-  Float_t nClsN;
-  nClsN = fTrackN->GetTPCNcls();//number of found clusters in TPC for negative track
-  Float_t nClsFN;
-  nClsFN = fTrackN->GetTPCNclsF();//number of findable clusters in TPC for negative track
-  Float_t nClsP;
-  nClsP = fTrackP->GetTPCNcls();//number of found clusters in TPC for positive track
-  Float_t nClsFP;
-  nClsFP = fTrackP->GetTPCNclsF();//number of findable clusters in TPC for positive track
-  
-  fQuality = 0;
-
-
-  Float_t clsRatioN; 
-  Float_t clsRatioP;
-
-  if((nClsFN == 0) || (nClsFP == 0))
-    return 2;
-    
-  clsRatioN = nClsN/nClsFN; //ratios of found to findable clusters in TPC 
-  clsRatioP = nClsP/nClsFP;
-    
-  if (!(esdv0->GetOnFlyStatus()))//accept only vertices from online V0 finder
-    return 3;
-  if (!((fTrackP->GetStatus() &
-  AliESDtrack::kTPCrefit)))//accept only vertices in which both tracks have TPC refit
-    return 4;
-  if (!((fTrackN->GetStatus() &
-  AliESDtrack::kTPCrefit)))
-    return 5;  
-  if (fTrackP->GetKinkIndex(0)>0  ||
-      fTrackN->GetKinkIndex(0)>0 )//exclude tracks with kinks
-    return 6;
-  if((clsRatioN < 0.6)||(clsRatioP < 0.6))//exclude tracks with low ratio of found to findable TPC clusters
-    return 7;
-  fQuality = 1;
-  return fQuality;
-}
-//_________________________________________________
-Bool_t AliTRDv0Info::GetV0PID(Int_t ipart, AliTRDtrackInfo *track)
-{//decides if track is accepted for one of the reference data samples
-  
-  Int_t iDecay = -1;
-
-  //decide which decay has to be considered for which particle sample (Anti-Lambda will be treated separately)
-  if(ipart == AliPID::kElectron)
-    iDecay = kGamma;
-  else if(ipart == AliPID::kPion)
-    iDecay = kK0s;
-  else if(ipart == AliPID::kProton)
-    iDecay = kLambda;
-
-  Int_t iPSlot;//Mother momentum slots above/below 2.5 GeV
-
-  
-  Bool_t pid = 0;//return value for V0 PID decision
-
-  if(!(track))
-    {
-      AliError("AliTRDv0Info::GetV0PID(Int_t ipart, AliTRDtrackInfo *track) : No track info found.\n");
-      return 0;
-    }
-
-  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-  if(!esdH)
-    {
-      AliError("AliTRDv0Info::GetV0PID(Int_t ipart, AliTRDtrackInfo *track) : ERROR - ESD input handler not found");
-      return 0;
-    } 
-      
-  
-  fESD = esdH->GetEvent();
-  
-  for(Int_t ivertex=0; ivertex<fESD->GetNumberOfV0s(); ivertex++)
-    {
-    
-      if(pid == 0)
-  {     
-    V0fromTrack(track, ivertex);//Get the V0 corresponding to the track (if there is a V0)
-    
-    if(fV0Momentum > 2.5)//divide into slots according to reconstructed momentum of the mother particle
-      {iPSlot = 1;}
-    else
-      {iPSlot = 0;}
-    //Accept track for a sample only if...
-
-    if(!(fHasV0))//... there is a V0 found for it
-      continue;
-    if(!(fQuality == 1))//... it fulfills our quality criteria
-      continue;
-    if(!(fDCA < fUpDCA[iDecay]))//... distance of closest approach between daughters is reasonably small
-      continue;
-    if(!(fPointingAngle < fUpPointingAngle[iDecay]))//... pointing angle between momentum of mother particle and vector from prim. to sec. vertex is small
-      continue;                                  
-    if(!(fRadius > fDownRadius[iDecay]))//... x-y plane distance of decay point to prim. vertex is bigger than a certain minimum value (for conversions)
-      continue;
-    if(!(fOpenAngle < fUpOpenAngle[iDecay]))//... opening angle is close enough to zero (for conversions)
-      continue;
-    if(!(TMath::Abs(fPsiPair) < fUpPsiPair[iDecay]))//... Psi-pair angle is close enough to zero(for conversions)
-      continue;
-
-    //specific cut criteria :
-    if(ipart == AliPID::kProton)
-      {//for proton sample: separate treatment of Lamba and Anti-Lambda decays:
-        //for Anti-Lambda:
-        //TPC PID likelihoods high enough for pi+ and anti-proton ; invariant mass calculated postulating these two particle species...
-        if((fDetPID[kNeg][kTPC][AliPID::kProton] > fDownTPCPIDneg[AliPID::kProton]) && (fDetPID[kPos][kTPC][AliPID::kPion] > fDownTPCPIDpos[AliPID::kPion]))
-    {
-      if(fNindex == fTrackID)
-        {
-          if((fInvMass[kAntiLambda] < fUpInvMass[kAntiLambda][iPSlot]) && (fInvMass[kAntiLambda] > fDownInvMass[kAntiLambda]))
-      {
-        pid = 1;
-      }
-        }
-    }
-        //for Lambda:
-        //TPC PID likelihoods high enough for pi- and proton ; invariant mass calculated accordingly
-        if((fDetPID[kNeg][kTPC][AliPID::kPion] > fDownTPCPIDneg[AliPID::kPion]) && (fDetPID[kPos][kTPC][AliPID::kProton] > fDownTPCPIDpos[AliPID::kProton]))
-    {
-      if(fPindex == fTrackID)
-        {
-          if((fInvMass[kLambda] < fUpInvMass[kLambda][iPSlot]) && (fInvMass[kLambda] > fDownInvMass[kLambda]))
-      {
-        pid = 1;
-      }
-        }
-    }
-      }
-    //for photon and K0s decays: equal TPC PID likelihood criteria for both daughters ; invariant mass calculated postulating two electrons/two pions
-    else                 
-      if((fDetPID[kNeg][kTPC][ipart] > fDownTPCPIDneg[ipart]) && (fDetPID[kPos][kTPC][ipart] > fDownTPCPIDpos[ipart]))
-        {
-    if((fInvMass[iDecay] < fUpInvMass[iDecay][iPSlot]) && (fInvMass[iDecay] > fDownInvMass[iDecay]))
-      {
-        pid = 1;                                                 
-      }
-        }
-  }
-    }
-
-  return pid;
-  
-}
-//_________________________________________________
-void AliTRDv0Info::Print(Option_t */*opt*/) const
-{
-
-}
diff --git a/TRD/qaRec/info/AliTRDv0Info.h b/TRD/qaRec/info/AliTRDv0Info.h
deleted file mode 100644 (file)
index 81738aa..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#ifndef ALITRDV0INFO_H
-#define ALITRDV0INFO_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id: AliTRDv0Info.h 34132 2009-08-06 11:18:32Z cblume $ */
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-#ifndef Root_TObject
-#include "TObject.h"
-#endif
-
-#ifndef ALITRDGEOMETRY_H
-#include "AliTRDgeometry.h"
-#endif
-
-#ifndef ALIPID_H
-#include "AliPID.h"
-#endif
-
-
-class AliESDv0;
-class AliESDtrack;
-class AliESDEvent;
-class AliTRDtrackV1;
-class AliTRDtrackInfo;
-class AliTRDv0Info : public TObject
-{
-public:
-  enum ETRDv0Info{
-    kNV0param = 10
-    ,kNlayer   = AliTRDgeometry::kNlayer
-    ,kNDetectors = 3//TPC, TOF, ITS (TOF and ITS not implemented yet)
-    ,kNDaughters = 2//for positive and negative track
-    ,kNDecays = 4//number of decay types considered for reference data (conversions, K0s, Lambda, Anti-Lambda)  
-    ,kNMomBins = 2//number of different momentum bins to consider for different cuts; first example: below/above 2.5 GeV -> to be refined!
-  };
-
-  enum EDaughter{
-    kNeg = 0
-    ,kPos = 1
-  };
-
-  enum EDecayType{
-    kGamma = 0
-    ,kK0s = 1
-    ,kLambda = 2
-    ,kAntiLambda = 3
-  };
-
-  enum EDetector{
-    kTPC = 0
-    ,kTOF = 1
-    ,kITS = 2
-  };
-
-
-  AliTRDv0Info();
-  virtual ~AliTRDv0Info(){}
-
-/*   Float_t Pplus[2*kNlayer];       // Positives */
-/*   Float_t Pminus[2*kNlayer];      // Negatives */
-
-  void Print(Option_t *opt=0x0) const;
-  Bool_t GetV0PID(Int_t ipart, AliTRDtrackInfo *track);//decides if a track is accepted for one of the reference samples!!
-
-  //Set values of measured/calculated variables:
-  void SetQuality(Int_t SQuality){fQuality = SQuality;}
-  void SetPplus(Int_t iLayer, Float_t SPplus){fPplus[iLayer] = SPplus;}
-  void SetPminus(Int_t iLayer, Float_t SPminus){fPminus[iLayer] = SPminus;}
-  void SetDCA(Float_t SDCA){fDCA = SDCA;}
-  void SetMomentum(Float_t SMomentum){fMomentum = SMomentum;}
-  void SetPointingAngle(Float_t SPointingAngle){fPointingAngle = SPointingAngle;}
-  void SetOpenAngle(Float_t SOpenAngle){fOpenAngle = SOpenAngle;}
-  void SetPsiPair(Float_t SPsiPair){fPsiPair = SPsiPair;}
-  void SetRadius(Float_t SRadius){fRadius = SRadius;}
-  void SetInvMass(Int_t iDecay, Float_t SInvMass){fInvMass[iDecay] = SInvMass;}
-  void SetDetPID(Int_t iDaughter, Int_t iDetector, Int_t iSpecies, Float_t SDetPID){fDetPID[iDaughter][iDetector][iSpecies] = SDetPID;}
-
-//____________________________________________________________
- //Set cut values:
-
- void SetUpDCA(Int_t iDecay, Float_t UpDCA){fUpDCA[iDecay] = UpDCA;}
- void SetUpPointingAngle(Int_t iDecay, Float_t UpPointingAngle){fUpPointingAngle[iDecay] = UpPointingAngle;}
- void SetUpOpenAngle(Int_t iDecay, Float_t UpOpenAngle){fUpOpenAngle[iDecay] = UpOpenAngle;}
- void SetDownOpenAngle(Int_t iDecay, Float_t DownOpenAngle){fDownOpenAngle[iDecay] = DownOpenAngle;}
- void SetUpPsiPair(Int_t iDecay, Float_t UpPsiPair){fUpPsiPair[iDecay] = UpPsiPair;}
- void SetDownPsiPair(Int_t iDecay, Float_t DownPsiPair){fDownPsiPair[iDecay] = DownPsiPair;}
- void SetUpRadius(Int_t iDecay, Float_t UpRadius){fUpRadius[iDecay] = UpRadius;}
- void SetDownRadius(Int_t iDecay, Float_t DownRadius){fDownRadius[iDecay] = DownRadius;}
- void SetUpInvMass(Int_t iDecay, Int_t iMomentum, Double_t UpInvMass){fUpInvMass[iDecay][iMomentum] = UpInvMass;}
- void SetDownInvMass(Int_t iDecay, Double_t DownInvMass){fDownInvMass[iDecay] = DownInvMass;}
- void SetDownTPCPIDneg(Int_t iDecay, Double_t DownTPCPIDneg){fDownTPCPIDneg[iDecay] = DownTPCPIDneg;}
- void SetDownTPCPIDpos(Int_t iDecay, Double_t DownTPCPIDpos){fDownTPCPIDpos[iDecay] = DownTPCPIDpos;}
-
-
-private:
-  AliTRDv0Info(const AliTRDv0Info&);
-  AliTRDv0Info& operator=(const AliTRDv0Info&);
-
-  void GetESDv0Info(AliESDv0 *esdv0);//gets most of the variables below
-  void GetDetectorPID();//operating with likelihood values of different detectors
-  Int_t Quality(AliESDv0 * const esdv0);//checks for track/vertex quality criteria
-  Double_t InvMass(Int_t part1, Int_t part2, AliESDv0 *esdv0) const;//invariant mass of mother
-  Float_t PsiPair(AliESDv0 *esdv0);//angle between daughters in plane perpendicular to magnetic field (characteristically around zero for conversions)
-  Float_t OpenAngle(AliESDv0 *esdv0);//opening angle between V0 daughters; close to zero for conversions
-  Float_t Radius(AliESDv0 *esdv0);//distance of secondary to primary vertex in x-y-plane 
-  Float_t DCA() const {return fDCA;}//distance of closest approach between supposed daughter tracks
-  Float_t PointingAngle() const {return fPointingAngle;}//pointing angle: between vector from primary to secondary vertex and reconstructed momentum of V0 mother particle
-  Float_t V0Momentum(AliESDv0 *esdv0) const;//reconstructed momentum of V0 mother particle
-  void V0fromTrack(AliTRDtrackInfo * const track, Int_t ivertex);//checks if a track belongs to a vertex found by V0 finder
-  
-  AliESDEvent *fESD; // ESD event
-
-  Bool_t fHasV0; //Does this track belong to a vertex from a V0 finder?
-  Int_t fQuality;              // track quality status for both V0 daughters; OnFly, TPCrefit, Kinks, TPC clusters
-  Float_t fPplus[2*kNlayer];    // momentum and variance for the positive daughter  
-  Float_t fPminus[2*kNlayer];   // momentum and variance for the negative daughter  
-  Double_t fDetPID[kNDaughters][kNDetectors][AliPID::kSPECIES]; // PID provided by TPC, TOF and ITS
-
-  Float_t fMomentum;  // Momentum of track at the vertex
-
-  Float_t fDCA;  // Distance of closest approach of daughter tracks
-  
-  Float_t fPointingAngle;// = TMath::ACos(esdv0->GetV0CosineOfPointingAngle()); // Cosine of pointing angle
-  
-  Float_t fOpenAngle;  // opening angle between daughters
-  
-  Float_t fPsiPair; // /Angle between daughter momentum plane and plane perpendicular to magnetic field
-  
-  Double_t fInvMass[kNDecays];  // invariant mass for different decay scenarios (conversions, K0s, Lambda->p+pi-, Lambda->p-pi+)
-
-  Double_t fMagField; //magnetic field strength
-
-  Float_t fRadius; //distance of decay/conversion from primary vertex in x-y plane
-
-  Int_t fTrackID;//track index
-
-
-  Float_t fV0Momentum; //V0 mother's momentum
-
-  //____________________________________________________________
-  //Upper and lower limits for cut variables:
-
-  Float_t fUpDCA[kNDecays];                  // DCA, upper limit
-  Float_t fUpPointingAngle[kNDecays];        // pointing angle, upper limit
-  Float_t fUpOpenAngle[kNDecays];            // opening angle, upper limit
-  Float_t fDownOpenAngle[kNDecays];          // opening angle, lower limit
-  Float_t fUpPsiPair[kNDecays];              // psi angle, upper limit
-  Float_t fDownPsiPair[kNDecays];            // psi angle, lower limit
-  Double_t fUpInvMass[kNDecays][kNMomBins];  // invariant mass, upper limit
-  Double_t fDownInvMass[kNDecays];           // invariant mass, lower limit
-  Float_t fUpRadius[kNDecays];               // radius, upper limit
-  Float_t fDownRadius[kNDecays];             // radius, lower limit
-  Float_t fDownTPCPIDneg[AliPID::kSPECIES];  // TPC PID negatives, lower limit
-  Float_t fDownTPCPIDpos[AliPID::kSPECIES];  // TPC PID positives, lower limit
-  AliESDtrack *fTrackP; //positive daughter
-  AliESDtrack *fTrackN; //negative daughter
-  AliESDtrack *fTrack; //the current track in the ESDtrack loop (either positive or negative)
-
-
-  Int_t fNindex; //indices of positive and negative daughter track
-  Int_t fPindex; //indices of positive and negative daughter track
-  
-  
-  ClassDef(AliTRDv0Info, 0) // extracted V0 MC information
-};
-
-
-#endif
-
diff --git a/TRD/qaRec/info/Makefile b/TRD/qaRec/info/Makefile
deleted file mode 100644 (file)
index e4da831..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-SrcSuf        = cxx
-HdrSuf        = h
-ExeSuf        =
-ObjSuf        = o
-DllSuf        = so
-OutPutOpt     = -o
-
-CXX           = g++
-LD            = g++
-CXXFLAGS      = -O -fPIC
-LDFLAGS       = -O -fPIC
-SOFLAGS       = -shared
-
-ROOTCXX       = $(shell root-config --cflags)
-ROOTLIBS      = $(shell root-config --libs)
-
-ALICXX        = -I$(ALICE_ROOT)/include -I$(ALICE_ROOT)/TRD 
-
-CXXFLAGS     += $(ROOTCXX) $(ALICXX)
-
-# define module specific variables
-FILE_LIST =  $(shell ls -1 ./*.$(SrcSuf))
-FILES = $(basename $(FILE_LIST))
-DICTIONARIES = trdTrackInfoDict
-OBJECTS = $(addsuffix .$(ObjSuf),$(FILES))
-OBJECTS += ./$(DICTIONARIES).$(ObjSuf)
-
-#define headers
-HDRS = $(addsuffix .$(HdrSuf),$(FILES)) 
-HEADERS = $(notdir $(HDRS))
-
-# define libs on which the main lib depends ! (this are defined in config/Makefile.flags)
-LIBSDEPEND = $(ROOTLIBS) $(ALILIBS)
-# define libs build by module
-LIBS = libTRDtrackInfo.so
-
-
-# rule for building executables
-$(EXECS):      $(OBJECTS)
-       @echo -e "\E[31mBuild executable: \E[1;31m$@\E[0m"
-       @$(LD) $(LIBSDEPEND) $^ -o $@
-       
-# rule for building libraries
-%.$(DllSuf):   $(OBJECTS)
-       @echo -e "\E[31mBuild library: \E[1;31m$@\E[0m"
-       @$(LD) $(SOFLAGS) $(LIBSDEPEND) $^ -o $@
-       
-# rule for building objects
-%.$(ObjSuf):   %.$(SrcSuf)
-       @echo -e "\E[31mCompile : \E[1;31m$^\E[0m"
-       @$(CXX) $(CXXFLAGS) -c $< -o $@
-
-#rule for building dictionary
-%Dict.$(SrcSuf): %LinkDef.h
-       @echo -e "\E[31mGenerate dictionary : \E[1;31m$@\E[0m"
-       @rootcint -f $@ -c $(CXXFLAGS) $(HEADERS) $^
-
-all: $(OBJECTS) $(LIBS) $(EXECS)
-
-clean:
-       @rm -fv $(DICTIONARIES)
-       @rm -fv $(OBJECTS)
-       @rm -fv $(LIBS)
-       @rm -fv $(EXECS)
-       @if [ "$(LIBS)" != "" ]; then rm -fv lib/$(LIBS); fi
-       @if [ "$(EXECS)" != "" ]; then rm -fv bin/$(EXECS); fi
-       
-
diff --git a/TRD/qaRec/info/trdTrackInfoLinkDef.h b/TRD/qaRec/info/trdTrackInfoLinkDef.h
deleted file mode 100644 (file)
index f104359..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifdef __CINT__
-
-#pragma link off all globals;
-#pragma link off all classes;
-#pragma link off all functions;
-
-#pragma link C++ class AliTRDtrackInfo+;
-
-#endif
diff --git a/TRD/qaRec/macros/AddTRDcheckDET.C b/TRD/qaRec/macros/AddTRDcheckDET.C
deleted file mode 100644 (file)
index 720783e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "TRD/qaRec/AliTRDcheckDET.h"
-#include "TRD/qaRec/AliTRDcalibration.h"
-#endif
-
-#include "TRD/qaRec/macros/helper.C"
-void AddTRDcheckDET(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci/*, AliAnalysisDataContainer **co*/)
-{
-  Int_t map = ParseOptions(trd);
-  if(!(TSTBIT(map, kCheckDET))) return;
-
-  AliTRDcheckDET *task = 0x0;
-  mgr->AddTask(task = new AliTRDcheckDET());
-  task->SetDebugLevel(0);
-  task->SetMCdata(mgr->GetMCtruthEventHandler());
-  
-  // Create containers for input/output
-  mgr->ConnectInput( task, 0, ci[0]);
-  mgr->ConnectInput( task, 1, ci[1]);
-  mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
-  
-
-  // CALIBRATION
-  if(!(TSTBIT(map, kCalibration))) return;
-  AliTRDcalibration *ctask = 0x0;
-  mgr->AddTask(ctask = new AliTRDcalibration());
-  ctask->SetHisto2d(kTRUE);
-  ctask->SetVector2d(kTRUE);
-  ctask->SetVdriftLinear(kTRUE);
-  ctask->SetNz(0,0);
-  ctask->SetNrphi(0,0);
-  ctask->SetNz(0,1);
-  ctask->SetNrphi(0,1);
-  ctask->SetNz(0,2);
-  ctask->SetNrphi(0,2);
-  ctask->SetLow(0);
-  ctask->SetHigh(30);
-  ctask->SetFillZero(kFALSE);
-  ctask->SetDebugLevel(1);
-
-  // Create containers for input/output
-  mgr->ConnectInput(ctask, 0, ci[0]);
-  mgr->ConnectOutput(ctask, 0, mgr->CreateContainer(ctask->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", ctask->GetName())));
-}
diff --git a/TRD/qaRec/macros/AddTRDcheckESD.C b/TRD/qaRec/macros/AddTRDcheckESD.C
deleted file mode 100644 (file)
index b0b2d89..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/AliTRDcheckESD.h"
-#endif
-
-void AddTRDcheckESD(AliAnalysisManager *mgr)
-{
-  AliTRDcheckESD *checkESD = new AliTRDcheckESD();
-  checkESD->SetMC(mgr->GetMCtruthEventHandler());
-  mgr->AddTask(checkESD);
-  mgr->ConnectInput(checkESD, 0, mgr->GetCommonInputContainer());  mgr->ConnectOutput(checkESD, 0, mgr->CreateContainer(checkESD->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
-}
-
diff --git a/TRD/qaRec/macros/AddTRDcheckPID.C b/TRD/qaRec/macros/AddTRDcheckPID.C
deleted file mode 100644 (file)
index dc737c5..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "TTree.h"
-#include "AliLog.h"
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "TRD/qaRec/AliTRDcheckPID.h"
-#include "TRD/qaRec/AliTRDpidRefMaker.h"
-#endif
-
-#include "TRD/qaRec/macros/helper.C"
-void AddTRDcheckPID(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci/*, AliAnalysisDataContainer **co*/)
-{
-  Int_t map = ParseOptions(trd);
-  if(TSTBIT(map, kCheckPID)){
-    AliTRDcheckPID *pid = 0x0;
-    mgr->AddTask(pid = new AliTRDcheckPID());
-    pid->SetDebugLevel(0);
-    pid->SetMCdata(mgr->GetMCtruthEventHandler());
-    mgr->ConnectInput(pid, 0, ci[0]);
-    mgr->ConnectOutput(pid, 0, mgr->CreateContainer(pid->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
-  }
-
-  if(TSTBIT(map, kPIDRefMaker)){
-    // TRD pid reference maker 
-    AliTRDpidRefMaker *ref = new AliTRDpidRefMaker(); 
-    mgr->AddTask(ref);
-    ref->SetDebugLevel(3);
-    AliLog::SetClassDebugLevel("AliTRDpidRefMaker", 3);
-    ref->SetMCdata(mgr->GetMCtruthEventHandler());
-    ref->SetFriends(kTRUE);
-    mgr->ConnectInput( ref, 0, ci[0]);
-    mgr->ConnectInput( ref, 1, ci[2]);
-    mgr->ConnectOutput(ref, 0, mgr->CreateContainer(Form("Moni%s", ref->GetName()), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Calib%s.root", ref->GetName())));
-    mgr->ConnectOutput(ref, 1, mgr->CreateContainer(ref->GetName(), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Calib%s.root", ref->GetName())));
-  }
-}
-
diff --git a/TRD/qaRec/macros/AddTRDefficiency.C b/TRD/qaRec/macros/AddTRDefficiency.C
deleted file mode 100644 (file)
index 6064653..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "TRD/qaRec/AliTRDefficiency.h"
-#include "TRD/qaRec/AliTRDefficiencyMC.h"
-#include "TRD/qaRec/AliTRDmultiplicity.h"
-#endif
-
-#include "TRD/qaRec/macros/helper.C"
-void AddTRDefficiency(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci/*, AliAnalysisDataContainer **co*/)
-{
-  Int_t map = ParseOptions(trd);
-  if(!(TSTBIT(map, kEfficiency))) return;
-
-  Bool_t mc = mgr->GetMCtruthEventHandler();
-  AliTRDefficiency *eff = 0x0;
-  mgr->AddTask(eff = new AliTRDefficiency());
-  eff->SetDebugLevel(0);
-  mgr->ConnectInput(eff, 0, ci[0]);
-  mgr->ConnectOutput(eff, 0, mgr->CreateContainer(eff->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
-    
-
-  // TRD combined tracking efficiency
-  AliTRDefficiencyMC *effMC = 0x0;
-  if(mc && TSTBIT(map, kEfficiencyMC)){
-    mgr->AddTask(effMC = new AliTRDefficiencyMC());
-    effMC->SetDebugLevel(0);
-
-    // Create containers for input/output
-    mgr->ConnectInput(effMC, 0, ci[0]);
-    mgr->ConnectOutput(effMC, 0, mgr->CreateContainer(effMC->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", effMC->GetName())));
-  }
-
-  // TRD single track selection
-  if(!(TSTBIT(map, kMultiplicity))) return;
-
-  AliTRDmultiplicity *mult = 0x0;
-  mgr->AddTask(mult = new AliTRDmultiplicity());
-  mult->SetDebugLevel(0);
-  mgr->ConnectInput(mult, 0, ci[0]);
-  mgr->ConnectOutput(mult, 0, mgr->CreateContainer(mult->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", mult->GetName())));
-}
-
diff --git a/TRD/qaRec/macros/AddTRDinfoGen.C b/TRD/qaRec/macros/AddTRDinfoGen.C
deleted file mode 100644 (file)
index 5d52275..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/AliTRDinfoGen.h"
-#include "TRD/qaRec/info/AliTRDeventInfo.h"
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#endif
-
-#include "TRD/qaRec/macros/helper.C"
-void AddTRDinfoGen(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **/*ci*/, AliAnalysisDataContainer **co)
-{
-  Int_t map = ParseOptions(trd);
-  if(!(TSTBIT(map, kInfoGen))) return;
-
-  AliTRDinfoGen *info = 0x0;
-  mgr->AddTask(info = new AliTRDinfoGen());
-  info->SetDebugLevel(0);
-  info->SetMCdata(mgr->GetMCtruthEventHandler());
-  mgr->ConnectInput( info, 0, mgr->GetCommonInputContainer());
-  co[0] = mgr->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
-  co[1] = mgr->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer);
-  co[2] = mgr->CreateContainer("v0Info", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
-  mgr->ConnectOutput(info, 0, co[0]);
-  mgr->ConnectOutput(info, 1, co[1]);
-  mgr->ConnectOutput(info, 2, co[2]);
-}
-
diff --git a/TRD/qaRec/macros/AddTRDresolution.C b/TRD/qaRec/macros/AddTRDresolution.C
deleted file mode 100644 (file)
index 24f3698..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "TTree.h"
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "TRD/qaRec/AliTRDresolution.h"
-#include "TRD/qaRec/AliTRDclusterResolution.h"
-#include "TRD/qaRec/AliTRDalignmentTask.h"
-#endif
-
-#include "TRD/qaRec/macros/helper.C"
-void AddTRDresolution(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci/*, AliAnalysisDataContainer **co*/)
-{
-  Int_t map = ParseOptions(trd);
-  AliTRDresolution *task = 0x0;
-  if(!TSTBIT(map, kResolution)) return;
-  mgr->AddTask(task = new AliTRDresolution());
-  task->SetMCdata(mgr->GetMCtruthEventHandler());
-  task->SetPostProcess(kFALSE);
-  task->SetDebugLevel(1);
-  mgr->ConnectInput( task, 0, ci[0]);
-  mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
-
-  // Create output containers for calibration tasks
-  const Int_t nc = 4;
-  const Char_t *cn[nc] = {"Cl", "Trklt", "MC_Cl", "MC_Trklt"}; 
-  AliAnalysisDataContainer *co[] = {0x0, 0x0, 0x0, 0x0};
-  for(Int_t ic = 0; ic<nc; ic++){
-    co[ic] = mgr->CreateContainer(Form("%s%s", task->GetName(), cn[ic]), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
-    mgr->ConnectOutput(task, 1+ic, co[ic]);
-  }
-
-  // Cluster Error Parameterization
-  if(TSTBIT(map, kClErrParam)){
-    AliTRDclusterResolution *taskCl = 0x0;
-    mgr->AddTask(taskCl = new AliTRDclusterResolution("ESD", "ESD Cluster error parameterization"));
-    taskCl->SetExB();
-    mgr->ConnectInput(taskCl, 0, co[0]);
-    mgr->ConnectOutput(taskCl, 0, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
-
-    mgr->AddTask(taskCl = new AliTRDclusterResolution("MC", "MC Cluster error parameterization"));
-    taskCl->SetExB();
-    mgr->ConnectInput(taskCl, 0, co[2]);
-    mgr->ConnectOutput(taskCl, 0, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
-  }
-
-  // TRD alignment
-  if(TSTBIT(map, kAlignment)){
-    AliTRDalignmentTask *taskAl = 0x0;
-    mgr->AddTask(taskAl = new AliTRDalignmentTask());
-    taskAl->SetDebugLevel(0);
-    mgr->ConnectInput(taskAl, 0, ci[0]);  
-    mgr->ConnectOutput(taskAl, 0, mgr->CreateContainer(Form("h%s", taskAl->GetName()), TObjArray::Class(), AliAnalysisManager::kExchangeContainer));
-    mgr->ConnectOutput(taskAl, 1, mgr->CreateContainer(task->GetName(), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Calib%s.root", task->GetName())));
-  }
-}
-
diff --git a/TRD/qaRec/macros/AliTRDperformanceTrain.h b/TRD/qaRec/macros/AliTRDperformanceTrain.h
deleted file mode 100644 (file)
index e0f3ede..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef ALITRDPERFORMANCETRAIN_H
-#define ALITRDPERFORMANCETRAIN_H
-
-#define BITBIT(n)      (1 << (n))
-#define SETBITT(n,i) ((n) |= BITBIT(i))
-#define TSTBIT(n,i) ((Bool_t)(((n) & BITBIT(i)) != 0))
-#define CLRBITT(n,i) ((n) &= ~BITBIT(i))
-
-#define NTRDQATASKS 6
-#define NTRDCALIBTASKS 6
-/* #define NTRDCALIBTASKS 7 */
-const Int_t NTRDTASKS = NTRDQATASKS+NTRDCALIBTASKS;
-
-enum AliTRDrecoTasks{
-   kCheckESD      = 0
-  ,kInfoGen       = 1
-  ,kCheckDET      = 2
-  ,kEfficiency    = 3
-  ,kResolution    = 4
-  ,kCheckPID      = 5
-  ,kCalibration   = 6
-  ,kEfficiencyMC  = 7
-  ,kAlignment     = 8
-  ,kPIDRefMaker = 9
-/*   ,kPIDRefMakerLQ = 9 */
-/*   ,kPIDRefMakerNN =10 */
-/*   ,kClErrParam    =11 */
-/*   ,kMultiplicity  =12 */
-  ,kClErrParam    =10
-  ,kMultiplicity  =11
-};
-
-const Char_t* fgkTRDtaskClassName[NTRDTASKS] = {
-  "AliTRDcheckESD"
-  ,"AliTRDinfoGen"
-  ,"AliTRDcheckDET"
-  ,"AliTRDefficiency"
-  ,"AliTRDresolution"
-  ,"AliTRDcheckPID"
-  ,"AliTRDcalibration"
-  ,"AliTRDefficiencyMC"
-  ,"AliTRDalignmentTask"
-  ,"AliTRDpidRefMaker"
-/*   ,"AliTRDpidRefMakerLQ" */
-/*   ,"AliTRDpidRefMakerNN" */
-  ,"AliTRDclusterResolution"
-  ,"AliTRDmultiplicity"
-};
-
-const Char_t *fgkTRDtaskOpt[NTRDTASKS+1] = {
-  ""
-  ,"GEN"
-  ,"DET"
-  ,"EFF"
-  ,"RES"
-  ,"PID"
-  ,"CAL"
-  ,"EFFC"
-  ,"ALGN"
-  ,"PIDR"
-/*   ,"LQR" */
-/*   ,"NNR" */
-  ,"CLRES"
-  ,"MULT"
-  ,"ALL"
-};
-
-#include <cstring>
-
-//____________________________________________
-Bool_t HasReadMCData(Char_t *opt){
-  return !(Bool_t)strstr(opt, "NOMC");
-}
-
-//____________________________________________
-Bool_t HasReadFriendData(Char_t *opt){
-  return !(Bool_t)strstr(opt, "NOFR");
-}
-
-#endif
-
diff --git a/TRD/qaRec/macros/AliTrackletsinTRD.C b/TRD/qaRec/macros/AliTrackletsinTRD.C
deleted file mode 100644 (file)
index dc63df4..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * 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.                  *
- **************************************************************************/
-
-////////////////////////////////////////////////////////////////////////////
-//                                                                        //
-//  Reconstruction QA                                                     //
-//                                                                        //
-//  Authors: Yvonne C. Pachmayer <pachmay@physi.uni-heidelberg.de>        //
-//                                                                        //
-////////////////////////////////////////////////////////////////////////////
-
-
-#define AliTrackletsinTRD_cxx
-#include "AliTrackletsinTRD.h"
-#include <TH2.h>
-#include <TStyle.h>
-#include <TCanvas.h>
-
-void AliTrackletsinTRD::Loop()
-{
-    //   In a ROOT session, you can do:
-    //      Root > .L AliTrackletsinTRD.C
-    //      Root > AliTrackletsinTRD t
-    //      Root > t.GetEntry(12); // Fill t data members with entry number 12
-    //      Root > t.Show();       // Show values of entry 12
-    //      Root > t.Show(16);     // Read and show values of entry 16
-    //      Root > t.Loop();       // Loop on all entries
-    //
-
-    //     This is the loop skeleton where:
-    //    jentry is the global entry number in the chain
-    //    ientry is the entry number in the current Tree
-    //  Note that the argument to GetEntry must be:
-    //    jentry for TChain::GetEntry
-    //    ientry for TTree::GetEntry and TBranch::GetEntry
-    //
-    //       To read only selected branches, Insert statements like:
-    // METHOD1:
-    //    fChain->SetBranchStatus("*",0);  // disable all branches
-    //    fChain->SetBranchStatus("branchname",1);  // activate branchname
-    // METHOD2: replace line
-    //    fChain->GetEntry(jentry);       //read all branches
-    //by  b_branchname->GetEntry(ientry); //read only this branch
-
-    gROOT->SetStyle("Plain");
-    gStyle->SetPalette(1);
-
-
-    if (fChain == 0) return;
-
-    // open run loader and load gAlice, kinematics and header
-    AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
-    if (!runLoader)
-    {
-        printf("Error: readKine:\nGetting run loader from file \"%s\" failed", filename);
-        return;
-    }
-
-    runLoader->LoadHeader();
-    runLoader->LoadRecPoints("TRD");
-    TObjArray *module = new TObjArray();
-
-    runLoader->CdGAFile();
-
-    Int_t nEvents = runLoader->GetNumberOfEvents();
-    const Int_t nEventsarray=nEvents;
-    AliTRDcluster *cls = 0;
-
-    Double_t x_clus[540][90];
-    Double_t y_clus[540][90];
-
-    for(Int_t ev = 0; ev < nEvents - 1; ev++)
-    {
-        TTree *tree = runLoader->GetTreeR("TRD", 0);
-        tree->SetBranchAddress("TRDcluster", &module);
-
-        int N = tree->GetEntries(); // number of chamber, max 540
-        // Check number of clusters
-        for(Int_t ind = 0; ind < N; ind++)
-        {
-            tree->GetEntry(ind);
-            Int_t m = module->GetEntries();
-
-            for (Int_t j = 0; j < m; j++)    // loop over clusters of one chamber
-            {
-                if(j>=90) break;
-                if (cls != 0) delete cls;
-                cls = (AliTRDcluster*)module->At(j);
-                x_clus[ind][j]=cls->GetX();
-                y_clus[ind][j]=cls->GetY();
-
-            }
-        }
-
-
-
-        // loop over debug file and analysis
-
-        Float_t xbmin = 0., xbmax = 380.;
-        /* // histogram for debugging purpose
-        Int_t nxbins = 3000, nybins = 280;
-        Float_t ybmin = -70., ybmax = 70.;
-        hxy = new TH2F("hxy",";x;y",nxbins,xbmin,xbmax,nybins,ybmin,ybmax);
-        */
-
-        Long64_t nentries = fChain->GetEntriesFast();
-
-        Long64_t nbytes = 0, nb = 0;
-        Float_t xpos[6];
-        Float_t ypos[6];
-        Int_t counter_test;
-        for (Long64_t jentry=0; jentry<nentries;jentry++) {
-            Long64_t ientry = LoadTree(jentry);
-            if (ientry < 0) break;
-            nb = fChain->GetEntry(jentry);   nbytes += nb;
-            xpos[flayer]=fxtrack;
-            ypos[flayer]=fytrack;
-
-
-            if(flayer==5)
-            {
-                Float_t x[6]= {xpos[0],xpos[1],xpos[2],xpos[3],xpos[4],xpos[5]};
-                Float_t y[6]= {ypos[0],ypos[1],ypos[2],ypos[3],ypos[4],ypos[5]};
-
-                gxy = new TGraph(6,x,y);
-
-                TF1 *f1 = new TF1("f1","pol1",xbmin,xbmax);
-                gxy->Fit("f1","RQ");
-                // resulting function: y=ax+b --> x*f1->GetParameter(1)+f1->GetParameter(0)
-
-                // graph and fit plotting only for checking
-                /*
-                 c1 = new TCanvas("c1","hough Transform",0,0,800,800);
-                 c1->cd(1);
-                 hxy->Draw();
-                 gxy->SetMarkerStyle(3);
-                 gxy->Draw("p");
-                 */
-
-                Float_t px;
-                Float_t py;
-
-                if(feventcounter==ev)
-                {
-                    for(Int_t b=0;b<540;b++)
-                    {
-                        if(b==fdettracklet)
-                        {
-                            Int_t counter_distcalc;
-                            Float_t distance_sum=0;
-
-                            for(Int_t c=0;c<90;c++)
-                            {
-                                px=0;
-                                py=0;
-
-                                px=x_clus[b][c];
-                                py=y_clus[b][c];
-
-                                if(px!=0 &&  py!=0)
-                                {
-                                    // Function to calculate the distance of a point to the above fitted function
-                                    Double_t distance = 0;
-                                    if((TMath::Sqrt(f1->GetParameter(1)*f1->GetParameter(1)+1))!=0) distance=TMath::Abs(f1->GetParameter(1)*px-py+f1->GetParameter(0))/(TMath::Sqrt(f1->GetParameter(1)*f1->GetParameter(1)+1));
-                                    // if(distance<10) cout << eventcounter << " " << b << " " << c << " " <<   distance << endl;
-                                    if(distance>0.6 && distance<=2)
-                                    {
-                                        counter_distcalc++;
-                                        distance_sum+=distance;
-                                    }
-                                }
-
-                            }
-                            if(counter_distcalc!=0)
-                            {
-                                // these are tracks which have additional clusters close by: 0.6 < distance <= 2
-                            }
-                            else
-                            {
-                                // these are good tracks no additional clusters close by
-                               cout <<" good tracks " <<  endl;
-                            }
-                            counter_distcalc=0;
-                        }
-                    }
-                }
-
-                if(gxy) delete gxy;
-                if(f1) delete f1;
-            } // end of 5 layer loop
-
-
-           
-
-
-        }  // end loop over debug file and analysis
-
-        runLoader->GetNextEvent();
-    }
-
-}
\ No newline at end of file
diff --git a/TRD/qaRec/macros/AliTrackletsinTRD.h b/TRD/qaRec/macros/AliTrackletsinTRD.h
deleted file mode 100644 (file)
index 1e082f9..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-//////////////////////////////////////////////////////////
-// This class has been automatically generated on
-// Fri Mar 20 09:42:44 2009 by ROOT version 5.21/01
-// from TTree AliTrackletsinTRD/AliTrackletsinTRD
-// found on file: TRD.DebugTrackingMultiplicity.root
-//////////////////////////////////////////////////////////
-
-#ifndef ALITRACKLETSINTRD_h
-#define ALITRACKLETSINTRD_h
-
-#include <TROOT.h>
-#include <TChain.h>
-#include <TFile.h>
-
-class AliTrackletsinTRD {
-public :
-   TTree           *fChain;   //!pointer to the analyzed TTree or TChain
-   Int_t           fCurrent; //!current Tree number in a TChain
-
-   // Declaration of leaf types
-   Int_t           fstandalone;   //!flag is track reconstructed in TPC only or TPC+TRD
-   Int_t           feventcounter; //!event number
-   Int_t           flayer;        //!layer number
-   Float_t         fxtracklet;    //!x position of tracklet
-   Double_t        fxtrack;       //!x position of track
-   Float_t         fytracklet;    //!y position of tracklet
-   Double_t        fytrack;       //!y position of track
-   Float_t         fztracklet;    //!z position of tracklet
-   Double_t        fztrack;       //!z position of track
-   Int_t           fnumtracklets; //!number of tracklets
-   Int_t           fdettracklet;  //!detector number
-
-   // List of branches
-   TBranch        *fbB0;   //!
-   TBranch        *fbB1;   //!
-   TBranch        *fbB2;   //!
-   TBranch        *fbB3;   //!
-   TBranch        *fbB4;   //!
-   TBranch        *fbB5;   //!
-   TBranch        *fbB6;   //!
-   TBranch        *fbB7;   //!
-   TBranch        *fbB8;   //!
-   TBranch        *fbB9;   //!
-   TBranch        *fbB10;  //!
-
-   AliTrackletsinTRD(TTree *tree=0);
-   virtual ~AliTrackletsinTRD();
-   virtual Int_t    Cut(Long64_t entry);
-   virtual Int_t    GetEntry(Long64_t entry);
-   virtual Long64_t LoadTree(Long64_t entry);
-   virtual void     Init(TTree *tree);
-   virtual void     Loop();
-   virtual Bool_t   Notify();
-   virtual void     Show(Long64_t entry = -1);
-
-
-   AliTrackletsinTRD (AliTrackletsinTRD& p):
-       fChain(p.fChain),
-       fbB0(p.fbB0),
-       fbB1(p.fbB1),
-       fbB2(p.fbB2),
-       fbB3(p.fbB3),
-       fbB4(p.fbB4),
-       fbB5(p.fbB5),
-       fbB6(p.fbB6),
-       fbB7(p.fbB7),
-       fbB8(p.fbB8),
-       fbB9(p.fbB9),
-       fbB10(p.fbB10)
-   {
-   }
-
-};
-
-  
-
-AliTrackletsinTRD::AliTrackletsinTRD(TTree *tree)
-{
-// if parameter tree is not specified (or zero), connect the file
-// used to generate this class and read the Tree.
-   if (tree == 0) {
-      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("/alidata80/alice_u/pachmay/AliRoot/v4-16-Rev-01/TRD/qaRec/TRD.DebugTrackingMultiplicity.root");
-      if (!f) {
-         f = new TFile("/alidata80/alice_u/pachmay/AliRoot/v4-16-Rev-01/TRD/qaRec/TRD.DebugTrackingMultiplicity.root");
-      }
-      tree = (TTree*)gDirectory->Get("TrackletsinTRD");
-
-   }
-   Init(tree);
-}
-
-AliTrackletsinTRD::~AliTrackletsinTRD()
-{
-   if (!fChain) return;
-   delete fChain->GetCurrentFile();
-}
-
-Int_t AliTrackletsinTRD::GetEntry(Long64_t entry)
-{
-// Read contents of entry.
-   if (!fChain) return 0;
-   return fChain->GetEntry(entry);
-}
-Long64_t AliTrackletsinTRD::LoadTree(Long64_t entry)
-{
-// Set the environment to read one entry
-   if (!fChain) return -5;
-   Long64_t centry = fChain->LoadTree(entry);
-   if (centry < 0) return centry;
-   if (!fChain->InheritsFrom(TChain::Class()))  return centry;
-   TChain *chain = (TChain*)fChain;
-   if (chain->GetTreeNumber() != fCurrent) {
-      fCurrent = chain->GetTreeNumber();
-      Notify();
-   }
-   return centry;
-}
-
-void AliTrackletsinTRD::Init(TTree *tree)
-{
-   // The Init() function is called when the selector needs to initialize
-   // a new tree or chain. Typically here the branch addresses and branch
-   // pointers of the tree will be set.
-   // It is normally not necessary to make changes to the generated
-   // code, but the routine can be extended by the user if needed.
-   // Init() will be called many times when running on PROOF
-   // (once per file to be processed).
-
-   // Set branch addresses and branch pointers
-   if (!tree) return;
-   fChain = tree;
-   fCurrent = -1;
-   fChain->SetMakeClass(1);
-
-   fChain->SetBranchAddress("standalone", &fstandalone, &fbB0);
-   fChain->SetBranchAddress("eventcounter", &feventcounter, &fbB1);
-   fChain->SetBranchAddress("layer", &flayer, &fbB2);
-   fChain->SetBranchAddress("xtracklet", &fxtracklet, &fbB3);
-   fChain->SetBranchAddress("xtrack", &fxtrack, &fbB4);
-   fChain->SetBranchAddress("ytracklet", &fytracklet, &fbB5);
-   fChain->SetBranchAddress("ytrack", &fytrack, &fbB6);
-   fChain->SetBranchAddress("ztracklet", &fztracklet, &fbB7);
-   fChain->SetBranchAddress("ztrack", &fztrack, &fbB8);
-   fChain->SetBranchAddress("num_tracklets", &fnumtracklets, &fbB9);
-   fChain->SetBranchAddress("dettracklet", &fdettracklet, &fbB10);
-   Notify();
-}
-
-Bool_t AliTrackletsinTRD::Notify()
-{
-   // The Notify() function is called when a new file is opened. This
-   // can be either for a new TTree in a TChain or when when a new TTree
-   // is started when using PROOF. It is normally not necessary to make changes
-   // to the generated code, but the routine can be extended by the
-   // user if needed. The return value is currently not used.
-
-   return kTRUE;
-}
-
-void AliTrackletsinTRD::Show(Long64_t entry)
-{
-// Print contents of entry.
-// If entry is not specified, print current entry
-   if (!fChain) return;
-   fChain->Show(entry);
-}
-Int_t AliTrackletsinTRD::Cut(Long64_t entry)
-{
-// This function may be called from Loop.
-// returns  1 if entry is accepted.
-// returns -1 otherwise.
-   return 1;
-}
-#endif // #ifdef AliTrackletsinTRD_cxx
diff --git a/TRD/qaRec/macros/EVE/PH.C b/TRD/qaRec/macros/EVE/PH.C
deleted file mode 100644 (file)
index 4223e9c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#if !defined(__CINT__) || defined(__MAKECINT__)
-#include <TROOT.h>
-#include <TProfile.h>
-
-#include <TRD/AliTRDgeometry.h>
-#include <TRD/AliTRDcalibDB.h>
-#include <TRD/AliTRDcluster.h>
-#include <TRD/AliTRDseedV1.h>
-#include <TRD/AliTRDtrackV1.h>
-#endif
-
-TH1* PH(const AliTRDtrackV1* track)
-{
-  if (!track)  return 0x0;
-  
-  AliTRDcluster* cls = 0;
-  AliTRDseedV1 *tracklet = 0x0;
-  
-  TProfile* ph = 0x0;
-  if(!(ph = (TProfile*)gROOT->FindObject("PH"))){
-    Int_t ntb = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
-    ph = new TProfile("PH", "Average PH", ntb, -.5, ntb-.5);
-    ph->GetXaxis()->SetTitle("drift time [1/100ns]");
-    ph->GetYaxis()->SetTitle("<PH> [a.u.]");
-  } else ph->Reset();
-
-
-  for (Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++) {
-    if(!(tracklet = track->GetTracklet(ily))) continue;
-    if(!tracklet->IsOK()) continue;
-    
-    for (Int_t icl = 0; icl < AliTRDseed::knTimebins; icl++) {
-      if(!(cls = tracklet->GetClusters(icl))) continue;
-            
-           ph->Fill(cls->GetLocalTimeBin(), cls->GetQ());
-         }
-  }
-
-  return ph;
-}
-
diff --git a/TRD/qaRec/macros/EVE/nclusters.C b/TRD/qaRec/macros/EVE/nclusters.C
deleted file mode 100644 (file)
index eb7344a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#if !defined(__CINT__) || defined(__MAKECINT__)
-#include <TRD/AliTRDcluster.h>
-#include <TRD/AliTRDseedV1.h>
-#include <TRD/AliTRDtrackV1.h>
-#endif
-
-void nclusters(const AliTRDtrackV1* track, Double_t* &res, Int_t& n)
-{
-  if (!track)  return;
-
-  n = 1;
-  res = new Double_t[n];
-  res[0] = track->GetNumberOfClusters();
-  return;
-}
-
diff --git a/TRD/qaRec/macros/PID/ConvertMLPs.C b/TRD/qaRec/macros/PID/ConvertMLPs.C
deleted file mode 100644 (file)
index b839cd1..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// This macro converts the networks that were saved by the AliTRDpidRefMaker to a root file (NN.root)
-// which is readable by the AliTRDpidCDB.C macro to create the pid reference data bases.
-
-#ifndef __CINT__
-#include "TFile.h"
-#include "TMultiLayerPerceptron.h"
-#include "TEventList.h"
-#include "TTree.h"
-#include "TObject.h"
-
-#include "AliTRDgeometry.h"
-#include "AliTRDpidUtil.h"
-#include "Cal/AliTRDCalPID.h"
-#endif
-
-Int_t ConvertMLPs(Int_t iDate = 20090129){
-
-  const Int_t nCha = AliTRDgeometry::kNlayer;
-
-  TFile *fOut = new TFile("NN.root","RECREATE");
-    
-  Float_t fv0pid[AliPID::kSPECIES], fdEdx[AliTRDpidUtil::kNNslices];
-
-  for(Int_t iMomBin = 0; iMomBin <AliTRDCalPID::kNMom; iMomBin++){
-
-// Load the TFile and the TTree to load the weights of the TMultiLayerPerceptron
-    TFile *fIn = new TFile(Form("./%3.1fGeV/TRD.TaskPidRefMakerNN.root",AliTRDCalPID::GetMomentum(iMomBin)),"READ");
-    TTree *tIn = (TTree *) fIn -> Get("NN");
-
-// Create dummy TEventLists to load the weights of the TMultiLayerPerceptron
-    TEventList* lTrainData = new TEventList();
-    TEventList* lTestData = new TEventList();
-    lTrainData -> Enter(1);
-    lTestData -> Enter(1);
-  
-    tIn -> SetEventList(lTrainData);
-    tIn -> SetEventList(lTestData);
-    
-    Char_t structure[1024];
-
-    TMultiLayerPerceptron *mNet[nCha];
-    
-    for(Int_t iCha = 0; iCha < nCha; iCha++){
-      sprintf(structure,"fdEdx[0],fdEdx[1],fdEdx[2],fdEdx[3],fdEdx[4],fdEdx[5],fdEdx[6],fdEdx[7]:15:7:fv0pid[0],fv0pid[1],fv0pid[2],fv0pid[3],fv0pid[4]!");      
-      mNet[iCha] = new TMultiLayerPerceptron(structure,tIn,lTrainData,lTestData);
-
-      printf("Network[%d] is ./%3.1fGeV/Network_%d/MomBin_%d/Net%d_49\n", iCha, AliTRDCalPID::GetMomentum(iMomBin), iDate, iMomBin, iCha);
-      mNet[iCha] -> LoadWeights(Form("./%3.1fGeV/Network_%d/MomBin_%d/Net%d_49", AliTRDCalPID::GetMomentum(iMomBin), iDate, iMomBin, iCha));
-    }
-    
-    fOut -> cd();
-    for(Int_t iCha = 0; iCha < AliTRDgeometry::kNlayer; iCha++){
-      mNet[iCha] -> Write(Form("NN_Mom%d_Plane%d",iMomBin,iCha));
-    }
-  }
-
-  fOut -> Close();
-
-  return 1;
-    
-}
-
diff --git a/TRD/qaRec/macros/PID/MonitorTraining.C b/TRD/qaRec/macros/PID/MonitorTraining.C
deleted file mode 100644 (file)
index 1d288eb..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-//   This macro helps to decide if the training was successful and in addition
-//   if further training of the network is necessary. The shape of the training
-//   progress should have a first deep stall and reaching a plateau. After several
-//   training epochs the plateau will become a sloping line. If this slope results 
-//   again in a flat plateau the training is probably done.
-//   The networks were saved using the date they were trained (yyyymmdd).
-// 
-//   Please enter the date of the network you want to monitor and the momentum bin..
-//   Bin  0 =  0.6 GeV/c
-//   Bin  1 =  0.8 GeV/c
-//   Bin  2 =  1.0 GeV/c
-//   Bin  3 =  1.5 GeV/c
-//   Bin  4 =  2.0 GeV/c
-//   Bin  5 =  3.0 GeV/c
-//   Bin  6 =  4.0 GeV/c
-//   Bin  7 =  5.0 GeV/c
-//   Bin  8 =  6.0 GeV/c
-//   Bin  9 =  8.0 GeV/c
-//   Bin 10 = 10.0 GeV/c
-
-#ifndef __CINT__
-#include "TSystem.h"
-#include "qaRec/AliTRDpidRefMaker.h"
-#endif
-
-Int_t MonitorTraining(Int_t bin, Int_t Date){
-
-  gSystem -> Load("libANALYSIS.so");
-  gSystem -> Load("libTRDqaRec.so");
-  
-  AliTRDpidRefMaker *ref = new AliTRDpidRefMaker();
-  ref->SetDebugLevel(2);
-
-  ref->SetDate(Date);
-  ref->MakeTrainingLists();
-  ref->MonitorTraining(bin);
-  
-  return 1;
-
-}
diff --git a/TRD/qaRec/macros/PID/makeTrainingData.C b/TRD/qaRec/macros/PID/makeTrainingData.C
deleted file mode 100644 (file)
index f7434a6..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-// This macro splits the file created by the AliTRDpidRefMaker to smaller training 
-// samples according to the momentum of the track in order to increase the training 
-// speed for the TMultiLayerPerceptrons.
-// The procedure is the following:
-// 1. Create a directory where the training should take place
-// 2. Copy the TRD.TaskPidRefMakerNN.root and the TRD.TaskPidRefMakerLQ.root in this directory.
-// 3. Run makeTrainingDataNN(). This creates new directories: 0.6GeV, 0.8GeV, ..., 10.0GeV and 
-//    create a subset of the training data according to the momentum.
-// 4. Run makeDataLQ(). Does the same as make TraiingDataNN for the LQ data without the creation
-//    of the directories.
-// 5. Run CreateDummy() to create a TRD.TaskPidRefMaker.root file. This is necessary for the 
-//    monitoring of the training progress.
-// 6. Go to the subdirectories and run the training.
-
-#ifndef __CINT__
-#include "TROOT.h"
-#include "TSystem.h"
-#include "TFile.h"
-#include "TTree.h"
-#include "TBranch.h"
-#include "TObjArray.h"
-#include "TGraphErrors.h"
-
-#include "AliPID.h"
-#include "AliTRDpidUtil.h"
-#include "Cal/AliTRDCalPID.h"
-#include "qaRec/AliTRDpidRefMasker.h"
-#endif
-
-Int_t makeTrainingDataNN(){
-
-  Int_t fLayer;
-  Float_t fMom, fv0pid[AliPID::kSPECIES], fdEdx[AliTRDpidUtil::kNNslices];
-
-  AliTRDpidUtil Util;
-  TFile *fIn = new TFile("../TRD.TaskPidRefMakerNN.root","READ");
-  TTree *tIn = (TTree*) fIn -> Get("NN");
-
-  tIn -> SetBranchAddress("fLayer", &fLayer);
-  tIn -> SetBranchAddress("fMom", &fMom);
-  tIn -> SetBranchAddress("fv0pid", fv0pid);
-  tIn -> SetBranchAddress("fdEdx", fdEdx);
-
-  for(Int_t iMomBin = 0; iMomBin < AliTRDCalPID::kNMom; iMomBin++){
-
-    gSystem->Exec(Form("mkdir -v ./%3.1fGeV",AliTRDCalPID::GetMomentum(iMomBin)));
-
-    printf("Extracting training set for momentum bin %3.1f GeV/c\n", AliTRDCalPID::GetMomentum(iMomBin));
-    TFile *fOut = new TFile(Form("./%3.1fGeV/TRD.TaskPidRefMakerNN.root",AliTRDCalPID::GetMomentum(iMomBin)),"RECREATE");
-    TTree *tOut = new TTree("NN", "Reference data for NN"); 
-    tOut -> Branch("fLayer", &fLayer, "fLayer/I");
-    tOut -> Branch("fMom", &fMom, "fMom/F");
-    tOut -> Branch("fv0pid", fv0pid, Form("fv0pid[%d]/F",AliPID::kSPECIES));
-    tOut -> Branch("fdEdx", fdEdx, Form("fdEdx[%d]/F", AliTRDpidUtil::kNNslices));
-    
-    for(Int_t iEv = 0; iEv < (tIn -> GetEntries()); iEv++){
-      fLayer = 0;
-      fMom = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++) fv0pid[i] = 0.0;
-      for(Int_t i = 0; i < AliTRDpidUtil::kNNslices; i++) fdEdx[i] = 0.0;
-      tIn -> GetEntry(iEv);
-      if(Util.GetMomentumBin(fMom) == iMomBin){
-       tOut -> Fill();
-      }
-    }
-    
-    tOut -> Write();
-    tOut -> Delete();
-    fOut -> Close();
-
-  }
-  
-  printf("Extraction completed!");
-  return 1;
-
-}
-
-
-Int_t makeDataLQ(){
-
-  Int_t fLayer;
-  Float_t fMom, fv0pid[AliPID::kSPECIES], fdEdx[AliTRDpidUtil::kLQslices];
-
-  AliTRDpidUtil Util;
-  TFile *fIn = new TFile("../TRD.TaskPidRefMakerLQ.root","READ");
-  TTree *tIn = (TTree*) fIn -> Get("LQ");
-
-  tIn -> SetBranchAddress("fLayer", &fLayer);
-  tIn -> SetBranchAddress("fMom", &fMom);
-  tIn -> SetBranchAddress("fv0pid", fv0pid);
-  tIn -> SetBranchAddress("fdEdx", fdEdx);
-
-  for(Int_t iMomBin = 0; iMomBin < AliTRDCalPID::kNMom; iMomBin++){
-    printf("Extracting training set for momentum bin %3.1f GeV/c\n", AliTRDCalPID::GetMomentum(iMomBin));
-    TFile *fOut = new TFile(Form("./%3.1fGeV/TRD.TaskPidRefMakerLQ.root",AliTRDCalPID::GetMomentum(iMomBin)),"RECREATE");
-    TTree *tOut = new TTree("LQ", "Reference data for LQ"); 
-    tOut -> Branch("fLayer", &fLayer, "fLayer/I");
-    tOut -> Branch("fMom", &fMom, "fMom/F");
-    tOut -> Branch("fv0pid", fv0pid, Form("fv0pid[%d]/F",AliPID::kSPECIES));
-    tOut -> Branch("fdEdx", fdEdx, Form("fdEdx[%d]/F", AliTRDpidUtil::kLQslices));
-    
-    for(Int_t iEv = 0; iEv < (tIn -> GetEntries()); iEv++){
-      fLayer = 0;
-      fMom = 0.0;
-      for(Int_t i = 0; i < AliPID::kSPECIES; i++) fv0pid[i] = 0.0;
-      for(Int_t i = 0; i < AliTRDpidUtil::kLQslices; i++) fdEdx[i] = 0.0;
-      tIn -> GetEntry(iEv);
-      if(Util.GetMomentumBin(fMom) == iMomBin){
-       tOut -> Fill();
-      }
-    }
-    
-    tOut -> Write();
-    tOut -> Delete();
-    fOut -> Close();
-
-  }
-  
-  printf("Extraction completed!");
-  return 1;
-
-}
-
-
-Int_t CreateDummy(){
-
-  for(Int_t iMomBin = 0; iMomBin < AliTRDCalPID::kNMom; iMomBin++){
-    printf("Creating dummy for momentum bin %3.1f GeV/c\n", AliTRDCalPID::GetMomentum(iMomBin));
-    TFile *fOut = new TFile(Form("./%3.1fGeV/TRD.TaskPidRefMaker.root",AliTRDCalPID::GetMomentum(iMomBin)),"RECREATE");
-    TObjArray *fContainer = new TObjArray();
-
-    TGraphErrors *gEffisTrain = new TGraphErrors(50);
-//     TGraphErrors *gEffisTrain = new TGraphErrors(AliTRDpidRefMaker::kMoniTrain);
-    gEffisTrain -> SetLineColor(4);
-    gEffisTrain -> SetMarkerColor(4);
-    gEffisTrain -> SetMarkerStyle(29);
-    gEffisTrain -> SetMarkerSize(1);
-
-    TGraphErrors *gEffisTest = new TGraphErrors(50);
-//     TGraphErrors *gEffisTest = new TGraphErrors(AliTRDpidRefMaker::kMoniTrain);
-    gEffisTest -> SetLineColor(2);
-    gEffisTest -> SetMarkerColor(2);
-    gEffisTest -> SetMarkerStyle(29);
-    gEffisTest -> SetMarkerSize(1);
-    
-    fContainer -> AddAt(gEffisTrain,0);
-    fContainer -> AddAt(gEffisTest,1);
-//     fContainer -> AddAt(gEffisTrain,AliTRDpidRefMaker::kGraphTrain);
-//     fContainer -> AddAt(gEffisTest,AliTRDpidRefMaker::kGraphTest);
-  
-  }
-
-}
diff --git a/TRD/qaRec/macros/PID/runTraining.C b/TRD/qaRec/macros/PID/runTraining.C
deleted file mode 100644 (file)
index c357875..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-//   It is recommended to train not all momenta at on eturn. The time consumption
-//   for a training loop is very large! 
-
-//   Please be careful if you want to train the networks. The networks will be saved
-//   in a file ("./Networks_%d", date(yyyymmdd)). You should create seperate directories 
-//   where the training for the several momentum bins should be done. Otherwise the 
-//   networks will be deleted by the following momentum bin training.
-
-#ifndef __CINT__
-#include "TSystem.h"
-#include "$ALICE_ROOT/TRD/qaRec/AliTRDpidRefMaker.h"
-#endif
-
-Int_t runTraining(){
-
-  gSystem -> Load("libANALYSIS.so");
-  gSystem -> Load("libTRDqaRec.so");
-
-  AliTRDpidRefMaker *ref = new AliTRDpidRefMaker();
-  ref->SetDebugLevel(2);
-
-//   Sets the momentum bin that should be trained:
-//   Bin  0 =  0.6 GeV/c
-//   Bin  1 =  0.8 GeV/c
-//   Bin  2 =  1.0 GeV/c
-//   Bin  3 =  1.5 GeV/c
-//   Bin  4 =  2.0 GeV/c
-//   Bin  5 =  3.0 GeV/c
-//   Bin  6 =  4.0 GeV/c
-//   Bin  7 =  5.0 GeV/c
-//   Bin  8 =  6.0 GeV/c
-//   Bin  9 =  8.0 GeV/c
-//   Bin 10 = 10.0 GeV/c
-//   Bin 11 = All
-  ref->SetTrainMomBin(1);
-
-//   Sets if the network should be trained
-  ref->SetDoTraining(1);
-
-//   Sets if the training should be continued or an untrained network will be taken.
-//   If the training should be continued with a pretrained network, 
-//   please uncomment this line
-//   ref->SetContinueTraining(1);
-
-//   Sets the path for old networks. If the training should be continued 
-//   with a pretrained network, please uncomment this line and set the date (yyyymmdd).
-//   ref->SetTrainPath(20081022);
-
-//   Do the training
-  ref->PostProcess();
-  
-  return 1;
-
-}
diff --git a/TRD/qaRec/macros/helper.C b/TRD/qaRec/macros/helper.C
deleted file mode 100644 (file)
index 270c229..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include "TFileMerger.h"
-#include "TSystem.h"
-#include "TString.h"
-#include "TObjString.h"
-#include "TObjArray.h"
-#include "TError.h"
-#include <fstream>
-#endif
-
-#ifndef HELPER_C
-#define HELPER_C
-
-//____________________________________________
-Int_t ParseOptions(Char_t *trd)
-{
-  Int_t fSteerTask = 1;
-  TObjArray *tasksArray = TString(trd).Tokenize(" ");
-  for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
-    TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
-    if(s.CompareTo("ALL") == 0){
-      for(Int_t itask = 0; itask < NTRDQATASKS; itask++) SETBITT(fSteerTask, itask);
-      continue;
-    } else { 
-      Bool_t foundOpt = kFALSE;  
-      for(Int_t itask = 2; itask < NTRDTASKS; itask++){
-        if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
-        SETBITT(fSteerTask, itask); SETBITT(fSteerTask, kInfoGen);
-        foundOpt = kTRUE;
-        break;
-      }
-      if(!foundOpt) Info("ParseOptions()", Form("TRD task %s not implemented (yet).", s.Data()));
-    }
-  }
-  // extra rules for calibration tasks
-  if(TSTBIT(fSteerTask, kCalibration)) SETBITT(fSteerTask, kCheckDET);
-  if(TSTBIT(fSteerTask, kMultiplicity)) SETBITT(fSteerTask, kEfficiency);
-  if(TSTBIT(fSteerTask, kEfficiencyMC)) SETBITT(fSteerTask, kEfficiency);
-  if(TSTBIT(fSteerTask, kClErrParam)) SETBITT(fSteerTask, kResolution);
-  if(TSTBIT(fSteerTask, kAlignment)) SETBITT(fSteerTask, kResolution);
-  if(TSTBIT(fSteerTask, kPIDRefMaker)) SETBITT(fSteerTask, kCheckPID);
-
-  return fSteerTask;
-}
-
-//______________________________________________________
-void mergeProd(const Char_t *mark, const Char_t *files, const Int_t kBatch = 20)
-{
-  TFileMerger *fFM = 0x0;
-  Bool_t kSVN = kFALSE;
-
-  Int_t jbatch = 0, nbatch = 0;
-  string filename;
-  ifstream file(files);
-  while(getline(file, filename)){
-    if(Int_t(filename.find(mark)) < 0) continue;
-    if(!nbatch){
-      if(fFM){ 
-        delete fFM;
-        fFM = new TFileMerger(kTRUE);
-      } else fFM = new TFileMerger(kTRUE);
-      fFM->OutputFile(Form("%s/%d_%s",  gSystem->ExpandPathName("$PWD"), jbatch, mark));
-    }
-    if(!kSVN){ // download SVN info for trending
-      string base=filename.substr(0, filename.find_last_of('/'));
-      if(gSystem->Exec(Form("cp -v %s/svnInfo.log .", base.c_str())) == 0) kSVN=kTRUE;
-    }
-    fFM->AddFile(filename.c_str()); nbatch++;
-    if(nbatch==kBatch){
-      printf("MERGING BATCH %d [%d] ... \n", jbatch, nbatch);
-      fFM->Merge(); jbatch++;
-      nbatch=0;
-    }
-  }
-  if(nbatch){
-    printf("MERGING INCOMPLETE BATCH %d [%d] ... \n", jbatch, nbatch);
-    fFM->Merge(); jbatch++;
-  }
-  if(!jbatch){
-    delete fFM;
-    return;
-  }
-
-  new(fFM) TFileMerger(kTRUE);
-  fFM->OutputFile(Form("%s/%s",  gSystem->ExpandPathName("$PWD"), mark));
-  for(Int_t ib=jbatch; ib--;){
-    fFM->AddFile(Form("%s/%d_%s",  gSystem->ExpandPathName("$PWD"), ib, mark));
-    gSystem->Exec(Form("rm -f %s/%d_%s", gSystem->ExpandPathName("$PWD"), ib, mark));
-  }
-  fFM->Merge();
-  delete fFM;
-}
-
-#endif
diff --git a/TRD/qaRec/macros/makeCalibResults.C b/TRD/qaRec/macros/makeCalibResults.C
deleted file mode 100644 (file)
index b751f26..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-// Usage:
-//   makeCalibResults.C("task", "file_list", kGRID)
-//   tasks : "one/more of the following separated by space:
-//     "CAL"  : TRD calibration
-//     "ALGN" : TRD alignment
-//     "PIDR" : TRD PID - reference data
-//     "CLRES": Cluster position and error parameterization
-//     "NOFR" : Data set does not have AliESDfriends.root 
-//     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
-//              on MC information are switched off
-//   file_list : is the list of the files to be processed. 
-//     They should contain the full path. Here is an example:
-// /lustre/alice/local/TRDdata/SIM/P-Flat/TRUNK/RUN0/TRD.CalibName.root
-// or for GRID alien:///alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/1/TRD.Calib%.root
-//   kGRID : specify if files are comming from a GRID collection [default kFALSE]
-//
-// HOW TO BUILD THE FILE LIST
-//   1. locally
-// ls -1 BaseDir/RUN*/TRD.Calib*.root > files.lst
-// 
-//   2. on Grid
-// char *BaseDir="/alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/";
-// TGrid::Connect("alien://");
-// TGridResult *res = gGrid->Query(BaseDir, "%/TRD.Calib%.root");
-// TGridCollection *col = gGrid->OpenCollectionQuery(res);
-// col->Reset();
-// TMap *map = 0x0;
-// while(map = (TMap*)col->Next()){
-//   TIter it((TCollection*)map);
-//   TObjString *info = 0x0;
-//   while(info=(TObjString*)it()){
-//     printf("alien://%s\n", col->GetLFN(info->GetString().Data()));
-//   }
-// }
-//
-// The files which will be processed are the intersection between the
-// condition on the tasks and the files in the file list.
-//
-// In compiled mode : 
-// Don't forget to load first the libraries
-// gSystem->Load("libMemStat.so")
-// gSystem->Load("libMemStatGui.so")
-// gSystem->Load("libANALYSIS.so")
-// gSystem->Load("libANALYSISalice.so")
-// gSystem->Load("libTRDqaRec.so")
-// gSystem->Load("libSTAT.so")
-// gSystem->Load("libPWG1.so");
-// gSystem->Load("libNetx.so") ;
-// gSystem->Load("libRAliEn.so");
-//
-// Authors:
-//   Alex Bercuci (A.Bercuci@gsi.de) 
-//   Markus Fasel (m.Fasel@gsi.de) 
-//
-
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-
-#include "qaRec/AliTRDrecoTask.h"
-#include <fstream>
-#include <TCanvas.h>
-#include <TStyle.h>
-#include <TGrid.h>
-#include <TGridResult.h>
-#include <TGridCollection.h>
-
-#endif
-
-#include "AliTRDperformanceTrain.h"
-#include "helper.C"
-//#include "../../PWG1/macros/AddPerformanceTask.h"
-
-Char_t *libs[] = {"libProofPlayer.so", "libANALYSIS.so", "libTRDqaRec.so", "libSTAT.so"};
-// define setup
-TCanvas *c = 0x0;
-Bool_t mc(kFALSE), friends(kFALSE);
-
-void calibrateTRD(TNamed* task, Int_t itask);
-void makeCalibResults(Char_t *opt, const Char_t *files=0x0, Bool_t kGRID=kFALSE)
-{
-  if(kGRID){
-    if(!gSystem->Getenv("GSHELL_ROOT")){
-      Error("makeCalibResults.C", "AliEn not initialized.");
-      return;
-    }
-    TGrid::Connect("alien://");
-  }
-
-       // Load Libraries in interactive mode
-  Int_t nlibs = static_cast<Int_t>(sizeof(libs)/sizeof(Char_t *));
-  for(Int_t ilib=0; ilib<nlibs; ilib++){
-    if(gSystem->Load(libs[ilib]) >= 0) continue;
-    Error("makeCalibResults.C", Form("Failed to load %s.", libs[ilib]));
-    return;
-  }
-
-  mc = HasReadMCData(opt);
-  friends = HasReadFriendData(opt);
-
-  gStyle->SetOptStat(0);
-  gStyle->SetOptFit(0);
-  Int_t fSteerTask = ParseOptions(opt);
-
-  if(!c) c=new TCanvas("c", "Calibration", 10, 10, 800, 500);
-
-  TClass *ctask = new TClass;
-  AliAnalysisTask *task = 0x0;
-  for(Int_t itask = NTRDQATASKS; itask<NTRDTASKS; itask++){
-    if(!TSTBIT(fSteerTask, itask)) continue;
-    new(ctask) TClass(fgkTRDtaskClassName[itask]);
-    task = (AliAnalysisTask*)ctask->New();
-    if(files) mergeProd(Form("TRD.Calib%s.root", task->GetName()), files);
-
-    if(task->IsA()->InheritsFrom("AliTRDrecoTask")) calibrateTRD(task, itask);
-  }
-  delete ctask;
-  delete c;
-}
-
-
-//______________________________________________________
-void calibrateTRD(TNamed *otask, Int_t itask)
-{
-  AliTRDrecoTask *task = dynamic_cast<AliTRDrecoTask*>(otask);
-  task->SetDebugLevel(0);
-  AliLog::SetClassDebugLevel(fgkTRDtaskClassName[itask], 3); 
-  task->SetMCdata(mc);
-  task->SetFriends(friends);
-
-  if(!task->PostProcess()){
-    Error("makeCalibResults.C", Form("Processing data container for task %s failed.", task->GetName()));
-    delete task;
-    return;
-  }
-  for(Int_t ipic=0; ipic<task->GetNRefFigures(); ipic++){
-    c->Clear();
-    if(!task->GetRefFigure(ipic)) continue;
-    c->SaveAs(Form("%s_Fig%02d.gif", task->GetName(), ipic));
-  }
-  delete task;
-}
-
diff --git a/TRD/qaRec/macros/makeResults.C b/TRD/qaRec/macros/makeResults.C
deleted file mode 100644 (file)
index 3ed28f9..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-// Usage:
-//   makeResults.C("tasks", "file_list", kGRID)
-//   tasks : "ALL" or one/more of the following separated by space:
-//     "EFF"  : TRD Tracking Efficiency 
-//     "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
-//     "RES"  : TRD tracking Resolution
-//     "PID"  : TRD PID - pion efficiency 
-//     "DET"  : Basic TRD Detector checks
-//     "NOFR" : Data set does not have AliESDfriends.root 
-//     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
-//              on MC information are switched off
-//   file_list : is the list of the files to be processed. 
-//     They should contain the full path. Here is an example:
-// /lustre/alice/local/TRDdata/SIM/P-Flat/TRUNK/RUN0/TRD.Performance.root
-// or for GRID alien:///alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/1/TRD.Performance.root
-//   kGRID : specify if files are comming from a GRID collection [default kFALSE]
-//
-// HOW TO BUILD THE FILE LIST
-//   1. locally
-// ls -1 BaseDir/RUN*/TRD.Performance.root > files.lst
-// 
-//   2. on Grid
-// char *BaseDir="/alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/";
-// TGrid::Connect("alien://");
-// TGridResult *res = gGrid->Query(BaseDir, "%/TRD.Performance.root");
-// TGridCollection *col = gGrid->OpenCollectionQuery(res);
-// col->Reset();
-// TMap *map = 0x0;
-// while(map = (TMap*)col->Next()){
-//   TIter it((TCollection*)map);
-//   TObjString *info = 0x0;
-//   while(info=(TObjString*)it()){
-//     printf("alien://%s\n", col->GetLFN(info->GetString().Data()));
-//   }
-// }
-//
-// The files which will be processed are the intersection between the
-// condition on the tasks and the files in the file list.
-//
-// Authors:
-//   Alex Bercuci (A.Bercuci@gsi.de) 
-//   Markus Fasel (m.Fasel@gsi.de) 
-//
-
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-#include <fstream>
-#include "TError.h"
-#include <TClass.h>
-#include <TCanvas.h>
-#include <TH1.h>
-#include <TGraph.h>
-#include <TObjArray.h>
-#include <TObjString.h>
-#include <TString.h>
-#include <TROOT.h>
-#include <TStyle.h>
-#include <TGrid.h>
-#include <TGridResult.h>
-#include <TGridCollection.h>
-
-#include "qaRec/AliTRDrecoTask.h"
-
-#endif
-
-#include "AliTRDperformanceTrain.h"
-#include "helper.C"
-//#include "../../PWG1/macros/AddPerformanceTask.h"
-
-Char_t *libs[] = {"libProofPlayer.so", "libANALYSIS.so", "libTRDqaRec.so"};
-// define setup
-TCanvas *c = 0x0;
-Bool_t mc(kFALSE), friends(kFALSE);
-
-void processTRD(TNamed* task);
-void processESD(TNamed* task);
-void makeResults(Char_t *opt = "ALL", const Char_t *files=0x0, Bool_t kGRID=kFALSE)
-{
-  if(kGRID){
-    if(!gSystem->Getenv("GSHELL_ROOT")){
-      Error("makeResults.C", "AliEn not initialized.");
-      return;
-    }
-    TGrid::Connect("alien://");
-  }
-
-       // Load Libraries in interactive mode
-  Int_t nlibs = static_cast<Int_t>(sizeof(libs)/sizeof(Char_t *));
-  for(Int_t ilib=0; ilib<nlibs; ilib++){
-    if(gSystem->Load(libs[ilib]) >= 0) continue;
-    Error("makeResults.C", Form("Failed to load %s.", libs[ilib]));
-    return;
-  }
-
-  mc = HasReadMCData(opt);
-  friends = HasReadFriendData(opt);
-
-  gStyle->SetOptStat(0);
-  gStyle->SetOptFit(0);
-  if(files) mergeProd("TRD.Performance.root", files);
-  Int_t fSteerTask = ParseOptions(opt);
-
-  if(!c) c=new TCanvas("c", "Performance", 10, 10, 800, 500);
-
-  TClass *ctask = new TClass;
-  AliAnalysisTask *task = 0x0;
-  for(Int_t itask = NTRDQATASKS; itask--;){
-    if(!TSTBIT(fSteerTask, itask)) continue;
-    new(ctask) TClass(fgkTRDtaskClassName[itask]);
-    task = (AliAnalysisTask*)ctask->New();
-
-    if(task->IsA()->InheritsFrom("AliTRDrecoTask")) processTRD(task);
-    else processESD(task);
-  }
-  delete ctask;
-  delete c;
-}
-
-
-//______________________________________________________
-void processTRD(TNamed *otask)
-{
-  AliTRDrecoTask *task = dynamic_cast<AliTRDrecoTask*>(otask);
-  task->SetDebugLevel(0);
-  task->SetMCdata(mc);
-  task->SetFriends(friends);
-
-  if(!task->Load(Form("%s/TRD.Performance.root", gSystem->ExpandPathName("$PWD")))){
-    Error("makeResults.C", Form("Load data container for task %s failed.", task->GetName()));
-    delete task;
-    return;
-  }
-
-  if(!task->PostProcess()){
-    Error("makeResults.C", Form("Processing data container for task %s failed.", task->GetName()));
-    delete task;
-    return;
-  }
-  for(Int_t ipic=0; ipic<task->GetNRefFigures(); ipic++){
-    c->Clear();
-    if(!task->GetRefFigure(ipic)) continue;
-    c->SaveAs(Form("%s_Fig%02d.gif", task->GetName(), ipic), "gif");
-  }
-  delete task;
-}
-
-//______________________________________________________
-void processESD(TNamed *otask)
-{
-  AliTRDcheckESD *esd = dynamic_cast<AliTRDcheckESD*>(otask);
-  if(!esd){
-    Info("makeResults.C", "Processing of task AliTRDcheckESD failed.");
-    delete otask;
-    return;
-  }
-
-  if(!esd->Load(Form("%s/TRD.Performance.root", gSystem->ExpandPathName("$PWD")))){
-    Error("makeResults.C", Form("Load data container for task %s failed.", esd->GetName()));
-    delete esd;
-    return;
-  }
-
-  esd->Terminate();
-
-  c->Clear();
-  Int_t ipic=0;
-  while((esd->GetRefFigure(ipic))){
-    c->SaveAs(Form("%s_Fig%02d.gif", esd->GetName(), ipic));
-    c->Clear();
-    ipic++;
-  }
-  delete esd;
-}
diff --git a/TRD/qaRec/run.C b/TRD/qaRec/run.C
deleted file mode 100644 (file)
index 7a731cf..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-// Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).
-// 
-// Usage:
-//   run.C(tasks, files)
-//   tasks : "ALL" or one/more of the following:
-//     "EFF"  : TRD Tracking Efficiency 
-//     "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
-//     "MULT"  : TRD single track selection
-//     "RES"  : TRD tracking Resolution
-//     "CLRES": clusters Resolution
-//     "CAL"  : TRD calibration
-//     "ALGN" : TRD alignment
-//     "PID"  : TRD PID - pion efficiency 
-//     "PIDR" : TRD PID - reference data
-//     "DET"  : Basic TRD Detector checks
-//     "NOFR" : Data set does not have AliESDfriends.root 
-//     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
-//              on MC information are switched off
-//
-// In compiled mode : 
-// Don't forget to load first the libraries
-// gSystem->Load("libMemStat.so")
-// gSystem->Load("libMemStatGui.so")
-// gSystem->Load("libANALYSIS.so")
-// gSystem->Load("libANALYSISalice.so")
-// gSystem->Load("libTRDqaRec.so")
-// gSystem->Load("libPWG1.so");
-// gSystem->Load("libNetx.so") ;
-// gSystem->Load("libRAliEn.so");
-//
-// Authors:
-//   Alex Bercuci (A.Bercuci@gsi.de) 
-//   Markus Fasel (m.Fasel@gsi.de) 
-
-#if ! defined (__CINT__) || defined (__MAKECINT__)
-//#ifndef __CINT__
-#include <Riostream.h>
-
-#include "TStopwatch.h"
-#include "TMemStat.h"
-#include "TMemStatViewerGUI.h"
-
-#include "TROOT.h"
-#include "TClass.h"
-#include "TSystem.h"
-#include "TError.h"
-#include "TChain.h"
-#include "TGrid.h"
-#include "TAlienCollection.h"
-#include "TGridCollection.h"
-#include "TGridResult.h"
-#include "TGeoGlobalMagField.h"
-
-#include "AliMagF.h"
-#include "AliTracker.h"
-#include "AliLog.h"
-#include "AliCDBManager.h"
-#include "AliGRPManager.h"
-#include "AliGeomManager.h"
-#include "AliAnalysisManager.h"
-#include "AliAnalysisDataContainer.h"
-#include "AliMCEventHandler.h"
-#include "AliESDInputHandler.h"
-
-#include "TRD/AliTRDtrackerV1.h"
-#include "TRD/AliTRDcalibDB.h"
-
-#include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "TRD/qaRec/macros/AddTRDcheckESD.C"
-#include "TRD/qaRec/macros/AddTRDinfoGen.C"
-#include "TRD/qaRec/macros/AddTRDcheckDET.C"
-#include "TRD/qaRec/macros/AddTRDefficiency.C"
-#include "TRD/qaRec/macros/AddTRDresolution.C"
-#include "TRD/qaRec/macros/AddTRDcheckPID.C"
-
-#include "PWG1/macros/AddPerformanceTask.C"
-#endif
-
-#include "../../TRD/qaRec/macros/AliTRDperformanceTrain.h"
-#include "../../PWG1/macros/AddPerformanceTask.h"
-
-
-Bool_t MEM = kFALSE;
-
-TChain* MakeChainLST(const char* filename = 0x0);
-TChain* MakeChainXML(const char* filename = 0x0);
-void run(Char_t *trd="ALL", Char_t *tpc="ALL", const Char_t *files=0x0, Long64_t nev=1234567890, Long64_t first = 0)
-{
-  TMemStat *mem = 0x0;
-  if(MEM){ 
-    gSystem->Load("libMemStat.so");
-    gSystem->Load("libMemStatGui.so");
-    mem = new TMemStat("new, gnubuildin");
-    mem->AddStamp("Start");
-  }
-  TStopwatch timer;
-  timer.Start();
-
-
-
-  // VERY GENERAL SETTINGS
-  AliLog::SetGlobalLogLevel(AliLog::kError);
-  if(gSystem->Load("libANALYSIS.so")<0) return;
-  if(gSystem->Load("libANALYSISalice.so")<0) return;
-
-  Bool_t fHasMCdata = 1;//HasReadMCData(trd);
-  //Bool_t fHasFriends = HasReadFriendData(trd);
-  
-  // INITIALIZATION OF RUNNING ENVIRONMENT
-  //TODO We should use the GRP if available similar to AliReconstruction::InitGRP()!
-  // initialize OCDB manager
-  AliCDBManager *cdbManager = AliCDBManager::Instance();
-  cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
-  cdbManager->SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd()));
-  cdbManager->SetRun(0);
-  cdbManager->SetCacheFlag(kFALSE);
-  // initialize magnetic field from the GRP manager.
-  AliGRPManager grpMan;
-  grpMan.ReadGRPEntry();
-  grpMan.SetMagField();
-  //AliRunInfo *runInfo = grpMan.GetRunInfo();
-  AliGeomManager::LoadGeometry();
-
-
-  // DEFINE DATA CHAIN
-  TChain *chain = 0x0;
-  if(!files) chain = MakeChainLST();
-  else{
-    TString fn(files);
-    if(fn.EndsWith("xml")) chain = MakeChainXML(files);
-    else chain = MakeChainLST(files);
-  }
-  if(!chain) return;
-  chain->SetBranchStatus("*FMD*",0);
-  chain->SetBranchStatus("*Calo*",0);
-  chain->SetBranchStatus("Tracks", 1);
-  chain->SetBranchStatus("ESDfriend*",1);
-  chain->Lookup();
-  chain->GetListOfFiles()->Print();
-  printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries());
-
-
-  // BUILD ANALYSIS MANAGER
-  AliAnalysisManager *mgr = new AliAnalysisManager("Post Reconstruction Calibration/QA");
-  AliVEventHandler *esdH = 0x0, *mcH = 0x0;
-  mgr->SetInputEventHandler(esdH = new AliESDInputHandler);
-  if(fHasMCdata) mgr->SetMCtruthEventHandler(mcH = new AliMCEventHandler());
-  //mgr->SetDebugLevel(10);
-
-
-
-///////////////////////////////////////////////////////////
-///////////////         TRD                     ///////////
-///////////////////////////////////////////////////////////
-  // TRD specific library
-  if(gSystem->Load("libTRDqaRec.so")<0) return;
-  // TRD data containers
-  AliAnalysisDataContainer *ci[] = {0x0, 0x0, 0x0};
-
-
-  // initialize TRD settings
-  AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
-  AliTRDtrackerV1::SetNTimeBins(cal->GetNumberOfTimeBins());
-
-  // plug (set of) TRD wagons in the train
-  if(trd){
-    for(Int_t it=0; it<NTRDQATASKS; it++){
-      if(gROOT->LoadMacro(Form("$ALICE_ROOT/TRD/qaRec/macros/Add%s.C+", TString(fgkTRDtaskClassName[it])(3,20).Data()))) {
-        Error("run.C", Form("Error loading %s task.", fgkTRDtaskClassName[it]));
-        return;
-      } 
-  
-      switch(it){
-      case kCheckESD:
-        AddTRDcheckESD(mgr); break;
-      case kInfoGen:
-        AddTRDinfoGen(mgr, trd, 0x0, ci); break;
-      case kCheckDET:
-        AddTRDcheckDET(mgr, trd, ci); break;
-      case kEfficiency:
-        AddTRDefficiency(mgr, trd, ci); break;
-      case kResolution:
-        AddTRDresolution(mgr, trd, ci); break;
-      case kCheckPID:
-        AddTRDcheckPID(mgr, trd, ci); break;
-      default:
-        Warning("run.C", Form("No performance task registered at slot %d.", it)); 
-      }
-    }
-  }
-
-///////////////////////////////////////////////////////////
-///////////////         TPC                     ///////////
-///////////////////////////////////////////////////////////
-  if(gSystem->Load("libPWG1.so")<0) return;
-  
-  // BUILD STEERING TASK FOR TPC
-  if(tpc){
-    if(gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddPerformanceTask.C+")) {
-      Error("run.C", "Error loading AliPerformanceTask task.");
-      return;
-    } 
-    AddPerformanceTask(mgr, tpc);
-  }
-
-  if (!mgr->InitAnalysis()) return;
-  // verbosity
-  printf("\n\tRUNNING TRAIN FOR TASKS:\n");
-  mgr->GetTasks()->ls();
-  //mgr->PrintStatus();
-
-  mgr->StartAnalysis("local", chain, nev, first);
-
-  timer.Stop();
-  timer.Print();  
-
-  cal->Terminate();
-  TGeoGlobalMagField::Instance()->SetField(NULL);
-  delete cdbManager;
-
-  // verbosity
-  printf("\n\tCLEANING UP TRAIN:\n");
-  mgr->GetTasks()->Delete();
-
-  if(mcH) delete mcH;
-  delete esdH;
-  delete mgr;
-  delete chain;
-  if(MEM) delete mem;
-  if(MEM) TMemStatViewerGUI::ShowGUI();
-}
-
-//____________________________________________
-TChain* MakeChainLST(const char* filename)
-{
-  // Create the chain
-  TChain* chain = new TChain("esdTree");
-
-  if(!filename){
-    chain->Add(Form("%s/AliESDs.root", gSystem->pwd()));
-    return chain;
-  }
-
-
-  // read ESD files from the input list.
-  ifstream in;
-  in.open(filename);
-  TString esdfile;
-  while(in.good()) {
-    in >> esdfile;
-    if (!esdfile.Contains("root")) continue; // protection
-    chain->Add(esdfile.Data());
-  }
-
-  in.close();
-
-  return chain;
-}
-
-//____________________________________________
-TChain* MakeChainXML(const char* xmlfile)
-{
-  if (!TFile::Open(xmlfile)) {
-    Error("MakeChainXML", Form("No file %s was found", xmlfile));
-    return 0x0;
-  }
-
-  if(gSystem->Load("libNetx.so")<0) return 0x0;
-  if(gSystem->Load("libRAliEn.so")<0) return 0x0;
-  TGrid::Connect("alien://") ;
-
-  TGridCollection *collection = (TGridCollection*) TAlienCollection::Open(xmlfile);
-  if (!collection) {
-    Error("MakeChainXML", Form("No collection found in %s", xmlfile)) ; 
-    return 0x0; 
-  }
-  //collection->CheckIfOnline();
-
-  TGridResult* result = collection->GetGridResult("",0 ,0);
-  if(!result->GetEntries()){
-    Error("MakeChainXML", Form("No entries found in %s", xmlfile)) ; 
-    return 0x0; 
-  }
-  // Makes the ESD chain 
-  TChain* chain = new TChain("esdTree");
-  for (Int_t idx = 0; idx < result->GetEntries(); idx++) {
-    chain->Add(result->GetKey(idx, "turl")); 
-  }
-  return chain;
-}
diff --git a/TRD/qaRec/run.jdl b/TRD/qaRec/run.jdl
deleted file mode 100644 (file)
index 6ac69f3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# this is the startup process for root
-Executable="run.sh";
-
-Jobtag={"comment:Grid analysis test"};
-
-# we split per storage element
-Split="se";
-
-# we want each job to read 10 input files
-SplitMaxInputFileNumber="50";
-
-# this job has to run in the ANALYSIS partition
-#Requirements=( member(other.GridPartitions,"Analysis") );
-#Requirements = other.SPLIT == 1 && ( other.TTL > 20000 ) && ( other.Price <= 1 ); 
-#Requirements = ( member(other.GridPartitions,"Analysis") );
-
-# we need ROOT and the API service configuration package
-Packages={"APISCONFIG::V2.4","VO_ALICE@ROOT::v5-22-00", "VO_ALICE@AliRoot::v4-16-Rev-05"};
-TTL = "30000";
-Price = 1;
-
-
-#ROOT will read this collection file to know, which files to analyze
-InputDataList="esd.xml";
-
-InputDataListFormat="xml-single";
-
-
-#ROOT requires the collection file in the xml-single format
-#InputDataListFormat="merge:/alice/cern.ch/user/a/amarin/global.xml";
-
-# this is our collection file containing the files to be analyzed
-InputDataCollection="LF:/alice/cern.ch/user/a/amarin/MinBiasProd/xml/$1.xml,nodownload";
-
-
-InputFile= {"LF:/alice/cern.ch/user/a/abercuci/MinBiasProd/run.C",
- "LF:/alice/cern.ch/user/a/abercuci/MinBiasProd/run.h"};
-
-
-# Output archive           
-OutputArchive={"log_archive.zip:stdout@Alice::GSI::SE","root_archive.zip:*.root@Alice::GSI::SE"};
-
-# Output directory
-OutputDir="/alice/cern.ch/user/a/abercuci/MinBiasProd/$1/#alien_counter#";
-
-# Output files
-OutputFile={"TRD.TaskDetChecker.root", "TRD.TaskResolution.root", "TRD.TaskTrackingEff.root", "TRD.TaskTrackingEffMC.root", "TRD.TaskPID.root"};
-
-# Merge the output
-Merge={"TRD.TaskDetChecker.root:/alice/cern.ch/user/a/abercuci/test/merge.jdl:TRD.TaskDetCheckerMerged.root"};
-MergeOutputDir={"/alice/cern.ch/user/a/abercuci/test/output"};
-
-# Validation
-Validationcommand ="/alice/cern.ch/user/a/abercuci/bin/validate.sh";
-
-# email
-Email="A.Bercuci@gsi.de";