]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/analysis/AliFMDAnalysisTaskDndeta.cxx
Next round of upgrades and cleanups of code. The code is now more streamlined and...
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnalysisTaskDndeta.cxx
index 96957ca65b2ef6fff78f1f0e20e1e8a5b0308b30..2a66cd60e13e41057a259277f27ab61812f692e6 100644 (file)
@@ -33,15 +33,11 @@ AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta()
 : fDebug(0),
   fOutputList(0),
   fInputList(0),
-  fArray(0),
-  fInputArray(0),
   fVertexString(0x0),
   fNevents(),
   fNMCevents(),
   fStandalone(kTRUE),
-  fMCevent(0),
-  fLastTrackByStrip(),
-  fPrimary(kTRUE)
+  fLastTrackByStrip(0)
 {
   // Default constructor
   DefineInput (0, TList::Class());
@@ -53,15 +49,11 @@ AliFMDAnalysisTaskDndeta::AliFMDAnalysisTaskDndeta(const char* name, Bool_t SE):
     fDebug(0),
     fOutputList(0),
     fInputList(0),
-    fArray(),
-    fInputArray(0),
     fVertexString(0x0),
     fNevents(),
     fNMCevents(),
     fStandalone(kTRUE),
-    fMCevent(0),
-    fLastTrackByStrip(),
-    fPrimary(kTRUE)
+    fLastTrackByStrip(0)
 {
   fStandalone = SE;
   if(fStandalone) {
@@ -76,9 +68,6 @@ void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
 {
   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
   
-  fArray.SetName("FMD");
-  fArray.SetOwner();
-  
   if(!fOutputList)
     fOutputList = new TList();
   fOutputList->SetName("BackgroundCorrected");
@@ -101,18 +90,13 @@ void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
   
   for(Int_t det =1; det<=3;det++)
     {
-      TObjArray* detArray = new TObjArray();
-      detArray->SetName(Form("FMD%d",det));
-      fArray.AddAtAndExpand(detArray,det);
       Int_t nRings = (det==1 ? 1 : 2);
       for(Int_t ring = 0;ring<nRings;ring++)
        {
          Char_t ringChar = (ring == 0 ? 'I' : 'O');
          Int_t  nSec     = (ring == 0 ? 20 : 40);
          
-         TObjArray* vtxArray = new TObjArray();
-         vtxArray->SetName(Form("FMD%d%c",det,ringChar));
-         detArray->AddAtAndExpand(vtxArray,ring);
+         
          for(Int_t i = 0; i< nVtxbins; i++) {
            TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, i);
            hMult  = new TH2F(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),
@@ -132,8 +116,7 @@ void AliFMDAnalysisTaskDndeta::CreateOutputObjects()
            hHits->Sumw2();
            fOutputList->Add(hMult);
            fOutputList->Add(hHits);
-           vtxArray->AddAtAndExpand(hMult,i);
-           
+                   
          }
        } 
     }
@@ -163,34 +146,34 @@ void AliFMDAnalysisTaskDndeta::ConnectInputData(Option_t */*option*/)
 {
   if(fStandalone) {
     fInputList   = (TList*)GetInputData(0);
-    fVertexString = (TObjString*)GetInputData(1);
   }
 }
 //_____________________________________________________________________
 void AliFMDAnalysisTaskDndeta::Exec(Option_t */*option*/)
 {
+  AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
+  fVertexString = (TObjString*)fInputList->At(0);
+  
   Int_t vtxbin   = fVertexString->GetString().Atoi();
+  
   fNevents.Fill(vtxbin);
+  
   for(UShort_t det=1;det<=3;det++) {
-    //TObjArray* detInputArray = (TObjArray*)fInputArray->At(det);
-    TObjArray* detArray = (TObjArray*)fArray.At(det);
     Int_t nRings = (det==1 ? 1 : 2);
     for (UShort_t ir = 0; ir < nRings; ir++) {
       Char_t ringChar = (ir == 0 ? 'I' : 'O');
-      //TObjArray* vtxInputArray = (TObjArray*)detInputArray->At(ir);
-      TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
-      TH2F* hMultTotal = (TH2F*)vtxArray->At(vtxbin);
-      
+            
+      TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
+     
       
       TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
       
       hMultTotal->Add(hMultInput);
-      
-      
+            
     }
   }
   
-  if(fMCevent && fPrimary)
+  if(pars->GetProcessPrimary())
     ProcessPrimary();
   
   if(fStandalone) {
@@ -207,15 +190,20 @@ void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
   Int_t nVtxbins = pars->GetNvtxBins();
   
   for(UShort_t det=1;det<=3;det++) {
-    TObjArray* detArray = (TObjArray*)fArray.At(det);
     Int_t nRings = (det==1 ? 1 : 2);
     for (UShort_t ir = 0; ir < nRings; ir++) {
-      TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
       Char_t ringChar = (ir == 0 ? 'I' : 'O');
       for(Int_t i =0; i<nVtxbins; i++) {
-       TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
+       
+       TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i));
+       TH2F* hMultTrVtx = (TH2F*)hMultTotal->Clone(Form("dNdeta_FMD_TrVtx_%d%c_vtxbin%d",det,ringChar,i));
+       
+       hMultTotal->Scale(pars->GetEventSelectionEfficiency(i));
        TH1D* hMultProj   = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
+       TH1D* hMultProjTrVtx   = hMultTrVtx->ProjectionX(Form("dNdeta_FMD_TrVtx_%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
+       fOutputList->Add(hMultTrVtx);
        fOutputList->Add(hMultProj);
+       fOutputList->Add(hMultProjTrVtx);
       }
     }
   }
@@ -224,15 +212,20 @@ void AliFMDAnalysisTaskDndeta::Terminate(Option_t */*option*/) {
 //_____________________________________________________________________
 void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
   
+  AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+  AliMCEvent* mcEvent = eventHandler->MCEvent();
+  if(!mcEvent)
+    return;
+  
   fLastTrackByStrip.Reset(-1);
   
   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
   
   AliMCParticle* particle = 0;
-  AliStack* stack = fMCevent->Stack();
+  AliStack* stack = mcEvent->Stack();
   
   TH1F* hPrimary = (TH1F*)fOutputList->FindObject("hMultvsEta");
-  AliHeader* header            = fMCevent->Header();
+  AliHeader* header            = mcEvent->Header();
   AliGenEventHeader* genHeader = header->GenEventHeader();
   
   TArrayF vertex;
@@ -244,12 +237,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(pars->GetProcessHits())
+    nTracks = stack->GetNtrack();
+  
   for(Int_t i = 0 ;i<nTracks;i++) {
-    particle = fMCevent->GetTrack(i);
+    particle = mcEvent->GetTrack(i);
     if(!particle)
       continue;
-    
+   
     if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
       hPrimary->Fill(particle->Eta());
       
@@ -260,9 +258,10 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
        fNMCevents.Fill(vertexBin);
        firstTrack = kFALSE;
       }
-    }
     
-    for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
+    }
+    if(pars->GetProcessPrimary()) {
+      for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
       
       AliTrackReference* ref = particle->GetTrackReference(j);
       UShort_t det,sec,strip;
@@ -270,7 +269,7 @@ void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
       if(ref->DetectorId() != AliTrackReference::kFMD)
        continue;
       AliFMDStripIndex::Unpack(ref->UserId(),det,ring,sec,strip);
-      Float_t thisStripTrack = fLastTrackByStrip.operator()(det,ring,sec,strip);
+      Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
       if(particle->Charge() != 0 && i != thisStripTrack ) {
        //Double_t x,y,z;
        
@@ -279,21 +278,19 @@ 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.operator()(det,ring,sec,strip) = (Float_t)i;
+       fLastTrackByStrip(det,ring,sec,strip) = (Float_t)i;
        
        if(strip >0)
-         fLastTrackByStrip.operator()(det,ring,sec,strip-1) = (Float_t)i;
+         fLastTrackByStrip(det,ring,sec,strip-1) = (Float_t)i;
        if(strip < (nstrips - 1))
-         fLastTrackByStrip.operator()(det,ring,sec,strip+1) = (Float_t)i;
+         fLastTrackByStrip(det,ring,sec,strip+1) = (Float_t)i;
        
        
       }
       }
+    }
     
-    
-      }
+  }
   
 }
 //_____________________________________________________________________