]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliReconstruction.cxx
QA ref defaut storage setter in sim and rec
[u/mrichter/AliRoot.git] / STEER / AliReconstruction.cxx
index 85e8319889ed961d7f275d3302488d8651277a09..cb0132dcd5cb8bfc93da75940c625d8d9cd58b08 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
+ *                                                                        *QARef
  * Author: The ALICE Off-line Project.                                    *
  * Contributors are mentioned in the code where appropriate.              *
  *                                                                        *
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
+#include <TArrayD.h>
 #include <TArrayF.h>
+#include <TArrayS.h>
+#include <TChain.h>
 #include <TFile.h>
-#include <TList.h>
-#include <TSystem.h>
-#include <TROOT.h>
-#include <TPluginManager.h>
+#include <TGeoGlobalMagField.h>
 #include <TGeoManager.h>
+#include <TList.h>
 #include <TLorentzVector.h>
-#include <TArrayS.h>
-#include <TArrayD.h>
-#include <TObjArray.h>
 #include <TMap.h>
-#include <TChain.h>
+#include <TObjArray.h>
+#include <TPRegexp.h>
+#include <TParameter.h>
+#include <TPluginManager.h>
 #include <TProof.h>
 #include <TProofOutputFile.h>
-#include <TParameter.h>
+#include <TROOT.h>
+#include <TSystem.h>
 
-#include "AliReconstruction.h"
+#include "AliAlignObj.h"
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliCTPRawStream.h"
+#include "AliCascadeVertexer.h"
+#include "AliCentralTrigger.h"
 #include "AliCodeTimer.h"
-#include "AliReconstructor.h"
-#include "AliLog.h"
-#include "AliRunLoader.h"
-#include "AliRun.h"
-#include "AliRawReaderFile.h"
-#include "AliRawReaderDate.h"
-#include "AliRawReaderRoot.h"
-#include "AliRawEventHeaderBase.h"
-#include "AliRawEvent.h"
+#include "AliDAQ.h"
+#include "AliDetectorRecoParam.h"
+#include "AliESDCaloCells.h"
+#include "AliESDCaloCluster.h"
 #include "AliESDEvent.h"
 #include "AliESDMuonTrack.h"
-#include "AliESDfriend.h"
+#include "AliESDPmdTrack.h"
+#include "AliESDTagCreator.h"
 #include "AliESDVertex.h"
 #include "AliESDcascade.h"
+#include "AliESDfriend.h"
 #include "AliESDkink.h"
-#include "AliESDtrack.h"
-#include "AliESDCaloCluster.h"
-#include "AliESDCaloCells.h"
-#include "AliMultiplicity.h"
-#include "AliTracker.h"
-#include "AliVertexer.h"
-#include "AliVertexerTracks.h"
-#include "AliV0vertexer.h"
-#include "AliCascadeVertexer.h"
-#include "AliHeader.h"
-#include "AliGenEventHeader.h"
-#include "AliPID.h"
 #include "AliESDpid.h"
 #include "AliESDtrack.h"
-#include "AliESDPmdTrack.h"
-
-#include "AliESDTagCreator.h"
-
+#include "AliESDtrack.h"
+#include "AliEventInfo.h"
+#include "AliGRPObject.h"
+#include "AliGRPRecoParam.h"
+#include "AliGenEventHeader.h"
 #include "AliGeomManager.h"
-#include "AliTrackPointArray.h"
-#include "AliCDBManager.h"
-#include "AliCDBStorage.h"
-#include "AliCDBEntry.h"
-#include "AliAlignObj.h"
-
-#include "AliCentralTrigger.h"
-#include "AliTriggerConfiguration.h"
-#include "AliTriggerClass.h"
-#include "AliTriggerCluster.h"
-#include "AliCTPRawStream.h"
-
-#include "AliQADataMakerRec.h" 
 #include "AliGlobalQADataMaker.h" 
-#include "AliQA.h"
-#include "AliQADataMakerSteer.h"
-
+#include "AliHeader.h"
+#include "AliLog.h"
+#include "AliMagF.h"
+#include "AliMultiplicity.h"
+#include "AliPID.h"
 #include "AliPlaneEff.h"
-
-#include "AliSysInfo.h" // memory snapshots
+#include "AliQA.h"
+#include "AliQADataMakerRec.h" 
+#include "AliQAManager.h"
+#include "AliRawEvent.h"
+#include "AliRawEventHeaderBase.h"
 #include "AliRawHLTManager.h"
-
-#include "AliMagWrapCheb.h"
-
-#include "AliDetectorRecoParam.h"
-#include "AliGRPRecoParam.h"
+#include "AliRawReaderDate.h"
+#include "AliRawReaderFile.h"
+#include "AliRawReaderRoot.h"
+#include "AliReconstruction.h"
+#include "AliReconstructor.h"
+#include "AliRun.h"
 #include "AliRunInfo.h"
-#include "AliEventInfo.h"
-
-#include "AliDAQ.h"
-
-#include "AliGRPObject.h"
+#include "AliRunLoader.h"
+#include "AliSysInfo.h" // memory snapshots
+#include "AliTrackPointArray.h"
+#include "AliTracker.h"
+#include "AliTriggerClass.h"
+#include "AliTriggerCluster.h"
+#include "AliTriggerConfiguration.h"
+#include "AliV0vertexer.h"
+#include "AliVertexer.h"
+#include "AliVertexerTracks.h"
 
 ClassImp(AliReconstruction)
 
 //_____________________________________________________________________________
-const char* AliReconstruction::fgkDetectorName[AliReconstruction::fgkNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"};
+const char* AliReconstruction::fgkDetectorName[AliReconstruction::kNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"};
 
 //_____________________________________________________________________________
 AliReconstruction::AliReconstruction(const char* gAliceFilename) :
   TSelector(),
   fUniformField(kFALSE),
-  fForcedFieldMap(NULL),
   fRunVertexFinder(kTRUE),
   fRunVertexFinderTracks(kTRUE),
   fRunHLTTracking(kFALSE),
@@ -231,11 +222,10 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
   fEquipIdMap(""),
   fFirstEvent(0),
   fLastEvent(-1),
-  fNumberOfEventsPerFile(1),
+  fNumberOfEventsPerFile((UInt_t)-1),
   fOptions(),
   fLoadAlignFromCDB(kTRUE),
   fLoadAlignData("ALL"),
-  fESDPar(""),
   fUseHLTData(),
   fRunInfo(NULL),
   fEventInfo(),
@@ -246,25 +236,25 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
 
   fRecoParam(),
 
-  fVertexer(NULL),
+  fDiamondProfileSPD(NULL),
   fDiamondProfile(NULL),
   fDiamondProfileTPC(NULL),
-  fMeanVertexConstraint(kTRUE),
-
+  
   fGRPData(NULL),
 
   fAlignObjArray(NULL),
   fCDBUri(),
+  fQARefUri(),
   fSpecCDBUri(), 
   fInitCDBCalled(kFALSE),
   fSetRunNumberFromDataCalled(kFALSE),
   fQADetectors("ALL"), 
-  fQASteer(NULL),  
+  fQAManager(NULL),  
   fQATasks("ALL"), 
   fRunQA(kTRUE),  
   fRunGlobalQA(kTRUE),
   fSameQACycle(kFALSE),
-
+  fInitQACalled(kFALSE), 
   fRunPlaneEff(kFALSE),
 
   fesd(NULL),
@@ -281,7 +271,7 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
 // create reconstruction object with default parameters
   gGeoManager = NULL;
   
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     fReconstructor[iDet] = NULL;
     fLoader[iDet] = NULL;
     fTracker[iDet] = NULL;
@@ -298,7 +288,6 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
 AliReconstruction::AliReconstruction(const AliReconstruction& rec) :
   TSelector(),
   fUniformField(rec.fUniformField),
-  fForcedFieldMap(NULL),
   fRunVertexFinder(rec.fRunVertexFinder),
   fRunVertexFinderTracks(rec.fRunVertexFinderTracks),
   fRunHLTTracking(rec.fRunHLTTracking),
@@ -330,7 +319,6 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) :
   fOptions(),
   fLoadAlignFromCDB(rec.fLoadAlignFromCDB),
   fLoadAlignData(rec.fLoadAlignData),
-  fESDPar(rec.fESDPar),
   fUseHLTData(rec.fUseHLTData),
   fRunInfo(NULL),
   fEventInfo(),
@@ -341,24 +329,25 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) :
 
   fRecoParam(rec.fRecoParam),
 
-  fVertexer(NULL),
+  fDiamondProfileSPD(rec.fDiamondProfileSPD),
   fDiamondProfile(rec.fDiamondProfile),
   fDiamondProfileTPC(rec.fDiamondProfileTPC),
-  fMeanVertexConstraint(rec.fMeanVertexConstraint),
-
+  
   fGRPData(NULL),
 
   fAlignObjArray(rec.fAlignObjArray),
   fCDBUri(rec.fCDBUri),
+  fQARefUri(rec.fQARefUri),
   fSpecCDBUri(), 
   fInitCDBCalled(rec.fInitCDBCalled),
   fSetRunNumberFromDataCalled(rec.fSetRunNumberFromDataCalled),
   fQADetectors(rec.fQADetectors), 
-  fQASteer(NULL),  
+  fQAManager(NULL),  
   fQATasks(rec.fQATasks), 
   fRunQA(rec.fRunQA),  
   fRunGlobalQA(rec.fRunGlobalQA),
   fSameQACycle(rec.fSameQACycle),
+  fInitQACalled(rec.fInitQACalled),
   fRunPlaneEff(rec.fRunPlaneEff),
 
   fesd(NULL),
@@ -377,7 +366,7 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) :
   for (Int_t i = 0; i < rec.fOptions.GetEntriesFast(); i++) {
     if (rec.fOptions[i]) fOptions.Add(rec.fOptions[i]->Clone());
   }
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     fReconstructor[iDet] = NULL;
     fLoader[iDet] = NULL;
     fTracker[iDet] = NULL;
@@ -406,7 +395,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
   if(&rec == this) return *this;
 
   fUniformField          = rec.fUniformField;
-  fForcedFieldMap        = NULL;
   fRunVertexFinder       = rec.fRunVertexFinder;
   fRunVertexFinderTracks = rec.fRunVertexFinderTracks;
   fRunHLTTracking        = rec.fRunHLTTracking;
@@ -442,7 +430,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
 
   fLoadAlignFromCDB              = rec.fLoadAlignFromCDB;
   fLoadAlignData                 = rec.fLoadAlignData;
-  fESDPar                        = rec.fESDPar;
   fUseHLTData                    = rec.fUseHLTData;
 
   delete fRunInfo; fRunInfo = NULL;
@@ -456,7 +443,7 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
 
   fRecoParam = rec.fRecoParam;
 
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     delete fReconstructor[iDet]; fReconstructor[iDet] = NULL;
     delete fLoader[iDet]; fLoader[iDet] = NULL;
     delete fTracker[iDet]; fTracker[iDet] = NULL;
@@ -467,12 +454,12 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
     fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ;
   } 
     
-  fVertexer             = NULL;
+  delete fDiamondProfileSPD; fDiamondProfileSPD = NULL;
+  if (rec.fDiamondProfileSPD) fDiamondProfileSPD = new AliESDVertex(*rec.fDiamondProfileSPD);
   delete fDiamondProfile; fDiamondProfile = NULL;
   if (rec.fDiamondProfile) fDiamondProfile = new AliESDVertex(*rec.fDiamondProfile);
   delete fDiamondProfileTPC; fDiamondProfileTPC = NULL;
   if (rec.fDiamondProfileTPC) fDiamondProfileTPC = new AliESDVertex(*rec.fDiamondProfileTPC);
-  fMeanVertexConstraint = rec.fMeanVertexConstraint;
 
   delete fGRPData; fGRPData = NULL;
   //  if (rec.fGRPData) fGRPData = (TMap*)((rec.fGRPData)->Clone());
@@ -481,15 +468,17 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
   delete fAlignObjArray; fAlignObjArray = NULL;
 
   fCDBUri        = "";
+  fQARefUri      = rec.fQARefUri;
   fSpecCDBUri.Delete();
   fInitCDBCalled               = rec.fInitCDBCalled;
   fSetRunNumberFromDataCalled  = rec.fSetRunNumberFromDataCalled;
   fQADetectors                 = rec.fQADetectors;
-  fQASteer                     = NULL;  
+  fQAManager                     = NULL;  
   fQATasks                     = rec.fQATasks; 
   fRunQA                       = rec.fRunQA;  
   fRunGlobalQA                 = rec.fRunGlobalQA;
   fSameQACycle                 = rec.fSameQACycle;
+  fInitQACalled                = rec.fInitQACalled;
   fRunPlaneEff                 = rec.fRunPlaneEff;
 
   fesd     = NULL;
@@ -513,17 +502,77 @@ AliReconstruction::~AliReconstruction()
 
   CleanUp();
   delete fGRPData;
-  delete fForcedFieldMap;
   fOptions.Delete();
   if (fAlignObjArray) {
     fAlignObjArray->Delete();
     delete fAlignObjArray;
   }
   fSpecCDBUri.Delete();
-  delete fQASteer;
+  delete fQAManager;
   AliCodeTimer::Instance()->Print();
 }
 
+//_____________________________________________________________________________
+void AliReconstruction::InitQA()
+{
+  //Initialize the QA and start of cycle 
+  AliCodeTimerAuto("");
+  
+  if (fInitQACalled) return;
+  fInitQACalled = kTRUE;
+  
+  fQAManager = AliQAManager::QAManager("rec") ; 
+  if (fQAManager->IsDefaultStorageSet()) {
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    AliWarning("Default QA reference storage has been already set !");
+    AliWarning(Form("Ignoring the default storage declared in AliReconstruction: %s",fQARefUri.Data()));
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    fQARefUri = fQAManager->GetDefaultStorage()->GetURI();
+  } else {
+    if (fQARefUri.Length() > 0) {
+       AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+       AliDebug(2, Form("Default QA reference storage is set to: %s", fQARefUri.Data()));
+       AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+      } else {
+        fQARefUri="local://$ALICE_ROOT/QAref";
+        AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+        AliWarning("Default QA refeference storage not yet set !!!!");
+        AliWarning(Form("Setting it now to: %s", fQARefUri.Data()));
+        AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+               
+      }
+    fQAManager->SetDefaultStorage(fQARefUri);
+  }
+  
+  if (fRunQA) {
+  fQAManager->SetActiveDetectors(fQADetectors) ; 
+  for (Int_t det = 0 ; det < AliQA::kNDET ; det++) {
+    fQAManager->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ;  
+    fQAManager->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ;
+  }
+  if (!fRawReader && fQATasks.Contains(AliQA::kRAWS))
+    fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ;
+  fQAManager->SetTasks(fQATasks) ; 
+  fQAManager->InitQADataMaker(AliCDBManager::Instance()->GetRun()) ; 
+  }
+  if (fRunGlobalQA) {
+    Bool_t sameCycle = kFALSE ;
+    AliQADataMaker *qadm = fQAManager->GetQADataMaker(AliQA::kGLOBAL);
+    AliInfo(Form("Initializing the global QA data maker"));
+    if (fQATasks.Contains(Form("%d", AliQA::kRECPOINTS))) {
+      qadm->StartOfCycle(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun(), sameCycle) ; 
+      TObjArray **arr=qadm->Init(AliQA::kRECPOINTS);
+      AliTracker::SetResidualsArray(arr);
+      sameCycle = kTRUE ; 
+    }
+    if (fQATasks.Contains(Form("%d", AliQA::kESDS))) {
+      qadm->StartOfCycle(AliQA::kESDS, AliCDBManager::Instance()->GetRun(), sameCycle) ; 
+      qadm->Init(AliQA::kESDS);
+    }
+    AliSysInfo::AddStamp("InitQA");
+  }
+}
+
 //_____________________________________________________________________________
 void AliReconstruction::InitCDB()
 {
@@ -551,7 +600,7 @@ void AliReconstruction::InitCDB()
        AliDebug(2, Form("Default CDB storage is set to: %s", fCDBUri.Data()));
        AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
     } else {
-       fCDBUri="local://$ALICE_ROOT";
+       fCDBUri="local://$ALICE_ROOT/OCDB";
        AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        AliWarning("Default CDB storage not yet set !!!!");
        AliWarning(Form("Setting it now to: %s", fCDBUri.Data()));
@@ -582,6 +631,15 @@ void AliReconstruction::SetDefaultStorage(const char* uri) {
 
 }
 
+//_____________________________________________________________________________
+void AliReconstruction::SetQARefDefaultStorage(const char* uri) {
+  // Store the desired default CDB storage location
+  // Activate it later within the Run() method
+  
+  fQARefUri = uri;
+  AliQA::SetQARefStorage(fQARefUri.Data()) ;
+  
+}
 //_____________________________________________________________________________
 void AliReconstruction::SetSpecificStorage(const char* calibType, const char* uri) {
 // Store a detector-specific CDB storage location
@@ -590,7 +648,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur
   AliCDBPath aPath(calibType);
   if(!aPath.IsValid()){
        // if calibType is not wildcard but it is a valid detector, add "/*" to make it a valid path
-       for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+       for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
                if(!strcmp(calibType, fgkDetectorName[iDet])) {
                        aPath.SetPath(Form("%s/*", calibType));
                        AliInfo(Form("Path for specific storage set to %s", aPath.GetPath().Data()));
@@ -605,7 +663,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur
 
 //  // check that calibType refers to a "valid" detector name
 //  Bool_t isDetector = kFALSE;
-//  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+//  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
 //    TString detName = fgkDetectorName[iDet];
 //    if(aPath.GetLevel0() == detName) {
 //     isDetector = kTRUE;
@@ -707,16 +765,18 @@ Bool_t AliReconstruction::MisalignGeometry(const TString& detectors)
     TString detStr = detectors;
     TString loadAlObjsListOfDets = "";
     
-    for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+    for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
       if(!IsSelected(fgkDetectorName[iDet], detStr)) continue;
-      if(fgkDetectorName[iDet]=="HLT") continue;
-      if(AliGeomManager::IsModuleInGeom(fgkDetectorName[iDet]))
+      if(!strcmp(fgkDetectorName[iDet],"HLT")) continue;
+      
+      if(AliGeomManager::GetNalignable(fgkDetectorName[iDet]) != 0)
       {
        loadAlObjsListOfDets += fgkDetectorName[iDet];
        loadAlObjsListOfDets += " ";
       }
     } // end loop over detectors
-    if(AliGeomManager::IsModuleInGeom("FRAME"))
+    
+    if(AliGeomManager::GetNalignable("GRP") != 0)
       loadAlObjsListOfDets.Prepend("GRP "); //add alignment objects for non-sensitive modules
     AliGeomManager::ApplyAlignObjsFromCDB(loadAlObjsListOfDets.Data());
     AliCDBManager::Instance()->UnloadFromCache("*/Align/*");
@@ -786,11 +846,11 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam
   // First check if the reco-params are global
   if(!strcmp(detector, "GRP")) {
     par->SetAsDefault();
-    fRecoParam.AddDetRecoParam(fgkNDetectors,par);
+    fRecoParam.AddDetRecoParam(kNDetectors,par);
     return;
   }
 
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if(!strcmp(detector, fgkDetectorName[iDet])) {
       par->SetAsDefault();
       fRecoParam.AddDetRecoParam(iDet,par);
@@ -801,7 +861,10 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam
 }
 
 //_____________________________________________________________________________
-Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Float_t factor, const char *path) {
+Bool_t AliReconstruction::SetFieldMap(Float_t l3Cur, Float_t diCur, Float_t l3Pol, 
+                                     Float_t diPol, Float_t beamenergy, 
+                                     const Char_t *beamtype, const Char_t *path) 
+{
   //------------------------------------------------
   // The magnetic field map, defined externally...
   // L3 current 30000 A  -> 0.5 T
@@ -815,53 +878,69 @@ Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Floa
 
   const Float_t tolerance=0.03; // relative current tolerance
   const Float_t zero=77.;       // "zero" current (A)
-
-  Int_t map=0;
-  Bool_t dipoleON=kFALSE;
-
-  TString s=(factor < 0) ? "L3: -" : "L3: +";
-
-  l3Current = TMath::Abs(l3Current);
-  if (TMath::Abs(l3Current-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) {
-    map=AliMagWrapCheb::k5kG;
-    s+="0.5 T;  ";
-  } else
-  if (TMath::Abs(l3Current-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) {
-    map=AliMagWrapCheb::k2kG;
-    s+="0.2 T;  ";
-  } else
-  if (l3Current < zero) {
-    map=AliMagWrapCheb::k2kG;
-    s+="0.0 T;  ";
-    factor=0.;                  // in fact, this is a global factor...
+  //
+  TString s=(l3Pol < 0) ? "L3: -" : "L3: +";
+  //
+  AliMagF::BMap_t map = AliMagF::k5kG;
+  //
+  double fcL3,fcDip;
+  //
+  l3Cur = TMath::Abs(l3Cur);
+  if (TMath::Abs(l3Cur-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) {
+    fcL3 = l3Cur/l3NominalCurrent1;
+    map  = AliMagF::k5kG;
+    s   += "0.5 T;  ";
+  } else if (TMath::Abs(l3Cur-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) {
+    fcL3 = l3Cur/l3NominalCurrent2;
+    map  = AliMagF::k2kG;
+    s   += "0.2 T;  ";
+  } else if (l3Cur <= zero) {
+    fcL3 = 0;
+    map  = AliMagF::k5kGUniform;
+    s   += "0.0 T;  ";
     fUniformField=kTRUE;        // track with the uniform (zero) B field
   } else {
-    AliError(Form("Wrong L3 current (%f A)!",l3Current));
+    AliError(Form("Wrong L3 current (%f A)!",l3Cur));
     return kFALSE;
   }
-
-  diCurrent = TMath::Abs(diCurrent);
-  if (TMath::Abs(diCurrent-diNominalCurrent)/diNominalCurrent < tolerance) {
+  //
+  diCur = TMath::Abs(diCur);
+  if (TMath::Abs(diCur-diNominalCurrent)/diNominalCurrent < tolerance) {
     // 3% current tolerance...
-    dipoleON=kTRUE;
-    s+="Dipole ON";
-  } else
-  if (diCurrent < zero) { // some small current..
-    dipoleON=kFALSE;
-    s+="Dipole OFF";
+    fcDip = diCur/diNominalCurrent;
+    s    += "Dipole ON";
+  } else if (diCur <= zero) { // some small current..
+    fcDip = 0.;
+    s    += "Dipole OFF";
   } else {
-    AliError(Form("Wrong dipole current (%f A)!",diCurrent));
+    AliError(Form("Wrong dipole current (%f A)!",diCur));
     return kFALSE;
   }
-
-  delete fForcedFieldMap;
-  fForcedFieldMap=
-    new AliMagWrapCheb("B field map  ",s,2,factor,10.,map,dipoleON,path);
-
-  fForcedFieldMap->Print();
-
-  AliTracker::SetFieldMap(fForcedFieldMap,fUniformField);    
-
+  //
+  if (l3Pol!=diPol && (map==AliMagF::k5kG || map==AliMagF::k2kG) && fcDip!=0) {
+    AliError("L3 and Dipole polarities must be the same");
+    return kFALSE;
+  }
+  //
+  if (l3Pol<0) fcL3  = -fcL3;
+  if (diPol<0) fcDip = -fcDip;
+  //
+  AliMagF::BeamType_t btype = AliMagF::kNoBeamField;
+  TString btypestr = beamtype;
+  btypestr.ToLower();
+  TPRegexp protonBeam("(proton|p)\\s*-?\\s*\\1");
+  TPRegexp ionBeam("(lead|pb|ion|a)\\s*-?\\s*\\1");
+  if (btypestr.Contains(ionBeam)) btype = AliMagF::kBeamTypeAA;
+  else if (btypestr.Contains(protonBeam)) btype = AliMagF::kBeamTypepp;
+  else {
+    AliInfo(Form("Cannot determine the beam type from %s, assume no LHC magnet field",beamtype));
+  }
+  
+  AliMagF* fld = new AliMagF("MagneticFieldMap", s.Data(), 2, fcL3, fcDip, 10., map, path, 
+                            btype,beamenergy);
+  TGeoGlobalMagField::Instance()->SetField( fld );
+  TGeoGlobalMagField::Instance()->Lock();
+  //
   return kTRUE;
 }
 
@@ -914,6 +993,8 @@ Bool_t AliReconstruction::InitGRP() {
     AliError("GRP/GRP/Data entry:  missing value for the beam energy ! Using 0");
     beamEnergy = 0;
   }
+  // energy is provided in MeV*120
+  beamEnergy /= 120E3;
 
   TString runType = fGRPData->GetRunType();
   if (runType==AliGRPObject::GetInvalidString()) {
@@ -922,29 +1003,40 @@ Bool_t AliReconstruction::InitGRP() {
   }
 
   Int_t activeDetectors = fGRPData->GetDetectorMask();
-  if (activeDetectors==AliGRPObject::GetInvalidInt()) {
+  if (activeDetectors==AliGRPObject::GetInvalidUInt()) {
     AliError("GRP/GRP/Data entry:  missing value for the detector mask ! Using 1074790399");
     activeDetectors = 1074790399;
   }
 
   fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors);
-
   fRunInfo->Dump();
 
 
   // Process the list of active detectors
   if (activeDetectors) {
     UInt_t detMask = activeDetectors;
+    fRunLocalReconstruction = MatchDetectorList(fRunLocalReconstruction,detMask);
+    fRunTracking = MatchDetectorList(fRunTracking,detMask);
+    fFillESD = MatchDetectorList(fFillESD,detMask);
+    fQADetectors = MatchDetectorList(fQADetectors,detMask);
     fLoadCDB.Form("%s %s %s %s",
                  fRunLocalReconstruction.Data(),
                  fRunTracking.Data(),
                  fFillESD.Data(),
                  fQADetectors.Data());
-    fRunLocalReconstruction = MatchDetectorList(fRunLocalReconstruction,detMask);
-    fRunTracking = MatchDetectorList(fRunTracking,detMask);
-    fFillESD = MatchDetectorList(fFillESD,detMask);
-    fQADetectors = MatchDetectorList(fQADetectors,detMask);
     fLoadCDB = MatchDetectorList(fLoadCDB,detMask);
+    if (!((detMask >> AliDAQ::DetectorID("ITSSPD")) & 0x1)) {
+      // switch off the vertexer
+      AliInfo("SPD is not in the list of active detectors. Vertexer switched off.");
+      fRunVertexFinder = kFALSE;
+    }
+    if (!((detMask >> AliDAQ::DetectorID("TRG")) & 0x1)) {
+      // switch off the reading of CTP raw-data payload
+      if (fFillTriggerESD) {
+       AliInfo("CTP is not in the list of active detectors. CTP data reading switched off.");
+       fFillTriggerESD = kFALSE;
+      }
+    }
   }
 
   AliInfo("===================================================================================");
@@ -956,20 +1048,17 @@ Bool_t AliReconstruction::InitGRP() {
   AliInfo("===================================================================================");
 
   //*** Dealing with the magnetic field map
-  if (AliTracker::GetFieldMap()) {
-    AliInfo("Running with the externally set B field !");
-  } else {
+  if ( TGeoGlobalMagField::Instance()->IsLocked() ) {AliInfo("Running with the externally locked B field !");}
+  else {
     // Construct the field map out of the information retrieved from GRP.
-
     Bool_t ok = kTRUE;
-
     // L3
     Float_t l3Current = fGRPData->GetL3Current((AliGRPObject::Stats)0);
     if (l3Current == AliGRPObject::GetInvalidFloat()) {
       AliError("GRP/GRP/Data entry:  missing value for the L3 current !");
       ok = kFALSE;
     }
-
+    
     Char_t l3Polarity = fGRPData->GetL3Polarity();
     if (l3Polarity == AliGRPObject::GetInvalidChar()) {
       AliError("GRP/GRP/Data entry:  missing value for the L3 polarity !");
@@ -1019,42 +1108,34 @@ Bool_t AliReconstruction::InitGRP() {
     */
 
     if (ok) { 
-       Float_t l3Cur=TMath::Abs(l3Current);
-       Float_t diCur=TMath::Abs(diCurrent);
-       Float_t l3Pol=l3Polarity;
-       //       Float_t l3Cur=TMath::Abs(atof(l3Current->GetName()));
-       //Float_t diCur=TMath::Abs(atof(diCurrent->GetName()));
-       //Float_t l3Pol=atof(l3Polarity->GetName());
-       Float_t factor=1.;
-       if (l3Pol != 0.) factor=-1.;
-    
-
-      if (!SetFieldMap(l3Cur, diCur, factor)) {
-         AliFatal("Failed to creat a B field map ! Exiting...");
-      }
+      if ( !SetFieldMap(l3Current, diCurrent, l3Polarity ? -1:1, diPolarity ? -1:1) )
+       AliFatal("Failed to creat a B field map ! Exiting...");
       AliInfo("Running with the B field constructed out of GRP !");
     }
-    else {
-      AliFatal("B field is neither set nor constructed from GRP ! Exitig...");
-    }
-
+    else AliFatal("B field is neither set nor constructed from GRP ! Exitig...");
+    
+  }
+  
+  //*** Get the diamond profiles from OCDB
+  entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertexSPD");
+  if (entry) {
+    fDiamondProfileSPD = dynamic_cast<AliESDVertex*> (entry->GetObject());  
+  } else {
+     AliError("No SPD diamond profile found in OCDB!");
   }
 
-  //*** Get the diamond profile from OCDB
   entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertex");
   if (entry) {
-    if (fMeanVertexConstraint)
-      fDiamondProfile = dynamic_cast<AliESDVertex*> (entry->GetObject());  
+    fDiamondProfile = dynamic_cast<AliESDVertex*> (entry->GetObject());  
   } else {
      AliError("No diamond profile found in OCDB!");
   }
 
   entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertexTPC");
   if (entry) {
-    if (fMeanVertexConstraint)
-      fDiamondProfileTPC = dynamic_cast<AliESDVertex*> (entry->GetObject());  
+    fDiamondProfileTPC = dynamic_cast<AliESDVertex*> (entry->GetObject());  
   } else {
-     AliError("No diamond profile found in OCDB!");
+     AliError("No TPC diamond profile found in OCDB!");
   }
 
   return kTRUE;
@@ -1068,7 +1149,7 @@ Bool_t AliReconstruction::LoadCDB()
   AliCDBManager::Instance()->Get("GRP/CTP/Config");
 
   TString detStr = fLoadCDB;
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
     AliCDBManager::Instance()->GetAll(Form("%s/Calib/*",fgkDetectorName[iDet]));
   }
@@ -1242,15 +1323,16 @@ void AliReconstruction::Begin(TTree *)
   }
   AliSysInfo::AddStamp("InitRecoParams");
 
-  if (fInput) {
+  if (fInput && gProof) {
     if (reco) *reco = *this;
-    fInput->Add(gGeoManager);
+
+    gProof->AddInputData(gGeoManager,kTRUE);
     gGeoManager = NULL;
-    fInput->Add(const_cast<TMap*>(AliCDBManager::Instance()->GetEntryCache()));
+    gProof->AddInputData(const_cast<TMap*>(AliCDBManager::Instance()->GetEntryCache()),kTRUE);
     fInput->Add(new TParameter<Int_t>("RunNumber",AliCDBManager::Instance()->GetRun()));
-    AliMagF *magFieldMap = (AliMagF*)AliTracker::GetFieldMap();
+    AliMagF *magFieldMap = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
     magFieldMap->SetName("MagneticFieldMap");
-    fInput->Add(magFieldMap);
+    gProof->AddInputData(magFieldMap,kTRUE);
   }
 
 }
@@ -1282,7 +1364,7 @@ void AliReconstruction::SlaveBegin(TTree*)
       }
     }
     if (AliMagF *map = (AliMagF*)fInput->FindObject("MagneticFieldMap")) {
-      AliTracker::SetFieldMap(map,fUniformField);
+      TGeoGlobalMagField::Instance()->SetField(map);
     }
     if (TNamed *outputFileName = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE")) {
       outProofFile = new TProofOutputFile(gSystem->BaseName(TUrl(outputFileName->GetTitle()).GetFile()));
@@ -1300,14 +1382,6 @@ void AliReconstruction::SlaveBegin(TTree*)
   AliSysInfo::AddStamp("LoadLoader");
  
   ftVertexer = new AliVertexerTracks(AliTracker::GetBz());
-  if(fDiamondProfile && fMeanVertexConstraint) ftVertexer->SetVtxStart(fDiamondProfile);
-
-  // get vertexer
-  if (fRunVertexFinder && !CreateVertexer()) {
-    Abort("CreateVertexer", TSelector::kAbortProcess);
-    return;
-  }
-  AliSysInfo::AddStamp("CreateVertexer");
 
   // get trackers
   if (!fRunTracking.IsNull() && !CreateTrackers(fRunTracking)) {
@@ -1337,58 +1411,64 @@ void AliReconstruction::SlaveBegin(TTree*)
   ftree = new TTree("esdTree", "Tree with ESD objects");
   fesd = new AliESDEvent();
   fesd->CreateStdContent();
+
+  fesd->WriteToTree(ftree);
   if (fWriteESDfriend) {
+    // careful:
+    // Since we add the branch manually we must 
+    // book and add it after WriteToTree
+    // otherwise it is created twice,
+    // once via writetotree and once here.
+    // The case for AliESDfriend is now 
+    // caught also in AlIESDEvent::WriteToTree but 
+    // be careful when changing the name (AliESDfriend is not 
+    // a TNamed so we had to hardwire it)
     fesdf = new AliESDfriend();
     TBranch *br=ftree->Branch("ESDfriend.","AliESDfriend", &fesdf);
     br->SetFile("AliESDfriends.root");
     fesd->AddObject(fesdf);
   }
-  fesd->WriteToTree(ftree);
   ftree->GetUserInfo()->Add(fesd);
 
   fhlttree = new TTree("HLTesdTree", "Tree with HLT ESD objects");
   fhltesd = new AliESDEvent();
   fhltesd->CreateStdContent();
+
+  // read the ESD template from CDB
+  // HLT is allowed to put non-std content to its ESD, the non-std
+  // objects need to be created before invocation of WriteToTree in
+  // order to create all branches. Initialization is done from an
+  // ESD layout template in CDB
+  AliCDBManager* man = AliCDBManager::Instance();
+  AliCDBPath hltESDConfigPath("HLT/ConfigHLT/esdLayout");
+  AliCDBEntry* hltESDConfig=NULL;
+  if (man->GetId(hltESDConfigPath)!=NULL &&
+      (hltESDConfig=man->Get(hltESDConfigPath))!=NULL) {
+    AliESDEvent* pESDLayout=dynamic_cast<AliESDEvent*>(hltESDConfig->GetObject());
+    if (pESDLayout) {
+      // init all internal variables from the list of objects
+      pESDLayout->GetStdContent();
+
+      // copy content and create non-std objects
+      *fhltesd=*pESDLayout;
+      fhltesd->Reset();
+    } else {
+      AliError(Form("error setting hltEsd layout from %s: invalid object type",
+                   hltESDConfigPath.GetPath().Data()));
+    }
+  }
+
   fhltesd->WriteToTree(fhlttree);
   fhlttree->GetUserInfo()->Add(fhltesd);
 
-  ProcInfo_t ProcInfo;
-  gSystem->GetProcInfo(&ProcInfo);
-  AliInfo(Form("Current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual));
+  ProcInfo_t procInfo;
+  gSystem->GetProcInfo(&procInfo);
+  AliInfo(Form("Current memory usage %d %d", procInfo.fMemResident, procInfo.fMemVirtual));
   
   //QA
   //Initialize the QA and start of cycle 
-  if (fRunQA) {
-    fQASteer = new AliQADataMakerSteer("rec") ; 
-    fQASteer->SetActiveDetectors(fQADetectors) ; 
-    for (Int_t det = 0 ; det < AliQA::kNDET ; det++) {
-      fQASteer->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ;  
-      if (fQAWriteExpert[det])
-        fQASteer->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ;
-    }
-    
-    if (!fRawReader && fQATasks.Contains(AliQA::kRAWS))
-      fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ;
-    fQASteer->SetTasks(fQATasks) ; 
-    fQASteer->InitQADataMaker(AliCDBManager::Instance()->GetRun(), fRecoParam) ; 
-  }
-  
-  if (fRunGlobalQA) {
-    Bool_t sameCycle = kFALSE ;
-    if (!fQASteer) fQASteer = new AliQADataMakerSteer("rec") ; 
-    AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL);
-    AliInfo(Form("Initializing the global QA data maker"));
-    if (fQATasks.Contains(Form("%d", AliQA::kRECPOINTS))) {
-      qadm->StartOfCycle(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun(), sameCycle) ; 
-      TObjArray *arr=qadm->Init(AliQA::kRECPOINTS);
-      AliTracker::SetResidualsArray(arr);
-      sameCycle = kTRUE ; 
-    }
-    if (fQATasks.Contains(Form("%d", AliQA::kESDS))) {
-      qadm->StartOfCycle(AliQA::kESDS, AliCDBManager::Instance()->GetRun(), sameCycle) ; 
-      qadm->Init(AliQA::kESDS);
-    }
-  }
+  if (fRunQA || fRunGlobalQA) 
+    InitQA() ; 
 
   //Initialize the Plane Efficiency framework
   if (fRunPlaneEff && !InitPlaneEff()) {
@@ -1455,29 +1535,34 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
 
   AliInfo(Form("processing event %d", iEvent));
 
+  fRunLoader->GetEvent(iEvent);
+
   // Fill Event-info object
   GetEventInfo();
   fRecoParam.SetEventSpecie(fRunInfo,fEventInfo);
+  AliInfo(Form("Current event specie: %s",fRecoParam.PrintEventSpecie()));
 
   // Set the reco-params
   {
     TString detStr = fLoadCDB;
-    for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+    for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
       if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
       AliReconstructor *reconstructor = GetReconstructor(iDet);
       if (reconstructor && fRecoParam.GetDetRecoParamArray(iDet)) {
-       const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet);
-       reconstructor->SetRecoParam(par);
+        const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet);
+        reconstructor->SetRecoParam(par);
+        if (fRunQA) {
+          fQAManager->SetRecoParam(iDet, par) ; 
+        }
       }
     }
   }
 
-  fRunLoader->GetEvent(iEvent);
-
     // QA on single raw 
-    if (fRunQA) 
-                       fQASteer->RunOneEvent(fRawReader) ;  
-
+  if (fRunQA) {
+    fQAManager->SetEventSpecie(fRecoParam.GetEventSpecie()) ;
+    fQAManager->RunOneEvent(fRawReader) ;  
+  }
     // local single event reconstruction
     if (!fRunLocalReconstruction.IsNull()) {
       TString detectors=fRunLocalReconstruction;
@@ -1504,7 +1589,8 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
     fhltesd->SetMagneticField(AliTracker::GetBz());
 
     // Set most probable pt, for B=0 tracking
-    const AliGRPRecoParam *grpRecoParam = dynamic_cast<const AliGRPRecoParam*>(fRecoParam.GetDetRecoParam(fgkNDetectors));
+    // Get the global reco-params. They are atposition 16 inside the array of detectors in fRecoParam
+    const AliGRPRecoParam *grpRecoParam = dynamic_cast<const AliGRPRecoParam*>(fRecoParam.GetDetRecoParam(kNDetectors));
     if (grpRecoParam) AliExternalTrackParam::SetMostProbablePt(grpRecoParam->GetMostProbablePt());
     
     // Fill raw-data error log into the ESD
@@ -1546,7 +1632,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
       // Temporary fix to avoid problems with HLT that overwrites the offline ESDs
       if (detectors.Contains("ALL")) {
        detectors="";
-       for (Int_t idet=0; idet<fgkNDetectors; ++idet){
+       for (Int_t idet=0; idet<kNDetectors; ++idet){
          detectors += fgkDetectorName[idet];
          detectors += " ";
        }
@@ -1582,7 +1668,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
     UShort_t *selectedIdx=new UShort_t[ntracks];
 
     for (Int_t itrack=0; itrack<ntracks; itrack++){
-      const Double_t kMaxStep = 5;   //max step over the material
+      const Double_t kMaxStep = 1;   //max step over the material
       Bool_t ok;
 
       AliESDtrack *track = fesd->GetTrack(itrack);
@@ -1593,7 +1679,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
       ok = kFALSE;
       if (tpcTrack)
        ok = AliTracker::
-         PropagateTrackTo(tpcTrack,kRadius,track->GetMass(),kMaxStep,kTRUE);
+         PropagateTrackTo(tpcTrack,kRadius,track->GetMass(),kMaxStep,kFALSE);
 
       if (ok) {
        Int_t n=trkArray.GetEntriesFast();
@@ -1605,7 +1691,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
       if (track->IsOn(AliESDtrack::kITSrefit)) continue;
 
       AliTracker::
-         PropagateTrackTo(track,kRadius,track->GetMass(),kMaxStep,kTRUE);
+         PropagateTrackTo(track,kRadius,track->GetMass(),kMaxStep,kFALSE);
       track->RelateToVertex(fesd->GetPrimaryVertexSPD(), kBz, kVeryBig);
 
     }
@@ -1622,11 +1708,9 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
     }
 
     if (runVertexFinderTracks) {
-      // Get the global reco-params. They are atposition 16 inside the array of detectors in fRecoParam
-      const AliGRPRecoParam *grpRecoParam = dynamic_cast<const AliGRPRecoParam*>(fRecoParam.GetDetRecoParam(fgkNDetectors));
-
        // TPC + ITS primary vertex
        ftVertexer->SetITSMode();
+       ftVertexer->SetConstraintOff();
        // get cuts for vertexer from AliGRPRecoParam
        if (grpRecoParam) {
         Int_t nCutsVertexer = grpRecoParam->GetVertexerTracksNCuts();
@@ -1634,16 +1718,13 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
         grpRecoParam->GetVertexerTracksCutsITS(cutsVertexer);
         ftVertexer->SetCuts(cutsVertexer);
         delete [] cutsVertexer; cutsVertexer = NULL; 
-       }
-       if(fDiamondProfile && fMeanVertexConstraint) {
-        ftVertexer->SetVtxStart(fDiamondProfile);
-       } else {
-        ftVertexer->SetConstraintOff();
+        if(fDiamondProfile && grpRecoParam->GetVertexerTracksConstraintITS())
+          ftVertexer->SetVtxStart(fDiamondProfile);
        }
        AliESDVertex *pvtx=ftVertexer->FindPrimaryVertex(fesd);
        if (pvtx) {
           if (pvtx->GetStatus()) {
-             fesd->SetPrimaryVertex(pvtx);
+             fesd->SetPrimaryVertexTracks(pvtx);
              for (Int_t i=0; i<ntracks; i++) {
                 AliESDtrack *t = fesd->GetTrack(i);
                  t->RelateToVertex(pvtx, kBz, kVeryBig);
@@ -1653,6 +1734,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
 
        // TPC-only primary vertex
        ftVertexer->SetTPCMode();
+       ftVertexer->SetConstraintOff();
        // get cuts for vertexer from AliGRPRecoParam
        if (grpRecoParam) {
         Int_t nCutsVertexer = grpRecoParam->GetVertexerTracksNCuts();
@@ -1660,11 +1742,8 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
         grpRecoParam->GetVertexerTracksCutsTPC(cutsVertexer);
         ftVertexer->SetCuts(cutsVertexer);
         delete [] cutsVertexer; cutsVertexer = NULL; 
-       }
-       if(fDiamondProfileTPC && fMeanVertexConstraint) {
-        ftVertexer->SetVtxStart(fDiamondProfileTPC);
-       } else {
-        ftVertexer->SetConstraintOff();
+        if(fDiamondProfileTPC && grpRecoParam->GetVertexerTracksConstraintTPC())
+          ftVertexer->SetVtxStart(fDiamondProfileTPC);
        }
        pvtx=ftVertexer->FindPrimaryVertex(&trkArray,selectedIdx);
        if (pvtx) {
@@ -1698,14 +1777,16 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
     // write ESD
     if (fCleanESD) CleanESD(fesd);
 
-  if (fRunQA) 
-    fQASteer->RunOneEvent(fesd) ; 
-
+  if (fRunQA) {
+    fQAManager->SetEventSpecie(fRecoParam.GetEventSpecie()) ;
+    fQAManager->RunOneEvent(fesd) ; 
+  }
   if (fRunGlobalQA) {
-      AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL);
-      if (qadm && fQATasks.Contains(Form("%d", AliQA::kESDS)))
-        qadm->Exec(AliQA::kESDS, fesd);
-    }
+      AliQADataMaker *qadm = fQAManager->GetQADataMaker(AliQA::kGLOBAL);
+      qadm->SetEventSpecie(fRecoParam.GetEventSpecie()) ;
+    if (qadm && fQATasks.Contains(Form("%d", AliQA::kESDS)))
+      qadm->Exec(AliQA::kESDS, fesd);
+  }
 
     if (fWriteESDfriend) {
       //      fesdf->~AliESDfriend();
@@ -1734,18 +1815,18 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
       new (fesdf) AliESDfriend(); // Reset...
     }
  
-    ProcInfo_t ProcInfo;
-    gSystem->GetProcInfo(&ProcInfo);
-    AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, ProcInfo.fMemResident, ProcInfo.fMemVirtual));
+    ProcInfo_t procInfo;
+    gSystem->GetProcInfo(&procInfo);
+    AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, procInfo.fMemResident, procInfo.fMemVirtual));
   
     fEventInfo.Reset();
-    for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+    for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
       if (fReconstructor[iDet])
        fReconstructor[iDet]->SetRecoParam(NULL);
     }
        
   if (fRunQA || fRunGlobalQA) 
-      fQASteer->Increment() ; 
+      fQAManager->Increment() ; 
   
     return kTRUE;
 }
@@ -1794,13 +1875,6 @@ void AliReconstruction::SlaveTerminate()
    ftree->GetUserInfo()->Add(cdbListCopy);
 
 
-  if(fESDPar.Contains("ESD.par")){
-    AliInfo("Attaching ESD.par to Tree");
-    TNamed *fn = CopyFileToTNamed(fESDPar.Data(),"ESD.par");
-    ftree->GetUserInfo()->Add(fn);
-  }
-
-
   ffile->cd();
 
   if (fWriteESDfriend)
@@ -1815,11 +1889,11 @@ void AliReconstruction::SlaveTerminate()
   }
 
   // End of cycle for the in-loop  
-  if (fRunQA) {
-    fQASteer->EndOfCycle() ;
-  }
+  if (fRunQA) 
+    fQAManager->EndOfCycle() ;
+  
   if (fRunGlobalQA) {
-    AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL);
+    AliQADataMaker *qadm = fQAManager->GetQADataMaker(AliQA::kGLOBAL);
     if (qadm) {
       if (fQATasks.Contains(Form("%d", AliQA::kRECPOINTS))) 
         qadm->EndOfCycle(AliQA::kRECPOINTS);
@@ -1840,7 +1914,7 @@ void AliReconstruction::Terminate()
   AliCodeTimerAuto("");
 
   AliESDTagCreator *esdtagCreator = new AliESDTagCreator();
-  esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData);
+  esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData, AliQA::Instance()->GetQA(), AliQA::Instance()->GetEventSpecies(), AliQA::kNDET, AliRecoParam::kNSpecies);
 
   // Cleanup of CDB manager: cache and active storages!
   AliCDBManager::Instance()->ClearCache();
@@ -1855,7 +1929,7 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors)
   AliCodeTimerAuto("")
 
   TString detStr = detectors;
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
     AliReconstructor* reconstructor = GetReconstructor(iDet);
     if (!reconstructor) continue;
@@ -1911,9 +1985,10 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors)
     }
 
                TString detQAStr(fQADetectors) ; 
-               if (fRunQA) 
-                       fQASteer->RunOneEventInOneDetector(iDet, clustersTree) ; 
-    
+               if (fRunQA) {
+      fQAManager->SetEventSpecie(fRecoParam.GetEventSpecie()) ;
+                       fQAManager->RunOneEventInOneDetector(iDet, clustersTree) ; 
+    }
        loader->WriteRecPoints("OVERWRITE");
        loader->UnloadRecPoints();
        AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr);
@@ -1934,63 +2009,52 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd)
 
   AliCodeTimerAuto("")
 
+  AliVertexer *vertexer = CreateVertexer();
+  if (!vertexer) return kFALSE;
+
+  AliInfo("running the ITS vertex finder");
   AliESDVertex* vertex = NULL;
-  Double_t vtxPos[3] = {0, 0, 0};
-  Double_t vtxErr[3] = {0.07, 0.07, 0.1};
-  TArrayF mcVertex(3); 
-  if (fRunLoader->GetHeader() && fRunLoader->GetHeader()->GenEventHeader()) {
-    fRunLoader->GetHeader()->GenEventHeader()->PrimaryVertex(mcVertex);
-    for (Int_t i = 0; i < 3; i++) vtxPos[i] = mcVertex[i];
-  }
-
-  if (fVertexer) {
-    AliInfo("running the ITS vertex finder");
-    if (fLoader[0]) {
-      fLoader[0]->LoadRecPoints();
-      TTree* cltree = fLoader[0]->TreeR();
-      if (cltree) {
-       if(fDiamondProfile) fVertexer->SetVtxStart(fDiamondProfile);
-       vertex = fVertexer->FindVertexForCurrentEvent(cltree);
-      }
-      else {
-       AliError("Can't get the ITS cluster tree");
-      }
-      fLoader[0]->UnloadRecPoints();
-    }
-    else {
-      AliError("Can't get the ITS loader");
-    }
-    if(!vertex){
-      AliWarning("Vertex not found");
-      vertex = new AliESDVertex();
-      vertex->SetName("default");
+  if (fLoader[0]) {
+    fLoader[0]->LoadRecPoints();
+    TTree* cltree = fLoader[0]->TreeR();
+    if (cltree) {
+      if(fDiamondProfileSPD) vertexer->SetVtxStart(fDiamondProfileSPD);
+      vertex = vertexer->FindVertexForCurrentEvent(cltree);
     }
     else {
-      vertex->SetName("reconstructed");
+      AliError("Can't get the ITS cluster tree");
     }
-
-  } else {
-    AliInfo("getting the primary vertex from MC");
-    vertex = new AliESDVertex(vtxPos, vtxErr);
+    fLoader[0]->UnloadRecPoints();
   }
-
-  if (vertex) {
-    vertex->GetXYZ(vtxPos);
-    vertex->GetSigmaXYZ(vtxErr);
-  } else {
-    AliWarning("no vertex reconstructed");
-    vertex = new AliESDVertex(vtxPos, vtxErr);
+  else {
+    AliError("Can't get the ITS loader");
+  }
+  if(!vertex){
+    AliWarning("Vertex not found");
+    vertex = new AliESDVertex();
+    vertex->SetName("default");
+  }
+  else {
+    vertex->SetName("reconstructed");
   }
+
+  Double_t vtxPos[3];
+  Double_t vtxErr[3];
+  vertex->GetXYZ(vtxPos);
+  vertex->GetSigmaXYZ(vtxErr);
+
   esd->SetPrimaryVertexSPD(vertex);
   // if SPD multiplicity has been determined, it is stored in the ESD
-  AliMultiplicity *mult = fVertexer->GetMultiplicity();
+  AliMultiplicity *mult = vertexer->GetMultiplicity();
   if(mult)esd->SetMultiplicity(mult);
 
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if (fTracker[iDet]) fTracker[iDet]->SetVertex(vtxPos, vtxErr);
   }  
   delete vertex;
 
+  delete vertexer;
+
   return kTRUE;
 }
 
@@ -2009,7 +2073,7 @@ Bool_t AliReconstruction::RunHLTTracking(AliESDEvent*& esd)
   AliInfo("running HLT tracking");
 
   // Get a pointer to the HLT reconstructor
-  AliReconstructor *reconstructor = GetReconstructor(fgkNDetectors-1);
+  AliReconstructor *reconstructor = GetReconstructor(kNDetectors-1);
   if (!reconstructor) return kFALSE;
 
   // TPC + ITS
@@ -2114,7 +2178,9 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
   if (fReconstructor[11] && fLoader[11]) {
     fLoader[11]->LoadRecPoints("READ");
     TTree *treeR = fLoader[11]->TreeR();
-    GetReconstructor(11)->FillESD((TTree *)NULL,treeR,esd);
+    if (treeR) {
+      GetReconstructor(11)->FillESD((TTree *)NULL,treeR,esd);
+    }
   }
 
   // pass 1: TPC + ITS inwards
@@ -2147,7 +2213,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
 
   // pass 2: ALL backwards
 
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if (!fTracker[iDet]) continue;
     AliDebug(1, Form("%s back propagation", fgkDetectorName[iDet]));
 
@@ -2167,7 +2233,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
 
     // run tracking
     if (iDet>1) // start filling residuals for the "outer" detectors
-    if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE);     
+    if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE);     
 
     if (fTracker[iDet]->PropagateBack(esd) != 0) {
       AliError(Form("%s backward propagation failed", fgkDetectorName[iDet]));
@@ -2187,7 +2253,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
     AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr);
   }
   //stop filling residuals for the "outer" detectors
-  if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE);     
+  if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE);     
 
   // pass 3: TRD + TPC + ITS refit inwards
 
@@ -2197,7 +2263,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
 
     // run tracking
     if (iDet<2) // start filling residuals for TPC and ITS
-    if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE);     
+    if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE);     
 
     if (fTracker[iDet]->RefitInward(esd) != 0) {
       AliError(Form("%s inward refit failed", fgkDetectorName[iDet]));
@@ -2225,7 +2291,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
     AliSysInfo::AddStamp(Form("RUnloadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,5, eventNr);
   }
   // stop filling residuals for TPC and ITS
-  if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE);     
+  if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE);     
 
   eventNr++;
   return kTRUE;
@@ -2262,7 +2328,7 @@ Bool_t AliReconstruction::FillESD(AliESDEvent*& esd, const TString& detectors)
     static Int_t eventNr=0; 
   TString detStr = detectors;
   
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
   if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
     AliReconstructor* reconstructor = GetReconstructor(iDet);
     if (!reconstructor) continue;
@@ -2413,7 +2479,7 @@ Bool_t AliReconstruction::InitRunLoader()
   if (!gSystem->AccessPathName(fGAliceFileName.Data())) { // galice.root exists
     // load all base libraries to get the loader classes
     TString libs = gSystem->GetLibraries();
-    for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+    for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
       TString detName = fgkDetectorName[iDet];
       if (detName == "HLT") continue;
       if (libs.Contains("lib" + detName + "base.so")) continue;
@@ -2554,21 +2620,22 @@ AliReconstructor* AliReconstruction::GetReconstructor(Int_t iDet)
 }
 
 //_____________________________________________________________________________
-Bool_t AliReconstruction::CreateVertexer()
+AliVertexer* AliReconstruction::CreateVertexer()
 {
 // create the vertexer
+// Please note that the caller is the owner of the
+// vertexer
 
-  fVertexer = NULL;
+  AliVertexer* vertexer = NULL;
   AliReconstructor* itsReconstructor = GetReconstructor(0);
   if (itsReconstructor) {
-    fVertexer = itsReconstructor->CreateVertexer();
+    vertexer = itsReconstructor->CreateVertexer();
   }
-  if (!fVertexer) {
+  if (!vertexer) {
     AliWarning("couldn't create a vertexer for ITS");
-    if (fStopOnError) return kFALSE;
   }
 
-  return kTRUE;
+  return vertexer;
 }
 
 //_____________________________________________________________________________
@@ -2578,7 +2645,7 @@ Bool_t AliReconstruction::CreateTrackers(const TString& detectors)
        AliInfo("Creating trackers");
 
   TString detStr = detectors;
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
     AliReconstructor* reconstructor = GetReconstructor(iDet);
     if (!reconstructor) continue;
@@ -2609,7 +2676,7 @@ void AliReconstruction::CleanUp()
 {
 // delete trackers and the run loader and close and delete the file
 
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
     delete fReconstructor[iDet];
     fReconstructor[iDet] = NULL;
     fLoader[iDet] = NULL;
@@ -2619,13 +2686,12 @@ void AliReconstruction::CleanUp()
   delete fRunInfo;
   fRunInfo = NULL;
 
-  delete fVertexer;
-  fVertexer = NULL;
-
   delete ftVertexer;
   ftVertexer = NULL;
   
   if(!(AliCDBManager::Instance()->GetCacheFlag())) {
+    delete fDiamondProfileSPD;
+    fDiamondProfileSPD = NULL;
     delete fDiamondProfile;
     fDiamondProfile = NULL;
     delete fDiamondProfileTPC;
@@ -2656,7 +2722,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd)
       AliESDtrack *track = esd->GetTrack(itrack);
       Int_t nsp = 0;
       Int_t idx[200];
-      for (Int_t iDet = 3; iDet >= 0; iDet--) {// TOF, TRD, TPC, ITS clusters
+      for (Int_t iDet = 5; iDet >= 0; iDet--) {// TOF, TRD, TPC, ITS clusters
           nsp += track->GetNcls(iDet);
 
           if (iDet==0) { // ITS "extra" clusters
@@ -2669,7 +2735,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd)
        AliTrackPointArray *sp = new AliTrackPointArray(nsp);
        track->SetTrackPointArray(sp);
        Int_t isptrack = 0;
-       for (Int_t iDet = 3; iDet >= 0; iDet--) {
+       for (Int_t iDet = 5; iDet >= 0; iDet--) {
          AliTracker *tracker = fTracker[iDet];
          if (!tracker) continue;
          Int_t nspdet = track->GetClusters(iDet,idx);
@@ -2698,6 +2764,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd)
            } 
            isp2++;
            if (!isvalid) continue;
+           if (iDet==0 && (isp-1)>=6) p.SetExtra();
            sp->AddPoint(isptrack,&p); isptrack++;
          }
        }       
@@ -2727,88 +2794,43 @@ void AliReconstruction::FillRawDataErrorLog(Int_t iEvent, AliESDEvent* esd)
 
 }
 
-TNamed* AliReconstruction::CopyFileToTNamed(TString fPath,TString pName){
-  // Dump a file content into a char in TNamed
-  ifstream in;
-  in.open(fPath.Data(),ios::in | ios::binary|ios::ate);
-  Int_t kBytes = (Int_t)in.tellg();
-  printf("Size: %d \n",kBytes);
-  TNamed *fn = 0;
-  if(in.good()){
-    char* memblock = new char [kBytes];
-    in.seekg (0, ios::beg);
-    in.read (memblock, kBytes);
-    in.close();
-    TString fData(memblock,kBytes);
-    fn = new TNamed(pName,fData);
-    printf("fData Size: %d \n",fData.Sizeof());
-    printf("pName Size: %d \n",pName.Sizeof());
-    printf("fn    Size: %d \n",fn->Sizeof());
-    delete[] memblock;
-  }
-  else{
-    AliInfo(Form("Could not Open %s\n",fPath.Data()));
-  }
-
-  return fn;
-}
-
-void AliReconstruction::TNamedToFile(TTree* fTree, TString pName){
-  // This is not really needed in AliReconstruction at the moment
-  // but can serve as a template
-
-  TList *fList = fTree->GetUserInfo();
-  TNamed *fn = (TNamed*)fList->FindObject(pName.Data());
-  printf("fn Size: %d \n",fn->Sizeof());
-
-  TString fTmp(fn->GetName()); // to be 100% sure in principle pName also works
-  const char* cdata = fn->GetTitle();
-  printf("fTmp Size %d\n",fTmp.Sizeof());
-
-  int size = fn->Sizeof()-fTmp.Sizeof()-sizeof(UChar_t)-sizeof(Int_t); // see dfinition of TString::SizeOf()...
-  printf("calculated size %d\n",size);
-  ofstream out(pName.Data(),ios::out | ios::binary);
-  out.write(cdata,size);
-  out.close();
-
-}
-  
 //_____________________________________________________________________________
 void AliReconstruction::CheckQA()
 {
 // check the QA of SIM for this run and remove the detectors 
 // with status Fatal
   
-       TString newRunLocalReconstruction ; 
-       TString newRunTracking ;
-       TString newFillESD ;
-        
-       for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) {
-               TString detName(AliQA::GetDetName(iDet)) ;
-               AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX_t(iDet)) ; 
-               if ( qa->IsSet(AliQA::DETECTORINDEX_t(iDet), AliQA::kSIM, AliQA::kFATAL)) {
-                               AliInfo(Form("QA status for %s in Hits and/or SDIGITS  and/or Digits was Fatal; No reconstruction performed", detName.Data())) ;
-               } else {
-                       if ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) || 
-                                       fRunLocalReconstruction.Contains("ALL") )  {
-                               newRunLocalReconstruction += detName ; 
-                               newRunLocalReconstruction += " " ;                      
-                       }
-                       if ( fRunTracking.Contains(AliQA::GetDetName(iDet)) || 
-                                       fRunTracking.Contains("ALL") )  {
-                               newRunTracking += detName ; 
-                               newRunTracking += " " ;                         
-                       }
-                       if ( fFillESD.Contains(AliQA::GetDetName(iDet)) || 
-                                       fFillESD.Contains("ALL") )  {
-                               newFillESD += detName ; 
-                               newFillESD += " " ;                     
-                       }
-               }
-       }
-       fRunLocalReconstruction = newRunLocalReconstruction ; 
-       fRunTracking            = newRunTracking ; 
-       fFillESD                = newFillESD ; 
+//     TString newRunLocalReconstruction ; 
+//     TString newRunTracking ;
+//     TString newFillESD ;
+//      
+//     for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) {
+//             TString detName(AliQA::GetDetName(iDet)) ;
+//             AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX_t(iDet)) ;       
+//      if ( qa->IsSet(AliQA::DETECTORINDEX_t(iDet), AliQA::kSIM, specie, AliQA::kFATAL)) {
+//        AliInfo(Form("QA status for %s %s in Hits and/or SDIGITS  and/or Digits was Fatal; No reconstruction performed", 
+//                   detName.Data(), AliRecoParam::GetEventSpecieName(es))) ;
+//                     } else {
+//                     if ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) || 
+//                                     fRunLocalReconstruction.Contains("ALL") )  {
+//                             newRunLocalReconstruction += detName ; 
+//                             newRunLocalReconstruction += " " ;                      
+//                     }
+//                     if ( fRunTracking.Contains(AliQA::GetDetName(iDet)) || 
+//                                     fRunTracking.Contains("ALL") )  {
+//                             newRunTracking += detName ; 
+//                             newRunTracking += " " ;                         
+//                     }
+//                     if ( fFillESD.Contains(AliQA::GetDetName(iDet)) || 
+//                                     fFillESD.Contains("ALL") )  {
+//                             newFillESD += detName ; 
+//                             newFillESD += " " ;                     
+//                     }
+//             }
+//     }
+//     fRunLocalReconstruction = newRunLocalReconstruction ; 
+//     fRunTracking            = newRunTracking ; 
+//     fFillESD                = newFillESD ; 
 }
 
 //_____________________________________________________________________________
@@ -2816,7 +2838,7 @@ Int_t AliReconstruction::GetDetIndex(const char* detector)
 {
   // return the detector index corresponding to detector
   Int_t index = -1 ; 
-  for (index = 0; index < fgkNDetectors ; index++) {
+  for (index = 0; index < kNDetectors ; index++) {
     if ( strcmp(detector, fgkDetectorName[index]) == 0 )
        break ; 
   }    
@@ -2836,7 +2858,7 @@ Bool_t AliReconstruction::FinishPlaneEff() {
  //  Return: kTRUE if all operations have been done properly, kFALSE otherwise
  //
  Bool_t ret=kFALSE;
- //for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+ //for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
  for (Int_t iDet = 0; iDet < 1; iDet++) { // for the time being only ITS
    //if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
    if(fTracker[iDet]) {
@@ -2890,7 +2912,7 @@ Bool_t AliReconstruction::InitAliEVE()
   AliInfo(Form("Loading AliEVE macro: %s",macroStr.Data()));
   if (gROOT->LoadMacro(macroStr.Data()) != 0) return kFALSE;
 
-  gROOT->ProcessLine("if (!gAliEveEvent) {gAliEveEvent = new AliEveEventManager();gAliEveEvent->AddNewEventCommand(\"alieve_online_on_new_event()\");gEve->AddEvent(gAliEveEvent);};");
+  gROOT->ProcessLine("if (!AliEveEventManager::GetMaster()){new AliEveEventManager();AliEveEventManager::GetMaster()->AddNewEventCommand(\"alieve_online_on_new_event()\");gEve->AddEvent(AliEveEventManager::GetMaster());};");
   gROOT->ProcessLine("alieve_online_init()");
 
   return kTRUE;
@@ -2905,7 +2927,7 @@ void AliReconstruction::RunAliEVE()
   // successful initialization of AliEVE.
 
   AliInfo("Running AliEVE...");
-  gROOT->ProcessLine(Form("gAliEveEvent->SetEvent((AliRunLoader*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd));
+  gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)0x%lx,(AliRawReader*)0x%lx,(AliESDEvent*)0x%lx,(AliESDfriend*)0x%lx);",fRunLoader,fRawReader,fesd,fesdf));
   gSystem->Run();
 }
 
@@ -2962,7 +2984,7 @@ Bool_t AliReconstruction::InitRecoParams()
   Bool_t isOK = kTRUE;
 
   TString detStr = fLoadCDB;
-  for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+  for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
 
     if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
 
@@ -3062,8 +3084,9 @@ Bool_t AliReconstruction::GetEventInfo()
   for( Int_t iclass=0; iclass < nclasses; iclass++ ) {
     AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass);
     if (trclass) {
-      Int_t trindex = (Int_t)TMath::Log2(trclass->GetMask());
+      Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask()));
       fesd->SetTriggerClass(trclass->GetName(),trindex);
+      if (fRawReader) fRawReader->LoadTriggerClass(trclass->GetName(),trindex);
       if (trmask & (1 << trindex)) {
        trclasses += " ";
        trclasses += trclass->GetName();
@@ -3105,12 +3128,15 @@ const char *AliReconstruction::MatchDetectorList(const char *detectorList, UInt_
     if ((detectorMask >> iDet) & 0x1) {
       TString det = AliDAQ::OfflineModuleName(iDet);
       if ((detList.CompareTo("ALL") == 0) ||
-         detList.BeginsWith("ALL ") ||
-         detList.EndsWith(" ALL") ||
-         detList.Contains(" ALL ") ||
+         ((detList.BeginsWith("ALL ") ||
+           detList.EndsWith(" ALL") ||
+           detList.Contains(" ALL ")) &&
+          !(detList.BeginsWith("-"+det+" ") ||
+            detList.EndsWith(" -"+det) ||
+            detList.Contains(" -"+det+" "))) ||
          (detList.CompareTo(det) == 0) ||
-         detList.BeginsWith(det) ||
-         detList.EndsWith(det) ||
+         detList.BeginsWith(det+" ") ||
+         detList.EndsWith(" "+det) ||
          detList.Contains( " "+det+" " )) {
        if (!resultList.EndsWith(det + " ")) {
          resultList += det;
@@ -3124,12 +3150,15 @@ const char *AliReconstruction::MatchDetectorList(const char *detectorList, UInt_
   if ((detectorMask >> AliDAQ::kHLTId) & 0x1) {
     TString hltDet = AliDAQ::OfflineModuleName(AliDAQ::kNDetectors-1);
     if ((detList.CompareTo("ALL") == 0) ||
-       detList.BeginsWith("ALL ") ||
-       detList.EndsWith(" ALL") ||
-       detList.Contains(" ALL ") ||
+       ((detList.BeginsWith("ALL ") ||
+         detList.EndsWith(" ALL") ||
+         detList.Contains(" ALL ")) &&
+        !(detList.BeginsWith("-"+hltDet+" ") ||
+          detList.EndsWith(" -"+hltDet) ||
+          detList.Contains(" -"+hltDet+" "))) ||
        (detList.CompareTo(hltDet) == 0) ||
-       detList.BeginsWith(hltDet) ||
-       detList.EndsWith(hltDet) ||
+       detList.BeginsWith(hltDet+" ") ||
+       detList.EndsWith(" "+hltDet) ||
        detList.Contains( " "+hltDet+" " )) {
       resultList += hltDet;
     }