X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGPP%2FAliAnalysisTaskFilteredTree.cxx;h=5bcb187a2721d61e7b16724fe71e61028a9f5898;hb=31a2d1f2927024d40d1eaad4b82ed6521311a19e;hp=51419611168571b843ca7d952d1f33897a3b1c9d;hpb=c55ab78646727694c2c8e3dc5b6f0baebb717400;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGPP/AliAnalysisTaskFilteredTree.cxx b/PWGPP/AliAnalysisTaskFilteredTree.cxx index 51419611168..5bcb187a272 100644 --- a/PWGPP/AliAnalysisTaskFilteredTree.cxx +++ b/PWGPP/AliAnalysisTaskFilteredTree.cxx @@ -13,9 +13,29 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +/* + Class to process/filter reconstruction information from ESD, ESD friends, MC and provide them for later reprocessing + Filtering schema - low pt part is downscaled - to have flat pt specatra of selected topologies (tracks and V0s) + Downscaling schema is controlled by downscaling factors + Usage: + 1.) Filtering on Lego train + 2.) expert QA for tracking (resolution efficnecy) + 3.) pt reoslution studies using V0s + 4.) dEdx calibration using V0s + 5.) pt resolution and dEdx studies using cosmic + + + 6.) Info used for later raw data OFFLINE triggering (highPt, V0, laser, cosmic, high dEdx) + + Exported trees (with full objects and dereived variables): + 1.) "highPt" - filtered trees with esd tracks, derived variables(propagated tracks), optional MC info +optional space points + 2.) "V0s" - - filtered trees with selected V0s (rough KF chi2 cut), KF particle and corresponding esd tracks + optionla space points + 3.) "Laser" - dump laser tracks with space points if exests + 4.) "CosmicTree" - cosmic track candidate (random or triggered) + esdTracks(up/down)+ optional points + 5.) "dEdx" - tree with high dEdx tpc tracks +*/ + #include "iostream" #include "TSystem.h" - #include #include @@ -91,6 +111,7 @@ ClassImp(AliAnalysisTaskFilteredTree) , fCentralityEstimator(0) , fLowPtTrackDownscaligF(0) , fLowPtV0DownscaligF(0) + , fFriendDownscaling(-3.) , fProcessAll(kFALSE) , fProcessCosmics(kFALSE) , fProcessITSTPCmatchOut(kFALSE) // swittch to process ITS/TPC standalone tracks @@ -109,7 +130,7 @@ ClassImp(AliAnalysisTaskFilteredTree) , fPtResCentPtTPC(0) , fPtResCentPtTPCc(0) , fPtResCentPtTPCITS(0) - , fDummyFriendTrack(0) + , fCurrentFileName("") , fDummyTrack(0) { // Constructor @@ -127,16 +148,9 @@ ClassImp(AliAnalysisTaskFilteredTree) //_____________________________________________________________________________ AliAnalysisTaskFilteredTree::~AliAnalysisTaskFilteredTree() { - //the output trees not to be deleted in case of proof analysis - //Bool_t deleteTrees=kTRUE; - //if ((AliAnalysisManager::GetAnalysisManager())) - //{ - // if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() == - // AliAnalysisManager::kProofAnalysis) - // deleteTrees=kFALSE; - //} - //if (deleteTrees) delete fTreeSRedirector; - + // + // Destructor + // delete fFilteredTreeEventCuts; delete fFilteredTreeAcceptanceCuts; delete fFilteredTreeRecAcceptanceCuts; @@ -146,15 +160,16 @@ AliAnalysisTaskFilteredTree::~AliAnalysisTaskFilteredTree() //____________________________________________________________________________ Bool_t AliAnalysisTaskFilteredTree::Notify() { + // + // static Int_t count = 0; count++; TTree *chain = (TChain*)GetInputData(0); - if(chain) - { + if(chain){ Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName()); - } - -return kTRUE; + } + fCurrentFileName=chain->GetCurrentFile()->GetName(); + return kTRUE; } //_____________________________________________________________________________ @@ -177,14 +192,7 @@ void AliAnalysisTaskFilteredTree::UserCreateOutputObjects() fMCEffTree = ((*fTreeSRedirector)<<"MCEffTree").GetTree(); fCosmicPairsTree = ((*fTreeSRedirector)<<"CosmicPairs").GetTree(); - if (!fDummyFriendTrack) - { - fDummyFriendTrack=new AliESDfriendTrack(); - fDummyFriendTrack->SetTrackPointArray(new AliTrackPointArray(164)); - printf("just made a new dummy friend track!"); - } - if (!fDummyTrack) - { + if (!fDummyTrack) { fDummyTrack=new AliESDtrack(); } @@ -291,45 +299,42 @@ void AliAnalysisTaskFilteredTree::UserExec(Option_t *) Printf("ERROR: ESD event not available"); return; } - - //// MC event - //if(fUseMCInfo) { - // fMC = MCEvent(); - // if (!fMC) { - // Printf("ERROR: MC event not available"); - // return; - // } - //} - //if MC info available - use it. fMC = MCEvent(); - if(fUseESDfriends) { //fESDfriend = dynamic_cast(fESD->FindListObject("AliESDfriend")); fESDfriend = ESDfriend(); - if(!fESDfriend) { Printf("ERROR: ESD friends not available"); } } + AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); + if (!inputHandler){ + return; + } //if set, use the environment variables to set the downscaling factors //AliAnalysisTaskFilteredTree_fLowPtTrackDownscaligF //AliAnalysisTaskFilteredTree_fLowPtV0DownscaligF + //AliAnalysisTaskFilteredTree_fFriendDownscaling TString env; env = gSystem->Getenv("AliAnalysisTaskFilteredTree_fLowPtTrackDownscaligF"); - if (!env.IsNull()) - { + if (!env.IsNull()){ fLowPtTrackDownscaligF=env.Atof(); AliInfo(Form("fLowPtTrackDownscaligF=%f",fLowPtTrackDownscaligF)); } env = gSystem->Getenv("AliAnalysisTaskFilteredTree_fLowPtV0DownscaligF"); - if (!env.IsNull()) - { + if (!env.IsNull()){ fLowPtV0DownscaligF=env.Atof(); AliInfo(Form("fLowPtV0DownscaligF=%f",fLowPtTrackDownscaligF)); } - + env = gSystem->Getenv("AliAnalysisTaskFilteredTree_fFriendDownscaling"); + if (!env.IsNull()){ + fFriendDownscaling=env.Atof(); + AliInfo(Form(" fFriendDownscaling=%f",fFriendDownscaling)); + } + // + // // if(fProcessAll) { ProcessAll(fESD,fMC,fESDfriend); // all track stages and MC @@ -337,49 +342,21 @@ void AliAnalysisTaskFilteredTree::UserExec(Option_t *) else { Process(fESD,fMC,fESDfriend); // only global and TPC tracks } - // ProcessV0(fESD,fMC,fESDfriend); ProcessLaser(fESD,fMC,fESDfriend); ProcessdEdx(fESD,fMC,fESDfriend); - if (fProcessCosmics) { ProcessCosmics(fESD,fESDfriend); } if(fMC) { ProcessMCEff(fESD,fMC,fESDfriend);} if (fProcessITSTPCmatchOut) ProcessITSTPCmatchOut(fESD, fESDfriend); - printf("processed event %d\n", Entry()); + printf("processed event %d\n", Int_t(Entry())); } //_____________________________________________________________________________ void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event, AliESDfriend* esdFriend) { // - // Select real events with high-pT tracks - // - if(!event) { - AliDebug(AliLog::kError, "event not available"); - return; - } - - // - AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - - - // check for cosmic pairs - // - // find cosmic pairs trigger by random trigger + // Find cosmic pairs (triggered or random) // // AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD(); @@ -389,12 +366,9 @@ void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event, AliES const Double_t kMinNcl=50; const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1}; Int_t ntracks=event->GetNumberOfTracks(); - // Float_t dcaTPC[2]={0,0}; - // Float_t covTPC[3]={0,0,0}; - UInt_t specie = event->GetEventSpecie(); // skip laser events if (specie==AliRecoParam::kCalib) return; - + Int_t ntracksFriend = esdFriend ? esdFriend->GetNumberOfTracks() : 0; for (Int_t itrack0=0;itrack0GetInnerParam(); AliESDfriendTrack* friendTrack0=NULL; - if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack0 = esdFriend->GetTrack(itrack0);} //this guy can be NULL - //Bool_t newFriendTrack0=kFALSE; - //if (!friendTrack0) {friendTrack0=new AliESDfriendTrack(); newFriendTrack0=kTRUE;} - if (!friendTrack0) {friendTrack0=fDummyFriendTrack;} + if (esdFriend &&!esdFriend->TestSkipBit()){ + if (itrack0GetTrack(itrack0); + } //this guy can be NULL + } for (Int_t itrack1=itrack0+1;itrack1GetTrack(itrack1); @@ -445,20 +420,16 @@ void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event, AliES if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE; //delta with correct sign /* - TCut cut0="abs(t1.fP[0]+t0.fP[0])<2" - TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02" - TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2" - */ + TCut cut0="abs(t1.fP[0]+t0.fP[0])<2" + TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02" + TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2" + */ if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE; //delta y opposite sign if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE; //delta tgl opposite sign if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE; //delta 1/pt opposite sign if (!isPair) continue; TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName()); Int_t eventNumber = event->GetEventNumberInFile(); - //Bool_t hasFriend = kFALSE; - //Bool_t hasITS=(track0->GetNcls(0)+track1->GetNcls(0)>4); - //printf("DUMPHPTCosmic:%s|%f|%d|%d|%d\n",filename.Data(),(TMath::Min(track0->Pt(),track1->Pt())), eventNumber,hasFriend,hasITS); - // const AliExternalTrackParam * trackIn1 = track1->GetInnerParam(); // // Int_t ntracksSPD = vertexSPD->GetNContributors(); @@ -475,58 +446,61 @@ void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event, AliES ULong64_t periodID = (ULong64_t)event->GetPeriodNumber(); ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID); - // - // Dump to the tree - // vertex - // TPC-ITS tracks - // - - //fCosmicPairsTree->Branch("fileName",&fileName,32000,0); - //fCosmicPairsTree->Branch("runNumber",&runNumber,"runNumber/I"); - //fCosmicPairsTree->Branch("timeStamp",&timeStamp,"timeStamp/I"); - //fCosmicPairsTree->Branch("eventNumber",&eventNumber,"eventNumber/I"); - //fCosmicPairsTree->Branch("triggerMask",&triggerMask,32000,0); - //fCosmicPairsTree->Branch("triggerClass",&triggerClass,32000,0); - //fCosmicPairsTree->Branch("magField",&magField,"magField/F"); - //fCosmicPairsTree->Branch("ntracksSPD",&ntracksSPD,"ntracksSPD/I"); - //fCosmicPairsTree->Branch("ntracksTPC",&ntracksTPC,"ntracksTPC/I"); - //fCosmicPairsTree->Branch("vertexSPD",vertexSPD,32000,0); - //fCosmicPairsTree->Branch("vertexTPC",vertexTPC,32000,0); - //fCosmicPairsTree->Branch("track0",track0,32000,0); - //fCosmicPairsTree->Branch("track1",track1,32000,0); - // - //fCosmicPairsTree->Fill(); AliESDfriendTrack* friendTrack1=NULL; - if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack1 = esdFriend->GetTrack(itrack1);} //this guy can be NULL - //Bool_t newFriendTrack1=kFALSE; - //if (!friendTrack1) {friendTrack1=new AliESDfriendTrack(); newFriendTrack1=kTRUE;} - if (!friendTrack1) {friendTrack1=fDummyFriendTrack;} + if (esdFriend &&!esdFriend->TestSkipBit()){ + if (itrack1GetTrack(itrack1); + } //this guy can be NULL + } + // + AliESDfriendTrack *friendTrackStore0=friendTrack0; // store friend track0 for later processing + AliESDfriendTrack *friendTrackStore1=friendTrack1; // store friend track1 for later processing + if (fFriendDownscaling>=1){ // downscaling number of friend tracks + if (gRandom->Rndm()>1./fFriendDownscaling){ + friendTrackStore0 = 0; + friendTrackStore1 = 0; + } + } + if (fFriendDownscaling<=0){ + if (((*fTreeSRedirector)<<"CosmicPairs").GetTree()){ + TTree * tree = ((*fTreeSRedirector)<<"CosmicPairs").GetTree(); + if (tree){ + Double_t sizeAll=tree->GetZipBytes(); + TBranch * br= tree->GetBranch("friendTrack0.fPoints"); + Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0; + br= tree->GetBranch("friendTrack0.fCalibContainer"); + if (br) sizeFriend+=br->GetZipBytes(); + if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) { + friendTrackStore0=0; + friendTrackStore1=0; + } + } + } + } if(!fFillTree) return; if(!fTreeSRedirector) return; (*fTreeSRedirector)<<"CosmicPairs"<< - "gid="<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); - // trigger if(evtCuts->IsTriggerRequired()) { @@ -652,7 +608,7 @@ void AliAnalysisTaskFilteredTree::Process(AliESDEvent *const esdEvent, AliMCEven if(!vtxSPD) return; Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); - //printf("isEventOK %d, isEventTriggered %d, status %d, vz %f \n",isEventOK, isEventTriggered, vtxESD->GetStatus(), vtxESD->GetZv()); + //printf("isEventOK %d, isEventTriggered %d, status %d, vz %f \n",isEventOK, isEventTriggered, vtxESD->GetStatus(), vtxESD->GetZ()); //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); Int_t ntracks = esdEvent->GetNumberOfTracks(); @@ -675,9 +631,9 @@ void AliAnalysisTaskFilteredTree::Process(AliESDEvent *const esdEvent, AliMCEven // //Double_t vert[3] = {0}; - //vert[0] = vtxESD->GetXv(); - //vert[1] = vtxESD->GetYv(); - //vert[2] = vtxESD->GetZv(); + //vert[0] = vtxESD->GetX(); + //vert[1] = vtxESD->GetY(); + //vert[2] = vtxESD->GetZ(); Int_t mult = vtxESD->GetNContributors(); Int_t multSPD = vtxSPD->GetNContributors(); Int_t multTPC = vtxTPC->GetNContributors(); @@ -723,30 +679,11 @@ void AliAnalysisTaskFilteredTree::Process(AliESDEvent *const esdEvent, AliMCEven // TPC-ITS tracks // TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data(); - - //fHighPtTree->Branch("fileName",&fileName,32000,0); - //fHighPtTree->Branch("runNumber",&runNumber,"runNumber/I"); - //fHighPtTree->Branch("evtTimeStamp",&evtTimeStamp,"evtTimeStamp/I"); - //fHighPtTree->Branch("evtNumberInFile",&evtNumberInFile,"evtNumberInFile/I"); - //fHighPtTree->Branch("triggerClass",&triggerClass,32000,0); - //fHighPtTree->Branch("Bz",&bz,"Bz/F"); - //fHighPtTree->Branch("vtxESD",vtxESD,32000,0); - //fHighPtTree->Branch("IRtot",&ir1,"IRtot/I"); - //fHighPtTree->Branch("IRint2",&ir2,"IRint2/I"); - //fHighPtTree->Branch("mult",&mult,"mult/I"); - //fHighPtTree->Branch("esdTrack",track,32000,0); - //fHighPtTree->Branch("centralityF",¢ralityF,"centralityF/F"); - - //fHighPtTree->Fill(); - - //Double_t vtxX=vtxESD->GetX(); - //Double_t vtxY=vtxESD->GetY(); - //Double_t vtxZ=vtxESD->GetZ(); if(!fFillTree) return; if(!fTreeSRedirector) return; (*fTreeSRedirector)<<"highPt"<< "gid="<GetCurrentFile()->GetName()); - + const Double_t kMinPt = 5; if(!fFillTree) return; if(!fTreeSRedirector) return; - - // laser events const AliESDHeader* esdHeader = esdEvent->GetHeader(); - if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) - { + if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib) { Int_t countLaserTracks = 0; Int_t runNumber = esdEvent->GetRunNumber(); Int_t evtTimeStamp = esdEvent->GetTimeStamp(); Int_t evtNumberInFile = esdEvent->GetEventNumberInFile(); Float_t bz = esdEvent->GetMagneticField(); - TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data(); - + TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data(); // Global event id calculation using orbitID, bunchCrossingID and periodID ULong64_t orbitID = (ULong64_t)esdEvent->GetOrbitNumber(); ULong64_t bunchCrossID = (ULong64_t)esdEvent->GetBunchCrossNumber(); ULong64_t periodID = (ULong64_t)esdEvent->GetPeriodNumber(); ULong64_t gid = ((periodID << 36) | (orbitID << 12) | bunchCrossID); - - for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) - { + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++){ AliESDtrack *track = esdEvent->GetTrack(iTrack); if(!track) continue; - - if(track->GetTPCInnerParam()) countLaserTracks++; - + if(track->GetTPCInnerParam()) countLaserTracks++; AliESDfriendTrack* friendTrack=NULL; - if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL - //Bool_t newFriendTrack=kFALSE; - //if (!friendTrack) {friendTrack=new AliESDfriendTrack(); newFriendTrack=kTRUE;} - if (!friendTrack) {friendTrack=fDummyFriendTrack;} - + // suppress beam background and CE random reacks + if (track->GetInnerParam()->Pt()Rndm()>1/(1+TMath::Abs(fFriendDownscaling)); + if (skipTrack) continue; + if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL (*fTreeSRedirector)<<"Laser"<< - "gid="<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); // trigger if(evtCuts->IsTriggerRequired()) @@ -1012,9 +908,9 @@ void AliAnalysisTaskFilteredTree::ProcessAll(AliESDEvent *const esdEvent, AliMCE // Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); + vert[0] = vtxESD->GetX(); + vert[1] = vtxESD->GetY(); + vert[2] = vtxESD->GetZ(); Int_t mult = vtxESD->GetNContributors(); Float_t bz = esdEvent->GetMagneticField(); Int_t runNumber = esdEvent->GetRunNumber(); @@ -1409,7 +1305,26 @@ void AliAnalysisTaskFilteredTree::ProcessAll(AliESDEvent *const esdEvent, AliMCE //assign the dummy objects if needed if (!track) {track=fDummyTrack;} - if (!friendTrack) {friendTrack=fDummyFriendTrack;} + AliESDfriendTrack *friendTrackStore=friendTrack; // store friend track for later processing + if (fFriendDownscaling>=1){ // downscaling number of friend tracks + friendTrackStore = (gRandom->Rndm()<1./fFriendDownscaling)? friendTrack:0; + } + if (fFriendDownscaling<=0){ + if (((*fTreeSRedirector)<<"highPt").GetTree()){ + TTree * tree = ((*fTreeSRedirector)<<"highPt").GetTree(); + if (tree){ + Double_t sizeAll=tree->GetZipBytes(); + TBranch * br= tree->GetBranch("friendTrack.fPoints"); + Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0; + br= tree->GetBranch("friendTrack.fCalibContainer"); + if (br) sizeFriend+=br->GetZipBytes(); + if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) friendTrackStore=0; + } + } + } + + + // if (!friendTrackStore && fFriendDownscaling<=1) {friendTrack=fDummyFriendTrack;} if (!vtxESD) {vtxESD=&dummyvtxESD;} if (mcEvent) { @@ -1422,32 +1337,6 @@ void AliAnalysisTaskFilteredTree::ProcessAll(AliESDEvent *const esdEvent, AliMCE if (!particleITS) {particleITS=&dummyparticle;} if (!particleMotherITS) {particleMotherITS=&dummyparticle;} } - //the following are guaranteed to exist: - //if (!tpcInnerC) {tpcInnerC=&dummyexternaltrackparam;} - //if (!trackInnerC) {trackInnerC=&dummyexternaltrackparam;} - //if (!trackInnerC2) {trackInnerC2=&dummyexternaltrackparam;} - //if (!outerITSc) {outerITSc=&dummyexternaltrackparam;} - //if (!trackInnerC3) {trackInnerC3=&dummyexternaltrackparam;} - ///////////////////////// - - //Double_t vtxX=vtxESD->GetX(); - //Double_t vtxY=vtxESD->GetY(); - //Double_t vtxZ=vtxESD->GetZ(); - - //AliESDVertex* pvtxESD = (AliESDVertex*)vtxESD->Clone(); - //AliESDtrack* ptrack=(AliESDtrack*)track->Clone(); - //AliExternalTrackParam* ptpcInnerC = (AliExternalTrackParam*)tpcInnerC->Clone(); - //AliExternalTrackParam* ptrackInnerC = (AliExternalTrackParam*)trackInnerC->Clone(); - //AliExternalTrackParam* ptrackInnerC2 = (AliExternalTrackParam*)trackInnerC2->Clone(); - //AliExternalTrackParam* pouterITSc = (AliExternalTrackParam*)outerITSc->Clone(); - //AliExternalTrackParam* ptrackInnerC3 = (AliExternalTrackParam*)trackInnerC3->Clone(); - //AliESDVertex* pvtxESD = new AliESDVertex(*vtxESD); - //AliESDtrack* ptrack= new AliESDtrack(*track); - //AliExternalTrackParam* ptpcInnerC = new AliExternalTrackParam(*tpcInnerC); - //AliExternalTrackParam* ptrackInnerC = new AliExternalTrackParam(*trackInnerC); - //AliExternalTrackParam* ptrackInnerC2 = new AliExternalTrackParam(*trackInnerC2); - //AliExternalTrackParam* pouterITSc = new AliExternalTrackParam(*outerITSc); - //AliExternalTrackParam* ptrackInnerC3 = new AliExternalTrackParam(*trackInnerC3); Int_t ntracks = esdEvent->GetNumberOfTracks(); @@ -1460,34 +1349,16 @@ void AliAnalysisTaskFilteredTree::ProcessAll(AliESDEvent *const esdEvent, AliMCE // fill histograms FillHistograms(track, tpcInnerC, centralityF, (Double_t)chi2(0,0)); - if(fTreeSRedirector && dumpToTree && fFillTree) - { - - //if (friendTrack) - //{ - // const AliTrackPointArray* array = friendTrack->GetTrackPointArray(); - // if (!array) {printf("we have a friend, but the ponits are empty\n"); continue;} - // if (friendTrack==fDummyFriendTrack) printf("using the dummy friend track\n"); - // cout<GetX()[0]<<" "<GetX()[2]<GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } - // get file name - TTree *chain = (TChain*)GetInputData(0); - if(!chain) { - Printf("ERROR: Could not receive input chain"); - return; - } - TObjString fileName(chain->GetCurrentFile()->GetName()); // trigger if(evtCuts->IsTriggerRequired()) { // always MB isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; - physicsSelection = static_cast (inputHandler->GetEventSelection()); if(!physicsSelection) return; @@ -1736,9 +1586,9 @@ void AliAnalysisTaskFilteredTree::ProcessMCEff(AliESDEvent *const esdEvent, AliM // reco event info Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); + vert[0] = vtxESD->GetX(); + vert[1] = vtxESD->GetY(); + vert[2] = vtxESD->GetZ(); Int_t mult = vtxESD->GetNContributors(); Double_t bz = esdEvent->GetMagneticField(); Double_t runNumber = esdEvent->GetRunNumber(); @@ -1832,7 +1682,7 @@ void AliAnalysisTaskFilteredTree::ProcessMCEff(AliESDEvent *const esdEvent, AliM // if(fTreeSRedirector && fFillTree) { (*fTreeSRedirector)<<"MCEffTree"<< - "fileName.="<<&fileName<< + "fileName.="<<&fCurrentFileName<< "triggerClass.="<<&triggerClass<< "runNumber="<GetCurrentFile()->GetName()); // trigger if(evtCuts->IsTriggerRequired()) @@ -2003,24 +1840,48 @@ void AliAnalysisTaskFilteredTree::ProcessV0(AliESDEvent *const esdEvent, AliMCEv if (!track1) continue; AliESDfriendTrack* friendTrack0=NULL; AliESDfriendTrack* friendTrack1=NULL; - if (esdFriend) - { - if (!esdFriend->TestSkipBit()) - { - friendTrack0 = esdFriend->GetTrack(v0->GetIndex(0)); //this guy can be NULL - friendTrack1 = esdFriend->GetTrack(v0->GetIndex(1)); //this guy can be NULL + if (esdFriend) { + if (!esdFriend->TestSkipBit()){ + Int_t ntracksFriend = esdFriend->GetNumberOfTracks(); + if (v0->GetIndex(0)GetTrack(v0->GetIndex(0)); //this guy can be NULL + } + if (v0->GetIndex(1)GetTrack(v0->GetIndex(1)); //this guy can be NULL + } } } - //Bool_t newFriendTrack0=kFALSE; - //Bool_t newFriendTrack1=kFALSE; - //if (!friendTrack0) {friendTrack0=new AliESDfriendTrack(); newFriendTrack0=kTRUE;} - //if (!friendTrack1) {friendTrack1=new AliESDfriendTrack(); newFriendTrack1=kTRUE;} - if (!friendTrack0) {friendTrack0=fDummyFriendTrack;} - if (!friendTrack1) {friendTrack1=fDummyFriendTrack;} if (track0->GetSign()<0) { track1 = esdEvent->GetTrack(v0->GetIndex(0)); track0 = esdEvent->GetTrack(v0->GetIndex(1)); } + + // + AliESDfriendTrack *friendTrackStore0=friendTrack0; // store friend track0 for later processing + AliESDfriendTrack *friendTrackStore1=friendTrack1; // store friend track1 for later processing + if (fFriendDownscaling>=1){ // downscaling number of friend tracks + if (gRandom->Rndm()>1./fFriendDownscaling){ + friendTrackStore0 = 0; + friendTrackStore1 = 0; + } + } + if (fFriendDownscaling<=0){ + if (((*fTreeSRedirector)<<"V0s").GetTree()){ + TTree * tree = ((*fTreeSRedirector)<<"V0s").GetTree(); + if (tree){ + Double_t sizeAll=tree->GetZipBytes(); + TBranch * br= tree->GetBranch("friendTrack0.fPoints"); + Double_t sizeFriend=(br!=NULL)?br->GetZipBytes():0; + br= tree->GetBranch("friendTrack0.fCalibContainer"); + if (br) sizeFriend+=br->GetZipBytes(); + if (sizeFriend*TMath::Abs(fFriendDownscaling)>sizeAll) { + friendTrackStore0=0; + friendTrackStore1=0; + } + } + } + } + // Bool_t isDownscaled = IsV0Downscaled(v0); if (isDownscaled) continue; @@ -2032,26 +1893,24 @@ void AliAnalysisTaskFilteredTree::ProcessV0(AliESDEvent *const esdEvent, AliMCEv if(!fFillTree) return; if(!fTreeSRedirector) return; (*fTreeSRedirector)<<"V0s"<< - "gid="<GetCurrentFile()->GetName()); // trigger Bool_t isEventTriggered = kTRUE; @@ -2092,11 +1944,6 @@ void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMC // AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); - if (!inputHandler) - { - Printf("ERROR: Could not receive input handler"); - return; - } if(evtCuts->IsTriggerRequired()) { @@ -2136,9 +1983,9 @@ void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMC if(isEventOK && isEventTriggered) { Double_t vert[3] = {0}; - vert[0] = vtxESD->GetXv(); - vert[1] = vtxESD->GetYv(); - vert[2] = vtxESD->GetZv(); + vert[0] = vtxESD->GetX(); + vert[1] = vtxESD->GetY(); + vert[2] = vtxESD->GetZ(); Int_t mult = vtxESD->GetNContributors(); Double_t bz = esdEvent->GetMagneticField(); Double_t runNumber = esdEvent->GetRunNumber(); @@ -2157,10 +2004,13 @@ void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMC AliESDtrack *track = esdEvent->GetTrack(iTrack); if(!track) continue; AliESDfriendTrack* friendTrack=NULL; - if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL - //Bool_t newFriendTrack=kFALSE; - //if (!friendTrack) {friendTrack=new AliESDfriendTrack(); newFriendTrack=kTRUE;} - if (!friendTrack) {friendTrack=fDummyFriendTrack;} + if (esdFriend && !esdFriend->TestSkipBit()) { + Int_t ntracksFriend = esdFriend->GetNumberOfTracks(); + if (iTrackGetTrack(iTrack); + } //this guy can be NULL + } + if(track->Charge()==0) continue; if(!esdTrackCuts->AcceptTrack(track)) continue; if(!accCuts->AcceptTrack(track)) continue; @@ -2170,20 +2020,19 @@ void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMC if(!fFillTree) return; if(!fTreeSRedirector) return; - (*fTreeSRedirector)<<"dEdx"<< - "gid="<GetTgl())>1) return 0; if ((track0->GetTPCClusterInfo(2,1))<100) return 0; if ((track1->GetTPCClusterInfo(2,1))<100) return 0; - //if ((track0->GetITSclusters(0))<2) return 0; - //if ((track1->GetITSclusters(0))<2) return 0; Float_t pos0[2]={0}, cov0[3]={0}; Float_t pos1[2]={0}, cov1[3]={0}; track0->GetImpactParameters(pos0,cov0); @@ -2530,67 +2377,6 @@ void AliAnalysisTaskFilteredTree::FinishTaskOutput() // Called one at the end // locally on working node // - - //// must be deleted to store trees - //if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector=0; - - //// open temporary file and copy trees to the ouptut container - - //TChain* chain = 0; - //// - //chain = new TChain("highPt"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fHighPtTree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fHighPtTree) fHighPtTree->Print(); - - //// - //chain = new TChain("V0s"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fV0Tree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fV0Tree) fV0Tree->Print(); - - //// - //chain = new TChain("dEdx"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fdEdxTree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fdEdxTree) fdEdxTree->Print(); - - //// - //chain = new TChain("Laser"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fLaserTree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fLaserTree) fLaserTree->Print(); - - //// - //chain = new TChain("MCEffTree"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fMCEffTree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fMCEffTree) fMCEffTree->Print(); - - //// - //chain = new TChain("CosmicPairs"); - //if(chain) { - // chain->Add("jotwinow_Temp_Trees.root"); - // fCosmicPairsTree = chain->CopyTree("1"); - // delete chain; chain=0; - //} - //if(fCosmicPairsTree) fCosmicPairsTree->Print(); - Bool_t deleteTrees=kTRUE; if ((AliAnalysisManager::GetAnalysisManager())) { @@ -2600,40 +2386,14 @@ void AliAnalysisTaskFilteredTree::FinishTaskOutput() } if (deleteTrees) delete fTreeSRedirector; fTreeSRedirector=NULL; - - //OpenFile(1); - - // Post output data. - //PostData(1, fHighPtTree); - //PostData(2, fV0Tree); - //PostData(3, fdEdxTree); - //PostData(4, fLaserTree); - //PostData(5, fMCEffTree); - //PostData(6, fCosmicPairsTree); } //_____________________________________________________________________________ void AliAnalysisTaskFilteredTree::Terminate(Option_t *) { + // // Called one at the end - /* - fOutputSummary = dynamic_cast (GetOutputData(1)); - if(fOutputSummary) delete fOutputSummary; fOutputSummary=0; - TChain* chain = new TChain("highPt"); - if(!chain) return; - chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root"); - TTree *tree = chain->CopyTree("1"); - if (chain) { delete chain; chain=0; } - if(!tree) return; - tree->Print(); - fOutputSummary = tree; - - if (!fOutputSummary) { - Printf("ERROR: AliAnalysisTaskFilteredTree::Terminate(): Output data not avaiable %p \n", GetOutputData(1)); - return; - } - */ - + // } //_____________________________________________________________________________ @@ -2921,25 +2681,41 @@ void AliAnalysisTaskFilteredTree::ProcessITSTPCmatchOut(AliESDEvent *const esdEv } } -//void AliAnalysisTaskFilteredTree::ProcessTrackMatch(AliESDEvent *const esdEvent, AliESDfriend *const esdFriend){ +void AliAnalysisTaskFilteredTree::ProcessTrackMatch(AliESDEvent *const /*esdEvent*/, AliESDfriend *const /*esdFriend*/){ /* + Use TPC standalone, ITS standalone and combined tracks to categorize/resp. recover track information. + + Track categories: + -TPC+ITS + -TPC only + -ITS only + Topology categories: + -Nice isolated tracks with full information + -Overlapped tracks - Refit and sign them + -Multiple found (check overlap factor) - Merge and sign + -Charge particle (kink) decays - Change of direction - Sign them) + Info: + -Array of indexes of closest tracks in each individual category + -Chi2 distance to the closest tracks at reference radius of TPCin + -Overlap factors - fraction of shared clusters or missing region + -Chi2 distance at DCA + Information matrix: + -matrix closest tracks from each categories + -characterization - chi2, index,chi2, overlap ratio + + Decissions: + 0.) Kink decay or catastophic multiple scaterring + (combining all track categories) + - small chi2 at the DCA + - significantly large deflection angle + - Combinatorial algorithm - to decrease CPU time restriction of investigation to tracks with small DCA at refernce radius -Track categories: -TPC+ITS -TPC only -ITS only - -Options: --OK --Multiple found (check overlap factor) --Kink decays - change of direction - -To make - matrix closest tracks from each categories -Characterization - chi2, index, overlap ratio + 1.) if (TPConly && !(TPC+ITS) && ITSonly match ) { + if (!kink) TPCOnly.addoptITS + if (kink) TPConly sign + } -New features: -1.) if (TPConly && !(TPC+ITS) && ITSonly match ) TPCOnly.addoptITS -2.) if (ITSonly && !(TPC+ITS)) (TPC+ITS).createConbined -3.) Overlap tracks - doUnfold + 2.) Overlap tracks - Refit with doUnfold */ +}