]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliReconstruction.cxx
The AliESDEvent::GetPrimaryVertex() returns now the best available reconstructed...
[u/mrichter/AliRoot.git] / STEER / AliReconstruction.cxx
index af6ceb9e9ef47359c368dab05ec0de1d00780c2e..22d6ba81c39ab7bfc39e6183adf1e0010ef621fb 100644 (file)
@@ -247,10 +247,10 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
   fRecoParam(),
 
   fVertexer(NULL),
+  fDiamondProfileSPD(NULL),
   fDiamondProfile(NULL),
   fDiamondProfileTPC(NULL),
-  fMeanVertexConstraint(kTRUE),
-
+  
   fGRPData(NULL),
 
   fAlignObjArray(NULL),
@@ -342,10 +342,10 @@ 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),
@@ -468,11 +468,12 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
   } 
     
   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());
@@ -709,7 +710,7 @@ Bool_t AliReconstruction::MisalignGeometry(const TString& detectors)
     
     for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
       if(!IsSelected(fgkDetectorName[iDet], detStr)) continue;
-      if(fgkDetectorName[iDet]=="HLT") continue;
+      if(!strcmp(fgkDetectorName[iDet],"HLT")) continue;
       if(AliGeomManager::IsModuleInGeom(fgkDetectorName[iDet]))
       {
        loadAlObjsListOfDets += fgkDetectorName[iDet];
@@ -922,7 +923,7 @@ 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;
   }
@@ -1045,21 +1046,26 @@ Bool_t AliReconstruction::InitGRP() {
 
   }
 
-  //*** Get the diamond profile from OCDB
+  //*** 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!");
+  }
+
   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;
@@ -1305,7 +1311,6 @@ void AliReconstruction::SlaveBegin(TTree*)
   AliSysInfo::AddStamp("LoadLoader");
  
   ftVertexer = new AliVertexerTracks(AliTracker::GetBz());
-  if(fDiamondProfile && fMeanVertexConstraint) ftVertexer->SetVtxStart(fDiamondProfile);
 
   // get vertexer
   if (fRunVertexFinder && !CreateVertexer()) {
@@ -1354,6 +1359,31 @@ void AliReconstruction::SlaveBegin(TTree*)
   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);
 
@@ -1509,6 +1539,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent)
     fhltesd->SetMagneticField(AliTracker::GetBz());
 
     // Set most probable pt, for B=0 tracking
+    // 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));
     if (grpRecoParam) AliExternalTrackParam::SetMostProbablePt(grpRecoParam->GetMostProbablePt());
     
@@ -1598,7 +1629,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();
@@ -1610,7 +1641,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);
 
     }
@@ -1627,11 +1658,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();
@@ -1639,16 +1668,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);
@@ -1658,6 +1684,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();
@@ -1665,11 +1692,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) {
@@ -1954,7 +1978,7 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd)
       fLoader[0]->LoadRecPoints();
       TTree* cltree = fLoader[0]->TreeR();
       if (cltree) {
-       if(fDiamondProfile) fVertexer->SetVtxStart(fDiamondProfile);
+       if(fDiamondProfileSPD) fVertexer->SetVtxStart(fDiamondProfileSPD);
        vertex = fVertexer->FindVertexForCurrentEvent(cltree);
       }
       else {
@@ -2631,6 +2655,8 @@ void AliReconstruction::CleanUp()
   ftVertexer = NULL;
   
   if(!(AliCDBManager::Instance()->GetCacheFlag())) {
+    delete fDiamondProfileSPD;
+    fDiamondProfileSPD = NULL;
     delete fDiamondProfile;
     fDiamondProfile = NULL;
     delete fDiamondProfileTPC;
@@ -2661,7 +2687,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
@@ -2674,7 +2700,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);
@@ -2895,7 +2921,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;
@@ -2910,7 +2936,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*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd));
   gSystem->Run();
 }