ROOT logo
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 <<" ---"<<endl;
	
//___________________________________________________
// Book HISTOGRAMS 
      
    	TH2F *hMapV0L   = new TH2F("hMapV0L","V0L",161,-0.8,0.8,161,-0.8,0.8);
    	TH2F *hMapV0R   = new TH2F("hMapV0R","V0R",161,-0.8,0.8,161,-0.8,0.8);	 
	TH1F *hpdgV0    = new TH1F("hpdgV0","pdgV0",1001,-500,500);  
	TH1F *hvertexZ  = new TH1F("hvertexZ","vertex Z",972,-40.,40.); 
	TH1F *hTimC     = new TH1F("hTimC","Time of Flight in V0C",500,0,49);
	TH1F *hTimA     = new TH1F("hTimA","Time of Flight in V0A",500,0,49);
	TH1F *hCell     = new TH1F("hCell","Cell Number",100,0,99);
	TH2F *hCellADC  = new TH2F("hCellADC","ADC vs Cell",100,0,99,1000,0,3999);
 
        TH1F *hMul0     = new TH1F("hMul0 ","Multiplicity in V0",80,0,79);
	TH1F *hMulC0    = new TH1F("hMulC0","Multiplicity in V0C",50,0,49);
        TH1F *hMulA0    = new TH1F("hMulA0","Multiplicity in V0A",50,0,49);
        TH1F *hMulAnd0  = new TH1F("hMulAnd0","Trigger and",50,0,49);
	
//___________________________________________________
	
	AliLoader *ld = rl->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; itrack<ntracks;itrack++) {
    
		v0->ResetHits();
		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 <<endl;
//	     cout <<" multi   = " << fNdigits <<endl;   
        }
  	
	cout <<" nVOA     = " << nVOL <<endl;
	cout <<" nVOC     = " << nVOR <<endl;
	cout <<" nVOAandC = " << nVOLetR <<endl;
	cout <<" nVOAorC  = " << nVOLouR <<endl;
  		
//__________________________________________________
//      Fill root file

        TFile *histoFile = new TFile("Efficiencies.root","RECREATE");
   
    	hMapV0L->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();   
	
}
 V0_efficiencies.C:1
 V0_efficiencies.C:2
 V0_efficiencies.C:3
 V0_efficiencies.C:4
 V0_efficiencies.C:5
 V0_efficiencies.C:6
 V0_efficiencies.C:7
 V0_efficiencies.C:8
 V0_efficiencies.C:9
 V0_efficiencies.C:10
 V0_efficiencies.C:11
 V0_efficiencies.C:12
 V0_efficiencies.C:13
 V0_efficiencies.C:14
 V0_efficiencies.C:15
 V0_efficiencies.C:16
 V0_efficiencies.C:17
 V0_efficiencies.C:18
 V0_efficiencies.C:19
 V0_efficiencies.C:20
 V0_efficiencies.C:21
 V0_efficiencies.C:22
 V0_efficiencies.C:23
 V0_efficiencies.C:24
 V0_efficiencies.C:25
 V0_efficiencies.C:26
 V0_efficiencies.C:27
 V0_efficiencies.C:28
 V0_efficiencies.C:29
 V0_efficiencies.C:30
 V0_efficiencies.C:31
 V0_efficiencies.C:32
 V0_efficiencies.C:33
 V0_efficiencies.C:34
 V0_efficiencies.C:35
 V0_efficiencies.C:36
 V0_efficiencies.C:37
 V0_efficiencies.C:38
 V0_efficiencies.C:39
 V0_efficiencies.C:40
 V0_efficiencies.C:41
 V0_efficiencies.C:42
 V0_efficiencies.C:43
 V0_efficiencies.C:44
 V0_efficiencies.C:45
 V0_efficiencies.C:46
 V0_efficiencies.C:47
 V0_efficiencies.C:48
 V0_efficiencies.C:49
 V0_efficiencies.C:50
 V0_efficiencies.C:51
 V0_efficiencies.C:52
 V0_efficiencies.C:53
 V0_efficiencies.C:54
 V0_efficiencies.C:55
 V0_efficiencies.C:56
 V0_efficiencies.C:57
 V0_efficiencies.C:58
 V0_efficiencies.C:59
 V0_efficiencies.C:60
 V0_efficiencies.C:61
 V0_efficiencies.C:62
 V0_efficiencies.C:63
 V0_efficiencies.C:64
 V0_efficiencies.C:65
 V0_efficiencies.C:66
 V0_efficiencies.C:67
 V0_efficiencies.C:68
 V0_efficiencies.C:69
 V0_efficiencies.C:70
 V0_efficiencies.C:71
 V0_efficiencies.C:72
 V0_efficiencies.C:73
 V0_efficiencies.C:74
 V0_efficiencies.C:75
 V0_efficiencies.C:76
 V0_efficiencies.C:77
 V0_efficiencies.C:78
 V0_efficiencies.C:79
 V0_efficiencies.C:80
 V0_efficiencies.C:81
 V0_efficiencies.C:82
 V0_efficiencies.C:83
 V0_efficiencies.C:84
 V0_efficiencies.C:85
 V0_efficiencies.C:86
 V0_efficiencies.C:87
 V0_efficiencies.C:88
 V0_efficiencies.C:89
 V0_efficiencies.C:90
 V0_efficiencies.C:91
 V0_efficiencies.C:92
 V0_efficiencies.C:93
 V0_efficiencies.C:94
 V0_efficiencies.C:95
 V0_efficiencies.C:96
 V0_efficiencies.C:97
 V0_efficiencies.C:98
 V0_efficiencies.C:99
 V0_efficiencies.C:100
 V0_efficiencies.C:101
 V0_efficiencies.C:102
 V0_efficiencies.C:103
 V0_efficiencies.C:104
 V0_efficiencies.C:105
 V0_efficiencies.C:106
 V0_efficiencies.C:107
 V0_efficiencies.C:108
 V0_efficiencies.C:109
 V0_efficiencies.C:110
 V0_efficiencies.C:111
 V0_efficiencies.C:112
 V0_efficiencies.C:113
 V0_efficiencies.C:114
 V0_efficiencies.C:115
 V0_efficiencies.C:116
 V0_efficiencies.C:117
 V0_efficiencies.C:118
 V0_efficiencies.C:119
 V0_efficiencies.C:120
 V0_efficiencies.C:121
 V0_efficiencies.C:122
 V0_efficiencies.C:123
 V0_efficiencies.C:124
 V0_efficiencies.C:125
 V0_efficiencies.C:126
 V0_efficiencies.C:127
 V0_efficiencies.C:128
 V0_efficiencies.C:129
 V0_efficiencies.C:130
 V0_efficiencies.C:131
 V0_efficiencies.C:132
 V0_efficiencies.C:133
 V0_efficiencies.C:134
 V0_efficiencies.C:135
 V0_efficiencies.C:136
 V0_efficiencies.C:137
 V0_efficiencies.C:138
 V0_efficiencies.C:139
 V0_efficiencies.C:140
 V0_efficiencies.C:141
 V0_efficiencies.C:142
 V0_efficiencies.C:143
 V0_efficiencies.C:144
 V0_efficiencies.C:145
 V0_efficiencies.C:146
 V0_efficiencies.C:147
 V0_efficiencies.C:148
 V0_efficiencies.C:149
 V0_efficiencies.C:150
 V0_efficiencies.C:151
 V0_efficiencies.C:152
 V0_efficiencies.C:153
 V0_efficiencies.C:154
 V0_efficiencies.C:155
 V0_efficiencies.C:156
 V0_efficiencies.C:157
 V0_efficiencies.C:158
 V0_efficiencies.C:159
 V0_efficiencies.C:160
 V0_efficiencies.C:161
 V0_efficiencies.C:162
 V0_efficiencies.C:163
 V0_efficiencies.C:164
 V0_efficiencies.C:165
 V0_efficiencies.C:166
 V0_efficiencies.C:167
 V0_efficiencies.C:168
 V0_efficiencies.C:169
 V0_efficiencies.C:170
 V0_efficiencies.C:171
 V0_efficiencies.C:172
 V0_efficiencies.C:173
 V0_efficiencies.C:174
 V0_efficiencies.C:175
 V0_efficiencies.C:176
 V0_efficiencies.C:177
 V0_efficiencies.C:178
 V0_efficiencies.C:179
 V0_efficiencies.C:180
 V0_efficiencies.C:181
 V0_efficiencies.C:182
 V0_efficiencies.C:183
 V0_efficiencies.C:184
 V0_efficiencies.C:185
 V0_efficiencies.C:186
 V0_efficiencies.C:187
 V0_efficiencies.C:188
 V0_efficiencies.C:189
 V0_efficiencies.C:190
 V0_efficiencies.C:191
 V0_efficiencies.C:192
 V0_efficiencies.C:193
 V0_efficiencies.C:194
 V0_efficiencies.C:195
 V0_efficiencies.C:196
 V0_efficiencies.C:197
 V0_efficiencies.C:198
 V0_efficiencies.C:199
 V0_efficiencies.C:200
 V0_efficiencies.C:201
 V0_efficiencies.C:202
 V0_efficiencies.C:203
 V0_efficiencies.C:204
 V0_efficiencies.C:205
 V0_efficiencies.C:206
 V0_efficiencies.C:207
 V0_efficiencies.C:208
 V0_efficiencies.C:209
 V0_efficiencies.C:210
 V0_efficiencies.C:211
 V0_efficiencies.C:212
 V0_efficiencies.C:213
 V0_efficiencies.C:214
 V0_efficiencies.C:215
 V0_efficiencies.C:216
 V0_efficiencies.C:217
 V0_efficiencies.C:218
 V0_efficiencies.C:219
 V0_efficiencies.C:220
 V0_efficiencies.C:221
 V0_efficiencies.C:222
 V0_efficiencies.C:223
 V0_efficiencies.C:224
 V0_efficiencies.C:225
 V0_efficiencies.C:226
 V0_efficiencies.C:227
 V0_efficiencies.C:228