modification in task to filter events
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Mar 2012 14:17:40 +0000 (14:17 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 1 Mar 2012 14:17:40 +0000 (14:17 +0000)
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h
PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/AddTask_jacek_dNdPtTrackDumpTaskPbPb_TPCITS.C

index dc0f581..950a127 100644 (file)
@@ -83,11 +83,12 @@ AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name)
   , fCentralityEstimator(0)\r
   , fLowPtTrackDownscaligF(0)\r
   , fLowPtV0DownscaligF(0)\r
+  , fProcessAll(kFALSE)\r
 {\r
   // Constructor\r
 \r
   // Define input and output slots here\r
-  DefineOutput(0, TList::Class());\r
+  DefineOutput(1, TList::Class());\r
 \r
 }\r
 \r
@@ -129,7 +130,7 @@ void AlidNdPtTrackDumpTask::UserCreateOutputObjects()
   // create temporary file for output tree\r
   fTreeSRedirector = new TTreeSRedirector("jotwinow_Temp_Trees.root");\r
 \r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -161,15 +162,268 @@ void AlidNdPtTrackDumpTask::UserExec(Option_t *)
   }\r
 \r
   //\r
-  ProcessdNdPt(fESD,fMC,fESDfriend);\r
-  ProcessV0(fESD,fMC,fESDfriend);\r
+  if(fProcessAll) { \r
+    ProcessAll(fESD,fMC,fESDfriend);\r
+    ProcessV0(fESD,fMC,fESDfriend);\r
+  }\r
+  else {\r
+    Process(fESD,fMC,fESDfriend);\r
+    ProcessV0(fESD,fMC,fESDfriend);\r
+  }\r
 \r
   // Post output data.\r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::ProcessdNdPt(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)\r
+void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const /*esdFriend*/)\r
+{\r
+  //\r
+  // Process real and/or simulated events\r
+  // Only filtering\r
+  //\r
+  if(!esdEvent) {\r
+    AliDebug(AliLog::kError, "esdEvent not available");\r
+    return;\r
+  }\r
+\r
+  // get selection cuts\r
+  AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
+  AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
+  AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
+\r
+  if(!evtCuts || !accCuts  || !esdTrackCuts) {\r
+    AliDebug(AliLog::kError, "cuts not available");\r
+    return;\r
+  }\r
+\r
+  // trigger selection\r
+  Bool_t isEventTriggered = kTRUE;\r
+  AliPhysicsSelection *physicsSelection = NULL;\r
+  AliTriggerAnalysis* triggerAnalysis = NULL;\r
+\r
+  // \r
+  AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();\r
+  if (!inputHandler)\r
+  {\r
+    Printf("ERROR: Could not receive input handler");\r
+    return;\r
+  }\r
+   \r
+  // get file name\r
+  TTree *chain = (TChain*)GetInputData(0);\r
+  if(!chain) { \r
+    Printf("ERROR: Could not receive input chain");\r
+    return;\r
+  }\r
+  TObjString fileName(chain->GetCurrentFile()->GetName());\r
+\r
+  // trigger\r
+  if(evtCuts->IsTriggerRequired())  \r
+  {\r
+    // always MB\r
+    isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;\r
+\r
+    physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());\r
+    if(!physicsSelection) return;\r
+    //SetPhysicsTriggerSelection(physicsSelection);\r
+\r
+    if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) {\r
+      // set trigger (V0AND)\r
+      triggerAnalysis = physicsSelection->GetTriggerAnalysis();\r
+      if(!triggerAnalysis) return;\r
+      isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+    }\r
+  }\r
+\r
+  // centrality determination\r
+  Float_t centralityF = -1;\r
+  AliCentrality *esdCentrality = esdEvent->GetCentrality();\r
+  centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
+\r
+  // use MC information\r
+  AliHeader* header = 0;\r
+  AliGenEventHeader* genHeader = 0;\r
+  AliStack* stack = 0;\r
+  TArrayF vtxMC(3);\r
+\r
+  Int_t multMCTrueTracks = 0;\r
+  if(IsUseMCInfo())\r
+  {\r
+    //\r
+    if(!mcEvent) {\r
+      AliDebug(AliLog::kError, "mcEvent not available");\r
+      return;\r
+    }\r
+    // get MC event header\r
+    header = mcEvent->Header();\r
+    if (!header) {\r
+      AliDebug(AliLog::kError, "Header not available");\r
+      return;\r
+    }\r
+    // MC particle stack\r
+    stack = mcEvent->Stack();\r
+    if (!stack) {\r
+      AliDebug(AliLog::kError, "Stack not available");\r
+      return;\r
+    }\r
+\r
+    // get MC vertex\r
+    genHeader = header->GenEventHeader();\r
+    if (!genHeader) {\r
+      AliDebug(AliLog::kError, "Could not retrieve genHeader from Header");\r
+      return;\r
+    }\r
+    genHeader->PrimaryVertex(vtxMC);\r
+\r
+    // multipliticy of all MC primary tracks\r
+    // in Zv, pt and eta ranges)\r
+    multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
+\r
+  } // end bUseMC\r
+\r
+  // laser events \r
+  if(esdEvent)\r
+  {\r
+    const AliESDHeader* esdHeader = esdEvent->GetHeader();\r
+    if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) \r
+    {\r
+      Int_t countLaserTracks = 0;\r
+      for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)\r
+      {\r
+        AliESDtrack *track = esdEvent->GetTrack(iTrack);\r
+        if(!track) continue;\r
+\r
+        if(track->GetTPCInnerParam()) countLaserTracks++;\r
+      }\r
+       \r
+      if(countLaserTracks > 100) {      \r
+\r
+      Double_t runNumber = esdEvent->GetRunNumber();\r
+      Double_t evtTimeStamp = esdEvent->GetTimeStamp();\r
+      Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();\r
+\r
+      if(!fTreeSRedirector) return;\r
+      (*fTreeSRedirector)<<"Laser"<<\r
+        "fileName.="<<&fileName<<\r
+        "runNumber="<<runNumber<<\r
+        "evtTimeStamp="<<evtTimeStamp<<\r
+        "evtNumberInFile="<<evtNumberInFile<<\r
+        "multTPCtracks="<<countLaserTracks<<\r
+        "\n";\r
+     }\r
+     }\r
+   }\r
+\r
+\r
+  // get reconstructed vertex  \r
+  //const AliESDVertex* vtxESD = 0; \r
+  const AliESDVertex* vtxESD = 0; \r
+  if(GetAnalysisMode() == AlidNdPtHelper::kTPC) {\r
+        vtxESD = esdEvent->GetPrimaryVertexTPC();\r
+  }\r
+  else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) {\r
+     vtxESD = esdEvent->GetPrimaryVertexTracks();\r
+  }\r
+  else {\r
+       return;\r
+  }\r
+\r
+  if(!vtxESD) return;\r
+\r
+  Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); \r
+  //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
+  //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
+\r
+\r
+  // check event cuts\r
+  if(isEventOK && isEventTriggered)\r
+  {\r
+    //\r
+    Double_t vert[3] = {0}; \r
+    vert[0] = vtxESD->GetXv();\r
+    vert[1] = vtxESD->GetYv();\r
+    vert[2] = vtxESD->GetZv();\r
+    Int_t mult = vtxESD->GetNContributors();\r
+    Double_t bz = esdEvent->GetMagneticField();\r
+    Double_t runNumber = esdEvent->GetRunNumber();\r
+    Double_t evtTimeStamp = esdEvent->GetTimeStamp();\r
+    Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();\r
+\r
+    // high pT tracks\r
+    for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)\r
+    {\r
+      AliESDtrack *track = esdEvent->GetTrack(iTrack);\r
+      if(!track) continue;\r
+      if(track->Charge()==0) continue;\r
+      if(!esdTrackCuts->AcceptTrack(track)) continue;\r
+      if(!accCuts->AcceptTrack(track)) continue;\r
+      \r
+      // downscale low-pT tracks\r
+      Double_t scalempt= TMath::Min(track->Pt(),10.);\r
+      Double_t downscaleF = gRandom->Rndm();\r
+      downscaleF *= fLowPtTrackDownscaligF;\r
+      if(TMath::Exp(2*scalempt)<downscaleF) continue;\r
+      //printf("TMath::Exp(2*scalempt) %e, downscaleF %e \n",TMath::Exp(2*scalempt), downscaleF);\r
+\r
+      // Dump to the tree \r
+      // vertex\r
+      // TPC-ITS tracks\r
+      //\r
+      if(!fTreeSRedirector) return;\r
+      (*fTreeSRedirector)<<"dNdPtTree"<<\r
+        "fileName.="<<&fileName<<\r
+        "runNumber="<<runNumber<<\r
+        "evtTimeStamp="<<evtTimeStamp<<\r
+        "evtNumberInFile="<<evtNumberInFile<<\r
+        "Bz="<<bz<<\r
+       "vertX="<<vert[0]<<\r
+       "vertY="<<vert[1]<<\r
+       "vertZ="<<vert[2]<<\r
+        "mult="<<mult<<\r
+        "esdTrack.="<<track<<\r
+        "centralityF="<<centralityF<<\r
+        "\n";\r
+    }\r
+\r
+    // high dEdx\r
+    for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)\r
+    {\r
+      AliESDtrack *track = esdEvent->GetTrack(iTrack);\r
+      if(!track) continue;\r
+      if(track->Charge()==0) continue;\r
+      if(!esdTrackCuts->AcceptTrack(track)) continue;\r
+      if(!accCuts->AcceptTrack(track)) continue;\r
+\r
+      if(!IsHighDeDxParticle(track)) continue;\r
+      \r
+      if(!fTreeSRedirector) return;\r
+      (*fTreeSRedirector)<<"dEdx"<<\r
+        "fileName.="<<&fileName<<\r
+        "runNumber="<<runNumber<<\r
+        "evtTimeStamp="<<evtTimeStamp<<\r
+        "evtNumberInFile="<<evtNumberInFile<<\r
+        "Bz="<<bz<<\r
+       "vertX="<<vert[0]<<\r
+       "vertY="<<vert[1]<<\r
+       "vertZ="<<vert[2]<<\r
+        "mult="<<mult<<\r
+        "esdTrack.="<<track<<\r
+        "\n";\r
+      }\r
+  }\r
+  \r
+  PostData(1, fOutput);\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+//_____________________________________________________________________________\r
+void AlidNdPtTrackDumpTask::ProcessAll(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)\r
 {\r
   //\r
   // Process real and/or simulated events\r
@@ -744,7 +998,7 @@ void AlidNdPtTrackDumpTask::ProcessdNdPt(AliESDEvent *const esdEvent, AliMCEvent
       }\r
   }\r
   \r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -900,7 +1154,7 @@ void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent *
       "\n";\r
   }\r
   }\r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 }\r
 \r
 \r
@@ -1238,37 +1492,49 @@ void AlidNdPtTrackDumpTask::FinishTaskOutput()
 \r
   // open temporary file and copy trees to the ouptut container\r
 \r
-  TChain* chain = NULL;\r
+  TChain* chain = 0;\r
+  TTree* tree1 = 0;\r
+  TTree* tree2 = 0;\r
+  TTree* tree3 = 0;\r
+  TTree* tree4 = 0;\r
   //\r
   chain = new TChain("dNdPtTree");\r
-  if(!chain) return;\r
-  chain->Add("jotwinow_Temp_Trees.root");\r
-  TTree *tree1 = chain->CopyTree("1");\r
-  if (chain) { delete chain; chain=0; }\r
+  if(chain) { \r
+    chain->Add("jotwinow_Temp_Trees.root");\r
+    tree1 = chain->CopyTree("1");\r
+    delete chain; chain=0; \r
+  }\r
   if(tree1) tree1->Print();\r
+\r
   //\r
   chain = new TChain("V0s");\r
-  if(!chain) return;\r
-  chain->Add("jotwinow_Temp_Trees.root");\r
-  TTree *tree2 = chain->CopyTree("1");\r
-  if (chain) { delete chain; chain=0; }\r
+  if(chain) { \r
+    chain->Add("jotwinow_Temp_Trees.root");\r
+    tree2 = chain->CopyTree("1");\r
+    delete chain; chain=0; \r
+  }\r
   if(tree2) tree2->Print();\r
+\r
   //\r
   chain = new TChain("dEdx");\r
-  if(!chain) return;\r
-  chain->Add("jotwinow_Temp_Trees.root");\r
-  TTree *tree3 = chain->CopyTree("1");\r
-  if (chain) { delete chain; chain=0; }\r
+  if(chain) { \r
+    chain->Add("jotwinow_Temp_Trees.root");\r
+    tree3 = chain->CopyTree("1");\r
+    delete chain; chain=0; \r
+  }\r
   if(tree3) tree3->Print();\r
+\r
   //\r
   chain = new TChain("Laser");\r
-  if(!chain) return;\r
-  chain->Add("jotwinow_Temp_Trees.root");\r
-  TTree *tree4 = chain->CopyTree("1");\r
-  if (chain) { delete chain; chain=0; }\r
+  if(chain) { \r
+    chain->Add("jotwinow_Temp_Trees.root");\r
+    tree4 = chain->CopyTree("1");\r
+    delete chain; chain=0; \r
+  }\r
   if(tree4) tree4->Print();\r
 \r
-  OpenFile(0);\r
+\r
+  OpenFile(1);\r
 \r
   if(tree1) fOutput->Add(tree1);\r
   if(tree2) fOutput->Add(tree2);\r
@@ -1276,7 +1542,7 @@ void AlidNdPtTrackDumpTask::FinishTaskOutput()
   if(tree4) fOutput->Add(tree4);\r
   \r
   // Post output data.\r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -1301,6 +1567,6 @@ void AlidNdPtTrackDumpTask::Terminate(Option_t *)
   }\r
   */\r
 \r
-  PostData(0, fOutput);\r
+  PostData(1, fOutput);\r
 \r
 }\r
index c61eb19..6e26ece 100644 (file)
@@ -47,7 +47,8 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
   Bool_t IsUseMCInfo() const               { return fUseMCInfo; }
   
   // Process events
-  virtual void ProcessdNdPt(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
+  virtual void ProcessAll(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
+  virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
   virtual void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
 
   void SetEventCuts(AlidNdPtEventCuts* const cuts)              { fdNdPtEventCuts = cuts; }
@@ -83,6 +84,8 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
   void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; }
   void SetLowPtV0DownscaligF(Double_t fact)    { fLowPtV0DownscaligF = fact; }
 
+  void SetProcessAll(Bool_t proc) { fProcessAll = proc; }
+
  private:
 
   AliESDEvent *fESD;    //! ESD event
@@ -106,6 +109,7 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
 
   Double_t fLowPtTrackDownscaligF; // low pT track downscaling factor
   Double_t fLowPtV0DownscaligF; // low pT V0 downscaling factor
+  Double_t fProcessAll; // Calculate all track properties including MC
 
   AlidNdPtTrackDumpTask(const AlidNdPtTrackDumpTask&); // not implemented
   AlidNdPtTrackDumpTask& operator=(const AlidNdPtTrackDumpTask&); // not implemented
index a48496a..dc558ac 100644 (file)
@@ -108,10 +108,7 @@ void AddTask_jacek_dNdPtTrackDumpTaskPbPb_TPCITS()
   AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
   mgr->ConnectInput(task, 0, cinput);
 
-  //AliAnalysisDataContainer *coutput = mgr->CreateContainer("jotwinow_dNdPtTrackDumpPbPb_TPCITS", TTree::Class(), AliAnalysisManager::kOutputContainer, "jotwinow_dNdPtTrackDumpTaskPbPb_TPCITS.root");
-  //mgr->ConnectOutput(task, 1, coutput);
-
   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("TrigEvents", TList::Class(), AliAnalysisManager::kOutputContainer, "jotwinow_TrigEvents_Trees.root");
-  mgr->ConnectOutput(task, 0, coutput1);
+  mgr->ConnectOutput(task, 1, coutput1);
 }