]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskESDfilter.cxx
typo
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskESDfilter.cxx
index b38cba82ba64437ce8e25130738e954838404b0c..fa5947644ce0c0248719543679bcd58b8f969763 100644 (file)
@@ -65,39 +65,42 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
     fHighPthreshold(0),\r
     fPtshape(0x0),\r
     fEnableFillAOD(kTRUE),\r
-fUsedTrack(0x0),\r
-fUsedKink(0x0),\r
-fUsedV0(0x0),\r
-fAODTrackRefs(0x0),\r
-fAODV0VtxRefs(0x0),\r
-fAODV0Refs(0x0),\r
-fMChandler(0x0),\r
-fNumberOfTracks(0),\r
-fNumberOfPositiveTracks(0),\r
-fNumberOfV0s(0),\r
-fNumberOfVertices(0),\r
-fNumberOfCascades(0),\r
-fNumberOfKinks(0),\r
-fOldESDformat(kFALSE),\r
-fPrimaryVertex(0x0),\r
-fTPCOnlyFilterMask(0),\r
-fHybridFilterMaskITSTPC(0),\r
-fHybridFilterMaskTPC0(0),\r
-fHybridFilterMaskTPC1(0),\r
-fIsVZEROEnabled(kTRUE),\r
-fAreCascadesEnabled(kTRUE),\r
-fAreV0sEnabled(kTRUE),\r
-fAreKinksEnabled(kTRUE),\r
-fAreTracksEnabled(kTRUE),\r
-fArePmdClustersEnabled(kTRUE),\r
-fAreCaloClustersEnabled(kTRUE),\r
-fAreEMCALCellsEnabled(kTRUE),\r
-fArePHOSCellsEnabled(kTRUE),\r
-fAreTrackletsEnabled(kTRUE),\r
-fESDpid(0x0),\r
-fIsPidOwner(kFALSE),\r
-fTimeZeroType(AliESDpid::kTOF_T0),\r
-fTPCaloneTrackCuts(0)\r
+    fUsedTrack(0x0),\r
+    fUsedKink(0x0),\r
+    fUsedV0(0x0),\r
+    fAODTrackRefs(0x0),\r
+    fAODV0VtxRefs(0x0),\r
+    fAODV0Refs(0x0),\r
+    fMChandler(0x0),\r
+    fNumberOfTracks(0),\r
+    fNumberOfPositiveTracks(0),\r
+    fNumberOfV0s(0),\r
+    fNumberOfVertices(0),\r
+    fNumberOfCascades(0),\r
+    fNumberOfKinks(0),\r
+    fOldESDformat(kFALSE),\r
+    fPrimaryVertex(0x0),\r
+  fTPCConstrainedFilterMask(0),\r
+  fHybridFilterMaskTPCCG(0),\r
+  fWriteHybridTPCCOnly(kFALSE),\r
+  fGlobalConstrainedFilterMask(0),\r
+  fHybridFilterMaskGCG(0),\r
+  fWriteHybridGCOnly(kFALSE),\r
+    fIsVZEROEnabled(kTRUE),\r
+    fIsZDCEnabled(kTRUE),\r
+    fAreCascadesEnabled(kTRUE),\r
+    fAreV0sEnabled(kTRUE),\r
+    fAreKinksEnabled(kTRUE),\r
+    fAreTracksEnabled(kTRUE),\r
+    fArePmdClustersEnabled(kTRUE),\r
+    fAreCaloClustersEnabled(kTRUE),\r
+    fAreEMCALCellsEnabled(kTRUE),\r
+    fArePHOSCellsEnabled(kTRUE),\r
+    fAreTrackletsEnabled(kTRUE),\r
+    fESDpid(0x0),\r
+    fIsPidOwner(kFALSE),\r
+    fTimeZeroType(AliESDpid::kTOF_T0),\r
+    fTPCaloneTrackCuts(0)\r
 {\r
   // Default constructor\r
 }\r
@@ -112,44 +115,47 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fHighPthreshold(0),\r
     fPtshape(0x0),\r
     fEnableFillAOD(kTRUE),\r
-fUsedTrack(0x0),\r
-fUsedKink(0x0),\r
-fUsedV0(0x0),\r
-fAODTrackRefs(0x0),\r
-fAODV0VtxRefs(0x0),\r
-fAODV0Refs(0x0),\r
-fMChandler(0x0),\r
-fNumberOfTracks(0),\r
-fNumberOfPositiveTracks(0),\r
-fNumberOfV0s(0),\r
-fNumberOfVertices(0),\r
-fNumberOfCascades(0),\r
-fNumberOfKinks(0),\r
-fOldESDformat(kFALSE),\r
-fPrimaryVertex(0x0),\r
-fTPCOnlyFilterMask(0),\r
-fHybridFilterMaskITSTPC(0),\r
-fHybridFilterMaskTPC0(0),\r
-fHybridFilterMaskTPC1(0),\r
-fIsVZEROEnabled(kTRUE),\r
-fAreCascadesEnabled(kTRUE),\r
-fAreV0sEnabled(kTRUE),\r
-fAreKinksEnabled(kTRUE),\r
-fAreTracksEnabled(kTRUE),\r
-fArePmdClustersEnabled(kTRUE),\r
-fAreCaloClustersEnabled(kTRUE),\r
-fAreEMCALCellsEnabled(kTRUE),\r
-fArePHOSCellsEnabled(kTRUE),\r
-fAreTrackletsEnabled(kTRUE),\r
-fESDpid(0x0),\r
-fIsPidOwner(kFALSE),\r
-fTimeZeroType(AliESDpid::kTOF_T0),\r
-fTPCaloneTrackCuts(0)\r
+    fUsedTrack(0x0),\r
+    fUsedKink(0x0),\r
+    fUsedV0(0x0),\r
+    fAODTrackRefs(0x0),\r
+    fAODV0VtxRefs(0x0),\r
+    fAODV0Refs(0x0),\r
+    fMChandler(0x0),\r
+    fNumberOfTracks(0),\r
+    fNumberOfPositiveTracks(0),\r
+    fNumberOfV0s(0),\r
+    fNumberOfVertices(0),\r
+    fNumberOfCascades(0),\r
+    fNumberOfKinks(0),\r
+    fOldESDformat(kFALSE),\r
+    fPrimaryVertex(0x0),\r
+  fTPCConstrainedFilterMask(0),\r
+  fHybridFilterMaskTPCCG(0),\r
+  fWriteHybridTPCCOnly(kFALSE),\r
+  fGlobalConstrainedFilterMask(0),\r
+  fHybridFilterMaskGCG(0),\r
+  fWriteHybridGCOnly(kFALSE),\r
+    fIsVZEROEnabled(kTRUE),\r
+    fIsZDCEnabled(kTRUE),\r
+    fAreCascadesEnabled(kTRUE),\r
+    fAreV0sEnabled(kTRUE),\r
+    fAreKinksEnabled(kTRUE),\r
+    fAreTracksEnabled(kTRUE),\r
+    fArePmdClustersEnabled(kTRUE),\r
+    fAreCaloClustersEnabled(kTRUE),\r
+    fAreEMCALCellsEnabled(kTRUE),\r
+    fArePHOSCellsEnabled(kTRUE),\r
+    fAreTrackletsEnabled(kTRUE),\r
+    fESDpid(0x0),\r
+    fIsPidOwner(kFALSE),\r
+    fTimeZeroType(AliESDpid::kTOF_T0),\r
+    fTPCaloneTrackCuts(0)\r
 {\r
   // Constructor\r
 }\r
 AliAnalysisTaskESDfilter::~AliAnalysisTaskESDfilter(){\r
-  if(fIsPidOwner)delete fESDpid;\r
+    if(fIsPidOwner) delete fESDpid;\r
 }\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::UserCreateOutputObjects()\r
@@ -947,8 +953,9 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
   // Here we have wo hybrid appraoch to remove fakes\r
   // ******* ITSTPC ********\r
   // Uses a cut on the ITS properties to select global tracks\r
-  // which are than marked as HybdridITSTPC for the remainder the TPC only tracks are \r
-  // flagged as HybridITSTPConly. Note, in order not to get fakes back in the TPC cuts, one needs \r
+  // which are than marked as HybdridITSTPC for the remainder \r
+  // the TPC only tracks are flagged as HybridITSTPConly. \r
+  // Note, in order not to get fakes back in the TPC cuts, one needs \r
   // two "ITS" cuts one tight (1) (to throw out fakes) and one lose (2) (to NOT flag the trakcs in the TPC only)\r
   // using cut number (3)\r
   // so fHybridFilterMask == (1)|(2) fTPCFilterMask = (3), Usercode needs to slect with mask = (1)|(3) and track->IsHybridITSTPC()\r
@@ -964,14 +971,14 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
     AliAODTrack *tr = (AliAODTrack*)(Tracks().At(it));\r
     if(!tr)continue;\r
     UInt_t map = tr->GetFilterMap();\r
-    if(map&fTPCOnlyFilterMask){\r
+    if(map&fTPCConstrainedFilterMask){\r
       // we only reset the track select ionfo, no deletion...\r
-      tr->SetFilterMap(map&~fTPCOnlyFilterMask);\r
+      tr->SetFilterMap(map&~fTPCConstrainedFilterMask);\r
     }\r
-    if(map&fHybridFilterMaskITSTPC){\r
+    if(map&fHybridFilterMaskTPCCG){\r
       // this is one part of the hybrid tracks\r
       // the others not passing the selection will be TPC only selected below\r
-      tr->SetIsHybridITSTPC(kTRUE);\r
+      //      tr->SetIsHybridTPCConstrainedGlobal(kTRUE);\r
     }\r
   }\r
   // Loop over the ESD trcks and pick out the tracks passing TPC only cuts\r
@@ -999,32 +1006,21 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
     \r
     UInt_t selectInfo = 0;\r
     Bool_t isHybridITSTPC = false;\r
-    Bool_t isHybridTPC = false;\r
     //\r
     // Track selection\r
     if (fTrackFilter) {\r
       selectInfo = fTrackFilter->IsSelected(esdTrack);\r
     }\r
 \r
-    if(!(selectInfo&fHybridFilterMaskITSTPC)){\r
+    if(!(selectInfo&fHybridFilterMaskTPCCG)){\r
       // not already selected tracks, use second part of hybrid tracks\r
       isHybridITSTPC = true;\r
       // too save space one could only store these...\r
     }\r
 \r
-    if(selectInfo&fHybridFilterMaskTPC0){\r
-      isHybridTPC = true;\r
-    }\r
-    else if (!(selectInfo&fHybridFilterMaskTPC1)){\r
-      // select all that have not been chosen by the loose \r
-      // cuts\r
-      isHybridTPC = true;\r
-    }\r
-\r
-\r
-    selectInfo &= fTPCOnlyFilterMask;\r
+    selectInfo &= fTPCConstrainedFilterMask;\r
     if (!selectInfo)continue;\r
-    \r
+    if (fWriteHybridTPCCOnly&&!isHybridITSTPC)continue; // write only complementary tracks\r
     // create a tpc only tracl\r
     AliESDtrack *track = AliESDtrackCuts::GetTPCOnlyTrack(const_cast<AliESDEvent*>(&esd),esdTrack->GetID());\r
     if(!track) continue;\r
@@ -1047,7 +1043,7 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
       }\r
       // get the DCA to the vertex:\r
       track->GetImpactParametersTPC(dDCA,cDCA);\r
-      // set the constraint parameters to the track\r
+      // set the constrained parameters to the track\r
       track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());\r
     }\r
     \r
@@ -1071,10 +1067,10 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
                                                             vtx->UsesTrack(track->GetID()),\r
                                                             AliAODTrack::kPrimary, \r
                                                             selectInfo);\r
-    aodTrack->SetIsHybridITSTPC(isHybridITSTPC);    \r
-    aodTrack->SetIsHybridTPC(isHybridTPC);\r
+    //    aodTrack->SetIsHybridTPCConstrainedGlobal(isHybridITSTPC);    \r
     aodTrack->SetTPCClusterMap(track->GetTPCClusterMap());\r
     aodTrack->SetTPCSharedMap (track->GetTPCSharedMap());\r
+    //    aodTrack->SetIsTPCConstrained(kTRUE);    \r
     Float_t ndf = track->GetTPCNcls()+1 - 5 ;\r
     if(ndf>0){\r
       aodTrack->SetChi2perNDF(track->GetConstrainedChi2TPC());\r
@@ -1096,6 +1092,122 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd)
   \r
 }\r
 \r
+\r
+void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent& esd)\r
+{\r
+\r
+  // Here we have the option to store the complement from global constraint information\r
+  // to tracks passing tight cuts (1) in order not to get fakes back in, one needs \r
+  // two sets of cuts one tight (1) (to throw out fakes) and one lose (2) (fakes/bad tracks would pass (2) but not (1))\r
+  // using cut number (3) selects the tracks that complement (1) e.g. tracks witout ITS refit or cluster requirement\r
+\r
+\r
+  AliCodeTimerAuto("",0);\r
+  \r
+  // Loop over the tracks and extract and mask out all aod tracks that pass the selections for AODt racks\r
+  for(int it = 0;it < fNumberOfTracks;++it)\r
+  {\r
+    AliAODTrack *tr = (AliAODTrack*)(Tracks().At(it));\r
+    if(!tr)continue;\r
+    UInt_t map = tr->GetFilterMap();\r
+    if(map&fGlobalConstrainedFilterMask){\r
+      // we only reset the track select info, no deletion...\r
+      // mask reset mask in case track is already taken\r
+      tr->SetFilterMap(map&~fGlobalConstrainedFilterMask);\r
+    }\r
+    if(map&fHybridFilterMaskGCG){\r
+      // this is one part of the hybrid tracks\r
+      // the others not passing the selection will be the ones selected below\r
+      //      tr->SetIsHybridGlobalConstrainedGlobal(kTRUE);\r
+    }\r
+  }\r
+  // Loop over the ESD trcks and pick out the tracks passing the GlobalConstraint cuts\r
\r
+\r
+  Double_t pos[3] = { 0. };      \r
+  Double_t covTr[21]={0.};\r
+  Double_t pid[10]={0.};  \r
+  Double_t p[3] = { 0. };\r
+\r
+  Double_t pDCA[3] = { 0. }; // momentum at DCA\r
+  Double_t rDCA[3] = { 0. }; // position at DCA\r
+  Float_t  dDCA[2] = {0.};    // DCA to the vertex d and z\r
+  Float_t  cDCA[3] = {0.};    // covariance of impact parameters\r
+\r
+\r
+  AliAODTrack* aodTrack(0x0);\r
+  const AliESDVertex *vtx = esd.GetPrimaryVertex();\r
+  for (Int_t nTrack = 0; nTrack < esd.GetNumberOfTracks(); ++nTrack) \r
+  {\r
+    AliESDtrack* esdTrack = esd.GetTrack(nTrack); //carefull do not modify it othwise  need to work with a copy \r
+    const AliExternalTrackParam * exParamGC = esdTrack->GetConstrainedParam();\r
+    if(!exParamGC)continue;\r
+\r
+    UInt_t selectInfo = 0;\r
+    Bool_t isHybridGC = false;\r
+\r
+    //\r
+    // Track selection\r
+    if (fTrackFilter) {\r
+      selectInfo = fTrackFilter->IsSelected(esdTrack);\r
+    }\r
+\r
+\r
+    if(!(selectInfo&fHybridFilterMaskGCG))isHybridGC = true;\r
+    if (fWriteHybridGCOnly&&!isHybridGC)continue; // write only complementary tracks\r
+\r
+    selectInfo &= fGlobalConstrainedFilterMask;\r
+    if (!selectInfo)continue;\r
+    // fetch the track parameters at the DCA (unconstrained)\r
+    esdTrack->GetPxPyPz(pDCA);\r
+    esdTrack->GetXYZ(rDCA);\r
+    // get the DCA to the vertex:\r
+    esdTrack->GetImpactParameters(dDCA,cDCA);\r
+\r
+    esdTrack->GetConstrainedPxPyPz(p);\r
+    esdTrack->GetConstrainedXYZ(pos);\r
+    exParamGC->GetCovarianceXYZPxPyPz(covTr);\r
+    esdTrack->GetESDpid(pid);\r
+    if(fMChandler)fMChandler->SelectParticle(esdTrack->GetLabel());\r
+    aodTrack = new(Tracks()[fNumberOfTracks++]) AliAODTrack((esdTrack->GetID()+1)*-1,\r
+                                                            esdTrack->GetLabel(),\r
+                                                            p,\r
+                                                            kTRUE,\r
+                                                            pos,\r
+                                                            kFALSE,\r
+                                                            covTr, \r
+                                                            (Short_t)esdTrack->GetSign(),\r
+                                                            esdTrack->GetITSClusterMap(), \r
+                                                            pid,\r
+                                                            fPrimaryVertex,\r
+                                                            kTRUE, // check if this is right\r
+                                                            vtx->UsesTrack(esdTrack->GetID()),\r
+                                                            AliAODTrack::kPrimary, \r
+                                                            selectInfo);\r
+    //    aodTrack->SetIsHybridGlobalConstrainedGlobal(isHybridGC);    \r
+    //    aodTrack->SetIsGlobalConstrained(kTRUE);    \r
+    aodTrack->SetTPCClusterMap(esdTrack->GetTPCClusterMap());\r
+    aodTrack->SetTPCSharedMap (esdTrack->GetTPCSharedMap());\r
+    Float_t ndf = esdTrack->GetTPCNcls()+1 - 5 ;\r
+    if(ndf>0){\r
+      aodTrack->SetChi2perNDF(esdTrack->GetConstrainedChi2TPC());\r
+    }\r
+    else{\r
+      aodTrack->SetChi2perNDF(-1);\r
+    }\r
+\r
+    // set the DCA values to the AOD track\r
+    aodTrack->SetPxPyPzAtDCA(pDCA[0],pDCA[1],pDCA[2]);\r
+    aodTrack->SetXYAtDCA(rDCA[0],rDCA[1]);\r
+    aodTrack->SetDCA(dDCA[0],dDCA[1]);\r
+\r
+    aodTrack->SetFlags(esdTrack->GetStatus());\r
+    aodTrack->SetTPCPointsF(esdTrack->GetTPCNclsF());\r
+  } // end of loop on tracks\r
+  \r
+}\r
+\r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd)\r
 {\r
@@ -1562,6 +1674,39 @@ void AliAnalysisTaskESDfilter::ConvertVZERO(const AliESDEvent& esd)
   *vzeroData = *(esd.GetVZEROData());\r
 }\r
 \r
+//______________________________________________________________________________\r
+void AliAnalysisTaskESDfilter::ConvertZDC(const AliESDEvent& esd)\r
+{\r
+  // Convert ZDC data\r
+  AliESDZDC* esdZDC = esd.GetZDCData();\r
+  \r
+  const Double_t zem1Energy = esdZDC->GetZEM1Energy();\r
+  const Double_t zem2Energy = esdZDC->GetZEM2Energy();\r
+   \r
+  const Double_t *towZNC = esdZDC->GetZNCTowerEnergy();\r
+  const Double_t *towZPC = esdZDC->GetZPCTowerEnergy();\r
+  const Double_t *towZNA = esdZDC->GetZNATowerEnergy();\r
+  const Double_t *towZPA = esdZDC->GetZPATowerEnergy();\r
+  const Double_t *towZNCLG = esdZDC->GetZNCTowerEnergyLR();\r
+  const Double_t *towZNALG = esdZDC->GetZNATowerEnergyLR();\r
+  \r
+  AliAODZDC* zdcAOD = AODEvent()->GetZDCData();\r
+\r
+  zdcAOD->SetZEM1Energy(zem1Energy);\r
+  zdcAOD->SetZEM2Energy(zem2Energy);\r
+  zdcAOD->SetZNCTowers(towZNC, towZNCLG);\r
+  zdcAOD->SetZNATowers(towZNA, towZNALG);\r
+  zdcAOD->SetZPCTowers(towZPC);\r
+  zdcAOD->SetZPATowers(towZPA);\r
+  \r
+  zdcAOD->SetZDCParticipants(esdZDC->GetZDCParticipants(), esdZDC->GetZDCPartSideA(), esdZDC->GetZDCPartSideC());\r
+  zdcAOD->SetZDCImpactParameter(esdZDC->GetImpactParameter(), esdZDC->GetImpactParamSideA(), \r
+       esdZDC->GetImpactParamSideC());\r
+  zdcAOD->SetZDCTDCSum(esdZDC->GetZNTDCSum(0));        \r
+  zdcAOD->SetZDCTDCDiff(esdZDC->GetZNTDCDiff(0));      \r
+\r
+}\r
+\r
 //______________________________________________________________________________\r
 void AliAnalysisTaskESDfilter::ConvertESDtoAOD() \r
 {\r
@@ -1689,8 +1834,9 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
   header->SetRefMultiplicityPos(fNumberOfPositiveTracks);\r
   header->SetRefMultiplicityNeg(fNumberOfTracks - fNumberOfPositiveTracks);\r
 \r
-  if ( fTPCOnlyFilterMask ) ConvertTPCOnlyTracks(*esd);\r
-  \r
+  if ( fTPCConstrainedFilterMask ) ConvertTPCOnlyTracks(*esd);\r
+  if( fGlobalConstrainedFilterMask) ConvertGlobalConstrainedTracks(*esd);  \r
+\r
   if ( fArePmdClustersEnabled ) ConvertPmdClusters(*esd);\r
   \r
   if ( fAreCaloClustersEnabled ) ConvertCaloClusters(*esd);\r