30 #include "AliRawReader.h" 37 #include "AliRawEventHeaderBase.h" 39 #include <TClonesArray.h> 44 #include <TStopwatch.h> 46 #include <TPluginManager.h> 75 return TString::Format(
"%s%sFMD%d%c[%02d,%03d]",
77 (full ?
"/" :
""), det, ring, sec, str);
97 return TString::Format(
"%s%sFMD%d%c[%02d]",
99 (full ?
"/" :
""), det, ring, sec);
118 return TString::Format(
"%s%sFMD%d%c",
120 (full ?
"/" :
""), det, ring);
138 return TString::Format(
"%s%sFMD%d",
140 (full ?
":/" :
""), det);
161 for(Int_t i = 0; i< 3;i++) {
186 for(Int_t i = 0; i< 3;i++) {
215 if (!appendRun ||
fRunno == 0) {
216 Rotate(
"conditions.csv", 3);
224 Error(
"OpenFiles",
"Failed to open conditions file");
245 if (nEvents <= 1)
return false;
248 for (Int_t i = 0; i < 3; i++) {
260 if (nEvents <= 1)
return 0;
264 for (Int_t i = 0; i < 3; i++) {
269 return UShort_t(total > 0 ? (got * 100.) / total : 0);
282 fRunno = reader->GetRunNumber();
284 TString dateRunNumber(gSystem->Getenv(
"DATE_RUN_NUMBER"));
285 if (!dateRunNumber.IsNull())
fRunno = dateRunNumber.Atoll();
293 TClonesArray* digitArray =
new TClonesArray(
"AliFMDDigit",0);
296 Bool_t sodread = kFALSE;
297 for(Int_t i=0;i<3;i++) {
298 if (!reader->NextEvent()) {
300 AliWarning(Form(
"Failed to read the %d%s event",
301 i+1, (i == 0 ?
"st" : (i == 1 ?
"nd" :
"rd"))));
305 UInt_t eventType = reader->GetType();
306 if(eventType == AliRawEventHeaderBase::kStartOfData ||
307 eventType == AliRawEventHeaderBase::kFormatError) {
329 int lastProgress = 0;
337 if(!reader->NextEvent()) { n--;
continue; }
338 UInt_t eventType = reader->GetType();
339 AliDebugF(3,
"Event type is %d", eventType);
340 if(eventType != AliRawEventHeaderBase::kPhysicsEvent) { n--;
continue; }
342 Bool_t seen[] = {
false,
false,
false };
347 for(Int_t i = 0; i<digitArray->GetEntriesFast();i++) {
357 for(Int_t i = 0; i< 3;i++)
363 AliDebugF(5,
"%9d: %6d/%6d %6d/%6d %6d/%6d", n,
369 if (progress <= lastProgress)
continue;
370 lastProgress = progress;
371 std::cout <<
"Progress: " << lastProgress <<
" / 100 " << std::endl;
382 for(UShort_t det=1;det<=3;det++) {
384 std::cout <<
"FMD" << det << std::endl;
385 UShort_t firstRing = (det == 1 ? 1 : 0);
386 for (UShort_t ir = firstRing; ir < 2; ir++) {
387 Char_t ring = (ir == 0 ?
'O' :
'I');
388 UShort_t nsec = (ir == 0 ? 40 : 20);
389 UShort_t nstr = (ir == 0 ? 256 : 512);
393 std::cout <<
" Ring " << ring <<
": " << std::flush;
394 for(UShort_t sec =0; sec < nsec; sec++) {
395 for(UShort_t strip = 0; strip < nstr; strip++) {
398 std::cout <<
'.' << std::flush;
402 std::cout <<
"done" << std::endl;
416 AliInfo(
"Closing diagnostics file - please wait ...");
430 TDirectory* savDir = gDirectory;
431 Bool_t owners =
true;
433 for(UShort_t det=1;det<=3;det++) {
434 Array* detArray =
new Array(det == 1 ? 1 : 2);
435 detArray->SetOwner(owners);
439 TDirectory* detDir = 0;
445 UShort_t FirstRing = (det == 1 ? 1 : 0);
446 for (UShort_t ir = FirstRing; ir < 2; ir++) {
447 Char_t ring = (ir == 0 ?
'O' :
'I');
448 UShort_t nsec = (ir == 0 ? 40 : 20);
449 UShort_t nstr = (ir == 0 ? 256 : 512);
451 ringArray->SetOwner(owners);
453 ringArray->ResetBit(TObject::kMustCleanup);
454 detArray->AddAtAndExpand(ringArray,ir);
457 TDirectory* ringDir = 0;
460 ringDir = detDir->mkdir(
GetRingPath(det,ring, kFALSE));
464 for(UShort_t sec =0; sec < nsec; sec++) {
466 sectorArray->SetOwner(owners);
468 sectorArray->ResetBit(TObject::kMustCleanup);
469 ringArray->AddAtAndExpand(sectorArray,sec);
472 TDirectory* secDir = 0;
475 secDir = ringDir->mkdir(
GetSectorPath(det, ring, sec, kFALSE));
478 for(UShort_t strip = 0; strip < nstr; strip++) {
481 secDir->mkdir(
GetStripPath(det, ring, sec, strip, kFALSE));
484 stripArray->SetOwner(owners);
485 stripArray->SetName(
GetStripPath(det, ring, sec, strip,
false));
486 stripArray->ResetBit(TObject::kMustCleanup);
487 sectorArray->AddAtAndExpand(stripArray, strip);
505 <<
" at " << now.AsString() << std::endl;
523 for(UShort_t det=1; det<=3;det++) {
527 UShort_t firstring = (det == 1 ? 1 : 0);
528 for(UShort_t iring = firstring; iring <=1;iring++) {
529 Char_t ring = (iring == 1 ?
'I' :
'O');
530 for(UShort_t board =0 ; board <=1; board++) {
545 for(UShort_t det=1; det<=3;det++) {
549 UShort_t firstring = (det == 1 ? 1 : 0);
550 for(UShort_t iring = firstring; iring <=1;iring++) {
551 Char_t ring = (iring == 1 ?
'I' :
'O');
552 for(UShort_t board =0 ; board <=1; board++) {
577 UShort_t board)
const 588 UShort_t iring = (ring ==
'I' ? 1 : 0);
590 Int_t index = (((det-1) << 2) | (iring << 1) | (board << 0));
613 TString testName(Form(
"%s.%d", base, max));
614 if (!gSystem->AccessPathName(testName.Data()))
615 gSystem->Unlink(testName.Data());
618 for (
int i = max-1; i >= 1; i--) {
619 testName = Form(
"%s.%d", base, i);
620 if (!gSystem->AccessPathName(testName.Data())) {
621 TString newName(Form(
"%s.%d", base, i+1));
622 gSystem->Rename(testName.Data(), newName.Data());
627 testName = Form(
"%s", base);
628 if (!gSystem->AccessPathName(testName.Data())){
629 TString newName(Form(
"%s.%d", base, 1));
630 gSystem->Rename(testName.Data(), newName.Data());
637 UShort_t d, Char_t r)
648 Int_t nX = ((d == 1 || r ==
'I' || r ==
'i') ? 20 : 40);
649 Int_t nY = ((d == 1 || r ==
'I' || r ==
'i') ? 512 : 256);
651 TString n = TString::Format(
"%sFMD%d%c", prefix, d, r);
652 TString t = TString::Format(
"%s for FMD%d%c", title, d, r);
653 TH2* ret =
new TH2F(n, t, nX, -0.5, nX-0.5, nY, -0.5, nY-0.5);
654 ret->SetXTitle(
"Sector #");
655 ret->SetYTitle(
"Strip #");
656 ret->SetDirectory(0);
666 if (det < 1 || det > 3) {
667 AliErrorF(
"Detector index %d out of bounds", det);
676 Int_t idx = (ring ==
'O' || ring ==
'o' ? 0 : 1);
678 if (!array)
return 0;
679 array =
static_cast<Array*
>(array->At(idx));
680 if (!array)
AliErrorF(
"No ring array for FMD%d%c (%d)", det, ring, idx);
688 if (!array)
return 0;
689 array =
static_cast<Array*
>(array->At(sector));
690 if (!array)
AliErrorF(
"No sector array for FMD%d%c[%02d]", det, ring, sector);
696 UShort_t sector, UShort_t strip)
699 if (!array)
return 0;
700 array =
static_cast<Array*
>(array->At(strip));
701 if (!array)
AliErrorF(
"No strip array for FMD%d%c[%02d,%03d]",
702 det, ring, sector, strip);
723 gROOT->GetPluginManager()->AddHandler(
"TVirtualStreamerInfo",
728 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
"Minuit",
731 "TMinuitMinimizer(const char *)");
732 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
734 "ROOT::Math::GSLMinimizer",
736 "GSLMinimizer(const char *)");
737 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
739 "ROOT::Math::GSLNLSMinimizer",
740 "MathMore",
"GSLNLSMinimizer(int)");
741 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
743 "ROOT::Math::GSLSimAnMinimizer",
745 "GSLSimAnMinimizer(int)");
746 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
750 "TLinearMinimizer(const char *)");
751 gROOT->GetPluginManager()->AddHandler(
"ROOT::Math::Minimizer",
755 "TFumiliMinimizer(int)");
761 o <<
"Usage: " << progname <<
" SOURCE [OPTIONS]\n\n" 763 <<
" -h,--help Show this help\n" 764 <<
" -d,--diagnostics[=FILE] Write diagnostics to file\n" 765 <<
" -D,--debug=LEVEL Set the debug level\n" 766 <<
" -A,--all Try to get data from all detectors (" <<
fAll <<
")\n" 767 <<
" -F,--fast Fast exit (" <<
fFast <<
")\n" 768 <<
" -U,--upload Upload to FXS (" <<
fUpload <<
")\n" 769 <<
" -R,--append Append run # to filename (" <<
fAppendRun <<
")\n" 770 <<
" -Z,--own Use custom upload (" <<
fOwnUpload <<
")\n" 772 <<
"SOURCE is one of\n" 773 <<
" * FILE.raw Raw data file\n" 774 <<
" * FILE.root ROOT'ified raw data file\n" 775 <<
" * collection://FILE.root Event list in a ROOT file\n" 776 <<
" * collection://FILE File containing list of ROOT files\n" 777 <<
" * ^FMD Monitor source\n" 778 <<
"There are other options too. Check the AliRawReader docs\n" 784 Bool_t ExtractValue(
const TString& arg, TString& val)
787 Int_t eq = arg.Index(
"=");
788 if (eq == kNPOS)
return false;
790 val = arg(eq+1, arg.Length()-eq-1);
806 for (
int i = 1; i < argc; i++) {
807 TString arg(argv[i]);
808 Bool_t badOption =
false;
813 if (arg.EqualTo(
"--help")) help =
true;
814 else if (arg.BeginsWith(
"--debug")) {
815 if (ExtractValue(arg, val))
816 debugLevel = val.Atoi();
818 else if (arg.BeginsWith(
"--diagnostics")) {
820 if (ExtractValue(arg, val))
823 else if (arg.EqualTo(
"--all"))
fAll = !
fAll;
824 else if (arg.EqualTo(
"--fast"))
fFast = !
fFast;
828 else badOption =
true;
831 TString next(i < argc-1 ? argv[i+1] :
"");
833 case 'h': help =
true;
break;
835 if (!next.IsNull() && next[0] !=
'-') {
841 if (!next.IsNull() && next[0] !=
'-') {
842 debugLevel = next.Atoi();
851 default: badOption =
true;
855 std::cerr << argv[0] <<
": Unknown option " << argv[i]
872 if (source.IsNull()) {
873 std::cerr <<
"No source given" << std::endl;
890 if (!reader)
return 0;
891 fReader = AliRawReader::Create(source);
893 std::cerr <<
"Failed to make raw reader for source \"" << source
894 <<
"\"" << std::endl;
908 TString dateRunNumber(gSystem->Getenv(
"DATE_RUN_NUMBER"));
909 if (!dateRunNumber.IsNull())
910 run = dateRunNumber.Atoll();
937 AliFMDBaseDA::_Array::~_Array()
virtual void AddSectorSummary(Array *, UShort_t, Char_t, UShort_t, UShort_t)
void WriteToFile(std::ostream &outFile, Bool_t *detectors=0)
self initialized array, used for adding constraints
virtual void InitContainer(TDirectory *dir)
TFile * Open(const char *filename, Long64_t &nevents)
Bool_t Exec(AliFMDBaseDA &da)
virtual void FillChannels(AliFMDDigit *)
Int_t GetHalfringIndex(UShort_t, Char_t, UShort_t) const
virtual void Terminate(TFile *)
std::ofstream fConditionsFile
Int_t GetCurrentEvent() const
Array * GetDetectorArray(UShort_t det)
void Rotate(const char *base, int max) const
virtual void FinishEvent()
std::ofstream fOutputFile
This class is a singleton that handles various parameters of the FMD detectors. This class reads from...
Manager of FMD parameters.
Class to read ALTRO formated raw data from an AliRawReader object.
Per digitizer card pulser calibration.
Array * GetRingArray(UShort_t det, Char_t ring)
TString GetRingPath(UShort_t det, Char_t ring, Bool_t full=kTRUE) const
virtual void AddChannelContainer(Array *, UShort_t, Char_t, UShort_t, UShort_t)
Int_t Init(int argc, char **argv, Bool_t reader=true)
#define AliInfoF(message,...)
virtual UShort_t GetProgress(Int_t nEvent) const
Bool_t Run(AliRawReader *fmdReader, Bool_t appendRun, Bool_t isBase=false)
void SetDiagnosticsFilename(const TString &f)
Per digitizer card pulser calibration.
TString GetSectorPath(UShort_t det, Char_t ring, UShort_t sec, Bool_t full=kTRUE) const
TString GetDetectorPath(UShort_t det, Bool_t full=kTRUE) const
#define AliWarning(message)
Per digitizer card pulser calibration.
void UseCompleteHeader(Bool_t yes=kTRUE)
void WriteConditionsData(AliFMDRawReader *fmdReader)
TString GetStripPath(UShort_t det, Char_t ring, UShort_t sec, UShort_t str, Bool_t full=kTRUE) const
TH2 * MakeSummaryHistogram(const char *prefix, const char *title, UShort_t det, Char_t ring)
void SetSaveDiagnostics(Bool_t save)
static const char * GetConditionsShuttleID()
virtual Bool_t ReadAdcs(TClonesArray *array)
UInt_t fNEventsPerDetector[3]
virtual Bool_t ReadSODevent(AliFMDCalibSampleRate *samplerate, AliFMDCalibStripRange *striprange, TArrayS &pulseSize, TArrayS &pulseLength, Bool_t *detectors=0)
static AliFMDParameters * Instance()
static void SetModuleDebugLevel(const char *module, Int_t level)
static void EnableDebug(Bool_t enabled)
TString fDiagnosticsFilename
void SetTryAll(Bool_t all=true)
Per digitizer card pulser calibration.
void WriteToFile(std::ostream &, Bool_t *detectors=0)
virtual void CloseFiles()
Int_t GetRequiredEvents() const
UShort_t Detector() const
virtual Bool_t OpenFiles(Bool_t appendRun=false)
virtual void WriteHeaderToFile()
static Int_t GetDebugLevel(const char *module, const char *className)
virtual void MakeSummary(UShort_t, Char_t)
Array * GetSectorArray(UShort_t det, Char_t ring, UShort_t sector)
#define AliErrorF(message,...)
#define AliDebugF(logLevel, format,...)
Array * GetStripArray(UShort_t det, Char_t ring, UShort_t sector, UShort_t strip)
UShort_t Init(Bool_t forceReInit=kFALSE, UInt_t what=kAll)
void ShowUsage(std::ostream &o, const char *progname)
void SetCurrentEvent(Int_t currentEvent)
virtual Bool_t HaveEnough(Int_t nEvent) const
virtual void Analyse(UShort_t, Char_t, UShort_t, UShort_t)