]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/analysis/AliFMDAnalysisTaskBackgroundCorrection.cxx
added storage of 1D hits histograms for diagnostics
[u/mrichter/AliRoot.git] / FMD / analysis / AliFMDAnalysisTaskBackgroundCorrection.cxx
index 388dac806eb3ff3a44217b744811d0074d223f9a..b9fb17632de1d6dd4366a2f8619f49ff14595ea7 100644 (file)
 #include "AliAODHandler.h"
 #include "AliMCEventHandler.h"
 #include "AliStack.h"
+#include "AliLog.h"
 #include "AliESDVertex.h"
 #include "TMath.h"
 #include "AliFMDAnaParameters.h"
-#include "AliFMDGeometry.h"
+//#include "AliFMDGeometry.h"
 
 ClassImp(AliFMDAnalysisTaskBackgroundCorrection)
 
 
 AliFMDAnalysisTaskBackgroundCorrection::AliFMDAnalysisTaskBackgroundCorrection()
 : fDebug(0),
-  fChain(0x0),
   fOutputList(0),
-  fArray(0),
-  fInputArray(0),
+  fInputList(0),
+  fHitList(0),
   fVertexString(0x0),
-  fNevents(0)
+  fNevents(),
+  fStandalone(kTRUE),
+  fOutputVertexString(0)
 {
   // Default constructor
   DefineInput (0, TList::Class());
-  DefineOutput(0,TList::Class());
+  DefineOutput(0, TList::Class());
+
 }
 //_____________________________________________________________________
-AliFMDAnalysisTaskBackgroundCorrection::AliFMDAnalysisTaskBackgroundCorrection(const char* name):
+AliFMDAnalysisTaskBackgroundCorrection::AliFMDAnalysisTaskBackgroundCorrection(const char* name, Bool_t SE):
     AliAnalysisTask(name, "Density"),
     fDebug(0),
-    fChain(0x0),
     fOutputList(0),
-    fArray(0),
-    fInputArray(0),
+    fInputList(0),
+    fHitList(0),
     fVertexString(0x0),
-    fNevents(0)
+    fNevents(),
+    fStandalone(kTRUE),
+    fOutputVertexString(0)
 {
-  DefineInput (0, TList::Class());
-  DefineOutput(0, TList::Class());
+  fStandalone = SE;
+  if(fStandalone) {
+    DefineInput (0, TList::Class());
+    DefineOutput(0, TList::Class());
+  }
 }
 //_____________________________________________________________________
 void AliFMDAnalysisTaskBackgroundCorrection::CreateOutputObjects()
 {
   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
-  fOutputList = new TList();
   
-  fArray     = new TObjArray();
-  fArray->SetName("FMD");
-  fArray->SetOwner();
+  if(!fOutputList)
+    fOutputList = new TList();
+  fOutputList->SetName("BackgroundCorrectedPerEvent");
+  if(!fHitList)
+    fHitList = new TList();
+  fHitList->SetName("HitsList");
+  
+  //if(fStandalone) {
+  fOutputVertexString = new TObjString();
+  // }
+  fOutputList->Add(fOutputVertexString);
+  
   
-  TH2F* hMult = 0;
   
+  TH2F* hMult = 0;
+  TH2F* hHits = 0;
   Int_t nVtxbins = pars->GetNvtxBins();
   
   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("mult_FMD%d%c_vtxbin%d",det,ringChar,i),Form("mult_FMD%d%c_vtxbin%d",det,ringChar,i),
@@ -86,76 +96,115 @@ void AliFMDAnalysisTaskBackgroundCorrection::CreateOutputObjects()
                              hBg->GetXaxis()->GetXmax(),
                              nSec, 0, 2*TMath::Pi());
            hMult->Sumw2();
-           vtxArray->AddAtAndExpand(hMult,i);
+           fOutputList->Add(hMult);
+           hHits  = new TH2F(Form("hits_FMD%d%c_vtxbin%d",det,ringChar,i),Form("hits_FMD%d%c_vtxbin%d",det,ringChar,i),
+                             hBg->GetNbinsX(),
+                             hBg->GetXaxis()->GetXmin(),
+                             hBg->GetXaxis()->GetXmax(),
+                             nSec, 0, 2*TMath::Pi());
+           
+           hHits->Sumw2();
+           fHitList->Add(hHits);
+           fOutputList->Add(hHits);
            
          }
        } 
     }
-  fNevents = new TArrayI(nVtxbins);
-  fOutputList->Add(fArray);
-   
+  
+  
   
 }
 //_____________________________________________________________________
 void AliFMDAnalysisTaskBackgroundCorrection::ConnectInputData(Option_t */*option*/)
 {
-
-  TList* list = (TList*)GetInputData(0);
-  fInputArray = (TObjArray*)list->At(0);
-  fVertexString = (TObjString*)list->At(1);
+  if(fStandalone) {
+    fInputList   = (TList*)GetInputData(0);
+    
+  }
 }
 //_____________________________________________________________________
 void AliFMDAnalysisTaskBackgroundCorrection::Exec(Option_t */*option*/)
 {
   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
   
+  fVertexString = (TObjString*)fInputList->At(0);
+   
   Int_t vtxbin   = fVertexString->GetString().Atoi();
-  fNevents->operator[](vtxbin)++;
+  fOutputVertexString->SetString(Form("%d",vtxbin));
   
+  fNevents.Fill(vtxbin);
+  //Reset everything
   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* hMult      = (TH2F*)vtxInputArray->At(vtxbin);
-      TH2F* hBg        = pars->GetBackgroundCorrection(det, ringChar, vtxbin);
+      TH2F* hMult = (TH2F*)fOutputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
+      hMult->Reset();
+    }
+    
+  }
+  
+  
+  
+  for(UShort_t det=1;det<=3;det++) {
+   
+    Int_t nRings = (det==1 ? 1 : 2);
+    for (UShort_t ir = 0; ir < nRings; ir++) {
+      Char_t ringChar = (ir == 0 ? 'I' : 'O');
+   
+      TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
+    
+      TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
+      TH2F* hHits      = (TH2F*)fOutputList->FindObject(Form("hits_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
       
-      TH2F* hTmp       = (TH2F*)hMult->Clone("hMult_from_event");
-      hTmp->Sumw2();
-      hTmp->Divide(hTmp,hBg,1,1,"B");
+      if(pars->GetProcessHits())
+        hHits->Add(hMultInput);
       
-      hMultTotal->Add(hTmp);
+      TH2F* hBg        = pars->GetBackgroundCorrection(det, ringChar, vtxbin);
       
+      hMultTotal->Add(hMultInput);
       
+      hMultTotal->Divide(hBg);//,"B");
+      /*for(Int_t i = 1; i<=hTmp->GetNbinsX();i++) {
+       for(Int_t j = 1; j<=hTmp->GetNbinsY();j++) {
+         Float_t mult = hTmp->GetBinContent(i,j);
+         if(mult == 0) continue;
+         Float_t correction = hBg->GetBinContent(i,j);
+         
+         Float_t multcor = mult;
+         if(correction != 0)
+           multcor = multcor/correction;
+         else
+           std::cout<<"Warning! No correction for bin "<<i<<" , "<<j<<std::endl;
+         
+         hTmp->SetBinContent(i,j,multcor);
+       }
+       }*/
     }
   }
-  
-  PostData(0, fOutputList); 
+  if(fStandalone) {
+    PostData(0, fOutputList); 
+  }
   
 }
 //_____________________________________________________________________
 void AliFMDAnalysisTaskBackgroundCorrection::Terminate(Option_t */*option*/) {
-  
   AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
   
   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);
-       hMultTotal->Scale(1/(Float_t)fNevents->At(i));
+       TH2F* hHits      = (TH2F*)fOutputList->FindObject(Form("hits_FMD%d%c_vtxbin%d",det,ringChar,i));
+       TH1D* hHitsproj  = hHits->ProjectionX(Form("hits_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hHits->GetNbinsY());
+       fHitList->Add(hHitsproj);
+       
       }
     }
   }
-
 }
 //_____________________________________________________________________
 //