Bool_t gIsAnalysisLoaded = kFALSE ; //______________________________________________________________________ Bool_t LoadLib( const char* pararchivename) { // Loads the AliRoot required libraries from a tar file Bool_t rv = kTRUE ; char cdir[1024] ; sprintf(cdir, "%s", gSystem->WorkingDirectory() ) ; // Setup par File if (pararchivename) { char parpar[80] ; sprintf(parpar, "%s.par", pararchivename) ; if ( gSystem->AccessPathName(parpar) ) { gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ; char processline[1024]; sprintf(processline, ".! make %s", parpar) ; cout << processline << endl ; gROOT->ProcessLine(processline) ; gSystem->ChangeDirectory(cdir) ; sprintf(processline, ".! mv /tmp/%s .", parpar) ; gROOT->ProcessLine(processline) ; sprintf(processline,".! tar xvzf %s",parpar); gROOT->ProcessLine(processline); } gSystem->ChangeDirectory(pararchivename); // check for BUILD.sh and execute if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) { printf("*** Building PAR archive %s ***\n", pararchivename); if (gSystem->Exec("PROOF-INF/BUILD.sh")) { AliError(Form("Cannot Build the PAR Archive %s! - Abort!", pararchivename) ); return kFALSE ; } } // check for SETUP.C and execute if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) { printf("*** Setup PAR archive %s ***\n", pararchivename); gROOT->Macro("PROOF-INF/SETUP.C"); } } if ( strstr(pararchivename, "ESD") ) { //gSystem->Load("libVMC.so"); //gSystem->Load("libRAliEn.so"); gSystem->Load("libESD.so") ; //gSystem->Load("libProof.so") ; } if ( strstr(pararchivename, "AnalysisCheck") ) { gSystem->Load("libSpectrum.so"); } printf("lib%s done\n", pararchivename); gSystem->ChangeDirectory(cdir); gIsAnalysisLoaded = kTRUE ; return rv ; } //______________________________________________________________________ void ana(const Int_t kEvent=100) { if (! gIsAnalysisLoaded ) { LoadLib("ESD") ; LoadLib("AOD") ; LoadLib("ANALYSIS") ; LoadLib("AnalysisCheck") ; } // create the analysis goodies object AliAnalysisGoodies * ag = new AliAnalysisGoodies() ; // definition of analysis tasks AliPHOSQATask * phos = new AliPHOSQATask("PHOS") ; AliAnalysisDataContainer * phosIn = ag->ConnectInput(phos, TChain::Class(), 0) ; ag->ConnectOuput(phos, TObjArray::Class(), 0) ; AliEMCALQATask *emcal = new AliEMCALQATask("EMCal") ; ag->ConnectInput(emcal, phosIn, 0) ; ag->ConnectOuput(emcal, TObjArray::Class(), 0) ; AliPMDQATask * pmd = new AliPMDQATask("PMD") ; ag->ConnectInput(pmd, phosIn, 0) ; ag->ConnectOuput(pmd, TObjArray::Class(), 0) ; AliAnalysisTaskPt * pt = new AliAnalysisTaskPt("Pt") ; ag->ConnectInput(pt, phosIn, 0) ; ag->ConnectOuput(pt, TObjArray::Class(), 0) ; AliHMPIDQATask * hmpid= new AliHMPIDQATask("HMPID") ; ag->ConnectInput(hmpid, phosIn, 0) ; ag->ConnectOuput(hmpid, TObjArray::Class(), 0) ; AliT0QATask * t0 = new AliT0QATask("T0") ; ag->ConnectInput(t0, phosIn, 0) ; ag->ConnectOuput(t0, TObjArray::Class(), 0) ; AliMUONQATask * muon = new AliMUONQATask("MUON") ; ag->ConnectInput(muon, phosIn, 0) ; ag->ConnectOuput(muon, TObjArray::Class(), 0) ; AliTRDQATask * trd = new AliTRDQATask("TRD") ; ag->ConnectInput(trd, phosIn, 0) ; ag->ConnectOuput(trd, TObjArray::Class(), 0) ; AliTOFQATask * tof = new AliTOFQATask("TOF") ; ag->ConnectInput(tof, phosIn, 0) ; ag->ConnectOuput(tof, TObjArray::Class(), 0) ; AliVZEROQATask * vzero = new AliVZEROQATask("VZERO") ; ag->ConnectInput(vzero, phosIn, 0) ; ag->ConnectOuput(vzero, TObjArray::Class(), 0) ; AliFMDQATask * fmd = new AliFMDQATask("FMD") ; ag->ConnectInput(fmd, phosIn, 0) ; ag->ConnectOuput(fmd, TObjArray::Class(), 0) ; // get the data to analyze // definition of Tag cuts const char * runCuts = 0x0 ; const char * evtCuts = 0x0 ; const char * lhcCuts = 0x0 ; const char * detCuts = 0x0 ; //"fEventTag.fNPHOSClustersMin == 1 && fEventTag.fNEMCALClustersMin == 1" ; TString input = gSystem->Getenv("ANA_INPUT") ; if ( input != "") { char argument[1024] ; if ( input.Contains("tag?") ) { //create the ESD collection from the tag collection input.ReplaceAll("tag?", "") ; const char * collESD = "esdCollection.xml" ; ag->MakeEsdCollectionFromTagCollection(runCuts, lhcCuts, detCuts, evtCuts, input.Data(), collESD) ; sprintf(argument, "esd?%s", collESD) ; } else if ( input.Contains("esd?") ) sprintf(argument, "%s", input.Data()) ; ag->Process(argument) ; } else { TChain* analysisChain = new TChain("esdTree") ; // input = "alien:///alice/cern.ch/user/a/aliprod/prod2006_2/output_pp/105/411/AliESDs.root" ; // analysisChain->AddFile(input); input = "AliESDs.root" ; const char * kInDir = gSystem->Getenv("OUTDIR") ; if ( kInDir ) { if ( ! gSystem->cd(kInDir) ) { printf("%s does not exist\n", kInDir) ; return ; } Int_t event, skipped=0 ; char file[120] ; for (event = 0 ; event < kEvent ; event++) { sprintf(file, "%s/%d/AliESDs.root", kInDir,event) ; TFile * fESD = 0 ; if ( fESD = TFile::Open(file)) if ( fESD->Get("esdTree") ) { printf("++++ Adding %s\n", file) ; analysisChain->AddFile(file); } else { printf("---- Skipping %s\n", file) ; skipped++ ; } } printf("number of entries # %lld, skipped %d\n", analysisChain->GetEntries(), skipped*100) ; } else analysisChain->AddFile(input); ag->Process(analysisChain) ; } return ; } //______________________________________________________________________ void Merge(const char * xml, const char * sub, const char * out) { if (! gIsAnalysisLoaded ) LoadLib("ESD") ; AliAnalysisGoodies * ag = new AliAnalysisGoodies() ; ag->Merge(xml, sub, out) ; }