]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/global/AliAnalysisTaskVertexESD.cxx
Do not skip events with EventType==0 (MC)
[u/mrichter/AliRoot.git] / PWG1 / global / AliAnalysisTaskVertexESD.cxx
index 4fe827354df746d5e9f17442b95a4758b70ec78a..64be43d34b21639faa85af7714f2384c7ce48e6c 100644 (file)
@@ -70,6 +70,7 @@ fRecoVtxITSTPCHalfEvent(kFALSE),
 fOnlyITSTPCTracks(kFALSE),
 fOnlyITSSATracks(kFALSE),
 fFillNtuple(kFALSE),
+fFillTreeBeamSpot(kFALSE),
 fESD(0), 
 fOutput(0), 
 fNtupleVertexESD(0),
@@ -82,7 +83,8 @@ fhTRKVertexZ(0),
 fhTPCVertexX(0),
 fhTPCVertexY(0),
 fhTPCVertexZ(0),
-fhTrackRefs(0)
+fhTrackRefs(0),
+fTreeBeamSpot(0)
 {
   // Constructor
 
@@ -141,6 +143,23 @@ void AliAnalysisTaskVertexESD::UserCreateOutputObjects()
   fhTrackRefs = new TH2F("fhTrackRefs","Track references; x; y",1000,-4,4,1000,-4,4);
   fOutput->Add(fhTrackRefs);
 
+  fTreeBeamSpot = new TTree("fTreeBeamSpot", "BeamSpotTree");
+  UShort_t triggered, ntrkletsS, ntrksTRKnc;
+  UInt_t run, bx;
+  Float_t cetTimeLHC,xTRKnc, yTRKnc, zTRKnc;
+  fTreeBeamSpot->Branch("run", &run, "run/i");
+  fTreeBeamSpot->Branch("cetTimeLHC", &cetTimeLHC, "cetTimeLHC/F");
+  fTreeBeamSpot->Branch("bx", &bx, "bx/i");
+  fTreeBeamSpot->Branch("triggered", &triggered, "triggered/s");
+  fTreeBeamSpot->Branch("ntrkletsS", &ntrkletsS, "ntrkletsS/s");
+  fTreeBeamSpot->Branch("xTRKnc", &xTRKnc, "xTRKnc/F");
+  fTreeBeamSpot->Branch("yTRKnc", &yTRKnc, "yTRKnc/F");
+  fTreeBeamSpot->Branch("zTRKnc", &zTRKnc, "zTRKnc/F");
+  fTreeBeamSpot->Branch("ntrksTRKnc", &ntrksTRKnc, "ntrksTRKnc/s");
+  fOutput->Add(fTreeBeamSpot);
+
+  PostData(1, fOutput);
+
   return;
 }
 
@@ -156,7 +175,11 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
   }
   AliESDEvent* esdE = (AliESDEvent*) InputEvent();
   
-  if(fCheckEventType && (esdE->GetEventType())!=7) return; 
+  // Select PHYSICS events (type=7, for data) and MC events (type=0)
+  // fCheckEventType is kFALSE if fReadMC is kTRUE, hence check is skipped
+  if(fCheckEventType) {
+    if(esdE->GetEventType()!=7 && esdE->GetEventType()!=0) return; 
+  }
 
 
   TArrayF mcVertex(3);
@@ -240,6 +263,42 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
   // use response of AliPhysicsSelection
   eventTriggered = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
 
+
+  Int_t nInFile = esdE->GetEventNumberInFile();
+
+ const AliMultiplicity *alimult = esdE->GetMultiplicity();
+  Int_t ntrklets=0,spd0cls=0;
+  if(alimult) {
+    ntrklets = alimult->GetNumberOfTracklets();
+
+    for(Int_t l=0;l<alimult->GetNumberOfTracklets();l++){
+      if(alimult->GetDeltaPhi(l)<-9998.) ntrklets--;
+    }
+    spd0cls = alimult->GetNumberOfSingleClusters()+ntrklets;
+  }
+
+
+  UShort_t triggered, ntrkletsS, ntrksTRKnc;
+  UInt_t run, bx;
+  Float_t cetTimeLHC,xTRKnc, yTRKnc, zTRKnc;
+  fTreeBeamSpot->SetBranchAddress("run", &run);
+  fTreeBeamSpot->SetBranchAddress("cetTimeLHC", &cetTimeLHC);
+  fTreeBeamSpot->SetBranchAddress("bx", &bx);
+  fTreeBeamSpot->SetBranchAddress("triggered", &triggered);
+  fTreeBeamSpot->SetBranchAddress("ntrkletsS", &ntrkletsS);
+  fTreeBeamSpot->SetBranchAddress("xTRKnc", &xTRKnc);
+  fTreeBeamSpot->SetBranchAddress("yTRKnc", &yTRKnc);
+  fTreeBeamSpot->SetBranchAddress("zTRKnc", &zTRKnc);
+  fTreeBeamSpot->SetBranchAddress("ntrksTRKnc", &ntrksTRKnc);
+
+
+  Double_t tstamp = esdE->GetTimeStamp();
+  Float_t cetTime =(tstamp-1262304000.)+7200.;
+
+  Float_t cetTime1h =(tstamp-1262304000.)+3600.;
+
+  cetTimeLHC = (Float_t)cetTime1h;
+
   Int_t ntracks = esdE->GetNumberOfTracks();
   Int_t nITS5or6=0,nTPCin=0,nTPCinEta09=0;
   //printf("Tracks # = %d\n",esdE->GetNumberOfTracks());
@@ -253,21 +312,11 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
     }
   }
 
-    
+
   const AliESDVertex *spdv=esdE->GetPrimaryVertexSPD();
   const AliESDVertex *spdvp=esdE->GetPileupVertexSPD(0);
   const AliESDVertex *tpcv=esdE->GetPrimaryVertexTPC();
   const AliESDVertex *trkv=esdE->GetPrimaryVertexTracks();
-
-  const AliMultiplicity *alimult = esdE->GetMultiplicity();
-  Int_t ntrklets=0,spd0cls=0;
-  if(alimult) {
-    ntrklets = alimult->GetNumberOfTracklets();
-    for(Int_t l=0;l<alimult->GetNumberOfTracklets();l++){
-      if(alimult->GetDeltaPhi(l)<-9998.) ntrklets--;
-    }
-    spd0cls = alimult->GetNumberOfSingleClusters()+ntrklets;
-  }
   
   // fill histos
   
@@ -319,17 +368,31 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
   // fill ntuple
   Int_t isize=82;
   Float_t xnt[82]; for(Int_t iii=0;iii<isize;iii++) xnt[iii]=0.;
-  
+
+  Int_t isizeSecNt=9;
+  Float_t secnt[9]; for(Int_t iii=0;iii<isizeSecNt;iii++) secnt[iii]=0.;
+
   Int_t index=0;
+  Int_t indexSecNt=0;
 
   xnt[index++]=(Float_t)esdE->GetRunNumber();
-  xnt[index++]=(Float_t)esdE->GetTimeStamp();
+  secnt[indexSecNt++]=(Float_t)esdE->GetRunNumber();
+  run = (Int_t)esdE->GetRunNumber();
+
+  xnt[index++]=cetTime; //(Float_t)esdE->GetTimeStamp();
+  //secnt[indexSecNt++]=cetTime;
+  secnt[indexSecNt++]=cetTime1h;
+
   xnt[index++]=(Float_t)esdE->GetBunchCrossNumber();
+  secnt[indexSecNt++]=(Float_t)esdE->GetBunchCrossNumber();
+  bx = (Int_t)esdE->GetBunchCrossNumber();
+
   xnt[index++]=(eventTriggered ? 1. : 0.);
+  secnt[indexSecNt++]=(eventTriggered ? 1. : 0.);
+  triggered = (UShort_t)(eventTriggered ? 1 : 0);
 
   xnt[index++]=(Float_t)dNchdy;
-
-
+  
   xnt[index++]=mcVertex[0];
   xnt[index++]=mcVertex[1];
   xnt[index++]=mcVertex[2];
@@ -366,8 +429,12 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
   xnt[index++]=(trktitle.Contains("WithConstraint") ? 1. : 0.);  
 
   xnt[index++]=float(ntrklets);
+  secnt[indexSecNt++]=float(ntrklets);
+  ntrkletsS = (UShort_t)ntrklets;
+
   xnt[index++]=float(ntracks);
   xnt[index++]=float(nITS5or6);
+
   xnt[index++]=float(nTPCin);
   xnt[index++]=float(nTPCinEta09);
 
@@ -416,8 +483,20 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
     xnt[index++]=trkvnc->GetZv();
     xnt[index++]=trkvnc->GetZRes();
     xnt[index++]=trkvnc->GetNContributors();
+  
+    secnt[indexSecNt++]=trkvnc->GetXv();
+    secnt[indexSecNt++]=trkvnc->GetYv();
+    secnt[indexSecNt++]=trkvnc->GetZv();
+    secnt[indexSecNt++]=trkvnc->GetNContributors();
+
+    xTRKnc = (Float_t)trkvnc->GetXv();
+    yTRKnc = (Float_t)trkvnc->GetYv();
+    zTRKnc = (Float_t)trkvnc->GetZv();
+    ntrksTRKnc = (trkvnc->GetNContributors()<0 ? 0 : (UShort_t)trkvnc->GetNContributors());
+
     delete trkvnc; trkvnc=0;
-    
+
+
     AliESDVertex *trkvc = ReconstructPrimaryVertexITSTPC(kTRUE);
     xnt[index++]=trkvc->GetXv();
     xnt[index++]=trkvc->GetXRes();
@@ -459,6 +538,13 @@ void AliAnalysisTaskVertexESD::UserExec(Option_t *)
 
   if(index>isize) printf("AliAnalysisTaskVertexESD: ERROR, index!=isize\n");
   if(fFillNtuple) fNtupleVertexESD->Fill(xnt);
+
+  if(indexSecNt>isizeSecNt) printf("AliAnalysisTaskVertexESD: ERROR, indexSecNt!=isizeSecNt\n");
+
+  // if(indexTree>isizeTree) printf("AliAnalysisTaskVertexESD: ERROR, indexTree!=isizeTree\n");
+  // only every second event (to reduce output size)
+  if(fFillTreeBeamSpot && (nInFile%2 == 0)) fTreeBeamSpot->Fill();
+
   
   // Post the data already here
   PostData(1, fOutput);
@@ -476,9 +562,15 @@ void AliAnalysisTaskVertexESD::Terminate(Option_t *)
     Printf("ERROR: fOutput not available");
     return;
   }
-
+  
+  if (!fNtupleVertexESD){
+    Printf("ERROR: fNtuple not available");
+    return;
+  }
+  
   fNtupleVertexESD = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleVertexESD"));
 
+
   return;
 }
 
@@ -510,6 +602,7 @@ AliESDVertex* AliAnalysisTaskVertexESD::ReconstructPrimaryVertexITSTPC(Bool_t co
   AliVertexerTracks vertexer(evt->GetMagneticField());
   vertexer.SetITSMode(); // defaults
   vertexer.SetMinClusters(4); // default is 5
+  //vertexer.SetITSpureSA();
   Float_t diamondcovxy[3]; evt->GetDiamondCovXY(diamondcovxy);
   Double_t pos[3]={evt->GetDiamondX(),evt->GetDiamondY(),0}; 
   Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};