]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdPt/AlidNdPtCorrection.cxx
- new functionality to select candle events
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtCorrection.cxx
index 452c9335ca57012af40a4db73588a286f6860196..5876d033cdd841715c5ded5c8ebb074e2371af1a 100644 (file)
@@ -303,8 +303,11 @@ void AlidNdPtCorrection::Init(){
   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
   */\r
 \r
-  const Int_t ptNbins = 55; \r
-  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
+\r
+  const Int_t ptNbins = 68;\r
+  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
+\r
+\r
   Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
 \r
@@ -854,18 +857,16 @@ 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
-\r
-\r
-\r
   // init output folder\r
   fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");\r
 \r
@@ -1025,10 +1026,12 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     return;\r
   }\r
 \r
+\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
   AliPhysicsSelection *trigSel = NULL;\r
   AliTriggerAnalysis *trigAna = NULL; // needed for andV0\r
+\r
   if(evtCuts->IsTriggerRequired())  \r
   {\r
     //\r
@@ -1038,40 +1041,119 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
       return;\r
     }\r
     \r
-    if(IsUseMCInfo()) { \r
+    if(IsUseMCInfo()) \r
+    { \r
       trigSel->SetAnalyzeMC();\r
-      isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
-\r
-      trigAna = trigSel->GetTriggerAnalysis();\r
-      if(!trigAna) \r
-        return;\r
 \r
-      if(GetTrigger() == AliTriggerAnalysis::kV0AND)\r
-        isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+      if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+      {\r
+        // check V0 systematics (case1)\r
+       // Initialization done in the macro\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+          return;\r
+\r
+        //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+        //trigAna->SetV0AdcThr(15);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 & kVZEROCase1  %d \n",isEventTriggered);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
+      {\r
+        // check V0 systematics (case2 only in MC)\r
+       // Initialization done in the macro\r
+\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+          return;\r
+\r
+        //trigAna->SetV0HwPars(0, 0, 125);\r
+        //trigAna->SetV0AdcThr(0);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+       if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else {\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 %d \n",isEventTriggered);\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          trigAna = trigSel->GetTriggerAnalysis();\r
+          if(!trigAna) \r
+            return;\r
+\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
     }\r
     else {\r
       //\r
       // 0-multiplicity bin for LHC background correction\r
       //\r
-      if(GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
-         GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
+      if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+         GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+         GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) \r
       {\r
         trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);\r
       } else {\r
         trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);\r
       }\r
 \r
-      isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
-\r
-      trigAna = trigSel->GetTriggerAnalysis();\r
-      if(!trigAna) \r
-        return;\r
-\r
-      if(GetTrigger() == AliTriggerAnalysis::kV0AND)\r
-        isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+      if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+      {\r
+        // check V0 systematics (case1)\r
+       // Initialization done in the macro\r
+        trigAna = trigSel->GetTriggerAnalysis();\r
+        if(!trigAna) \r
+          return;\r
+\r
+        //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+        //trigAna->SetV0AdcThr(15);\r
+\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
+      else {\r
+        isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+        //printf("MB1 %d \n",isEventTriggered);\r
+       \r
+        if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+       {\r
+          trigAna = trigSel->GetTriggerAnalysis();\r
+          if(!trigAna) \r
+            return;\r
+\r
+          isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+          //printf("V0AND %d \n",isEventTriggered);\r
+        }\r
+      }\r
     }\r
   }\r
-  \r
+\r
   // use MC information\r
   AliHeader* header = 0;\r
   AliGenEventHeader* genHeader = 0;\r
@@ -1159,20 +1241,34 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
        multMBTracks = mult->GetNumberOfTracklets();\r
     \r
   } \r
-  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
-           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)\r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+           GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+          GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )\r
   {\r
      if(vtxESD->GetStatus() && isRecVertex)\r
        multMBTracks = vtxESD->GetNContributors();\r
 \r
   }\r
   else {\r
-    AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));\r
+    AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
     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
@@ -1184,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
@@ -1237,29 +1333,10 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
 \r
       if(esdTrackCuts->AcceptTrack(track)) \r
       {\r
-        if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {\r
-          if(AlidNdPtHelper::IsGoodImpPar(track) && accCuts->AcceptTrack(track)) multRecTemp++;\r
-        }\r
-       else {\r
           if(accCuts->AcceptTrack(track)) multRecTemp++;\r
-        }\r
       }  \r
     }\r
 \r
-    /*\r
-    // check multiplicity\r
-    const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
-    Int_t trackletMult = 0;\r
-    if (mult) {\r
-       for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {\r
-          if(TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )\r
-           trackletMult++;\r
-       }\r
-    }\r
-    // use tracklet multiplicity\r
-    multRecTemp = trackletMult;\r
-    */\r
-\r
     //\r
     for(Int_t i=0; i<entries;++i) \r
     {\r
@@ -1277,7 +1354,7 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         \r
       // track-level corrections\r
       if(!esdTrackCuts->AcceptTrack(track))  continue;\r
-      if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
+      //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
 \r
         // cosmics analysis\r
         isCosmic = kFALSE;\r
@@ -1400,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
@@ -1415,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
@@ -1452,6 +1541,8 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         continue;\r
 \r
         // only charged particles\r
+         \r
+        if(!particle->GetPDG()) continue;\r
         Double_t charge = particle->GetPDG()->Charge()/3.;\r
         if (TMath::Abs(charge) < 0.001)\r
           continue;\r
@@ -1618,6 +1709,7 @@ void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack *
     TParticle* particle = stack->Particle(label);\r
     if(!particle) return;\r
    \r
+    if(!particle->GetPDG()) return;\r
     Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3\r
     if(TMath::Abs(gq)<0.001) return;\r
     Float_t gpt = particle->Pt();\r
@@ -1704,6 +1796,7 @@ void AlidNdPtCorrection::FillHistograms(AliStack * const stack, Int_t /*label*/,
   if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
   Int_t mech = particle->GetUniqueID(); // production mechanism\r
 \r
+  if(!particle->GetPDG()) return;\r
   Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
   Float_t gpt = particle->Pt();\r
   Float_t qgpt = particle->Pt() * gq;\r