#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
+#include "AliExternalTrackParam.h"
#include "AliESDVertex.h"
#include "AliESDEvent.h"
#include "AliESDfriend.h"
+#include "AliCentrality.h"
#include "AliESDInputHandler.h"
#include "AliESDtrack.h"
#include "AliESDfriendTrack.h"
fListHist(0),
fTRDCalibraFillHisto(0),
fNEvents(0),
+ fNEventsInput(0),
fNbTRDTrack(0),
fNbTRDTrackOffline(0),
fNbTRDTrackStandalone(0),
fNbTPCTRDtrack(0),
+ fNbGoodTracks(0),
fNbTimeBin(0),
fNbTimeBinOffline(0),
fNbTimeBinStandalone(0),
fVtxSPD(kFALSE),
fMinNbContributors(0),
fRangePrimaryVertexZ(9999999.0),
+ fMinNbTracks(9),
+ fMaxNbTracks(500),
fLow(0),
fHigh(30),
fFillZero(kFALSE),
fNbMaxCluster(2),
fOfflineTracks(kFALSE),
fStandaloneTracks(kFALSE),
+ fFirstRunGain(-1),
fVersionGainUsed(-1),
fSubVersionGainUsed(-1),
+ fFirstRunGainLocal(-1),
fVersionGainLocalUsed(-1),
fSubVersionGainLocalUsed(-1),
+ fFirstRunVdrift(-1),
fVersionVdriftUsed(-1),
fSubVersionVdriftUsed(-1),
fCalDetGain(0x0),
// Pointeur
if(fNEvents) delete fNEvents;
+ if(fNEventsInput) delete fNEventsInput;
if(fNbTRDTrack) delete fNbTRDTrack;
if(fNbTRDTrackOffline) delete fNbTRDTrackOffline;
if(fNbTRDTrackStandalone) delete fNbTRDTrackStandalone;
if(fNbTPCTRDtrack) delete fNbTPCTRDtrack;
+ if(fNbGoodTracks) delete fNbGoodTracks;
if(fNbTimeBin) delete fNbTimeBin;
if(fNbTimeBinOffline) delete fNbTimeBinOffline;
if(fNbTimeBinStandalone) delete fNbTimeBinStandalone;
}
-/*
-//________________________________________________________________________
-void AliTRDCalibTask::ConnectInputData(Option_t *)
-{
- // Connect ESD or AOD here
- // Called once per event
-
- cout << "AliTRDCalibTask::ConnectInputData() IN" << endl;
-
-
- // TTree* tree = dynamic_cast<TTree*> (GetInputData(0)); //pointer wird "umgecastet" auf anderen Variablentyp
- // if (!tree) {
- //Printf("ERROR: Could not read chain from input slot 0");
- // } else {
-
- AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
- if (!esdH) {
- //Printf("ERROR: Could not get ESDInputHandler");
- } else {
- fESD = esdH->GetEvent();
- // esdH->SetActiveBranches("ESDfriend*");
- if ((esdH->GetTree())->GetBranch("ESDfriend.")) fESDfriend = esdH->GetESDfriend();
- //else printf("No friend ESD\n");
- //Printf("*** CONNECTED NEW EVENT ****");
- }
-
-
- // }
- //cout << "AliTRDCalibTask::ConnectInputData() OUT" << endl;
-
-}
-*/
-
//________________________________________________________________________
void AliTRDCalibTask::UserCreateOutputObjects()
{
// output list
fListHist = new TList();
+ fListHist->SetOwner();
if(fHisto2d) {
fListHist->Add(fTRDCalibraFillHisto->GetCH2d());
fListHist->Add(fTRDCalibraFillHisto->GetPH2d());
if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector
fNEvents = new TH1I("NEvents","NEvents", 2, 0, 2);
fListHist->Add(fNEvents);
+ fNEventsInput = new TH1I("NEventsInput","NEventsInput", 2, 0, 2);
+ fListHist->Add(fNEventsInput);
// absolute gain calibration even without AliESDfriend
Int_t nBinsPt = 25;
fCH2dSum->SetZTitle("counts");
fCH2dSum->SetStats(0);
fCH2dSum->Sumw2();
+ //
+ fNbGoodTracks = new TH2F("NbGoodTracks","NbGoodTracks",500,0.0,2500.0,200,0.0,100.0);
+ fNbGoodTracks->SetXTitle("Nb of good tracks");
+ fNbGoodTracks->SetYTitle("Centrality");
+ fNbGoodTracks->SetStats(0);
+
// Add them
fListHist->Add(fPH2dSM);
fListHist->Add(fCH2dSM);
fListHist->Add(fPH2dSum);
fListHist->Add(fCH2dSum);
+ fListHist->Add(fNbGoodTracks);
}
/////////////////////////////////////////
delete [] binLimLogPt;
delete [] binLimPt;
+ PostData(1,fListHist);
+
//cout << "AliTRDCalibTask::UserCreateOutputObjects() OUT" << endl;
}
//cout << "AliTRDCalibTask::Exec() IN" << endl;
// Init Versions and subversions used
- if((fVersionGainUsed==-1) || (fSubVersionGainUsed==-1) || (fVersionGainLocalUsed==-1) || (fSubVersionGainLocalUsed==-1) || (fVersionVdriftUsed==-1) || (fSubVersionVdriftUsed==-1)) {
+ if((fFirstRunGain==-1) || (fVersionGainUsed==-1) || (fSubVersionGainUsed==-1) || (fFirstRunGainLocal==-1) || (fVersionGainLocalUsed==-1) || (fSubVersionGainLocalUsed==-1) || (fFirstRunVdrift==-1) || (fVersionVdriftUsed==-1) || (fSubVersionVdriftUsed==-1)) {
if(!SetVersionSubversion()) {
- fVersionGainUsed=0;
- fSubVersionGainUsed=0;
- fVersionGainLocalUsed=0;
- fSubVersionGainLocalUsed=0;
- fVersionVdriftUsed=0;
- fSubVersionVdriftUsed=0;
+ PostData(1, fListHist);
+ return;
}
}
if(fCounter==0) {
+ fTRDCalibraFillHisto->SetFirstRunGain(fFirstRunGain); // Gain Used
fTRDCalibraFillHisto->SetVersionGainUsed(fVersionGainUsed); // Gain Used
fTRDCalibraFillHisto->SetSubVersionGainUsed(fSubVersionGainUsed); // Gain Used
+ fTRDCalibraFillHisto->SetFirstRunGainLocal(fFirstRunGainLocal); // Gain Used
fTRDCalibraFillHisto->SetVersionGainLocalUsed(fVersionGainLocalUsed); // Gain Used
fTRDCalibraFillHisto->SetSubVersionGainLocalUsed(fSubVersionGainLocalUsed); // Gain Used
+ fTRDCalibraFillHisto->SetFirstRunVdrift(fFirstRunVdrift); // Vdrift Used
fTRDCalibraFillHisto->SetVersionVdriftUsed(fVersionVdriftUsed); // Vdrift Used
fTRDCalibraFillHisto->SetSubVersionVdriftUsed(fSubVersionVdriftUsed); // Vdrift Used
fTRDCalibraFillHisto->InitCalDet();
PostData(1, fListHist);
return;
}
+
+ const char* type = fESD->GetBeamType();
+
//printf("Counter %d\n",fCounter);
fCounter++;
+ fNEventsInput->Fill(1);
+
//cout << "maxEvent = " << fMaxEvent << endl;
//if(fCounter%100==0) cout << "fCounter = " << fCounter << endl;
- if((fMaxEvent != 0) && (fMaxEvent < fCounter)) return;
+ if((fMaxEvent != 0) && (fMaxEvent < fCounter)) {
+ PostData(1, fListHist);
+ return;
+ }
//if(fCounter%100==0) cout << "fCounter1 = " << fCounter << endl;
//cout << "event = " << fCounter << endl;
// Check trigger
///////////////////
Bool_t pass = kTRUE;
- Int_t numberOfTriggerSelected = fSelectedTrigger->GetEntriesFast();
- //printf("numberofTriggerSelected %d\n",numberOfTriggerSelected);
- if(fRejected) {
- pass = kTRUE;
- for(Int_t k = 0; k < numberOfTriggerSelected; k++){
- const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
- const TString tString=obString->GetString();
- if(fESD->IsTriggerClassFired((const char*)tString)) {
- pass = kFALSE;
+
+ if (strstr(type,"p-p")) {
+
+ //printf("Will check the triggers\n");
+
+ Int_t numberOfTriggerSelected = fSelectedTrigger->GetEntriesFast();
+ //printf("numberofTriggerSelected %d\n",numberOfTriggerSelected);
+ if(fRejected) {
+ pass = kTRUE;
+ for(Int_t k = 0; k < numberOfTriggerSelected; k++){
+ const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
+ const TString tString=obString->GetString();
+ if(fESD->IsTriggerClassFired((const char*)tString)) {
+ pass = kFALSE;
+ }
}
}
- }
- else {
- pass = kFALSE;
- for(Int_t k = 0; k < numberOfTriggerSelected; k++){
- const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
- const TString tString=obString->GetString();
- if(fESD->IsTriggerClassFired((const char*)tString)) {
- pass = kTRUE;
+ else {
+ pass = kFALSE;
+ for(Int_t k = 0; k < numberOfTriggerSelected; k++){
+ const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
+ const TString tString=obString->GetString();
+ if(fESD->IsTriggerClassFired((const char*)tString)) {
+ pass = kTRUE;
+ }
}
}
+ if(!pass) {
+ PostData(1, fListHist);
+ return;
+ }
+
}
- if(!pass) {
- PostData(1, fListHist);
- return;
- }
+
//printf("Class Fired %s\n",(const char*)fESD->GetFiredTriggerClasses());
//printf("Trigger passed\n");
//printf("Primary vertex passed\n");
+ //////////////////////////////////////
+ // Requirement on number of good tracks
+ //////////////////////////////////////
+ Int_t nGoodParticles = 0;
+ Double_t nbTracks = fESD->GetNumberOfTracks();
+ for(Int_t itrack = 0; itrack < nbTracks; itrack++) {
+ if(ParticleGood(itrack)) nGoodParticles++;
+ }
+ if(fDebug > 0) {
+ // Centrality
+ AliCentrality *esdCentrality = fESD->GetCentrality();
+ Float_t centrality = esdCentrality->GetCentralityPercentile("V0M");
+ //Float_t centralityb = esdCentrality->GetCentralityPercentile("CL1");
+ fNbGoodTracks->Fill(nGoodParticles,centrality);
+ //printf("centrality %f, centralityb %f\n",centrality,centralityb);
+ }
+
+ if (strstr(type,"Pb-Pb")) {
+ //printf("Will check the number of good tracks\n");
+ if((nGoodParticles < fMinNbTracks) || (nGoodParticles > fMaxNbTracks)) {
+ PostData(1, fListHist);
+ return;
+ }
+ }
+
fNEvents->Fill(1);
// In total
// TPC
Int_t nbtrackTPC = 0;
- Double_t nbTracks = fESD->GetNumberOfTracks();
- //printf("Number of tracks %f\n",nbTracks);
+
if (nbTracks <= 0.0) {
PostData(1, fListHist);
return;
}
+
+ if(fESDfriend->TestSkipBit()) {
+ PostData(1, fListHist);
+ return;
+ }
//printf("has friends\n");
first += 1;
}
else {
- histolinearfitsum ->Add(linearfit->GetLinearFitterHisto(det));
+ if (histolinearfitsum) {
+ histolinearfitsum->Add(linearfit->GetLinearFitterHisto(det));
+ }
}
}
}
if(!listcalibTask) return;
TH1I *nEvents = (TH1I *) listcalibTask->FindObject("NEvents");
+ TH1I *nEventsInput = (TH1I *) listcalibTask->FindObject("NEventsInput");
TH2F *absoluteGain = (TH2F *) listcalibTask->FindObject("AbsoluteGain");
TH1F *trdTrack = (TH1F *) listcalibTask->FindObject("TRDTrack");
//
+ TH1I *inEventsInput = (TH1I *) fListHist->FindObject("NEventsInput");
TH1I *inEvents = (TH1I *) fListHist->FindObject("NEvents");
TH2F *iabsoluteGain = (TH2F *) fListHist->FindObject("AbsoluteGain");
// Add
+
+ if(nEventsInput) {
+ if(inEventsInput) {
+ inEventsInput->Add(nEventsInput);
+ //printf("Add Events\n");
+ }
+ else {
+ //printf("Create new Events\n");
+ inEventsInput = new TH1I(*nEventsInput);
+ fListHist->Add(inEventsInput);
+ }
+ }
if(nEvents) {
if(inEvents) {
if(os->GetString().Contains("TRD/Calib/ChamberGainFactor")){
// Get Old gain calibration
AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+ fFirstRunGain = id->GetFirstRun();
fVersionGainUsed = id->GetVersion();
fSubVersionGainUsed = id->GetSubVersion();
} else if(os->GetString().Contains("TRD/Calib/ChamberVdrift")){
// Get Old drift velocity calibration
AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+ fFirstRunVdrift = id->GetFirstRun();
fVersionVdriftUsed = id->GetVersion();
fSubVersionVdriftUsed = id->GetSubVersion();
} else if(os->GetString().Contains("TRD/Calib/LocalGainFactor")){
// Get Old drift velocity calibration
AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+ fFirstRunGainLocal = id->GetFirstRun();
fVersionGainLocalUsed = id->GetVersion();
fSubVersionGainLocalUsed = id->GetSubVersion();
}
//printf("VersionGain %d, SubversionGain %d, VersionLocalGain %d, Subversionlocalgain %d, Versionvdrift %d, Subversionvdrift %d\n",fVersionGainUsed,fSubVersionGainUsed,fVersionGainLocalUsed,fSubVersionGainLocalUsed,fVersionVdriftUsed,fSubVersionVdriftUsed);
// Check
- if((fVersionGainUsed < 0) || (fVersionGainLocalUsed < 0) || (fSubVersionGainUsed < 0) || (fSubVersionGainLocalUsed < 0) || (fVersionVdriftUsed < 0) || (fSubVersionVdriftUsed < 0)) {
+ if((fFirstRunGain < 0) ||
+ (fFirstRunGainLocal < 0) ||
+ (fFirstRunVdrift < 0) ||
+ (fVersionGainUsed < 0) ||
+ (fVersionGainLocalUsed < 0) ||
+ (fSubVersionGainUsed < 0) ||
+ (fSubVersionGainLocalUsed < 0) ||
+ (fVersionVdriftUsed < 0) ||
+ (fSubVersionVdriftUsed < 0)) {
AliError("No recent calibration found");
return kFALSE;
}
else return kTRUE;
}
+//_________________________________________________________________________________________________________________________
+Bool_t AliTRDCalibTask::ParticleGood(int i) const {
+
+ //
+ // Definition of good tracks
+ //
+
+
+ AliESDtrack *track = fESD->GetTrack(i);
+ if (!track->IsOn(AliESDtrack::kTPCrefit)) return 0; // TPC refit
+ if (track->GetTPCNcls() < 90) return 0; // number of TPC clusters
+ if (fabs(track->Eta())>0.8) return 0; // fiducial pseudorapidity
+ Float_t r,z;
+ track->GetImpactParametersTPC(r,z);
+ if (fabs(z)>2.0) return 0; // impact parameter in z
+ if (fabs(r)>2.0) return 0; // impact parameter in xy
+ if (r==0) return 0;
+ return 1;
+
+
+}
+