]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/RESONANCES/AliRsnValueDaughter.cxx
Improved merging.
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnValueDaughter.cxx
index 6cfe5a93bf9e3e1cfee385e17cfd409628b318c7..7df847ebc814e2c098652db75915f9586cc1424a 100644 (file)
@@ -102,24 +102,31 @@ const char *AliRsnValueDaughter::GetTypeName() const
 //
 
    switch (fType) {
-      case kP:           return "SingleTrackPtot";
-      case kPt:          return "SingleTrackPt";
-      case kPtpc:        return "SingleTrackPtpc";
-      case kEta:         return "SingleTrackEta";
-      case kMass:        return "SingleTrackMass";
-      case kITSsignal:   return "SingleTrackITSsignal";
-      case kTPCsignal:   return "SingleTrackTPCsignal";
-      case kTOFsignal:   return "SingleTrackTOFsignal";
-      case kTPCnsigmaPi: return "SingleTrackTPCnsigmaPion";
-      case kTPCnsigmaK:  return "SingleTrackTPCnsigmaKaon";
-      case kTPCnsigmaP:  return "SingleTrackTPCnsigmaProton";
-      case kTOFnsigmaPi: return "SingleTrackTOFnsigmaPion";
-      case kTOFnsigmaK:  return "SingleTrackTOFnsigmaKaon";
-      case kTOFnsigmaP:  return "SingleTrackTOFnsigmaProton";
-      case kCharge:      return "SingleTrackCharge";
-      case kPhi:         return "SingleTrackPhi";
-      case kPhiOuterTPC: return "SingleTrackPhiOuterTPC";
-      default:           return "Undefined";
+      case kP:                        return "SingleTrackPtot";
+      case kPt:                       return "SingleTrackPt";
+      case kPtpc:                     return "SingleTrackPtpc";
+      case kEta:                      return "SingleTrackEta";
+      case kMass:                     return "SingleTrackMass";
+      case kITSsignal:                return "SingleTrackITSsignal";
+      case kTPCsignal:                 return "SingleTrackTPCsignal";
+      case kTOFsignal:                 return "SingleTrackTOFsignal";
+      case kTPCnsigmaPi:               return "SingleTrackTPCnsigmaPion";
+      case kTPCnsigmaK:                return "SingleTrackTPCnsigmaKaon";
+      case kTPCnsigmaP:                return "SingleTrackTPCnsigmaProton";
+      case kTOFnsigmaPi:               return "SingleTrackTOFnsigmaPion";
+      case kTOFnsigmaK:                return "SingleTrackTOFnsigmaKaon";
+      case kTOFnsigmaP:                return "SingleTrackTOFnsigmaProton";
+      case kCharge:                     return "SingleTrackCharge";
+      case kPhi:                        return "SingleTrackPhi";
+      case kPhiOuterTPC:                return "SingleTrackPhiOuterTPC";
+      case kV0DCA:                     return "V0DCAToPrimaryVertex";
+      case kDaughterDCA:               return "V0DaughterDCA";
+      case kCosPointAng:               return "V0CosineOfPointingAngle";
+      case kLambdaProtonPIDCut:         return "V0LambdaProtonNsigma";
+      case kAntiLambdaAntiProtonPIDCut: return "V0AntiLambdaAntiProtonNsigma";
+      case kLambdaPionPIDCut:           return "V0LambdaPionNsigma";
+      case kAntiLambdaAntiPionPIDCut:   return "V0AntiLambdaPionNsigma";
+      default:                          return "Undefined";
    }
 }
 
@@ -143,6 +150,22 @@ Bool_t AliRsnValueDaughter::Eval(TObject *object)
    AliVParticle   *ref   = fDaughter->GetRef();
    AliVParticle   *refMC = fDaughter->GetRefMC();
    AliVTrack      *track = fDaughter->Ref2Vtrack();
+   AliESDv0       *v0esd = fDaughter->Ref2ESDv0();
+   AliAODv0       *v0aod = fDaughter->Ref2AODv0();
+   AliESDEvent    *lESDEvent = fEvent->GetRefESD();
+   
+   Double_t xPrimaryVertex = -999.9;
+   Double_t yPrimaryVertex = -999.9;
+   Double_t zPrimaryVertex = -999.9;
+   
+   if(lESDEvent){
+   
+   xPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetX();
+   yPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetY();
+   zPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetZ();
+   
+   }
+   
    if (fUseMCInfo && !refMC) {
       AliError("No MC");
       return kFALSE;
@@ -372,36 +395,164 @@ Bool_t AliRsnValueDaughter::Eval(TObject *object)
             return kFALSE;
          }
 
-      case kCharge:
+     case kCharge:
          fComputedValue = (fUseMCInfo ? refMC->Charge() : ref->Charge());
          return kTRUE;
    
       case kPhi:         
-       fComputedValue = (fUseMCInfo ? (refMC->Phi()*TMath::RadToDeg()) : (ref->Phi()*TMath::RadToDeg()));      
-       return kTRUE;
+        fComputedValue = (fUseMCInfo ? (refMC->Phi()*TMath::RadToDeg()) : (ref->Phi()*TMath::RadToDeg()));      
+        return kTRUE;
 
       case kPhiOuterTPC:    
-       if (track) {
-         Double_t pos[3]={0.,0.,0.};
-         Double_t phiOut = -999.0;
-         Double_t radius = 278.;//TPC outer (vessel) = 278 cm, TOF radius (active surf.) = 378 cm;  ref. PPR.1
-         AliESDtrack *trackESD = dynamic_cast<AliESDtrack *>(track);
-         if (trackESD) {
-           ((AliExternalTrackParam*) track->GetOuterParam())->GetXYZAt(radius, 5., pos);
-           phiOut=TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
-           if (phiOut<0) phiOut+= (2*TMath::Pi()*TMath::RadToDeg());
-         } else {
-           //this to be checked 
-           //((AliAODTrack*)track)->GetXYZAt(radius, 5., pos);
-         }
-         fComputedValue = phiOut;      
-       } else {
-         AliWarning("Cannot get phi at outer TPC radius for non-track object");
-         fComputedValue = -999.0;
+        if (track) {
+          Double_t pos[3]={0.,0.,0.};
+          Double_t phiOut = -999.0;
+          Double_t radius = 278.;//TPC outer (vessel) = 278 cm, TOF radius (active surf.) = 378 cm;  ref. PPR.1
+          AliExternalTrackParam etp; //thanks to Andrea and Cristina
+          etp.CopyFromVTrack(track);
+          if(etp.GetXYZAt(radius, 5., pos)){
+            phiOut=TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
+            if (phiOut<0) phiOut+= (2*TMath::Pi()*TMath::RadToDeg());
+          }
+          fComputedValue = phiOut;      
+        } else {
+          AliWarning("Cannot get phi at outer TPC radius for non-track object");
+          fComputedValue = -99.0;
+          return kFALSE;
+        }
+        return kTRUE;
+
+      case kV0DCA:
+         if(v0esd) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          fComputedValue = v0ESD->GetD(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
+          return kTRUE;
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          fComputedValue = v0AOD->DcaV0ToPrimVertex();
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }               
+      case kDaughterDCA:
+         if(v0esd) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          fComputedValue = v0ESD->GetDcaV0Daughters();
+          return kTRUE;
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          fComputedValue = v0AOD->DcaV0Daughters();
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }
+      case kCosPointAng:
+         if(v0esd) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          fComputedValue = v0ESD->GetV0CosineOfPointingAngle();
+          return kTRUE;         
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          fComputedValue = TMath::Cos(v0AOD->OpenAngleV0());
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }
+      case kLambdaProtonPIDCut:
+         if(v0esd && lESDEvent) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          // retrieve the V0 daughters
+          UInt_t lIdxPos      = (UInt_t) TMath::Abs(v0ESD->GetPindex());
+          AliESDtrack *pTrack = lESDEvent->GetTrack(lIdxPos);
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, AliPID::kProton));
+          return kTRUE;         
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          AliAODTrack *pTrack = (AliAODTrack *) (v0AOD->GetSecondaryVtx()->GetDaughter(0));
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, AliPID::kProton));
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }
+       case kAntiLambdaAntiProtonPIDCut:
+         if(v0esd && lESDEvent) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          // retrieve the V0 daughters
+          UInt_t lIdxNeg      = (UInt_t) TMath::Abs(v0ESD->GetNindex());
+          AliESDtrack *nTrack = lESDEvent->GetTrack(lIdxNeg);
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, AliPID::kProton));
+          return kTRUE;         
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          AliAODTrack *nTrack = (AliAODTrack *) (v0AOD->GetSecondaryVtx()->GetDaughter(1));
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, AliPID::kProton));
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }
+      case kLambdaPionPIDCut:
+         if(v0esd && lESDEvent) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          // retrieve the V0 daughters
+          UInt_t lIdxNeg      = (UInt_t) TMath::Abs(v0ESD->GetNindex());
+          AliESDtrack *nTrack = lESDEvent->GetTrack(lIdxNeg);
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, AliPID::kPion));
+          return kTRUE;         
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          AliAODTrack *nTrack = (AliAODTrack *) (v0AOD->GetSecondaryVtx()->GetDaughter(1));
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, AliPID::kPion));
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
+         return kFALSE;
+        }
+       case kAntiLambdaAntiPionPIDCut:
+         if(v0esd && lESDEvent) {
+          AliESDv0 *v0ESD = dynamic_cast<AliESDv0 *>(v0esd);
+          // retrieve the V0 daughters
+          UInt_t lIdxPos      = (UInt_t) TMath::Abs(v0ESD->GetPindex());
+          AliESDtrack *pTrack = lESDEvent->GetTrack(lIdxPos);
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, AliPID::kPion));
+          return kTRUE;         
+        }
+        if(v0aod) {
+          AliAODv0 *v0AOD = dynamic_cast<AliAODv0 *>(v0aod);
+          AliAODTrack *pTrack = (AliAODTrack *) (v0AOD->GetSecondaryVtx()->GetDaughter(0));
+          AliPIDResponse *pid = fEvent->GetPIDResponse(); 
+          fComputedValue = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, AliPID::kPion));
+          return kTRUE;
+        }
+        else {
+         fComputedValue = -999;
          return kFALSE;
-       }
-       return kTRUE;
-       
+        }
+        
+      
       default:
          AliError(Form("[%s] Invalid value type for this computation", GetName()));
          return kFALSE;