void CheckSDDInESD(TString filename="AliESDs.root", Int_t optTracks=kAll){ TFile* esdFile = TFile::Open(filename.Data()); if (!esdFile || !esdFile->IsOpen()) { printf("Error in opening ESD file"); return; } AliESDEvent * esd = new AliESDEvent; TTree* tree = (TTree*) esdFile->Get("esdTree"); if (!tree) { printf("Error: no ESD tree found"); return; } esd->ReadFromTree(tree); TH1F* hpt=new TH1F("hpt","",100,0.,10.); TH1F* hphi=new TH1F("hphi","",100,-1,1); TH1F* hlam=new TH1F("hlam","",100,-2.,2.); TH1F* halpha=new TH1F("halpha","",100,-7,7); TH1F* hitscl=new TH1F("hitscl","",7,-0.5,6.5); TH1F* htpccl=new TH1F("htpccl","",200,-0.5,199.5); TH1F* hitsmap=new TH1F("hitsmap","",64,-0.5,63.5); TH1F* hclulay=new TH1F("hclulay","",7,-1.5,5.5); TH1F* hvx=new TH1F("hvx","",100,-1.,1.); TH1F* hvy=new TH1F("hvy","",100,-1.,1.); TH1F* hvz=new TH1F("hvz","",100,-20.,20.); TH1F* hdedx3=new TH1F("hdedx3","",100,0.,300.); TH1F* hdedx4=new TH1F("hdedx4","",100,0.,300.); TH1F* hdedx5=new TH1F("hdedx5","",100,0.,300.); TH1F* hdedx6=new TH1F("hdedx6","",100,0.,300.); TH1F* hStatus=new TH1F("hStatus","",11,-1.5,9.5); // -- Local coordinates // -- Module histos TH1F* hAllPMod = new TH1F("hAllPmod","Crossing Tracks vs. Module",260,239.5,499.5); TH1F* hGoodPMod = new TH1F("hGoodPmod","PointsAssocToTrack per Module",260,239.5,499.5); TH1F* hBadRegMod = new TH1F("hBadRegmod","Tracks in BadRegion per Module",260,239.5,499.5); TH1F* hMissPMod = new TH1F("hMissPmod","Missing Points per Module",260,239.5,499.5); TH1F* hSkippedMod = new TH1F("hSkippedmod","Tracks in Skipped Module",260,239.5,499.5); TH1F* hOutAccMod = new TH1F("hOutAccmod","Tracks outside zAcc per Module",260,239.5,499.5); TH1F* hNoRefitMod = new TH1F("hNoRefitmod","Points rejected in refit per Module",260,239.5,499.5); TH1F* hAllPXloc = new TH1F("hAllPxloc","Crossing Tracks vs. Xloc",75, -3.75, 3.75); TH1F* hGoodPXloc = new TH1F("hGoodPxloc","PointsAssocToTrack vs. Xloc",75, -3.75, 3.75); TH1F* hBadRegXloc = new TH1F("hBadRegxloc","Tracks in BadRegion vs. Xloc",75, -3.75, 3.75); TH1F* hMissPXloc = new TH1F("hMissPxloc","Missing Points vs. Xloc",75, -3.75, 3.75); TH1F* hAllPZloc = new TH1F("hAllPzloc","Crossing Tracks vs. Zloc",77, -3.85, 3.85); TH1F* hGoodPZloc = new TH1F("hGoodPzloc","PointsAssocToTrack vs. Zloc",77, -3.85, 3.85); TH1F* hBadRegZloc = new TH1F("hBadRegzloc","Tracks in BadRegion vs. Zloc",77, -3.85, 3.85); TH1F* hMissPZloc = new TH1F("hMissPzloc","Missing Points vs. Zloc",77, -3.85, 3.85); TH2F* hdEdxVsMod=new TH2F("hdEdxVsMod","dE/dx vs. mod",260,239.5,499.5,100,0.,500.); gStyle->SetPalette(1); for (Int_t iEvent = 0; iEvent < tree->GetEntries(); iEvent++) { tree->GetEvent(iEvent); if (!esd) { printf("Error: no ESD object found for event %d", iEvent); return; } cout<<"-------- Event "<<iEvent<<endl; printf(" Tracks # = %d\n",esd->GetNumberOfTracks()); const AliESDVertex *spdv=esd->GetVertex(); printf(" SPD Primary Vertex in %f %f %f with %d contributors\n",spdv->GetX(),spdv->GetY(),spdv->GetZ(),spdv->GetNContributors()); const AliESDVertex *trkv=esd->GetPrimaryVertex(); printf(" Track Primary Vertex with %d contributors\n",trkv->GetNContributors()); if(spdv->IsFromVertexer3D()){ hvx->Fill(spdv->GetX()); hvy->Fill(spdv->GetY()); hvz->Fill(spdv->GetZ()); } Double_t itss[4]; for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) { AliESDtrack* track = esd->GetTrack(iTrack); Int_t nITSclus=track->GetNcls(0); UChar_t clumap=track->GetITSClusterMap(); Int_t nPointsForPid=0; for(Int_t i=2; i<6; i++){ if(clumap&(1<<i)) ++nPointsForPid; } // track->PropagateTo(4.,5.); htpccl->Fill(track->GetNcls(1)); ULong64_t status=track->GetStatus(); Bool_t tpcin=0; hStatus->Fill(-1.); if(status & AliESDtrack::kTPCin){ tpcin=1; hStatus->Fill(0.); } if(status & AliESDtrack::kTPCout){ hStatus->Fill(1.); } if(status & AliESDtrack::kTPCrefit){ hStatus->Fill(2.); } Bool_t itsin=0; if(status & AliESDtrack::kITSin){ itsin=1; hStatus->Fill(3.); } if(status & AliESDtrack::kITSout){ hStatus->Fill(4.); } if(status & AliESDtrack::kITSrefit){ hStatus->Fill(5.); } if(!tpcin && itsin){ hStatus->Fill(6.); } if(status & AliESDtrack::kITSpureSA){ hStatus->Fill(7.); } if(status & AliESDtrack::kITSrefit){ if((optTracks==kTPCITS) && !(status & AliESDtrack::kTPCin)) continue; if((optTracks==kITSsa) && (status & AliESDtrack::kTPCin)) continue; if((optTracks==kITSsa) && (status & AliESDtrack::kITSpureSA)) continue; if((optTracks==kITSpureSA) && (status & AliESDtrack::kITSpureSA)) continue; track->GetITSdEdxSamples(itss); // printf("Track %d (label %d) in ITS with %d clusters clumap %d pointspid= %d\n",iTrack,track->GetLabel(),nITSclus,clumap,nPointsForPid); //printf(" dedx=%f %f %f %f\n",itss[0],itss[1],itss[2],itss[3]); hitscl->Fill(nITSclus); hdedx3->Fill(itss[0]); hdedx4->Fill(itss[1]); hdedx5->Fill(itss[2]); hdedx6->Fill(itss[3]); hitsmap->Fill(clumap); hclulay->Fill(-1.); for(Int_t iLay=0;iLay<6;iLay++){ if(clumap&1<<iLay) hclulay->Fill(iLay); } hpt->Fill(track->Pt()); hphi->Fill(TMath::ASin(track->GetSnp())); hlam->Fill(TMath::ATan(track->GetTgl())); halpha->Fill(track->GetAlpha()); Int_t iMod,status; Float_t xloc,zloc; for(Int_t iLay=2; iLay<=3; iLay++){ Bool_t ok=track->GetITSModuleIndexInfo(iLay,iMod,status,xloc,zloc); if(ok){ iMod+=240; hAllPMod->Fill(iMod); hAllPXloc->Fill(xloc); hAllPZloc->Fill(zloc); if(status==1){ hGoodPMod->Fill(iMod); hGoodPXloc->Fill(xloc); hGoodPZloc->Fill(zloc); if(track->Pt()>1.) hdEdxVsMod->Fill(iMod,itss[iLay-2]); } else if(status==2){ hBadRegMod->Fill(iMod); hBadRegXloc->Fill(xloc); hBadRegZloc->Fill(zloc); } else if(status==3) hSkippedMod->Fill(iMod); else if(status==4) hOutAccMod->Fill(iMod); else if(status==5){ hMissPMod->Fill(iMod); hMissPXloc->Fill(xloc); hMissPZloc->Fill(zloc); } else if(status==6) hNoRefitMod->Fill(iMod); } } } } } Float_t norm=hclulay->GetBinContent(1); if(norm<1.) norm=1.; hclulay->Scale(1./norm); gStyle->SetLineWidth(2); TCanvas* c1=new TCanvas("c1","Track quantities",900,900); c1->Divide(2,2); c1->cd(1); htpccl->Draw(); htpccl->GetXaxis()->SetTitle("Clusters in TPC "); c1->cd(2); hitscl->Draw(); hitscl->GetXaxis()->SetTitle("Clusters in ITS "); c1->cd(3); hclulay->Draw(); hclulay->GetXaxis()->SetRange(2,7); hclulay->GetXaxis()->SetTitle("# ITS Layer"); hclulay->GetYaxis()->SetTitle("Fraction of tracks with point in Layer x"); c1->cd(4); TCanvas* c2=new TCanvas("c2","dedx per Layer",900,900); c2->Divide(2,2); c2->cd(1); hdedx3->Draw(); hdedx3->GetXaxis()->SetTitle("dE/dx Lay3"); c2->cd(2); hdedx4->Draw(); hdedx4->GetXaxis()->SetTitle("dE/dx Lay4"); c2->cd(3); hdedx5->Draw(); hdedx5->GetXaxis()->SetTitle("dE/dx Lay5"); c2->cd(4); hdedx6->Draw(); hdedx6->GetXaxis()->SetTitle("dE/dx Lay6"); hdEdxVsMod->SetStats(0); TCanvas* cdedx=new TCanvas("cdedx","dedx SDD",1400,600); cdedx->SetLogz(); hdEdxVsMod->Draw("col"); hdEdxVsMod->GetXaxis()->SetTitle("SDD Module Id"); hdEdxVsMod->GetYaxis()->SetTitle("dE/dx (keV/300 #mum)"); hdEdxVsMod->GetYaxis()->SetTitleOffset(1.25); TCanvas* cv=new TCanvas("cv","Vertex",600,900); cv->Divide(1,3); cv->cd(1); hvx->Draw(); hvx->GetXaxis()->SetTitle("Xv (cm)"); cv->cd(2); hvy->Draw(); hvy->GetXaxis()->SetTitle("Yv (cm)"); cv->cd(3); hvz->Draw(); hvz->GetXaxis()->SetTitle("Xv (cm)"); hGoodPMod->SetStats(0); hGoodPMod->SetTitle(""); TCanvas* ceff0=new TCanvas("ceff0","ModuleIndexInfo",1000,600); hGoodPMod->Draw("e"); hGoodPMod->GetXaxis()->SetTitle("SDD Module Id"); hGoodPMod->GetYaxis()->SetTitle("Number of tracks"); hMissPMod->SetLineColor(2); hMissPMod->SetMarkerColor(2); hMissPMod->SetMarkerStyle(22); hMissPMod->SetMarkerSize(0.5); hMissPMod->Draw("psame"); hBadRegMod->SetLineColor(kGreen+1); hBadRegMod->SetMarkerColor(kGreen+1); hBadRegMod->SetMarkerStyle(20); hBadRegMod->SetMarkerSize(0.5); hBadRegMod->Draw("esame"); hSkippedMod->SetLineColor(kYellow); hSkippedMod->Draw("esame"); hOutAccMod->SetLineColor(4); hOutAccMod->Draw("esame"); hNoRefitMod->SetLineColor(6); hNoRefitMod->Draw("esame"); TLatex* t1=new TLatex(0.7,0.85,"Good Point"); t1->SetNDC(); t1->SetTextColor(1); t1->Draw(); TLatex* t2=new TLatex(0.7,0.8,"Missing Point"); t2->SetNDC(); t2->SetTextColor(2); t2->Draw(); TLatex* t3=new TLatex(0.7,0.75,"Bad Region"); t3->SetNDC(); t3->SetTextColor(kGreen+1); t3->Draw(); ceff0->Update(); TH1F* heff=new TH1F("heff","",260,239.5,499.5); for(Int_t imod=0; imod<260;imod++){ Float_t numer=hGoodPMod->GetBinContent(imod+1)+hBadRegMod->GetBinContent(imod+1)+hOutAccMod->GetBinContent(imod+1)+hNoRefitMod->GetBinContent(imod+1); Float_t denom=hAllPMod->GetBinContent(imod+1); Float_t eff=0.; Float_t erreff=0.; if(denom>0){ eff=numer/denom; erreff=TMath::Sqrt(eff*(1-eff)/denom); } heff->SetBinContent(imod+1,eff); heff->SetBinError(imod+1,erreff); } printf("---- Modules with efficiency < 90%% ----\n"); heff->SetStats(0); TCanvas* ceff1=new TCanvas("ceff1","Efficiency",1000,600); heff->Draw(); heff->GetXaxis()->SetTitle("SDD Module Id"); heff->GetYaxis()->SetTitle("Fraction of tracks with point in good region"); for(Int_t ibin=1; ibin<=heff->GetNbinsX(); ibin++){ Float_t e=heff->GetBinContent(ibin); if(e<0.9){ Int_t iMod=(Int_t)heff->GetBinCenter(ibin); Int_t lay,lad,det; AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det); printf("Module %d - Layer %d Ladder %2d Det %d - Eff. %.3f\n",iMod,lay,lad,det,heff->GetBinContent(ibin)); } } ceff1->Update(); hGoodPXloc->SetTitle(""); hGoodPZloc->SetTitle(""); hGoodPXloc->SetStats(0); hGoodPZloc->SetStats(0); hGoodPXloc->SetMinimum(0); hGoodPZloc->SetMinimum(0); TCanvas* ceff2=new TCanvas("ceff2","LocalCoord",1000,600); ceff2->Divide(2,1); ceff2->cd(1); hGoodPXloc->Draw("e"); hGoodPXloc->GetXaxis()->SetTitle("Xlocal (cm)"); hGoodPXloc->GetYaxis()->SetTitle("Number of tracks"); hMissPXloc->SetLineColor(2); hMissPXloc->SetMarkerColor(2); hMissPXloc->SetMarkerStyle(22); hMissPXloc->SetMarkerSize(0.5); hMissPXloc->Draw("psame"); hBadRegXloc->SetLineColor(kGreen+1); hBadRegXloc->SetMarkerColor(kGreen+1); hBadRegXloc->SetMarkerStyle(20); hBadRegXloc->SetMarkerSize(0.5); hBadRegXloc->Draw("psame"); t1->Draw(); t2->Draw(); t3->Draw(); ceff2->cd(2); hGoodPZloc->Draw("e"); hGoodPZloc->GetXaxis()->SetTitle("Zlocal (cm)"); hGoodPZloc->GetYaxis()->SetTitle("Number of tracks"); hMissPZloc->SetLineColor(2); hMissPZloc->SetMarkerColor(2); hMissPZloc->SetMarkerStyle(22); hMissPZloc->SetMarkerSize(0.5); hMissPZloc->Draw("psame"); hBadRegZloc->SetLineColor(kGreen+1); hBadRegZloc->SetMarkerColor(kGreen+1); hBadRegZloc->SetMarkerStyle(20); hBadRegZloc->SetMarkerSize(0.5); hBadRegZloc->Draw("psame"); t1->Draw(); t2->Draw(); t3->Draw(); ceff2->Update(); }
// analisi Bool_t CheckSingle(const char* esdFileName,Bool_t kGRID){ //inizializzo a zero ncluster (di tree T) //for (int ifc=0;ifc<10000;ifc++) ncluster[ifc]=0; // check the content of the ESD AliPIDResponse *pidr = new AliPIDResponse(); // open the ESD file TFile* esdFile = TFile::Open(esdFileName); if (!esdFile || !esdFile->IsOpen()){ Error("CheckESD", "opening ESD file %s failed", esdFileName); return kFALSE; } TString mctrkref(esdFileName); mctrkref.ReplaceAll("AliESDs.root","TrackRefs.root"); TString fgal(esdFileName); fgal.ReplaceAll("AliESDs.root","galice.root"); if(kGRID){ fgal.Insert(0,"alien://"); mctrkref.Insert(0,"alien://"); } TTree *trkref; printf("ESD = %s\n",esdFileName); TFile *ftrkref; if(isMC) ftrkref = TFile::Open(mctrkref.Data()); AliHeader *h = new AliHeader(); TFile *fgalice; if(isMC) fgalice = TFile::Open(fgal.Data()); TTree *tgalice; if(isMC){ tgalice = (TTree *) fgalice->Get("TE"); tgalice->SetBranchAddress("Header",&h); } AliRunLoader* runLoader = NULL; AliRun *gAlice; if(isMC) runLoader = AliRunLoader::Open(fgal.Data()); if(runLoader){ runLoader->LoadgAlice(); gAlice = runLoader->GetAliRun(); if (!gAlice) { Error("CheckESD", "no galice object found"); return kFALSE; } runLoader->LoadKinematics(); runLoader->LoadHeader(); } AliESDEvent * esd = new AliESDEvent; // printf("esd object = %x\n",esd); TTree* tree = (TTree*) esdFile->Get("esdTree"); if (!tree){ Error("CheckESD", "no ESD tree found"); return kFALSE; } esd->ReadFromTree(tree); // crea link tra esd e tree TClonesArray* tofcl; // array dinamico TClonesArray* tofhit; TClonesArray* tofmatch; Int_t nev = tree->GetEntries(); //ogni entries evento Float_t mag; printf("nev = %i\n",nev); //azzero il contatore delle tracce del TTree T //ntracks=0; AliStack* stack=NULL; Int_t trkassociation[1000000]; for(Int_t ie=0;ie < nev;ie++){ if(runLoader){ runLoader->GetEvent(ie); // select simulated primary particles, V0s and cascades stack = runLoader->Stack(); } if(isMC) trkref = (TTree *) ftrkref->Get(Form("Event%i/TreeTR",ie)); tree->GetEvent(ie); if(isMC) tgalice->GetEvent(ie); if(isMC) interactiontime = h->GenEventHeader()->InteractionTime()*1E+12; mag = esd->GetMagneticField(); AliTOFHeader *tofh = esd->GetTOFHeader(); ntofcl = tofh->GetNumberOfTOFclusters(); esd->ConnectTracks(); // Deve essere sempre chiamato dopo aver letto l'evento (non troverebbe l'ESDevent). Scrivo in tutte le tracce l origine dell evento così poi da arrivare ovunque(tipo al cluster e al tempo quindi). //Riempio variabile del tree "T" //nevento=ie; if(! esd->GetVertex()){ esd->ResetStdContent(); continue;// una volta fatto il connect manda un flag ; siccome qua c'era un continue(non si arriva in fondo al ciclo) bisogna resettarlo altrimenti lo trova già attivo. } tofcl = esd->GetESDTOFClusters(); // AliESDTOFCluster *cltof = tofcl->At(i); if(tofcl->GetEntries() == 0){ esd->ResetStdContent(); continue; } tofhit = esd->GetESDTOFHits(); // AliESDTOFHit *hittof = tofhit->At(i); tofmatch = esd->GetESDTOFMatches(); // AliESDTOFHit *mathctof = tofmatch->At(i); // loop over tracks pidr->SetTOFResponse(esd,AliPIDResponse::kTOF_T0); //per recuperare lo start time ("esd", "tipo start time"), tipo cioè o il TOF stesso o il T0 o il best, ovvero la combinazione dei 2 Int_t ntrk = esd->GetNumberOfTracks(); //printf("%i) TPC tracks = %i -- TOF cluster = %i - TOF hit = %i -- matchable info = %i\n",ie,ntrk,tofcl->GetEntries(),tofhit->GetEntries(),tofmatch->GetEntries()); Double_t time[AliPID::kSPECIESC]; if(isMC && stack){// create association trackref printf("nMC track = %i\n",stack->GetNtrack()); for(Int_t ist=0;ist < stack->GetNtrack();ist++){ trkassociation[ist]=-1; } for(Int_t iref=0;iref < trkref->GetEntries();iref++){ trkref->GetEvent(iref); Int_t trkreference = trkref->GetLeaf("TrackReferences.fTrack")->GetValue(); if(trkreference > -1 && trkreference < 1000000){ trkassociation[trkreference] = iref; } } } for (Int_t iTrack = 0; iTrack < ntrk; iTrack++){ AliESDtrack* track = esd->GetTrack(iTrack); // select tracks of selected particles if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) continue;//almeno un hit nell ITS if (track->GetConstrainedChi2() > 4) continue; //se brutto X^2 if ((track->GetStatus() & AliESDtrack::kTOFout) == 0) continue; //se traccia matchata con tof if(track->GetNumberOfTPCClusters() < 70) continue; Float_t p =track->P(); itrig = 0; timetrig = 0; if(p > 0.9 && p < 1.1){ track->GetIntegratedTimes(time); itrig = iTrack; timetrig = track->GetTOFsignal() - time[2]; iTrack = ntrk; } } printf("real loop, ntrk = %i\n",ntrk); for (Int_t iTrack = 0; iTrack < ntrk; iTrack++){ AliESDtrack* track = esd->GetTrack(iTrack); // select tracks of selected particles if ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) continue;//almeno un hit nell ITS if (track->GetConstrainedChi2() > 4) continue; //se brutto X^2 //if ((track->GetStatus() & AliESDtrack::kTOFout) == 0) continue; //se traccia matchata con tof if(track->GetNumberOfTPCClusters() < 70) continue; TOFout = (track->GetStatus() & AliESDtrack::kTOFout) > 0; track->GetIntegratedTimes(time); Float_t dx = track->GetTOFsignalDx(); //leggo i residui tra traccia e canale tof acceso Float_t dz = track->GetTOFsignalDz(); mism = 0; dedx = track->GetTPCsignal(); Int_t label = TMath::Abs(track->GetLabel()); if(stack){ TParticle *part=stack->Particle(label); pdg = part->GetPdgCode(); } Int_t TOFlabel[3]; track->GetTOFLabel(TOFlabel); // printf("%i %i %i %i\n",label,TOFlabel[0],TOFlabel[1],TOFlabel[2]); ChannelTOF[0] = track->GetTOFCalChannel(); // printf("geant time = %f\n",gtime); //getchar(); // if(TMath::Abs(dx) > 1.25 || TMath::Abs(dz) > 1.75) continue; // is inside the pad //riempio il numro di cludter e impulso trasverso per traccia del TTree T ncluster=track->GetNTOFclusters(); impulso_trasv=track->Pt(); impulso=track->P(); StartTime = pidr->GetTOFResponse().GetStartTime(track->P()); StartTimeRes = pidr->GetTOFResponse().GetStartTimeRes(track->P()); if(track->Pt() > 0.9 && track->Pt() < 1.5){ //impulso non troppo alto per separazione tra particelle Float_t dt = track->GetTOFsignal() - time[2] - pidr->GetTOFResponse().GetStartTime(track->P());//tempo TOF(è lo stesso di Gettime, solo che lo prendo dale tracce)(già calibrato) -ip del PI (posizione 0 e, posizione 1 mu, pos 2 PI, pos 3 K,pos 4 p) -start time Float_t dtKa = track->GetTOFsignal() - time[3] - pidr->GetTOFResponse().GetStartTime(track->P()); Float_t dtPr = track->GetTOFsignal() - time[4] - pidr->GetTOFResponse().GetStartTime(track->P()); hdt->Fill(dt); hdtKa->Fill(dtKa); hdtPr->Fill(dtPr); } charge = track->Charge(); phi = track->Phi(); eta = track->Eta(); GetPositionAtTOF(track,mag,coord); phiExt = TMath::ATan2(coord[1],coord[0]); etaExt = -TMath::Log(TMath::Tan(0.5*TMath::ATan2(sqrt(coord[0]*coord[0]+coord[1]*coord[1]),coord[2]))); for (int i=0;i<(track->GetNTOFclusters());i++){ int idummy=track->GetTOFclusterArray()[i]; AliESDTOFCluster *cl = (AliESDTOFCluster *) tofcl->At(idummy); tempo[i]=cl->GetTime(); tot[i]=cl->GetTOT(); ChannelTOF[i]=cl->GetTOFchannel(); if(i==0){ GetResolutionAtTOF(track,mag,ChannelTOF[i],res); } for(int im=cl->GetNMatchableTracks();im--;){ //o così o da n-1 a 0 //for(int im=cl->GetNMatchableTracks();im>0;im--) non andava bene perchè non prendeva mai lo 0 // if(track->GetNTOFclusters()==2) printf("-- %i) %f %f\n",im,cl->GetLength(im),cl->GetIntegratedTime(2,im)); if(cl->GetTrackIndex(im) == track->GetID()){ exp_time_el[i] = cl->GetIntegratedTime(0,im); // pi = 2 exp_time_mu[i] = cl->GetIntegratedTime(1,im); // pi = 2 exp_time_pi[i] = cl->GetIntegratedTime(2,im); // pi = 2 exp_time_ka[i] = cl->GetIntegratedTime(3,im); // pi = 2 exp_time_pr[i] = cl->GetIntegratedTime(4,im); // pi = 2 L[i] = cl->GetLength(im); // if(track->GetNTOFclusters()==2)printf("%i) %f %f\n",i,L[i],exp_time_pi[i]); DeltaX[i]=cl->GetDx(im); // mettendolo dentro questo if dovrei prendere i residui di una stessa traccia DeltaZ[i]=cl->GetDz(im); } } } //ReMatch(); Int_t jref=0; if(isMC){ if(TOFlabel[0] > -1 && TOFlabel[0] < 1000000){ trkref->GetEvent(trkassociation[TOFlabel[0]]); if(TOFlabel[0] == trkref->GetLeaf("TrackReferences.fTrack")->GetValue()){ // printf("trk -> %i (%i)\n",trkref->GetLeaf("TrackReferences.fTrack")->GetValue(),trkref->GetLeaf("TrackReferences.fTrack")->GetValue(jref)); while(jref > -1 && trkref->GetLeaf("TrackReferences.fTrack")->GetValue(jref) != 0){ //printf("det = %i\n",trkref->GetLeaf("TrackReferences.fDetectorId")->GetValue(jref)); if(trkref->GetLeaf("TrackReferences.fDetectorId")->GetValue(jref) == 4){ gtime=trkref->GetLeaf("TrackReferences.fTime")->GetValue(jref)*1E+12; xgl = trkref->GetLeaf("TrackReferences.fX")->GetValue(jref); ygl = trkref->GetLeaf("TrackReferences.fY")->GetValue(jref); zgl = trkref->GetLeaf("TrackReferences.fZ")->GetValue(jref); MakeTrueRes(); jref = 100; } jref++; } } } } if(TMath::Abs(label) != TOFlabel[0] && stack){ mism=2; while(TOFlabel[0] != -1 && TOFlabel[0] != label){ TOFlabel[0] = stack->Particle(TOFlabel[0])->GetMother(0); } if(label == TOFlabel[0]) mism=1; } //AddDelay(); T->Fill(); //cout<<"riempio il tree "<<endl; //Riempio tree "T" //incremento il contatore delle tracce del TTree T matchate e che superano i tagli //ntracks++; }//end of for(tracks) esd->ResetStdContent(); } //end of for(events) if(runLoader){ runLoader->UnloadHeader(); runLoader->UnloadKinematics(); delete runLoader; } esdFile->Close(); if(isMC) ftrkref->Close(); if(isMC) fgalice->Close(); }