X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONTriggerEfficiency.C;h=a8ab4b14f79936b499fcf6d5149e67b75eeac663;hb=409de10f539a62bbdf8dabcac8eb0607f24ec8bd;hp=6af15c358c6f0e2f54d3c230171562624601c5e5;hpb=0d1104bdd6fbeb642941cac2fa655f3e88a8ac74;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONTriggerEfficiency.C b/MUON/MUONTriggerEfficiency.C index 6af15c358c6..a8ab4b14f79 100644 --- a/MUON/MUONTriggerEfficiency.C +++ b/MUON/MUONTriggerEfficiency.C @@ -41,163 +41,140 @@ // MUON includes #include "AliMUON.h" -#include "AliMUONData.h" #include "AliMUONHit.h" #include "AliMUONConstants.h" #include "AliMUONDigit.h" -#include "AliMUONRawCluster.h" #include "AliMUONGlobalTrigger.h" -#include "AliMUONLocalTrigger.h" #include "AliMUONTrack.h" + +#include "AliMUONDataInterface.h" +#include "AliMUONMCDataInterface.h" +#include "AliMUONVHitStore.h" +#include "AliMUONVTriggerStore.h" + #endif // Upsilon(1S) -void MUONTriggerEfficiency (char filename[10]="galice.root"){ - -// output file - char digitdat[100]; - char currentfile[100]; - sprintf(digitdat,"MUONTriggerEfficiency.out"); +void MUONTriggerEfficiency(const char* filenameSim="galice_sim.root", + const char* filenameRec="galice.root", + Bool_t readFromRP = 0) +{ + + // output file + + AliMUONMCDataInterface diSim(filenameSim); + AliMUONDataInterface diRec(filenameRec); + + if (!diSim.IsValid()) + { + cerr << "Cannot access " << filenameSim << endl; + return; + } + + if (!diRec.IsValid()) + { + cerr << "Cannot access " << filenameRec << endl; + return; + } - FILE *fdat=fopen(digitdat,"w"); + FILE* fdat = fopen("MUONTriggerEfficiency.out","w"); + if (!fdat) + { + cerr << "Cannot create output file" << endl; + return; + } - Int_t nevents,coincmuon,muonapt,muonlpt,muonhpt; + Int_t 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 - AliRunLoader * RunLoader = AliRunLoader::Open(filename,"MUONFolder","READ"); - - if (RunLoader ==0x0) { - printf(">>> Error : Error Opening %s file \n",currentfile); - return; - } - - nevents = RunLoader->GetNumberOfEvents(); - - //Loading hits - AliLoader * MUONHits = RunLoader->GetLoader("MUONLoader"); - MUONHits->LoadHits("READ"); - AliMUONData data_hits(MUONHits,"MUON","MUON"); - - //Loading Digits - AliLoader * MUONDigits = RunLoader->GetLoader("MUONLoader"); - MUONDigits->LoadDigits("READ"); - AliMUONData data_digits(MUONDigits,"MUON","MUON"); + Int_t nevents = diSim.NumberOfEvents(); - TClonesArray * globalTrigger; - AliMUONGlobalTrigger * gloTrg; - - - for (Int_t ievent=0; ieventGetEvent(ievent); - - if (ievent%1000==0) printf("\t Event = %d\n",ievent); - -// Hits - data_hits.SetTreeAddress("H"); - - Int_t itrack, ntracks, NbHits[2][4]; - Int_t SumNbHits; - for (Int_t j=0; j<2; j++) { - for (Int_t jj=0; jj<4; jj++) { - NbHits[j][jj]=0; - } + for (Int_t ievent=0; ieventGetEntriesFast(); + + Int_t ntracks = (Int_t) diSim.NumberOfTracks(ievent); + + for ( Int_t itrack=0; itrack(data_hits.Hits()->At(ihit)); - Int_t Nch = mHit->Chamber(); - Int_t hittrack = mHit->Track(); - Float_t IdPart = mHit->Particle(); - - for (Int_t j=0;j<4;j++) { - Int_t kch=11+j; - if (hittrack==1 || hittrack==2) { - if (Nch==kch && IdPart==-13 && NbHits[0][j]==0) NbHits[0][j]++; - if (Nch==kch && IdPart==13 && NbHits[1][j]==0) NbHits[1][j]++; + TIter next(hitStore->CreateIterator()); + + while ( ( mHit = static_cast(next()) ) ) + { + Int_t Nch = mHit->Chamber(); + Int_t hittrack = mHit->Track(); + Float_t IdPart = mHit->Particle(); + + for (Int_t j=0;j<4;j++) + { + Int_t kch=11+j; + if (hittrack==1 || hittrack==2) + { + if (Nch==kch && IdPart==-13 && NbHits[0][j]==0) NbHits[0][j]++; + if (Nch==kch && IdPart==13 && NbHits[1][j]==0) NbHits[1][j]++; } } - } - - data_hits.ResetHits(); - + } } // end track loop -// 3/4 coincidence - SumNbHits=NbHits[0][0]+NbHits[0][1]+NbHits[0][2]+NbHits[0][3]; + // 3/4 coincidence + Int_t SumNbHits=NbHits[0][0]+NbHits[0][1]+NbHits[0][2]+NbHits[0][3]; if (SumNbHits==3 || SumNbHits==4) CoincMuPlus=1; - + SumNbHits=NbHits[1][0]+NbHits[1][1]+NbHits[1][2]+NbHits[1][3]; if (SumNbHits==3 || SumNbHits==4) CoincMuMinus=1; if (CoincMuPlus==1 && CoincMuMinus==1) coincmuon++; - -// Trigger - data_digits.SetTreeAddress("D,GLT"); - data_digits.GetTriggerD(); - - globalTrigger = data_digits.GlobalTrigger(); - - Int_t nglobals = (Int_t) globalTrigger->GetEntriesFast(); // should be 1 + + TString tree("D"); + if ( readFromRP ) tree = "R"; + + AliMUONVTriggerStore* triggerStore = diRec.TriggerStore(ievent,tree.Data()); - for (Int_t iglobal=0; iglobal(globalTrigger->At(iglobal)); - - if (gloTrg->PairUnlikeApt()>=1) muonapt++; - if (gloTrg->PairUnlikeLpt()>=1) muonlpt++; - if (gloTrg->PairUnlikeHpt()>=1) muonhpt++; - - } // end of loop on Global Trigger + AliMUONGlobalTrigger* gloTrg = triggerStore->Global(); - data_digits.ResetTrigger(); + if (gloTrg->PairUnlikeLpt()>=1) muonlpt++; + if (gloTrg->PairUnlikeHpt()>=1) muonhpt++; } // end loop on event - - MUONHits->UnloadHits(); - MUONDigits->UnloadDigits(); - // 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); - // output 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);