]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/TRD/AliTRDpidRefMaker.cxx
Adding 2 triggers to list of known unsupported triggers
[u/mrichter/AliRoot.git] / PWG1 / TRD / AliTRDpidRefMaker.cxx
index ad9676ebdf1b773f20c8cf5465b9cd1b86528316..c87f2f8212633e1a51a7c7ecbcd3b282eff6b18a 100644 (file)
@@ -8,11 +8,14 @@
 #include "AliLog.h"
 #include "AliESDtrack.h"
 #include "AliTrackReference.h"
+#include "AliAnalysisManager.h"
 
 #include "AliTRDReconstructor.h"
 #include "AliTRDtrackV1.h"
 #include "AliTRDseedV1.h"
 #include "AliTRDpidRefMaker.h"
+#include "AliTRDinfoGen.h"
+#include "info/AliTRDeventInfo.h"
 #include "info/AliTRDv0Info.h"
 #include "info/AliTRDpidInfo.h"
 
@@ -35,13 +38,12 @@ ClassImp(AliTRDpidRefMaker)
 //________________________________________________________________________
 AliTRDpidRefMaker::AliTRDpidRefMaker() 
   :AliTRDrecoTask()
-  ,fReconstructor(NULL)
   ,fV0s(NULL)
   ,fData(NULL)
   ,fInfo(NULL)
   ,fPIDdataArray(NULL)
-  ,fRefPID(kMC)
-  ,fRefP(kMC)
+  ,fRefPID(kV0)
+  ,fRefP(kRec)
   ,fFreq(1.)
   ,fP(-1.)
   ,fPthreshold(0.)
@@ -55,13 +57,12 @@ AliTRDpidRefMaker::AliTRDpidRefMaker()
 //________________________________________________________________________
 AliTRDpidRefMaker::AliTRDpidRefMaker(const char *name, const char *title) 
   :AliTRDrecoTask(name, title)
-  ,fReconstructor(NULL)
   ,fV0s(NULL)
   ,fData(NULL)
   ,fInfo(NULL)
   ,fPIDdataArray(NULL)
-  ,fRefPID(kMC)
-  ,fRefP(kMC)
+  ,fRefPID(kV0)
+  ,fRefP(kRec)
   ,fFreq(1.)
   ,fP(-1.)
   ,fPthreshold(0.5)
@@ -70,13 +71,11 @@ AliTRDpidRefMaker::AliTRDpidRefMaker(const char *name, const char *title)
   // Default constructor
   //
 
-  fReconstructor = new AliTRDReconstructor();
-  fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
-  memset(fdEdx, 0, 10*sizeof(Float_t));
+  memset(fdEdx, 0, AliTRDpidUtil::kNNslices*sizeof(Float_t));
   memset(fPID, 0, AliPID::kSPECIES*sizeof(Float_t));
 
-  DefineInput(2, TObjArray::Class()); // v0 list
-  DefineInput(3, TObjArray::Class()); // pid info list 
+  DefineInput(3, TObjArray::Class()); // v0 list
+  DefineInput(4, TObjArray::Class()); // pid info list
   DefineOutput(2, TTree::Class());
 }
 
@@ -85,7 +84,6 @@ AliTRDpidRefMaker::AliTRDpidRefMaker(const char *name, const char *title)
 AliTRDpidRefMaker::~AliTRDpidRefMaker() 
 {
   if(fPIDdataArray) delete fPIDdataArray;
-  if(fReconstructor) delete fReconstructor;
 }
 
 //________________________________________________________________________
@@ -122,9 +120,12 @@ void AliTRDpidRefMaker::UserCreateOutputObjects()
   h2->GetYaxis()->SetTitle("P bins");
   h2->GetYaxis()->SetNdivisions(511);
   fContainer->AddAt(h2, 0);
+  PostData(1, fContainer);
 
+  OpenFile(2);
   fData = new TTree("RefPID", "Reference data for PID");
   fData->Branch("data", &fPIDdataArray);
+  PostData(2, fData);
 }
 
 //________________________________________________________________________
@@ -132,20 +133,33 @@ void AliTRDpidRefMaker::UserExec(Option_t *)
 {
   // Main loop
   // Called for each event
+  Int_t ev((Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry());
+  if(!(fTracks = dynamic_cast<TObjArray*>(GetInputData(1)))){
+    AliDebug(3, Form("Missing tracks container in ev %d", ev));
+    return;
+  }
+  if(!(fEvent = dynamic_cast<AliTRDeventInfo*>(GetInputData(2)))){
+    AliDebug(3, Form("Missing Event Info container in ev %d", ev));
+    return;
+  }
+  if(!(fV0s    = dynamic_cast<TObjArray*>(GetInputData(3)))){
+    AliDebug(3, Form("Missing v0 container in ev %d", ev)); 
+    return;
+  }
+  if(!(fInfo   = dynamic_cast<TObjArray*>(GetInputData(4)))){
+    AliDebug(3, Form("Missing pid info container in ev %d", ev)); 
+    return;
+  }
 
-  if(!(fTracks = dynamic_cast<TObjArray*>(GetInputData(1)))) return;
-  if(!(fV0s    = dynamic_cast<TObjArray*>(GetInputData(2)))) return;
-  if(!(fInfo   = dynamic_cast<TObjArray*>(GetInputData(3)))) return;
-
-  AliDebug(1, Form("Entries: Tracks[%d] V0[%d] PID[%d]", fTracks->GetEntriesFast(), fV0s->GetEntriesFast(), fInfo->GetEntriesFast()));
+  AliDebug(1, Form("Entries: Ev[%d] Tracks[%d] V0[%d] PID[%d]", ev, fTracks->GetEntriesFast(), fV0s->GetEntriesFast(), fInfo->GetEntriesFast()));
   AliTRDtrackInfo     *track = NULL;
-  AliTRDtrackV1    *trackTRD = NULL;
+  //AliTRDtrackV1    *trackTRD = NULL;
   AliTrackReference     *ref = NULL;
   const AliTRDtrackInfo::AliESDinfo *infoESD = NULL;
   for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
     track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
     if(!track->HasESDtrack()) continue;
-    trackTRD = track->GetTrack();
+    //trackTRD = track->GetTrack();
     infoESD  = track->GetESDinfo();
     Double32_t *infoPID = infoESD->GetSliceIter();
     Int_t n = infoESD->GetNSlices() - AliTRDgeometry::kNlayer;
@@ -160,11 +174,11 @@ void AliTRDpidRefMaker::UserExec(Option_t *)
     if(!(status&AliESDtrack::kTRDpid)) continue;
 
     // fill the pid information
-    SetRefPID(fRefPID, track, fPID);
+    SetRefPID(fRefPID, track, infoESD, fPID);
     // get particle type
-    Int_t idx(TMath::LocMax(AliPID::kSPECIES, fPID)); 
-    if(idx == 0 && fPID[0]<1.e-5) continue;
-
+    Int_t idx(TMath::Max(Long64_t(0), TMath::LocMax(AliPID::kSPECIES, fPID))); 
+    if(fPID[idx]<1.e-5) continue;
+    
     // prepare PID data array
     if(!fPIDdataArray){ 
       fPIDdataArray = new AliTRDpidInfo();
@@ -175,42 +189,20 @@ void AliTRDpidRefMaker::UserExec(Option_t *)
     for(Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++){
 
       // fill P & dE/dx information
-      if(HasFriends()){ // from TRD track
-        if(!trackTRD) continue;
-        AliTRDseedV1 *trackletTRD(NULL);
-        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);
+      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;
 
@@ -220,9 +212,6 @@ void AliTRDpidRefMaker::UserExec(Option_t *)
 
     Fill();
   }
-
-  PostData(1, fContainer);
-  PostData(2, fData);
 }
 
 
@@ -251,7 +240,7 @@ void AliTRDpidRefMaker::LinkPIDdata()
 }
 
 //________________________________________________________________________
-void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo *track, Float_t *pid) 
+void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo *track, const AliTRDtrackInfo::AliESDinfo *infoESD, Float_t *pid) 
 {
 // Fill the reference PID values "pid" from "source" object
 // according to the option "select". Possible options are
@@ -263,18 +252,14 @@ void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo
     AliError("No trackInfo found");
     return;
   }
-  memset(fPID, 0, AliPID::kSPECIES*sizeof(Float_t));
+  memset(pid, 0, AliPID::kSPECIES*sizeof(Float_t));
   switch(select){ 
   case kV0:
     {
-      //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(NULL);
-      for(Int_t iv(0); iv<fV0s->GetEntriesFast(); iv++){
-        if(!(v0 = (AliTRDv0Info*)fV0s->At(iv))) continue;
-        if(!v0->HasTrack(track)) continue;
-        for(Int_t is=AliPID::kSPECIES; is--;) fPID[is] = v0->GetPID(is, track);
-        break;
-      }
+      //Get V0 PID decisions for all particle species (implemented so far : electrons from conversions, pions from K0s and protons from Lambdas) :
+      if(!infoESD->HasV0()) return;
+      const Int_t *v0pid=infoESD->GetV0pid();
+      for(Int_t is=AliPID::kSPECIES; is--;){ pid[is] = (Float_t)v0pid[is];}
     }
     break;
   case kMC:
@@ -285,30 +270,30 @@ void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo
     switch(track->GetPDG()){
     case kElectron:
     case kPositron:
-      fPID[AliPID::kElectron] = 1.;
+      pid[AliPID::kElectron] = 1.;
       break;
     case kMuonPlus:
     case kMuonMinus:
-      fPID[AliPID::kMuon] = 1.;
+      pid[AliPID::kMuon] = 1.;
       break;
     case kPiPlus:
     case kPiMinus:
-      fPID[AliPID::kPion] = 1.;
+      pid[AliPID::kPion] = 1.;
       break;
     case kKPlus:
     case kKMinus:
-      fPID[AliPID::kKaon] = 1.;
+      pid[AliPID::kKaon] = 1.;
       break;
     case kProton:
     case kProtonBar:
-      fPID[AliPID::kProton] = 1.;
+      pid[AliPID::kProton] = 1.;
       break;
     }
     break;
   case kRec:
     { 
       AliTRDtrackV1 *trackTRD = track->GetTrack();
-      trackTRD -> SetReconstructor(fReconstructor);
+      trackTRD -> SetReconstructor(AliTRDinfoGen::Reconstructor());
       //fReconstructor -> SetOption("nn");
       trackTRD -> CookPID();
       for(Int_t iPart = 0; iPart < AliPID::kSPECIES; iPart++){
@@ -321,12 +306,12 @@ void AliTRDpidRefMaker::SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo
     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]
+  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*pid[0]
+    ,AliPID::ParticleShortName(1), 1.e2*pid[1]
+    ,AliPID::ParticleShortName(2), 1.e2*pid[2]
+    ,AliPID::ParticleShortName(3), 1.e2*pid[3]
+    ,AliPID::ParticleShortName(4), 1.e2*pid[4]
   ));
 }