Laser and dEdx trees added
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Feb 2012 11:26:41 +0000 (11:26 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Feb 2012 11:26:41 +0000 (11:26 +0000)
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx
PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h

index 25d817b..dc0f581 100644 (file)
@@ -24,6 +24,7 @@
 #include "TH1F.h"\r
 #include "TCanvas.h"\r
 #include "TList.h"\r
+#include "TObjArray.h"\r
 #include "TFile.h"\r
 #include "TMatrixD.h"\r
 #include "TRandom3.h"\r
@@ -78,7 +79,6 @@ AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name)
   , fEsdTrackCuts(0)\r
   , fTrigger(AliTriggerAnalysis::kMB1) \r
   , fAnalysisMode(AlidNdPtHelper::kTPC) \r
-  , fOutputSummary(0)\r
   , fTreeSRedirector(0)\r
   , fCentralityEstimator(0)\r
   , fLowPtTrackDownscaligF(0)\r
@@ -87,8 +87,7 @@ AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name)
   // Constructor\r
 \r
   // Define input and output slots here\r
-  DefineOutput(0, TTree::Class());\r
-  //DefineOutput(1, TList::Class());\r
+  DefineOutput(0, TList::Class());\r
 \r
 }\r
 \r
@@ -96,7 +95,6 @@ AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name)
 AlidNdPtTrackDumpTask::~AlidNdPtTrackDumpTask()\r
 {\r
   if(fOutput) delete fOutput;  fOutput =0; \r
-  //if(fOutputSummary) delete fOutputSummary;  fOutputSummary =0; \r
   if(fTreeSRedirector) delete fTreeSRedirector;  fTreeSRedirector =0; \r
 \r
   if(fdNdPtEventCuts) delete fdNdPtEventCuts; fdNdPtEventCuts=NULL; \r
@@ -128,12 +126,10 @@ void AlidNdPtTrackDumpTask::UserCreateOutputObjects()
   fOutput->SetOwner();\r
 \r
   //\r
-  // create output tree\r
-  //\r
-  fTreeSRedirector = new TTreeSRedirector("jotwinow_HighPt_TrackAndV0_Trees.root");\r
+  // create temporary file for output tree\r
+  fTreeSRedirector = new TTreeSRedirector("jotwinow_Temp_Trees.root");\r
 \r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
+  PostData(0, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -165,16 +161,15 @@ void AlidNdPtTrackDumpTask::UserExec(Option_t *)
   }\r
 \r
   //\r
-  Process(fESD,fMC,fESDfriend);\r
+  ProcessdNdPt(fESD,fMC,fESDfriend);\r
   ProcessV0(fESD,fMC,fESDfriend);\r
 \r
   // Post output data.\r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
+  PostData(0, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
-void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)\r
+void AlidNdPtTrackDumpTask::ProcessdNdPt(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)\r
 {\r
   //\r
   // Process real and/or simulated events\r
@@ -279,6 +274,40 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co
 \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
@@ -298,11 +327,22 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co
   //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
-    TRandom3 random;\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
@@ -310,10 +350,13 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co
       if(track->Charge()==0) continue;\r
       if(!esdTrackCuts->AcceptTrack(track)) continue;\r
       if(!accCuts->AcceptTrack(track)) continue;\r
-\r
+      \r
       // downscale low-pT tracks\r
       Double_t scalempt= TMath::Min(track->Pt(),10.);\r
-      if(TMath::Exp(2*scalempt)<fLowPtTrackDownscaligF*random.Rndm()) continue;\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
@@ -619,18 +662,6 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co
         }\r
       }\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
-\r
       //\r
       if(!fTreeSRedirector) return;\r
       (*fTreeSRedirector)<<"dNdPtTree"<<\r
@@ -685,10 +716,54 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co
 \r
        if(trackInnerC3) delete trackInnerC3;\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(0, fOutput);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+Bool_t AlidNdPtTrackDumpTask::IsHighDeDxParticle(AliESDtrack * track) {\r
+  //\r
+  // check if particle is Z > 1 \r
+  //\r
+  if (track->GetTPCNcls() < 60) return kFALSE;\r
+  Double_t mom = track->GetInnerParam()->GetP();\r
+  if (mom < 0.2) return kFALSE; // protection against unexpected behavior of Aleph parameterization\r
+  Float_t dca[2], bCov[3];\r
+  track->GetImpactParameters(dca,bCov);\r
+  //\r
 \r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
+  Double_t triggerDeDx = 4*AliExternalTrackParam::BetheBlochAleph((mom*2)/(0.938*3),1.0288,31.9806,5.04114e-11,2.13096,2.38541);\r
+\r
+  if (track->GetTPCsignal() > triggerDeDx && track->GetTPCsignal()<1000 && TMath::Abs(dca[0])<3.) return kTRUE;\r
+\r
+  return kFALSE;\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -712,9 +787,6 @@ void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent *
     return;\r
   }\r
 \r
-\r
-\r
-\r
   // trigger selection\r
   Bool_t isEventTriggered = kTRUE;\r
   AliPhysicsSelection *physicsSelection = NULL;\r
@@ -784,13 +856,15 @@ void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent *
   //\r
   // Dump the pt downscaled V0 into the tree\r
   // \r
-  //\r
   Int_t ntracks = esdEvent->GetNumberOfTracks();\r
   Int_t nV0s = esdEvent->GetNumberOfV0s();\r
   Int_t run = esdEvent->GetRunNumber();\r
   Int_t time= esdEvent->GetTimeStamp();\r
   Int_t evNr=esdEvent->GetEventNumberInFile();\r
   \r
+\r
+\r
+\r
   for (Int_t iv0=0; iv0<nV0s; iv0++){\r
     AliESDv0 * v0 = esdEvent->GetV0(iv0);\r
     if (!v0) continue;\r
@@ -812,10 +886,10 @@ void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent *
     if(!fTreeSRedirector) return;\r
     (*fTreeSRedirector)<<"V0s"<<\r
       "isDownscaled="<<isDownscaled<<\r
-      "run="<<run<<\r
-      "fname="<<&fileName<<\r
-      "time="<<time<<\r
-      "evNr="<<evNr<<\r
+      "fileName.="<<&fileName<<\r
+      "runNumber="<<run<<\r
+      "evtTimeStamp="<<time<<\r
+      "evtNumberInFile="<<evNr<<\r
       "type="<<type<<\r
       "ntracks="<<ntracks<<\r
       "v0.="<<v0<<\r
@@ -826,9 +900,10 @@ void AlidNdPtTrackDumpTask::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent *
       "\n";\r
   }\r
   }\r
-  PostData(0, fOutputSummary);\r
+  PostData(0, fOutput);\r
 }\r
 \r
+\r
 //_____________________________________________________________________________\r
 Int_t   AlidNdPtTrackDumpTask::GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle)\r
 {\r
@@ -963,10 +1038,14 @@ Bool_t AlidNdPtTrackDumpTask::IsV0Downscaled(AliESDv0 *const v0)
   //return kFALSE;\r
   Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt());\r
   Double_t scalempt= TMath::Min(maxPt,10.);\r
-  if (TMath::Exp(2*scalempt)<fLowPtV0DownscaligF*gRandom->Rndm()) return kTRUE;\r
+  Double_t downscaleF = gRandom->Rndm();\r
+  downscaleF *= fLowPtV0DownscaligF;\r
+  \r
+  //printf("V0 TMath::Exp(2*scalempt) %e, downscaleF %e \n",TMath::Exp(2*scalempt), downscaleF);\r
+  if (TMath::Exp(2*scalempt)<downscaleF) return kTRUE;\r
   return kFALSE;\r
+\r
   /*\r
-  \r
     TH1F his1("his1","his1",100,0,10);\r
     TH1F his2("his2","his2",100,0,10);\r
     {for (Int_t i=0; i<10000; i++){\r
@@ -1154,19 +1233,59 @@ void AlidNdPtTrackDumpTask::FinishTaskOutput()
   // locally on working node\r
   //\r
 \r
+  // must be deleted to store trees\r
+  if(fTreeSRedirector)  delete fTreeSRedirector; fTreeSRedirector=0;\r
+\r
+  // open temporary file and copy trees to the ouptut container\r
+\r
+  TChain* chain = NULL;\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(tree1) tree1->Print();\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(tree2) tree2->Print();\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(tree3) tree3->Print();\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(tree4) tree4->Print();\r
+\r
+  OpenFile(0);\r
+\r
+  if(tree1) fOutput->Add(tree1);\r
+  if(tree2) fOutput->Add(tree2);\r
+  if(tree3) fOutput->Add(tree3);\r
+  if(tree4) fOutput->Add(tree4);\r
+  \r
   // Post output data.\r
-  PostData(1, fOutput);\r
-  //PostData(0, fOutputSummary);\r
+  PostData(0, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r
 void AlidNdPtTrackDumpTask::Terminate(Option_t *) \r
 {\r
   // Called one at the end \r
-  if(fTreeSRedirector)  delete fTreeSRedirector; fTreeSRedirector=0;\r
-  fOutputSummary = dynamic_cast<TTree*> (GetOutputData(0));\r
+  /*\r
+  fOutputSummary = dynamic_cast<TTree*> (GetOutputData(1));\r
   if(fOutputSummary) delete fOutputSummary; fOutputSummary=0;\r
-\r
   TChain* chain = new TChain("dNdPtTree");\r
   if(!chain) return;\r
   chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root");\r
@@ -1177,10 +1296,11 @@ void AlidNdPtTrackDumpTask::Terminate(Option_t *)
   fOutputSummary = tree;\r
 \r
   if (!fOutputSummary) {\r
-    Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
+    Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable %p \n", GetOutputData(1));\r
     return;\r
   }\r
+  */\r
+\r
+  PostData(0, fOutput);\r
 \r
-  PostData(0, fOutputSummary);\r
-  //PostData(1, fOutput);\r
 }\r
index 8752928..c61eb19 100644 (file)
@@ -23,6 +23,7 @@ class AliMCEvent;
 class AliKFParticle; 
 class AliESDv0; 
 class TList;
+class TObjArray;
 class TTree;
 class TTreeSRedirector;
 
@@ -46,7 +47,7 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
   Bool_t IsUseMCInfo() const               { return fUseMCInfo; }
   
   // Process events
-  virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0);
+  virtual void ProcessdNdPt(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; }
@@ -77,6 +78,7 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
   // v0s selection
   Int_t  GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle);
   Bool_t IsV0Downscaled(AliESDv0 *const v0);
+  Bool_t IsHighDeDxParticle(AliESDtrack * const track);
 
   void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; }
   void SetLowPtV0DownscaligF(Double_t fact)    { fLowPtV0DownscaligF = fact; }
@@ -98,7 +100,6 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE {
   AliTriggerAnalysis::Trigger fTrigger;    //! trigger settings
   AlidNdPtHelper::AnalysisMode fAnalysisMode;   //! analysis mode TPC only, TPC + ITS
 
-  TTree* fOutputSummary;      //! tree to dump output
   TTreeSRedirector* fTreeSRedirector;      //! temp tree to dump output
 
   TString fCentralityEstimator;     //! use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"