#include "PndMvdConvertApv.h" #include "PndMvdApvHit.h" #include "PndMvdDigiStrip.h" #include "TString.h" #include #include #include using namespace std; // ----- Constructor -------------------------------------------- PndMvdConvertApv::PndMvdConvertApv(const TString& CalibFileName, const TString& HitFileName) { fFake=false; cout<<"Scan HitFile..."< modules; // module detec if(!hitfile) { cout<<"Hitfile not found!"<>c; if (hitfile.eof()) break; if (!isdigit(c)) { char str[256]; hitfile.getline(str,256); continue; } hitfile.putback(c); int triggID,fe,ts,frame,ch,l, moduleID; long int ev; double q; hitfile >> ev >> moduleID >> triggID >> frame >> fe >> ts >> ch >> q >> l; if (ev!=old_event) { n=ev; // count event ModulChecker(moduleID, modules); // check module and may mind old_event=ev; } } hitfile.close(); cout<& modules) { for(Int_t i=0;i modules) { std::ifstream calibfile(CalibFileName); if(!calibfile) { cout<<"Calibration file not found"<>c; if (calibfile.eof()) break; if (!isdigit(c)) { char str[256]; calibfile.getline(str,256); continue; } calibfile.putback(c); int moduleID, feID, channel; double value; calibfile >> moduleID >> feID >> channel >> value; for(int vec=0;vec PndMvdConvertApv::Calc(std::vector hitlist) { std::vector result; TString detPath=""; for(Int_t hitnumber=0;hitnumber e !!! }else{ if (fCalibPars[hitlist[hitnumber].GetModuleID()][hitlist[hitnumber].GetFeID()].size()) { if (fCalibPars[hitlist[hitnumber].GetModuleID()][hitlist[hitnumber].GetFeID()][hitlist[hitnumber].GetChannel()]) { q=fCalibPars[hitlist[hitnumber].GetModuleID()][hitlist[hitnumber].GetFeID()][hitlist[hitnumber].GetChannel()]*(hitlist[hitnumber].GetADC())*1000.; // in electrons } } } //FIXME: Welche DetId braucht das Framework? "2" fuer Strips? //TODO: Detektornamen mit Geometrie sinnvoll verheiraten. // string detPath="SiliconTestStation_1/DummysensorAss_0/"; // detPath+="Module"; detPath="Module"; Int_t modId=-1; if(fFake) { if(fTopModuleID==hitlist[hitnumber].GetModuleID() || fBottomModuleID==hitlist[hitnumber].GetModuleID()) modId = 1; if(fBottomModuleID==hitlist[hitnumber].GetModuleID()) hitlist[hitnumber].SetFeID(hitlist[hitnumber].GetFeID()+3); }else{ modId = hitlist[hitnumber].GetModuleID(); } detPath+=modId; detPath+="Rect"; // std::cout<FindVolumeFast(detPath); if(0!=Vol) { // std::cout<GetName()<GetNode(-1)->cd(); detPath="/SiliconTestStation_1/DummysensorAss_0/"; detPath+=Vol->GetName(); detPath+="_0"; gGeoManager->cd(detPath.Data()); } else { // std::cout<<" -E- PndMvdConvertApv::Calc(): "<GetPath()<GetName(); // detPath = Vol->GetName(); // std::cout << "write Digi with "<< detPath.Data()<<" ( "<GetID(detPath)<<" )"<GetID(detPath), hitlist[hitnumber].GetFeID(), hitlist[hitnumber].GetChannel(), hitlist[hitnumber].GetTimestamp(), q/*/1000/1000*/); result.push_back(DigiHit); }else{ PndMvdDigiStrip DigiHit(hitlist[hitnumber].GetEventID(), hitlist[hitnumber].GetModuleID(), fGeoH->GetID(detPath), hitlist[hitnumber].GetFeID(), hitlist[hitnumber].GetChannel(), hitlist[hitnumber].GetTimestamp(), q/*/1000/1000*/); result.push_back(DigiHit); } } return result; } // ----- Returns the number of events in the hit file -------------------------------------------- long int PndMvdConvertApv::GetNofEvents() { return fNofEvents; } // ----- read the next event from hitfile -------------------------------------------- std::vector PndMvdConvertApv::ReadNext() { std::vector digiList; bool work=true; while (!fDataFile.eof() && work) // read data { char c; fDataFile>>c; if (fDataFile.eof()) break; if (!isdigit(c)) { char str[256]; fDataFile.getline(str,256); continue; } fDataFile.putback(c); int triggID,fe,ts,frame,ch,l,moduleID; double q; long int ev; fDataFile >> ev >> moduleID >> fe >> triggID >> ts >> frame >> ch >> q >> l; if ((ev-1)==fEvent) { if(fhitlist.size()>20) fhitlist.clear(); digiList = Calc(fhitlist); fhitlist.clear(); fEvent=ev; work=false; } PndMvdApvHit Hit(ev, moduleID, fe, triggID, ts, frame, ch, q, l); fhitlist.push_back(Hit); } if(!(fEvent%10000)) cout<<"[ "<<(fEvent*100)/fNofEvents<<" %] "< PndMvdConvertApv::ReadAll() { std::vector result; while(fEvent!=fNofEvents) { std::vector dummy=ReadNext(); for(int i=0;i