From afc42102c4f0db8453dcb06ca5063a72216b7d88 Mon Sep 17 00:00:00 2001 From: kowal2 Date: Fri, 20 Jul 2001 14:32:44 +0000 Subject: [PATCH] Processing of many events possible now --- TPC/AliDigitsArray.cxx | 5 +- TPC/AliTPC.cxx | 189 ++++++++++++------- TPC/AliTPC.h | 16 +- TPC/AliTPCComparison.C | 354 ++++++++++++++++++++---------------- TPC/AliTPCDisplayClusters.C | 9 +- TPC/AliTPCFindClusters.C | 20 +- TPC/AliTPCFindTracks.C | 12 +- TPC/AliTPCHits2Digits.C | 68 ++----- TPC/AliTPCclusterer.cxx | 25 ++- TPC/AliTPCclusterer.h | 2 +- TPC/AliTPCtracker.cxx | 35 +++- TPC/AliTPCtracker.h | 7 +- TPC/TPCLinkDef.h | 4 + 13 files changed, 437 insertions(+), 309 deletions(-) diff --git a/TPC/AliDigitsArray.cxx b/TPC/AliDigitsArray.cxx index bf91cc74756..3021fb38b27 100644 --- a/TPC/AliDigitsArray.cxx +++ b/TPC/AliDigitsArray.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.3 2000/10/05 16:03:07 kowal2 +Forward declarations. Destructor made virtual. + Revision 1.2 2000/04/17 09:37:33 kowal2 removed obsolete AliTPCDigitsDisplay.C @@ -54,7 +57,7 @@ AliDigitsArray::AliDigitsArray() AliDigitsArray::~AliDigitsArray() { - if (fParam != 0) delete fParam; + // if (fParam != 0) delete fParam; } Bool_t AliDigitsArray::Setup(AliDetectorParam *param) diff --git a/TPC/AliTPC.cxx b/TPC/AliTPC.cxx index 8148aacaf8e..88b7c6cd888 100644 --- a/TPC/AliTPC.cxx +++ b/TPC/AliTPC.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.37 2001/06/12 07:17:18 kowal2 +Hits2SDigits method implemented (summable digits) + Revision 1.36 2001/05/16 14:57:25 alibrary New files for folders and Stack @@ -134,7 +137,9 @@ Introduction of the Copyright and cvs Log #include #include "TParticle.h" #include "AliTPC.h" -#include +#include +#include +#include #include "AliRun.h" #include #include @@ -183,7 +188,7 @@ AliTPC::AliTPC() //MI changes fDigitsArray = 0; fClustersArray = 0; - fTPCParam=0; + fDefaults = 0; fTrackHits = 0; fHitType = 2; fTPCParam = 0; @@ -204,6 +209,7 @@ AliTPC::AliTPC(const char *name, const char *title) //MI change fDigitsArray = 0; fClustersArray= 0; + fDefaults = 0; // fTrackHits = new AliTPCTrackHits; //MI - 13.09.2000 fTrackHits->SetHitPrecision(0.002); @@ -225,8 +231,9 @@ AliTPC::AliTPC(const char *name, const char *title) // Set TPC parameters // - if (!strcmp(title,"Default")) { - fTPCParam = new AliTPCParamSR; + + if (!strcmp(title,"Default")) { + fTPCParam = new AliTPCParamSR; } else { cerr<<"AliTPC warning: in Config.C you must set non-default parameters\n"; fTPCParam=0; @@ -776,18 +783,18 @@ void AliTPC::CreateMaterials() } -void AliTPC::Digits2Clusters(TFile *of) +void AliTPC::Digits2Clusters(TFile *of, Int_t eventnumber) { //----------------------------------------------------------------- // This is a simple cluster finder. //----------------------------------------------------------------- - AliTPCclusterer::Digits2Clusters(fTPCParam,of); + AliTPCclusterer::Digits2Clusters(fTPCParam,of,eventnumber); } extern Double_t SigmaY2(Double_t, Double_t, Double_t); extern Double_t SigmaZ2(Double_t, Double_t); //_____________________________________________________________________________ -void AliTPC::Hits2Clusters(TFile *of) +void AliTPC::Hits2Clusters(TFile *of, Int_t eventn) { //-------------------------------------------------------- // TPC simple cluster generator from hits @@ -826,10 +833,7 @@ void AliTPC::Hits2Clusters(TFile *of) return; } - if(fTPCParam == 0){ - printf("AliTPCParam MUST be created firstly\n"); - return; - } + //if(fDefaults == 0) SetDefaults(); Float_t sigmaRphi,sigmaZ,clRphi,clZ; // @@ -851,6 +855,10 @@ void AliTPC::Hits2Clusters(TFile *of) //Switch to the output file of->cd(); + char cname[100]; + + sprintf(cname,"TreeC_TPC_%d",eventn); + fTPCParam->Write(fTPCParam->GetTitle()); AliTPCClustersArray carray; carray.Setup(fTPCParam); @@ -980,7 +988,7 @@ void AliTPC::Hits2Clusters(TFile *of) cerr<<"Number of made clusters : "<Write(); + carray.GetTree()->Write(cname); savedir->cd(); //switch back to the input file @@ -1143,88 +1151,103 @@ void AliTPC::Hits2ExactClustersSector(Int_t isec) } //___________________________________________ -void AliTPC::SDigits2Digits() +void AliTPC::SDigits2Digits(Int_t eventnumber) { + + + cerr<<"Digitizing TPC...\n"; + + Hits2Digits(eventnumber); + + + //write results + + // char treeName[100]; + + // sprintf(treeName,"TreeD_%s_%d",fTPCParam->GetTitle(),eventnumber); + + // GetDigitsArray()->GetTree()->Write(treeName); +} +//__________________________________________________________________ +void AliTPC::SetDefaults(){ + + + cerr<<"Setting default parameters...\n"; + + // Set response functions + AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60"); AliTPCPRF2D * prfinner = new AliTPCPRF2D; AliTPCPRF2D * prfouter = new AliTPCPRF2D; AliTPCRF1D * rf = new AliTPCRF1D(kTRUE); - - TDirectory *cwd = gDirectory; rf->SetGauss(param->GetZSigma(),param->GetZWidth(),1.); rf->SetOffset(3*param->GetZSigma()); rf->Update(); + + TDirectory *savedir=gDirectory; TFile *f=TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root"); if (!f->IsOpen()) { - cerr<<"Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !\n"; + cerr<<"Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !\n" ; exit(3); } prfinner->Read("prf_07504_Gati_056068_d02"); prfouter->Read("prf_10006_Gati_047051_d03"); f->Close(); - cwd->cd(); - + savedir->cd(); + param->SetInnerPRF(prfinner); param->SetOuterPRF(prfouter); param->SetTimeRF(rf); + // set fTPCParam + SetParam(param); - cerr<<"Digitizing TPC...\n"; + + fDefaults = 1; + +} +//__________________________________________________________________ +void AliTPC::Hits2Digits(Int_t eventnumber) +{ + //---------------------------------------------------- + // Loop over all sectors for a single event + //---------------------------------------------------- + + + if(fDefaults == 0) SetDefaults(); // check if the parameters are set //setup TPCDigitsArray + + if(GetDigitsArray()) delete GetDigitsArray(); + AliTPCDigitsArray *arr = new AliTPCDigitsArray; arr->SetClass("AliSimDigits"); - arr->Setup(param); - SetParam(param); - + arr->Setup(fTPCParam); arr->MakeTree(fDigitsFile); - SetDigitsArray(arr); - Hits2Digits(); - - // Hits2DigitsSector(1); - // Hits2DigitsSector(2); - // Hits2DigitsSector(3); - // Hits2DigitsSector(1+18); - // Hits2DigitsSector(2+18); - // Hits2DigitsSector(3+18); - - // Hits2DigitsSector(36+1); - // Hits2DigitsSector(36+2); - // Hits2DigitsSector(36+3); - // Hits2DigitsSector(36+1+18); - // Hits2DigitsSector(36+2+18); - // Hits2DigitsSector(36+3+18); - - //write results + fDigitsSwitch=0; // standard digits - char treeName[100]; - sprintf(treeName,"TreeD_%s",param->GetTitle()); - GetDigitsArray()->GetTree()->Write(treeName,TObject::kOverwrite); -} + cerr<<"Digitizing TPC...\n"; -//__________________________________________________________________ -void AliTPC::Hits2Digits() -{ - //---------------------------------------------------- - // Loop over all sectors - //---------------------------------------------------- + for(Int_t isec=0;isecGetNSector();isec++) Hits2DigitsSector(isec); - if(fTPCParam == 0){ - printf("AliTPCParam MUST be created firstly\n"); - return; - } + // write results + + char treeName[100]; + + sprintf(treeName,"TreeD_%s_%d",fTPCParam->GetTitle(),eventnumber); - fDigitsSwitch=0; + GetDigitsArray()->GetTree()->Write(treeName); - for(Int_t isec=0;isecGetNSector();isec++) Hits2DigitsSector(isec); } + + //__________________________________________________________________ -void AliTPC::Hits2SDigits() +void AliTPC::Hits2SDigits(Int_t eventnumber) { //----------------------------------------------------------- @@ -1232,20 +1255,41 @@ void AliTPC::Hits2SDigits() //----------------------------------------------------------- //---------------------------------------------------- - // Loop over all sectors + // Loop over all sectors for a single event //---------------------------------------------------- - if(fTPCParam == 0){ - printf("AliTPCParam MUST be created firstly\n"); - return; - } - - fDigitsSwitch=1; + + if(fDefaults == 0) SetDefaults(); + + //setup TPCDigitsArray + + if(GetDigitsArray()) delete GetDigitsArray(); + + AliTPCDigitsArray *arr = new AliTPCDigitsArray; + arr->SetClass("AliSimDigits"); + arr->Setup(fTPCParam); + arr->MakeTree(fDigitsFile); + SetDigitsArray(arr); + + cerr<<"Digitizing TPC...\n"; + + fDigitsSwitch=1; // summable digits for(Int_t isec=0;isecGetNSector();isec++) Hits2DigitsSector(isec); + + // write results + + char treeName[100]; + + sprintf(treeName,"TreeS_%s_%d",fTPCParam->GetTitle(),eventnumber); + + GetDigitsArray()->GetTree()->Write(treeName); + } + + //_____________________________________________________________________________ void AliTPC::Hits2DigitsSector(Int_t isec) { @@ -1261,6 +1305,10 @@ void AliTPC::Hits2DigitsSector(Int_t isec) // Get the access to the track hits //------------------------------------------------------- + // check if the parameters are set - important if one calls this method + // directly, not from the Hits2Digits + + if(fDefaults == 0) SetDefaults(); TTree *tH = gAlice->TreeH(); // pointer to the hits tree Stat_t ntracks = tH->GetEntries(); @@ -1273,7 +1321,7 @@ void AliTPC::Hits2DigitsSector(Int_t isec) TObjArray **row; - //printf("*** Processing sector number %d ***\n",isec); + printf("*** Processing sector number %d ***\n",isec); Int_t nrows =fTPCParam->GetNRow(isec); @@ -1294,7 +1342,7 @@ void AliTPC::Hits2DigitsSector(Int_t isec) for (i=0;iCreateRow(isec,i); + AliDigits * dig = fDigitsArray->CreateRow(isec,i); DigitizeRow(i,isec,row); @@ -1303,7 +1351,7 @@ void AliTPC::Hits2DigitsSector(Int_t isec) Int_t ndig = dig->GetDigitSize(); - //printf("*** Sector, row, compressed digits %d %d %d ***\n",isec,i,ndig); + printf("*** Sector, row, compressed digits %d %d %d ***\n",isec,i,ndig); fDigitsArray->ClearRow(isec,i); @@ -2497,7 +2545,10 @@ void AliTPC::FindTrackHitsIntersection(TClonesArray * arr) } // end of loop over hits xxxx->Delete(); - - } +//_______________________________________________________________________________ +void AliTPC::Digits2Reco(Int_t eventnumber) +{ + // empty for a time being +} diff --git a/TPC/AliTPC.h b/TPC/AliTPC.h index 6ee3bd7f8de..13a6e35111a 100644 --- a/TPC/AliTPC.h +++ b/TPC/AliTPC.h @@ -24,6 +24,7 @@ class AliTPCTrackHits; // M.I. class AliTPC : public AliDetector { protected: + Int_t fDefaults; Int_t fSens; // ISENS Int_t fSecAL; // Upper sector selector Int_t fSecAU; // Lower sector selector @@ -55,15 +56,16 @@ public: virtual void BuildGeometry(); virtual void CreateGeometry() {} virtual void CreateMaterials(); - virtual void Hits2Clusters(TFile *of); + virtual void Hits2Clusters(TFile *of, Int_t eventn); virtual void Hits2ExactClustersSector(Int_t isec); // MI change calculate "exact" cluster position - virtual void SDigits2Digits(); - virtual void Hits2SDigits(); - virtual void Hits2Digits(); //MI change + virtual void SDigits2Digits(Int_t eventnumber=0); + virtual void Hits2SDigits(Int_t eventnumber=0); + virtual void Digits2Reco(Int_t eventnumber=0); + virtual void Hits2Digits(Int_t eventnumber=0); //MI change virtual void Hits2DigitsSector(Int_t isec); //MI change virtual void Init(); virtual Int_t IsVersion() const =0; - virtual void Digits2Clusters(TFile *of); + virtual void Digits2Clusters(TFile *of, Int_t eventnumber=0); virtual void Clusters2Tracks(TFile *of); Int_t GetNsectors() {return fNsectors;} @@ -112,10 +114,12 @@ public: //middle of the row void SetHitType(Int_t type){fHitType =type;} //set type of hit container void SetDigitsSwitch(Int_t sw){fDigitsSwitch = sw;} + void SetDefSwitch(Int_t def){fDefaults = def;} private: // + void SetDefaults(); void DigitizeRow(Int_t irow,Int_t isec,TObjArray **rowTriplet); Float_t GetSignal(TObjArray *p1, Int_t ntr, TMatrix *m1, TMatrix *m2, Int_t *IndexRange); @@ -128,7 +132,7 @@ private: // index[2] pad row number // index[3] pad row number for which signal is calculated - ClassDef(AliTPC,3) // Time Projection Chamber class + ClassDef(AliTPC,4) // Time Projection Chamber class }; diff --git a/TPC/AliTPCComparison.C b/TPC/AliTPCComparison.C index 48159fa9e05..7c4c1f38dbf 100644 --- a/TPC/AliTPCComparison.C +++ b/TPC/AliTPCComparison.C @@ -4,14 +4,15 @@ #endif struct GoodTrack { + Int_t fEventN; //event number Int_t lab; Int_t code; Float_t px,py,pz; Float_t x,y,z; }; -Int_t good_tracks(GoodTrack *gt, Int_t max); +Int_t good_tracks(GoodTrack *gt, Int_t max, Int_t eventn=1); -Int_t AliTPCComparison() { +Int_t AliTPCComparison(Int_t eventn=1) { cerr<<"Doing comparison...\n"; Int_t i; gBenchmark->Start("AliTPCComparison"); @@ -20,47 +21,70 @@ Int_t AliTPCComparison() { if (!cf->IsOpen()) {cerr<<"Can't open AliTPCclusters.root !\n"; return 1;} AliTPCParam *digp= (AliTPCParam*)cf->Get("75x40_100x60"); if (!digp) { cerr<<"TPC parameters have not been found !\n"; return 2; } - AliTPCtracker *tracker = new AliTPCtracker(digp); -// Load clusters - tracker->LoadInnerSectors(); - tracker->LoadOuterSectors(); -// Load tracks - TFile *tf=TFile::Open("AliTPCtracks.root"); - if (!tf->IsOpen()) {cerr<<"Can't open AliTPCtracks.root !\n"; return 3;} + + /////////// + AliTPCtracker *tracker =0; TObjArray tarray(2000); - TTree *tracktree=(TTree*)tf->Get("TPCf"); - if (!tracktree) {cerr<<"Can't get a tree with TPC tracks !\n"; return 4;} - TBranch *tbranch=tracktree->GetBranch("tracks"); - Int_t nentr=(Int_t)tracktree->GetEntries(); - AliTPCtrack *iotrack=0; - for (i=0; icd(); + tracker = new AliTPCtracker(digp,event); + tracker->LoadInnerSectors(); + tracker->LoadOuterSectors(); + char tname[100]; + if (eventn==-1) { + sprintf(tname,"TreeT_TPC"); + } + else { + sprintf(tname,"TreeT_TPC_%d",event); + } + + // Load tracks + if (!tf->IsOpen()) {cerr<<"Can't open AliTPCtracks.root !\n"; return 3;} + tracktree=(TTree*)tf->Get(tname); + if (!tracktree) {cerr<<"Can't get a tree with TPC tracks !\n"; return 4;} + TBranch *tbranch=tracktree->GetBranch("tracks"); + Int_t nentr0=(Int_t)tracktree->GetEntries(); + nentr+=nentr0; + for (i=0; iSetAddress(&iotrack); tracktree->GetEvent(i); tracker->CookLabel(iotrack,0.1); tarray.AddLast(iotrack); - } - - delete tracker; - + } + eventptr[event+1] = nentr; //store end of the event + delete tracker; + } tf->Close(); cf->Close(); + + //MI change for a moment + ///////////////////////////////////////////////////////////////////////// - GoodTrack gt[15000]; + // GoodTrack gt[15000]; + GoodTrack gt[45000]; + Int_t ngood=0; ifstream in("good_tracks_tpc"); if (in) { cerr<<"Reading good tracks...\n"; - while (in>>gt[ngood].lab>>gt[ngood].code>> + while (in>>gt[ngood].fEventN>>gt[ngood].lab>>gt[ngood].code>> gt[ngood].px>>gt[ngood].py>>gt[ngood].pz>> gt[ngood].x >>gt[ngood].y >>gt[ngood].z) { ngood++; cerr<Write(); tf->Close(); + */ } cerr<<"Number of good tracks : "<Fill(ptg); + Int_t ievent = gt[ngood].fEventN; AliTPCtrack *track=0; - for (i=0; iGetLabel(); if (lab==TMath::Abs(tlab)) break; } - if (i==nentr) { + // if (i==nentr) { + if (i==eventptr[ievent+1]) { + //cerr<<"Track "<GetLabel())) micount++; } @@ -302,8 +335,8 @@ Int_t AliTPCComparison() { } -Int_t good_tracks(GoodTrack *gt, Int_t max) { - Int_t nt=0; +Int_t good_tracks(GoodTrack *gt, Int_t max, Int_t eventn) { + //eventn - number of events in file TFile *file=TFile::Open("rfio:galice.root"); if (!file->IsOpen()) {cerr<<"Can't open galice.root !\n"; exit(4);} @@ -313,7 +346,7 @@ Int_t good_tracks(GoodTrack *gt, Int_t max) { exit(5); } - Int_t np=gAlice->GetEvent(0); + // Int_t np=gAlice->GetEvent(0); //MI change AliTPC *TPC=(AliTPC*)gAlice->GetDetector("TPC"); Int_t ver = TPC->IsVersion(); @@ -329,134 +362,145 @@ Int_t good_tracks(GoodTrack *gt, Int_t max) { Int_t gap=Int_t(0.125*nrows); Int_t good_number=Int_t(0.4*nrows); - Int_t *good=new Int_t[np]; - for (Int_t ii=0; iiIsOpen()){cerr<<"Can't open AliTPCclusters.root !\n";exit(5);} - AliTPCClustersArray *ca=new AliTPCClustersArray; - ca->Setup(digp); - ca->SetClusterType("AliTPCcluster"); - ca->ConnectTree("Segment Tree"); - Int_t nrows=Int_t(ca->GetTree()->GetEntries()); - for (Int_t n=0; nLoadEntry(n); - Int_t sec,row; - digp->AdjustSectorRow(s->GetID(),sec,row); - AliTPCClustersRow &clrow = *ca->GetRow(sec,row); - Int_t ncl=clrow.GetArray()->GetEntriesFast(); - while (ncl--) { - AliTPCcluster *c=(AliTPCcluster*)clrow[ncl]; - Int_t lab=c->GetLabel(0); - if (lab<0) continue; //noise cluster - lab=TMath::Abs(lab); - if (sec>=digp->GetNInnerSector()) - if (row==nrow_up-1 ) good[lab]|=0x1000; - if (sec>=digp->GetNInnerSector()) - if (row==nrow_up-1-gap) good[lab]|=0x800; - good[lab]++; - } - ca->ClearRow(sec,row); - } - cf->Close(); - } - break; - case 2: - TD=(TTree*)gDirectory->Get("TreeD_75x40_100x60"); - TD->GetBranch("Segment")->SetAddress(&digits); - count = new Int_t[np]; - Int_t i; - for (i=0; iGetEntries(); - for (i=0; iGetEvent(i)) continue; - Int_t sec,row; - digp->AdjustSectorRow(digits->GetID(),sec,row); - cerr<First(); - do { //Many thanks to J.Chudoba who noticed this - Int_t it=digits->CurrentRow(), ip=digits->CurrentColumn(); - Short_t dig = digits->GetDigit(it,ip); - Int_t idx0=digits->GetTrackID(it,ip,0); - Int_t idx1=digits->GetTrackID(it,ip,1); - Int_t idx2=digits->GetTrackID(it,ip,2); - if (idx0>=0 && dig>=zero) count[idx0]+=1; - if (idx1>=0 && dig>=zero) count[idx1]+=1; - if (idx2>=0 && dig>=zero) count[idx2]+=1; - } while (digits->Next()); - for (Int_t j=0; j1) { - if (sec>=digp->GetNInnerSector()) - if (row==nrow_up-1 ) good[j]|=0x1000; - if (sec>=digp->GetNInnerSector()) - if (row==nrow_up-1-gap) good[j]|=0x800; - good[j]++; - } - count[j]=0; - } - } - delete[] count; - break; - default: - cerr<<"Invalid TPC version !\n"; - file->Close(); - exit(7); - } - - TTree *TH=gAlice->TreeH(); - Int_t npart=(Int_t)TH->GetEntries(); - while (npart--) { - AliTPChit *hit0=0; - - TPC->ResetHits(); - TH->GetEvent(npart); - AliTPChit * hit = (AliTPChit*) TPC->FirstHit(-1); - while (hit){ - if (hit->fQ==0.) break; + //MI change + Int_t nt=0; //reset counter + char treeName[100]; //declare event identifier + + for (Int_t event=0;eventGetEvent(event); + Int_t *good=new Int_t[np]; + for (Int_t ii=0; iiIsOpen()){cerr<<"Can't open AliTPCclusters.root !\n";exit(5);} + AliTPCClustersArray *ca=new AliTPCClustersArray; + ca->Setup(digp); + ca->SetClusterType("AliTPCcluster"); + ca->ConnectTree("Segment Tree"); + Int_t nrows=Int_t(ca->GetTree()->GetEntries()); + for (Int_t n=0; nLoadEntry(n); + Int_t sec,row; + digp->AdjustSectorRow(s->GetID(),sec,row); + AliTPCClustersRow &clrow = *ca->GetRow(sec,row); + Int_t ncl=clrow.GetArray()->GetEntriesFast(); + while (ncl--) { + AliTPCcluster *c=(AliTPCcluster*)clrow[ncl]; + Int_t lab=c->GetLabel(0); + if (lab<0) continue; //noise cluster + lab=TMath::Abs(lab); + if (sec>=digp->GetNInnerSector()) + if (row==nrow_up-1 ) good[lab]|=0x1000; + if (sec>=digp->GetNInnerSector()) + if (row==nrow_up-1-gap) good[lab]|=0x800; + good[lab]++; + } + ca->ClearRow(sec,row); + } + cf->Close(); + } + break; + case 2: + + sprintf(treeName,"TreeD_75x40_100x60_%d",event); + TD=(TTree*)gDirectory->Get(treeName); + TD->GetBranch("Segment")->SetAddress(&digits); + count = new Int_t[np]; + Int_t i; + for (i=0; iGetEntries(); + for (i=0; iGetEvent(i)) continue; + Int_t sec,row; + digp->AdjustSectorRow(digits->GetID(),sec,row); + cerr<First(); + do { //Many thanks to J.Chudoba who noticed this + Int_t it=digits->CurrentRow(), ip=digits->CurrentColumn(); + Short_t dig = digits->GetDigit(it,ip); + Int_t idx0=digits->GetTrackID(it,ip,0); + Int_t idx1=digits->GetTrackID(it,ip,1); + Int_t idx2=digits->GetTrackID(it,ip,2); + if (idx0>=0 && dig>=zero) count[idx0]+=1; + if (idx1>=0 && dig>=zero) count[idx1]+=1; + if (idx2>=0 && dig>=zero) count[idx2]+=1; + } while (digits->Next()); + for (Int_t j=0; j1) { + if (sec>=digp->GetNInnerSector()) + if (row==nrow_up-1 ) good[j]|=0x1000; + if (sec>=digp->GetNInnerSector()) + if (row==nrow_up-1-gap) good[j]|=0x800; + good[j]++; + } + count[j]=0; + } + } + delete[] count; + break; + default: + cerr<<"Invalid TPC version !\n"; + file->Close(); + exit(7); + } + + TTree *TH=gAlice->TreeH(); + Int_t npart=(Int_t)TH->GetEntries(); + + while (npart--) { + AliTPChit *hit0=0; + + TPC->ResetHits(); + TH->GetEvent(npart); + AliTPChit * hit = (AliTPChit*) TPC->FirstHit(-1); + while (hit){ + if (hit->fQ==0.) break; hit = (AliTPChit*) TPC->NextHit(); - } - if (hit) { - hit0 = new AliTPChit(*hit); //Make copy of hit - hit = hit0; - } - else continue; - AliTPChit *hit1=(AliTPChit*)TPC->NextHit(); - if (hit1==0) continue; - if (hit1->fQ != 0.) continue; - Int_t i=hit->Track(); - TParticle *p = (TParticle*)gAlice->Particle(i); - - if (p->GetFirstMother()>=0) continue; //secondary particle - if (good[i] < 0x1000+0x800+2+good_number) continue; - if (p->Pt()<0.100) continue; - if (TMath::Abs(p->Pz()/p->Pt())>0.999) continue; - - gt[nt].lab=i; - gt[nt].code=p->GetPdgCode(); -//**** px py pz - in global coordinate system, x y z - in local ! - gt[nt].px=hit->X(); gt[nt].py=hit->Y(); gt[nt].pz=hit->Z(); - Float_t cs,sn; digp->AdjustCosSin(hit1->fSector,cs,sn); - gt[nt].x = hit1->X()*cs + hit1->Y()*sn; - gt[nt].y =-hit1->X()*sn + hit1->Y()*cs; - gt[nt].z = hit1->Z(); - nt++; - if (hit0) delete hit0; - cerr<NextHit(); + if (hit1==0) continue; + if (hit1->fQ != 0.) continue; + Int_t i=hit->Track(); + TParticle *p = (TParticle*)gAlice->Particle(i); + + if (p->GetFirstMother()>=0) continue; //secondary particle + if (good[i] < 0x1000+0x800+2+good_number) continue; + if (p->Pt()<0.100) continue; + if (TMath::Abs(p->Pz()/p->Pt())>0.999) continue; + + gt[nt].lab=i; + gt[nt].code=p->GetPdgCode(); + //**** px py pz - in global coordinate system, x y z - in local ! + gt[nt].px=hit->X(); gt[nt].py=hit->Y(); gt[nt].pz=hit->Z(); + Float_t cs,sn; digp->AdjustCosSin(hit1->fSector,cs,sn); + gt[nt].fEventN=event; //MI change + gt[nt].x = hit1->X()*cs + hit1->Y()*sn; + gt[nt].y =-hit1->X()*sn + hit1->Y()*cs; + gt[nt].z = hit1->Z(); + nt++; + if (hit0) delete hit0; + cerr<Close(); diff --git a/TPC/AliTPCDisplayClusters.C b/TPC/AliTPCDisplayClusters.C index 3e6681735b5..89588af14ef 100644 --- a/TPC/AliTPCDisplayClusters.C +++ b/TPC/AliTPCDisplayClusters.C @@ -1,7 +1,7 @@ -Int_t AliTPCDisplayClusters() { +Int_t AliTPCDisplayClusters(Int_t eventn) { cerr<<"Displaying clusters...\n"; - TFile *file=TFile::Open("rfio:galice.root"); + TFile *file=TFile::Open("galice.root"); if (!file->IsOpen()) {cerr<<"Can't open galice.root !\n"; return 1;} TFile *cf=TFile::Open("AliTPCclusters.root"); @@ -21,7 +21,10 @@ Int_t AliTPCDisplayClusters() { AliTPCClustersArray *ca=new AliTPCClustersArray; ca->Setup(dig); ca->SetClusterType("AliTPCcluster"); - ca->ConnectTree("Segment Tree"); + char cname[100]; + sprintf(cname,"TreeC_TPC_%d",eventn); + + ca->ConnectTree(cname); Int_t nrows=Int_t(ca->GetTree()->GetEntries()); for (Int_t n=0; nLoadEntry(n); diff --git a/TPC/AliTPCFindClusters.C b/TPC/AliTPCFindClusters.C index 6d3dbffe99a..4e72316896d 100644 --- a/TPC/AliTPCFindClusters.C +++ b/TPC/AliTPCFindClusters.C @@ -9,7 +9,7 @@ #include "TStopwatch.h" #endif -Int_t AliTPCFindClusters() { +Int_t AliTPCFindClusters(Int_t n) { TFile *out=TFile::Open("AliTPCclusters.root","new"); if (!out->IsOpen()) {cerr<<"Delete old AliTPCclusters.root !\n"; return 1;} TFile *in=TFile::Open("rfio:galice.root"); @@ -22,8 +22,6 @@ Int_t AliTPCFindClusters() { TDirectory *cwd = gDirectory; - gAlice->GetEvent(0); - AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC"); Int_t ver = TPC->IsVersion(); cerr<<"TPC version "<cd(); tpc.Hits2Clusters(out); + tpc.SetParam(dig); timer.Start(); cwd->cd(); + for(Int_t i=0;iGetEvent(i); + tpc.Hits2Clusters(out,i); + } } break; case 2: cerr<<"Looking for clusters...\n"; { - delete gAlice; gAlice=0; + // delete gAlice; gAlice=0; AliTPCv2 tpc; - tpc.SetParam(dig); timer.Start(); cwd->cd(); tpc.Digits2Clusters(out); + tpc.SetParam(dig); timer.Start(); cwd->cd(); + for (Int_t i=0;iClusters2Tracks(0,out); + + for (Int_t i=0;iClusters2Tracks(0,out); + } delete tracker; timer.Stop(); timer.Print(); in->Close(); out->Close(); - return rc; + return 1; } diff --git a/TPC/AliTPCHits2Digits.C b/TPC/AliTPCHits2Digits.C index f849b475dba..11680a91319 100644 --- a/TPC/AliTPCHits2Digits.C +++ b/TPC/AliTPCHits2Digits.C @@ -1,4 +1,4 @@ -Int_t AliTPCHits2Digits() +Int_t AliTPCHits2Digits(Int_t nevent=1) { // new version by J.Belikov @@ -23,68 +23,26 @@ Int_t AliTPCHits2Digits() return 2; } - gAlice->GetEvent(0); - AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC"); - -//Set response functions - - AliTPCParamSR *param=(AliTPCParamSR*)gDirectory->Get("75x40_100x60"); - AliTPCPRF2D * prfinner = new AliTPCPRF2D; - AliTPCPRF2D * prfouter = new AliTPCPRF2D; - AliTPCRF1D * rf = new AliTPCRF1D(kTRUE); - rf->SetGauss(param->GetZSigma(),param->GetZWidth(),1.); - rf->SetOffset(3*param->GetZSigma()); - rf->Update(); - - TDirectory *savedir=gDirectory; - TFile *f=TFile::Open("$ALICE_ROOT/TPC/AliTPCprf2d.root"); - if (!f->IsOpen()) { - cerr<<"Can't open $ALICE_ROOT/TPC/AliTPCprf2d.root !\n" - return 3; - } - prfinner->Read("prf_07504_Gati_056068_d02"); - prfouter->Read("prf_10006_Gati_047051_d03"); - f->Close(); - savedir->cd(); - param->SetInnerPRF(prfinner); - param->SetOuterPRF(prfouter); - param->SetTimeRF(rf); - TPC->SetParam(param); - - cerr<<"Digitizing TPC...\n"; - //setup TPCDigitsArray - AliTPCDigitsArray *arr = new AliTPCDigitsArray; - arr->SetClass("AliSimDigits"); - arr->Setup(param); - TPC->SetParam(param); - arr->MakeTree(); + // gAlice->GetEvent(0); + AliTPC *TPC = (AliTPC*)gAlice->GetDetector("TPC"); - TPC->SetDigitsArray(arr); - TPC->Hits2Digits(); - /* TPC->Hits2DigitsSector(1); - TPC->Hits2DigitsSector(2); - TPC->Hits2DigitsSector(3); - TPC->Hits2DigitsSector(1+18); - TPC->Hits2DigitsSector(2+18); - TPC->Hits2DigitsSector(3+18); + TStopwatch timer; + timer.Start(); - TPC->Hits2DigitsSector(36+1); - TPC->Hits2DigitsSector(36+2); - TPC->Hits2DigitsSector(36+3); - TPC->Hits2DigitsSector(36+1+18); - TPC->Hits2DigitsSector(36+2+18); - TPC->Hits2DigitsSector(36+3+18); */ - - //write results + for(Int_t eventn =0;eventnGetEvent(eventn); - char treeName[100]; - sprintf(treeName,"TreeD_%s",param->GetTitle()); - TPC->GetDigitsArray()->GetTree()->Write(treeName); + TPC->Hits2Digits(eventn); + } delete gAlice; gAlice=0; file->Close(); delete file; + timer.Stop(); + timer.Print(); + return 0; }; diff --git a/TPC/AliTPCclusterer.cxx b/TPC/AliTPCclusterer.cxx index 3980b9f22fb..2edbd636671 100644 --- a/TPC/AliTPCclusterer.cxx +++ b/TPC/AliTPCclusterer.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.4 2001/04/17 08:06:27 hristov +Possibility to define the magnetic field in the reconstruction (Yu.Belikov) + Revision 1.3 2000/10/05 16:14:01 kowal2 Forward declarations. @@ -96,7 +99,7 @@ AliTPCcluster &c) { } //_____________________________________________________________________________ -void AliTPCclusterer::Digits2Clusters(const AliTPCParam *par, TFile *of) +void AliTPCclusterer::Digits2Clusters(const AliTPCParam *par, TFile *of, Int_t eventn) { //----------------------------------------------------------------- // This is a simple cluster finder. @@ -110,7 +113,21 @@ void AliTPCclusterer::Digits2Clusters(const AliTPCParam *par, TFile *of) const Int_t kMAXZ=par->GetMaxTBin()+2; - TTree *t = (TTree *)gDirectory->Get("TreeD_75x40_100x60"); + char dname[100]; + char cname[100]; + if (eventn==-1) { + + // for backward compatibility + + sprintf(dname,"TreeD_75x40_100x60"); + sprintf(cname,"TreeC_TPC"); + } + else { + sprintf(dname,"TreeD_75x40_100x60_%d",eventn); + sprintf(cname,"TreeC_TPC_%d",eventn); + } + TTree *t = (TTree *)gDirectory->Get(dname); + AliSimDigits digarr, *dummy=&digarr; t->GetBranch("Segment")->SetAddress(&dummy); Stat_t nentries = t->GetEntries(); @@ -123,6 +140,8 @@ void AliTPCclusterer::Digits2Clusters(const AliTPCParam *par, TFile *of) carray.SetClusterType("AliTPCcluster"); carray.MakeTree(); + + Int_t nclusters=0; for (Int_t n=0; nWrite(); + carray.GetTree()->Write(cname); savedir->cd(); } diff --git a/TPC/AliTPCclusterer.h b/TPC/AliTPCclusterer.h index a85475b06aa..48bedac2077 100644 --- a/TPC/AliTPCclusterer.h +++ b/TPC/AliTPCclusterer.h @@ -20,7 +20,7 @@ class AliTPCcluster; class AliTPCclusterer { public: - static void Digits2Clusters(const AliTPCParam *par, TFile *of); + static void Digits2Clusters(const AliTPCParam *par, TFile *of, Int_t eventn=1); private: class AliBin { diff --git a/TPC/AliTPCtracker.cxx b/TPC/AliTPCtracker.cxx index fd39eb1876d..bb9ebc64812 100644 --- a/TPC/AliTPCtracker.cxx +++ b/TPC/AliTPCtracker.cxx @@ -15,6 +15,9 @@ /* $Log$ +Revision 1.11 2001/05/23 08:50:10 hristov +Weird inline removed + Revision 1.10 2001/05/16 14:57:25 alibrary New files for folders and Stack @@ -55,8 +58,15 @@ Splitted from AliTPCtracking #include "AliTPCParam.h" #include "AliTPCClustersRow.h" + +AliTPCtracker::AliTPCtracker(const AliTPCParam *par) +{; +//MI change only provisore - need change in the ITS code which depend on it +} + + //_____________________________________________________________________________ -AliTPCtracker::AliTPCtracker(const AliTPCParam *par): +AliTPCtracker::AliTPCtracker(const AliTPCParam *par, Int_t eventn): fkNIS(par->GetNInnerSector()/2), fkNOS(par->GetNOuterSector()/2) { @@ -74,8 +84,18 @@ fkNOS(par->GetNOuterSector()/2) fClustersArray.Setup(par); fClustersArray.SetClusterType("AliTPCcluster"); - fClustersArray.ConnectTree("Segment Tree"); + char cname[100]; + if (eventn==-1) { + sprintf(cname,"TreeC_TPC"); + } + else { + sprintf(cname,"TreeC_TPC_%d",eventn); + } + + fClustersArray.ConnectTree(cname); + + fEventN = eventn; fSeeds=0; } @@ -655,7 +675,16 @@ Int_t AliTPCtracker::Clusters2Tracks(const TFile *inp, TFile *out) { } UnloadInnerSectors(); - tracktree.Write(); + char tname[100]; + if (fEventN==-1) { + sprintf(tname,"TreeT_TPC"); + } + else { + sprintf(tname,"TreeT_TPC_%d",fEventN); + } + + + tracktree.Write(tname); cerr<<"Number of found tracks : "<