- new functionality to select candle events
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 30 Jan 2011 12:43:52 +0000 (12:43 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 30 Jan 2011 12:43:52 +0000 (12:43 +0000)
M    dNdPt/AlidNdPtHelper.h
M    dNdPt/AlidNdPtHelper.cxx
M    dNdPt/AlidNdPtAnalysis.h
M    dNdPt/AlidNdPtAnalysis.cxx
M    dNdPt/AlidNdPtCorrection.h
M    dNdPt/AlidNdPtCorrection.cxx
M    dNdPt/AlidNdPtEventCuts.h
M    dNdPt/AlidNdPtEventCuts.cxx

- extent functionality
M    dNdPt/AlidNdPtEfficiency.h
M    dNdPt/AlidNdPtEfficiency.cxx

PWG0/dNdPt/AlidNdPtAnalysis.cxx
PWG0/dNdPt/AlidNdPtAnalysis.h
PWG0/dNdPt/AlidNdPtCorrection.cxx
PWG0/dNdPt/AlidNdPtCorrection.h
PWG0/dNdPt/AlidNdPtEfficiency.cxx
PWG0/dNdPt/AlidNdPtEfficiency.h
PWG0/dNdPt/AlidNdPtEventCuts.cxx
PWG0/dNdPt/AlidNdPtEventCuts.h
PWG0/dNdPt/AlidNdPtHelper.cxx
PWG0/dNdPt/AlidNdPtHelper.h

index 97cfc85..20bbfa0 100644 (file)
@@ -137,8 +137,10 @@ ClassImp(AlidNdPtAnalysis)
 \r
   // Generic histograms to be corrected\r
   fRecEventHist(0),\r
-  fRecTrackHist(0)\r
+  fRecTrackHist(0),\r
 \r
+  // Candle event histogram\r
+  fRecCandleEventMatrix(0)\r
 {\r
   // default constructor\r
   for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
@@ -234,7 +236,10 @@ AlidNdPtAnalysis::AlidNdPtAnalysis(Char_t* name, Char_t* title): AlidNdPt(name,t
 \r
   // Generic histograms to be corrected\r
   fRecEventHist(0),\r
-  fRecTrackHist(0)\r
+  fRecTrackHist(0),\r
+\r
+  // Candle event histogram\r
+  fRecCandleEventMatrix(0)\r
 {\r
   //\r
   // constructor\r
@@ -278,6 +283,7 @@ AlidNdPtAnalysis::~AlidNdPtAnalysis() {
   if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;\r
   if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;\r
 \r
+  if(fRecCandleEventMatrix) delete fRecCandleEventMatrix; fRecCandleEventMatrix=0;\r
   //\r
   if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;\r
   if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;\r
@@ -525,6 +531,13 @@ void AlidNdPtAnalysis::Init(){
   fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
   fRecNSDEventMatrix->Sumw2();\r
 \r
+  fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
+  fRecCandleEventMatrix->SetBinEdges(0,binsZv);\r
+  fRecCandleEventMatrix->SetBinEdges(1,binsMult);\r
+  fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
+  fRecCandleEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
+  fRecCandleEventMatrix->Sumw2();\r
+\r
   // \r
   // track to event corrections\r
   //\r
@@ -965,7 +978,6 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
     return;\r
   }\r
 \r
-\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
   AliPhysicsSelection *trigSel = NULL;\r
@@ -1142,6 +1154,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
 \r
   } // end bUseMC\r
 \r
+\r
   // get reconstructed vertex  \r
   const AliESDVertex* vtxESD = 0; \r
   Bool_t isRecVertex = kFALSE;\r
@@ -1194,6 +1207,17 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
     return; \r
   }\r
 \r
+  Bool_t isEventSelected = kTRUE;\r
+  if(evtCuts->IsEventSelectedRequired()) \r
+  { \r
+     // select events with at least \r
+     // one prompt track in acceptance\r
+     // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+\r
+     isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);\r
+     //printf("isEventSelected %d \n", isEventSelected);\r
+  }\r
+\r
   TObjArray *allChargedTracks=0;\r
   Int_t multAll=0, multAcc=0, multRec=0;\r
   Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;\r
@@ -1204,7 +1228,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
   Int_t highPtCount = 0;\r
 \r
   // check event cuts\r
-  if(isEventOK && isEventTriggered)\r
+  if(isEventOK && isEventTriggered && isEventSelected)\r
   {\r
     // get all charged tracks\r
     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
@@ -1397,11 +1421,23 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
      // \r
      Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks};\r
      fRecEventHist->Fill(vRecEventHist);\r
-\r
    } \r
 \r
    if(IsUseMCInfo())  \r
    {\r
+     if(!mcEvent) return; \r
+\r
+     if(evtCuts->IsEventSelectedRequired()) \r
+     { \r
+       // select events with at least \r
+       // one MC primary track in acceptance\r
+       // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+\r
+       Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);\r
+       //printf("isMCEventSelected %d \n", isMCEventSelected);\r
+       if(!isMCEventSelected) return;  \r
+     }\r
+\r
      Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };\r
      if(isEventOK && isEventTriggered) {   \r
        if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted\r
@@ -1549,6 +1585,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
        //\r
        // MC histograms for track efficiency studies\r
        //\r
+       Int_t countRecCandle = 0;\r
        for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
        {\r
          TParticle* particle = stack->Particle(iMc);\r
@@ -1617,12 +1654,13 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
              if(iMc == labelsRec[iRec]) \r
             {\r
                fRecTrackMatrix->Fill(vTrackMatrix);\r
-\r
+                 \r
                if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {\r
                 fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
                 //AliESDtrack *track = esdEvent->GetTrack(iRec);\r
                  //if(track && track->GetKinkIndex(0) < 0) \r
                 //  printf("prim kink \n");\r
+                countRecCandle++;\r
               }\r
 \r
                if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);\r
@@ -1636,7 +1674,11 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc
            }\r
          }\r
        }\r
+\r
+       if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix);\r
      }\r
+\r
+\r
    } // end bUseMC\r
 \r
   if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
@@ -1886,6 +1928,7 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const list)
     fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);\r
     fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);\r
 \r
+    fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix);\r
     //\r
     fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);\r
     fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);\r
index 4600148..90bf344 100644 (file)
@@ -90,6 +90,9 @@ public :
   THnSparseF *GetRecNDEventMatrix() const {return fRecNDEventMatrix;}
   THnSparseF *GetRecNSDEventMatrix() const {return fRecNSDEventMatrix;}
 
+  //
+  THnSparseF *GetRecCandleEventMatrix() const {return fRecCandleEventMatrix;}
+
   // 
   THnSparseF *GetGenTrackEventMatrix() const {return fGenTrackEventMatrix;}
   THnSparseF *GetGenTrackSDEventMatrix() const {return fGenTrackSDEventMatrix;}
@@ -189,6 +192,7 @@ private:
   THnSparseF *fRecNDEventMatrix; //-> mcZv:multMB
   THnSparseF *fRecNSDEventMatrix; //-> mcZv:multMB
 
+
   //
   // track-event level correction 
   //
@@ -266,10 +270,15 @@ private:
   THnSparseF *fRecEventHist; //-> Zv:multMB
   THnSparseF *fRecTrackHist; //-> Zv:pT:eta
 
+  //
+  // candle events track corrections
+  //
+  THnSparseF *fRecCandleEventMatrix; //-> Zv:multMB
+
   AlidNdPtAnalysis(const AlidNdPtAnalysis&); // not implemented
   AlidNdPtAnalysis& operator=(const AlidNdPtAnalysis&); // not implemented
 
-  ClassDef(AlidNdPtAnalysis,3);
+  ClassDef(AlidNdPtAnalysis,4);
 };
 
 #endif
index 36363b5..5876d03 100644 (file)
@@ -857,12 +857,13 @@ void AlidNdPtCorrection::Init(){
   fCosmicsHisto->Sumw2();\r
 \r
   //\r
-  Int_t binsEventCount[2]={2,2};\r
-  Double_t minEventCount[2]={0,0}; \r
-  Double_t maxEventCount[2]={2,2}; \r
-  fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);\r
+  Int_t binsEventCount[3]={2,2,2};\r
+  Double_t minEventCount[3]={0,0,0}; \r
+  Double_t maxEventCount[3]={2,2,2}; \r
+  fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);\r
   fEventCount->GetAxis(0)->SetTitle("trig");\r
   fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
+  fEventCount->GetAxis(2)->SetTitle("selected");\r
   fEventCount->Sumw2();\r
 \r
 \r
@@ -1025,6 +1026,7 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     return;\r
   }\r
 \r
+\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
   AliPhysicsSelection *trigSel = NULL;\r
@@ -1254,8 +1256,19 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     return; \r
   }\r
 \r
+  Bool_t isEventSelected = kTRUE;\r
+  if(evtCuts->IsEventSelectedRequired()) \r
+  { \r
+     // select events with at least \r
+     // one prompt track in acceptance\r
+     // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+\r
+     isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);\r
+     //printf("isEventSelected %d \n", isEventSelected);\r
+  }\r
+\r
   Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
-  Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};\r
+  Double_t vEventCount[3] = { isEventTriggered, isTrigAndVertex, isEventSelected };\r
   fEventCount->Fill(vEventCount);\r
 \r
   //\r
@@ -1267,7 +1280,7 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
   Bool_t isCosmic = kFALSE;\r
 \r
 \r
-  if(isEventOK && isEventTriggered)\r
+  if(isEventOK && isEventTriggered && isEventSelected)\r
   {\r
     // get all charged tracks\r
     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
@@ -1464,7 +1477,7 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
 \r
   // empty events corrections\r
   // no reconstructed zv\r
-  if( isEventTriggered && multMBTracks==0 ) \r
+  if( isEventTriggered && multMBTracks==0 && isEventSelected ) \r
   {\r
     if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
     {\r
@@ -1479,8 +1492,20 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
 \r
   if(IsUseMCInfo())  \r
   {\r
+    if(!mcEvent) return; \r
+\r
+    Bool_t isMCEventSelected = kTRUE;\r
+    if(evtCuts->IsEventSelectedRequired()) \r
+    { \r
+      // select events with at least \r
+      // one MC primary track in acceptance\r
+      // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+      isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);\r
+      //printf("isMCEventSelected %d \n", isMCEventSelected);\r
+    }\r
+\r
     // select MC events \r
-    if(evtCuts->AcceptMCEvent(mcEvent))\r
+    if(evtCuts->AcceptMCEvent(mcEvent) && isMCEventSelected)\r
     {\r
       //\r
       // event histograms\r
index 0a6476b..c855579 100644 (file)
@@ -341,12 +341,12 @@ private:
   //  deta, dphi, pt1 for cosmics
   THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
   
-  THnSparseF *fEventCount; //-> trig, trig + vertex
+  THnSparseF *fEventCount; //-> trig, trig + vertex, selected event
 
   AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
   AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
 
-  ClassDef(AlidNdPtCorrection,2);
+  ClassDef(AlidNdPtCorrection,3);
 };
 
 #endif
index 04f8874..2dfb3e7 100644 (file)
@@ -96,12 +96,12 @@ void AlidNdPtEfficiency::Init(){
   //\r
 \r
   // TPC -> ITS matching efficiency\r
-  // eta:phi:pt:isPrim:charge:isMatch\r
-  Int_t binsRecMCTrackHistTPCITS[6]=  { 30,  90,             ptNbins,   2,   3,  2 };\r
-  Double_t minRecMCTrackHistTPCITS[6]={-1.5, 0.,             ptMin,     0., -1., 0 };\r
-  Double_t maxRecMCTrackHistTPCITS[6]={ 1.5, 2.*TMath::Pi(), ptMax,     2.,  2., 2.};\r
+  // eta:phi:pt:isPrim:charge:isMatch:isTPC\r
+  Int_t binsRecMCTrackHistTPCITS[7]=  { 30,  90,             ptNbins, 2,   3,  2,  2  };\r
+  Double_t minRecMCTrackHistTPCITS[7]={-1.5, 0.,             ptMin,   0., -1., 0., 0. };\r
+  Double_t maxRecMCTrackHistTPCITS[7]={ 1.5, 2.*TMath::Pi(), ptMax,   2.,  2., 2., 2. };\r
 \r
-  fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch",6,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS);\r
+  fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch:isTPC",7,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS);\r
   fRecMCTrackHistTPCITS->SetBinEdges(2,binsPt);\r
   fRecMCTrackHistTPCITS->GetAxis(0)->SetTitle("#eta");\r
   fRecMCTrackHistTPCITS->GetAxis(1)->SetTitle("#phi (rad)");\r
@@ -109,6 +109,7 @@ void AlidNdPtEfficiency::Init(){
   fRecMCTrackHistTPCITS->GetAxis(3)->SetTitle("isPrim");\r
   fRecMCTrackHistTPCITS->GetAxis(4)->SetTitle("charge");\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetTitle("isMatch");\r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetTitle("isTPC");\r
   fRecMCTrackHistTPCITS->Sumw2();\r
 \r
   // ITS -> TPC matching efficiency\r
@@ -144,15 +145,17 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
   }\r
 \r
   // get selection cuts\r
-  AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
+  AlidNdPtEventCuts *evtCuts      = GetEventCuts(); \r
   AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
-  AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
+  AliESDtrackCuts *esdTrackCuts   = GetTrackCuts(); \r
 \r
   if(!evtCuts || !accCuts  || !esdTrackCuts) {\r
     AliDebug(AliLog::kError, "cuts not available");\r
     return;\r
   }\r
 \r
+   \r
+\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
    \r
@@ -225,8 +228,9 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
     allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
     if(!allChargedTracks) return;\r
 \r
-    Bool_t isMatch = kFALSE;\r
     Int_t entries = allChargedTracks->GetEntries();\r
+    Bool_t isTPC = kFALSE;\r
+    Bool_t isMatch = kFALSE;\r
 \r
     // TPC -> ITS prolongation efficiency\r
     for(Int_t iTrack=0; iTrack<entries;++iTrack) \r
@@ -234,23 +238,30 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
       AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(iTrack);\r
       if(!track) continue;\r
 \r
+      isTPC = kFALSE;\r
+\r
       if(track->Charge()==0) continue;\r
-      if (!track->GetTPCInnerParam()) continue;\r
+      if(!track->GetTPCInnerParam()) continue;\r
+      if(!(track->GetStatus() & AliESDtrack::kTPCrefit)) continue;\r
 \r
       // Get TPC only tracks (must be deleted by user) \r
       AliESDtrack* tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent,iTrack);\r
       if(!tpcTrack) continue;\r
+      if(!tpcTrack->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack; continue; } \r
 \r
       // check loose cuts for TPC tracks\r
       if(!esdTrackCuts->AcceptTrack(tpcTrack))  { delete tpcTrack; continue; } \r
 \r
-      if(track->GetNcls(0) >= 2 && (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))) \r
+      isTPC = kTRUE;\r
+      isMatch = kFALSE;\r
+      if( (track->GetStatus()&AliESDtrack::kITSrefit) && \r
+         (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) ) \r
       {\r
         isMatch = kTRUE;\r
       }\r
 \r
       //\r
-      FillHistograms(tpcTrack, stack, isMatch, 0);\r
+      FillHistograms(tpcTrack, stack, isMatch, isTPC, kFALSE);\r
       if(tpcTrack) delete tpcTrack;\r
     } \r
 \r
@@ -271,22 +282,25 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
       if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
 \r
       // Check matching with TPC only track\r
-      isMatch = kFALSE;\r
       for(Int_t jTrack=0; jTrack<entries;++jTrack) \r
       {\r
+        isMatch = kFALSE;\r
+\r
         if(iTrack==jTrack) continue;\r
 \r
         AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(jTrack);\r
         if(!track2) continue;\r
         if(track2->Charge()==0) continue;\r
-       if (!track2->GetTPCInnerParam()) continue;\r
+       if(!track2->GetTPCInnerParam()) continue;\r
+        if(!(track2->GetStatus() & AliESDtrack::kTPCrefit)) continue;\r
 \r
         // Get TPC only tracks (must be deleted by user) \r
         AliESDtrack* tpcTrack2 = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent, jTrack);\r
         if(!tpcTrack2) continue;\r
+        if(!tpcTrack2->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack2; continue; } \r
 \r
         // check loose cuts for TPC tracks\r
-        //if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; }\r
+        if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; }\r
 \r
         // check matching\r
         if (TMath::Abs(track->GetY() - tpcTrack2->GetY()) > 3) { delete tpcTrack2; continue; }\r
@@ -301,8 +315,7 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
       }\r
 \r
        //\r
-       Bool_t isITSTPC = kTRUE;\r
-       FillHistograms(track, stack, isMatch, isITSTPC);\r
+       FillHistograms(track, stack, isMatch, kFALSE, kTRUE);\r
     } \r
   }\r
 \r
@@ -311,7 +324,7 @@ void AlidNdPtEfficiency::Process(AliESDEvent *const esdEvent, AliMCEvent * const
 }\r
 \r
 //_____________________________________________________________________________\r
-void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isITSTPC) const\r
+void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC,  const Bool_t isITSTPC) const\r
 {\r
   //\r
   // Fill ESD track and MC histograms \r
@@ -341,12 +354,13 @@ void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *c
 \r
   // fill histo\r
   Double_t vRecMCTrackHist[6] = { eta,phi,pt,isPrim,charge,isMatch }; \r
+  Double_t vRecMCTrackHistTPCITS[7] = { eta,phi,pt,isPrim,charge,isMatch,isTPC }; \r
 \r
   if(isITSTPC) {\r
     fRecMCTrackHistITSTPC->Fill(vRecMCTrackHist);\r
   }\r
   else {\r
-    fRecMCTrackHistTPCITS->Fill(vRecMCTrackHist);\r
+    fRecMCTrackHistTPCITS->Fill(vRecMCTrackHistTPCITS);\r
   }\r
 }\r
 \r
@@ -410,6 +424,7 @@ void AlidNdPtEfficiency::Analyse()
   //\r
 \r
   //eff vs eta\r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2);  \r
   h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(0);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2);  \r
   h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(0);\r
@@ -418,8 +433,10 @@ void AlidNdPtEfficiency::Analyse()
   h1Dc->Divide(h1Dall);\r
   aFolderObj->Add(h1Dc);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2);  \r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2);  \r
 \r
   //eff vs phi\r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2);  \r
   fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799);  \r
   h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(1);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2);  \r
@@ -429,8 +446,10 @@ void AlidNdPtEfficiency::Analyse()
   h1Dc->Divide(h1Dall);\r
   aFolderObj->Add(h1Dc);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2);  \r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2);  \r
 \r
   //eff vs pT\r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2);  \r
   fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799);  \r
   h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(2);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2);  \r
@@ -440,10 +459,11 @@ void AlidNdPtEfficiency::Analyse()
   h1Dc->Divide(h1Dall);\r
   aFolderObj->Add(h1Dc);\r
   fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2);  \r
+  fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2);  \r
 \r
 \r
   //\r
-  // TPC->ITS efficiency\r
+  // ITS->TPC efficiency\r
   //\r
 \r
   fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-1.5, 1.499);  \r
index fb32fb7..eb65f67 100644 (file)
@@ -53,7 +53,7 @@ public :
   TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
 
   // Fill histograms
-  void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isITSTPC) const;
+  void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC,const Bool_t isITSTPC) const;
 
   // Getters
   THnSparseF *GetRecMCTrackHistTPCITS() const {return fRecMCTrackHistTPCITS;}
@@ -69,7 +69,7 @@ private:
   //
 
   //TPC -> ITS matching efficiency
-  THnSparseF *fRecMCTrackHistTPCITS; //-> eta:phi:pt:isPrim:charge:isMatch
+  THnSparseF *fRecMCTrackHistTPCITS; //-> eta:phi:pt:isPrim:charge:isMatch:isTPC
 
   //ITS -> TPC matching efficiency
   THnSparseF *fRecMCTrackHistITSTPC; //-> eta:phi:pt:isPrim:charge:isMatch
@@ -77,7 +77,7 @@ private:
   AlidNdPtEfficiency(const AlidNdPtEfficiency&); // not implemented
   AlidNdPtEfficiency& operator=(const AlidNdPtEfficiency&); // not implemented
 
-  ClassDef(AlidNdPtEfficiency,1);
+  ClassDef(AlidNdPtEfficiency,2);
 };
 
 #endif
index cd8016c..353c4e5 100644 (file)
@@ -48,6 +48,7 @@ AliAnalysisCuts(name, title)
 , fSigmaMeanZv(0)
 , fRedoTPCVertex(kTRUE)
 , fUseBeamSpotConstraint(kTRUE)
+, fEventSelectedRequired(kFALSE)
 {
   // default constructor 
   
index 7125259..7a4ffbc 100644 (file)
@@ -40,10 +40,14 @@ public:
     fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv;\r
   }\r
 \r
+\r
   void SetRedoTPCVertex(const Bool_t redo = kTRUE) {fRedoTPCVertex = redo;}\r
   void SetUseBeamSpotConstraint(const Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;}\r
+  void SetEventSelectedRequired(const Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} \r
+\r
 \r
   // getters \r
+  Bool_t  IsEventSelectedRequired() const {return fEventSelectedRequired;}\r
   Bool_t  IsTriggerRequired() const {return fTriggerRequired;}\r
   Bool_t  IsRecVertexRequired() const {return fRecVertexRequired;}\r
   Int_t   GetEventProcessType() const {return fEventProcessType;}  \r
@@ -64,6 +68,7 @@ public:
   Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;}\r
   Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;}\r
 \r
+\r
   // cuts init function\r
   void Init();\r
 \r
@@ -100,10 +105,12 @@ private:
   Bool_t fRedoTPCVertex;         // redo vertex\r
   Bool_t fUseBeamSpotConstraint; // use beam spot contraints  \r
 \r
+  Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required\r
+\r
   AlidNdPtEventCuts(const AlidNdPtEventCuts&); // not implemented\r
   AlidNdPtEventCuts& operator=(const AlidNdPtEventCuts&); // not implemented\r
 \r
-  ClassDef(AlidNdPtEventCuts, 1)\r
+  ClassDef(AlidNdPtEventCuts, 2)\r
 };\r
 \r
 #endif // ALIDNDPTEVENTCUTS_H\r
index 30529ad..b8c0188 100644 (file)
@@ -781,6 +781,74 @@ return track;
 } 
 
 //_____________________________________________________________________________
+Bool_t AlidNdPtHelper::SelectEvent(const AliESDEvent* const esdEvent, AliESDtrackCuts* const esdTrackCuts) {
+// select events with at least
+// one reconstructed primary track in acceptance
+// pT>0.5 GeV/c, |eta|<0.8 for cross section studies
+
+if(!esdEvent) return kFALSE;
+if(!esdTrackCuts) return kFALSE;
+
+  AliESDtrack *track=0;
+  Int_t count = 0;
+  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
+  { 
+    track = esdEvent->GetTrack(iTrack);
+    if(!track) continue;
+    if(track->Charge()==0) continue;
+    if(!esdTrackCuts->AcceptTrack(track)) continue;
+    if(track->Pt() < 0.5) continue;
+    if(TMath::Abs(track->Eta()) > 0.8) continue;
+
+    count++;
+  }
+
+  if(count > 0) return kTRUE;
+  else return kFALSE;
+
+return kFALSE;
+}
+
+//_____________________________________________________________________________
+Bool_t AlidNdPtHelper::SelectMCEvent(AliMCEvent* const mcEvent) {
+//
+// select events with at least
+// one prompt (MC primary) track in acceptance
+// pT>0.5 GeV/c, |eta|<0.8 for cross section studies
+//
+
+if(!mcEvent) return kFALSE;
+AliStack* stack = mcEvent->Stack(); 
+if(!stack) return kFALSE;
+
+  Int_t count = 0;
+  for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) 
+  {
+    TParticle* particle = stack->Particle(iMc);
+    if (!particle) continue;
+
+    // only charged particles
+    if(!particle->GetPDG()) continue;
+    Double_t charge = particle->GetPDG()->Charge()/3.;
+    if(charge == 0) continue;
+
+    // physical primary
+    Bool_t prim = stack->IsPhysicalPrimary(iMc);
+    if(!prim) continue;
+
+    if(particle->Pt() < 0.5) continue;
+    if(TMath::Abs(particle->Eta()) > 0.8) continue;
+
+    count++;
+  }
+
+  if(count > 0) return kTRUE;
+  else return kFALSE;
+
+return kFALSE;
+}
+
+//_____________________________________________________________________________
 Int_t AlidNdPtHelper::GetTPCMBTrackMult(const AliESDEvent *const esdEvent,const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts,const  AliESDtrackCuts *const trackCuts)
 {
   //
index f83ee49..bf3f91a 100644 (file)
@@ -61,6 +61,9 @@ class AlidNdPtHelper : public TObject
     static Bool_t IsGoodImpPar(const AliESDtrack *const track);
     static Int_t ConvertPdgToPid(const TParticle *const particle);
 
+    static Bool_t SelectEvent(const AliESDEvent* const aEsd, AliESDtrackCuts* const esdTrackCuts);
+    static Bool_t SelectMCEvent(AliMCEvent* const mcEvent);
+
     static TObjArray *GetAllChargedTracks(AliESDEvent *const esdEvent, AnalysisMode analysisMode);
 
     static TH1F* MakeResol(TH2F * const his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries);