adapted for reading Digits or RecPoints (Philippe)
[u/mrichter/AliRoot.git] / MUON / MUONTriggerEfficiency.C
index 6af15c358c6f0e2f54d3c230171562624601c5e5..660fc78bf18cbf5c473cb4bd6a6dda87549d73a3 100644 (file)
@@ -54,7 +54,7 @@
 // Upsilon(1S)
 
 
-void MUONTriggerEfficiency (char filename[10]="galice.root"){
+void MUONTriggerEfficiency (char filename[10]="galice.root",  Bool_t readFromRP = 0){
  
 // output file
   char digitdat[100];
@@ -63,13 +63,11 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
   
   FILE *fdat=fopen(digitdat,"w");          
   
-  Int_t nevents,coincmuon,muonapt,muonlpt,muonhpt;
+  Int_t nevents,coincmuon,muonlpt,muonhpt;
   Int_t CoincMuPlus,CoincMuMinus;
   coincmuon=0;
-  muonapt=0;
   muonlpt=0;  
-  muonhpt=0;         
-  
+  muonhpt=0;
  
 // Initialise AliRoot
    // Creating Run Loader and openning file containing Hits
@@ -82,16 +80,20 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
              
    nevents = RunLoader->GetNumberOfEvents();          
      
-   //Loading hits  
-   AliLoader * MUONHits = RunLoader->GetLoader("MUONLoader");     
-   MUONHits->LoadHits("READ");
-   AliMUONData data_hits(MUONHits,"MUON","MUON");
+   AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader");
+   if (!readFromRP) {
+       cout << " reading from digits \n";
+       MUONLoader->LoadDigits("READ");
+   } else {
+       cout << " reading from RecPoints \n";
+       MUONLoader->LoadRecPoints("READ");
+   }
+   MUONLoader->LoadHits("READ");
    
-    //Loading Digits  
-   AliLoader * MUONDigits = RunLoader->GetLoader("MUONLoader");    
-   MUONDigits->LoadDigits("READ");
-   AliMUONData data_digits(MUONDigits,"MUON","MUON");
-  
+   // Creating MUON data container
+   AliMUONData muondata(MUONLoader,"MUON","MUON");
+
    TClonesArray * globalTrigger;
    AliMUONGlobalTrigger * gloTrg; 
  
@@ -99,14 +101,12 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
    for (Int_t ievent=0; ievent<nevents; ievent++) {    // event loop
        CoincMuPlus=0;
        CoincMuMinus=0;
-       
-       
-     RunLoader->GetEvent(ievent);
+       RunLoader->GetEvent(ievent);
          
      if (ievent%1000==0) printf("\t Event = %d\n",ievent);    
 
 // Hits
-    data_hits.SetTreeAddress("H");    
+     muondata.SetTreeAddress("H");    
         
     Int_t itrack, ntracks, NbHits[2][4];
     Int_t SumNbHits;
@@ -115,15 +115,15 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
       NbHits[j][jj]=0;
      }
     } 
-    ntracks = (Int_t) data_hits.GetNtracks();      
+    ntracks = (Int_t) muondata.GetNtracks();      
     for (itrack=0; itrack<ntracks; itrack++) { // Track loop
-      data_hits.GetTrack(itrack); 
+      muondata.GetTrack(itrack); 
 
       Int_t ihit, nhits;
-      nhits = (Int_t) data_hits.Hits()->GetEntriesFast();   
+      nhits = (Int_t) muondata.Hits()->GetEntriesFast();   
       AliMUONHit* mHit;
       for(ihit=0; ihit<nhits; ihit++) {
-        mHit = static_cast<AliMUONHit*>(data_hits.Hits()->At(ihit));
+        mHit = static_cast<AliMUONHit*>(muondata.Hits()->At(ihit));
         Int_t Nch        = mHit->Chamber(); 
         Int_t hittrack   = mHit->Track();
         Float_t IdPart     = mHit->Particle();
@@ -137,7 +137,7 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
         }
        }
        
-      data_hits.ResetHits();
+      muondata.ResetHits();
       
     } // end track loop     
     
@@ -151,36 +151,43 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
     if (CoincMuPlus==1 && CoincMuMinus==1) coincmuon++;         
            
 // Trigger
-    data_digits.SetTreeAddress("D,GLT"); 
-    data_digits.GetTriggerD();
+    if (!readFromRP) {
+       muondata.SetTreeAddress("D,GLT"); 
+       muondata.GetTriggerD();
+    } else {    
+       muondata.SetTreeAddress("RC,TC"); 
+       muondata.GetTrigger();
+    }
    
-    globalTrigger = data_digits.GlobalTrigger();
+    globalTrigger = muondata.GlobalTrigger();
 
     Int_t nglobals = (Int_t) globalTrigger->GetEntriesFast(); // should be 1
 
     for (Int_t iglobal=0; iglobal<nglobals; iglobal++) { // Global Trigger
       gloTrg = static_cast<AliMUONGlobalTrigger*>(globalTrigger->At(iglobal));
       
-       if (gloTrg->PairUnlikeApt()>=1) muonapt++;                     
        if (gloTrg->PairUnlikeLpt()>=1) muonlpt++;
        if (gloTrg->PairUnlikeHpt()>=1) muonhpt++;
                                
     } // end of loop on Global Trigger         
     
-    data_digits.ResetTrigger();    
+    muondata.ResetTrigger();    
 
   } // end loop on event  
 
-  MUONHits->UnloadHits();
-  MUONDigits->UnloadDigits();  
-  
+   MUONLoader->UnloadHits();
+
+  if (!readFromRP) {
+      MUONLoader->UnloadDigits();  
+  } else {    
+      MUONLoader->UnloadRecPoints();
+  }  
  
   // calculate efficiency with as a ref. at least 3/4 planes fired
-  Float_t efficiencyapt,efficiencylpt,efficiencyhpt;
-  Double_t coincmu,aptmu,lptmu,hptmu;  
+  Float_t efficiencylpt,efficiencyhpt;
+  Double_t coincmu,lptmu,hptmu;  
   Float_t error;  
-  coincmu=Double_t(coincmuon);  
-  aptmu=Double_t(muonapt);
+  coincmu=Double_t(coincmuon);
   lptmu=Double_t(muonlpt); 
   hptmu=Double_t(muonhpt); 
 
@@ -189,15 +196,10 @@ void MUONTriggerEfficiency (char filename[10]="galice.root"){
   fprintf(fdat,"\n"); 
   fprintf(fdat," Number of events = %d \n",nevents);  
   fprintf(fdat," Number of events with 3/4 coinc = %d \n",coincmuon);  
-  fprintf(fdat," Number of dimuons with 3/4 coinc Apt cut = %d \n",muonapt);  
   fprintf(fdat," Nomber of dimuons with 3/4 coinc Lpt cut = %d \n",muonlpt);  
   fprintf(fdat," Number of dimuons with 3/4 coinc Hpt cut = %d \n",muonhpt);  
   fprintf(fdat,"\n");
   
-  efficiencyapt=aptmu/coincmu;
-  error=efficiencyapt*TMath::Sqrt((aptmu+coincmu)/(aptmu*coincmu));
-  fprintf(fdat," Efficiency Apt cut = %4.4f +/- %4.4f\n",efficiencyapt,error);
-               
   efficiencylpt=lptmu/coincmu;  
   error=efficiencylpt*TMath::Sqrt((lptmu+coincmu)/(lptmu*coincmu));  
   fprintf(fdat," Efficiency Lpt cut = %4.4f +/- %4.4f\n",efficiencylpt,error);