X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliTagCreator.cxx;h=db9f2ed082060b3cf33c4746d11674d74ff8ab73;hb=391fa967074988124f3a1eaa56fd680ffce4c00d;hp=f76e34cca2f1afc6e8c81fb12d3676df01d30131;hpb=d1a50cb592e620272f9f7416d21bdc99ea585268;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliTagCreator.cxx b/STEER/AliTagCreator.cxx index f76e34cca2f..db9f2ed0820 100644 --- a/STEER/AliTagCreator.cxx +++ b/STEER/AliTagCreator.cxx @@ -20,6 +20,7 @@ //----------------------------------------------------------------- //ROOT +#include #include #include #include @@ -34,11 +35,8 @@ //AliRoot #include "AliRunTag.h" #include "AliEventTag.h" -#include "AliESD.h" -#include "AliESDVertex.h" #include "AliLog.h" - #include "AliTagCreator.h" @@ -46,23 +44,22 @@ ClassImp(AliTagCreator) //______________________________________________________________________________ -AliTagCreator::AliTagCreator() //local mode + AliTagCreator::AliTagCreator() : + TObject(), + fSE("ALICE::CERN::se"), + fgridpath(""), + fStorage(0) { //==============Default constructor for a AliTagCreator================== - fgridpath = ""; - fSE = ""; - fStorage = 0; } //______________________________________________________________________________ -AliTagCreator::~AliTagCreator() -{ +AliTagCreator::~AliTagCreator() { //================Default destructor for a AliTagCreator======================= } //______________________________________________________________________________ -void AliTagCreator::SetStorage(Int_t storage) -{ +void AliTagCreator::SetStorage(Int_t storage) { // Sets correctly the storage: 0 for local, 1 for GRID fStorage = storage; if(fStorage == 0) @@ -76,60 +73,21 @@ void AliTagCreator::SetStorage(Int_t storage) } } - -//______________________________________________________________________________ -Bool_t AliTagCreator::ReadESDCollection(TGridResult *fresult) -{ - // Reads the entry of the TGridResult and creates the tags - Int_t nEntries = fresult->GetEntries(); - - TString alienUrl; - const char *guid; - const char *md5; - const char *turl; - Long64_t size = -1; - - Int_t counter = 0; - for(Int_t i = 0; i < nEntries; i++) - { - alienUrl = fresult->GetKey(i,"turl"); - guid = fresult->GetKey(i,"guid"); - if(fresult->GetKey(i,"size")) - size = atol (fresult->GetKey(i,"size")); - md5 = fresult->GetKey(i,"md5"); - turl = fresult->GetKey(i,"turl"); - if(md5 && !strlen(guid)) - md5 = 0; - if(guid && !strlen(guid)) - guid = 0; - - TFile *f = TFile::Open(alienUrl,"READ"); - CreateTag(f,guid,md5,turl,size,counter); - f->Close(); - delete f; - counter += 1; - }//grid result loop - - return kTRUE; -} - //__________________________________________________________________________ -Bool_t AliTagCreator::MergeTags() -{ +Bool_t AliTagCreator::MergeTags(const char *type) { //Merges the tags and stores the merged tag file //locally if fStorage=0 or in the grid if fStorage=1 AliInfo(Form("Merging tags.....")); TChain *fgChain = new TChain("T"); + TString tagPattern = type; tagPattern += ".tag.root"; if(fStorage == 0) { - const char * tagPattern = "tag"; // Open the working directory void * dirp = gSystem->OpenDirectory(gSystem->pwd()); const char * name = 0x0; // Add all files matching *pattern* to the chain while((name = gSystem->GetDirEntry(dirp))) { - if (strstr(name,tagPattern)) - fgChain->Add(name); + if (strstr(name,tagPattern)) fgChain->Add(name); }//directory loop AliInfo(Form("Chained tag files: %d",fgChain->GetEntries())); }//local mode @@ -138,8 +96,8 @@ Bool_t AliTagCreator::MergeTags() TString alienLocation = gGrid->Pwd(); alienLocation += fgridpath.Data(); alienLocation += "/"; - - TGridResult *tagresult = gGrid->Query(alienLocation,"*tag.root","",""); + TString queryPattern = "*."; queryPattern += tagPattern; + TGridResult *tagresult = gGrid->Query(alienLocation,queryPattern.Data(),"",""); Int_t nEntries = tagresult->GetEntries(); for(Int_t i = 0; i < nEntries; i++) { TString alienUrl = tagresult->GetKey(i,"turl"); @@ -149,356 +107,76 @@ Bool_t AliTagCreator::MergeTags() }//grid mode AliRunTag *tag = new AliRunTag; - AliEventTag *evTag = new AliEventTag; fgChain->SetBranchAddress("AliTAG",&tag); - - //Defining new tag objects - AliRunTag *newTag = new AliRunTag(); - TTree ttag("T","A Tree with event tags"); - TBranch * btag = ttag.Branch("AliTAG", &newTag); - btag->SetCompressionLevel(9); - for(Int_t iTagFiles = 0; iTagFiles < fgChain->GetEntries(); iTagFiles++) { - fgChain->GetEntry(iTagFiles); - newTag->SetRunId(tag->GetRunId()); - const TClonesArray *tagList = tag->GetEventTags(); - for(Int_t j = 0; j < tagList->GetEntries(); j++) { - evTag = (AliEventTag *) tagList->At(j); - newTag->AddEventTag(*evTag); - } - ttag.Fill(); - newTag->Clear(); - }//tag file loop - + fgChain->GetEntry(0); TString localFileName = "Run"; localFileName += tag->GetRunId(); - localFileName += ".Merged"; localFileName += ".ESD.tag.root"; + localFileName += ".Merged."; localFileName += tagPattern.Data(); - TString alienFileName = "/alien"; - alienFileName += gGrid->Pwd(); - alienFileName += fgridpath.Data(); - alienFileName += "/"; - alienFileName += localFileName; - alienFileName += "?se="; - alienFileName += fSE.Data(); - - TString filename = 0x0; + TString filename; if(fStorage == 0) { filename = localFileName.Data(); AliInfo(Form("Writing merged tags to local file: %s",filename.Data())); } - if(fStorage == 1) { + else if(fStorage == 1) { + TString alienFileName = "/alien"; + alienFileName += gGrid->Pwd(); + alienFileName += fgridpath.Data(); + alienFileName += "/"; + alienFileName += localFileName; + alienFileName += "?se="; + alienFileName += fSE.Data(); filename = alienFileName.Data(); AliInfo(Form("Writing merged tags to grid file: %s",filename.Data())); } - - TFile* ftag = TFile::Open(filename, "recreate"); - ftag->cd(); - ttag.Write(); - ftag->Close(); - delete tag; - delete evTag; - delete newTag; + fgChain->Merge(filename); + gSystem->Exec("rm Run*.Event*"); return kTRUE; } -//_____________________________________________________________________________ -void AliTagCreator::CreateTag(TFile* file, const char *guid, const char *md5, const char *turl, Long64_t size, Int_t Counter) -{ - ///////////// - //muon code// - //////////// - Double_t fMUONMASS = 0.105658369; - //Variables - Double_t fX,fY,fZ ; - Double_t fThetaX, fThetaY, fPyz, fChisquare; - Double_t fPxRec, fPyRec, fPzRec, fEnergy; - Int_t fCharge; - TLorentzVector fEPvector; - - Float_t fZVertexCut = 10.0; - Float_t fRhoVertexCut = 2.0; - - Float_t fLowPtCut = 1.0; - Float_t fHighPtCut = 3.0; - Float_t fVeryHighPtCut = 10.0; - //////////// - - Double_t partFrac[5] = {0.01, 0.01, 0.85, 0.10, 0.05}; - - // Creates the tags for all the events in a given ESD file - Int_t ntrack; - Int_t nProtons, nKaons, nPions, nMuons, nElectrons; - Int_t nPos, nNeg, nNeutr; - Int_t nK0s, nNeutrons, nPi0s, nGamas; - Int_t nCh1GeV, nCh3GeV, nCh10GeV; - Int_t nMu1GeV, nMu3GeV, nMu10GeV; - Int_t nEl1GeV, nEl3GeV, nEl10GeV; - Float_t maxPt = .0, meanPt = .0, totalP = .0; - Int_t fVertexflag; - TString fVertexName; +//__________________________________________________________________________ +Bool_t AliTagCreator::MergeTags(const char *type, TGridResult *result) { + //Merges the tags that are listed in the TGridResult + AliInfo(Form("Merging tags.....")); + TChain *fgChain = new TChain("T"); + TString tagPattern = "."; tagPattern += type; tagPattern += ".tag.root"; - AliRunTag *tag = new AliRunTag(); - AliEventTag *evTag = new AliEventTag(); - TTree ttag("T","A Tree with event tags"); - TBranch * btag = ttag.Branch("AliTAG", &tag); - btag->SetCompressionLevel(9); - - AliInfo(Form("Creating the tags.......")); - - Int_t firstEvent = 0,lastEvent = 0; - TTree *t = (TTree*) file->Get("esdTree"); - TBranch * b = t->GetBranch("ESD"); - AliESD *esd = 0; - b->SetAddress(&esd); - - tag->SetRunId(esd->GetRunNumber()); - - Int_t iNumberOfEvents = b->GetEntries(); - for (Int_t iEventNumber = 0; iEventNumber < iNumberOfEvents; iEventNumber++) { - ntrack = 0; - nPos = 0; - nNeg = 0; - nNeutr =0; - nK0s = 0; - nNeutrons = 0; - nPi0s = 0; - nGamas = 0; - nProtons = 0; - nKaons = 0; - nPions = 0; - nMuons = 0; - nElectrons = 0; - nCh1GeV = 0; - nCh3GeV = 0; - nCh10GeV = 0; - nMu1GeV = 0; - nMu3GeV = 0; - nMu10GeV = 0; - nEl1GeV = 0; - nEl3GeV = 0; - nEl10GeV = 0; - maxPt = .0; - meanPt = .0; - totalP = .0; - fVertexflag = 1; - - b->GetEntry(iEventNumber); - const AliESDVertex * vertexIn = esd->GetVertex(); - fVertexName = vertexIn->GetName(); - if(fVertexName == "default") fVertexflag = 0; + Int_t nEntries = result->GetEntries(); - for (Int_t iTrackNumber = 0; iTrackNumber < esd->GetNumberOfTracks(); iTrackNumber++) { - AliESDtrack * esdTrack = esd->GetTrack(iTrackNumber); - UInt_t status = esdTrack->GetStatus(); - - //select only tracks with ITS refit - if ((status&AliESDtrack::kITSrefit)==0) continue; - //select only tracks with TPC refit - if ((status&AliESDtrack::kTPCrefit)==0) continue; - - //select only tracks with the "combined PID" - if ((status&AliESDtrack::kESDpid)==0) continue; - Double_t p[3]; - esdTrack->GetPxPyPz(p); - Double_t momentum = sqrt(pow(p[0],2) + pow(p[1],2) + pow(p[2],2)); - Double_t fPt = sqrt(pow(p[0],2) + pow(p[1],2)); - totalP += momentum; - meanPt += fPt; - if(fPt > maxPt) maxPt = fPt; - - if(esdTrack->GetSign() > 0) { - nPos++; - if(fPt > fLowPtCut) nCh1GeV++; - if(fPt > fHighPtCut) nCh3GeV++; - if(fPt > fVeryHighPtCut) nCh10GeV++; - } - if(esdTrack->GetSign() < 0) { - nNeg++; - if(fPt > fLowPtCut) nCh1GeV++; - if(fPt > fHighPtCut) nCh3GeV++; - if(fPt > fVeryHighPtCut) nCh10GeV++; - } - if(esdTrack->GetSign() == 0) nNeutr++; - - //PID - Double_t prob[5]; - esdTrack->GetESDpid(prob); - - Double_t rcc = 0.0; - for(Int_t i = 0; i < AliPID::kSPECIES; i++) rcc += prob[i]*partFrac[i]; - if(rcc == 0.0) continue; - //Bayes' formula - Double_t w[5]; - for(Int_t i = 0; i < AliPID::kSPECIES; i++) w[i] = prob[i]*partFrac[i]/rcc; - - //protons - if ((w[4]>w[3])&&(w[4]>w[2])&&(w[4]>w[1])&&(w[4]>w[0])) nProtons++; - //kaons - if ((w[3]>w[4])&&(w[3]>w[2])&&(w[3]>w[1])&&(w[3]>w[0])) nKaons++; - //pions - if ((w[2]>w[4])&&(w[2]>w[3])&&(w[2]>w[1])&&(w[2]>w[0])) nPions++; - //electrons - if ((w[0]>w[4])&&(w[0]>w[3])&&(w[0]>w[2])&&(w[0]>w[1])) { - nElectrons++; - if(fPt > fLowPtCut) nEl1GeV++; - if(fPt > fHighPtCut) nEl3GeV++; - if(fPt > fVeryHighPtCut) nEl10GeV++; - } - ntrack++; - }//esd track loop - - ///////////// - //muon code// - //////////// - Int_t nMuonTracks = esd->GetNumberOfMuonTracks(); - // loop over all reconstructed tracks (also first track of combination) - for (Int_t iTrack = 0; iTrack < nMuonTracks; iTrack++) { - AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack); - if (muonTrack == 0x0) continue; - - // Coordinates at vertex - fZ = muonTrack->GetZ(); - fY = muonTrack->GetBendingCoor(); - fX = muonTrack->GetNonBendingCoor(); - - fThetaX = muonTrack->GetThetaX(); - fThetaY = muonTrack->GetThetaY(); - - fPyz = 1./TMath::Abs(muonTrack->GetInverseBendingMomentum()); - fPzRec = - fPyz / TMath::Sqrt(1.0 + TMath::Tan(fThetaY)*TMath::Tan(fThetaY)); - fPxRec = fPzRec * TMath::Tan(fThetaX); - fPyRec = fPzRec * TMath::Tan(fThetaY); - fCharge = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum())); - - //ChiSquare of the track if needed - fChisquare = muonTrack->GetChi2()/(2.0 * muonTrack->GetNHit() - 5); - fEnergy = TMath::Sqrt(fMUONMASS * fMUONMASS + fPxRec * fPxRec + fPyRec * fPyRec + fPzRec * fPzRec); - fEPvector.SetPxPyPzE(fPxRec, fPyRec, fPzRec, fEnergy); - - // total number of muons inside a vertex cut - if((TMath::Abs(fZ) fLowPtCut) { - nMu1GeV++; - if(fEPvector.Pt() > fHighPtCut) { - nMu3GeV++; - if (fEPvector.Pt() > fVeryHighPtCut) { - nMu10GeV++; - } - } - } - } - }//muon track loop - - // Fill the event tags - if(ntrack != 0) - meanPt = meanPt/ntrack; - - evTag->SetEventId(iEventNumber+1); - evTag->SetGUID(guid); - evTag->SetMD5(md5); - evTag->SetTURL(turl); - evTag->SetSize(size); - evTag->SetVertexX(vertexIn->GetXv()); - evTag->SetVertexY(vertexIn->GetYv()); - evTag->SetVertexZ(vertexIn->GetZv()); - evTag->SetVertexZError(vertexIn->GetZRes()); - evTag->SetVertexFlag(fVertexflag); - - evTag->SetT0VertexZ(esd->GetT0zVertex()); - - evTag->SetTrigger(esd->GetTrigger()); - - evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy()); - evTag->SetZDCProton1Energy(esd->GetZDCP1Energy()); - evTag->SetZDCEMEnergy(esd->GetZDCEMEnergy()); - evTag->SetZDCNeutron1Energy(esd->GetZDCN2Energy()); - evTag->SetZDCProton1Energy(esd->GetZDCP2Energy()); - evTag->SetNumOfParticipants(esd->GetZDCParticipants()); - - - evTag->SetNumOfTracks(esd->GetNumberOfTracks()); - evTag->SetNumOfPosTracks(nPos); - evTag->SetNumOfNegTracks(nNeg); - evTag->SetNumOfNeutrTracks(nNeutr); - - evTag->SetNumOfV0s(esd->GetNumberOfV0s()); - evTag->SetNumOfCascades(esd->GetNumberOfCascades()); - evTag->SetNumOfKinks(esd->GetNumberOfKinks()); - evTag->SetNumOfPMDTracks(esd->GetNumberOfPmdTracks()); - - evTag->SetNumOfProtons(nProtons); - evTag->SetNumOfKaons(nKaons); - evTag->SetNumOfPions(nPions); - evTag->SetNumOfMuons(nMuons); - evTag->SetNumOfElectrons(nElectrons); - evTag->SetNumOfPhotons(nGamas); - evTag->SetNumOfPi0s(nPi0s); - evTag->SetNumOfNeutrons(nNeutrons); - evTag->SetNumOfKaon0s(nK0s); - - evTag->SetNumOfChargedAbove1GeV(nCh1GeV); - evTag->SetNumOfChargedAbove3GeV(nCh3GeV); - evTag->SetNumOfChargedAbove10GeV(nCh10GeV); - evTag->SetNumOfMuonsAbove1GeV(nMu1GeV); - evTag->SetNumOfMuonsAbove3GeV(nMu3GeV); - evTag->SetNumOfMuonsAbove10GeV(nMu10GeV); - evTag->SetNumOfElectronsAbove1GeV(nEl1GeV); - evTag->SetNumOfElectronsAbove3GeV(nEl3GeV); - evTag->SetNumOfElectronsAbove10GeV(nEl10GeV); - - evTag->SetNumOfPHOSClusters(esd->GetNumberOfPHOSClusters()); - evTag->SetNumOfEMCALClusters(esd->GetNumberOfEMCALClusters()); - - evTag->SetTotalMomentum(totalP); - evTag->SetMeanPt(meanPt); - evTag->SetMaxPt(maxPt); + TString alienUrl; + for(Int_t i = 0; i < nEntries; i++) { + alienUrl = result->GetKey(i,"turl"); + fgChain->Add(alienUrl); + } + AliInfo(Form("Chained tag files: %d",fgChain->GetEntries())); + AliRunTag *tag = new AliRunTag; + fgChain->SetBranchAddress("AliTAG",&tag); + fgChain->GetEntry(0); - tag->AddEventTag(*evTag); - }//event loop - lastEvent = iNumberOfEvents; - - t->Delete(""); - - ttag.Fill(); - tag->Clear(); - TString localFileName = "Run"; localFileName += tag->GetRunId(); - localFileName += ".Event"; localFileName += firstEvent; localFileName += "_"; localFileName += lastEvent; localFileName += "."; localFileName += Counter; - localFileName += ".ESD.tag.root"; - - TString alienLocation = "/alien"; - alienLocation += gGrid->Pwd(); - alienLocation += fgridpath.Data(); - alienLocation += "/"; - alienLocation += localFileName; - alienLocation += "?se="; - alienLocation += fSE.Data(); - - TString fileName; + localFileName += ".Merged"; localFileName += tagPattern.Data(); + + TString filename; - if(fStorage == 0) - { - fileName = localFileName.Data(); - AliInfo(Form("Writing tags to local file: %s",fileName.Data())); - } - if(fStorage == 1) - { - fileName = alienLocation.Data(); - AliInfo(Form("Writing tags to grid file: %s",fileName.Data())); - } - - TFile* ftag = TFile::Open(fileName, "recreate"); - ftag->cd(); - ttag.Write(); - ftag->Close(); - - delete ftag; - delete esd; + if(fStorage == 0) { + filename = localFileName.Data(); + AliInfo(Form("Writing merged tags to local file: %s",filename.Data())); + } + else if(fStorage == 1) { + TString alienFileName = "/alien"; + alienFileName += gGrid->Pwd(); + alienFileName += fgridpath.Data(); + alienFileName += "/"; + alienFileName += localFileName; + alienFileName += "?se="; + alienFileName += fSE.Data(); + filename = alienFileName.Data(); + AliInfo(Form("Writing merged tags to grid file: %s",filename.Data())); + } + + fgChain->Merge(filename); - delete tag; - delete evTag; + return kTRUE; } -