X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWG%2FCaloTrackCorrBase%2FAliCaloTrackReader.cxx;h=b0fed7c03edc6dc2cf4ad0ec2ca7cc157e0b88e3;hb=48f32a76d93bab329a856ef9883dde81fd415c38;hp=24b30addaf9da16efbe37be679c4f7aa0e210a4f;hpb=6f20e2a6bbc90da64fd6520f8f28692706473047;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx b/PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx index 24b30addaf9..b0fed7c03ed 100755 --- a/PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx +++ b/PWG/CaloTrackCorrBase/AliCaloTrackReader.cxx @@ -60,6 +60,7 @@ #include "AliCaloTrackReader.h" // ---- Jets ---- #include "AliAODJet.h" +#include "AliAODJetEventBackground.h" ClassImp(AliCaloTrackReader) @@ -88,7 +89,8 @@ fRecalculateClusters(kFALSE),fCorrectELinearity(kTRUE), fSelectEmbeddedClusters(kFALSE), fTrackStatus(0), fTrackFilterMask(0), fTrackFilterMaskComplementary(0), fESDtrackCuts(0), fESDtrackComplementaryCuts(0), fConstrainTrack(kFALSE), -fSelectHybridTracks(0), fSelectPrimaryTracks(0), fSelectSPDHitTracks(kFALSE), +fSelectHybridTracks(0), fSelectPrimaryTracks(0), +fSelectSPDHitTracks(0), fSelectFractionTPCSharedClusters(0), fCutTPCSharedClustersFraction(0), fTrackMult(0), fTrackMultEtaCut(0.9), fReadStack(kFALSE), fReadAODMCParticles(kFALSE), fDeltaAODFileName(""), fFiredTriggerClassName(""), @@ -129,6 +131,8 @@ fEventPlaneMethod(""), fAcceptOnlyHIJINGLabels(0), fNMCProducedMin(0), fNMCProducedMax(0), fFillInputNonStandardJetBranch(kFALSE), fNonStandardJets(new TClonesArray("AliAODJet",100)),fInputNonStandardJetBranchName("jets"), +fFillInputBackgroundJetBranch(kFALSE), +fBackgroundJets(0x0),fInputBackgroundJetBranchName("jets"), fAcceptEventsWithBit(0), fRejectEventsWithBit(0) { //Ctor @@ -191,7 +195,8 @@ AliCaloTrackReader::~AliCaloTrackReader() else fNonStandardJets->Delete() ; delete fNonStandardJets ; } - + delete fBackgroundJets ; + fRejectEventsWithBit.Reset(); fAcceptEventsWithBit.Reset(); @@ -660,6 +665,9 @@ void AliCaloTrackReader::InitParameters() fTrackFilterMask = 128; //For AODs, but what is the difference between fTrackStatus and fTrackFilterMask? fTrackFilterMaskComplementary = 0; // in case of hybrid tracks, without using the standard method + fSelectFractionTPCSharedClusters = kTRUE; + fCutTPCSharedClustersFraction = 0.4, + fESDtrackCuts = 0; fESDtrackComplementaryCuts = 0; @@ -726,7 +734,10 @@ void AliCaloTrackReader::InitParameters() fInputNonStandardJetBranchName = "jets"; fFillInputNonStandardJetBranch = kFALSE; if(!fNonStandardJets) fNonStandardJets = new TClonesArray("AliAODJet",100); - + fInputBackgroundJetBranchName = "jets"; + fFillInputBackgroundJetBranch = kFALSE; + if(!fBackgroundJets) fBackgroundJets = new AliAODJetEventBackground(); + } //___________________________________________________________________ @@ -1156,34 +1167,43 @@ Bool_t AliCaloTrackReader::FillInputEvent(Int_t iEntry, const char * /*curFileNa //---------------------------------------------------------------------- - // Do not count events that where likely triggered by an exotic cluster + // Do not count events that were likely triggered by an exotic cluster // or out BC cluster //---------------------------------------------------------------------- - // Set a bit with the event kind, MB, L0, L1 ... - SetEventTriggerBit(); + // Set a bit with the event kind, MB, L0, L1 ... + SetEventTriggerBit(); - //Get Patches that triggered - TArrayI patches = GetTriggerPatches(fTriggerPatchTimeWindow[0],fTriggerPatchTimeWindow[1]); - - MatchTriggerCluster(patches); - - // If requested, remove badly triggeed events, but only when the EMCal trigger bit is set - if(fRemoveBadTriggerEvents && (IsEventEMCALL1() || IsEventEMCALL0())) + if( IsEventEMCALL1() || IsEventEMCALL0() ) { - if(fDebug > 0) printf("AliCaloTrackReader::FillInputEvent() - ACCEPT triggered event? \n exotic? %d - bad cell %d - bad Max cell %d - BC %d - Matched %d\n", - fIsExoticEvent,fIsBadCellEvent, fIsBadMaxCellEvent, fTriggerClusterBC,fIsTriggerMatch); - if (fIsExoticEvent) return kFALSE; - else if(fIsBadCellEvent) return kFALSE; - else if(fRemoveUnMatchedTriggers && !fIsTriggerMatch) return kFALSE ; - else if(fTriggerClusterBC != 0) return kFALSE; - //printf("\t *** YES\n"); - } - - patches.Reset(); - - if(fDebug > 0) printf("AliCaloTrackReader::FillInputEvent()-Pass EMCal triggered event rejection \n"); + //Get Patches that triggered + TArrayI patches = GetTriggerPatches(fTriggerPatchTimeWindow[0],fTriggerPatchTimeWindow[1]); + + MatchTriggerCluster(patches); + patches.Reset(); + + // If requested, remove badly triggeed events, but only when the EMCal trigger bit is set + if(fRemoveBadTriggerEvents) + { + if(fDebug > 0) + printf("AliCaloTrackReader::FillInputEvent() - ACCEPT triggered event? \n exotic? %d - bad cell %d - bad Max cell %d - BC %d - Matched %d\n", + fIsExoticEvent,fIsBadCellEvent, fIsBadMaxCellEvent, fTriggerClusterBC,fIsTriggerMatch); + if (fIsExoticEvent) return kFALSE; + else if(fIsBadCellEvent) return kFALSE; + else if(fRemoveUnMatchedTriggers && !fIsTriggerMatch) return kFALSE ; + else if(fTriggerClusterBC != 0) return kFALSE; + if(fDebug > 0) printf("\t *** YES\n"); + } + + if(fDebug > 0) + printf("AliCaloTrackReader::FillInputEvent()-Pass EMCal triggered event rejection \n"); + } + else if(!IsEventEMCALL1Jet() && !IsEventMinimumBias() && !IsEventCentral() && !IsEventSemiCentral()) + { + // In case there was a EG1&&EG2, it is selected as EG1, reject when requesting EG2 + return kFALSE; + } // Get the main vertex BC, in case not available // it is calculated in FillCTS checking the BC of tracks @@ -1229,6 +1249,9 @@ Bool_t AliCaloTrackReader::FillInputEvent(Int_t iEntry, const char * /*curFileNa //one specified jet branch if(fFillInputNonStandardJetBranch) FillInputNonStandardJets(); + if(fFillInputBackgroundJetBranch) + FillInputBackgroundJets(); + return kTRUE ; } @@ -1494,12 +1517,26 @@ void AliCaloTrackReader::FillInputCTS() if(!aodtrack->HasPointOnITSLayer(0) && !aodtrack->HasPointOnITSLayer(1)) continue ; } - if ( fSelectPrimaryTracks ) + if ( fSelectFractionTPCSharedClusters ) { - if ( aodtrack->GetType()!= AliAODTrack::kPrimary ) continue ; + Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls()); + if (frac > fCutTPCSharedClustersFraction) + { + if (fDebug > 2 )printf("\t Reject track, shared cluster fraction %f > %f\n",frac, fCutTPCSharedClustersFraction); + continue ; + } } - if (fDebug > 2 ) printf("AliCaloTrackReader::FillInputCTS(): \t accepted track! \n"); + if ( fSelectPrimaryTracks ) + { + if ( aodtrack->GetType()!= AliAODTrack::kPrimary ) + { + if (fDebug > 2 ) printf("\t Remove not primary track\n"); + continue ; + } + } + + if (fDebug > 2 ) printf("\t accepted track! \n"); //In case of AODs, TPC tracks cannot be propagated back to primary vertex, // info stored here @@ -2016,6 +2053,44 @@ void AliCaloTrackReader::FillInputNonStandardJets() } +//_________________________________________________ +void AliCaloTrackReader::FillInputBackgroundJets() +{ + // + //fill array with Background jets + // + // Adam T. Matyja + + if(fDebug > 2 ) printf("AliCaloTrackReader::FillInputBackgroundJets()\n"); + // + //check if branch name is given + if(!fInputBackgroundJetBranchName.Length()) + { + Printf("No background jet branch name specified. Specify among existing ones."); + fInputEvent->Print(); + abort(); + } + + fBackgroundJets = (AliAODJetEventBackground*)(fInputEvent->FindListObject(fInputBackgroundJetBranchName.Data())); + + if(!fBackgroundJets) + { + //check if jet branch exist; exit if not + Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fInputBackgroundJetBranchName.Data()); + fInputEvent->Print(); + abort(); + } + else + { + if(fDebug > 1){ + printf("AliCaloTrackReader::FillInputBackgroundJets()\n"); + fBackgroundJets->Print(""); + } + } + +} + + //________________________________________________ Bool_t AliCaloTrackReader::CheckForPrimaryVertex() { @@ -2066,6 +2141,7 @@ TArrayI AliCaloTrackReader::GetTriggerPatches(Int_t tmin, Int_t tmax ) // get object pointer AliVCaloTrigger *caloTrigger = GetInputEvent()->GetCaloTrigger( "EMCAL" ); + //printf("CaloTrigger Entries %d\n",caloTrigger->GetEntries() ); // class is not empty if( caloTrigger->GetEntries() > 0 ) { @@ -2092,7 +2168,7 @@ TArrayI AliCaloTrackReader::GetTriggerPatches(Int_t tmin, Int_t tmax ) // get timing array caloTrigger->GetL0Times( trigtimes ); - //printf("trigger time window %d - %d\n",fTriggerPatchTimeWindow[0],fTriggerPatchTimeWindow[1]); + //printf("Get L0 patch : n times %d - trigger time window %d - %d\n",ntimes, tmin,tmax); // go through the array for( i = 0; i < ntimes; i++ ) { @@ -2102,7 +2178,7 @@ TArrayI AliCaloTrackReader::GetTriggerPatches(Int_t tmin, Int_t tmax ) //printf("Accepted trigger time %d \n",trigtimes[i]); //if(nTrig > 99) continue; GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol,globRow, absId); - //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]); + //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absId); patches.Set(nPatch+1); patches.AddAt(absId,nPatch++); } @@ -2118,6 +2194,8 @@ TArrayI AliCaloTrackReader::GetTriggerPatches(Int_t tmin, Int_t tmax ) if(!isEGA && !isEJE) continue; + //printf("**** Get L1 Patch: EGA %d, EJE %d\n",isEGA,isEJE); + Int_t patchsize = -1; if (isEGA) patchsize = 2; else if (isEJE) patchsize = 16; @@ -2128,7 +2206,7 @@ TArrayI AliCaloTrackReader::GetTriggerPatches(Int_t tmin, Int_t tmax ) for(Int_t icol=0; icol < patchsize; icol++) { GetCaloUtils()->GetEMCALGeometry()->GetAbsFastORIndexFromPositionInEMCAL(globCol+icol,globRow+irow, absId); - //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absIDTrig[nTrig]); + //printf("pass the time cut globCol %d, globRow %d absId %d\n",globCol,globRow, absId); patches.Set(nPatch+1); patches.AddAt(absId,nPatch++); } @@ -2169,6 +2247,8 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) return; } + //printf("***** Try to match trigger to cluster %d **** L0 %d, L1 %d\n",fTriggerPatchClusterMatch,IsEventEMCALL0(),IsEventEMCALL1()); + //Recover the list of clusters TClonesArray * clusterList = 0; if (fInputEvent->FindListObject(fEMCALClustersListName)) @@ -2200,7 +2280,7 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) Bool_t badClMax = kFALSE; Bool_t badCeMax = kFALSE; Bool_t exoMax = kFALSE; - Int_t absIdMaxTrig= -1; +// Int_t absIdMaxTrig= -1; Int_t absIdMaxMax = -1; Int_t nOfHighECl = 0 ; @@ -2208,8 +2288,10 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) Float_t minE = fTriggerEventThreshold / 2.; // This method is not really suitable for JET trigger // but in case, reduce the energy cut since we do not trigger on high energy particle - if(IsEventEMCALL1()) minE = 1; - + if(IsEventEMCALL1Jet() || minE < 1) minE = 1; + + //printf("Min trigger Energy threshold %f\n",minE); + // Loop on the clusters, check if there is any that falls into one of the patches for (Int_t iclus = 0; iclus < nclusters; iclus++) { @@ -2229,7 +2311,7 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) Bool_t badCluster = GetCaloUtils()->GetEMCALRecoUtils()->ClusterContainsBadChannel(GetCaloUtils()->GetEMCALGeometry(), clus->GetCellsAbsId(),clus->GetNCells()); - UShort_t cellMax[] = {absIdMax}; + UShort_t cellMax[] = {(UShort_t) absIdMax}; Bool_t badCell = GetCaloUtils()->GetEMCALRecoUtils()->ClusterContainsBadChannel(GetCaloUtils()->GetEMCALGeometry(),cellMax,1); // if cell is bad, it can happen that time calibration is not available, @@ -2303,7 +2385,7 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) fTriggerClusterIndex = iclus; fTriggerClusterId = idclus; fIsTriggerMatch = kTRUE; - absIdMaxTrig = absIdMax; +// absIdMaxTrig = absIdMax; } } }// cell patch loop @@ -2446,6 +2528,7 @@ void AliCaloTrackReader::MatchTriggerCluster(TArrayI patches) patchOpen.Reset(); }// No trigger match found + //printf("Trigger BC %d, Id %d, Index %d\n",fTriggerClusterBC,fTriggerClusterId,fTriggerClusterIndex); } @@ -2583,7 +2666,8 @@ void AliCaloTrackReader::ResetLists() fV0Mul[0] = 0; fV0Mul[1] = 0; if(fNonStandardJets) fNonStandardJets -> Clear("C"); - + fBackgroundJets->Reset(); + } //___________________________________________ @@ -2600,7 +2684,8 @@ void AliCaloTrackReader::SetEventTriggerBit() fEventTrigEMCALL1Jet1 = kFALSE; fEventTrigEMCALL1Jet2 = kFALSE; - if(fDebug > 0) printf("AliCaloTrackReader::SetEventTriggerBit() - Select trigger mask bit %d - Trigger Event %s\n",fEventTriggerMask,GetFiredTriggerClasses().Data()); + if(fDebug > 0) + printf("AliCaloTrackReader::SetEventTriggerBit() - Select trigger mask bit %d - Trigger Event %s\n",fEventTriggerMask,GetFiredTriggerClasses().Data()); if(fEventTriggerMask <=0 )// in case no mask set { @@ -2662,11 +2747,12 @@ void AliCaloTrackReader::SetEventTriggerBit() // EMC L1 Gamma if ( fEventTriggerMask & AliVEvent::kEMCEGA ) { + //printf("EGA trigger bit\n"); if (GetFiredTriggerClasses().Contains("EG1" ) || GetFiredTriggerClasses().Contains("EGA" ) ) { fEventTrigEMCALL1Gamma1 = kTRUE; - if( GetFiredTriggerClasses().Contains("EG1" ) && !fFiredTriggerClassName.Contains("EG1") ) fEventTrigEMCALL1Gamma1 = kFALSE; + if( GetFiredTriggerClasses().Contains("EG1" ) && !fFiredTriggerClassName.Contains("EG1") ) fEventTrigEMCALL1Gamma1 = kFALSE; } else if(GetFiredTriggerClasses().Contains("EG2" )) { @@ -2677,6 +2763,7 @@ void AliCaloTrackReader::SetEventTriggerBit() // EMC L1 Jet else if( fEventTriggerMask & AliVEvent::kEMCEJE ) { + //printf("EJE trigger bit\n"); if (GetFiredTriggerClasses().Contains("EJ1" )|| GetFiredTriggerClasses().Contains("EJE" ) ) { @@ -2693,16 +2780,19 @@ void AliCaloTrackReader::SetEventTriggerBit() else if((fEventTriggerMask & AliVEvent::kEMC7) || (fEventTriggerMask & AliVEvent::kEMC1) ) { + //printf("L0 trigger bit\n"); fEventTrigEMCALL0 = kTRUE; } // Min Bias Pb-Pb else if( fEventTriggerMask & AliVEvent::kCentral ) { + //printf("MB semi central trigger bit\n"); fEventTrigSemiCentral = kTRUE; } // Min Bias Pb-Pb else if( fEventTriggerMask & AliVEvent::kSemiCentral ) { + //printf("MB central trigger bit\n"); fEventTrigCentral = kTRUE; } // Min Bias pp, PbPb, pPb @@ -2711,6 +2801,7 @@ void AliCaloTrackReader::SetEventTriggerBit() (fEventTriggerMask & AliVEvent::kINT8) || (fEventTriggerMask & AliVEvent::kAnyINT) ) { + //printf("MB trigger bit\n"); fEventTrigMinBias = kTRUE; } } @@ -2745,8 +2836,8 @@ void AliCaloTrackReader::SetEventTriggerBit() fBitEGA = 6; fBitEJE = 8; } - } else printf("AliCaloTrackReader()::Init() - Streamer info for trigger class not available, bit not changed\n"); - } else printf("AliCaloTrackReader::Init() - Streamer list not available!, bit not changed\n"); + } else printf("AliCaloTrackReader()::SetEventTriggerBit() - Streamer info for trigger class not available, bit not changed\n"); + } else printf("AliCaloTrackReader::SetEventTriggerBit() - Streamer list not available!, bit not changed\n"); } // set once the EJE, EGA trigger bit