]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/UserTasks/EmcalTasks/AliEmcalEsdTpcTrackTask.cxx
comment
[u/mrichter/AliRoot.git] / PWG4 / UserTasks / EmcalTasks / AliEmcalEsdTpcTrackTask.cxx
index 30f3194eef556643289fdaf6019f33c72daddfce..f448418c8bcefd19f8409cb1543f2f43f5fa8b45 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Task to constrain TPC tracks to vertex
+// Task to constrain TPC tracks to SPD vertex.
 //
 //
 
@@ -18,23 +18,27 @@ ClassImp(AliEmcalEsdTpcTrackTask)
 AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask() : 
   AliAnalysisTaskSE(),
   fEsdTrackCuts(0),
+  fDoSpdVtxCon(0),
+  fHybridTrackCuts(0),
   fTracksName(),
   fEsdEv(0),
   fTracks(0)
 {
-  // Constructor
+  // Constructor.
 }
 
 //________________________________________________________________________
 AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask(const char *name) : 
   AliAnalysisTaskSE(name),
   fEsdTrackCuts(0),
+  fDoSpdVtxCon(0),
+  fHybridTrackCuts(0),
   fTracksName("TpcSpdVertexConstrainedTracks"),
   fEsdEv(0),
   fTracks(0)
 {
-  // Constructor
-  fBranchNames = "ESD:SPDVertex.,Tracks";
+  // Constructor.
+  fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
 }
 
 //________________________________________________________________________
@@ -48,13 +52,13 @@ AliEmcalEsdTpcTrackTask::~AliEmcalEsdTpcTrackTask()
 //________________________________________________________________________
 void AliEmcalEsdTpcTrackTask::UserCreateOutputObjects()
 {
-  // Create histograms
+  // Create histograms.
 
   fTracks = new TClonesArray("AliESDtrack");
   fTracks->SetName(fTracksName);
 
   if (!fEsdTrackCuts) {
-    AliInfo("No track cuts given, creating default cuts");
+    AliInfo("No track cuts given, creating default (standard only TPC) cuts");
     fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
     fEsdTrackCuts->SetPtRange(0.15,1e3);
   }
@@ -81,61 +85,94 @@ void AliEmcalEsdTpcTrackTask::UserExec(Option_t *)
   if (!(InputEvent()->FindListObject(fTracksName)))
     InputEvent()->AddObject(fTracks);
 
-  am->LoadBranch("AliESDRun.");
-  am->LoadBranch("AliESDHeader.");
-  if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
-    const AliESDRun *erun = fEsdEv->GetESDRun();
-    AliMagF *field = AliMagF::CreateFieldMap(erun->GetCurrentL3(),
-                                             erun->GetCurrentDip(),
-                                             AliMagF::kConvLHC,
-                                             kFALSE,
-                                             erun->GetBeamEnergy(),
-                                             erun->GetBeamType());
-    TGeoGlobalMagField::Instance()->SetField(field);
-  }
-
-  am->LoadBranch("SPDVertex.");
-  const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD();
-  if (!vtxSPD) {
-    AliError("No SPD vertex, returning");
-    return;
-  }
-
-  am->LoadBranch("Tracks");
-  Int_t ntr = fEsdEv->GetNumberOfTracks();
-  for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
-    AliESDtrack *etrack = fEsdEv->GetTrack(i);
-    if (!etrack)
-      continue;
-    if (!fEsdTrackCuts->AcceptTrack(etrack))
-      continue;
-
-    AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID());
-    if (!ntrack)
-      continue;
-    if (ntrack->Pt()<=0) {
-      delete ntrack;
-      continue;
+  if (!fHybridTrackCuts) { // contrain TPC tracks to SPD vertex if fDoSpdVtxCon==kTRUE
+    am->LoadBranch("AliESDRun.");
+    am->LoadBranch("AliESDHeader.");
+    am->LoadBranch("Tracks");
+
+    if (fDoSpdVtxCon) {
+      if (!TGeoGlobalMagField::Instance()->GetField()) { // construct field map
+        fEsdEv->InitMagneticField();
+      }
+      am->LoadBranch("SPDVertex.");
+      const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD();
+      if (!vtxSPD) {
+        AliError("No SPD vertex, returning");
+        return;
+      }
+      Int_t ntr = fEsdEv->GetNumberOfTracks();
+      for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
+        AliESDtrack *etrack = fEsdEv->GetTrack(i);
+        if (!etrack)
+          continue;
+        if (!fEsdTrackCuts->AcceptTrack(etrack))
+          continue;
+        AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID());
+        if (!ntrack)
+          continue;
+        if (ntrack->Pt()<=0) {
+          delete ntrack;
+          continue;
+        }
+        Double_t bfield[3] = {0,0,0};
+        ntrack->GetBxByBz(bfield);
+        AliExternalTrackParam exParam;
+        Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
+        if (!relate) {
+          delete ntrack;
+          continue;
+        }
+        // set the constraint parameters to the track
+        ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
+        if (ntrack->Pt()<=0) {
+          delete ntrack;
+          continue;
+        }
+        new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
+        delete ntrack;
+      }
+    } else { /* no spd vtx constraint */
+      Int_t ntr = fEsdEv->GetNumberOfTracks();
+      for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
+        AliESDtrack *etrack = fEsdEv->GetTrack(i);
+        if (!etrack)
+          continue;
+        if (!fEsdTrackCuts->AcceptTrack(etrack))
+          continue;
+        new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
+      }
     }
 
-    Double_t bfield[3] = {0,0,0};
-    ntrack->GetBxByBz(bfield);
-    AliExternalTrackParam exParam;
-    Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
-    if (!relate) {
-      delete ntrack;
-      continue;
+  } else { // use hybrid track cuts
+
+    am->LoadBranch("Tracks");
+    Int_t ntr = fEsdEv->GetNumberOfTracks();
+    for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
+      AliESDtrack *etrack = fEsdEv->GetTrack(i);
+      if (!etrack)
+        continue;
+      if (fEsdTrackCuts->AcceptTrack(etrack)) {
+        new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
+        AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
+        newTrack->SetLabel(0);
+        ++ntrnew;
+      } else if (fHybridTrackCuts->AcceptTrack(etrack)) {
+        if (etrack->GetConstrainedParam()) {
+          new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
+          AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
+          ++ntrnew;
+          const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
+          newTrack->Set(constrainParam->GetX(),
+                        constrainParam->GetAlpha(),
+                        constrainParam->GetParameter(),
+                        constrainParam->GetCovariance());
+          UInt_t status = etrack->GetStatus();
+          if ((status&AliESDtrack::kITSrefit)==0)
+            newTrack->SetLabel(2);
+          else
+            newTrack->SetLabel(1);
+        }
+      }
     }
-
-    // set the constraint parameters to the track
-    ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
-
-    if (ntrack->Pt()<=0) {
-      delete ntrack;
-      continue;
-    }
-
-    new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
-    delete ntrack;
   }
 }