1 // $Id: AliJDataManager.cxx,v 1.13 2008/02/12 15:51:27 djkim Exp $
2 ////////////////////////////////////////////////////
4 \file AliJDataManager.cxx
6 \author J. Rak, D.J.Kim, B.S Chang (University of Jyvaskyla)
7 \email: djkim@cc.jyu.fi
8 \version $Revision: 1.13 $
9 \date $Date: 2008/02/12 15:51:27 $
11 ////////////////////////////////////////////////////
14 #include "AliJDataManager.h"
22 #include <TClonesArray.h>
24 #include "AliJConst.h"
25 #include "AliJBaseTrack.h"
26 #include "AliJTrack.h"
27 #include "AliJMCTrack.h"
28 #include "AliJPhoton.h"
29 #include "AliJEventHeader.h"
30 // TODO #include "AliESDVZERO.h"
31 #include "AliJHistos.h"
34 #include "AliJEventPool.h"
36 #include "AliJRunHeader.h"
37 #include "AliJCorrelations.h"
38 #include "AliJTrackCut.h"
39 #include <AliJRunTable.h>
41 //______________________________________________________________________________
42 AliJDataManager::AliJDataManager(AliJCard *inCard, AliJHistos *histin, AliJCorrelations *corrin, Bool_t execLocal ):
46 fcorrelations(corrin),
49 fEventHeaderList(NULL),
53 fPhotonListRecalib(NULL),
54 fCellListRecalib(NULL),
58 fhadronSelectionCut(0),
61 fExecLocal(execLocal),
66 fChain = new TChain("JODTree");
67 fhadronSelectionCut = int(fCard->Get("HadronSelectionCut"));
70 fTriggerMask = fCard->Get("TriggerMask");
72 fTrackCut = new AliJTrackCut;
75 //______________________________________________________________________________
76 AliJDataManager::~AliJDataManager(){
78 if( fChain ) delete fChain;
79 if( fTrackCut) delete fTrackCut;
82 //______________________________________________________________________________
83 AliJDataManager::AliJDataManager() :
90 fEventHeaderList(NULL),
94 fPhotonListRecalib(NULL),
95 fCellListRecalib(NULL),
99 fhadronSelectionCut(0),
106 // default constructor
109 //______________________________________________________________________________
110 AliJDataManager::AliJDataManager(const AliJDataManager& obj) :
113 fhistos(obj.fhistos),
114 fcorrelations(obj.fcorrelations),
115 fRunHeader(obj.fRunHeader),
116 fEventHeader(obj.fEventHeader),
117 fEventHeaderList(obj.fEventHeaderList),
118 fTrackList(obj.fTrackList),
119 fPhotonList(obj.fPhotonList),
120 fCellList(obj.fCellList),
121 fPhotonListRecalib(obj.fPhotonListRecalib),
122 fCellListRecalib(obj.fCellListRecalib),
123 fMCTrackList(obj.fMCTrackList),
124 fVZEROData(obj.fVZEROData),
125 fRunInfoList(obj.fRunInfoList),
126 fhadronSelectionCut(obj.fhadronSelectionCut),
127 fFilterMap(obj.fFilterMap),
129 fExecLocal(obj.fExecLocal),
130 fTriggerMask(obj.fTriggerMask),
131 fTrackCut(obj.fTrackCut)
133 // copy constructor TODO: proper handling of pointer data members
137 //______________________________________________________________________________
138 AliJDataManager& AliJDataManager::operator=(const AliJDataManager& obj){
139 // equal sign TODO: contents
145 //______________________________________________________________________________
147 bool AliJDataManager::IsGoodEvent(){
149 if(fEventHeader==NULL) return false;
150 int nContributorVtx = fEventHeader->GetVtxMult();
151 double zVert = fEventHeader->GetZVertex();
152 UInt_t triggermaskJCorran = fEventHeader->GetTriggerMaskJCorran();
153 //double ZVertErr = fEventHeader->GetZVertexErr();
154 bool goodVertex = kFALSE;
155 bool triggerred = (IsSelectedTrigger((int) triggermaskJCorran)); // CUT1
157 bool aMB = triggermaskJCorran & ( 1<< kMinBiasTriggerBitJCorran );
158 bool aCentral = triggermaskJCorran & ( 1<<kCentralTriggerBitJCorran );
159 bool aSemiCentral = triggermaskJCorran & ( 1<<kSemiCentralTriggerBitJCorran );
162 for( int i=0;i<32;i++ ){
163 cout<<(triggermaskJCorran&(1<<i)?1:0)<<" ";
168 if( aMB ) fhistos->fhEvents->Fill( 10 );
169 if( aCentral ) fhistos->fhEvents->Fill( 11 );
170 if( aSemiCentral ) fhistos->fhEvents->Fill( 12 );
171 if( aMB || aCentral ) fhistos->fhEvents->Fill( 13 );
172 if( aMB || aCentral || aSemiCentral ) fhistos->fhEvents->Fill( 14 );
174 for( int i=0;i < 31 ;i++ ){
175 if( fEventHeader->GetTriggerMaskAlice() & BIT(i) )
176 fhistos->fhEventTrigger->Fill(i);
178 fhistos->fhEventTrigger->Fill(41);
181 if(!AliJRunTable::GetInstance().IsHeavyIon()){ //pp data
182 if(fRunHeader->GetRunNumber() >= 146686 && fRunHeader->GetRunNumber() <= 146860){ //p+p 2.76
183 if(!(fEventHeader->GetTriggerMaskAlice() & (1<<13))) triggerred= kFALSE; //noSDD CINT1-B-NOPF-FASTNOTRD
184 // Check with BS again about woSDD
190 if(AliJRunTable::GetInstance().IsPA()){ //p+Pb
192 //(fEventHeader->GetTriggerMaskAlice() & (1<<20)) ) // kINT7 MB
193 ////(fEventHeader->GetTriggerMaskJCorran() & (1<<3)) ) // Emc1Gamma
194 (fEventHeader->GetTriggerMaskJCorran() & (1<<4)) ) // kEMCEJE
195 triggerred= kTRUE; //
196 // Check with BS again about woSDD
199 //6 CINT7-B-NOPF-ALLNOTRD
200 //7 CINT7-ACE-NOPF-ALLNOTRD
201 //8 CINT7-A-NOPF-ALLNOTRD
202 //9 CINT7-C-NOPF-ALLNOTRD
203 //17 CEMC7EG1-B-NOPF-ALLNOTRD
204 //18 CEMC7EG2-B-NOPF-ALLNOTRD
205 //19 CEMC7EJ1-B-NOPF-ALLNOTRD
206 //20 CEMC7EJ2-B-NOPF-ALLNOTRD
208 //Emc1GammaTriggerBitJCorran
211 fhistos->fhEvents->Fill( 1 );
212 if(nContributorVtx==0){
213 fhistos->fhVertexZTriggVtx->Fill(nContributorVtx,0.);
215 fhistos->fhEvents->Fill( 2 );
216 //cout<<zVert << endl;
217 fhistos->fhZVertRaw->Fill(zVert);
218 //fhistos->fhZVertRawErr->Fill(ZVertErr);
219 fhistos->fhVertexZTriggVtx->Fill(nContributorVtx,zVert);
220 goodVertex = (bool) fCard->VertInZRange(zVert);
223 fhistos->fhEvents->Fill( 3 );
226 //Trigger to be selected from the JCorran trigger mask is specified in the fCard
227 //if(( IsSelectedTrigger((int) triggermaskJCorran )
228 // || ( fCard->MbTrigger((int) triggermaskJCorran ) && fCard->MixMBForPi0Mass() ))
231 && goodVertex ){ //Cut2
233 fhistos->fhEvents->Fill( 4 );
240 //______________________________________________________________________________
241 void AliJDataManager::RegisterList(TClonesArray* listToFill, TClonesArray* listFromToFill,
242 int cBin, int zBin, particleType whatToFill){
243 // corrType whatCorrType){
245 // this is here just to silence the bloody rule checker
248 JUNUSED(listFromToFill);
249 JUNUSED( listToFill );
251 int noIn=0, counter=0;
252 // Double_t pid[10]={0};
253 // bool isAliPion = 0;
254 // bool isAliKaon = 0;
255 // bool isAliProton = 0;
257 switch (whatToFill) {
264 noIn = fTrackList->GetEntriesFast();
267 for(int ii=0;ii<noIn;ii++){ // loop for all tracks
268 AliJTrack *cgl = (AliJTrack*)fTrackList->At(ii);
269 //if(fhadronSelectionCut == kTrackCutJFG || fhadronSelectionCut == kTrackCutHBT) cgl->SetUseTPCTrack();
271 // checking bit convention
272 for(int iTrackSelection=0; iTrackSelection<32; iTrackSelection++) {
273 if( cgl->IsFiltered(iTrackSelection) ) fhistos->fhTrackSelection->Fill( iTrackSelection );
275 for(int iTrackSelection=0; iTrackSelection<32; iTrackSelection++) {
276 if( cgl->TestBit(BIT(iTrackSelection)) ) fhistos->fhTrackSelection->Fill( iTrackSelection+50 );
280 //&& ( cgl->GetFilterMap() & GetFilterMap() )
281 && fTrackCut->IsSelected( cgl, fhadronSelectionCut )
282 && fTrackCut->SetMomentum( cgl, fhadronSelectionCut )
283 && fCard->IsInEtaRange(cgl->Eta())
286 cgl->SetParticleType(kJHadron);
287 new ((*listToFill)[counter++]) AliJTrack(*cgl);
294 noIn = fTrackList->GetEntriesFast();
296 for(int ii=0;ii<noIn;ii++){ // loop for all tracks
297 AliJTrack *cgl = (AliJTrack*)fTrackList->At(ii);
298 Double32_t prob = 0.9;//cgl->GetPID(AliJTrack::kProtonAliJ, AliJTrack::kTPCTOF);
299 //cout << AliJTrack::kProtonAli <<"\t"<< AliJTrack::kTPCTOF <<"\t"<< prob<< endl;
300 //Double32_t prob = cgl->GetPID(AliJTrack::AliJTrkPID(4), AliJTrack::AliJTrkPIDmethod(2));
302 && fCard->IsInEtaRange(cgl->Eta())
303 && ( cgl->GetFilterMap() & GetFilterMap() )
305 ){ // All cuts applied in the Train production stage
307 cgl->SetParticleType(kJHadron);
308 new ((*listToFill)[counter++]) AliJTrack(*cgl);
314 cout<<"Unknown particle type in JDatamenager.cxx/fillList()"<<endl;
318 // make the indexing correct
319 listToFill->Compress();
323 //______________________________________________________________________________
324 void AliJDataManager::ChainInputStream(const char* infileList){
329 // read root nano data files in a list
331 ifstream infiles(infileList);
332 while ( infiles >> inFile){
337 if(fChain->GetEntriesFast()<=0){
338 cout<<"Empty chain from "<<infileList<<endl;
341 cout<<Form("there are %d events.\n", (int)fChain->GetEntries())<<endl;
344 if( fChain->FindBranch("HeaderList") )
345 fChain->SetBranchAddress("HeaderList", &fEventHeaderList);
346 if( fChain->FindBranch("TrackList") )
347 fChain->SetBranchAddress("TrackList", &fTrackList);
348 if( fChain->FindBranch("PhotonList") )
349 fChain->SetBranchAddress("PhotonList", &fPhotonList);
350 if( fChain->FindBranch("CaloCellList") )
351 fChain->SetBranchAddress("CaloCellList", &fCellList);
352 if( fChain->FindBranch("MCTrackList") )
353 fChain->SetBranchAddress("MCTrackList", &fMCTrackList);
355 if( AliJRunTable::GetInstance().IsHeavyIon() && fChain->FindBranch("AliESDVZERO")) { // if fevent-plane sources were stored
356 fChain->SetBranchAddress("AliESDVZERO", &fVZEROData);
357 // TODO for FMD, TZERO
360 // fChain->SetBranchAddress("AliJMCTrackList", &fMCTrackList);
363 TFile* firstfile = fChain->GetFile();
364 cout<<"============================================DEBUG 10 "<<endl;
365 TList *fUserInfo =(TList*) firstfile->Get("RunInfo");
367 fRunHeader=(AliJRunHeader*) fUserInfo->First();
370 fRunHeader=(AliJRunHeader*) fRunInfoList->First();
374 fRunHeader->PrintOut();
380 //______________________________________________________________________________
381 Double_t AliJDataManager::LoadEvent(int ievt){
382 //clear clones array and counters
383 //load the new fevent
390 //fChain->GetEntry(ievt);
393 //if( fExperiment == kMC ){
394 // return fMCJDmg->GenerateEvent();
396 v = ((TTree*)fChain)->GetEntry(ievt);
398 fp = fChain->GetCurrentFile()->GetPath();
400 cout << fp.Data() << endl;
406 fEventHeader = dynamic_cast<AliJEventHeader*>(fEventHeaderList->At(0));