/** * Add distributions from other experiments to stacks * * @param name Name of current bin * @param i Index of current bin * @param sNN Center of mass energy * @param allALICE Stack of ALICE data * @param allCMS Stack of CMS data * @param alice Possible ALICE result on return * @param cms Possible CMS result on return */ void Other2Stack(const TString& name, Int_t i, UShort_t sNN, TMultiGraph* allALICE, TMultiGraph* allCMS, TGraph*& alice, TGraph*& cms) { if (!allALICE && !allCMS) return; TString tmp(name); tmp.ReplaceAll("p", "+"); tmp.ReplaceAll("m", "-"); tmp.ReplaceAll("_", " "); tmp.ReplaceAll("d", "."); TObjArray* tokens = tmp.Tokenize(" "); if (!tokens || tokens->GetEntriesFast() < 2) { Error("Other2Stack", "Failed to decode eta range from %s", name.Data()); if (tokens) tokens->Delete(); return; } Double_t eta1 = static_cast<TObjString*>(tokens->At(0))->String().Atof(); Double_t eta2 = static_cast<TObjString*>(tokens->At(1))->String().Atof(); tokens->Delete(); if (TMath::Abs(eta2+eta1) > 1e-3) { // Not symmetric bin // Info("Other2Stack", "bin [%f,%f] is not symmetric (%f)", // eta1, eta2, TMath::Abs(eta2-eta1)); return; } Double_t aEta = TMath::Abs(eta1); Int_t open, closed; Double_t factor; Float_t size; BinAttributes(i, open, closed, size, factor); if (allALICE) { TGraphAsymmErrors* g = GetOther(1, aEta, sNN, factor); if (g) { g->SetMarkerStyle(closed); g->SetMarkerColor(kColorALICE); g->SetMarkerSize(size); allALICE->Add(g, "p same"); alice = g; } } if (allCMS) { TGraphAsymmErrors* g = GetOther(0, aEta, sNN, factor); if (g) { g->SetMarkerStyle(closed); g->SetMarkerColor(kColorCMS); g->SetMarkerSize(size); allCMS->Add(g, "p same"); cms = g; } } }
void TBDataParser::OnCharacters(const char *characters) { if(_currentElement != NULL && !strcmp(_currentElement->Data(),"vector")) { TString *string = new TString(characters); TObjArray *values = string->Tokenize(", "); for(Int_t i = 0; i < values->GetEntries(); i++) { TObjString *object = (TObjString *) values->At(i); TString value = object->GetString().ReplaceAll("\n", "").ReplaceAll("\t", "").ReplaceAll(" ", "").ReplaceAll("\0", ""); if(value.IsFloat()) { _vector->Fill(value.Atof()); } } if(_vectorsStack->GetEntries() == 1) { _motherVecEntries = _vector->GetEntries(); } else if(_currentMethod != NULL && !strcmp(_currentMethod->Data(),"all")) { for(Int_t i = 1; i < _motherVecEntries; i++) { TObjString *object = (TObjString *) values->First(); TString value = object->GetString().ReplaceAll("\n", "").ReplaceAll("\t", "").ReplaceAll(" ", "").ReplaceAll("\0", ""); if(value.IsFloat()) _vector->Fill(value.Atof()); } } values->Delete(); } }
void getHistosFromRE(const string& mhid, const string& filepath, const string& sre, vector<std::pair<string,wTH1*> >& v_wth1) { if (gl_verbose) cout<<"Searching for regexp "<<sre<<" in "<<filepath; // allow for multiple regexes in OR combination // vector<string> v_regexes; Tokenize(sre,v_regexes,"|"); if (!v_regexes.size()) v_regexes.push_back(sre); // Build validated TRegexp arguments in preparation for directory recursion // TObjArray *Args = new TObjArray(); for (size_t i=0; i<v_regexes.size(); i++) { TRegexp re(v_regexes[i].c_str(),kTRUE); if (re.Status() != TRegexp::kOK) { cerr << "The regexp " << v_regexes[i] << " is invalid, Status() = "; cerr << re.Status() << endl; exit(-1); } else { Args->AddLast(new TObjString(v_regexes[i].c_str())); } } // Get the root file // TFile *rootfile = openRootFile(filepath); if (!rootfile) { cerr << "File failed to open, " << filepath << endl; Args->Delete(); delete Args; return; } // Do the recursion, collect matches // TObjArray *Matches = new TObjArray(); recurseDirs(rootfile, ®exMatchHisto, Args, Matches); Args->Delete(); delete Args; // Returns two objects per match: // 1. the (string) path that was matched and // 2. the object whose path matched // int nx2matches = Matches->GetEntriesFast(); if (gl_verbose) cout << "... " << nx2matches/2 << " match(es) found."; // Add the matches to the global map of histos // int istart = v_wth1.size(); for (int i=0; i<nx2matches; i+=2) { TString fullspec = ((TObjString *)(*Matches)[i])->GetString(); wTH1 *wth1 = new wTH1((TH1 *)((*Matches)[i+1])); wth1->histo()->UseCurrentStyle(); wth1->histo()->SetLineColor(((i/2)%9)+1); wth1->histo()->SetLineStyle((i/18)+1); wth1->histo()->SetLineWidth(2); wth1->SetLegendEntry(wth1->histo()->GetName()); string hidi= mhid+"_"+int2str(istart+(i/2)); v_wth1.push_back(std::pair<string,wTH1 *>(hidi,wth1)); //glmap_objpath2id.insert(pair<string,string>(fullspec,hidi)); glmap_id2histo.insert(pair<string,wTH1 *>(hidi,wth1)); glmap_id2objpath.insert(pair<string,string>(hidi,string(fullspec.Data()))); } //Matches->Delete(); // need the histos! delete Matches; if (gl_verbose) cout << endl; } // getHistosFromRE
int write_trigger_thresholds(int runNumber = 13078009) { // Load all required libraries gROOT->Macro("loadMuDst.C"); gROOT->Macro("LoadLogger.C"); gSystem->Load("St_base.so"); gSystem->Load("libStDb_Tables.so"); gSystem->Load("StDbLib.so"); gSystem->Load("StEmcRawMaker"); gSystem->Load("StEmcADCtoEMaker"); gSystem->Load("StEEmcUtil"); gSystem->Load("StEEmcDbMaker"); gSystem->Load("StTriggerUtilities"); //******// gSystem->Setenv("DB_ACCESS_MODE","write"); //******// // Initialize db manager ///* StDbManager* mgr = StDbManager::Instance(); StDbConfigNode* node = mgr->initConfig("Calibrations_trg"); StDbTable* dbtable = node->addDbTable("triggerThreshold"); // beginTime timestamp in MySQL format: "YYYY-MM-DD HH:mm:ss" ifstream intime(Form("beginTimes/%d.beginTimes.txt", runNumber)); if(!intime){ cout<<"can't open beginTime file"<<endl; return 0; } char date[10]; char time[8]; intime >> date >> time; TString storeTime(Form("%s %s", date, time)); //******// //time stamp 2012-07-30 00:00:0X for test purposes //TString storeTime("2012-07-30 00:00:02"); //******// mgr->setStoreTime(storeTime.Data()); // */ // Create your c-struct triggerThreshold_st table; // Fill structure with data // sample setup for a single channel, please add more channels! strcpy(table.comments, Form("run%d triggerThreshold uploaded by zchang", runNumber)); cout<<"comments set to "<<table.comments<<endl; TObjArray objarr = readOnline(runNumber); TBufferFile buf(TBuffer::kWrite); buf << &objarr; objarr.Delete(); cout<<"Buffer size: "<<buf.BufferSize()<<endl; memset(table.trigthr, 0, buf.BufferSize()); memcpy(table.trigthr, buf.Buffer(), buf.BufferSize()); table.size = buf.BufferSize(); //******// // Store data to the StDbTable dbtable->SetTable((char*)&table, 1); // uncomment next line to set "sim" flavor. "ofl" flavor is set by default, no need to set it. // dbtable->setFlavor("sim"); // Store table to database cout<<"Storing Db table: "<< mgr->storeDbTable(dbtable) << endl; //******// ofstream out(Form("buffer/%d.trigthr.buffer.out", runNumber)); assert(out); out.write(buf.Buffer(),buf.BufferSize()); out.close(); return 1; }
void compClusHitsMod2(int nev=-1) { const int kSplit=0x1<<22; const int kSplCheck=0x1<<23; // gSystem->Load("libITSUpgradeBase"); gSystem->Load("libITSUpgradeSim"); gSystem->Load("libITSUpgradeRec"); gROOT->SetStyle("Plain"); AliCDBManager* man = AliCDBManager::Instance(); man->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); man->SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd())); man->SetSpecificStorage("ITS/Align/Data", Form("local://%s",gSystem->pwd())); man->SetSpecificStorage("ITS/Calib/RecoParam", Form("local://%s",gSystem->pwd())); man->SetRun(0); TH1F* hL0A = new TH1F("hL0A", "Layer 0, polar angle", 20, 0, TMath::PiOver2()); hL0A->SetDirectory(0); hL0A->GetXaxis()->SetTitle("#alpha"); TH1F* hL0B = new TH1F("hL0B", "Layer 0, azimuthal angle", 20, 0, TMath::PiOver2()); hL0B->SetDirectory(0); hL0B->GetXaxis()->SetTitle("#beta"); TH1F* hL1A = new TH1F("hL1A", "Layer 1, polar angle", 20, 0, TMath::PiOver2()); hL1A->SetDirectory(0); hL1A->GetXaxis()->SetTitle("#alpha"); TH1F* hL1B = new TH1F("hL1B", "Layer 1, azimuthal angle", 20, 0, TMath::PiOver2()); hL1B->SetDirectory(0); hL1B->GetXaxis()->SetTitle("#beta"); TH1F* hL2A = new TH1F("hL2A", "Layer 2, polar angle", 20, 0, TMath::PiOver2()); hL2A->SetDirectory(0); hL2A->GetXaxis()->SetTitle("#alpha"); TH1F* hL2B = new TH1F("hL2B", "Layer 2, azimuthal angle", 20, 0, TMath::PiOver2()); hL2B->SetDirectory(0); hL2B->GetXaxis()->SetTitle("#beta"); TH1F* hL3A = new TH1F("hL3A", "Layer 3, polar angle", 20, 0, TMath::PiOver2()); hL3A->SetDirectory(0); hL3A->GetXaxis()->SetTitle("#alpha"); TH1F* hL3B = new TH1F("hL3B", "Layer 3, azimuthal angle", 20, 0, TMath::PiOver2()); hL3B->SetDirectory(0); hL3B->GetXaxis()->SetTitle("#beta"); TH1F* hL4A = new TH1F("hL4A", "Layer 4, polar angle", 20, 0, TMath::PiOver2()); hL4A->SetDirectory(0); hL4A->GetXaxis()->SetTitle("#alpha"); TH1F* hL4B = new TH1F("hL4B", "Layer 4, azimuthal angle", 20, 0, TMath::PiOver2()); hL4B->SetDirectory(0); hL4B->GetXaxis()->SetTitle("#beta"); TH1F* hL5A = new TH1F("hL5A", "Layer 5, polar angle", 20, 0, TMath::PiOver2()); hL5A->SetDirectory(0); hL5A->GetXaxis()->SetTitle("#alpha"); TH1F* hL5B = new TH1F("hL5B", "Layer 5, azimuthal angle", 20, 0, TMath::PiOver2()); hL5B->SetDirectory(0); hL5B->GetXaxis()->SetTitle("#beta"); TH1F* hL6A = new TH1F("hL6A", "Layer 6, polar angle", 20, 0, TMath::PiOver2()); hL6A->SetDirectory(0); hL6A->GetXaxis()->SetTitle("#alpha"); TH1F* hL6B = new TH1F("hL6B", "Layer 6, azimuthal angle", 20, 0, TMath::PiOver2()); hL6B->SetDirectory(0); hL6B->GetXaxis()->SetTitle("#beta"); gAlice=NULL; AliRunLoader* runLoader = AliRunLoader::Open("galice.root"); runLoader->LoadgAlice(); gAlice = runLoader->GetAliRun(); runLoader->LoadHeader(); runLoader->LoadKinematics(); runLoader->LoadRecPoints(); runLoader->LoadSDigits(); runLoader->LoadHits(); AliLoader *dl = runLoader->GetDetectorLoader("ITS"); AliGeomManager::LoadGeometry("geometry.root"); TObjArray algITS; AliGeomManager::LoadAlignObjsFromCDBSingleDet("ITS",algITS); AliGeomManager::ApplyAlignObjsToGeom(algITS); // AliITSUGeomTGeo* gm = new AliITSUGeomTGeo(kTRUE); AliITSMFTClusterPix::SetGeom(gm); // AliITSURecoDet *its = new AliITSURecoDet(gm, "ITSinterface"); its->CreateClusterArrays(); // Double_t xg1,yg1,zg1=0.,xg0,yg0,zg0=0.,tg0; Double_t xExit,yExit,zExit,xEnt,yEnt,zEnt,tof1; // TTree *cluTree = 0x0; TTree *hitTree = 0x0; TClonesArray *hitList=new TClonesArray("AliITSMFTHit"); // Float_t xyzClGloF[3]; Double_t xyzClGlo[3],xyzClTr[3]; Int_t labels[3]; int nLab = 0; int nlr=its->GetNLayersActive(); int ntotev = (Int_t)runLoader->GetNumberOfEvents(); printf("N Events : %i \n",ntotev); if (nev>0) ntotev = TMath::Min(nev,ntotev); // // output tree TFile* flOut = TFile::Open("clInfo.root","recreate"); TTree* trOut = new TTree("clitsu","clitsu"); clSumm cSum; trOut->Branch("evID", &cSum.evID ,"evID/I"); trOut->Branch("volID",&cSum.volID,"volID/I"); trOut->Branch("lrID", &cSum.lrID ,"lrID/I"); trOut->Branch("clID", &cSum.clID ,"clID/I"); trOut->Branch("nPix", &cSum.nPix ,"nPix/I"); trOut->Branch("nX" , &cSum.nX ,"nX/I"); trOut->Branch("nZ" , &cSum.nZ ,"nZ/I"); trOut->Branch("q" , &cSum.q ,"q/I"); trOut->Branch("pt" , &cSum.pt ,"pt/F"); trOut->Branch("eta" ,&cSum.eta ,"eta/F"); trOut->Branch("phi" , &cSum.phi ,"phi/F"); trOut->Branch("xyz", cSum.xyz, "xyz[3]/F"); trOut->Branch("dX" , &cSum.dX ,"dX/F"); trOut->Branch("dY" , &cSum.dY ,"dY/F"); trOut->Branch("dZ" , &cSum.dZ ,"dZ/F"); trOut->Branch("split",&cSum.split,"split/O"); trOut->Branch("prim", &cSum.prim, "prim/O"); trOut->Branch("pdg", &cSum.pdg, "pdg/I"); trOut->Branch("ntr", &cSum.ntr, "ntr/I"); trOut->Branch("alpha", &cSum.alpha, "alpha/F"); trOut->Branch("beta", &cSum.beta, "beta/F"); trOut->Branch("nRowPatt", &cSum.nRowPatt, "nRowPatt/I"); trOut->Branch("nColPatt", &cSum.nColPatt, "nColPatt/I"); TopDatabase DB; for (Int_t iEvent = 0; iEvent < ntotev; iEvent++) { printf("\n Event %i \n",iEvent); runLoader->GetEvent(iEvent); AliStack *stack = runLoader->Stack(); cluTree=dl->TreeR(); hitTree=dl->TreeH(); hitTree->SetBranchAddress("ITS",&hitList); // // read clusters for (int ilr=nlr;ilr--;) { TBranch* br = cluTree->GetBranch(Form("ITSRecPoints%d",ilr)); if (!br) {printf("Did not find cluster branch for lr %d\n",ilr); exit(1);} br->SetAddress(its->GetLayerActive(ilr)->GetClustersAddress()); } cluTree->GetEntry(0); its->ProcessClusters(); // // read hits for(Int_t iEnt=0;iEnt<hitTree->GetEntries();iEnt++){//entries loop of the hits hitTree->GetEntry(iEnt); int nh = hitList->GetEntries(); for(Int_t iHit=0; iHit<nh;iHit++){ AliITSMFTHit *pHit = (AliITSMFTHit*)hitList->At(iHit); int mcID = pHit->GetTrack(); //printf("MCid: %d %d %d Ch %d\n",iEnt,iHit, mcID, pHit->GetChip()); TClonesArray* harr = arrMCTracks.GetEntriesFast()>mcID ? (TClonesArray*)arrMCTracks.At(mcID) : 0; if (!harr) { harr = new TClonesArray("AliITSMFTHit"); // 1st encounter of the MC track arrMCTracks.AddAtAndExpand(harr,mcID); } // new ( (*harr)[harr->GetEntriesFast()] ) AliITSMFTHit(*pHit); } } // return; // // compare clusters and hits // printf(" tree entries: %lld\n",cluTree->GetEntries()); // for (int ilr=0;ilr<nlr;ilr++) { AliITSURecoLayer* lr = its->GetLayerActive(ilr); TClonesArray* clr = lr->GetClusters(); int nClu = clr->GetEntries(); //printf("Layer %d : %d clusters\n",ilr,nClu); // for (int icl=0;icl<nClu;icl++) { AliITSMFTClusterPix *cl = (AliITSMFTClusterPix*)clr->At(icl); int modID = cl->GetVolumeId(); //------------ check if this is a split cluster int sInL = modID - gm->GetFirstChipIndex(ilr); if (!cl->TestBit(kSplCheck)) { cl->SetBit(kSplCheck); // check if there is no other cluster with same label on this module AliITSURecoSens* sens = lr->GetSensor(sInL); int nclSn = sens->GetNClusters(); int offs = sens->GetFirstClusterId(); // printf("To check for %d (mod:%d) N=%d from %d\n",icl,modID,nclSn,offs); for (int ics=0;ics<nclSn;ics++) { AliITSMFTClusterPix* clusT = (AliITSMFTClusterPix*)lr->GetCluster(offs+ics); // access to clusters if (clusT==cl) continue; for (int ilb0=0;ilb0<3;ilb0++) { int lb0 = cl->GetLabel(ilb0); if (lb0<=-1) break; for (int ilb1=0;ilb1<3;ilb1++) { int lb1 = clusT->GetLabel(ilb1); if (lb1<=-1) break; if (lb1==lb0) { cl->SetBit(kSplit); clusT->SetBit(kSplit); /* printf("Discard clusters of module %d:\n",modID); cl->Print(); clusT->Print(); */ break; } } } } } //------------ const AliITSMFTSegmentationPix* segm = gm->GetSegmentation(ilr); // cl->GetGlobalXYZ(xyzClGloF); int clsize = cl->GetNPix(); for (int i=3;i--;) xyzClGlo[i] = xyzClGloF[i]; const TGeoHMatrix* mat = gm->GetMatrixSens(modID); if (!mat) {printf("failed to get matrix for module %d\n",cl->GetVolumeId());} mat->MasterToLocal(xyzClGlo,xyzClTr); // int col,row; segm->LocalToDet(xyzClTr[0],xyzClTr[2],row,col); // effective col/row nLab = 0; for (int il=0;il<3;il++) { if (cl->GetLabel(il)>=0) labels[nLab++] = cl->GetLabel(il); else break; } // find hit info for (int il=0;il<nLab;il++) { TClonesArray* htArr = (TClonesArray*)arrMCTracks.At(labels[il]); //printf("check %d/%d LB %d %p\n",il,nLab,labels[il],htArr); if (!htArr) {printf("did not find MChits for label %d ",labels[il]); cl->Print(); continue;} // int nh = htArr->GetEntriesFast(); AliITSMFTHit *pHit=0; for (int ih=nh;ih--;) { AliITSMFTHit* tHit = (AliITSMFTHit*)htArr->At(ih); if (tHit->GetChip()!=modID) continue; pHit = tHit; break; } if (!pHit) { printf("did not find MChit for label %d on module %d ",il,modID); cl->Print(); htArr->Print(); continue; } // pHit->GetPositionG(xg1,yg1,zg1); pHit->GetPositionG0(xg0,yg0,zg0,tg0); // double txyzH[3],gxyzH[3] = { (xg1+xg0)/2, (yg1+yg0)/2, (zg1+zg0)/2 }; mat->MasterToLocal(gxyzH,txyzH); double rcl = TMath::Sqrt(xyzClTr[0]*xyzClTr[0]+xyzClTr[1]*xyzClTr[1]); double rht = TMath::Sqrt(txyzH[0]*txyzH[0]+txyzH[1]*txyzH[1]); // //Angles determination pHit->GetPositionL(xExit,yExit,zExit,gm); pHit->GetPositionL0(xEnt,yEnt,zEnt,tof1,gm); Double_t dirHit[3]={(xExit-xEnt),(yExit-yEnt),(zExit-zEnt)}; /*double PG[3] = {(double)pHit->GetPXG(), (double)pHit->GetPYG(), (double)pHit->GetPZG()}; //Momentum at hit-point in Global Frame double PL[3]; if (TMath::Abs(PG[0])<10e-7 && TMath::Abs(PG[1])<10e-7) { pHit->Dump(); int lb = pHit->GetTrack(); stack->Particle(lb)->Print(); continue; } mat->MasterToLocalVect(PG,PL); //Momentum in local Frame //printf(">> %e %e %e %e %e %e\n",PG[0],PL[0],PG[1],PL[1],PG[2],PL[2]);*/ Double_t alpha1 = TMath::ACos(TMath::Abs(dirHit[1])/TMath::Sqrt(dirHit[0]*dirHit[0]+dirHit[1]*dirHit[1]+dirHit[2]*dirHit[2])); //Polar Angle Float_t alpha2 = (Float_t) alpha1; //convert to float cSum.alpha = alpha2; Double_t beta1; beta1 = TMath::ATan2(dirHit[0],dirHit[2]); //Azimuthal angle, values from -Pi to Pi Float_t beta2 = (Float_t) beta1; cSum.beta = beta2; if(ilr==0){ hL0A->Fill(alpha2); hL0B->Fill(beta2); } if(ilr==1){ hL1A->Fill(alpha2); hL1B->Fill(beta2); } if(ilr==2){ hL2A->Fill(alpha2); hL2B->Fill(beta2); } if(ilr==3){ hL3A->Fill(alpha2); hL3B->Fill(beta2); } if(ilr==4){ hL4A->Fill(alpha2); hL4B->Fill(beta2); } if(ilr==5){ hL5A->Fill(alpha2); hL5B->Fill(beta2); } if(ilr==6){ hL6A->Fill(alpha2); hL6B->Fill(beta2); } GetHistoClSize(clsize,kDR,&histoArr)->Fill((rht-rcl)*1e4); if (cl->TestBit(kSplit)) { if (col%2) GetHistoClSize(clsize,kDTXoddSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); else GetHistoClSize(clsize,kDTXevenSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); GetHistoClSize(clsize,kDTZSPL,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4); GetHistoClSize(0,kNPixSPL,&histoArr)->Fill(clsize); } if (col%2) GetHistoClSize(clsize,kDTXodd,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); else GetHistoClSize(clsize,kDTXeven,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); GetHistoClSize(clsize,kDTZ,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4); GetHistoClSize(0,kNPixAll,&histoArr)->Fill(clsize); // cSum.evID = iEvent; cSum.volID = cl->GetVolumeId(); cSum.lrID = ilr; cSum.clID = icl; cSum.nPix = cl->GetNPix(); cSum.nX = cl->GetNx(); cSum.nZ = cl->GetNz(); cSum.q = cl->GetQ(); cSum.split = cl->TestBit(kSplit); cSum.dX = (txyzH[0]-xyzClTr[0])*1e4; cSum.dY = (txyzH[1]-xyzClTr[1])*1e4; cSum.dZ = (txyzH[2]-xyzClTr[2])*1e4; cSum.nRowPatt = cl-> GetPatternRowSpan(); cSum.nColPatt = cl-> GetPatternColSpan(); DB.AccountTopology(*cl, cSum.dX, cSum.dZ, cSum.alpha, cSum.beta); GetHistoClSize(clsize,kDR,&histoArr)->Fill((rht-rcl)*1e4); if (cl->TestBit(kSplit)) { if (col%2) GetHistoClSize(clsize,kDTXoddSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); else GetHistoClSize(clsize,kDTXevenSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); GetHistoClSize(clsize,kDTZSPL,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4); GetHistoClSize(0,kNPixSPL,&histoArr)->Fill(clsize); } if (col%2) GetHistoClSize(clsize,kDTXodd,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); else GetHistoClSize(clsize,kDTXeven,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4); GetHistoClSize(clsize,kDTZ,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4); GetHistoClSize(0,kNPixAll,&histoArr)->Fill(clsize); // cSum.evID = iEvent; cSum.volID = cl->GetVolumeId(); cSum.lrID = ilr; cSum.clID = icl; cSum.nPix = cl->GetNPix(); cSum.nX = cl->GetNx(); cSum.nZ = cl->GetNz(); cSum.q = cl->GetQ(); cSum.split = cl->TestBit(kSplit); cSum.dX = (txyzH[0]-xyzClTr[0])*1e4; cSum.dY = (txyzH[1]-xyzClTr[1])*1e4; cSum.dZ = (txyzH[2]-xyzClTr[2])*1e4; cSum.nRowPatt = cl-> GetPatternRowSpan(); cSum.nColPatt = cl-> GetPatternColSpan(); int label = cl->GetLabel(0); TParticle* part = 0; if (label>=0 && (part=stack->Particle(label)) ) { cSum.pdg = part->GetPdgCode(); cSum.eta = part->Eta(); cSum.pt = part->Pt(); cSum.phi = part->Phi(); cSum.prim = stack->IsPhysicalPrimary(label); } cSum.ntr = 0; for (int ilb=0;ilb<3;ilb++) if (cl->GetLabel(ilb)>=0) cSum.ntr++; for (int i=0;i<3;i++) cSum.xyz[i] = xyzClGloF[i]; // trOut->Fill(); /* if (clsize==5) { printf("\nL%d(%c) Mod%d, Cl:%d | %+5.1f %+5.1f (%d/%d)|H:%e %e %e | C:%e %e %e\n",ilr,cl->TestBit(kSplit) ? 'S':'N', modID,icl,(txyzH[0]-xyzClTr[0])*1e4,(txyzH[2]-xyzClTr[2])*1e4, row,col, gxyzH[0],gxyzH[1],gxyzH[2],xyzClGlo[0],xyzClGlo[1],xyzClGlo[2]); cl->Print(); pHit->Print(); // double a0,b0,c0,a1,b1,c1,e0; pHit->GetPositionL0(a0,b0,c0,e0); pHit->GetPositionL(a1,b1,c1); float cloc[3]; cl->GetLocalXYZ(cloc); printf("LocH: %e %e %e | %e %e %e\n",a0,b0,c0,a1,b1,c1); printf("LocC: %e %e %e | %e %e %e\n",cloc[0],cloc[1],cloc[2],xyzClTr[0],xyzClTr[1],xyzClTr[2]); } */ // } } } // layerClus.Clear(); // arrMCTracks.Delete(); }//event loop // DB.EndAndSort(); DB.SetThresholdCumulative(0.95); cout << "Over threshold: : "<< DB.GetOverThr()<<endl; DB.Grouping(10,10); DB.PrintDB("Database1.txt"); flOut->cd(); trOut->Write(); delete trOut; flOut->Close(); flOut->Delete(); DrawReport("clinfo.ps",&histoArr); TFile* flDB = TFile::Open("TopologyDatabase.root", "recreate"); flDB->WriteObject(&DB,"DB","kSingleKey"); flDB->Close(); delete flDB; TCanvas* cnv123 = new TCanvas("cnv123","cnv123"); cnv123->Divide(1,2); cnv123->Print("anglesdistr.pdf["); cnv123->cd(1); hL0A->Draw(); cnv123->cd(2); hL0B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL1A->Draw(); cnv123->cd(2); hL1B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL2A->Draw(); cnv123->cd(2); hL2B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL3A->Draw(); cnv123->cd(2); hL3B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL4A->Draw(); cnv123->cd(2); hL4B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL5A->Draw(); cnv123->cd(2); hL5B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->cd(1); hL6A->Draw(); cnv123->cd(2); hL6B->Draw(); cnv123->Print("anglesdistr.pdf"); cnv123->Print("anglesdistr.pdf]"); // }
TString parseTitle(TString l, unsigned int level=10){ // setup isobar dictionary key->tex map<TString, TString> isobars; isobars["pi+" ] = "\\pi^{+}"; isobars["pi-" ] = "\\pi^{-}"; isobars["pi+-" ] = "\\pi^{\\pm}"; isobars["pi-+" ] = "\\pi^{\\pm}"; isobars["sigma" ] = "\\sigma"; isobars["rho770" ] = "\\rho(770)"; isobars["a11269" ] = "a_{1}(1269)"; isobars["a21320" ] = "a_{2}(1320)"; isobars["rho1450" ] = "\\rho(1450)"; isobars["rho1600" ] = "\\rho(1600)"; isobars["rho1700" ] = "\\rho(1700)"; isobars["pi1300" ] = "\\pi(1300)"; isobars["pi1800" ] = "\\pi(1800)"; isobars["pi21670" ] = "\\pi_2(1670)"; isobars["f01370" ] = "f_{0}(1370)"; isobars["f01500" ] = "f_{0}(1500)"; isobars["f01700" ] = "f_{0}(1700)"; isobars["f11285" ] = "f_{1}(1285)"; isobars["f11420" ] = "f_{1}(1420)"; isobars["b11235" ] = "b_{1}(1235)"; isobars["b11800" ] = "b_{1}(1800)"; isobars["b11500" ] = "b_{1}(1500)"; isobars["f21270" ] = "f_{2}(1270)"; isobars["f21950" ] = "f_{2}(1950)"; isobars["f21565" ] = "f_{2}(1565)"; isobars["f21270" ] = "f_{2}(1270)"; isobars["f22010" ] = "f_{2}(2010)"; isobars["f11420" ] = "f_{1}(1420)"; isobars["eta1440" ] = "\\eta(1420)"; isobars["eta11600" ] = "\\eta_{1}(1600)"; isobars["eta21645"] = "\\eta_{2}(1645)"; isobars["rho31690"] = "\\rho_{3(1690)"; // remove file extension l.Remove(l.Length() - 4); // extract X quantum numbers const TString head = l(0, 7); const TString I = head(0, 1); const TString G = head(1, 1); const TString J = head(2, 1); const TString P = head(3, 1); const TString C = head(4, 1); const TString M = head(5, 1); const TString refl = head(6, 1); l.Remove(0, 7); // print X quantum numbers stringstream res; res << I << "^{" << G <<"}(" << J << "^{" << P << C << "}" << M << "^{" << refl << "})"; // tokenize input TObjArray* tokens = l.Tokenize("_="); int mode = 0; unsigned int counter=0; for (int i = 0; i < tokens->GetEntries(); ++i) { const TString token = ((TObjString*)tokens->At(i))->GetString(); cerr << " " << mode << ": '" << token << "'" << endl; if (mode == 0) { // isobar mode if (isobars.find(token) != isobars.end()) res << isobars[token]; else res << token; res << " "; // check which mode to switch to depending whether we get _ or = l.Remove(0, token.Length()); if (l(0, 1) == "_") mode = 1; else mode = 2; } else if (mode == 1) { // ls mode if (token.Length() == 1) // only l res << "[" << token << "] "; else res << "\\left[#splitline{" << token(0, 1) << "}{" << token(1, 1) << "}\\right]"; l.Remove(0, token.Length()); mode = 0; } else if (mode == 2) { if(level<=counter) break; ++counter; res << "\\rightarrow "; if (isobars.find(token) != isobars.end()) res << isobars[token]; else res << token; res << " "; l.Remove(0, token.Length()); if (l(0, 1) == "_" ) mode = 1; else mode = 2; } l.Remove(0, 1); // remove delimiter } res; tokens->Delete(); delete tokens; TString result(res.str().c_str()); return result; }