fOnlyITSTPCTracks(kFALSE),
fOnlyITSSATracks(kFALSE),
fFillNtuple(kFALSE),
+fFillTreeBeamSpot(kFALSE),
fESD(0),
fOutput(0),
fNtupleVertexESD(0),
fhTPCVertexX(0),
fhTPCVertexY(0),
fhTPCVertexZ(0),
-fhTrackRefs(0)
+fhTrackRefs(0),
+fTreeBeamSpot(0)
{
// Constructor
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;
}
}
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);
// 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());
}
}
-
+
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
// 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];
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);
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();
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);
Printf("ERROR: fOutput not available");
return;
}
-
+
+ if (!fNtupleVertexESD){
+ Printf("ERROR: fNtuple not available");
+ return;
+ }
+
fNtupleVertexESD = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleVertexESD"));
+
return;
}
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.};