void V0_efficiencies() { // Caution: time windows and cuts on signals are HARD-coded // they need to be adjusted to the current configuration gROOT->Reset(); rl = AliRunLoader::Open("galice.root"); rl->LoadgAlice(); gAlice = rl->GetAliRun(); Int_t nevent = rl->GetNumberOfEvents(); cout<<" --- Number of events in file = "<< nevent <<" ---"<GetLoader("VZEROLoader"); ld->GetHitsDataLoader()->Load("READ"); rl->LoadHeader(); // to access the particle Stack rl->LoadKinematics("READ"); AliVZERO *v0 = (AliVZERO*)gAlice->GetDetector("VZERO"); bool flagV0L = false; bool flagV0R = false; Float_t timeV0L = 1e12; Float_t timeV0R = 1e12; Int_t fNdigits = 0; Int_t fMulA = 0; Int_t fMulC = 0; Int_t fDigits = 0; Float_t fPhotoCathodeEfficiency = 0.18; Int_t nVOL = 0; Int_t nVOR = 0; Int_t nVOLetR = 0; Int_t nVOLouR = 0; TDatabasePDG * pdgdb = TDatabasePDG::Instance(); Float_t fPMVoltage = 768.0; Float_t fPMGain1 = TMath::Power((fPMVoltage / 112.5) ,7.04277); Float_t fPMGain[64]; Float_t cPM[64]; for(Int_t ii=0; ii<64; ii++){ fPMGain[ii] = gRandom->Gaus(fPMGain1, fPMGain1/5); // 20% uncertainty on the PM gain cPM[ii] = fPhotoCathodeEfficiency * fPMGain[ii];} Float_t kC = 1e-11; Float_t kthau = 2.1*1e-9; Float_t ktheta = 50.0 * kC; Float_t kQe = 1.6e-19; Float_t coef = 200.0; // p-p // Float_t coef = 1.0; // Pb-Pb Int_t map[80]; for(Int_t i=0; i<80; i++) map[i] = 0; Int_t hit[80]; for(Int_t i=0; i<80; i++) hit[i] = 0; for(Int_t event = 0; event < nevent; event++){ Float_t timeV0L = 1e12; Float_t timeV0R = 1e12; rl->GetEvent(event); for(Int_t i=0; i<80; i++) map[i] = 0; for(Int_t i=0; i<80; i++) hit[i] = 0; ld->LoadHits(); v0->SetTreeAddress(); TTree *treeH = ld->TreeH(); Int_t ntracks = treeH->GetEntries(); for (Int_t itrack=0; itrackResetHits(); treeH->GetEvent(itrack); if(v0){ for (AliVZEROhit *vhit=(AliVZEROhit*)v0->FirstHit(itrack); vhit; vhit=(AliVZEROhit*)v0->NextHit()) { // vhit->Dump(); hpdgV0->Fill(vhit->TrackPiD()); hvertexZ->Fill(vhit->Vz()/100.); Float_t dt_scintillator = gRandom->Gaus(0,0.7); Float_t time = dt_scintillator + 1e9*vhit->Tof(); if(vhit->Z() > 0){ if (time < 9 || time > 13) {continue;} //time window V0A : 11 +/- 2 ns flagV0L = true; hTimA->Fill(time); if(time < timeV0L) timeV0L = time; hMapV0L->Fill(vhit->X()/100.,vhit->Y()/100.);} if(vhit->Z() < 0){ if (time < 1 ||time > 5) {continue;} //time window V0C : 3 +/- 2 ns flagV0R = true; hTimC->Fill(time); if(time < timeV0R) timeV0R = time; hMapV0R->Fill(vhit->X()/100.,vhit->Y()/100.);} Int_t nPhot = vhit->Nphot(); Int_t cell = vhit->Cell(); map[cell] += nPhot; hit[cell] ++; } } } Int_t map2[64]; // cell to digits Int_t hit2[64]; // cell to digits Int_t j; Float_t time1[80]; Float_t time2[64]; for (j=0; j<16; j++){ map2[j] = map [j]; hit2[j] = hit [j]; //time2[j]=time1[j]; } for (j=0; j<16; j++){ map2[j+16] = map [2*j+16]+map [2*j+17]; hit2[j+16] = hit [2*j+16]+hit [2*j+17]; //time2[j+16]= TMath::Min(time1 [16 + 2*j], time1 [16 + 2*j + 1]); } for (j=32; j<64; j++){ map2[j] =map[j+16]; hit2[j] =hit[j+16]; //time2[j] =time[j+16]; } fNdigits = 0; fMulC = 0; fMulA = 0; for (Int_t i=0; i<64; i++) { Float_t q1 = Float_t ( map2[i] )* cPM[i] * kQe; Float_t noise = gRandom->Gaus(10.5,3.22); Float_t pmResponse = q1/kC*TMath::Power(ktheta/kthau,1/(1-ktheta/kthau)) + noise*1e-3; map2[i] = Int_t( pmResponse * coef); int test = 0; if(map2[i] > 10) {map2[i] = Int_t( gRandom->Gaus(map2[i], 80));} // charge smearing of MIP/4 -> sigma = MIP/4 = 120 (MIP = 480) if(map2[i] > 240) { // cut at MIP/2 = 240 hCell->Fill(float(i)); hCellADC->Fill(float(i),map2[i]); fNdigits++; if(i<32) fMulC++; if(i>31) fMulA++; } } hMul0->Fill(fNdigits); hMulC0->Fill(fMulC); hMulA0->Fill(fMulA); hMulAnd0->Fill(TMath::Min(fMulA, fMulC)); if(fMulA > 0){ nVOL++;} if(fMulC > 0){ nVOR++;} if(fMulA > 0 && fMulC > 0){ nVOLetR++;} if(fMulA > 0 || fMulC > 0){ nVOLouR++;} if(event%100==0) cout <<" event = " << event <Write(); hMapV0R->Write(); hpdgV0->Write(); hvertexZ->Write(); hTimC->Write(); hTimA->Write(); hCell->Write(); hCellADC->Write(); hMul0->Write(); hMulC0->Write(); hMulA0->Write(); hMulAnd0->Write(); histoFile->Close(); }