Update
authorrbailhac <rbailhac@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 8 Oct 2012 09:07:39 +0000 (09:07 +0000)
committerrbailhac <rbailhac@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 8 Oct 2012 09:07:39 +0000 (09:07 +0000)
PWGHF/hfe/AliHFEextraCuts.cxx
PWGHF/hfe/AliHFEpidTRD.cxx
PWGHF/hfe/AliHFEpidTRD.h
PWGHF/hfe/AliHFEvarManager.cxx

index f7cf229..e2bd838 100644 (file)
@@ -787,12 +787,12 @@ void AliHFEextraCuts::GetImpactParameters(AliVTrack *track, Float_t &radial, Flo
        else {
          // Propagate the global track to the DCA.
          const AliVVertex *vAOD = fEvent->GetPrimaryVertex();
-         Double_t PosAtDCA[2] = {-999,-999};
+         Double_t posAtDCA[2] = {-999,-999};
          Double_t covar[3] = {-999,-999,-999};
          AliAODTrack *copyaodtrack = new AliAODTrack(*aodtrack);
-         if(copyaodtrack && copyaodtrack->PropagateToDCA(vAOD,fEvent->GetMagneticField(),100.,PosAtDCA,covar)) {
-           z = PosAtDCA[1];
-           radial = PosAtDCA[0];
+         if(copyaodtrack && copyaodtrack->PropagateToDCA(vAOD,fEvent->GetMagneticField(),100.,posAtDCA,covar)) {
+           z = posAtDCA[1];
+           radial = posAtDCA[0];
            //printf("Propagate z %f and radial %f\n",z,radial);
          }
          delete copyaodtrack;
index 5bea88d..7ca1c99 100644 (file)
@@ -53,6 +53,7 @@ AliHFEpidTRD::AliHFEpidTRD() :
   , fRunNumber(0)
   , fElectronEfficiency(0.90)
   , fTotalChargeInSlice0(kFALSE)
+  , fTRD2DPID(kFALSE)
 {
   //
   // default  constructor
@@ -70,6 +71,7 @@ AliHFEpidTRD::AliHFEpidTRD(const char* name) :
   , fRunNumber(0)
   , fElectronEfficiency(0.91)
   , fTotalChargeInSlice0(kFALSE)
+  , fTRD2DPID(kFALSE)
 {
   //
   // default  constructor
@@ -87,6 +89,7 @@ AliHFEpidTRD::AliHFEpidTRD(const AliHFEpidTRD &ref):
   , fRunNumber(ref.fRunNumber)
   , fElectronEfficiency(ref.fElectronEfficiency)
   , fTotalChargeInSlice0(ref.fTotalChargeInSlice0)
+  , fTRD2DPID(ref.fTRD2DPID)
 {
   //
   // Copy constructor
@@ -118,6 +121,7 @@ void AliHFEpidTRD::Copy(TObject &ref) const {
   target.fCutNTracklets = fCutNTracklets;
   target.fRunNumber = fRunNumber;
   target.fTotalChargeInSlice0 = fTotalChargeInSlice0;
+  target.fTRD2DPID = fTRD2DPID;
   target.fElectronEfficiency = fElectronEfficiency;
   memcpy(target.fThreshParams, fThreshParams, sizeof(Double_t) * kThreshParams);
   AliHFEpidBase::Copy(ref);
@@ -133,6 +137,21 @@ AliHFEpidTRD::~AliHFEpidTRD(){
 //______________________________________________________
 Bool_t AliHFEpidTRD::InitializePID(Int_t run){
   //
+  // InitializePID call different init function depending on TRD PID method
+  //
+  //
+
+  //if(fTRD2DPID) return Initialize2D(run);
+  if(fTRD2DPID) return kTRUE;
+  else return Initialize1D(run);
+
+
+
+}
+
+//______________________________________________________
+Bool_t AliHFEpidTRD::Initialize1D(Int_t run){
+  //
   // InitializePID: Load TRD thresholds and create the electron efficiency axis
   // to navigate 
   //
@@ -147,10 +166,37 @@ Bool_t AliHFEpidTRD::InitializePID(Int_t run){
   return kFALSE;
 }
 
+/*
+//______________________________________________________
+Bool_t AliHFEpidTRD::Initialize2D(Int_t run){
+  //
+  // Initialize2DimPID
+  //
+  //
+
+    return kTRUE;
+
+}
+*/
+
 //______________________________________________________
 Int_t AliHFEpidTRD::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const {
   //
   // Does PID for TRD alone:
+  // PID algorithm selected according to flag
+  //
+  //
+
+    if(fTRD2DPID) return IsSelected2D(track, pidqa);
+    else return IsSelected1D(track, pidqa);
+
+
+}
+
+//______________________________________________________
+Int_t AliHFEpidTRD::IsSelected1D(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const {
+  //
+  // Does PID for TRD alone:
   // PID thresholds based on 90% Electron Efficiency level approximated by a linear 
   // step function
   //
@@ -209,6 +255,53 @@ Int_t AliHFEpidTRD::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager
 
 }
 
+//______________________________________________________
+Int_t AliHFEpidTRD::IsSelected2D(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const {
+  //
+  // 2D TRD PID
+  // 
+  // 
+  //
+  AliDebug(2, "Applying TRD PID");
+  if(!fkPIDResponse){
+    AliDebug(2, "Cannot process track");
+    return 0;
+  }
+
+  AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis: AliHFEpidObject::kAODanalysis;
+  Double_t p = GetP(track->GetRecTrack(), anatype);
+  if(p < fMinP){ 
+    AliDebug(2, Form("Track momentum below %f", fMinP));
+    return 0;
+  }
+
+  if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kTRDpid, AliHFEdetPIDqa::kBeforePID); 
+
+  if(fCutNTracklets > 0){
+    AliDebug(1, Form("Number of tracklets cut applied: %d\n", fCutNTracklets));
+    Int_t ntracklets = track->GetRecTrack() ? track->GetRecTrack()->GetTRDntrackletsPID() : 0;
+    if(TestBit(kExactTrackletCut)){
+      AliDebug(1, Form("Exact cut applied: %d tracklets found\n", ntracklets));
+      if(ntracklets != fCutNTracklets) return 0;
+    } else {
+      AliDebug(1, Form("Greater Equal cut applied: %d tracklets found\n", ntracklets));
+      if(ntracklets < fCutNTracklets) return 0;
+    }
+  }
+  AliDebug(1,"Track selected\n");
+
+  Int_t centralitybin = track->IsPbPb() ? track->GetCentrality() + 1 : 0;
+  Float_t fCentralityLimitsdefault[12]= {0.,5.,10., 20., 30., 40., 50., 60.,70.,80., 90., 100.};
+  Float_t centrality=fCentralityLimitsdefault[centralitybin]+1;
+
+
+  if(fkPIDResponse->IdentifiedAsElectronTRD(track->GetRecTrack(),fElectronEfficiency,centrality,AliTRDPIDResponse::kLQ2D)){
+      AliDebug(2, Form("Electron effi: %f\n", fElectronEfficiency));
+      return 11;
+  } else return 211;
+
+}
+
 //___________________________________________________________________
 Double_t AliHFEpidTRD::GetTRDthresholds(Double_t p, UInt_t nTracklets) const { 
   //
index c14e820..d2ed491 100644 (file)
@@ -59,7 +59,11 @@ class AliHFEpidTRD : public AliHFEpidBase{
     virtual ~AliHFEpidTRD();
 
     virtual Bool_t InitializePID(Int_t run);
-    virtual Int_t IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const;
+    virtual Bool_t Initialize1D(Int_t run);
+    //virtual Bool_t Initialize2D(Int_t run);
+    virtual Int_t  IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const;
+    virtual Int_t  IsSelected1D(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const;
+    virtual Int_t  IsSelected2D(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const;
 
     Double_t GetTRDSignalV1(const AliESDtrack *track, Float_t truncation = 0.7) const;
     Double_t GetTRDSignalV2(const AliESDtrack *track, Float_t trucation = 0.7) const;
@@ -69,6 +73,7 @@ class AliHFEpidTRD : public AliHFEpidBase{
     void SelectCutOnTheFly(Bool_t onFly = kTRUE) { if(onFly) SetBit(kSelectCutOnTheFly, kTRUE); else SetBit(kSelectCutOnTheFly, kFALSE);}
     void SetOADBThresholds(AliOADBContainer *cont) { fOADBThresholds = cont; }
     void SetTotalChargeInSlice0() { fTotalChargeInSlice0 = kTRUE; }
+    void SetTRD2DPID() { fTRD2DPID = kTRUE; }
     void SetRenormalizeElPi(Bool_t doRenorm = kTRUE) { if(doRenorm) SetBit(kTRDrenormalize, kTRUE); else SetBit(kTRDrenormalize, kFALSE);}
     void SetElectronEfficiency(Double_t electronEfficiency) { fElectronEfficiency = electronEfficiency; }
     void SetNTracklets(Int_t nTracklets) { fNTracklets = nTracklets; }
@@ -107,7 +112,8 @@ class AliHFEpidTRD : public AliHFEpidBase{
     Int_t    fRunNumber;                                    // Run number
     Double_t fElectronEfficiency;                           // Cut on electron efficiency
     Double_t fThreshParams[kThreshParams];                  // Threshold parametrisation
-    Bool_t fTotalChargeInSlice0;                            // Flag for foreward/backward compatibility for the TRD total charge
+    Bool_t   fTotalChargeInSlice0;                          // Flag for foreward/backward compatibility for the TRD total charge
+    Bool_t   fTRD2DPID;                                     // Flag for 2D PID
   ClassDef(AliHFEpidTRD, 1)     // TRD electron ID class
 };
 #endif
index 827313e..5793655 100644 (file)
@@ -544,6 +544,10 @@ AliHFEvarManager::AliHFEvariable::~AliHFEvariable(){
 
 //_______________________________________________
 Double_t* AliHFEvarManager::AliHFEvariable::GetBinning() { 
+  //
+  // Get the binning
+  //
+
   if(fUserDefinedBinning) return fBinning.GetArray(); 
 
   // No User defined Binning - create one and store in fBinning