// //#include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include // #include #include #include #include #include "AliJEfficiencyScanner.h" #include "AliJTrack.h" #include "AliJMCTrack.h" #include "AliJPhoton.h" #include "AliJEventHeader.h" #include "AliJRunHeader.h" #include #include ClassImp(AliJEfficiencyScanner); //______________________________________________________________________________ AliJEfficiencyScanner::AliJEfficiencyScanner() : TNamed(), fMBTriggMask(0), fTrackList(0), fMCTrackList(0x0), fEventHeader(0x0), fRunHeader(0x0), fhVertexZMC(0x0), fhVertexZTrigg(0x0), fhVertexZTriggVtx(0x0), fhVZRawMC(0x0), fhVZRecMC(0x0), fhVZRecAccMC(0x0), fh2VtxCent(0x0), fhL0Input(0x0), fhTriggerAlice(0x0), fhZVtxMCAll(0x0), fhZVtxMCTrigg(0x0), fhZVtxMCTriggVtx(0x0), fhZVtxRecAll(0x0), fhZVtxRecTrigg(0x0), fhZVtxRecTriggVtx(0x0), fVtxReFunc(0x0), fVtxMCFunc(0x0), fVtxRatioFunc(0x0), fVtxRatioMax(1) { //Default constructor for( int ivtx=0;ivtx~AliJEfficiencyScanner(); new(this) AliJEfficiencyScanner(ap); return *this; } //______________________________________________________________________________ AliJEfficiencyScanner::~AliJEfficiencyScanner() { // destructor } //________________________________________________________________________ void AliJEfficiencyScanner::UserCreateOutputObjects() { //=== create the jcorran outputs objects cout<<"DEBUG Start AliJEfficiencyScanner::UserCreateOutputObjects() "<<"\t"< 50 ) break; if( pt < 3 ) pt+= 0.05; else if( pt < 5 ) pt+= 0.1; else if( pt < 10 ) pt+= 1; else pt+= 1; } cout<<"n Ptbin = "<SetDirectory(gDirectory); int nVtxBin = kNVtxBin; int nCentBin = kNCentBin; if( fRunHeader->IsPP() ) nCentBin = 1; TString name =""; for( int ivtx=0;ivtxSetParameters(1 , -7.14076e-01, 6.27110 ); fVtxMCFunc = new TF1("VtxMCFunc", "gaus",v0,v1); fVtxMCFunc->SetParameters(1, -4.53674e-01, 5.27088e+00 ); fVtxRatioFunc = new TF1("VtxRatioFunc", "VtxReFunc/VtxMCFunc",v0,v1); fVtxRatioMax = fVtxRatioFunc->GetMaximum(); cout << "Add(fAliJRunHeader) in UserCreateObject() ======= " << endl; cout<<"DEBUG END AliJEfficiencyScanner::UserCreateOutputObjects() "<GetTriggerMaskJCorran() & fMBTriggMask; // 1:kMB 8:kINT7 //TODO UInt_t trigAlice = eventHeader->GetTriggerMaskAlice(); /* cout<<"Trigger"<GetTriggerMaskJCorran()&(1<GetTriggerMaskAlice()&(1<GetL0TriggerInputs(); /* bool isL0V0A = l0Input & (1UL<<9); bool isL0V0C = l0Input & (1UL<<10); bool isL0V0AND = l0Input & (1UL<<4); bool isL0V0OR = l0Input & (1UL<<1); bool isL0V0BeamGas = l0Input & (1UL<<2); bool isL0SMB = l0Input & (1UL<<3); bool isL0T0X = l0Input & (1UL<<0); */ for( UInt_t i=0;i<32;i++ ){ if( l0Input & 1UL<Fill(i); if( trigAlice & 1UL<Fill(i); /* if( isL0V0A != isV0A ) cout<<"J_WARN 0 : L0:V0A != Class:V0A "<GetCentrality(); int iCent = int( centrality/(100./nCentBin)); if( iCent< 0 || iCent>20 ) return; //if( centrality < 0 || centrality > 100 ) return; if( fRunHeader->IsPP() ) {iCent = 0; centrality=0;} //== Vertex //==== Reco int ncontributors = eventHeader->GetVtxMult(); double zVtxRec = eventHeader->GetZVertex(); Bool_t goodRecVertex = (ncontributors>0) && (fabs(zVtxRec)<=zVtxCut); int iVtx = 0; //==== MC double zVtxMC = eventHeader->GetZVertexMC(); //==== vtx sampling /* if( zVtxMC > fVtxRatioFunc->GetXmin() && zVtxMC < fVtxRatioFunc->GetXmax() ){ double vtxRatio = fVtxRatioFunc->Eval(zVtxMC)/fVtxRatioMax; double random = gRandom->Uniform(0,1); if( random > vtxRatio ) return; } */ fhVZRawMC->Fill(zVtxMC); fhVertexZMC->Fill(ncontributors,zVtxMC); // for crosscheck MC input events fhZVtxMCAll->Fill(zVtxMC); fhZVtxRecAll->Fill(zVtxRec); if(triggeredEventMB){ fhVertexZTrigg->Fill(ncontributors,zVtxMC); // for crosscheck passing trigger condition fhZVtxMCTrigg->Fill(zVtxMC); fhZVtxRecTrigg->Fill(zVtxRec); if(ncontributors>0){//reconstructed vertex fhVZRecMC->Fill(zVtxRec); // for crosscheck passing trigger condition + reconstruted vtx fhZVtxMCTriggVtx->Fill(zVtxMC); fhZVtxRecTriggVtx->Fill(zVtxRec); } if(goodRecVertex){ fhVertexZTriggVtx->Fill(ncontributors,zVtxMC); fhVZRecAccMC->Fill(zVtxRec); } } fh2VtxCent->Fill( zVtxRec, centrality ); // TODO ? MC or REC? int nRawMultPri = 0; int nGenMultPri[AliJTrackCut::kJNTrackCuts] = {0}; int nGenMultAll[AliJTrackCut::kJNTrackCuts] = {0}; //============================================== // LOOP over MC //============================================== //if( fabs(zVtxMC) > zVtxCut ) return; int nMCTrks = 0; if( fRunHeader->IsMC() ) nMCTrks = GetJMCTracks()->GetEntriesFast(); for( int it=0; it< nMCTrks; it++ ){ AliJMCTrack * track = GetJMCTrack( it );//Always IsPhysicalPrimary if( !track ) continue; if( !track->IsTrue( AliJMCTrack::kPrimary ) ) continue; // TODO need? if( ! track->IsFinal() ) continue; double eta = track->Eta(); double pt = track->Pt(); if( fabs(eta) > etaCut ) continue; if( ! track->IsCharged() ) continue; nRawMultPri++; fhChargedPtMC[iVtx][iCent]->Fill(pt); //ALL charged physical primaries if(triggeredEventMB){//triggered fhChargedPtMCTrigg[iVtx][iCent]->Fill(pt); fh2DChargedPtTrigg[iVtx][iCent]->Fill(pt, eta); if(goodRecVertex){ //triggered+vertex fhChargedPtMCTriggVtx[iVtx][iCent]->Fill(pt); fh2DChargedPtTriggVtx[iVtx][iCent]->Fill(pt, eta); } } } //-------------------------------------------------------------- //---- Reconstracted TRACKS //-------------------------------------------------------------- const int nTrkCut = AliJTrackCut::kJNTrackCuts; if( ! triggeredEventMB ) return; if( ! goodRecVertex ) return; int nTrks = GetJTracks()->GetEntriesFast(); for(Int_t it = 0; it < nTrks; it++) { AliJTrack * track = GetJTrack(it); if( !track ) continue; bool isTriggered = track->GetFilterMap(); if( !isTriggered ) continue; //== init Vars of Track double eta = track->Eta(); double etaTPC = eta; double etaGCG = eta; double ptRec = track->Pt(); double ptTPC = track->PtTPC(); if( fabs(ptTPC) < 1e-2 ) ptTPC=ptRec; else{ TVector3 v(track->GetTPCTrack()); etaTPC = v.Eta(); } double ptGCG = track->PtGCG(); if( fabs(ptGCG) < 1e-2 ) ptGCG=ptRec; else{ TVector3 v(track->GetGCGTrack()); etaGCG = v.Eta(); } double ptMC = -1; int iPrimary = kJFake; //== Skip tracks with out of Eta if( fabs(eta) > etaCut && fabs(etaTPC)>etaCut && fabs(etaGCG)>etaCut) continue; //== Find MC Info for( int imc=0;imcIsTrue( AliJMCTrack::kPrimary ) ) continue; if( mcTrack && (TMath::Abs(track->GetLabel()) == TMath::Abs(mcTrack->GetLabel())) ){ iPrimary = kJPhysicsPrimary; ptMC = mcTrack->Pt(); break; } } //== FILL HIST for( int icut=0;icutFill(ptRec, eta); fh2DChargedPtRec[iVtx][iCent][icut]->Fill(ptMC, eta); fhChargedPtMCRecoCentVtx[iVtx][iCent][icut][iPrimary][kJGlobal]->Fill( ptRec ); if( iPrimary == kJPhysicsPrimary ) nGenMultPri[icut]++; nGenMultAll[icut]++; //fhDCA2VertexXY[iVtx][iCent][icut]->Fill( track->GetDCAtoVertexXY() ); //fhDCA2VertexZ[iVtx][iCent][icut]->Fill( track->GetDCAtoVertexZ() ); } if( fabs(etaTPC) < etaCut ) fhChargedPtMCRecoCentVtx[iVtx][iCent][icut][iPrimary][kJTPCOnly]->Fill( ptTPC ); if( fabs(etaGCG) < etaCut ) fhChargedPtMCRecoCentVtx[iVtx][iCent][icut][iPrimary][kJGCG]->Fill( ptGCG ); if( (icut==0 && fabs(etaTPC) < etaCut) || (icut!=0&&fabs(eta)Fill( ptMC ); } } } for( int icut=0;icutFill( nRawMultPri, nGenMultPri[icut] ); fh2MultGenRawAll[icut]->Fill( nRawMultPri, nGenMultAll[icut] ); } //cout<<"DEBUG END AliJEfficiencyScanner::UserExec"<