fixed the reading of the FMD primary data (speed issue)
authorhdalsgaa <hdalsgaa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Jul 2009 11:27:10 +0000 (11:27 +0000)
committerhdalsgaa <hdalsgaa@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Jul 2009 11:27:10 +0000 (11:27 +0000)
FMD/analysis/AliFMDAnalysisTaskDndeta.cxx
FMD/analysis/AliFMDAnalysisTaskDndeta.h
FMD/analysis/AliFMDAnalysisTaskSE.cxx
FMD/analysis/AliFMDAnalysisTaskSE.h
FMD/analysis/AliFMDAnalysisTaskSharing.cxx

index cf4c27f..b5d5fe4 100644 (file)
@@ -41,7 +41,8 @@ AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta()
   fStandalone(kTRUE),
   fMCevent(0),
   fLastTrackByStrip(0),
-  fPrimary(kTRUE)
+  fPrimary(kTRUE),
+  fRecordHits(kFALSE)
 {
   // Default constructor
   DefineInput (0, TList::Class());
@@ -61,7 +62,8 @@ AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta(const char* name, Bool_t SE):
     fStandalone(kTRUE),
     fMCevent(0),
     fLastTrackByStrip(0),
-    fPrimary(kTRUE)
+    fPrimary(kTRUE),
+    fRecordHits(kFALSE)
 {
   fStandalone = SE;
   if(fStandalone) {
@@ -244,12 +246,17 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
   Int_t    vertexBin       = (Int_t)vertexBinDouble;
   
   Bool_t firstTrack = kTRUE;
-  Int_t nTracks = fMCevent->GetNumberOfTracks();
+  
+  // we loop over the primaries only unless we need the hits (diagnostics running slowly)
+  Int_t nTracks = stack->GetNprimary();
+  if(fRecordHits)
+    nTracks = stack->GetNtrack();
+  
   for(Int_t i = 0 ;i<nTracks;i++) {
     particle = fMCevent->GetTrack(i);
     if(!particle)
       continue;
-    
+   
     if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
       hPrimary->Fill(particle->Eta());
       
@@ -260,9 +267,10 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
        fNMCevents.Fill(vertexBin);
        firstTrack = kFALSE;
       }
-    }
     
-    for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
+    }
+    if(fRecordHits) {
+      for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
       
       AliTrackReference* ref = particle->GetTrackReference(j);
       UShort_t det,sec,strip;
@@ -279,8 +287,6 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
        hHits->Fill(eta);
        Float_t nstrips = (ring =='O' ? 256 : 512);
        
-       //if(det == 1 && ring == 'I')
-       //      std::cout<<"hit in "<<det<<"   "<<ring<<"   "<<sec<<"   "<<strip<<"   "<<std::endl;
        fLastTrackByStrip(det,ring,sec,strip) = (Float_t)i;
        
        if(strip >0)
@@ -291,9 +297,9 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
        
       }
       }
+    }
     
-    
-      }
+  }
   
 }
 //_____________________________________________________________________
index 698d847..c212907 100644 (file)
@@ -30,7 +30,8 @@ class AliFMDAnalysisTaskDndeta : public AliAnalysisTask
       fStandalone(o.fStandalone),
       fMCevent(o.fMCevent),
       fLastTrackByStrip(o.fLastTrackByStrip),
-      fPrimary(o.fPrimary) {}
+      fPrimary(o.fPrimary),
+      fRecordHits(o.fRecordHits) {}
     AliFMDAnalysisTaskDndeta& operator=(const AliFMDAnalysisTaskDndeta&) { return *this; }
     // Implementation of interface methods
     virtual void ConnectInputData(Option_t *option = "");
@@ -47,6 +48,7 @@ class AliFMDAnalysisTaskDndeta : public AliAnalysisTask
     void ProcessPrimary();
     TList* GetOutputList() {return fOutputList;}
     void SetAnalyzePrimary(Bool_t prim) {fPrimary = prim;}
+    void SetRecordHits(Bool_t recordhits) {fRecordHits = recordhits;}
  private:
     Int_t         fDebug;        //  Debug flag
     TList*        fOutputList;
@@ -60,6 +62,7 @@ class AliFMDAnalysisTaskDndeta : public AliAnalysisTask
     AliMCEvent*   fMCevent;
     AliFMDFloatMap fLastTrackByStrip;
     Bool_t        fPrimary;
+    Bool_t        fRecordHits;
     ClassDef(AliFMDAnalysisTaskDndeta, 0); // Analysis task for FMD analysis
 };
  
index 6f884e2..dfb6492 100644 (file)
@@ -2,6 +2,8 @@
 #include "AliESDEvent.h"
 #include "iostream"
 #include "AliESDFMD.h"
+#include "AliMCEventHandler.h"
+#include "AliAnalysisManager.h"
 
 ClassImp(AliFMDAnalysisTaskSE)
 
@@ -13,7 +15,8 @@ AliAnalysisTaskSE(),
   fDensity("Density",kFALSE),
   fBackground("BackgroundCorrected",kFALSE),
   fDndeta("dNdeta",kFALSE),
-  fPrimary(kTRUE)
+  fPrimary(kTRUE),
+  fRecordHits(kFALSE)
 {
   // Default constructor
 }
@@ -25,7 +28,8 @@ AliFMDAnalysisTaskSE::AliFMDAnalysisTaskSE(const char* name):
   fDensity("Density",kFALSE),
   fBackground("BackgroundCorrected",kFALSE),
   fDndeta("dNdeta",kFALSE),
-  fPrimary(kTRUE)
+  fPrimary(kTRUE),
+  fRecordHits(kFALSE)
 {
   
   DefineOutput(1, TList::Class());
@@ -63,6 +67,7 @@ void AliFMDAnalysisTaskSE::UserCreateOutputObjects()
   fDndeta.SetInputList(bgcorlist); 
   fDndeta.SetOutputList(fListOfHistos); 
   fDndeta.SetAnalyzePrimary(fPrimary);
+  fDndeta.SetRecordHits(fRecordHits);
   fSharing.CreateOutputObjects();
   fDensity.CreateOutputObjects();
   fBackground.CreateOutputObjects();
@@ -89,8 +94,12 @@ void AliFMDAnalysisTaskSE::UserExec(Option_t */*option*/)
     fDensity.Exec("");
     if(fDensity.GetEventStatus()) {
       fBackground.Exec("");  
-      AliMCEvent* mcevent = MCEvent();
-      fDndeta.SetMCEvent(mcevent);
+      //AliMCEvent* mcevent =  MCEvent();
+      if(fPrimary) {
+       AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+       AliMCEvent* mcevent = eventHandler->MCEvent();
+       fDndeta.SetMCEvent(mcevent);
+      }
       fDndeta.Exec("");
       
     }
index 0779f42..57836ab 100644 (file)
@@ -19,7 +19,8 @@ class AliFMDAnalysisTaskSE : public AliAnalysisTaskSE
       fDensity(o.fDensity),
       fBackground(o.fBackground),
       fDndeta(o.fDndeta),
-      fPrimary(o.fPrimary) {}
+      fPrimary(o.fPrimary),
+      fRecordHits(o.fRecordHits) {}
     AliFMDAnalysisTaskSE& operator=(const AliFMDAnalysisTaskSE&) { return *this; }
     
     virtual void Init();
@@ -27,7 +28,7 @@ class AliFMDAnalysisTaskSE : public AliAnalysisTaskSE
     virtual void UserExec(Option_t* /*option*/);
     void  Terminate(Option_t */*option*/);
     void  SetAnalyzePrimary(Bool_t prim) {fPrimary = prim;}
-    
+    void  SetRecordHits(Bool_t recordhits) {fRecordHits = recordhits;}
  private:
     
     TList* fListOfHistos;
@@ -36,6 +37,7 @@ class AliFMDAnalysisTaskSE : public AliAnalysisTaskSE
     AliFMDAnalysisTaskBackgroundCorrection fBackground;
     AliFMDAnalysisTaskDndeta               fDndeta;
     Bool_t                                 fPrimary;
+    Bool_t                                 fRecordHits;
     ClassDef(AliFMDAnalysisTaskSE, 1);
 
 };
index 56e8595..c8c2b24 100644 (file)
@@ -17,6 +17,7 @@
 #include "AliESDVertex.h"
 #include "AliMultiplicity.h"
 #include "AliFMDAnaParameters.h"
+//#include "/home/canute/ALICE/AliRoot/PWG0/AliPWG0Helper.h"
 //#include "AliFMDParameters.h"
 
 ClassImp(AliFMDAnalysisTaskSharing)
@@ -122,7 +123,17 @@ void AliFMDAnalysisTaskSharing::Exec(Option_t */*option*/)
   Double_t vertex[3];
   GetVertex(vertex);
   fEsdVertex->SetXYZ(vertex);
-  
+  /*
+    Bool_t isTriggered = AliPWG0Helper::IsEventTriggered(fESD, AliPWG0Helper::kMB1);
+    
+    if(!isTriggered) {
+    fStatus = kFALSE;
+    std::cout<<"no trigger"<<std::endl;
+    return;
+    }
+    else
+    fStatus = kTRUE;
+  */
   if(vertex[0] == 0 && vertex[1] == 0 && vertex[2] == 0) {
   
     fStatus = kFALSE;